我们知道,一个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我们被损坏了还是别的什么?
有两个主要原因(除了错误)
-
当前帧是未来的p帧,因此现在不能返回(显示)。这种情况发生在序列中有b帧的情况下。
-
当前数据包不是一个完整的可解码帧。