linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/6] Add new controls for CQ and Frame-skip
@ 2020-07-20 13:23 Stanimir Varbanov
  2020-07-20 13:23 ` [PATCH 1/6] media: v4l2-ctrls: Add encoder constant quality control Stanimir Varbanov
                   ` (5 more replies)
  0 siblings, 6 replies; 8+ messages in thread
From: Stanimir Varbanov @ 2020-07-20 13:23 UTC (permalink / raw)
  To: linux-media, linux-kernel, linux-arm-msm, linux-arm-kernel
  Cc: Mauro Carvalho Chehab, Hans Verkuil, Kyungmin Park, Kamil Debski,
	Jeongtae Park, Andrzej Hajda, Ezequiel Garcia, Philipp Zabel,
	Maheshwar Ajja, Stanimir Varbanov

Hello,

This is a new series which adds Constant quality and Frame skip std
controls. The series is combined from two other series [1] and [2].

Changes:
 * added Reviewed-by Hans tag in 1/6 and 3/6.
 * fixed typos in 6/6
 * rebased on top of media/master

regards,
Stan

[1] https://www.spinics.net/lists/linux-media/msg171411.html 
[2] https://www.spinics.net/lists/kernel/msg3578260.html

Maheshwar Ajja (1):
  media: v4l2-ctrls: Add encoder constant quality control

Stanimir Varbanov (5):
  venus: venc: Add support for constant quality control
  media: v4l2-ctrl: Add frame-skip std encoder control
  venus: venc: Add support for frame-skip mode v4l2 control
  media: s5p-mfc: Use standard frame skip mode control
  media: docs: Deprecate mfc frame skip control

 .../media/v4l/ext-ctrls-codec.rst             | 48 +++++++++++++++++++
 drivers/media/platform/qcom/venus/core.h      |  2 +
 drivers/media/platform/qcom/venus/hfi_cmds.c  | 37 +++++++++++++-
 .../media/platform/qcom/venus/hfi_helper.h    | 10 +++-
 drivers/media/platform/qcom/venus/venc.c      | 20 ++++++--
 .../media/platform/qcom/venus/venc_ctrls.c    | 17 ++++++-
 drivers/media/platform/s5p-mfc/s5p_mfc_enc.c  |  6 +++
 drivers/media/v4l2-core/v4l2-ctrls.c          | 12 +++++
 include/uapi/linux/v4l2-controls.h            |  8 ++++
 9 files changed, 154 insertions(+), 6 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/6] media: v4l2-ctrls: Add encoder constant quality control
  2020-07-20 13:23 [PATCH 0/6] Add new controls for CQ and Frame-skip Stanimir Varbanov
@ 2020-07-20 13:23 ` Stanimir Varbanov
  2020-07-20 13:23 ` [PATCH 2/6] venus: venc: Add support for " Stanimir Varbanov
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Stanimir Varbanov @ 2020-07-20 13:23 UTC (permalink / raw)
  To: linux-media, linux-kernel, linux-arm-msm, linux-arm-kernel
  Cc: Mauro Carvalho Chehab, Hans Verkuil, Kyungmin Park, Kamil Debski,
	Jeongtae Park, Andrzej Hajda, Ezequiel Garcia, Philipp Zabel,
	Maheshwar Ajja, Stanimir Varbanov

From: Maheshwar Ajja <majja@codeaurora.org>

When V4L2_CID_MPEG_VIDEO_BITRATE_MODE value is
V4L2_MPEG_VIDEO_BITRATE_MODE_CQ, encoder will produce
constant quality output indicated by
V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY control value.
Encoder will choose appropriate quantization parameter
and bitrate to produce requested frame quality level.

Signed-off-by: Maheshwar Ajja <majja@codeaurora.org>
Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
---
 .../userspace-api/media/v4l/ext-ctrls-codec.rst        | 10 ++++++++++
 drivers/media/v4l2-core/v4l2-ctrls.c                   |  2 ++
 include/uapi/linux/v4l2-controls.h                     |  2 ++
 3 files changed, 14 insertions(+)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index d0d506a444b1..b9d3f7ae6486 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -581,6 +581,8 @@ enum v4l2_mpeg_video_bitrate_mode -
       - Variable bitrate
     * - ``V4L2_MPEG_VIDEO_BITRATE_MODE_CBR``
       - Constant bitrate
+    * - ``V4L2_MPEG_VIDEO_BITRATE_MODE_CQ``
+      - Constant quality
 
 
 
@@ -592,6 +594,14 @@ enum v4l2_mpeg_video_bitrate_mode -
     the average video bitrate. It is ignored if the video bitrate mode
     is set to constant bitrate.
 
