[Theora] problems understanding yuv_buffer format

illiminable ogg at illiminable.com
Tue Sep 27 13:46:38 PDT 2005


----- Original Message ----- 
From: "David Kment" <davidkment at web.de>
To: <theora at xiph.org>
Sent: Wednesday, September 28, 2005 3:59 AM
Subject: [Theora] problems understanding yuv_buffer format


> hi folks!
>
> once again i am trying to decode a yuv_buffer to a 24 bit RGB buffer.
> last time nobody seemed willing to tell me how to do this, so i am trying 
> again.

Type...

convert yuv to rgb into google and press i'm feeling lucky.

Also in here... if you look through the code here... you'll find various 
conversions... primarily going RGB to YUV... but it also has diagrams of the 
memory layouts of most of the different yuv formats in comments.

http://svn.xiph.org/trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraEncoder/TheoraEncodeInputPin.cpp

> i try to make my questions more simple. what i need to know is:
>
> how many bytes are in each y, u, v array?

Depends on the type of YUV... in theora's yuv_buffer, almost always 
stride*height in y and stride*height/4 in each of u and v... look for info 
on YV12... it's the fourcc format most similar to what theora uses.

> what for are these strides?

A stride is the width of a contiguous block of memory... eg if the width was 
7... it might be advantageous to have the stride be 8 for various reasons... 
so the extra byte is not used... basically the stride is the memory distance 
between the start of each line.

> what i want to achieve is getting the Y, U and V data for each single 
> pixel, so i can convert it to one R, G and B value.
>

Well because of the way it's sampled, there will be a Y sample for every 
pixel... but each U and V will be shared by four pixels

Zen. 




More information about the Theora mailing list