我正在尝试使用 Nvidias NvEnc API 构建硬件编码器。此 API 使用两种编解码器来编码任何给定数据:H264 和 HEVC。因此,首先必须选择两个代码之一,然后配置编码会话或使用 varios 预设之一。我正在按照Nvidias NvEnc Programming Guide中的描述进行操作。
在使用 HVEC 编解码器时,我有以下导致问题的代码:
//Create Init Params
InitParams* ip = new InitParams();
ip->encodeGUID = m_encoderGuid; //encoder GUID is either H264 or HEVC
ip->encodeWidth = width;
ip->encodeHeight = height;
ip->version = NV_ENC_INITIALIZE_PARAMS_VER;
ip->presetGUID = m_presetGuid; //One of the presets
ip->encodeConfig = NULL; //If using preset, further config should be set to NULL
//Async Encode
ip->enableEncodeAsync = 1;
//Send the InputBuffer in Display Order
ip->enablePTD = 1;
//Causing Div by Zero error if used with HEVC GUID:
CheckApiError(m_apiFunctions.nvEncInitializeEncoder(m_Encoder, ip));
所以事情又来了:我正在使用 H264 GUID,一切都通过了。如果我使用 HEVC,我会得到一个 div by Zero... 我没有从 api 调用中得到一些错误代码,只是一个简单的 div by zero 错误。所以我的问题是:HEVC 是否需要我使用预设不提供的更多信息?如果是这样,什么样的信息?
非常感谢!
编辑:解决了。编程指南没有说明必须设置这些字段,但NV_ENC_INITIALIZE_PARAMS由frameRateNum和frameRateDen组成,导致 div 为零......不知道为什么在使用 H264 时不会发生这种情况。有人可能会关闭这个..