众所周知,一个 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 我们是否已损坏或其他?
答案 0 :(得分:2)
有两个主要原因(除了错误)
当前帧是未来的P帧,因此现在可以重新显示(显示)。这种情况发生在序列中的B帧的情况下。
当前数据包不是完整的可解码帧。