+``V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY (integer)``
+    Constant quality level control. This control is applicable when
+    ``V4L2_CID_MPEG_VIDEO_BITRATE_MODE`` value is
+    ``V4L2_MPEG_VIDEO_BITRATE_MODE_CQ``. Valid range is 1 to 100
+    where 1 indicates lowest quality and 100 indicates highest quality.
+    Encoder will decide the appropriate quantization parameter and
+    bitrate to produce requested frame quality.
+
 ``V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (integer)``
     For every captured frame, skip this many subsequent frames (default
     0).
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
index 3f3fbcd60cc6..bc00d02e411f 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -200,6 +200,7 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
 	static const char * const mpeg_video_bitrate_mode[] = {
 		"Variable Bitrate",
 		"Constant Bitrate",
+		"Constant Quality",
 		NULL
 	};
 	static const char * const mpeg_stream_type[] = {
@@ -832,6 +833,7 @@ const char *v4l2_ctrl_get_name(u32 id)
 	case V4L2_CID_MPEG_VIDEO_GOP_CLOSURE:	return "Video GOP Closure";
 	case V4L2_CID_MPEG_VIDEO_PULLDOWN:	return "Video Pulldown";
 	case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:	return "Video Bitrate Mode";
+	case V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY:	return "Constant Quality";
 	case V4L2_CID_MPEG_VIDEO_BITRATE:	return "Video Bitrate";
 	case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK:	return "Video Peak Bitrate";
 	case V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION: return "Video Temporal Decimation";
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index 62271418c1be..0f7e4388dcce 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -375,6 +375,7 @@ enum v4l2_mpeg_video_aspect {
 enum v4l2_mpeg_video_bitrate_mode {
 	V4L2_MPEG_VIDEO_BITRATE_MODE_VBR = 0,
 	V4L2_MPEG_VIDEO_BITRATE_MODE_CBR = 1,
+	V4L2_MPEG_VIDEO_BITRATE_MODE_CQ  = 2,
 };
 #define V4L2_CID_MPEG_VIDEO_BITRATE		(V4L2_CID_MPEG_BASE+207)
 #define V4L2_CID_MPEG_VIDEO_BITRATE_PEAK	(V4L2_CID_MPEG_BASE+208)
@@ -742,6 +743,7 @@ enum v4l2_cid_mpeg_video_hevc_size_of_length_field {
 #define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR	(V4L2_CID_MPEG_BASE + 642)
 #define V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES	(V4L2_CID_MPEG_BASE + 643)
 #define V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR	(V4L2_CID_MPEG_BASE + 644)
+#define V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY		(V4L2_CID_MPEG_BASE + 645)
 
 /*  MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */
 #define V4L2_CID_MPEG_CX2341X_BASE				(V4L2_CTRL_CLASS_MPEG | 0x1000)
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/6] venus: venc: Add support for constant quality control
  2020-07-20 13:23 [PATCH 0/6] Add new controls for CQ and Frame-skip Stanimir Varbanov
  2020-07-20 13:23 ` [PATCH 1/6] media: v4l2-ctrls: Add encoder constant quality control Stanimir Varbanov
@ 2020-07-20 13:23 ` Stanimir Varbanov
  2020-07-20 13:23 ` [PATCH 3/6] media: v4l2-ctrl: Add frame-skip std encoder control Stanimir Varbanov
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Stanimir Varbanov @ 2020-07-20 13:23 UTC (permalink / raw)
  To: linux-media, linux-kernel, linux-arm-msm, linux-arm-kernel
  Cc: Mauro Carvalho Chehab, Hans Verkuil, Kyungmin Park, Kamil Debski,
	Jeongtae Park, Andrzej Hajda, Ezequiel Garcia, Philipp Zabel,
	Maheshwar Ajja, Stanimir Varbanov

Adds implementation of V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY v4l
control when the bitrate mode is CQ.

Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
---
 drivers/media/platform/qcom/venus/core.h      |  1 +
 drivers/media/platform/qcom/venus/hfi_cmds.c  | 37 ++++++++++++++++++-
 .../media/platform/qcom/venus/hfi_helper.h    | 10 ++++-
 drivers/media/platform/qcom/venus/venc.c      | 14 ++++++-
 .../media/platform/qcom/venus/venc_ctrls.c    |  8 +++-
 5 files changed, 66 insertions(+), 4 deletions(-)

diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h
index 7118612673c9..1bac30d4cf50 100644
--- a/drivers/media/platform/qcom/venus/core.h
+++ b/drivers/media/platform/qcom/venus/core.h
@@ -201,6 +201,7 @@ struct venc_controls {
 	u32 bitrate;
 	u32 bitrate_peak;
 	u32 rc_enable;
+	u32 const_quality;
 
 	u32 h264_i_period;
 	u32 h264_entropy_mode;
diff --git a/drivers/media/platform/qcom/venus/hfi_cmds.c b/drivers/media/platform/qcom/venus/hfi_cmds.c
index c67e412f8201..7022368c1e63 100644
--- a/drivers/media/platform/qcom/venus/hfi_cmds.c
+++ b/drivers/media/platform/qcom/venus/hfi_cmds.c
@@ -640,6 +640,7 @@ static int pkt_session_set_property_1x(struct hfi_session_set_property_pkt *pkt,
 		case HFI_RATE_CONTROL_CBR_VFR:
 		case HFI_RATE_CONTROL_VBR_CFR:
 		case HFI_RATE_CONTROL_VBR_VFR:
+		case HFI_RATE_CONTROL_CQ:
 			break;
 		default:
 			ret = -EINVAL;
@@ -1218,6 +1219,37 @@ pkt_session_set_property_4xx(struct hfi_session_set_property_pkt *pkt,
 	return 0;
 }
 
+static int
+pkt_session_set_property_6xx(struct hfi_session_set_property_pkt *pkt,
+			     void *cookie, u32 ptype, void *pdata)
+{
+	void *prop_data;
+
+	if (!pkt || !cookie || !pdata)
+		return -EINVAL;
+
+	prop_data = &pkt->data[1];
+
+	pkt->shdr.hdr.size = sizeof(*pkt);
+	pkt->shdr.hdr.pkt_type = HFI_CMD_SESSION_SET_PROPERTY;
+	pkt->shdr.session_id = hash32_ptr(cookie);
+	pkt->num_properties = 1;
+	pkt->data[0] = ptype;
+
+	switch (ptype) {
+	case HFI_PROPERTY_CONFIG_HEIC_FRAME_QUALITY: {
+		struct hfi_heic_frame_quality *in = pdata, *cq = prop_data;
+
+		cq->frame_quality = in->frame_quality;
+		pkt->shdr.hdr.size += sizeof(u32) + sizeof(*cq);
+		break;
+	} default:
+		return pkt_session_set_property_4xx(pkt, cookie, ptype, pdata);
+	}
+
+	return 0;
+}
+
 int pkt_session_get_property(struct hfi_session_get_property_pkt *pkt,
 			     void *cookie, u32 ptype)
 {
@@ -1236,7 +1268,10 @@ int pkt_session_set_property(struct hfi_session_set_property_pkt *pkt,
 	if (hfi_ver == HFI_VERSION_3XX)
 		return pkt_session_set_property_3xx(pkt, cookie, ptype, pdata);
 
-	return pkt_session_set_property_4xx(pkt, cookie, ptype, pdata);
+	if (hfi_ver == HFI_VERSION_4XX)
+		return pkt_session_set_property_4xx(pkt, cookie, ptype, pdata);
+
+	return pkt_session_set_property_6xx(pkt, cookie, ptype, pdata);
 }
 
 void pkt_set_version(enum hfi_version version)
diff --git a/drivers/media/platform/qcom/venus/hfi_helper.h b/drivers/media/platform/qcom/venus/hfi_helper.h
index f6613df1d16b..758c70ac26fd 100644
--- a/drivers/media/platform/qcom/venus/hfi_helper.h
+++ b/drivers/media/platform/qcom/venus/hfi_helper.h
@@ -231,6 +231,7 @@
 #define HFI_RATE_CONTROL_VBR_CFR		0x1000003
 #define HFI_RATE_CONTROL_CBR_VFR		0x1000004
 #define HFI_RATE_CONTROL_CBR_CFR		0x1000005
+#define HFI_RATE_CONTROL_CQ			0x1000008
 
 #define HFI_VIDEO_CODEC_H264			0x00000002
 #define HFI_VIDEO_CODEC_H263			0x00000004
@@ -504,6 +505,7 @@
 #define HFI_PROPERTY_CONFIG_VENC_HIER_P_ENH_LAYER		0x200600b
 #define HFI_PROPERTY_CONFIG_VENC_LTRPERIOD			0x200600c
 #define HFI_PROPERTY_CONFIG_VENC_PERF_MODE			0x200600e
+#define HFI_PROPERTY_CONFIG_HEIC_FRAME_QUALITY			0x2006014
 
 /*
  * HFI_PROPERTY_PARAM_VPE_COMMON_START
@@ -520,7 +522,8 @@
 enum hfi_version {
 	HFI_VERSION_1XX,
 	HFI_VERSION_3XX,
-	HFI_VERSION_4XX
+	HFI_VERSION_4XX,
+	HFI_VERSION_6XX,
 };
 
 struct hfi_buffer_info {
@@ -725,6 +728,11 @@ struct hfi_quality_vs_speed {
 	u32 quality_vs_speed;
 };
 
+struct hfi_heic_frame_quality {
+	u32 frame_quality;
+	u32 reserved[3];
+};
+
 struct hfi_quantization {
 	u32 qp_i;
 	u32 qp_p;
diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c
index 513bbc07f7bc..4c30c3f3369e 100644
--- a/drivers/media/platform/qcom/venus/venc.c
+++ b/drivers/media/platform/qcom/venus/venc.c
@@ -740,14 +740,26 @@ static int venc_set_properties(struct venus_inst *inst)
 		rate_control = HFI_RATE_CONTROL_OFF;
 	else if (ctr->bitrate_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_VBR)
 		rate_control = HFI_RATE_CONTROL_VBR_CFR;
-	else
+	else if (ctr->bitrate_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_CBR)
 		rate_control = HFI_RATE_CONTROL_CBR_CFR;
+	else if (ctr->bitrate_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_CQ)
+		rate_control = HFI_RATE_CONTROL_CQ;
 
 	ptype = HFI_PROPERTY_PARAM_VENC_RATE_CONTROL;
 	ret = hfi_session_set_property(inst, ptype, &rate_control);
 	if (ret)
 		return ret;
 
+	if (rate_control == HFI_RATE_CONTROL_CQ && ctr->const_quality) {
+		struct hfi_heic_frame_quality quality = {};
+
+		ptype = HFI_PROPERTY_CONFIG_HEIC_FRAME_QUALITY;
+		quality.frame_quality = ctr->const_quality;
+		ret = hfi_session_set_property(inst, ptype, &quality);
+		if (ret)
+			return ret;
+	}
+
 	if (!ctr->bitrate)
 		bitrate = 64000;
 	else
diff --git a/drivers/media/platform/qcom/venus/venc_ctrls.c b/drivers/media/platform/qcom/venus/venc_ctrls.c
index 8362dde7949e..97a1e821c07e 100644
--- a/drivers/media/platform/qcom/venus/venc_ctrls.c
+++ b/drivers/media/platform/qcom/venus/venc_ctrls.c
@@ -202,6 +202,9 @@ static int venc_op_s_ctrl(struct v4l2_ctrl *ctrl)
 	case V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE:
 		ctr->rc_enable = ctrl->val;
 		break;
+	case V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY:
+		ctr->const_quality = ctrl->val;
+		break;
 	default:
 		return -EINVAL;
 	}
@@ -217,7 +220,7 @@ int venc_ctrl_init(struct venus_inst *inst)
 {
 	int ret;
 
-	ret = v4l2_ctrl_handler_init(&inst->ctrl_handler, 31);
+	ret = v4l2_ctrl_handler_init(&inst->ctrl_handler, 32);
 	if (ret)
 		return ret;
 
@@ -357,6 +360,9 @@ int venc_ctrl_init(struct venus_inst *inst)
 	v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
 			  V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE, 0, 1, 1, 1);
 
+	v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
+			  V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY, 0, 100, 1, 0);
+
 	ret = inst->ctrl_handler.error;
 	if (ret)
 		goto err;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/6] media: v4l2-ctrl: Add frame-skip std encoder control
  2020-07-20 13:23 [PATCH 0/6] Add new controls for CQ and Frame-skip Stanimir Varbanov
  2020-07-20 13:23 ` [PATCH 1/6] media: v4l2-ctrls: Add encoder constant quality control Stanimir Varbanov
  2020-07-20 13:23 ` [PATCH 2/6] venus: venc: Add support for " Stanimir Varbanov
@ 2020-07-20 13:23 ` Stanimir Varbanov
  2020-07-20 13:23 ` [PATCH 4/6] venus: venc: Add support for frame-skip mode v4l2 control Stanimir Varbanov
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Stanimir Varbanov @ 2020-07-20 13:23 UTC (permalink / raw)
  To: linux-media, linux-kernel, linux-arm-msm, linux-arm-kernel
  Cc: Mauro Carvalho Chehab, Hans Verkuil, Kyungmin Park, Kamil Debski,
	Jeongtae Park, Andrzej Hajda, Ezequiel Garcia, Philipp Zabel,
	Maheshwar Ajja, Stanimir Varbanov

Adds encoders standard v4l2 control for frame-skip. The control
is a copy of a custom encoder control so that other v4l2 encoder
drivers can use it.

Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
---
 .../media/v4l/ext-ctrls-codec.rst             | 33 +++++++++++++++++++
 drivers/media/v4l2-core/v4l2-ctrls.c          | 10 ++++++
 include/uapi/linux/v4l2-controls.h            |  6 ++++
 3 files changed, 49 insertions(+)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index b9d3f7ae6486..3e6b5d61500b 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -602,6 +602,39 @@ enum v4l2_mpeg_video_bitrate_mode -
     Encoder will decide the appropriate quantization parameter and
     bitrate to produce requested frame quality.
 
+
+``V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE (enum)``
+
+enum v4l2_mpeg_video_frame_skip_mode -
+    Indicates in what conditions the encoder should skip frames. If
+    encoding a frame would cause the encoded stream to be larger then a
+    chosen data limit then the frame will be skipped. Possible values
+    are:
+
+
+.. tabularcolumns:: |p{9.2cm}|p{8.3cm}|
+
+.. raw:: latex
+
+    \small
+
+.. flat-table::
+    :header-rows:  0
+    :stub-columns: 0
+
+    * - ``V4L2_MPEG_FRAME_SKIP_MODE_DISABLED``
+      - Frame skip mode is disabled.
+    * - ``V4L2_MPEG_FRAME_SKIP_MODE_LEVEL_LIMIT``
+      - Frame skip mode enabled and buffer limit is set by the chosen
+	level and is defined by the standard.
+    * - ``V4L2_MPEG_FRAME_SKIP_MODE_BUF_LIMIT``
+      - Frame skip mode enabled and buffer limit is set by the VBV
+	(MPEG1/2/4) or CPB (H264) buffer size control.
+
+.. raw:: latex
+
+    \normalsize
+
 ``V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (integer)``
     For every captured frame, skip this many subsequent frames (default
     0).
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
index bc00d02e411f..eb403858d325 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -591,6 +591,12 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
 		"External",
 		NULL,
 	};
+	static const char * const mpeg_video_frame_skip[] = {
+		"Disabled",
+		"Level Limit",
+		"VBV/CPB Limit",
+		NULL,
+	};
 
 	switch (id) {
 	case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
@@ -652,6 +658,8 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
 		return flash_strobe_source;
 	case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
 		return header_mode;
+	case V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE:
+		return mpeg_video_frame_skip;
 	case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:
 		return multi_slice;
 	case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
@@ -846,6 +854,7 @@ const char *v4l2_ctrl_get_name(u32 id)
 	case V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE:			return "H264 MB Level Rate Control";
 	case V4L2_CID_MPEG_VIDEO_HEADER_MODE:			return "Sequence Header Mode";
 	case V4L2_CID_MPEG_VIDEO_MAX_REF_PIC:			return "Max Number of Reference Pics";
+	case V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE:		return "Frame Skip Mode";
 	case V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP:		return "H263 I-Frame QP Value";
 	case V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP:		return "H263 P-Frame QP Value";
 	case V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP:		return "H263 B-Frame QP Value";
@@ -1267,6 +1276,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
 	case V4L2_CID_FLASH_LED_MODE:
 	case V4L2_CID_FLASH_STROBE_SOURCE:
 	case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
+	case V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE:
 	case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:
 	case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
 	case V4L2_CID_MPEG_VIDEO_H264_LEVEL:
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index 0f7e4388dcce..053827cda8e6 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -744,6 +744,12 @@ enum v4l2_cid_mpeg_video_hevc_size_of_length_field {
 #define V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES	(V4L2_CID_MPEG_BASE + 643)
 #define V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR	(V4L2_CID_MPEG_BASE + 644)
 #define V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY		(V4L2_CID_MPEG_BASE + 645)
+#define V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE		(V4L2_CID_MPEG_BASE + 646)
+enum v4l2_mpeg_video_frame_skip_mode {
+	V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED	= 0,
+	V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_LEVEL_LIMIT	= 1,
+	V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT	= 2,
+};
 
 /*  MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */
 #define V4L2_CID_MPEG_CX2341X_BASE				(V4L2_CTRL_CLASS_MPEG | 0x1000)
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 4/6] venus: venc: Add support for frame-skip mode v4l2 control
  2020-07-20 13:23 [PATCH 0/6] Add new controls for CQ and Frame-skip Stanimir Varbanov
                   ` (2 preceding siblings ...)
  2020-07-20 13:23 ` [PATCH 3/6] media: v4l2-ctrl: Add frame-skip std encoder control Stanimir Varbanov
@ 2020-07-20 13:23 ` Stanimir Varbanov
  2020-07-20 15:51   ` kernel test robot
  2020-07-20 13:23 ` [PATCH 5/6] media: s5p-mfc: Use standard frame skip mode control Stanimir Varbanov
  2020-07-20 13:23 ` [PATCH 6/6] media: docs: Deprecate mfc frame skip control Stanimir Varbanov
  5 siblings, 1 reply; 8+ messages in thread
From: Stanimir Varbanov @ 2020-07-20 13:23 UTC (permalink / raw)
  To: linux-media, linux-kernel, linux-arm-msm, linux-arm-kernel
  Cc: Mauro Carvalho Chehab, Hans Verkuil, Kyungmin Park, Kamil Debski,
	Jeongtae Park, Andrzej Hajda, Ezequiel Garcia, Philipp Zabel,
	Maheshwar Ajja, Stanimir Varbanov

This adds support for frame-skip-mode standard v4l2 control in
encoder driver. The control is implemented based on the
combination of client selected bitrate-mode and frame-skip-mode.
Once The client selected bitrate-mode (constant or variable) and
the frame-skip-mode is not disabled we set variable framerate for
rate controller.

Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
---
 drivers/media/platform/qcom/venus/core.h       |  1 +
 drivers/media/platform/qcom/venus/venc.c       |  6 ++++--
 drivers/media/platform/qcom/venus/venc_ctrls.c | 11 ++++++++++-
 3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h
index 1bac30d4cf50..72e171ee05a8 100644
--- a/drivers/media/platform/qcom/venus/core.h
+++ b/drivers/media/platform/qcom/venus/core.h
@@ -202,6 +202,7 @@ struct venc_controls {
 	u32 bitrate_peak;
 	u32 rc_enable;
 	u32 const_quality;
+	u32 frame_skip_mode;
 
 	u32 h264_i_period;
 	u32 h264_entropy_mode;
diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c
index 4c30c3f3369e..e4bbaae9975a 100644
--- a/drivers/media/platform/qcom/venus/venc.c
+++ b/drivers/media/platform/qcom/venus/venc.c
@@ -739,9 +739,11 @@ static int venc_set_properties(struct venus_inst *inst)
 	if (!ctr->rc_enable)
 		rate_control = HFI_RATE_CONTROL_OFF;
 	else if (ctr->bitrate_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_VBR)
-		rate_control = HFI_RATE_CONTROL_VBR_CFR;
+		rate_control = ctr->frame_skip_mode ? HFI_RATE_CONTROL_VBR_VFR :
+						      HFI_RATE_CONTROL_VBR_CFR;
 	else if (ctr->bitrate_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_CBR)
-		rate_control = HFI_RATE_CONTROL_CBR_CFR;
+		rate_control = ctr->frame_skip_mode ? HFI_RATE_CONTROL_CBR_VFR :
+						      HFI_RATE_CONTROL_CBR_CFR;
 	else if (ctr->bitrate_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_CQ)
 		rate_control = HFI_RATE_CONTROL_CQ;
 
diff --git a/drivers/media/platform/qcom/venus/venc_ctrls.c b/drivers/media/platform/qcom/venus/venc_ctrls.c
index 97a1e821c07e..4ac8da2ad061 100644
--- a/drivers/media/platform/qcom/venus/venc_ctrls.c
+++ b/drivers/media/platform/qcom/venus/venc_ctrls.c
@@ -204,6 +204,8 @@ static int venc_op_s_ctrl(struct v4l2_ctrl *ctrl)
 		break;
 	case V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY:
 		ctr->const_quality = ctrl->val;
+	case V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE:
+		ctr->frame_skip_mode = ctrl->val;
 		break;
 	default:
 		return -EINVAL;
@@ -220,7 +222,7 @@ int venc_ctrl_init(struct venus_inst *inst)
 {
 	int ret;
 
-	ret = v4l2_ctrl_handler_init(&inst->ctrl_handler, 32);
+	ret = v4l2_ctrl_handler_init(&inst->ctrl_handler, 33);
 	if (ret)
 		return ret;
 
@@ -363,6 +365,13 @@ int venc_ctrl_init(struct venus_inst *inst)
 	v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
 			  V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY, 0, 100, 1, 0);
 
+	v4l2_ctrl_new_std_menu(&inst->ctrl_handler, &venc_ctrl_ops,
+			       V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE,
+			       V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT,
+			       ~((1 << V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED) |
+			       (1 << V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT)),
+			       V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED);
+
 	ret = inst->ctrl_handler.error;
 	if (ret)
 		goto err;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 5/6] media: s5p-mfc: Use standard frame skip mode control
  2020-07-20 13:23 [PATCH 0/6] Add new controls for CQ and Frame-skip Stanimir Varbanov
                   ` (3 preceding siblings ...)
  2020-07-20 13:23 ` [PATCH 4/6] venus: venc: Add support for frame-skip mode v4l2 control Stanimir Varbanov
@ 2020-07-20 13:23 ` Stanimir Varbanov
  2020-07-20 13:23 ` [PATCH 6/6] media: docs: Deprecate mfc frame skip control Stanimir Varbanov
  5 siblings, 0 replies; 8+ messages in thread
From: Stanimir Varbanov @ 2020-07-20 13:23 UTC (permalink / raw)
  To: linux-media, linux-kernel, linux-arm-msm, linux-arm-kernel
  Cc: Mauro Carvalho Chehab, Hans Verkuil, Kyungmin Park, Kamil Debski,
	Jeongtae Park, Andrzej Hajda, Ezequiel Garcia, Philipp Zabel,
	Maheshwar Ajja, Stanimir Varbanov

Use the standard menu control for frame skip mode in the MFC
driver. The legacy private menu control is kept for backward
compatibility.

Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
---
 drivers/media/platform/s5p-mfc/s5p_mfc_enc.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c b/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
index 912fe0c5ab18..3092eb6777a5 100644
--- a/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
+++ b/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
@@ -261,6 +261,11 @@ static struct mfc_control controls[] = {
 		.menu_skip_mask = 0,
 		.default_value = V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_DISABLED,
 	},
+	{
+		.id = V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE,
+		.maximum = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT,
+		.default_value = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED,
+	},
 	{
 		.id = V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT,
 		.type = V4L2_CTRL_TYPE_BOOLEAN,
@@ -1849,6 +1854,7 @@ static int s5p_mfc_enc_s_ctrl(struct v4l2_ctrl *ctrl)
 		p->seq_hdr_mode = ctrl->val;
 		break;
 	case V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE:
+	case V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE:
 		p->frame_skip_mode = ctrl->val;
 		break;
 	case V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT:
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 6/6] media: docs: Deprecate mfc frame skip control
  2020-07-20 13:23 [PATCH 0/6] Add new controls for CQ and Frame-skip Stanimir Varbanov
                   ` (4 preceding siblings ...)
  2020-07-20 13:23 ` [PATCH 5/6] media: s5p-mfc: Use standard frame skip mode control Stanimir Varbanov
@ 2020-07-20 13:23 ` Stanimir Varbanov
  5 siblings, 0 replies; 8+ messages in thread
From: Stanimir Varbanov @ 2020-07-20 13:23 UTC (permalink / raw)
  To: linux-media, linux-kernel, linux-arm-msm, linux-arm-kernel
  Cc: Mauro Carvalho Chehab, Hans Verkuil, Kyungmin Park, Kamil Debski,
	Jeongtae Park, Andrzej Hajda, Ezequiel Garcia, Philipp Zabel,
	Maheshwar Ajja, Stanimir Varbanov

Deprecate mfc private frame skip mode control for new
clients and use the standard one instead.

Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
---
 Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index 3e6b5d61500b..30899d84f178 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2816,6 +2816,11 @@ MFC 5.1 Control IDs
 ``V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE``
     (enum)
 
+    .. note::
+
+       This control is deprecated. Use the standard
+       ``V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE`` control instead.
+
 enum v4l2_mpeg_mfc51_video_frame_skip_mode -
     Indicates in what conditions the encoder should skip frames. If
     encoding a frame would cause the encoded stream to be larger then a
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 4/6] venus: venc: Add support for frame-skip mode v4l2 control
  2020-07-20 13:23 ` [PATCH 4/6] venus: venc: Add support for frame-skip mode v4l2 control Stanimir Varbanov
@ 2020-07-20 15:51   ` kernel test robot
  0 siblings, 0 replies; 8+ messages in thread
From: kernel test robot @ 2020-07-20 15:51 UTC (permalink / raw)
  To: Stanimir Varbanov, linux-media, linux-kernel, linux-arm-msm,
	linux-arm-kernel
  Cc: kbuild-all, Mauro Carvalho Chehab, Hans Verkuil, Kyungmin Park,
	Kamil Debski, Jeongtae Park, Andrzej Hajda

[-- Attachment #1: Type: text/plain, Size: 13072 bytes --]

Hi Stanimir,

I love your patch! Perhaps something to improve:

[auto build test WARNING on linuxtv-media/master]
[also build test WARNING on linux/master soc/for-next linus/master v5.8-rc6 next-20200720]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Stanimir-Varbanov/Add-new-controls-for-CQ-and-Frame-skip/20200720-212608
base:   git://linuxtv.org/media_tree.git master
config: sparc-allyesconfig (attached as .config)
compiler: sparc64-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=sparc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   drivers/media/platform/qcom/venus/venc_ctrls.c: In function 'venc_op_s_ctrl':
>> drivers/media/platform/qcom/venus/venc_ctrls.c:206:22: warning: this statement may fall through [-Wimplicit-fallthrough=]
     206 |   ctr->const_quality = ctrl->val;
         |   ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
   drivers/media/platform/qcom/venus/venc_ctrls.c:207:2: note: here
     207 |  case V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE:
         |  ^~~~

vim +206 drivers/media/platform/qcom/venus/venc_ctrls.c

8fc58186bb41ff Stanimir Varbanov 2017-12-01   68  
aaaa93eda64b00 Stanimir Varbanov 2017-06-15   69  static int venc_op_s_ctrl(struct v4l2_ctrl *ctrl)
aaaa93eda64b00 Stanimir Varbanov 2017-06-15   70  {
aaaa93eda64b00 Stanimir Varbanov 2017-06-15   71  	struct venus_inst *inst = ctrl_to_inst(ctrl);
aaaa93eda64b00 Stanimir Varbanov 2017-06-15   72  	struct venc_controls *ctr = &inst->controls.enc;
c35f0b16537c15 Malathi Gottam    2018-11-02   73  	struct hfi_enable en = { .enable = 1 };
61df5aa325fec4 Malathi Gottam    2018-11-02   74  	struct hfi_bitrate brate;
8fc58186bb41ff Stanimir Varbanov 2017-12-01   75  	u32 bframes;
61df5aa325fec4 Malathi Gottam    2018-11-02   76  	u32 ptype;
8fc58186bb41ff Stanimir Varbanov 2017-12-01   77  	int ret;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15   78  
aaaa93eda64b00 Stanimir Varbanov 2017-06-15   79  	switch (ctrl->id) {
aaaa93eda64b00 Stanimir Varbanov 2017-06-15   80  	case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15   81  		ctr->bitrate_mode = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15   82  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15   83  	case V4L2_CID_MPEG_VIDEO_BITRATE:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15   84  		ctr->bitrate = ctrl->val;
61df5aa325fec4 Malathi Gottam    2018-11-02   85  		mutex_lock(&inst->lock);
61df5aa325fec4 Malathi Gottam    2018-11-02   86  		if (inst->streamon_out && inst->streamon_cap) {
61df5aa325fec4 Malathi Gottam    2018-11-02   87  			ptype = HFI_PROPERTY_CONFIG_VENC_TARGET_BITRATE;
61df5aa325fec4 Malathi Gottam    2018-11-02   88  			brate.bitrate = ctr->bitrate;
61df5aa325fec4 Malathi Gottam    2018-11-02   89  			brate.layer_id = 0;
61df5aa325fec4 Malathi Gottam    2018-11-02   90  
61df5aa325fec4 Malathi Gottam    2018-11-02   91  			ret = hfi_session_set_property(inst, ptype, &brate);
61df5aa325fec4 Malathi Gottam    2018-11-02   92  			if (ret) {
61df5aa325fec4 Malathi Gottam    2018-11-02   93  				mutex_unlock(&inst->lock);
61df5aa325fec4 Malathi Gottam    2018-11-02   94  				return ret;
61df5aa325fec4 Malathi Gottam    2018-11-02   95  			}
61df5aa325fec4 Malathi Gottam    2018-11-02   96  		}
61df5aa325fec4 Malathi Gottam    2018-11-02   97  		mutex_unlock(&inst->lock);
aaaa93eda64b00 Stanimir Varbanov 2017-06-15   98  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15   99  	case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  100  		ctr->bitrate_peak = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  101  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  102  	case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  103  		ctr->h264_entropy_mode = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  104  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  105  	case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  106  		ctr->profile.mpeg4 = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  107  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  108  	case V4L2_CID_MPEG_VIDEO_H264_PROFILE:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  109  		ctr->profile.h264 = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  110  		break;
cd396c8cbfcdd7 Kelvin Lawson     2018-12-10  111  	case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE:
cd396c8cbfcdd7 Kelvin Lawson     2018-12-10  112  		ctr->profile.hevc = ctrl->val;
cd396c8cbfcdd7 Kelvin Lawson     2018-12-10  113  		break;
5520b9467a39d5 Keiichi Watanabe  2018-06-18  114  	case V4L2_CID_MPEG_VIDEO_VP8_PROFILE:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  115  		ctr->profile.vpx = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  116  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  117  	case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  118  		ctr->level.mpeg4 = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  119  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  120  	case V4L2_CID_MPEG_VIDEO_H264_LEVEL:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  121  		ctr->level.h264 = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  122  		break;
cd396c8cbfcdd7 Kelvin Lawson     2018-12-10  123  	case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL:
cd396c8cbfcdd7 Kelvin Lawson     2018-12-10  124  		ctr->level.hevc = ctrl->val;
cd396c8cbfcdd7 Kelvin Lawson     2018-12-10  125  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  126  	case V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  127  		ctr->h264_i_qp = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  128  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  129  	case V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  130  		ctr->h264_p_qp = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  131  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  132  	case V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  133  		ctr->h264_b_qp = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  134  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  135  	case V4L2_CID_MPEG_VIDEO_H264_MIN_QP:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  136  		ctr->h264_min_qp = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  137  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  138  	case V4L2_CID_MPEG_VIDEO_H264_MAX_QP:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  139  		ctr->h264_max_qp = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  140  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  141  	case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  142  		ctr->multi_slice_mode = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  143  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  144  	case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  145  		ctr->multi_slice_max_bytes = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  146  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  147  	case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  148  		ctr->multi_slice_max_mb = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  149  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  150  	case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  151  		ctr->h264_loop_filter_alpha = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  152  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  153  	case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  154  		ctr->h264_loop_filter_beta = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  155  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  156  	case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  157  		ctr->h264_loop_filter_mode = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  158  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  159  	case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  160  		ctr->header_mode = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  161  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  162  	case V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  163  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  164  	case V4L2_CID_MPEG_VIDEO_GOP_SIZE:
8fc58186bb41ff Stanimir Varbanov 2017-12-01  165  		ret = venc_calc_bpframes(ctrl->val, ctr->num_b_frames, &bframes,
8fc58186bb41ff Stanimir Varbanov 2017-12-01  166  					 &ctr->num_p_frames);
8fc58186bb41ff Stanimir Varbanov 2017-12-01  167  		if (ret)
8fc58186bb41ff Stanimir Varbanov 2017-12-01  168  			return ret;
8fc58186bb41ff Stanimir Varbanov 2017-12-01  169  
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  170  		ctr->gop_size = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  171  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  172  	case V4L2_CID_MPEG_VIDEO_H264_I_PERIOD:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  173  		ctr->h264_i_period = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  174  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  175  	case V4L2_CID_MPEG_VIDEO_VPX_MIN_QP:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  176  		ctr->vp8_min_qp = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  177  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  178  	case V4L2_CID_MPEG_VIDEO_VPX_MAX_QP:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  179  		ctr->vp8_max_qp = ctrl->val;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  180  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  181  	case V4L2_CID_MPEG_VIDEO_B_FRAMES:
8fc58186bb41ff Stanimir Varbanov 2017-12-01  182  		ret = venc_calc_bpframes(ctr->gop_size, ctrl->val, &bframes,
8fc58186bb41ff Stanimir Varbanov 2017-12-01  183  					 &ctr->num_p_frames);
8fc58186bb41ff Stanimir Varbanov 2017-12-01  184  		if (ret)
8fc58186bb41ff Stanimir Varbanov 2017-12-01  185  			return ret;
8fc58186bb41ff Stanimir Varbanov 2017-12-01  186  
8fc58186bb41ff Stanimir Varbanov 2017-12-01  187  		ctr->num_b_frames = bframes;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  188  		break;
c35f0b16537c15 Malathi Gottam    2018-11-02  189  	case V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME:
c35f0b16537c15 Malathi Gottam    2018-11-02  190  		mutex_lock(&inst->lock);
c35f0b16537c15 Malathi Gottam    2018-11-02  191  		if (inst->streamon_out && inst->streamon_cap) {
c35f0b16537c15 Malathi Gottam    2018-11-02  192  			ptype = HFI_PROPERTY_CONFIG_VENC_REQUEST_SYNC_FRAME;
c35f0b16537c15 Malathi Gottam    2018-11-02  193  			ret = hfi_session_set_property(inst, ptype, &en);
c35f0b16537c15 Malathi Gottam    2018-11-02  194  
c35f0b16537c15 Malathi Gottam    2018-11-02  195  			if (ret) {
c35f0b16537c15 Malathi Gottam    2018-11-02  196  				mutex_unlock(&inst->lock);
c35f0b16537c15 Malathi Gottam    2018-11-02  197  				return ret;
c35f0b16537c15 Malathi Gottam    2018-11-02  198  			}
c35f0b16537c15 Malathi Gottam    2018-11-02  199  		}
c35f0b16537c15 Malathi Gottam    2018-11-02  200  		mutex_unlock(&inst->lock);
c35f0b16537c15 Malathi Gottam    2018-11-02  201  		break;
6f704b2fbbde0c Jeffrey Kardatzke 2020-02-22  202  	case V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE:
6f704b2fbbde0c Jeffrey Kardatzke 2020-02-22  203  		ctr->rc_enable = ctrl->val;
6f704b2fbbde0c Jeffrey Kardatzke 2020-02-22  204  		break;
1b66e2818e6ed3 Stanimir Varbanov 2020-07-20  205  	case V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY:
1b66e2818e6ed3 Stanimir Varbanov 2020-07-20 @206  		ctr->const_quality = ctrl->val;
0978d8244ce6b2 Stanimir Varbanov 2020-07-20  207  	case V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE:
0978d8244ce6b2 Stanimir Varbanov 2020-07-20  208  		ctr->frame_skip_mode = ctrl->val;
1b66e2818e6ed3 Stanimir Varbanov 2020-07-20  209  		break;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  210  	default:
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  211  		return -EINVAL;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  212  	}
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  213  
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  214  	return 0;
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  215  }
aaaa93eda64b00 Stanimir Varbanov 2017-06-15  216  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 66264 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-07-20 16:50 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-20 13:23 [PATCH 0/6] Add new controls for CQ and Frame-skip Stanimir Varbanov
2020-07-20 13:23 ` [PATCH 1/6] media: v4l2-ctrls: Add encoder constant quality control Stanimir Varbanov
2020-07-20 13:23 ` [PATCH 2/6] venus: venc: Add support for " Stanimir Varbanov
2020-07-20 13:23 ` [PATCH 3/6] media: v4l2-ctrl: Add frame-skip std encoder control Stanimir Varbanov
2020-07-20 13:23 ` [PATCH 4/6] venus: venc: Add support for frame-skip mode v4l2 control Stanimir Varbanov
2020-07-20 15:51   ` kernel test robot
2020-07-20 13:23 ` [PATCH 5/6] media: s5p-mfc: Use standard frame skip mode control Stanimir Varbanov
2020-07-20 13:23 ` [PATCH 6/6] media: docs: Deprecate mfc frame skip control Stanimir Varbanov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).