Значения YUV для данного макроблока в AVFrame

Я пытаюсь найти значение пикселей для данного макроблока в кадре. Я сделал следующее:

//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
     }
}

Проблема в том, что для всех макроблоков у меня одинаковые значения Y, u и v. Это правда, потому что я использую только одинаковую ширину и высоту для каждого макроблока. Мой вопрос состоит в том, чтобы узнать, как я могу указать разницу в приведенном выше коде, чтобы найти значение yuv пикселей для каждого макроблока в этом кадре. Возможно, я должен использовать координату макроблока (MBX, MBY) или связанную координату вектора движения (mvx, mvy), чтобы иметь это разница, но я не знаю, как это сделать. mbx и mby в приведенном выше цикле — это не координаты мокроблока, а целые числа для цикла. Мне нужна ваша помощь, пожалуйста.


person Enock    schedule 09.04.2019    source источник
comment
Извините, первый и второй циклы: for(int mby=0; mby‹mb_height;mby++) { for(int mbx=0; mbx‹mb_width;mbx++) {   -  person Enock    schedule 09.04.2019
comment
Пожалуйста, добавьте все, что имеет отношение к самому вопросу, и попробуйте отформатировать свой код, чтобы сделать его более читаемым.   -  person Nico Haase    schedule 09.04.2019


Ответы (1)


Вы не увеличиваете mbx и mby во внешних циклах

person szatmary    schedule 09.04.2019
comment
Да, это ошибка. Но я добавил комментарий под своим постом, чтобы уточнить его. Тогда правильно: for(int mby=0; mby‹mb_height;mby++) { for(int mbx=0; mbx‹mb_width;mbx++) { ... }} - person Enock; 09.04.2019