[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