summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArun Menon <avmenon@codeaurora.org>2016-05-26 11:34:37 -0700
committerKyle Yan <kyan@codeaurora.org>2016-06-03 14:49:39 -0700
commit32fdbc07dd1dcf3bcf6d757ce2123795fa7bf023 (patch)
treeef3514959a79679456a6cbedbafa767c787809ee
parent3d5422c8736782e32ff63929737d1ee62679bb8e (diff)
msm: vidc: Enable blur support for encode
Add v4l2 control extensions to allow the video driver client to enable/disable blur feature in the firmware. CRs-Fixed: 975505 Change-Id: I1b340d13bfef3b71d049d53c9bb79e4effafc79a Signed-off-by: Arun Menon <avmenon@codeaurora.org>
-rw-r--r--drivers/media/platform/msm/vidc/hfi_packetization.c20
-rw-r--r--drivers/media/platform/msm/vidc/msm_venc.c31
-rw-r--r--drivers/media/platform/msm/vidc/vidc_hfi_api.h1
-rw-r--r--drivers/media/platform/msm/vidc/vidc_hfi_helper.h2
-rw-r--r--include/uapi/linux/v4l2-controls.h6
5 files changed, 60 insertions, 0 deletions
diff --git a/drivers/media/platform/msm/vidc/hfi_packetization.c b/drivers/media/platform/msm/vidc/hfi_packetization.c
index f0ec8caac3dd..0469ffc95ef5 100644
--- a/drivers/media/platform/msm/vidc/hfi_packetization.c
+++ b/drivers/media/platform/msm/vidc/hfi_packetization.c
@@ -2315,6 +2315,26 @@ static int create_3x_pkt_cmd_session_set_property(
pkt->size += sizeof(u32) * 2;
break;
}
+ case HAL_CONFIG_VENC_BLUR_RESOLUTION:
+ {
+ struct hfi_frame_size *hfi;
+ struct hal_frame_size *prop = (struct hal_frame_size *) pdata;
+ u32 buffer_type;
+
+ pkt->rg_property_data[0] =
+ HFI_PROPERTY_CONFIG_VENC_BLUR_FRAME_SIZE;
+ hfi = (struct hfi_frame_size *) &pkt->rg_property_data[1];
+ buffer_type = get_hfi_buffer(prop->buffer_type);
+ if (buffer_type)
+ hfi->buffer_type = buffer_type;
+ else
+ return -EINVAL;
+
+ hfi->height = prop->height;
+ hfi->width = prop->width;
+ pkt->size += sizeof(u32) + sizeof(struct hfi_frame_size);
+ break;
+ }
default:
rc = create_pkt_cmd_session_set_property(pkt,
session, ptype, pdata);
diff --git a/drivers/media/platform/msm/vidc/msm_venc.c b/drivers/media/platform/msm/vidc/msm_venc.c
index 870eaf3fb99c..1d5191373d36 100644
--- a/drivers/media/platform/msm/vidc/msm_venc.c
+++ b/drivers/media/platform/msm/vidc/msm_venc.c
@@ -1186,6 +1186,23 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
.minimum = V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_DISABLE,
.maximum = V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_ENABLE,
.default_value = V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_DISABLE,
+ },
+ {
+ .id = V4L2_CID_MPEG_VIDC_VIDEO_BLUR_WIDTH,
+ .name = "Set Blur width",
+ .type = V4L2_CTRL_TYPE_INTEGER,
+ .minimum = 0,
+ .maximum = 2048,
+ .default_value = 0,
+ .step = 1,
+ },
+ {
+ .id = V4L2_CID_MPEG_VIDC_VIDEO_BLUR_HEIGHT,
+ .name = "Set Blur height",
+ .type = V4L2_CTRL_TYPE_INTEGER,
+ .minimum = 0,
+ .maximum = 2048,
+ .default_value = 0,
.step = 1,
},
};
@@ -3108,6 +3125,7 @@ static int try_set_ext_ctrl(struct msm_vidc_inst *inst,
struct hal_initial_quantization quant;
struct hal_aspect_ratio sar;
struct hal_bitrate bitrate;
+ struct hal_frame_size blur_res;
if (!inst || !inst->core || !inst->core->device || !ctrl) {
dprintk(VIDC_ERR, "%s invalid parameters\n", __func__);
@@ -3236,6 +3254,19 @@ static int try_set_ext_ctrl(struct msm_vidc_inst *inst,
}
break;
}
+ case V4L2_CID_MPEG_VIDC_VIDEO_BLUR_WIDTH:
+ property_id = HAL_CONFIG_VENC_BLUR_RESOLUTION;
+ blur_res.width = control[i].value;
+ blur_res.buffer_type = HAL_BUFFER_INPUT;
+ property_id = HAL_CONFIG_VENC_BLUR_RESOLUTION;
+ pdata = &blur_res;
+ break;
+ case V4L2_CID_MPEG_VIDC_VIDEO_BLUR_HEIGHT:
+ blur_res.height = control[i].value;
+ blur_res.buffer_type = HAL_BUFFER_INPUT;
+ property_id = HAL_CONFIG_VENC_BLUR_RESOLUTION;
+ pdata = &blur_res;
+ break;
default:
dprintk(VIDC_ERR, "Invalid id set: %d\n",
control[i].id);
diff --git a/drivers/media/platform/msm/vidc/vidc_hfi_api.h b/drivers/media/platform/msm/vidc/vidc_hfi_api.h
index 2b346f0aed70..a368257e8a66 100644
--- a/drivers/media/platform/msm/vidc/vidc_hfi_api.h
+++ b/drivers/media/platform/msm/vidc/vidc_hfi_api.h
@@ -235,6 +235,7 @@ enum hal_property {
HAL_PARAM_VENC_H264_PIC_ORDER_CNT,
HAL_PARAM_VENC_LOW_LATENCY,
HAL_PARAM_VENC_CONSTRAINED_INTRA_PRED,
+ HAL_CONFIG_VENC_BLUR_RESOLUTION,
};
enum hal_domain {
diff --git a/drivers/media/platform/msm/vidc/vidc_hfi_helper.h b/drivers/media/platform/msm/vidc/vidc_hfi_helper.h
index ad438d9d03af..a2d95927e400 100644
--- a/drivers/media/platform/msm/vidc/vidc_hfi_helper.h
+++ b/drivers/media/platform/msm/vidc/vidc_hfi_helper.h
@@ -417,6 +417,8 @@ struct hfi_buffer_info {
#define HFI_PROPERTY_CONFIG_VPE_COMMON_START \
(HFI_DOMAIN_BASE_VPE + HFI_ARCH_COMMON_OFFSET + 0x8000)
+#define HFI_PROPERTY_CONFIG_VENC_BLUR_FRAME_SIZE \
+ (HFI_PROPERTY_CONFIG_COMMON_START + 0x010)
#define HFI_PROPERTY_CONFIG_VPE_DEINTERLACE \
(HFI_PROPERTY_CONFIG_VPE_COMMON_START + 0x001)
#define HFI_PROPERTY_CONFIG_VPE_OPERATIONS \
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index 696e80ee4571..0c5c83a84362 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -1149,6 +1149,12 @@ enum v4l2_mpeg_vidc_video_lowlatency_mode {
V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_ENABLE = 1,
};
+#define V4L2_CID_MPEG_VIDC_VIDEO_BLUR_WIDTH \
+ (V4L2_CID_MPEG_MSM_VIDC_BASE + 89)
+
+#define V4L2_CID_MPEG_VIDC_VIDEO_BLUR_HEIGHT \
+ (V4L2_CID_MPEG_MSM_VIDC_BASE + 90)
+
/* Camera class control IDs */
#define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900)