Деинтерлейсинг в ffmpeg - PullRequest
3 голосов
/ 12 ноября 2010

Я следовал инструкции здесь , чтобы загрузить видеофайлы в программу на Си. Но кадры не чересстрочные.

Из того, что я видел, исполняемый файл ffmpeg поддерживает ключ -deinterlace. Как мне сделать это в коде? О какой библиотеке / функциях мне следует прочитать?

1 Ответ

5 голосов
/ 12 ноября 2010

Вы должны вручную вызвать avpicture_deinterlace, чтобы деинтерлейсировать каждый декодированный кадр. Определение функции можно найти здесь . В основном это будет выглядеть так (используя переменные с первой страницы руководства):

avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,
                     packet.data, packet.size);

if(frameFinished) {
    avpicture_deinterlace((AVPicture*)pDiFrame, 
                          (const AVPicture*)pFrame, 
                          pCodecCtx->pix_fmt, 
                          width, 
                          height);
     . 
     . 
     .
 }

Имейте в виду, что вам нужно инициализировать pDiFrame аналогично тому, как они инициализируют pFrameRGB в учебнике, создав собственный буфер и вызывая avcodec_alloc_frame и avpicture_fill, только на этот раз формат пикселей будет декодированный кадр (pCodecCtx->pix_fmt), а не 24-битный RGB.

После деинтерлейсинга вы можете выполнить преобразование из деинтерлейсированного кадра в RGB, как показано в руководстве.

...