2017-01-20 10 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); 

    } 
} 

Он всегда возвращается - -542398533 «общая ошибка во внешней библиотеке» только с h.264 энкодера просьба представить решение, если гоп равно нулю это работает некоторое время.avcodec_encode_video2 вернуть -542398533 Generic ошибку во внешней библиотеке только с h264 кодер

ответ

1

Какое содержимое pAvFrame? Например, что такое pix_fmt, width и height? pix_fmt должен (в зависимости от сборки x264, но я предполагаю типичную конфигурацию здесь) AV_PIX_FMT_YUV420P. Предполагая, что выборка цветности 4: 2: 0, размеры должны быть четными числами. Являются ли указатели data и linesize s 32-байтовыми?

Не могли бы вы предоставить некоторую информацию о том, как вы инициализации кодера, то есть код, который вызывает avcodec_open2(), в частности, какие элементы вы установили в AVCodecContext перед вызовом avcodec_open2(), и все вызовы av_opt_set_*().

+0

Я попытался установить av_opt_set с тремя вариантами av_opt_set (pAvCodecCtx-> priv_data, "предустановленного", "медленный", 0); av_opt_set (pAvCodecCtx-> priv_data, "tune", "zerolatency", 0); av_opt_set (pAvCodecCtx-> priv_data, "x264opts", "no-mbtree: sliced-threads: sync-lookahead = 0", 0); tune и x264opts сделали работу, но я хочу знать, что это такое –

+0

не прикасайтесь к priv_data, вы можете av_opt_set() на pAvCodecCtx, и это будет сделано правильно. Что значит «Я хочу знать, что это такое»? –

+0

'av_opt_set (pAvCodecCtx-> priv_data, "x264opts", "нет-mbtree: нарезанные нити: синхронизирующих = 0 касательно последующего текста", 0);' что значение этого метода и я попытался передать только pAvCodecCtx чем снова avcodec_encode_video2 возвращение - 542398533 –

 Смежные вопросы

  • Нет связанных вопросов^_^