Вы должны вручную вызвать avpicture_deinterlace
, чтобы деинтерлейсировать каждый декодированный кадр. Определение функции можно найти here. Это будет в основном выглядеть следующим образом (с использованием переменных с первой страницы учебника):
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, как показано в учебнике.