Commit 5823833c authored by Stanimir Varbanov's avatar Stanimir Varbanov Committed by Mauro Carvalho Chehab

media: v4l2-ctrl: Add VP9 codec levels

Add menu control for VP9 codec levels. A total of 14 levels are
defined for Profile 0 (8bit) and Profile 2 (10bit). Each level
is a set of constrained bitstreams coded with targeted resolutions,
frame rates, and bitrates.

The definitions have been taken from webm project [1].

[1] https://www.webmproject.org/vp9/levels/Signed-off-by: default avatarStanimir Varbanov <stanimir.varbanov@linaro.org>
Reviewed-by: default avatarNicolas Dufresne <nicolas.dufresne@collabora.com>
Reviewed-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 0df720e5
...@@ -3383,6 +3383,49 @@ enum v4l2_mpeg_video_vp9_profile - ...@@ -3383,6 +3383,49 @@ enum v4l2_mpeg_video_vp9_profile -
* - ``V4L2_MPEG_VIDEO_VP9_PROFILE_3`` * - ``V4L2_MPEG_VIDEO_VP9_PROFILE_3``
- Profile 3 - Profile 3
.. _v4l2-mpeg-video-vp9-level:
``V4L2_CID_MPEG_VIDEO_VP9_LEVEL (enum)``
enum v4l2_mpeg_video_vp9_level -
This control allows selecting the level for VP9 encoder.
This is also used to enumerate supported levels by VP9 encoder or decoder.
More information can be found at
`webmproject <https://www.webmproject.org/vp9/levels/>`__. Possible values are:
.. flat-table::
:header-rows: 0
:stub-columns: 0
* - ``V4L2_MPEG_VIDEO_VP9_LEVEL_1_0``
- Level 1
* - ``V4L2_MPEG_VIDEO_VP9_LEVEL_1_1``
- Level 1.1
* - ``V4L2_MPEG_VIDEO_VP9_LEVEL_2_0``
- Level 2
* - ``V4L2_MPEG_VIDEO_VP9_LEVEL_2_1``
- Level 2.1
* - ``V4L2_MPEG_VIDEO_VP9_LEVEL_3_0``
- Level 3
* - ``V4L2_MPEG_VIDEO_VP9_LEVEL_3_1``
- Level 3.1
* - ``V4L2_MPEG_VIDEO_VP9_LEVEL_4_0``
- Level 4
* - ``V4L2_MPEG_VIDEO_VP9_LEVEL_4_1``
- Level 4.1
* - ``V4L2_MPEG_VIDEO_VP9_LEVEL_5_0``
- Level 5
* - ``V4L2_MPEG_VIDEO_VP9_LEVEL_5_1``
- Level 5.1
* - ``V4L2_MPEG_VIDEO_VP9_LEVEL_5_2``
- Level 5.2
* - ``V4L2_MPEG_VIDEO_VP9_LEVEL_6_0``
- Level 6
* - ``V4L2_MPEG_VIDEO_VP9_LEVEL_6_1``
- Level 6.1
* - ``V4L2_MPEG_VIDEO_VP9_LEVEL_6_2``
- Level 6.2
High Efficiency Video Coding (HEVC/H.265) Control Reference High Efficiency Video Coding (HEVC/H.265) Control Reference
=========================================================== ===========================================================
......
...@@ -475,6 +475,23 @@ const char * const *v4l2_ctrl_get_menu(u32 id) ...@@ -475,6 +475,23 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
"3", "3",
NULL, NULL,
}; };
static const char * const vp9_level[] = {
"1",
"1.1",
"2",
"2.1",
"3",
"3.1",
"4",
"4.1",
"5",
"5.1",
"5.2",
"6",
"6.1",
"6.2",
NULL,
};
static const char * const flash_led_mode[] = { static const char * const flash_led_mode[] = {
"Off", "Off",
...@@ -694,6 +711,8 @@ const char * const *v4l2_ctrl_get_menu(u32 id) ...@@ -694,6 +711,8 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
return vp8_profile; return vp8_profile;
case V4L2_CID_MPEG_VIDEO_VP9_PROFILE: case V4L2_CID_MPEG_VIDEO_VP9_PROFILE:
return vp9_profile; return vp9_profile;
case V4L2_CID_MPEG_VIDEO_VP9_LEVEL:
return vp9_level;
case V4L2_CID_JPEG_CHROMA_SUBSAMPLING: case V4L2_CID_JPEG_CHROMA_SUBSAMPLING:
return jpeg_chroma_subsampling; return jpeg_chroma_subsampling;
case V4L2_CID_DV_TX_MODE: case V4L2_CID_DV_TX_MODE:
...@@ -950,6 +969,7 @@ const char *v4l2_ctrl_get_name(u32 id) ...@@ -950,6 +969,7 @@ const char *v4l2_ctrl_get_name(u32 id)
case V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP: return "VPX P-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_VP8_PROFILE: return "VP8 Profile";
case V4L2_CID_MPEG_VIDEO_VP9_PROFILE: return "VP9 Profile"; case V4L2_CID_MPEG_VIDEO_VP9_PROFILE: return "VP9 Profile";
case V4L2_CID_MPEG_VIDEO_VP9_LEVEL: return "VP9 Level";
case V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER: return "VP8 Frame Header"; case V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER: return "VP8 Frame Header";
/* HEVC controls */ /* HEVC controls */
...@@ -1307,6 +1327,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, ...@@ -1307,6 +1327,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL: case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL:
case V4L2_CID_MPEG_VIDEO_VP8_PROFILE: case V4L2_CID_MPEG_VIDEO_VP8_PROFILE:
case V4L2_CID_MPEG_VIDEO_VP9_PROFILE: case V4L2_CID_MPEG_VIDEO_VP9_PROFILE:
case V4L2_CID_MPEG_VIDEO_VP9_LEVEL:
case V4L2_CID_DETECT_MD_MODE: case V4L2_CID_DETECT_MD_MODE:
case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE: case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE:
case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL: case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL:
......
...@@ -651,6 +651,23 @@ enum v4l2_mpeg_video_vp9_profile { ...@@ -651,6 +651,23 @@ enum v4l2_mpeg_video_vp9_profile {
V4L2_MPEG_VIDEO_VP9_PROFILE_2 = 2, V4L2_MPEG_VIDEO_VP9_PROFILE_2 = 2,
V4L2_MPEG_VIDEO_VP9_PROFILE_3 = 3, V4L2_MPEG_VIDEO_VP9_PROFILE_3 = 3,
}; };
#define V4L2_CID_MPEG_VIDEO_VP9_LEVEL (V4L2_CID_MPEG_BASE+513)
enum v4l2_mpeg_video_vp9_level {
V4L2_MPEG_VIDEO_VP9_LEVEL_1_0 = 0,
V4L2_MPEG_VIDEO_VP9_LEVEL_1_1 = 1,
V4L2_MPEG_VIDEO_VP9_LEVEL_2_0 = 2,
V4L2_MPEG_VIDEO_VP9_LEVEL_2_1 = 3,
V4L2_MPEG_VIDEO_VP9_LEVEL_3_0 = 4,
V4L2_MPEG_VIDEO_VP9_LEVEL_3_1 = 5,
V4L2_MPEG_VIDEO_VP9_LEVEL_4_0 = 6,
V4L2_MPEG_VIDEO_VP9_LEVEL_4_1 = 7,
V4L2_MPEG_VIDEO_VP9_LEVEL_5_0 = 8,
V4L2_MPEG_VIDEO_VP9_LEVEL_5_1 = 9,
V4L2_MPEG_VIDEO_VP9_LEVEL_5_2 = 10,
V4L2_MPEG_VIDEO_VP9_LEVEL_6_0 = 11,
V4L2_MPEG_VIDEO_VP9_LEVEL_6_1 = 12,
V4L2_MPEG_VIDEO_VP9_LEVEL_6_2 = 13,
};
/* CIDs for HEVC encoding. */ /* CIDs for HEVC encoding. */
......
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