Merge "msm: vidc: Add VP9 profile/level query support"
diff --git a/drivers/media/platform/msm/vidc/msm_vdec.c b/drivers/media/platform/msm/vidc/msm_vdec.c
index f17f3da..aa20a07 100644
--- a/drivers/media/platform/msm/vidc/msm_vdec.c
+++ b/drivers/media/platform/msm/vidc/msm_vdec.c
@@ -61,6 +61,26 @@
"3.0",
};
+static const char *const vp9_profile[] = {
+ "Unused",
+ "0",
+ "2_10",
+};
+
+static const char *const vp9_level[] = {
+ "Unused",
+ "1.0",
+ "1.1",
+ "2.0",
+ "2.1",
+ "3.0",
+ "3.1",
+ "4.0",
+ "4.1",
+ "5.0",
+ "5.1",
+};
+
static const char *const mpeg2_profile[] = {
"Simple",
"Main",
@@ -231,6 +251,28 @@
.flags = V4L2_CTRL_FLAG_VOLATILE | V4L2_CTRL_FLAG_READ_ONLY,
},
{
+ .id = V4L2_CID_MPEG_VIDC_VIDEO_VP9_PROFILE,
+ .name = "VP9 Profile",
+ .type = V4L2_CTRL_TYPE_MENU,
+ .minimum = V4L2_MPEG_VIDC_VIDEO_VP9_PROFILE_UNUSED,
+ .maximum = V4L2_MPEG_VIDC_VIDEO_VP9_PROFILE_P2_10,
+ .default_value = V4L2_MPEG_VIDC_VIDEO_VP9_PROFILE_P0,
+ .menu_skip_mask = 0,
+ .qmenu = vp9_profile,
+ .flags = V4L2_CTRL_FLAG_VOLATILE | V4L2_CTRL_FLAG_READ_ONLY,
+ },
+ {
+ .id = V4L2_CID_MPEG_VIDC_VIDEO_VP9_LEVEL,
+ .name = "VP9 Level",
+ .type = V4L2_CTRL_TYPE_MENU,
+ .minimum = V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_UNUSED,
+ .maximum = V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_51,
+ .default_value = V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_51,
+ .menu_skip_mask = 0,
+ .qmenu = vp9_level,
+ .flags = V4L2_CTRL_FLAG_VOLATILE | V4L2_CTRL_FLAG_READ_ONLY,
+ },
+ {
.id = V4L2_CID_MPEG_VIDC_VIDEO_MPEG2_PROFILE,
.name = "MPEG2 Profile",
.type = V4L2_CTRL_TYPE_MENU,
diff --git a/drivers/media/platform/msm/vidc/msm_vidc.c b/drivers/media/platform/msm/vidc/msm_vidc.c
index ac198a6..920e91a 100644
--- a/drivers/media/platform/msm/vidc/msm_vidc.c
+++ b/drivers/media/platform/msm/vidc/msm_vidc.c
@@ -182,6 +182,7 @@
case V4L2_CID_MPEG_VIDEO_H264_PROFILE:
case V4L2_CID_MPEG_VIDC_VIDEO_HEVC_PROFILE:
case V4L2_CID_MPEG_VIDC_VIDEO_MPEG2_PROFILE:
+ case V4L2_CID_MPEG_VIDC_VIDEO_VP9_PROFILE:
{
prof_level_supported = &inst->capability.profile_level;
for (i = 0; i < prof_level_supported->profile_count; i++) {
@@ -200,6 +201,7 @@
case V4L2_CID_MPEG_VIDC_VIDEO_VP8_PROFILE_LEVEL:
case V4L2_CID_MPEG_VIDC_VIDEO_HEVC_TIER_LEVEL:
case V4L2_CID_MPEG_VIDC_VIDEO_MPEG2_LEVEL:
+ case V4L2_CID_MPEG_VIDC_VIDEO_VP9_LEVEL:
{
prof_level_supported = &inst->capability.profile_level;
for (i = 0; i < prof_level_supported->profile_count; i++) {
diff --git a/drivers/media/platform/msm/vidc/msm_vidc_common.c b/drivers/media/platform/msm/vidc/msm_vidc_common.c
index 18f8c85..8fd1dd1 100644
--- a/drivers/media/platform/msm/vidc/msm_vidc_common.c
+++ b/drivers/media/platform/msm/vidc/msm_vidc_common.c
@@ -297,6 +297,44 @@
default:
goto unknown_value;
}
+ case V4L2_CID_MPEG_VIDC_VIDEO_VP9_PROFILE:
+ switch (value) {
+ case HAL_VP9_PROFILE_P0:
+ return V4L2_MPEG_VIDC_VIDEO_VP9_PROFILE_P0;
+ case HAL_VP9_PROFILE_P2_10:
+ return V4L2_MPEG_VIDC_VIDEO_VP9_PROFILE_P2_10;
+ case HAL_VP9_PROFILE_UNUSED:
+ return V4L2_MPEG_VIDC_VIDEO_VP9_PROFILE_UNUSED;
+ default:
+ goto unknown_value;
+ }
+ case V4L2_CID_MPEG_VIDC_VIDEO_VP9_LEVEL:
+ switch (value) {
+ case HAL_VP9_LEVEL_1:
+ return V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_1;
+ case HAL_VP9_LEVEL_11:
+ return V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_11;
+ case HAL_VP9_LEVEL_2:
+ return V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_2;
+ case HAL_VP9_LEVEL_21:
+ return V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_21;
+ case HAL_VP9_LEVEL_3:
+ return V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_3;
+ case HAL_VP9_LEVEL_31:
+ return V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_31;
+ case HAL_VP9_LEVEL_4:
+ return V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_4;
+ case HAL_VP9_LEVEL_41:
+ return V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_41;
+ case HAL_VP9_LEVEL_5:
+ return V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_5;
+ case HAL_VP9_LEVEL_51:
+ return V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_51;
+ case HAL_VP9_LEVEL_UNUSED:
+ return V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_UNUSED;
+ default:
+ goto unknown_value;
+ }
case V4L2_CID_MPEG_VIDC_VIDEO_MPEG2_PROFILE:
switch (value) {
case HAL_MPEG2_PROFILE_SIMPLE:
diff --git a/drivers/media/platform/msm/vidc/vidc_hfi_api.h b/drivers/media/platform/msm/vidc/vidc_hfi_api.h
index 93bb084..13ea3f4 100644
--- a/drivers/media/platform/msm/vidc/vidc_hfi_api.h
+++ b/drivers/media/platform/msm/vidc/vidc_hfi_api.h
@@ -390,6 +390,26 @@
HAL_TME_LEVEL_INTEGER = 0x00000001,
};
+enum hal_vp9_profile {
+ HAL_VP9_PROFILE_UNUSED = 0x00000000,
+ HAL_VP9_PROFILE_P0 = 0x00000001,
+ HAL_VP9_PROFILE_P2_10 = 0x00000002,
+};
+
+enum hal_vp9_level {
+ HAL_VP9_LEVEL_UNUSED = 0x00000000,
+ HAL_VP9_LEVEL_1 = 0x00000001,
+ HAL_VP9_LEVEL_11 = 0x00000002,
+ HAL_VP9_LEVEL_2 = 0x00000004,
+ HAL_VP9_LEVEL_21 = 0x00000008,
+ HAL_VP9_LEVEL_3 = 0x00000010,
+ HAL_VP9_LEVEL_31 = 0x00000020,
+ HAL_VP9_LEVEL_4 = 0x00000040,
+ HAL_VP9_LEVEL_41 = 0x00000080,
+ HAL_VP9_LEVEL_5 = 0x00000100,
+ HAL_VP9_LEVEL_51 = 0x00000200,
+};
+
struct hal_frame_rate {
enum hal_buffer buffer_type;
u32 frame_rate;
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index dcff75b..26506d5 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -1046,6 +1046,30 @@
#define V4L2_CID_MPEG_VIDC_VIDEO_LAYER_ID \
(V4L2_CID_MPEG_MSM_VIDC_BASE + 65)
+#define V4L2_CID_MPEG_VIDC_VIDEO_VP9_PROFILE \
+ (V4L2_CID_MPEG_MSM_VIDC_BASE + 66)
+enum v4l2_mpeg_vidc_video_vp9_profile {
+ V4L2_MPEG_VIDC_VIDEO_VP9_PROFILE_UNUSED = 0,
+ V4L2_MPEG_VIDC_VIDEO_VP9_PROFILE_P0 = 1,
+ V4L2_MPEG_VIDC_VIDEO_VP9_PROFILE_P2_10 = 2,
+};
+
+#define V4L2_CID_MPEG_VIDC_VIDEO_VP9_LEVEL \
+ (V4L2_CID_MPEG_MSM_VIDC_BASE + 67)
+enum v4l2_mpeg_vidc_video_vp9_level {
+ V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_UNUSED = 0,
+ V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_1 = 1,
+ V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_11 = 2,
+ V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_2 = 3,
+ V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_21 = 4,
+ V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_3 = 5,
+ V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_31 = 6,
+ V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_4 = 7,
+ V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_41 = 8,
+ V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_5 = 9,
+ V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_51 = 10,
+};
+
#define V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP \
(V4L2_CID_MPEG_MSM_VIDC_BASE + 99)
#define V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP \