ffmpeg - avcodec_decode_video2如何工作?

时间:2012-12-31 01:11:00

标签: ffmpeg

众所周知,一个 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 frame\n");
    return 1;
}

fprintf(stderr, "len = %d\n", len );

// Did we get a video frame?
if(frameFinished) {
    dosomething();
}

如何失败(got_frame_ptr为0)? AVPacket 我们是否已损坏或其他?

1 个答案:

答案 0 :(得分:2)

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

  1. 当前帧是未来的P帧,因此现在可以重新显示(显示)。这种情况发生在序列中的B帧的情况下。

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