AndroidでFFMPEG+x264を使用して、YUV420フレームをビデオファイルにエンコードしています。各フレームで次のコードを使用してエンコードします。
avcodec_encode_video2(gVideoWriteCodecCtx, &packet, pCurrentFrame, &gotPacket);
最初の数回の呼び出しで、フレームバッファがいっぱいになり、何もエンコードされません。最初のエンコードが発生すると、x264_lookahead_get_framesが呼び出されます。フレーム配列が正しく入力されていることがわかりますが、最初の項目はNULLです。結果として、x264_weights_analyseでは、frames [p0]として取得された参照フレームがNULLであり、そこで例外が発生します。
スライスタイプ.c、「フレーム」の最初のフレームはNULLです
if( h->param.analyse.i_weighted_pred && b == p1 )
{
x264_emms();
x264_weights_analyse( h, fenc, frames[p0], 1 );
w = fenc->weight[0];
}
そして例外はそこで起こります、refはNULLです
static void x264_weights_analyse( x264_t *h, x264_frame_t *fenc, x264_frame_t *ref, int b_lookahead )
{
int i_delta_index = fenc->i_frame - ref->i_frame - 1;
このエンコーダーはほとんどの人に機能すると確信しているので、私は確かに何かが欠けています:)「frames」配列のこの最初のフレームがnullである理由を誰かが知っていますか?
どうもありがとう