Encoding Android上的FFMPEG x264编码-前瞻错误

Encoding Android上的FFMPEG x264编码-前瞻错误,encoding,ffmpeg,x264,Encoding,Ffmpeg,X264,我在Android上使用FFMPEG+x264将YUV420帧编码为视频文件。我在每个帧上使用以下代码对其进行编码: avcodec_encode_video2(gVideoWriteCodecCtx, &packet, pCurrentFrame, &gotPacket); 在最初的几个调用中,帧缓冲区被填满,没有任何内容被编码。当第一次编码发生时,调用x264_lookahead_get_frames。我可以看到,我的帧数组已正确填充,但第一项为NULL。因此,在x264加

我在Android上使用FFMPEG+x264将YUV420帧编码为视频文件。我在每个帧上使用以下代码对其进行编码:

avcodec_encode_video2(gVideoWriteCodecCtx, &packet, pCurrentFrame, &gotPacket);
在最初的几个调用中,帧缓冲区被填满,没有任何内容被编码。当第一次编码发生时,调用x264_lookahead_get_frames。我可以看到,我的帧数组已正确填充,但第一项为NULL。因此,在x264加权分析中,作为帧[p0]得到的参考帧为空,我在那里得到一个异常

slicetype.c,“frames”中的第一个帧为空

这里发生了异常,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”数组中的第一帧是空的吗


非常感谢

如果这对任何人都有帮助的话,图书馆里看起来有些奇怪。在lookahead.c line236中反转这两行可以完成以下任务:

x264_stack_align( x264_slicetype_decide, h );
x264_lookahead_update_last_nonb( h, h->lookahead->next.list[0] );


进一步挖掘,我注意到在slicetype.c中,在这个调用之前有一个frames[0]=h->lookahead->last\u nonb;最后一个\u nonb从未更新,为空。
x264_stack_align( x264_slicetype_decide, h );
x264_lookahead_update_last_nonb( h, h->lookahead->next.list[0] );
x264_lookahead_update_last_nonb( h, h->lookahead->next.list[0] );
x264_stack_align( x264_slicetype_decide, h );