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

Author: David Rosca <[email protected]>
Date:   Mon Jul 17 14:18:41 2023 +0200

radeonsi/vcn: Set HEVC 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_1_2.c | 13 ++++++++++++-
 src/gallium/drivers/radeonsi/radeon_vcn_enc_2_0.c | 13 ++++++++++++-
 3 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c 
b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c
index 7ee8840659a..f0fe889cd69 100644
--- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c
+++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c
@@ -394,11 +394,20 @@ static void radeon_vcn_enc_hevc_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 ctbs in slice to
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 5115c2d55a8..09d0e3f7ff2 100644
--- a/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c
+++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c
@@ -444,7 +444,18 @@ static void radeon_enc_nalu_sps_hevc(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 */
       radeon_enc_code_fixed_bits(enc, 0x0, 1);  /* neutral chroma indication 
flag */
       radeon_enc_code_fixed_bits(enc, 0x0, 1);  /* field seq flag */
diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc_2_0.c 
b/src/gallium/drivers/radeonsi/radeon_vcn_enc_2_0.c
index e2aaf6e0638..dff1825fb5a 100644
--- a/src/gallium/drivers/radeonsi/radeon_vcn_enc_2_0.c
+++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc_2_0.c
@@ -336,7 +336,18 @@ static void radeon_enc_nalu_sps_hevc(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 */
       radeon_enc_code_fixed_bits(enc, 0x0, 1);  /* neutral chroma indication 
flag */
       radeon_enc_code_fixed_bits(enc, 0x0, 1);  /* field seq flag */

Reply via email to