diff options
| author | Arun Menon <avmenon@codeaurora.org> | 2016-05-26 11:34:37 -0700 |
|---|---|---|
| committer | Kyle Yan <kyan@codeaurora.org> | 2016-06-03 14:49:39 -0700 |
| commit | 32fdbc07dd1dcf3bcf6d757ce2123795fa7bf023 (patch) | |
| tree | ef3514959a79679456a6cbedbafa767c787809ee | |
| parent | 3d5422c8736782e32ff63929737d1ee62679bb8e (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.c | 20 | ||||
| -rw-r--r-- | drivers/media/platform/msm/vidc/msm_venc.c | 31 | ||||
| -rw-r--r-- | drivers/media/platform/msm/vidc/vidc_hfi_api.h | 1 | ||||
| -rw-r--r-- | drivers/media/platform/msm/vidc/vidc_hfi_helper.h | 2 | ||||
| -rw-r--r-- | include/uapi/linux/v4l2-controls.h | 6 |
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) |
