2014-12-03 1100 views
3

我正在使用cuda nvenc編碼器來編碼YUV幀。我想使用RTSP流式傳輸編碼的h264數據。我需要SPSPPS緩衝區來執行RTSP流。我正在使用「nvEncGetSequenceParams」來獲取spspps緩衝區。按照預期調用「nvEncInitializeEncoder」函數後,我調用了該函數。我得到「NV_ENC_ERR_INVALID_VERSION」錯誤,這意味着我傳遞錯誤的結構到這個函數。但我已經檢查了多次,我傳遞的結構是正確的。我認爲這可能是驅動程序版本問題。我有Quadro k5000 GPU。我已經在驅動版本331.82和337.88上試過了。以下是我正在使用的代碼。使用nvenc編碼器時出現「NV_ENC_ERR_INVALID_VERSION」錯誤

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

NVENC不NVCUVENC,並NVENC無關與CUDA這些問題不應該與CUDA被標記 – 2014-12-03 15:35:28

+0

。 @RobertCrovella我完全同意關於特定問題的評論,但是「NVENC與CUDA無關」的說法並不完全正確 - 您可以使用CUDA浮動上下文句柄初始化NVENC(這意味着在NVENC中涉及一些CUDA API代碼),顏色轉換可以使用CUDA完成用作NVENC輸入的Direct 3D表面上的ons。 – 2014-12-04 10:33:06

+0

用於NVENC的GPU hw資源與用於CUDA的GPU資源完全分離,並且API是正交的。是的,他們可以互操作,但是根據定義操縱NVENC功能並沒有CUDA API,並且沒有按定義操縱CUDA功能的NVENC API。無論如何,我的評論意見是,NVENC問題不應該被CUDA自動標記,這在這裏似乎就是這種情況。 NVENC不是CUDA的一部分。感謝您提供此用戶問題的答案。 – 2014-12-04 14:19:22

回答

1

您正在將錯誤的版本宏設置爲SPS/PPS結構。我手頭沒有我的NVIDIA代碼,所以我會嘗試谷歌正確的宏,但拇指的規則是,每個結構都有一個特定的版本宏(對於SPS/PPS結構,您肯定使用了NV_ENC_INITIALIZE_PARAMS 。不對我承擔的m_spspps類型爲NV_ENC_SEQUENCE_PARAM_PAYLOAD所以,你應該這樣初始化:

m_spspps.version = NV_ENC_SEQUENCE_PARAM_PAYLOAD_VER; 
相關問題