使用nvenc编码器时出现“NV_ENC_ERR_INVALID_VERSION”错误

时间:2014-12-03 08:21:49

标签: encode nvidia

我正在使用cuda nvenc编码器对YUV帧进行编码。我想使用RTSP流来传输编码的h264数据。我需要SPSPPS缓冲区来执行RTSP流。我正在使用“nvEncGetSequenceParams”来获取spspps缓冲区。我按预期调用“nvEncInitializeEncoder”函数后调用了这个函数。我收到“NV_ENC_ERR_INVALID_VERSION”错误,这意味着我将错误的结构传递给此函数。但我已多次检查我传递的结构是否正确。我认为这可能是驱动程序版本问题。我有Quadro k5000 GPU。我在驱动程序版本331.82和337.88上试过这个。以下是我正在使用的代码。

NVENCSTATUS CNvEncoderH264::GetSPSPPSBUffer(char *SPSPPSBuffer)
{

    NVENCSTATUS nvSta = NV_ENC_SUCCESS;
    uint32_t size = 0;

    //m_spspps is of type NV_ENC_SEQUENCE_PARAM_PAYLOAD
    m_spspps.inBufferSize = 512;
    m_spspps.outSPSPPSPayloadSize = &size;
    SET_VER(m_spspps, NV_ENC_INITIALIZE_PARAMS);

    m_spspps.spsppsBuffer = SPSPPSBuffer;

    nvSta = m_pEncodeAPI->nvEncGetSequenceParams(m_hEncoder,&m_spspps);
    return nvSta;
}

1 个答案:

答案 0 :(得分:1)

您正在为SPS / PPS结构设置错误的版本宏。我没有手动获取我的NVIDIA代码,所以我会尝试使用Google正确的宏,但拇指的规则是每个结构都有一个特定的版本宏(你使用的是NV_ENC_INITIALIZE_PARAMS用于SPS / PPS绝对不正确的结构。我假设m_spspps的类型是NV_ENC_SEQUENCE_PARAM_PAYLOAD。所以你应该像这样初始化它:

 m_spspps.version = NV_ENC_SEQUENCE_PARAM_PAYLOAD_VER;