[英]FFMPEG x264 encoding on Android - error with lookahead
我在Android上使用FFMPEG + x264將YUV420幀編碼為視頻文件。 我在每個幀上使用以下代碼對其進行編碼:
avcodec_encode_video2(gVideoWriteCodecCtx, &packet, pCurrentFrame, &gotPacket);
在前幾個調用中,幀緩沖區被填滿,並且沒有任何編碼。 發生第一次編碼時,將調用x264_lookahead_get_frames。 我在那里可以看到我的框架數組已正確填充,但第一項為NULL。 結果,在x264_weights_analyse中,由於frames [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];
}
而且那里發生了異常,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;
我肯定會丟失一些東西,因為我確定此編碼器對大多數人都有效:)是否有人知道為什么“幀”數組中的第一幀為空?
非常感謝
如果這樣可以幫助任何人,則庫中看起來有些奇怪。 在lookahead.c第236行中反轉這兩行即可完成工作:
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 );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.