summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArun Menon <avmenon@codeaurora.org>2016-03-16 18:37:22 -0700
committerKyle Yan <kyan@codeaurora.org>2016-04-27 19:04:46 -0700
commit757aff54fff783b881a4f3ed258db59f46bcf25e (patch)
treefe805390e4bd96f83c55cf6afd30fc1202195349
parent81d9bef7e6c95d4be648e994de7960f46a23a078 (diff)
msm: vidc: Add support for output crop extra data
Venus firmware reports the crop dimensions for each FBD in the extra data buffer. This change is needed to support the new extra data type - MSM_VIDC_EXTRADATA_OUTPUT_CROP. CRs-Fixed: 999551 Change-Id: I3d1aa4a44701192e4bd85bdee29d6f2a49b9e5a7 Signed-off-by: Arun Menon <avmenon@codeaurora.org>
-rw-r--r--drivers/media/platform/msm/vidc/hfi_packetization.c6
-rw-r--r--drivers/media/platform/msm/vidc/msm_vdec.c6
-rw-r--r--drivers/media/platform/msm/vidc/msm_vidc_common.c3
-rw-r--r--drivers/media/platform/msm/vidc/vidc_hfi.h15
-rw-r--r--drivers/media/platform/msm/vidc/vidc_hfi_api.h3
-rw-r--r--include/uapi/linux/v4l2-controls.h3
-rw-r--r--include/uapi/media/msm_vidc.h16
7 files changed, 47 insertions, 5 deletions
diff --git a/drivers/media/platform/msm/vidc/hfi_packetization.c b/drivers/media/platform/msm/vidc/hfi_packetization.c
index 0d38aa92dafb..042227f567ff 100644
--- a/drivers/media/platform/msm/vidc/hfi_packetization.c
+++ b/drivers/media/platform/msm/vidc/hfi_packetization.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -635,6 +635,7 @@ static int get_hfi_extradata_index(enum hal_extradata_id index)
case HAL_EXTRADATA_ASPECT_RATIO:
case HAL_EXTRADATA_INPUT_CROP:
case HAL_EXTRADATA_DIGITAL_ZOOM:
+ case HAL_EXTRADATA_OUTPUT_CROP:
ret = HFI_PROPERTY_PARAM_INDEX_EXTRADATA;
break;
case HAL_EXTRADATA_MPEG2_SEQDISP:
@@ -684,6 +685,9 @@ static int get_hfi_extradata_id(enum hal_extradata_id index)
case HAL_EXTRADATA_DIGITAL_ZOOM:
ret = MSM_VIDC_EXTRADATA_DIGITAL_ZOOM;
break;
+ case HAL_EXTRADATA_OUTPUT_CROP:
+ ret = MSM_VIDC_EXTRADATA_OUTPUT_CROP;
+ break;
default:
ret = get_hfi_extradata_index(index);
break;
diff --git a/drivers/media/platform/msm/vidc/msm_vdec.c b/drivers/media/platform/msm/vidc/msm_vdec.c
index cc7cc0077196..cd65c4d0a08b 100644
--- a/drivers/media/platform/msm/vidc/msm_vdec.c
+++ b/drivers/media/platform/msm/vidc/msm_vdec.c
@@ -73,6 +73,7 @@ static const char *const mpeg_video_vidc_extradata[] = {
"Extradata frame QP",
"Extradata frame bits info",
"Extradata VQZip SEI",
+ "Extradata output crop",
};
static const char *const mpeg_vidc_video_alloc_mode_type[] = {
"Buffer Allocation Static",
@@ -272,7 +273,7 @@ static struct msm_vidc_ctrl msm_vdec_ctrls[] = {
.name = "Extradata Type",
.type = V4L2_CTRL_TYPE_MENU,
.minimum = V4L2_MPEG_VIDC_EXTRADATA_NONE,
- .maximum = V4L2_MPEG_VIDC_EXTRADATA_VQZIP_SEI,
+ .maximum = V4L2_MPEG_VIDC_EXTRADATA_OUTPUT_CROP,
.default_value = V4L2_MPEG_VIDC_EXTRADATA_NONE,
.menu_skip_mask = ~(
(1 << V4L2_MPEG_VIDC_EXTRADATA_NONE) |
@@ -295,7 +296,8 @@ static struct msm_vidc_ctrl msm_vdec_ctrls[] = {
(1 << V4L2_MPEG_VIDC_EXTRADATA_STREAM_USERDATA) |
(1 << V4L2_MPEG_VIDC_EXTRADATA_FRAME_QP) |
(1 << V4L2_MPEG_VIDC_EXTRADATA_FRAME_BITS_INFO) |
- (1 << V4L2_MPEG_VIDC_EXTRADATA_VQZIP_SEI)
+ (1 << V4L2_MPEG_VIDC_EXTRADATA_VQZIP_SEI) |
+ (1 << V4L2_MPEG_VIDC_EXTRADATA_OUTPUT_CROP)
),
.qmenu = mpeg_video_vidc_extradata,
},
diff --git a/drivers/media/platform/msm/vidc/msm_vidc_common.c b/drivers/media/platform/msm/vidc/msm_vidc_common.c
index bc9fb67626aa..bba2b4418d54 100644
--- a/drivers/media/platform/msm/vidc/msm_vidc_common.c
+++ b/drivers/media/platform/msm/vidc/msm_vidc_common.c
@@ -4625,6 +4625,9 @@ enum hal_extradata_id msm_comm_get_hal_extradata_index(
case V4L2_MPEG_VIDC_EXTRADATA_ROI_QP:
ret = HAL_EXTRADATA_ROI_QP;
break;
+ case V4L2_MPEG_VIDC_EXTRADATA_OUTPUT_CROP:
+ ret = HAL_EXTRADATA_OUTPUT_CROP;
+ break;
default:
dprintk(VIDC_WARN, "Extradata not found: %d\n", index);
break;
diff --git a/drivers/media/platform/msm/vidc/vidc_hfi.h b/drivers/media/platform/msm/vidc/vidc_hfi.h
index 37bf44f73537..6b7292cec6a8 100644
--- a/drivers/media/platform/msm/vidc/vidc_hfi.h
+++ b/drivers/media/platform/msm/vidc/vidc_hfi.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -92,6 +92,7 @@
#define HFI_EXTRADATA_METADATA_FILLER 0x7FE00002
#define HFI_INDEX_EXTRADATA_INPUT_CROP 0x0700000E
+#define HFI_INDEX_EXTRADATA_OUTPUT_CROP 0x0700000F
#define HFI_INDEX_EXTRADATA_ASPECT_RATIO 0x7F100003
struct hfi_buffer_alloc_mode {
@@ -842,6 +843,18 @@ struct hfi_index_extradata_input_crop_payload {
u32 height;
};
+struct hfi_index_extradata_output_crop_payload {
+ u32 size;
+ u32 version;
+ u32 port_index;
+ u32 left;
+ u32 top;
+ u32 display_width;
+ u32 display_height;
+ u32 width;
+ u32 height;
+};
+
struct hfi_index_extradata_digital_zoom_payload {
u32 size;
u32 version;
diff --git a/drivers/media/platform/msm/vidc/vidc_hfi_api.h b/drivers/media/platform/msm/vidc/vidc_hfi_api.h
index aab3358e9989..56f6f6152845 100644
--- a/drivers/media/platform/msm/vidc/vidc_hfi_api.h
+++ b/drivers/media/platform/msm/vidc/vidc_hfi_api.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -121,6 +121,7 @@ enum hal_extradata_id {
HAL_EXTRADATA_VQZIP_SEI,
HAL_EXTRADATA_YUV_STATS,
HAL_EXTRADATA_ROI_QP,
+ HAL_EXTRADATA_OUTPUT_CROP,
};
enum hal_property {
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index af87e053ad8b..4d7f6f0d676a 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -797,6 +797,9 @@ enum v4l2_mpeg_vidc_extradata {
V4L2_MPEG_VIDC_EXTRADATA_VQZIP_SEI = 22,
V4L2_MPEG_VIDC_EXTRADATA_YUV_STATS = 23,
V4L2_MPEG_VIDC_EXTRADATA_ROI_QP = 24,
+#define V4L2_MPEG_VIDC_EXTRADATA_OUTPUT_CROP \
+ V4L2_MPEG_VIDC_EXTRADATA_OUTPUT_CROP
+ V4L2_MPEG_VIDC_EXTRADATA_OUTPUT_CROP = 25,
};
#define V4L2_CID_MPEG_VIDC_SET_PERF_LEVEL (V4L2_CID_MPEG_MSM_VIDC_BASE + 26)
diff --git a/include/uapi/media/msm_vidc.h b/include/uapi/media/msm_vidc.h
index 7f8dc0195946..ac36b23bfa97 100644
--- a/include/uapi/media/msm_vidc.h
+++ b/include/uapi/media/msm_vidc.h
@@ -65,6 +65,19 @@ struct msm_vidc_input_crop_payload {
unsigned int height;
};
+struct msm_vidc_output_crop_payload {
+ unsigned int size;
+ unsigned int version;
+ unsigned int port_index;
+ unsigned int left;
+ unsigned int top;
+ unsigned int display_width;
+ unsigned int display_height;
+ unsigned int width;
+ unsigned int height;
+};
+
+
struct msm_vidc_digital_zoom_payload {
unsigned int size;
unsigned int version;
@@ -167,6 +180,9 @@ enum msm_vidc_extradata_type {
MSM_VIDC_EXTRADATA_VQZIP_SEI = 0x00000011,
MSM_VIDC_EXTRADATA_ROI_QP = 0x00000013,
MSM_VIDC_EXTRADATA_INPUT_CROP = 0x0700000E,
+#define MSM_VIDC_EXTRADATA_OUTPUT_CROP \
+ MSM_VIDC_EXTRADATA_OUTPUT_CROP
+ MSM_VIDC_EXTRADATA_OUTPUT_CROP = 0x0700000F,
MSM_VIDC_EXTRADATA_DIGITAL_ZOOM = 0x07000010,
MSM_VIDC_EXTRADATA_MULTISLICE_INFO = 0x7F100000,
MSM_VIDC_EXTRADATA_NUM_CONCEALED_MB = 0x7F100001,