[FFmpeg-devel] [PATCH] nvenc.c Fix H264 and HEVC vui info update

Agatha Hu ahu at nvidia.com
Fri Mar 4 05:45:47 CET 2016


---
  libavcodec/nvenc.c | 33 ++++++++++++++++++++++++++++-----
  1 file changed, 28 insertions(+), 5 deletions(-)

diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c
index a3b02fa..5694f17 100644
--- a/libavcodec/nvenc.c
+++ b/libavcodec/nvenc.c
@@ -867,15 +867,22 @@ static av_cold int 
nvenc_encode_init(AVCodecContext *avctx)
      }

      switch (avctx->codec->id) {
-    case AV_CODEC_ID_H264:
- 
ctx->encode_config.encodeCodecConfig.h264Config.h264VUIParameters.colourDescriptionPresentFlag 
= 1;
- 
ctx->encode_config.encodeCodecConfig.h264Config.h264VUIParameters.videoSignalTypePresentFlag 
= 1;
-
+    case AV_CODEC_ID_H264:
 
ctx->encode_config.encodeCodecConfig.h264Config.h264VUIParameters.colourMatrix 
= avctx->colorspace;
 
ctx->encode_config.encodeCodecConfig.h264Config.h264VUIParameters.colourPrimaries 
= avctx->color_primaries;
 
ctx->encode_config.encodeCodecConfig.h264Config.h264VUIParameters.transferCharacteristics 
= avctx->color_trc;
+ 
ctx->encode_config.encodeCodecConfig.h264Config.h264VUIParameters.videoFullRangeFlag 
=
+            (avctx->color_range == AVCOL_RANGE_JPEG || avctx->pix_fmt 
== AV_PIX_FMT_YUVJ420P ||
+            avctx->pix_fmt == AV_PIX_FMT_YUVJ422P || avctx->pix_fmt == 
AV_PIX_FMT_YUVJ444P);
+ 
ctx->encode_config.encodeCodecConfig.h264Config.h264VUIParameters.videoFormat 
= 5; // 5=unspecified

- 
ctx->encode_config.encodeCodecConfig.h264Config.h264VUIParameters.videoFullRangeFlag 
= avctx->color_range == AVCOL_RANGE_JPEG;
+ 
ctx->encode_config.encodeCodecConfig.h264Config.h264VUIParameters.colourDescriptionPresentFlag 
=
+           (avctx->colorspace != 2 || avctx->color_primaries != 2 || 
avctx->color_trc != 2);
+
+ 
ctx->encode_config.encodeCodecConfig.h264Config.h264VUIParameters.videoSignalTypePresentFlag 
=
+ 
(ctx->encode_config.encodeCodecConfig.h264Config.h264VUIParameters.colourDescriptionPresentFlag
+           || 
ctx->encode_config.encodeCodecConfig.h264Config.h264VUIParameters.videoFormat 
!= 5
+           || 
ctx->encode_config.encodeCodecConfig.h264Config.h264VUIParameters.videoFullRangeFlag 
!= 0);

          ctx->encode_config.encodeCodecConfig.h264Config.sliceMode = 3;
          ctx->encode_config.encodeCodecConfig.h264Config.sliceModeData = 1;
@@ -944,6 +951,22 @@ static av_cold int nvenc_encode_init(AVCodecContext 
*avctx)

          break;
      case AV_CODEC_ID_H265:
+ 
ctx->encode_config.encodeCodecConfig.hevcConfig.hevcVUIParameters.colourMatrix 
= avctx->colorspace;
+ 
ctx->encode_config.encodeCodecConfig.hevcConfig.hevcVUIParameters.colourPrimaries 
= avctx->color_primaries;
+ 
ctx->encode_config.encodeCodecConfig.hevcConfig.hevcVUIParameters.transferCharacteristics 
= avctx->color_trc;
+ 
ctx->encode_config.encodeCodecConfig.hevcConfig.hevcVUIParameters.videoFullRangeFlag 
=
+            (avctx->color_range == AVCOL_RANGE_JPEG || avctx->pix_fmt 
== AV_PIX_FMT_YUVJ420P ||
+            avctx->pix_fmt == AV_PIX_FMT_YUVJ422P || avctx->pix_fmt == 
AV_PIX_FMT_YUVJ444P);
+ 
ctx->encode_config.encodeCodecConfig.hevcConfig.hevcVUIParameters.videoFormat 
= 5; // 5=unspecified
+
+ 
ctx->encode_config.encodeCodecConfig.hevcConfig.hevcVUIParameters.colourDescriptionPresentFlag 
=
+           (avctx->colorspace != 2 || avctx->color_primaries != 2 || 
avctx->color_trc != 2);
+
+ 
ctx->encode_config.encodeCodecConfig.hevcConfig.hevcVUIParameters.videoSignalTypePresentFlag 
=
+ 
(ctx->encode_config.encodeCodecConfig.hevcConfig.hevcVUIParameters.colourDescriptionPresentFlag
+           || 
ctx->encode_config.encodeCodecConfig.hevcConfig.hevcVUIParameters.videoFormat 
!= 5
+           || 
ctx->encode_config.encodeCodecConfig.hevcConfig.hevcVUIParameters.videoFullRangeFlag 
!= 0);
+
          ctx->encode_config.encodeCodecConfig.hevcConfig.sliceMode = 3;
          ctx->encode_config.encodeCodecConfig.hevcConfig.sliceModeData = 1;

-- 
1.9.1





More information about the ffmpeg-devel mailing list