Я пытаюсь создать аппаратный кодировщик, используя Nvidias NvEnc API. Этот API обеспечивает использование двух кодеков для кодирования любых заданных данных: H264 и HEVC. Так что сначала нужно выбрать один из двух кодов, а уже потом настроить сеанс кодирования или использовать один из варио пресетов. Я делаю это, как описано в .
У меня есть следующий фрагмент кода, вызывающий проблему при использовании кодека 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. Может кто закроет..