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

    } 
} 

항상 반환 - 전용 H.264 인코더 "외부 라이브러리에서 일반 오류"-542398533 GOP가 0이 일부 작업의 경우 솔루션을 제공하십시오 시각.반환 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 설정 항목이 엔코더를 초기화 방법에 대한 정보, avcodec_open2()를 호출 즉 코드 및 av_opt_set_*()에 대한 모든 호출을 제공 할 수있다.

+0

세 가지 옵션 av_opt_set (pAvCodecCtx-> priv_data, "preset", "slow", 0)을 사용하여 av_opt_set을 설정하려고했습니다. 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, 당신은 av_opt_set() 수 pAvCodecCtx에 옳은 일을 할 것입니다 설정되어 있는지 알고 싶다. "나는 무엇이 설정되어 있는지 알고 싶다"는 것은 무엇을 의미합니까? –

+0

'av_opt_set (pAvCodecCtx-> priv_data, "x264opts", "no-mbtree : 슬라이스 스레드 : sync-lookahead = 0", 0);이 메소드의 의미는 무엇이며 pAvCodecCtx 만 넘겨 봤습니다. avcodec_encode_video2 return - 542398533 –