1

ご存知のように、1つのAVPacketには1つの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_ptr0)?破損したAVPacketか何か他のものですか?

4

1 に答える 1

2

2つの主な理由があります(エラーは別として)

  1. 現在のフレームは将来のPフレームであるため、現在、このフレームを元に戻す(表示する)ことはできません。これは、シーケンス内のBフレームの場合に発生します。

  2. 現在のパケットは完全にデコード可能なフレームではありません。

于 2012-12-31T03:27:30.840 に答える