On Thu, Aug 12, 2010 at 12:15 PM, Cui, Hunk <[email protected]> wrote: > Hi, Alex, > >> > In xf86-video-geode: >> > lx_video.c -> LXCopyPlanar function, some codes make me confuse, >> > >> > ( >> > http://cgit.freedesktop.org/xorg/driver/xf86-video-geode/tree/src/lx_vid >> > eo.c#n224 ) >> > YSrcPitch = (width + 3) & ~3; >> > YDstPitch = (width + 31) & ~31; >> > >> > UVSrcPitch = ((width >> 1) + 3) & ~3; >> > UVDstPitch = ((width >> 1) + 15) & ~15; >> > >> > USrcOffset = YSrcPitch * height; >> > VSrcOffset = USrcOffset + (UVSrcPitch * (height >> 1)); >> > >> > UDstOffset = YDstPitch * height; >> > VDstOffset = UDstOffset + (UVDstPitch * (height >> 1)); >> > >> > size = YDstPitch * height; >> > size += UVDstPitch * height; >> > >> > What is the formula for reference? >> >> See http://fourcc.org/ >> >> > How to define and calculate the YDstPitch and UVDstPitch? >> >> Planar formats store the YUV data in separate planes rather than >> packed as pixel tuples. Depending on the format the UV portion has >> half the resolution as the Y component. > > Could you give me some more example to explain this? Confuse about > "UVDstPitch = ((width >> 1) + 15) & ~15;" > Why the UV portion need to the half of the resolution as the Y portion?
That's because (some) YUV formats have 1 U and 1 V pixel per 4 Y pixels, it's a way to save space. The grayscale is the most important part, and the colors are lower resolution (this gives an effective 12 bits per pixel). > > Thanks, > Hunk Cui > > _______________________________________________ > [email protected]: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: http://lists.x.org/mailman/listinfo/xorg-devel > -- Far away from the primal instinct, the song seems to fade away, the river get wider between your thoughts and the things we do and say. _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
