Refreshed all patches. The following patches were applied upstream: * 755-v5.8-net-dsa-add-GRO-support-via-gro_cells.patch * 831-v5.9-usbip-tools-fix-build-error-for-multiple-definition.patch Compile-tested on: x86_64, ipq40xx, ath79 Runtime-tested on: x86_64, ipq40xx, ath79 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
		
			
				
	
	
		
			151 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 70b5a28786215c996503210abd3e44c200771640 Mon Sep 17 00:00:00 2001
 | 
						|
From: Jernej Skrabec <jernej.skrabec@siol.net>
 | 
						|
Date: Fri, 13 Dec 2019 17:04:25 +0100
 | 
						|
Subject: [PATCH] media: uapi: hevc: Add scaling matrix control
 | 
						|
 | 
						|
Taken from https://patchwork.linuxtv.org/patch/60728/
 | 
						|
Changes (mainly documentation) have been requested.
 | 
						|
 | 
						|
HEVC has a scaling matrix concept. Add support for it.
 | 
						|
 | 
						|
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
 | 
						|
---
 | 
						|
 .../media/uapi/v4l/ext-ctrls-codec.rst        | 41 +++++++++++++++++++
 | 
						|
 .../media/uapi/v4l/pixfmt-compressed.rst      |  1 +
 | 
						|
 drivers/media/v4l2-core/v4l2-ctrls.c          | 10 +++++
 | 
						|
 include/media/hevc-ctrls.h                    | 11 +++++
 | 
						|
 4 files changed, 63 insertions(+)
 | 
						|
 | 
						|
--- a/Documentation/media/uapi/v4l/ext-ctrls-codec.rst
 | 
						|
+++ b/Documentation/media/uapi/v4l/ext-ctrls-codec.rst
 | 
						|
@@ -4174,6 +4174,47 @@ enum v4l2_mpeg_video_hevc_size_of_length
 | 
						|
       - ``padding[6]``
 | 
						|
       - Applications and drivers must set this to zero.
 | 
						|
 
 | 
						|
+``V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX (struct)``
 | 
						|
+    Specifies the scaling matrix (as extracted from the bitstream) for
 | 
						|
+    the associated HEVC slice data. The bitstream parameters are
 | 
						|
+    defined according to :ref:`hevc`, section 7.4.5 "Scaling list
 | 
						|
+    data semantics". For further documentation, refer to the above
 | 
						|
+    specification, unless there is an explicit comment stating
 | 
						|
+    otherwise.
 | 
						|
+
 | 
						|
+    .. note::
 | 
						|
+
 | 
						|
+       This compound control is not yet part of the public kernel API and
 | 
						|
+       it is expected to change.
 | 
						|
+
 | 
						|
+.. c:type:: v4l2_ctrl_hevc_scaling_matrix
 | 
						|
+
 | 
						|
+.. cssclass:: longtable
 | 
						|
+
 | 
						|
+.. flat-table:: struct v4l2_ctrl_hevc_scaling_matrix
 | 
						|
+    :header-rows:  0
 | 
						|
+    :stub-columns: 0
 | 
						|
+    :widths:       1 1 2
 | 
						|
+
 | 
						|
+    * - __u8
 | 
						|
+      - ``scaling_list_4x4[6][16]``
 | 
						|
+      -
 | 
						|
+    * - __u8
 | 
						|
+      - ``scaling_list_8x8[6][64]``
 | 
						|
+      -
 | 
						|
+    * - __u8
 | 
						|
+      - ``scaling_list_16x16[6][64]``
 | 
						|
+      -
 | 
						|
+    * - __u8
 | 
						|
+      - ``scaling_list_32x32[2][64]``
 | 
						|
+      -
 | 
						|
+    * - __u8
 | 
						|
+      - ``scaling_list_dc_coef_16x16[6]``
 | 
						|
+      -
 | 
						|
+    * - __u8
 | 
						|
+      - ``scaling_list_dc_coef_32x32[2]``
 | 
						|
+      -
 | 
						|
+
 | 
						|
 ``V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE (enum)``
 | 
						|
     Specifies the decoding mode to use. Currently exposes slice-based and
 | 
						|
     frame-based decoding but new modes might be added later on.
 | 
						|
--- a/Documentation/media/uapi/v4l/pixfmt-compressed.rst
 | 
						|
+++ b/Documentation/media/uapi/v4l/pixfmt-compressed.rst
 | 
						|
@@ -203,6 +203,7 @@ Compressed Formats
 | 
						|
         * ``V4L2_CID_MPEG_VIDEO_HEVC_SPS``
 | 
						|
         * ``V4L2_CID_MPEG_VIDEO_HEVC_PPS``
 | 
						|
         * ``V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS``
 | 
						|
