media: v4l2-ctrl: Add control for VP9 profile
authorKeiichi Watanabe <keiichiw@chromium.org>
Mon, 18 Jun 2018 07:58:53 +0000 (03:58 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Wed, 4 Jul 2018 13:32:22 +0000 (09:32 -0400)
Add a new control V4L2_CID_MPEG_VIDEO_VP9_PROFILE for VP9 profiles. This control
allows selecting the desired profile for VP9 encoder and querying for supported
profiles by VP9 encoder/decoder.

Though this control is similar to V4L2_CID_MPEG_VIDEO_VP8_PROFILE, we need to
separate this control from it because supported profiles usually differ between
VP8 and VP9.

Signed-off-by: Keiichi Watanabe <keiichiw@chromium.org>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Documentation/media/uapi/v4l/extended-controls.rst
drivers/media/v4l2-core/v4l2-ctrls.c
include/uapi/linux/v4l2-controls.h

index 01ef31a..9f7312b 100644 (file)
@@ -1978,6 +1978,29 @@ enum v4l2_mpeg_video_vp8_profile -
     * - ``V4L2_MPEG_VIDEO_VP8_PROFILE_3``
       - Profile 3
 
+.. _v4l2-mpeg-video-vp9-profile:
+
+``V4L2_CID_MPEG_VIDEO_VP9_PROFILE``
+    (enum)
+
+enum v4l2_mpeg_video_vp9_profile -
+    This control allows selecting the profile for VP9 encoder.
+    This is also used to enumerate supported profiles by VP9 encoder or decoder.
+    Possible values are:
+
+.. flat-table::
+    :header-rows:  0
+    :stub-columns: 0
+
+    * - ``V4L2_MPEG_VIDEO_VP9_PROFILE_0``
+      - Profile 0
+    * - ``V4L2_MPEG_VIDEO_VP9_PROFILE_1``
+      - Profile 1
+    * - ``V4L2_MPEG_VIDEO_VP9_PROFILE_2``
+      - Profile 2
+    * - ``V4L2_MPEG_VIDEO_VP9_PROFILE_3``
+      - Profile 3
+
 
 High Efficiency Video Coding (HEVC/H.265) Control Reference
 -----------------------------------------------------------
index 4a182a7..599c1cb 100644 (file)
@@ -438,6 +438,13 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
                "3",
                NULL,
        };
+       static const char * const vp9_profile[] = {
+               "0",
+               "1",
+               "2",
+               "3",
+               NULL,
+       };
 
        static const char * const flash_led_mode[] = {
                "Off",
@@ -623,6 +630,8 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
                return vpx_golden_frame_sel;
        case V4L2_CID_MPEG_VIDEO_VP8_PROFILE:
                return vp8_profile;
+       case V4L2_CID_MPEG_VIDEO_VP9_PROFILE:
+               return vp9_profile;
        case V4L2_CID_JPEG_CHROMA_SUBSAMPLING:
                return jpeg_chroma_subsampling;
        case V4L2_CID_DV_TX_MODE:
@@ -849,6 +858,7 @@ const char *v4l2_ctrl_get_name(u32 id)
        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_VP8_PROFILE:                   return "VP8 Profile";
+       case V4L2_CID_MPEG_VIDEO_VP9_PROFILE:                   return "VP9 Profile";
 
        /* HEVC controls */
        case V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP:               return "HEVC I-Frame QP Value";
@@ -1190,6 +1200,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
        case V4L2_CID_TUNE_DEEMPHASIS:
        case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL:
        case V4L2_CID_MPEG_VIDEO_VP8_PROFILE:
+       case V4L2_CID_MPEG_VIDEO_VP9_PROFILE:
        case V4L2_CID_DETECT_MD_MODE:
        case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE:
        case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL:
index ab96795..e4ee10e 100644 (file)
@@ -597,6 +597,13 @@ enum v4l2_mpeg_video_vp8_profile {
 };
 /* Deprecated alias for compatibility reasons. */
 #define V4L2_CID_MPEG_VIDEO_VPX_PROFILE        V4L2_CID_MPEG_VIDEO_VP8_PROFILE
+#define V4L2_CID_MPEG_VIDEO_VP9_PROFILE                        (V4L2_CID_MPEG_BASE+512)
+enum v4l2_mpeg_video_vp9_profile {
+       V4L2_MPEG_VIDEO_VP9_PROFILE_0                           = 0,
+       V4L2_MPEG_VIDEO_VP9_PROFILE_1                           = 1,
+       V4L2_MPEG_VIDEO_VP9_PROFILE_2                           = 2,
+       V4L2_MPEG_VIDEO_VP9_PROFILE_3                           = 3,
+};
 
 /* CIDs for HEVC encoding. */