Module: Mesa Branch: main Commit: e6f0819806c779ef18bcc83296045bf76811e757 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e6f0819806c779ef18bcc83296045bf76811e757
Author: David Rosca <[email protected]> Date: Mon Jul 17 12:34:40 2023 +0200 radeonsi/vcn: Enable full/limited range support for H264/HEVC/AV1 Reviewed-by: Ruijing Dong <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24174> --- src/gallium/drivers/radeonsi/radeon_vcn_enc.c | 17 ++++++++++------- src/gallium/drivers/radeonsi/radeon_vcn_enc.h | 1 + 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c index f0fe889cd69..cb4d9e336c7 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c @@ -207,18 +207,20 @@ static void radeon_vcn_enc_h264_get_slice_ctrl_param(struct radeon_encoder *enc, enc->enc_pic.slice_ctrl.num_mbs_per_slice = num_mbs_in_slice; } -static void radeon_vcn_enc_get_output_format_param(struct radeon_encoder *enc) +static void radeon_vcn_enc_get_output_format_param(struct radeon_encoder *enc, bool full_range) { switch (enc->enc_pic.bit_depth_luma_minus8) { case 2: /* 10 bits */ enc->enc_pic.enc_output_format.output_color_volume = RENCODE_COLOR_VOLUME_G22_BT709; - enc->enc_pic.enc_output_format.output_color_range = RENCODE_COLOR_RANGE_FULL; + enc->enc_pic.enc_output_format.output_color_range = full_range ? + RENCODE_COLOR_RANGE_FULL : RENCODE_COLOR_RANGE_STUDIO; enc->enc_pic.enc_output_format.output_chroma_location = RENCODE_CHROMA_LOCATION_INTERSTITIAL; enc->enc_pic.enc_output_format.output_color_bit_depth = RENCODE_COLOR_BIT_DEPTH_10_BIT; break; default: /* 8 bits */ enc->enc_pic.enc_output_format.output_color_volume = RENCODE_COLOR_VOLUME_G22_BT709; - enc->enc_pic.enc_output_format.output_color_range = RENCODE_COLOR_RANGE_FULL; + enc->enc_pic.enc_output_format.output_color_range = full_range ? + RENCODE_COLOR_RANGE_FULL : RENCODE_COLOR_RANGE_STUDIO; enc->enc_pic.enc_output_format.output_chroma_location = RENCODE_CHROMA_LOCATION_INTERSTITIAL; enc->enc_pic.enc_output_format.output_color_bit_depth = RENCODE_COLOR_BIT_DEPTH_8_BIT; break; @@ -259,7 +261,8 @@ static void radeon_vcn_enc_get_input_format_param(struct radeon_encoder *enc, } enc->enc_pic.enc_input_format.input_color_volume = RENCODE_COLOR_VOLUME_G22_BT709; - enc->enc_pic.enc_input_format.input_color_range = RENCODE_COLOR_RANGE_FULL; + enc->enc_pic.enc_input_format.input_color_range = pic_base->input_full_range ? + RENCODE_COLOR_RANGE_FULL : RENCODE_COLOR_RANGE_STUDIO; enc->enc_pic.enc_input_format.input_chroma_location = RENCODE_CHROMA_LOCATION_INTERSTITIAL; } @@ -288,7 +291,7 @@ static void radeon_vcn_enc_h264_get_param(struct radeon_encoder *enc, radeon_vcn_enc_h264_get_vui_param(enc, pic); radeon_vcn_enc_h264_get_slice_ctrl_param(enc, pic); radeon_vcn_enc_get_input_format_param(enc, &pic->base); - radeon_vcn_enc_get_output_format_param(enc); + radeon_vcn_enc_get_output_format_param(enc, pic->seq.video_full_range_flag); } static void radeon_vcn_enc_hevc_get_cropping_param(struct radeon_encoder *enc, @@ -495,7 +498,7 @@ static void radeon_vcn_enc_hevc_get_param(struct radeon_encoder *enc, radeon_vcn_enc_hevc_get_vui_param(enc, pic); radeon_vcn_enc_hevc_get_slice_ctrl_param(enc, pic); radeon_vcn_enc_get_input_format_param(enc, &pic->base); - radeon_vcn_enc_get_output_format_param(enc); + radeon_vcn_enc_get_output_format_param(enc, pic->seq.video_full_range_flag); } static void radeon_vcn_enc_av1_get_spec_misc_param(struct radeon_encoder *enc, @@ -638,7 +641,7 @@ static void radeon_vcn_enc_av1_get_param(struct radeon_encoder *enc, radeon_vcn_enc_av1_color_description(enc, pic); radeon_vcn_enc_av1_get_rc_param(enc, pic); radeon_vcn_enc_get_input_format_param(enc, &pic->base); - radeon_vcn_enc_get_output_format_param(enc); + radeon_vcn_enc_get_output_format_param(enc, pic->seq.color_config.color_range); } static void radeon_vcn_enc_get_param(struct radeon_encoder *enc, struct pipe_picture_desc *picture) diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.h b/src/gallium/drivers/radeonsi/radeon_vcn_enc.h index 7cec8e5f5c7..dc7406ddde3 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.h +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.h @@ -165,6 +165,7 @@ #define RENCODE_COLOR_VOLUME_G22_BT709 0 #define RENCODE_COLOR_RANGE_FULL 0 +#define RENCODE_COLOR_RANGE_STUDIO 1 #define RENCODE_CHROMA_LOCATION_INTERSTITIAL 0 #define RENCODE_COLOR_BIT_DEPTH_8_BIT 0
