decoder: CB2 hdr information is acquired abnormally. [1/1]
authorkuan.hu <kuan.hu@amlogic.com>
Mon, 6 Jun 2022 12:44:07 +0000 (20:44 +0800)
committerLiang Ji <liang.ji@amlogic.com>
Fri, 17 Jun 2022 12:55:34 +0000 (20:55 +0800)
PD#SWPL-83432
BUG=232905331

Problem:
The HDR parameter is read when the
color_description_present_flag is not recognized,
resulting in the wrong parameter being transmitted
when the color_description_present_flag is 0.

Solution:
According to the HDR protocol, adjust
the read logic of related parameters.

Verify:
adt3

Signed-off-by: kuan.hu <kuan.hu@amlogic.com>
Change-Id: I5694100d826afc32674074f1e5508ab05f7dadb0

drivers/frame_provider/decoder/h264_multi/vmh264.c
drivers/frame_provider/decoder/h265/vh265.c
drivers/frame_provider/decoder/vav1/vav1.c

index 9150d192de834c21b97993e8c25255b33914294c..4ffa89452f1403511fe7a85ea7b813f88f4b2ea0 100644 (file)
@@ -6547,7 +6547,12 @@ static irqreturn_t vh264_isr_thread_fn(struct vdec_s *vdec, int irq)
                                        ((video_signal & 0xff0000) >> 16) |
                                        ((video_signal & 0x3f000000));
 
-
+               /* When the matrix_coeffiecents, transfer_characteristics and colour_primaries
+                * syntax elements are absent, their values shall be presumed to be equal to 2
+                */
+               if ((hw->video_signal_from_vui & 0x100000) == 0) {
+                       hw->video_signal_from_vui =  (hw->video_signal_from_vui & 0xfff00000) | 0x20202;
+               }
                /*dpb_print(DECODE_ID(hw),
                                0,
                                "video_signal_from_vui:0x%x, "
index 9369556850c484055e51c269ea9aed30ed631923..7ef22cbbd861d419de73289b40b8588917184447 100644 (file)
@@ -11363,6 +11363,13 @@ force_output:
                        }
 #endif
                hevc->video_signal_type = (v << 16) | c;
+
+               /* When the matrix_coeffiecents, transfer_characteristics and colour_primaries
+                * syntax elements are absent, their values shall be presumed to be equal to 2
+                */
+               if ((hevc->video_signal_type & 0x100000) == 0) {
+                       hevc->video_signal_type = (hevc->video_signal_type & 0xfff00000) | 0x20202;
+               }
                video_signal_type = hevc->video_signal_type;
        }
 
index e7ee9f5f8927d810b0f9da7f07c5857d41066887..b7226116997016eb5c2936c76e4f181fd9ffc92f 100644 (file)
@@ -8533,6 +8533,13 @@ static irqreturn_t vav1_isr_thread_fn(int irq, void *data)
                hw->video_signal_type = (hw->aom_param.p.video_signal_type << 16
                        | hw->aom_param.p.color_description);
 
+               /* When the matrix_coeffiecents, transfer_characteristics and colour_primaries
+                * syntax elements are absent, their values shall be presumed to be equal to 2
+                */
+               if ((hw->video_signal_type & 0x100000) == 0) {
+                       hw->video_signal_type =  (hw->video_signal_type & 0xfff00000) | 0x20202;
+               }
+
            if (next_lcu_size != hw->current_lcu_size) {
                        av1_print(hw, AOM_DEBUG_HW_MORE,
                                " ## lcu_size changed from %d to %d\n",