[media] s5p-mfc: Add controls to set vp8 enc profile
authorKiran AVND <avnd.kiran@samsung.com>
Mon, 16 Dec 2013 09:40:42 +0000 (06:40 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Mon, 13 Jan 2014 12:59:11 +0000 (10:59 -0200)
Add v4l2 controls to set desired profile for VP8 encoder.
Acceptable levels for VP8 encoder are
0: Version 0
1: Version 1
2: Version 2
3: Version 3

Signed-off-by: Kiran AVND <avnd.kiran@samsung.com>
Signed-off-by: Pawel Osciak <posciak@chromium.org>
Signed-off-by: Arun Kumar K <arun.kk@samsung.com>
Signed-off-by: Kamil Debski <k.debski@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Documentation/DocBook/media/v4l/controls.xml
drivers/media/platform/s5p-mfc/s5p_mfc_common.h
drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
drivers/media/platform/s5p-mfc/s5p_mfc_opr_v6.c
drivers/media/v4l2-core/v4l2-ctrls.c
include/uapi/linux/v4l2-controls.h

index e4db4ac4533f6f467937de6ce4558f33d23065b0..a5a3188e5af7961889f27c61b295cbf04a2e1c8b 100644 (file)
@@ -3193,6 +3193,15 @@ V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD as a golden frame.</entry>
              <row><entry spanname="descr">Quantization parameter for a P frame for VP8.</entry>
              </row>
 
+             <row><entry></entry></row>
+             <row>
+               <entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_PROFILE</constant>&nbsp;</entry>
+               <entry>integer</entry>
+             </row>
+             <row><entry spanname="descr">Select the desired profile for VPx encoder.
+Acceptable values are 0, 1, 2 and 3 corresponding to encoder profiles 0, 1, 2 and 3.</entry>
+             </row>
+
           <row><entry></entry></row>
         </tbody>
       </tgroup>
index 3874f8b639fe089e45b01c99e7540e5d7ed26c1d..f723f1f2f5784e4501e7b39dcb027c507523cb07 100644 (file)
@@ -417,6 +417,7 @@ struct s5p_mfc_vp8_enc_params {
        u8 rc_max_qp;
        u8 rc_frame_qp;
        u8 rc_p_frame_qp;
+       u8 profile;
 };
 
 /**
index cdf672c8f11e70fdc5b4b8ff74eae7d704724f9f..91b6e020ddf3ec05d5255574f71be3b2dc86fc23 100644 (file)
@@ -650,6 +650,14 @@ static struct mfc_control controls[] = {
                .step = 1,
                .default_value = 10,
        },
+       {
+               .id = V4L2_CID_MPEG_VIDEO_VPX_PROFILE,
+               .type = V4L2_CTRL_TYPE_INTEGER,
+               .minimum = 0,
+               .maximum = 3,
+               .step = 1,
+               .default_value = 0,
+       },
 };
 
 #define NUM_CTRLS ARRAY_SIZE(controls)
@@ -1601,6 +1609,9 @@ static int s5p_mfc_enc_s_ctrl(struct v4l2_ctrl *ctrl)
        case V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP:
                p->codec.vp8.rc_p_frame_qp = ctrl->val;
                break;
+       case V4L2_CID_MPEG_VIDEO_VPX_PROFILE:
+               p->codec.vp8.profile = ctrl->val;
+               break;
        default:
                v4l2_err(&dev->v4l2_dev, "Invalid control, id=%d, val=%d\n",
                                                        ctrl->id, ctrl->val);
index b4886d636dbe86fe8e9770bb65cfe030a0e7fdcd..f6ff2dbf3a1d5d700ad18ab74f4e89be437baf17 100644 (file)
@@ -1197,10 +1197,8 @@ static int s5p_mfc_set_enc_params_vp8(struct s5p_mfc_ctx *ctx)
        reg |= ((p->num_b_frame & 0x3) << 16);
        WRITEL(reg, S5P_FIMV_E_GOP_CONFIG_V6);
 
-       /* profile & level */
-       reg = 0;
-       /** profile */
-       reg |= (0x1 << 4);
+       /* profile - 0 ~ 3 */
+       reg = p_vp8->profile & 0x3;
        WRITEL(reg, S5P_FIMV_E_PICTURE_PROFILE_V6);
 
        /* rate control config. */
index 20840dff78e60cfe5cfd9b24e1acf9b689a3118e..6ff002bd5909045e97ed56d51ecb3813877583cb 100644 (file)
@@ -749,6 +749,7 @@ const char *v4l2_ctrl_get_name(u32 id)
        case V4L2_CID_MPEG_VIDEO_VPX_MAX_QP:                    return "VPX Maximum QP Value";
        case V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP:                return "VPX I-Frame QP Value";
        case V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP:                return "VPX P-Frame QP Value";
+       case V4L2_CID_MPEG_VIDEO_VPX_PROFILE:                   return "VPX Profile";
 
        /* CAMERA controls */
        /* Keep the order of the 'case's the same as in videodev2.h! */
index 28cddb45afe08381b365958659ac5fc0a7e8e799..2cbe605bbe04f6d510aff6ac5b70d5d5b82e29dc 100644 (file)
@@ -562,6 +562,7 @@ enum v4l2_vp8_golden_frame_sel {
 #define V4L2_CID_MPEG_VIDEO_VPX_MAX_QP                 (V4L2_CID_MPEG_BASE+508)
 #define V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP             (V4L2_CID_MPEG_BASE+509)
 #define V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP             (V4L2_CID_MPEG_BASE+510)
+#define V4L2_CID_MPEG_VIDEO_VPX_PROFILE                        (V4L2_CID_MPEG_BASE+511)
 
 /*  MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */
 #define V4L2_CID_MPEG_CX2341X_BASE                             (V4L2_CTRL_CLASS_MPEG | 0x1000)