[Libav-user] Help : YUV value for a macroblock in a yuv240p frame
Simon Brown
simon.k.brown at gmail.com
Tue Apr 9 18:44:33 EEST 2019
>
>
> Thanks,
> If I understand what you said, I have to proccess like this :
>
> //Declaration of yuv arrays
> uint16_t yval[mb_height * mb_width][256];
> uint16_t uval[mb_height * mb_width][256];
> uint16_t vval[mb_height * mb_width][256];
>
> for(int mby=0; mby<mb_height; mby++)
> {
> for(int mbx=0; mbx <mb_width ;mbx++)
> {
> //Now for this 16x16 macroblock
> for(int y=0; y<16;y++)
> {
> for(int x=0; x<16;x++)
> {
> yval[mby*mb_width + mbx][y*16+x] =
> data[0][linesize[0]*y*16+x]; or yval[mby*mb_width + mbx][y*16+x] =
> data[0][y*16+x]???
> uval[mby*mb_width + mbx][(y/2)*16+x/2] =
> data[1][linesize[1]*(y/2)*16+x/2];
> uval[mby*mb_width + mbx][(y/2)*16+x/2] =
> data[2][linesize[2]*(y/2)*16+x/2];
> //Setting of Yuv arrays
>
> }
> }
> //Let's go to an other macroblock
> }
> }
>
> Regards
>
>>
>> Not quite - the data in data[0] is arranged by pixels, so your coordinate
into that array must include all the pixels, not just the current
macroblock. So you need:
yval[mby*mb_width + mbx][y*16+x] = data[0][ linesize[0]*(mby*16 + y) +
(mbx*16 + x) ]
so you skip all lines up to the one you're processing, including all
previous macroblocks and all lines already processed in the current
macroblock using "linesize[0]*(mby*16 + y)" and then all the pixels in the
current line up to the macroblock you're interested in, and any pixels
already processed in that macroblock with "mbx*16 + x".
I hope that makes sense.
Regards,
Simon
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20190409/c70bddc3/attachment.html>
More information about the Libav-user
mailing list