我在 Android 上使用 FFMPEG + x264 将 YUV420 帧编码为视频文件。我在每一帧上使用以下代码对它们进行编码:
avcodec_encode_video2(gVideoWriteCodecCtx, &packet, pCurrentFrame, &gotPacket);
在最初的几次调用中,帧缓冲区被填满并且没有被编码。当第一次编码发生时,调用 x264_lookahead_get_frames。我可以看到我的帧数组已正确填充,但第一项为 NULL。因此,在 x264_weights_analysis 中,作为 frames[p0] 获得的参考帧为 NULL,我在那里得到一个异常。
slicetype.c,“frames”中的第一帧为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;
我肯定遗漏了一些东西,因为我确信这个编码器适用于大多数人:) 有没有人知道为什么“帧”数组中的第一帧为空?
非常感谢