ffmpeg AVFrame получает полностью декодированные данные на char * - PullRequest
3 голосов
/ 28 марта 2012

Я зацикливаю кадры и декодирую их с помощью ffmpeg, получая в результате AVFrame.

Таким образом, я должен получить необходимые пиксельные данные кадра в char * и передать в качестве параметра функции обратного вызова. Итак, как я могу генерировать такой массив char *? В интернете я видел несколько примеров, таких как:

for(y=0; y<height; y++)
{
 fwrite(pFrame->data[0]+y*pFrame->linesize[0], 1, width*3, pFile);
}

или что-то в этом роде. Это правда? И какого размера будет мой символ *? Как я вижу мы пишем ширина * 3 * высота байтов?

1 Ответ

2 голосов
/ 28 марта 2012
for(y=0; y<height; y++) { 
    fwrite(pFrame->data[0]+y*pFrame->linesize[0], 1, width*3, pFile);
}

Да, это правильно.
Это запись строки размером 3 байта / пиксель (предположительно RGB) из указателя AVFrame-> data.

пс. Причина, по которой это происходит так, заключается в том, что начало каждой строки данных начинается с новой границы в 4 байта памяти - компьютер более эффективен для доступа к памяти кратным 32 битам (4 байта). Поэтому, если ваш размер пикселя (3 байта) и ширина не кратны 4, вам нужно сделать это, а не просто скопировать width*height*3 байт данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...