[FFmpeg-devel] [PATCH 1/4] Correctly set Display Aspect Ratio in nvenc.

Nicolas George george at nsup.org
Wed Jan 7 12:13:25 CET 2015


Le sextidi 16 nivôse, an CCXXIII, Philip Langdale a écrit :
> 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.

Can you elaborate on your testing procedure? IMHO, if the input has sample
aspect ratio 1/1, then the resulting bitstream should have the same, as
shown by ffprobe. Is it achieved?

> 
> Signed-off-by: Philip Langdale <philipl at 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;

Can you explain the 1024?

Anyway, I would suggest to use lavu's rational functions:

    AVRational dar = av_mul_q(avctx->sample_aspect_ratio,
                              av_make_q(avctx->width, avctx->height));
    av_reduce(&dar.num, &dar.den, dar.num, dar.den, MAX);
    nvenc_ctx->nvenc_cfg.darWidth  = 1024 * dar.num;
    nvenc_ctx->nvenc_cfg.darHeight = 1045 * dar.den;

(including the *1.02 in the 1024 constant to avoid floating point
operations, but I am very suspicious about that 1.02)

Regards,

-- 
  Nicolas George
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20150107/cc4f1db1/attachment.asc>


More information about the ffmpeg-devel mailing list