我已按照教程here将视频文件加载到C程序中。但框架不是去隔行扫描。
从我看到的情况来看,ffmpeg可执行文件支持-deinterlace开关。我怎么在代码中这样做?我应该阅读哪些库/函数?
答案 0 :(得分:5)
您必须手动调用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的转换,如教程中所示。