The encoder writes the display aspect ratio into the output frames, which a good player will respect, so let's make sure it's correct.
The 1.02 scale factor is black magic, but produces correct results. I don't know what nvenc is doing. Signed-off-by: Philip Langdale <phil...@overt.org> --- libavcodec/libnvenc.c | 2 ++ libavcodec/libnvenc.h | 2 ++ libavcodec/nvencoder.c | 8 ++++---- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/libavcodec/libnvenc.c b/libavcodec/libnvenc.c index d81e04a..6ba150e 100644 --- a/libavcodec/libnvenc.c +++ b/libavcodec/libnvenc.c @@ -129,6 +129,8 @@ static av_cold int ff_libnvenc_init(AVCodecContext *avctx) // Basic nvenc_ctx->nvenc_cfg.width = avctx->width; nvenc_ctx->nvenc_cfg.height = avctx->height; + nvenc_ctx->nvenc_cfg.darWidth = 1024 * avctx->width * avctx->sample_aspect_ratio.num / avctx->sample_aspect_ratio.den; + nvenc_ctx->nvenc_cfg.darHeight = 1024 * avctx->height * 1.02; nvenc_ctx->nvenc_cfg.frameRateNum = avctx->time_base.den; nvenc_ctx->nvenc_cfg.frameRateDen = avctx->time_base.num * avctx->ticks_per_frame; diff --git a/libavcodec/libnvenc.h b/libavcodec/libnvenc.h index 42718a2..63b5d67 100644 --- a/libavcodec/libnvenc.h +++ b/libavcodec/libnvenc.h @@ -48,6 +48,8 @@ typedef struct nvenc_cfg_t // Basic uint32_t width; uint32_t height; + uint32_t darWidth; + uint32_t darHeight; uint32_t frameRateNum; uint32_t frameRateDen; diff --git a/libavcodec/nvencoder.c b/libavcodec/nvencoder.c index 06eb68b..f1d432f 100644 --- a/libavcodec/nvencoder.c +++ b/libavcodec/nvencoder.c @@ -517,8 +517,8 @@ static bool initialize(nvencoder_t *nvenc, nvenc_cfg_t *nvenc_cfg) nvenc->init_params.presetGUID = NV_ENC_PRESET_HQ_GUID; nvenc->init_params.encodeWidth = nvenc_cfg->width; nvenc->init_params.encodeHeight = nvenc_cfg->height; - nvenc->init_params.darWidth = nvenc_cfg->width; - nvenc->init_params.darHeight = nvenc_cfg->height; + nvenc->init_params.darWidth = nvenc_cfg->darWidth; + nvenc->init_params.darHeight = nvenc_cfg->darHeight; nvenc->init_params.frameRateNum = nvenc_cfg->frameRateNum; nvenc->init_params.frameRateDen = nvenc_cfg->frameRateDen; nvenc->init_params.enableEncodeAsync = 0; @@ -696,8 +696,8 @@ static bool reconfig(nvencoder_t *nvenc, nvenc_cfg_t *nvenc_cfg) // Update initial encoder parameters that likely changed nvenc->init_params.encodeWidth = nvenc_cfg->width; nvenc->init_params.encodeHeight = nvenc_cfg->height; - nvenc->init_params.darWidth = nvenc_cfg->width; - nvenc->init_params.darWidth = nvenc_cfg->height; + nvenc->init_params.darWidth = nvenc_cfg->darWidth; + nvenc->init_params.darHeight = nvenc_cfg->darHeight; nvenc->init_params.frameRateNum = nvenc_cfg->frameRateNum; nvenc->init_params.frameRateDen = nvenc_cfg->frameRateDen; nvenc->init_params.encodeConfig->rcParams.averageBitRate = nvenc_cfg->avgBitRate; -- 2.1.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel