Module: Mesa
Branch: main
Commit: f44697239dd408e8eabfe2eb297dee34e101ff34
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f44697239dd408e8eabfe2eb297dee34e101ff34

Author: David Rosca <[email protected]>
Date:   Mon Jul 17 12:34:29 2023 +0200

radeonsi/vcn: Set H264 video signal parameters in bitstream

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     |  9 +++++++++
 src/gallium/drivers/radeonsi/radeon_vcn_enc.h     |  7 +++++++
 src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c | 13 ++++++++++++-
 3 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c 
b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c
index b4903939938..7ee8840659a 100644
--- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c
+++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c
@@ -169,11 +169,20 @@ static void radeon_vcn_enc_h264_get_vui_param(struct 
radeon_encoder *enc,
       pic->seq.vui_flags.aspect_ratio_info_present_flag;
    enc->enc_pic.vui_info.flags.timing_info_present_flag =
       pic->seq.vui_flags.timing_info_present_flag;
+   enc->enc_pic.vui_info.flags.video_signal_type_present_flag =
+      pic->seq.vui_flags.video_signal_type_present_flag;
+   enc->enc_pic.vui_info.flags.colour_description_present_flag =
+      pic->seq.vui_flags.colour_description_present_flag;
    enc->enc_pic.vui_info.aspect_ratio_idc = pic->seq.aspect_ratio_idc;
    enc->enc_pic.vui_info.sar_width = pic->seq.sar_width;
    enc->enc_pic.vui_info.sar_height = pic->seq.sar_height;
    enc->enc_pic.vui_info.num_units_in_tick = pic->seq.num_units_in_tick;
    enc->enc_pic.vui_info.time_scale = pic->seq.time_scale;
+   enc->enc_pic.vui_info.video_format = pic->seq.video_format;
+   enc->enc_pic.vui_info.video_full_range_flag = 
pic->seq.video_full_range_flag;
+   enc->enc_pic.vui_info.colour_primaries = pic->seq.colour_primaries;
+   enc->enc_pic.vui_info.transfer_characteristics = 
pic->seq.transfer_characteristics;
+   enc->enc_pic.vui_info.matrix_coefficients = pic->seq.matrix_coefficients;
 }
 
 /* only checking the first slice to get num of mbs in slice to
diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.h 
b/src/gallium/drivers/radeonsi/radeon_vcn_enc.h
index cbf7d58f275..7cec8e5f5c7 100644
--- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.h
+++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.h
@@ -562,12 +562,19 @@ typedef struct rvcn_enc_vui_info_s
    struct {
       uint32_t aspect_ratio_info_present_flag : 1;
       uint32_t timing_info_present_flag : 1;
+      uint32_t video_signal_type_present_flag : 1;
+      uint32_t colour_description_present_flag : 1;
    } flags;
    uint32_t aspect_ratio_idc;
    uint32_t sar_width;
    uint32_t sar_height;
    uint32_t num_units_in_tick;
    uint32_t time_scale;
+   uint32_t video_format;
+   uint32_t video_full_range_flag;
+   uint32_t colour_primaries;
+   uint32_t transfer_characteristics;
+   uint32_t matrix_coefficients;
 }rvcn_enc_vui_info;
 
 typedef struct rvcn_enc_input_format_s
diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c 
b/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c
index 2e11dcfa4ef..5115c2d55a8 100644
--- a/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c
+++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c
@@ -304,7 +304,18 @@ static void radeon_enc_nalu_sps(struct radeon_encoder *enc)
          }
       }
       radeon_enc_code_fixed_bits(enc, 0x0, 1);  /* overscan info present flag 
*/
-      radeon_enc_code_fixed_bits(enc, 0x0, 1);  /* video signal type present 
flag  */
+      /* video signal type present flag  */
+      radeon_enc_code_fixed_bits(enc, 
pic->vui_info.flags.video_signal_type_present_flag, 1);
+      if (pic->vui_info.flags.video_signal_type_present_flag) {
+         radeon_enc_code_fixed_bits(enc, pic->vui_info.video_format, 3);
+         radeon_enc_code_fixed_bits(enc, pic->vui_info.video_full_range_flag, 
1);
+         radeon_enc_code_fixed_bits(enc, 
pic->vui_info.flags.colour_description_present_flag, 1);
+         if (pic->vui_info.flags.colour_description_present_flag) {
+            radeon_enc_code_fixed_bits(enc, pic->vui_info.colour_primaries, 8);
+            radeon_enc_code_fixed_bits(enc, 
pic->vui_info.transfer_characteristics, 8);
+            radeon_enc_code_fixed_bits(enc, pic->vui_info.matrix_coefficients, 
8);
+         }
+      }
       radeon_enc_code_fixed_bits(enc, 0x0, 1);  /* chroma loc info present 
flag */
       /* timing info present flag */
       radeon_enc_code_fixed_bits(enc, 
(pic->vui_info.flags.timing_info_present_flag), 1);

Reply via email to