+        * ``V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX``
 | 
						|
 	See the :ref:`associated Codec Control IDs <v4l2-mpeg-hevc>`.
 | 
						|
 	Buffers associated with this pixel format must contain the appropriate
 | 
						|
 	number of macroblocks to decode a full corresponding frame.
 | 
						|
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
 | 
						|
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
 | 
						|
@@ -974,6 +974,7 @@ const char *v4l2_ctrl_get_name(u32 id)
 | 
						|
 	case V4L2_CID_MPEG_VIDEO_HEVC_SPS:			return "HEVC Sequence Parameter Set";
 | 
						|
 	case V4L2_CID_MPEG_VIDEO_HEVC_PPS:			return "HEVC Picture Parameter Set";
 | 
						|
 	case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:		return "HEVC Slice Parameters";
 | 
						|
+	case V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX:		return "HEVC Scaling Matrix";
 | 
						|
 	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:		return "HEVC Decode Mode";
 | 
						|
 	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:		return "HEVC Start Code";
 | 
						|
 
 | 
						|
@@ -1406,6 +1407,9 @@ void v4l2_ctrl_fill(u32 id, const char *
 | 
						|
 	case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:
 | 
						|
 		*type = V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS;
 | 
						|
 		break;
 | 
						|
+	case V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX:
 | 
						|
+		*type = V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX;
 | 
						|
+		break;
 | 
						|
 	case V4L2_CID_UNIT_CELL_SIZE:
 | 
						|
 		*type = V4L2_CTRL_TYPE_AREA;
 | 
						|
 		*flags |= V4L2_CTRL_FLAG_READ_ONLY;
 | 
						|
@@ -1852,6 +1856,9 @@ static int std_validate_compound(const s
 | 
						|
 		zero_padding(*p_hevc_slice_params);
 | 
						|
 		break;
 | 
						|
 
 | 
						|
+	case V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX:
 | 
						|
+		break;
 | 
						|
+
 | 
						|
 	case V4L2_CTRL_TYPE_AREA:
 | 
						|
 		area = p;
 | 
						|
 		if (!area->width || !area->height)
 | 
						|
@@ -2541,6 +2548,9 @@ static struct v4l2_ctrl *v4l2_ctrl_new(s
 | 
						|
 	case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
 | 
						|
 		elem_size = sizeof(struct v4l2_ctrl_hevc_slice_params);
 | 
						|
 		break;
 | 
						|
+	case V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX:
 | 
						|
+		elem_size = sizeof(struct v4l2_ctrl_hevc_scaling_matrix);
 | 
						|
+		break;
 | 
						|
 	case V4L2_CTRL_TYPE_AREA:
 | 
						|
 		elem_size = sizeof(struct v4l2_area);
 | 
						|
 		break;
 | 
						|
--- a/include/media/hevc-ctrls.h
 | 
						|
+++ b/include/media/hevc-ctrls.h
 | 
						|
@@ -19,6 +19,7 @@
 | 
						|
 #define V4L2_CID_MPEG_VIDEO_HEVC_SPS		(V4L2_CID_MPEG_BASE + 1008)
 | 
						|
 #define V4L2_CID_MPEG_VIDEO_HEVC_PPS		(V4L2_CID_MPEG_BASE + 1009)
 | 
						|
 #define V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS	(V4L2_CID_MPEG_BASE + 1010)
 | 
						|
+#define V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX	(V4L2_CID_MPEG_BASE + 1011)
 | 
						|
 #define V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE	(V4L2_CID_MPEG_BASE + 1015)
 | 
						|
 #define V4L2_CID_MPEG_VIDEO_HEVC_START_CODE	(V4L2_CID_MPEG_BASE + 1016)
 | 
						|
 
 | 
						|
@@ -26,6 +27,7 @@
 | 
						|
 #define V4L2_CTRL_TYPE_HEVC_SPS 0x0120
 | 
						|
 #define V4L2_CTRL_TYPE_HEVC_PPS 0x0121
 | 
						|
 #define V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS 0x0122
 | 
						|
+#define V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX 0x0123
 | 
						|
 
 | 
						|
 enum v4l2_mpeg_video_hevc_decode_mode {
 | 
						|
 	V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
 | 
						|
@@ -209,4 +211,13 @@ struct v4l2_ctrl_hevc_slice_params {
 | 
						|
 	__u64	flags;
 | 
						|
 };
 | 
						|
 
 | 
						|
+struct v4l2_ctrl_hevc_scaling_matrix {
 | 
						|
+	__u8	scaling_list_4x4[6][16];
 | 
						|
+	__u8	scaling_list_8x8[6][64];
 | 
						|
+	__u8	scaling_list_16x16[6][64];
 | 
						|
+	__u8	scaling_list_32x32[2][64];
 | 
						|
+	__u8	scaling_list_dc_coef_16x16[6];
 | 
						|
+	__u8	scaling_list_dc_coef_32x32[2];
 | 
						|
+};
 | 
						|
+
 | 
						|
 #endif
 |