summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorAgatha Hu <ahu@nvidia.com>2016-03-04 17:00:48 +0800
committerTimo Rothenpieler <timo@rothenpieler.org>2016-03-04 10:49:33 +0100
commit362e05f1ea05ef7f9892f0e888323136ba77dd94 (patch)
treed87947d5e7d1d6fcd2e9c746eeae63337f9fd30c /libavcodec
parent79a54f30c8ba02cbf2b02c650120246b260977ec (diff)
avcodec/nvenc: Fix H264 and HEVC vui info update
Signed-off-by: Timo Rothenpieler <timo@rothenpieler.org>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/nvenc.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c
index a3b02fa99f..5d78930848 100644
--- a/libavcodec/nvenc.c
+++ b/libavcodec/nvenc.c
@@ -868,14 +868,19 @@ 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;
-
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.colourDescriptionPresentFlag =
+ (avctx->colorspace != 2 || avctx->color_primaries != 2 || avctx->color_trc != 2);
- ctx->encode_config.encodeCodecConfig.h264Config.h264VUIParameters.videoFullRangeFlag = avctx->color_range == AVCOL_RANGE_JPEG;
+ 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 +949,20 @@ 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.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;