2012-12-31 65 views
0

我使用Android上的FFMPEG + x264將YUV420幀編碼爲視頻文件。我使用下面的代碼每一幀它們編碼:Android上的FFMPEG x264編碼 - 前瞻錯誤

avcodec_encode_video2(gVideoWriteCodecCtx, &packet, pCurrentFrame, &gotPacket); 

在第幾個電話,幀緩衝區得到填補,並沒有什麼編碼。當第一次編碼發生時,將調用x264_lookahead_get_frames。我可以在那裏看到我的框架數組已正確填充,但第一個項目是NULL。因此,在x264_weights_analyse中,參考幀的幀數爲[p0]爲NULL,並且在那裏得到一個異常。

slicetype.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]; 
    } 

和異常情況出現,裁判是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; 

我肯定我失去了一些東西,因爲我相信這編碼器適用於大多數人:)有沒有人有一個想法,爲什麼「幀」數組中的第一幀爲空?

非常感謝

+0

挖多一點我注意到,在此呼叫之前slicetype.c有一個幀[0] = H - > lookahead-> last_nonb; 此last_nonb從未更新過,且爲空。 – tishu

回答

0

如果,可以幫助任何人,它看起來像是在圖書館怪異。反相在lookahead.c line236這兩行所作的作業:

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);