avcodec_decode_video2是如何工作的?



我们知道,一个AVPacket包含一个AVFrame,我们可以使用

int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame,
                          int *got_frame_ptr, const AVPacket *avpkt)

将数据包解码为帧,如果有效,则got_frame_ptr设为非零,否则为零。

int len = avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
if ( len < 0 )
{
    fprintf(stderr, "Problems decoding framen");
    return 1;
}
fprintf(stderr, "len = %dn", len );
// Did we get a video frame?
if(frameFinished) {
    dosomething();
}

如果got_frame_ptr为0,它将如何失败?是AVPacket我们被损坏了还是别的什么?

有两个主要原因(除了错误)

  1. 当前帧是未来的p帧,因此现在不能返回(显示)。这种情况发生在序列中有b帧的情况下。

  2. 当前数据包不是一个完整的可解码帧。

相关内容

  • 没有找到相关文章

最新更新