FROMGIT: 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: Stanimir Varbanov <stanimir.varbanov@linaro.org>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>

Bug: 169874657
Change-Id: I6d147c6b5ced7562da934399d777bca419421109
(cherry picked from commit 5887f075922547908e9a17c50e383426d72c59b6
 https://git.linuxtv.org/svarbanov/media_tree.git venus-for-next-v5.10-part2)
Signed-off-by: Maheshwar Ajja <majja@codeaurora.org>
This commit is contained in:
Maheshwar Ajja 2020-10-01 16:55:51 -07:00 committed by Todd Kjos
parent 20cd20cd4b
commit a44b31f34c
3 changed files with 81 additions and 0 deletions

View File

@ -3364,6 +3364,49 @@ enum v4l2_mpeg_video_vp9_profile -
* - ``V4L2_MPEG_VIDEO_VP9_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
===========================================================

View File

@ -475,6 +475,23 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
"3",
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[] = {
"Off",
@ -694,6 +711,8 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
return vp8_profile;
case V4L2_CID_MPEG_VIDEO_VP9_PROFILE:
return vp9_profile;
case V4L2_CID_MPEG_VIDEO_VP9_LEVEL:
return vp9_level;
case V4L2_CID_JPEG_CHROMA_SUBSAMPLING:
return jpeg_chroma_subsampling;
case V4L2_CID_DV_TX_MODE:
@ -949,6 +968,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_VP8_PROFILE: return "VP8 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";
/* HEVC controls */
@ -1306,6 +1326,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_VP8_PROFILE:
case V4L2_CID_MPEG_VIDEO_VP9_PROFILE:
case V4L2_CID_MPEG_VIDEO_VP9_LEVEL:
case V4L2_CID_DETECT_MD_MODE:
case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE:
case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL:

View File

@ -651,6 +651,23 @@ enum v4l2_mpeg_video_vp9_profile {
V4L2_MPEG_VIDEO_VP9_PROFILE_2 = 2,
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. */