Auravision
- FourCCs: AURA, AUR2
- Company: Auravision
- Samples:
According to various codec lists, AURA is a YUV 4:1:1 codec while AUR2 is YUV 4:2:2. The payload of an AURA frame begins with the 6 ASCII bytes 'YUV411'.
Hypothesis
--Multimedia Mike 02:42, 10 December 2008 (EST)
Any given AURA sample contains frames of a constant size. For 160x120 files, the frames are each 14448 bytes. For 240x180 files, the frames are each 32448 bytes. In YUV 4:1:1 data, a 4x4 block consisting of 16 pixels assigns a Y sample to each pixel while all 16 pixels share a U and a V sample. If each sample is 1 byte, the size of a raw YUV 4:1:1 frame is (width * height * 18) / 16. This formula does not reconcile with AURA frames.
However, if each of the Y samples is only coded with 5 bits, the observed frame sizes come close, with 48 extra bytes. Indeed, the frames do appear to begin with a 48-byte header. So the size of the frame is calculated as
p = width * height 48 + (p * 5/8) + (p/16) * 2
Testing this hypothesis might require trying several different bit reading methods.
Hypothesis 2
--Kostya 06:07, 10 December 2008 (EST)
first 16 bytes - some rubbish next 16 bytes - quantization table for luma next 16 bytes - quantization table for chroma
the rest is packed into nibbles somehow with actual value obtained via table
Hypothesis 3
--Multimedia Mike 14:17, 10 December 2008 (EST)
I move to strike my earlier hypothesis (though I'm amazed that the numbers worked out). I was confusing YUV 4:1:1 with YUV 4:1:0. YUV 4:1:1 carries as much chroma information as YUV 4:2:2, just in a different orientation. Thus, there are 1/4 as many chroma samples as luma samples, rather than 1/16.
I support Kostya's hypothesis. The revised size calculation would be:
p = width * height 48 (bytes) + ( p (luma samples) * 4 (bits/luma sample) / 8 (bits/byte) ) + ( p/4 (chroma samples/chroma plane) * 4 (bits/chroma sample) / 8 (bits/byte) ) * 2 (chroma planes)
Which reduces to:
total bytes/frame = 48 + (3 * p / 4)