AVFrame中给定宏块的YUV值

问题描述 投票:0回答:1

我试图找到帧中给定宏块的像素值。我做的是以下内容:

//for all macroblock in this frame
 mb_height and mb_width are the number of macroblock horizontally and 
 vertically in the frame
for(int mby=0; mby<mb_height;mby++)
{
     for(int mbx=0; mbx<mb_width;mbx++)
     {
           int xy =  mby*mb_stride+mbx;
        //Now for this 16x16 macroblock
        16 is the dimension of the macroblock (16x16 macroblock)
        for(int y=0; y<16;y++)
        {
            for(int x=0; x<16;x++)
            {
                //All pixels YUV value for this macroblock
                y = data[0][linesize[0]*y+x];
                u = data[1][linesize[1]*(y/2)+x/2]
                v = data[2][linesize[2]*(y/2)+x/2]
           }
        }
         #Let's go to an other macroblock
     }
}

问题是,对于所有宏块,我有相同的Yuv值。这是真的,因为我只为每个宏块使用相同的宽度和高度。我的问题是要知道如何在上面的代码中加入差异来找到此帧中每个宏块的像素yuv值。也许我必须使用宏块的坐标(MBX,MBY)或相关的运动矢量坐标(mvx,mvy)才能拥有这个差异,但我不知道该怎么做。上面循环中的mbx和mby不是mocroblock的坐标,而是循环的整数。我需要你的帮助。

ffmpeg libavcodec libav
1个回答
0
投票

你没有在外循环中增加mbx和mby

© www.soinside.com 2019 - 2024. All rights reserved.