Thread (17 messages) 17 messages, 7 authors, 2014-02-06

[PATCH] [media] s5p-mfc: Add Horizontal and Vertical search range for Video Macro Blocks

From: Kamil Debski <hidden>
Date: 2014-01-23 10:11:39
Also in: linux-media, linux-samsung-soc, lkml

Hi Amit,
quoted hunk ↗ jump to hunk
From: Amit Grover [mailto:amit.grover at samsung.com]
Sent: Monday, December 30, 2013 11:43 AM

This patch adds Controls to set Horizontal and Vertical search range
for Motion Estimation block for Samsung MFC video Encoders.

Signed-off-by: Swami Nathan <redacted>
Signed-off-by: Amit Grover <redacted>
---
 Documentation/DocBook/media/v4l/controls.xml    |   14 +++++++++++++
 drivers/media/platform/s5p-mfc/s5p_mfc_common.h |    2 ++
 drivers/media/platform/s5p-mfc/s5p_mfc_enc.c    |   24
+++++++++++++++++++++++
 drivers/media/platform/s5p-mfc/s5p_mfc_opr_v6.c |    8 ++------
 drivers/media/v4l2-core/v4l2-ctrls.c            |   14 +++++++++++++
 include/uapi/linux/v4l2-controls.h              |    2 ++
 6 files changed, 58 insertions(+), 6 deletions(-)
diff --git a/Documentation/DocBook/media/v4l/controls.xml
b/Documentation/DocBook/media/v4l/controls.xml
index 7a3b49b..70a0f6f 100644
--- a/Documentation/DocBook/media/v4l/controls.xml
+++ b/Documentation/DocBook/media/v4l/controls.xml
@@ -2258,6 +2258,20 @@ Applicable to the MPEG1, MPEG2, MPEG4
encoders.</entry>
 VBV buffer control.</entry>
 	      </row>

+		  <row><entry></entry></row>
+	      <row id="v4l2-mpeg-video-horz-search-range">
+		<entry
spanname="id"><constant>V4L2_CID_MPEG_VIDEO_HORZ_SEARCH_RANGE</constant
HORZ is nowhere used. HOR is more commonly used in control names.
V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE seems better.
quoted
&nbsp;</entry>
+		<entry>integer</entry>
+	      </row><row><entry spanname="descr">Sets the Horizontal
search range for Video Macro blocks.</entry>
+	      </row>
It's expressed in pixels? If so then it should be mentioned here. Also I
think this lacks the mention that it is used for motion estimation.
Please add a more detailed description.
+
+		 <row><entry></entry></row>
+	      <row id="v4l2-mpeg-video-vert-search-range">
+		<entry
spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VERT_SEARCH_RANGE</constant
quoted
&nbsp;</entry>
V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE seems better.
+		<entry>integer</entry>
+	      </row><row><entry spanname="descr">Sets the Vertical search
range for Video Macro blocks.</entry>
+	      </row>
+
This description is too vague as well.
quoted hunk ↗ jump to hunk
 	      <row><entry></entry></row>
 	      <row>
 		<entry
spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE</constant>&nb
sp;</entry>
diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
b/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
index 6920b54..f2c13c3 100644
--- a/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
+++ b/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
@@ -430,6 +430,8 @@ struct s5p_mfc_vp8_enc_params {
 struct s5p_mfc_enc_params {
 	u16 width;
 	u16 height;
+	u32 horz_range;
+	u32 vert_range;
mv_h_range ?
mv_v_range ?
quoted hunk ↗ jump to hunk
 	u16 gop_size;
 	enum v4l2_mpeg_video_multi_slice_mode slice_mode;
diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
b/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
index 4ff3b6c..a02e7b8 100644
--- a/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
+++ b/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
@@ -208,6 +208,24 @@ static struct mfc_control controls[] = {
 		.default_value = 0,
 	},
 	{
+		.id = V4L2_CID_MPEG_VIDEO_HORZ_SEARCH_RANGE,
+		.type = V4L2_CTRL_TYPE_INTEGER,
+		.name = "horizontal search range of video macro block",
This too should be property capitalised. Please mention the motion vectors
too.
+		.minimum = 16,
+		.maximum = 128,
+		.step = 16,
+		.default_value = 32,
+	},
+	{
+		.id = V4L2_CID_MPEG_VIDEO_VERT_SEARCH_RANGE,
+		.type = V4L2_CTRL_TYPE_INTEGER,
+		.name = "vertical search range of video macro block",
This too should be property capitalised. Please mention the motion vectors
too.
quoted hunk ↗ jump to hunk
+		.minimum = 16,
+		.maximum = 128,
+		.step = 16,
+		.default_value = 32,
+	},
+	{
 		.id = V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE,
 		.type = V4L2_CTRL_TYPE_INTEGER,
 		.minimum = 0,
@@ -1377,6 +1395,12 @@ static int s5p_mfc_enc_s_ctrl(struct v4l2_ctrl
*ctrl)
 	case V4L2_CID_MPEG_VIDEO_VBV_SIZE:
 		p->vbv_size = ctrl->val;
 		break;
+	case V4L2_CID_MPEG_VIDEO_HORZ_SEARCH_RANGE:
+		p->horz_range = ctrl->val;
+		break;
+	case V4L2_CID_MPEG_VIDEO_VERT_SEARCH_RANGE:
+		p->vert_range = ctrl->val;
+		break;
 	case V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE:
 		p->codec.h264.cpb_size = ctrl->val;
 		break;
diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_opr_v6.c
b/drivers/media/platform/s5p-mfc/s5p_mfc_opr_v6.c
index 461358c..47e1807 100644
--- a/drivers/media/platform/s5p-mfc/s5p_mfc_opr_v6.c
+++ b/drivers/media/platform/s5p-mfc/s5p_mfc_opr_v6.c
@@ -727,14 +727,10 @@ static int s5p_mfc_set_enc_params(struct
s5p_mfc_ctx *ctx)
 	WRITEL(reg, S5P_FIMV_E_RC_CONFIG_V6);

 	/* setting for MV range [16, 256] */
-	reg = 0;
-	reg &= ~(0x3FFF);
-	reg = 256;
+	reg = (p->horz_range & 0x3fff);	/* conditional check in app */
 	WRITEL(reg, S5P_FIMV_E_MV_HOR_RANGE_V6);
Please add a S5P_FIMV_E_MV_HOR_RANGE_V6_MASK or something instead of this
magic number.
-	reg = 0;
-	reg &= ~(0x3FFF);
-	reg = 256;
+	reg = (p->vert_range & 0x3fff);	/* conditional check in app */
Please add a S5P_FIMV_E_MV_VER_RANGE_V6_MASK or something instead of this
magic number.
quoted hunk ↗ jump to hunk
 	WRITEL(reg, S5P_FIMV_E_MV_VER_RANGE_V6);

 	WRITEL(0x0, S5P_FIMV_E_FRAME_INSERTION_V6);
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-
core/v4l2-ctrls.c
index fb46790..7cf23d5 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -735,6 +735,8 @@ const char *v4l2_ctrl_get_name(u32 id)
 	case V4L2_CID_MPEG_VIDEO_DEC_PTS:			return
"Video
Decoder PTS";
 	case V4L2_CID_MPEG_VIDEO_DEC_FRAME:			return
"Video
Decoder Frame Count";
 	case V4L2_CID_MPEG_VIDEO_VBV_DELAY:			return
"Initial
Delay for VBV Control";
+	case V4L2_CID_MPEG_VIDEO_HORZ_SEARCH_RANGE:		return "hor
search range of video MB";
This should be property capitalised. Please mention the motion vectors too.
+	case V4L2_CID_MPEG_VIDEO_VERT_SEARCH_RANGE:		return "vert
search range of video MB";
This too should be property capitalised. Please mention the motion vectors
too.
quoted hunk ↗ jump to hunk
 	case V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER:		return
"Repeat Sequence Header";

 	/* VPX controls */
@@ -905,6 +907,18 @@ void v4l2_ctrl_fill(u32 id, const char **name,
enum v4l2_ctrl_type *type,
 		*min = 0;
 		*max = *step = 1;
 		break;
+	case V4L2_CID_MPEG_VIDEO_HORZ_SEARCH_RANGE:
+		*type = V4L2_CTRL_TYPE_INTEGER;
+		*min = 16;
+		*max = 128;
+		*step = 16;
+		break;
+	case V4L2_CID_MPEG_VIDEO_VERT_SEARCH_RANGE:
+		*type = V4L2_CTRL_TYPE_INTEGER;
+		*min = 16;
+		*max = 128;
+		*step = 16;
+		break;
 	case V4L2_CID_PAN_RESET:
 	case V4L2_CID_TILT_RESET:
 	case V4L2_CID_FLASH_STROBE:
diff --git a/include/uapi/linux/v4l2-controls.h
b/include/uapi/linux/v4l2-controls.h
index 1666aab..bcce536 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -372,6 +372,8 @@ enum v4l2_mpeg_video_multi_slice_mode {
 #define V4L2_CID_MPEG_VIDEO_DEC_FRAME
	(V4L2_CID_MPEG_BASE+224)
 #define V4L2_CID_MPEG_VIDEO_VBV_DELAY
	(V4L2_CID_MPEG_BASE+225)
 #define V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER
	(V4L2_CID_MPEG_BASE+226)
+#define V4L2_CID_MPEG_VIDEO_HORZ_SEARCH_RANGE
	(V4L2_CID_MPEG_BASE+227)
+#define V4L2_CID_MPEG_VIDEO_VERT_SEARCH_RANGE
	(V4L2_CID_MPEG_BASE+228)

 #define V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP
	(V4L2_CID_MPEG_BASE+300)
 #define V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP
	(V4L2_CID_MPEG_BASE+301)
--
1.7.9.5
Best wishes,
-- 
Kamil Debski
Samsung R&D Institute Poland
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help