【发布时间】:2014-07-24 22:59:08
【问题描述】:
我正在尝试使用 ffmpeg 编写解码器,并且我想显示有关视频流的一些信息。只有在解码帧后,我才能检测帧是逐行扫描还是隔行扫描(tff,bff)。即,
avcodec_decode_video2(pCodecCtx, pFrame, &gotFrame, &packet);
.....(assume we have a frame)
.....
// print information
printf("prog=%d inter=%d", !pFrame->interlaced_frame, pFrame->interlaced_frame);
这很好用。
但我想知道是否有办法从 AVFormatContext、AVCodecCtx 或 AVCodec 结构或其他一些函数中检测到这一点。这将非常有用,例如,如果文件是隔行扫描的,我想中止解码。我不想解码帧来获取这条信息。
我正在尝试支持 MPEG2、H.264/AVC 和 HEVC 编解码器(基本流或 MP4 容器中)。
对不起,如果这是一个微不足道的问题!非常感谢!
【问题讨论】:
-
在我的解码器中,我解码前几帧以获得有关视频流的一些信息,包括它是否以与您在此处完全相同的方式隔行扫描。所以可能还有其他方法,但如果有的话,我永远也想不通。即使找到了方法,我也会怀疑其可靠性。在切换到使用它之前,我想对其进行彻底测试。
-
谢谢@njahnke .. 我希望其他人对此有所尝试。在此期间我会继续寻找!
-
AVStream->parser->field_order、AVStream.codecpar.field_order和AVCodecContext.field_order,它们都是AVFieldOrder类型,看起来很有希望,但必须进行测试。特别是最后两个可能在解码时未设置,因此没有用。我会在接下来的几天里测试它们并通知你。
标签: ffmpeg