Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] s5p-mfc: Add controls to set vp8 enc profile

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>

authored by

Kiran AVND and committed by
Mauro Carvalho Chehab
bbd8f3fe b80cb8dc

+25 -4
+9
Documentation/DocBook/media/v4l/controls.xml
··· 3193 3193 <row><entry spanname="descr">Quantization parameter for a P frame for VP8.</entry> 3194 3194 </row> 3195 3195 3196 + <row><entry></entry></row> 3197 + <row> 3198 + <entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_PROFILE</constant>&nbsp;</entry> 3199 + <entry>integer</entry> 3200 + </row> 3201 + <row><entry spanname="descr">Select the desired profile for VPx encoder. 3202 + Acceptable values are 0, 1, 2 and 3 corresponding to encoder profiles 0, 1, 2 and 3.</entry> 3203 + </row> 3204 + 3196 3205 <row><entry></entry></row> 3197 3206 </tbody> 3198 3207 </tgroup>
+1
drivers/media/platform/s5p-mfc/s5p_mfc_common.h
··· 417 417 u8 rc_max_qp; 418 418 u8 rc_frame_qp; 419 419 u8 rc_p_frame_qp; 420 + u8 profile; 420 421 }; 421 422 422 423 /**
+11
drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
··· 650 650 .step = 1, 651 651 .default_value = 10, 652 652 }, 653 + { 654 + .id = V4L2_CID_MPEG_VIDEO_VPX_PROFILE, 655 + .type = V4L2_CTRL_TYPE_INTEGER, 656 + .minimum = 0, 657 + .maximum = 3, 658 + .step = 1, 659 + .default_value = 0, 660 + }, 653 661 }; 654 662 655 663 #define NUM_CTRLS ARRAY_SIZE(controls) ··· 1608 1600 break; 1609 1601 case V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP: 1610 1602 p->codec.vp8.rc_p_frame_qp = ctrl->val; 1603 + break; 1604 + case V4L2_CID_MPEG_VIDEO_VPX_PROFILE: 1605 + p->codec.vp8.profile = ctrl->val; 1611 1606 break; 1612 1607 default: 1613 1608 v4l2_err(&dev->v4l2_dev, "Invalid control, id=%d, val=%d\n",
+2 -4
drivers/media/platform/s5p-mfc/s5p_mfc_opr_v6.c
··· 1197 1197 reg |= ((p->num_b_frame & 0x3) << 16); 1198 1198 WRITEL(reg, S5P_FIMV_E_GOP_CONFIG_V6); 1199 1199 1200 - /* profile & level */ 1201 - reg = 0; 1202 - /** profile */ 1203 - reg |= (0x1 << 4); 1200 + /* profile - 0 ~ 3 */ 1201 + reg = p_vp8->profile & 0x3; 1204 1202 WRITEL(reg, S5P_FIMV_E_PICTURE_PROFILE_V6); 1205 1203 1206 1204 /* rate control config. */
+1
drivers/media/v4l2-core/v4l2-ctrls.c
··· 749 749 case V4L2_CID_MPEG_VIDEO_VPX_MAX_QP: return "VPX Maximum QP Value"; 750 750 case V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP: return "VPX I-Frame QP Value"; 751 751 case V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP: return "VPX P-Frame QP Value"; 752 + case V4L2_CID_MPEG_VIDEO_VPX_PROFILE: return "VPX Profile"; 752 753 753 754 /* CAMERA controls */ 754 755 /* Keep the order of the 'case's the same as in videodev2.h! */
+1
include/uapi/linux/v4l2-controls.h
··· 562 562 #define V4L2_CID_MPEG_VIDEO_VPX_MAX_QP (V4L2_CID_MPEG_BASE+508) 563 563 #define V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP (V4L2_CID_MPEG_BASE+509) 564 564 #define V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP (V4L2_CID_MPEG_BASE+510) 565 + #define V4L2_CID_MPEG_VIDEO_VPX_PROFILE (V4L2_CID_MPEG_BASE+511) 565 566 566 567 /* MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */ 567 568 #define V4L2_CID_MPEG_CX2341X_BASE (V4L2_CTRL_CLASS_MPEG | 0x1000)