簡體   English   中英

Android上的FFMPEG x264編碼-超前錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM