|
@@ -618,6 +618,38 @@ static struct mfc_control controls[] = {
|
|
|
.default_value = V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_PREV,
|
|
|
.menu_skip_mask = 0,
|
|
|
},
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_VPX_MAX_QP,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 127,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 127,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_VPX_MIN_QP,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 11,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 127,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 10,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 127,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 10,
|
|
|
+ },
|
|
|
};
|
|
|
|
|
|
#define NUM_CTRLS ARRAY_SIZE(controls)
|
|
@@ -1557,6 +1589,18 @@ static int s5p_mfc_enc_s_ctrl(struct v4l2_ctrl *ctrl)
|
|
|
case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL:
|
|
|
p->codec.vp8.golden_frame_sel = ctrl->val;
|
|
|
break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_VPX_MIN_QP:
|
|
|
+ p->codec.vp8.rc_min_qp = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_VPX_MAX_QP:
|
|
|
+ p->codec.vp8.rc_max_qp = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP:
|
|
|
+ p->codec.vp8.rc_frame_qp = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP:
|
|
|
+ p->codec.vp8.rc_p_frame_qp = ctrl->val;
|
|
|
+ break;
|
|
|
default:
|
|
|
v4l2_err(&dev->v4l2_dev, "Invalid control, id=%d, val=%d\n",
|
|
|
ctrl->id, ctrl->val);
|