#ffmpeg #libavcodec #libav
#ffmpeg #libavcodec #libav
Вопрос:
Я пытаюсь найти значение пикселей для данного макроблока в кадре. Что я сделал, так это следующее :
//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 в приведенном выше цикле являются не координатами макроблока, а целыми числами для цикла.
Мне нужна ваша помощь, пожалуйста.
Комментарии:
1. Извините, первый и второй циклы : for(int mby=0; mby
2. Пожалуйста, добавьте все, что имеет отношение к самому вопросу, и попробуйте отформатировать свой код, чтобы сделать его более читаемым
Ответ №1:
Вы не увеличиваете mbx и mby во внешних циклах
Комментарии:
1. Да, это ошибка. Но я добавил комментарий под своим сообщением, чтобы уточнить его. Тогда правильным будет: for(int mby=0; mby