Le mer. 10 avr. 2019 à 11:57, Paul B Mahol <[email protected]> a écrit :
> On 4/10/19, Boris <[email protected]> wrote: > > Le mar. 9 avr. 2019 à 17:44, Simon Brown <[email protected]> a > écrit > > : > > > >> > >>> 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 > >> > > > > Hello Simon, > > > > I do like you tell me but data[0][ linesize[0]*(mby*16 + y) + (mbx*16 + > x) > > ] gives me some negatives pixel's values. > > Is it normal ? > > For exemple data[0][ linesize[0]*(mby*16 + y) + (mbx*16 + x) ] = > > -62 > > -65 > > -72 > > My question is to know if it is normal to have negatives pixel's value ( > y > > = -a; u=-b; v=-c) where a, b and c are integers. > > Doesn't make sense, post full code. > Hello Paul, The code is the following : mbx and mby are x,y coordinate (position) of the macroblock in the frame , data is AVFrame frame->data and linesize is AVFrame frame->linesize Then : for(int y=0; y<16;y++) //run through the length of the 16x16 macroblock { for(int x=0; x<16;x++) ////run through the width of the 16x16 macroblock { cout<<data[0][ linesize[0]*(mby*16 + y) + (mbx*16 + x) ] <<endl; } } So I still getting some negatives values. My question is to know if it's normal. Regards > _______________________________________________ > Libav-user mailing list > [email protected] > https://ffmpeg.org/mailman/listinfo/libav-user > > To unsubscribe, visit link above, or email > [email protected] with subject "unsubscribe".
_______________________________________________ Libav-user mailing list [email protected] https://ffmpeg.org/mailman/listinfo/libav-user To unsubscribe, visit link above, or email [email protected] with subject "unsubscribe".
