Commit a378a320 authored by Amit Grover's avatar Amit Grover Committed by Mauro Carvalho Chehab

[media] s5p-mfc: Add Horizontal and Vertical MV Search Range

This patch adds Controls to set Horizontal and Vertical search range
for Motion Estimation block for Samsung MFC video Encoders.
Signed-off-by: default avatarSwami Nathan <swaminath.p@samsung.com>
Signed-off-by: default avatarAmit Grover <amit.grover@samsung.com>
Signed-off-by: default avatarKamil Debski <k.debski@samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent bf0bedd3
...@@ -229,6 +229,7 @@ ...@@ -229,6 +229,7 @@
#define S5P_FIMV_E_PADDING_CTRL_V6 0xf7a4 #define S5P_FIMV_E_PADDING_CTRL_V6 0xf7a4
#define S5P_FIMV_E_MV_HOR_RANGE_V6 0xf7ac #define S5P_FIMV_E_MV_HOR_RANGE_V6 0xf7ac
#define S5P_FIMV_E_MV_VER_RANGE_V6 0xf7b0 #define S5P_FIMV_E_MV_VER_RANGE_V6 0xf7b0
#define S5P_FIMV_E_MV_RANGE_V6_MASK 0x3fff
#define S5P_FIMV_E_VBV_BUFFER_SIZE_V6 0xf84c #define S5P_FIMV_E_VBV_BUFFER_SIZE_V6 0xf84c
#define S5P_FIMV_E_VBV_INIT_DELAY_V6 0xf850 #define S5P_FIMV_E_VBV_INIT_DELAY_V6 0xf850
......
...@@ -426,6 +426,8 @@ struct s5p_mfc_vp8_enc_params { ...@@ -426,6 +426,8 @@ struct s5p_mfc_vp8_enc_params {
struct s5p_mfc_enc_params { struct s5p_mfc_enc_params {
u16 width; u16 width;
u16 height; u16 height;
u32 mv_h_range;
u32 mv_v_range;
u16 gop_size; u16 gop_size;
enum v4l2_mpeg_video_multi_slice_mode slice_mode; enum v4l2_mpeg_video_multi_slice_mode slice_mode;
......
...@@ -207,6 +207,24 @@ static struct mfc_control controls[] = { ...@@ -207,6 +207,24 @@ static struct mfc_control controls[] = {
.step = 1, .step = 1,
.default_value = 0, .default_value = 0,
}, },
{
.id = V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE,
.type = V4L2_CTRL_TYPE_INTEGER,
.name = "Horizontal MV Search Range",
.minimum = 16,
.maximum = 128,
.step = 16,
.default_value = 32,
},
{
.id = V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE,
.type = V4L2_CTRL_TYPE_INTEGER,
.name = "Vertical MV Search Range",
.minimum = 16,
.maximum = 128,
.step = 16,
.default_value = 32,
},
{ {
.id = V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE, .id = V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE,
.type = V4L2_CTRL_TYPE_INTEGER, .type = V4L2_CTRL_TYPE_INTEGER,
...@@ -1417,6 +1435,12 @@ static int s5p_mfc_enc_s_ctrl(struct v4l2_ctrl *ctrl) ...@@ -1417,6 +1435,12 @@ static int s5p_mfc_enc_s_ctrl(struct v4l2_ctrl *ctrl)
case V4L2_CID_MPEG_VIDEO_VBV_SIZE: case V4L2_CID_MPEG_VIDEO_VBV_SIZE:
p->vbv_size = ctrl->val; p->vbv_size = ctrl->val;
break; break;
case V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE:
p->mv_h_range = ctrl->val;
break;
case V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE:
p->mv_v_range = ctrl->val;
break;
case V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE: case V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE:
p->codec.h264.cpb_size = ctrl->val; p->codec.h264.cpb_size = ctrl->val;
break; break;
......
...@@ -727,14 +727,10 @@ static int s5p_mfc_set_enc_params(struct s5p_mfc_ctx *ctx) ...@@ -727,14 +727,10 @@ static int s5p_mfc_set_enc_params(struct s5p_mfc_ctx *ctx)
WRITEL(reg, S5P_FIMV_E_RC_CONFIG_V6); WRITEL(reg, S5P_FIMV_E_RC_CONFIG_V6);
/* setting for MV range [16, 256] */ /* setting for MV range [16, 256] */
reg = 0; reg = (p->mv_h_range & S5P_FIMV_E_MV_RANGE_V6_MASK);
reg &= ~(0x3FFF);
reg = 256;
WRITEL(reg, S5P_FIMV_E_MV_HOR_RANGE_V6); WRITEL(reg, S5P_FIMV_E_MV_HOR_RANGE_V6);
reg = 0; reg = (p->mv_v_range & S5P_FIMV_E_MV_RANGE_V6_MASK);
reg &= ~(0x3FFF);
reg = 256;
WRITEL(reg, S5P_FIMV_E_MV_VER_RANGE_V6); WRITEL(reg, S5P_FIMV_E_MV_VER_RANGE_V6);
WRITEL(0x0, S5P_FIMV_E_FRAME_INSERTION_V6); WRITEL(0x0, S5P_FIMV_E_FRAME_INSERTION_V6);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment