用ffmpeg中的avcodec_decode_video解码视频流,注释掉CODEC_FLAG_TRUNCATED,有马赛克?

emma_dream 发布于 2012/04/25 22:33
阅读 7K+
收藏 0

请教各位专家,在我的程序中像ffmpeg的例子中那样调用avcodec_decode_video()函数解视频流,不同的是已经在解压之前将视频流分成了一帧一帧的,

所以把if(codec.capabilities&CODEC_CAP_TRUNCATED)

       H264DCtx->flags|=CODEC_FLAG_TRUNCATED; 这两句话注释掉了,因为能保证视频流是一帧一帧的送到解码器的,都是00 00 00 01开始的,并且是从I帧开始,也希望解码器能够解出当前接收到的一整帧图像,而不用等检测到下一帧图像的头才解出上一帧。但是这样解出的图像偶尔会在有运动物体出现后有一片一片的马赛克,并不是每次都有,好像也没什么规律,有时运动物体经过后有有时又没有。但是如果不注释掉上面的两句,解出来的图像就不会出现马赛克,但是只能在给解码器送入下一帧时才解出前一帧图像。

    看过了avcodec_decode_video()函数里面的decode_frame()函数,如果注释掉CODEC_FLAG_TRUNCATED,只是不执行ff_h264_find_frame_end()和ff_combine_frame()这两个函数,对后面具体的解压过程好像没什么影响,不知道问题到底出在哪里,什么情况下才会在运动物体经过后有马赛克出现呢?

    恳请各位专家指点,谢谢!                                                            

加载中
0
e
emma_dream
有没有人遇到过类似的情况呢?
0
z
zhangxiliang
我也遇到了这样的问题,请问楼主解决了吗?能否给点指示
返回顶部
顶部