Patch "media: v4l2-core: Initialize h264 scaling matrix" has been added to the 5.17-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    media: v4l2-core: Initialize h264 scaling matrix

to the 5.17-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     media-v4l2-core-initialize-h264-scaling-matrix.patch
and it can be found in the queue-5.17 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit c95b374107b20725a7f293ef6846c0fff9e53c4a
Author: Nicolas Dufresne <nicolas.dufresne@xxxxxxxxxxxxx>
Date:   Fri Feb 18 13:42:07 2022 -0500

    media: v4l2-core: Initialize h264 scaling matrix
    
    [ Upstream commit 0f6146d476fc99862899e70f2554ee77b444b7b9 ]
    
    In the final H264 API, it is not required to set scaling matrix if
    they are not present in the bitstream. A flag was added in order to let
    the driver know. The downside is that it leaves the default control
    value to 0, which isn't valid. As per the spec (see formulas 7-8/7-9),
    when the scaling matrix are absent from the bitstream, flat values
    of 16 should be used. This improves this control semantic in a way
    that the control value are always valid. Drivers can then use
    the scaling_matrix control values without having to check its presence.
    Same method was employed for MPEG2_QUANTISATION.
    
    This fixes issues with MTK VCODEC H264 decoder when using GStreamer.
    GStreamer does not set this control if its not present in the bitstream.
    As MTK VDCODEC was using the initialized to 0 values, the frames ended
    up completely gray.
    
    Fixes: 54889c51b833d236 ("media: uapi: h264: Rename and clarify PPS_FLAG_SCALING_MATRIX_PRESENT")
    Signed-off-by: Nicolas Dufresne <nicolas.dufresne@xxxxxxxxxxxxx>
    Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/media/v4l2-core/v4l2-ctrls-core.c b/drivers/media/v4l2-core/v4l2-ctrls-core.c
index b25c77b8a445..df8cff47a7fb 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-core.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-core.c
@@ -114,6 +114,7 @@ static void std_init_compound(const struct v4l2_ctrl *ctrl, u32 idx,
 	struct v4l2_ctrl_vp8_frame *p_vp8_frame;
 	struct v4l2_ctrl_vp9_frame *p_vp9_frame;
 	struct v4l2_ctrl_fwht_params *p_fwht_params;
+	struct v4l2_ctrl_h264_scaling_matrix *p_h264_scaling_matrix;
 	void *p = ptr.p + idx * ctrl->elem_size;
 
 	if (ctrl->p_def.p_const)
@@ -168,6 +169,15 @@ static void std_init_compound(const struct v4l2_ctrl *ctrl, u32 idx,
 		p_fwht_params->flags = V4L2_FWHT_FL_PIXENC_YUV |
 			(2 << V4L2_FWHT_FL_COMPONENTS_NUM_OFFSET);
 		break;
+	case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
+		p_h264_scaling_matrix = p;
+		/*
+		 * The default (flat) H.264 scaling matrix when none are
+		 * specified in the bitstream, this is according to formulas
+		 *  (7-8) and (7-9) of the specification.
+		 */
+		memset(p_h264_scaling_matrix, 16, sizeof(*p_h264_scaling_matrix));
+		break;
 	}
 }
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux