Вы должны вручную вызвать 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, как показано в руководстве.