2017-01-20 2 views
2
pAvframe = GetVideoFrame(); 

av_init_packet(&pkt); 
/* encode the image */ 
ret = avcodec_encode_video2(pAvCodecCtx, &pkt, pAvframe, &got_packet); //return Generic error in external library 
if (ret < 0) 
{ 
    char errbuf[128]; 
    const char *errbuf_ptr = errbuf; 

    if (av_strerror(ret, errbuf, sizeof(errbuf)) < 0) 
     errbuf_ptr = strerror(AVUNERROR(ret)); 
    av_log(NULL, AV_LOG_ERROR, "%s\n", errbuf_ptr); 

    _stprintf_s(szErr,MAX_PATH, _T("Error encoding video frame:: ")); 
    LOG_ENTRY_ERROR(E_FAIL,szErr); 
} 



if(ret >= 0) 
{ 
    ret = WriteFrameToFile(&pAvCodecCtx->time_base, m_stVideoStream.pAVStream, &pkt); 
    if(ret < 0) 
    { 
     av_packet_unref(&pkt); 

    } 
} 

それは常に返す - GOPが、それはいくつかの作業がゼロであれば-542398533「外部ライブラリで一般的なエラー」だけH.264エンコーダでは、ソリューションを提供してください時間。avcodec_encode_video2リターン-542398533のみH264エンコーダと外部ライブラリで一般的なエラー

答えて

1

pAvFrameの内容は何ですか?たとえば、pix_fmt,widthheightとは何ですか? pix_fmt(x264のビルドによっては、ここでは典型的な設定と仮定しています)はAV_PIX_FMT_YUV420Pです。 4:2:0クロマサブサンプリングを仮定すると、サイズは偶数でなければならない。 dataポインタがあり、linesizeは32バイト境界に整列されていますか?

は、あなたはまた、あなたがエンコーダ、あなたがavcodec_open2()への呼び出しの前にAVCodecContextに設定されたエントリ、およびav_opt_set_*()へのすべての呼び出しれ、特に、avcodec_open2()を呼び出し、すなわちコードを初期化する方法についていくつかの情報を提供することができます。

+0

av_opt_setを3つのオプションav_opt_set(pAvCodecCtx-> priv_data、 "preset"、 "slow"、0)で設定しようとしました。 av_opt_set(pAvCodecCtx-> priv_data、 "tune"、 "zerolatency"、0); av_opt_set(pAvCodecCtx-> priv_data、 "x264opts"、 "no-mbtree:スライスされたスレッド:sync-lookahead = 0"、0); x264optsは作業をしましたが、何が設定されているか知りたいのですが、 –

+0

はpriv_dataに触れていません.pAvCodecCtxのav_opt_set()を実行すると正しいことができます。 「何が設定されているか知りたい」という意味はどうですか? –

+0

'av_opt_set(pAvCodecCtx-> priv_data、" x264opts "、" no-mbtree:スライスされたスレッド:sync-lookahead = 0 "、0);このメソッドの意味とは何ですか?pAvCodecCtxだけをもう一度渡すことを試みましたavcodec_encode_video2 return - 542398533 –

関連する問題