2013-04-17 1 views
0

это мой кодx264_encoder_open всегда возвращают нуль

x264_param_default (& m_X264Param);

nRet = x264_param_default_preset(&m_X264Param,"medium","zerolatency") ; 
if (nRet) 
{ 
    return -1; 
} 
if (cpMain == Param.nProfile) 
{ 
    nRet = x264_param_apply_profile(&m_X264Param,"main") ; 
} 
else if (cpSimple == Param.nProfile) 
{ 
    nRet = x264_param_apply_profile(&m_X264Param,"baseline") ; 
} 
else if (cpComplex == Param.nProfile) 
{ 
    nRet = x264_param_apply_profile(&m_X264Param,"high"); 
} 
if (nRet) 
{ 
    return -1; 
} 
m_X264Param.i_width = Param.nWidth ; 
m_X264Param.i_height = Param.nHeight ; 
m_X264Param.i_threads = X264_THREADS_AUTO ; 
m_X264Param.i_log_level = X264_LOG_NONE ; 
m_X264Param.rc.i_bitrate = Param.nBitRate ; 
m_X264Param.rc.i_rc_method = X264_RC_ABR ; 
m_X264Param.i_csp   = X264_CSP_I420 ; 

m_pX264Handle = x264_encoder_open (& m_X264Param);

, но он всегда возвращает null. Это мой первый раз, когда я пропустил какой-то ключевой параметр? это тот, кто может сказать мне ответ! большое спасибо и наилучшие пожелания

ответ

0

Нет, я думаю, что кодер open не должен возвращать null. пожалуйста, chekc, если функция naem верна, я думаю, что номер сборки обычно включается в эту функцию как x264_encoder_encode_130 и т. д. также, если вы используете dll, тогда вы должны правильно его связать - Я не знаю многого, но просто mah 2 центами.

0

Возврат NULL - не что иное, как признак ошибки, аргумента параметра или окружающей среды.

Просто пример того, как это может происходить:

x264_t *x264_encoder_open(x264_param_t *param) 
{ 
    // ... 
    if(x264_threading_init()) 
    { 
     x264_log(h, X264_LOG_ERROR, "unable to initialize threading\n"); 
     goto fail; 
    } 
    // ... 
fail: 
    x264_free(h); 
    return NULL; 
} 

Добавить протоколирование обратного вызов через m_X264Param.pf_log и друг и он вызывается с диагностическими сообщениями, якобы объясняя проблемы.