Timothy B. Terriberry
tterribe at vt.edu
Thu Dec 9 00:21:26 PST 2004
Alen Ladavac wrote:
> Here are some usefull references:
> a) checkout http://www.fourcc.org/yuv.php
> b) search for "Video Rendering with 8-Bit YUV Formats" on
> To help you filter the information you are interested in, the format that
> theora uses internally is officially called YV12.
> That's regarding the color format. I hope you understand the image layout
> tricks with negative strides etc.
I would ignore FOURCC codes altogether. They both overspecify things
like memory layout that do not apply to the libtheora API and
underspecify things like chroma siting locations, RGB primaries, etc.
Step 1 to understanding video colorspaces: there is no such space as YUV.
Alen nicely proves the point of why you should never use the term by
suggesting Theora uses YV12. Theora uses Y'CbCr, however most (but not
all) interpretations of YV12 really mean Y'CrCb, with the chroma
components swapped. Unlike U and V, Cb and Cr have an unambiguous
interpretation. In the current libtheora API, U corresponds to Cb and V
corresponds to Cr (future API revisions will hopefully fix this to refer
to them as Cb and Cr directly).
Step 2: There is more than one RGB space.
The red, green, and blue primaries in your television are not the same
as in your monitor. They're not even the same between NTSC and PAL
televisions. Know what your target is and use the right conversion.
Having said that, Chapter 4 of the Theora spec
(http://www.theora.org/doc/Theora_I_spec.pdf) provides explicit detail
on the exact colorspaces Theora supports, and how to convert between them.
More information about the Theora-dev