最近我将 ffmpeg 从 0.9 升级到 1.0(在 Win7x64 和 iOS 上测试),现在是avcodec_decode_video2
seagfaults。长话短说:每次视频尺寸发生变化时都会发生崩溃(例如,从 320x240 变为 160x120,反之亦然)。
我从一些专有来源接收 mpeg4 视频流并像这样解码它:
// once, during initialization:
AVCodec *codec_ = avcodec_find_decoder(CODEC_ID_MPEG4);
AVCodecContext ctx_ = avcodec_alloc_context3(codec_);
avcodec_open2(ctx_, codec_, 0);
AVPacket packet_;
av_init_packet(&packet_);
AVFrame picture_ = avcodec_alloc_frame();
// on every frame:
int got_picture;
packet_.size = size;
packet_.data = (uint8_t *)buffer;
avcodec_decode_video2(ctx_, picture_, &got_picture, &packet_);
同样,在我升级到 1.0 之前,上述所有操作都完美无缺。现在每次框架尺寸发生变化时 -avcodec_decode_video2
崩溃。请注意,我没有在 AVCodecContext 中分配宽度/高度 - 无论是在开始时,还是在流更改时 - 这可能是原因吗?
我会很感激任何想法!
更新:设置 ctx_.width 和 ctx_.height 没有帮助。
Update2:就在崩溃之前,我收到以下日志消息:
mpeg4,第 24 级:“找到 2 个未释放的缓冲区!”。级别 8:“断言 i < avci->buffer_count 在 libavcodec/utils.c:603 失败”
Update3升级到 1.1.2 修复了这个崩溃。解码器能够再次处理动态的尺寸变化。