Merge "msm: vidc: Allow clients to suggest I-frame sizes"
This commit is contained in:
commit
a8bcbb0330
5 changed files with 96 additions and 0 deletions
|
@ -2153,6 +2153,33 @@ int create_pkt_cmd_session_set_property(
|
|||
pkt->size += sizeof(u32) + sizeof(*signal_info);
|
||||
break;
|
||||
}
|
||||
case HAL_PARAM_VENC_IFRAMESIZE_TYPE:
|
||||
{
|
||||
enum hal_iframesize_type hal =
|
||||
*(enum hal_iframesize_type *)pdata;
|
||||
struct hfi_iframe_size *hfi = (struct hfi_iframe_size *)
|
||||
&pkt->rg_property_data[1];
|
||||
|
||||
switch (hal) {
|
||||
case HAL_IFRAMESIZE_TYPE_DEFAULT:
|
||||
hfi->type = HFI_IFRAME_SIZE_DEFAULT;
|
||||
break;
|
||||
case HAL_IFRAMESIZE_TYPE_MEDIUM:
|
||||
hfi->type = HFI_IFRAME_SIZE_MEDIUM;
|
||||
break;
|
||||
case HAL_IFRAMESIZE_TYPE_HUGE:
|
||||
hfi->type = HFI_IFRAME_SIZE_HIGH;
|
||||
break;
|
||||
case HAL_IFRAMESIZE_TYPE_UNLIMITED:
|
||||
hfi->type = HFI_IFRAME_SIZE_UNLIMITED;
|
||||
break;
|
||||
default:
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
pkt->rg_property_data[0] = HFI_PROPERTY_PARAM_VENC_IFRAMESIZE;
|
||||
pkt->size += sizeof(u32) + sizeof(struct hfi_iframe_size);
|
||||
break;
|
||||
}
|
||||
/* FOLLOWING PROPERTIES ARE NOT IMPLEMENTED IN CORE YET */
|
||||
case HAL_CONFIG_BUFFER_REQUIREMENTS:
|
||||
case HAL_CONFIG_PRIORITY:
|
||||
|
|
|
@ -185,6 +185,13 @@ static const char *const timestamp_mode[] = {
|
|||
"Ignore",
|
||||
};
|
||||
|
||||
static const char *const iframe_sizes[] = {
|
||||
"Default",
|
||||
"Medium",
|
||||
"Huge",
|
||||
"Unlimited"
|
||||
};
|
||||
|
||||
static struct msm_vidc_ctrl msm_venc_ctrls[] = {
|
||||
{
|
||||
.id = V4L2_CID_MPEG_VIDC_VIDEO_IDR_PERIOD,
|
||||
|
@ -1281,6 +1288,20 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
|
|||
.step = 1,
|
||||
.qmenu = NULL,
|
||||
},
|
||||
{
|
||||
.id = V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_TYPE,
|
||||
.name = "Bounds of I-frame size",
|
||||
.type = V4L2_CTRL_TYPE_MENU,
|
||||
.minimum = V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_DEFAULT,
|
||||
.maximum = V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_UNLIMITED,
|
||||
.default_value = V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_DEFAULT,
|
||||
.menu_skip_mask = ~(
|
||||
(1 << V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_DEFAULT) |
|
||||
(1 << V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_MEDIUM) |
|
||||
(1 << V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_HUGE) |
|
||||
(1 << V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_UNLIMITED)),
|
||||
.qmenu = iframe_sizes,
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
|
@ -2117,6 +2138,19 @@ static inline int venc_v4l2_to_hal(int id, int value)
|
|||
default:
|
||||
goto unknown_value;
|
||||
}
|
||||
case V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_TYPE:
|
||||
switch (value) {
|
||||
case V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_DEFAULT:
|
||||
return HAL_IFRAMESIZE_TYPE_DEFAULT;
|
||||
case V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_MEDIUM:
|
||||
return HAL_IFRAMESIZE_TYPE_MEDIUM;
|
||||
case V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_HUGE:
|
||||
return HAL_IFRAMESIZE_TYPE_HUGE;
|
||||
case V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_UNLIMITED:
|
||||
return HAL_IFRAMESIZE_TYPE_UNLIMITED;
|
||||
default:
|
||||
goto unknown_value;
|
||||
}
|
||||
}
|
||||
|
||||
unknown_value:
|
||||
|
@ -2159,6 +2193,7 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
|
|||
int frameqp = 0;
|
||||
int pic_order_cnt = 0;
|
||||
struct hal_video_signal_info signal_info = {0};
|
||||
enum hal_iframesize_type iframesize_type = HAL_IFRAMESIZE_TYPE_DEFAULT;
|
||||
|
||||
if (!inst || !inst->core || !inst->core->device) {
|
||||
dprintk(VIDC_ERR, "%s invalid parameters\n", __func__);
|
||||
|
@ -3242,6 +3277,13 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
|
|||
}
|
||||
pdata = &enable;
|
||||
break;
|
||||
case V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_TYPE:
|
||||
property_id = HAL_PARAM_VENC_IFRAMESIZE_TYPE;
|
||||
iframesize_type = venc_v4l2_to_hal(
|
||||
V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_TYPE,
|
||||
ctrl->val);
|
||||
pdata = &iframesize_type;
|
||||
break;
|
||||
default:
|
||||
dprintk(VIDC_ERR, "Unsupported index: %x\n", ctrl->id);
|
||||
rc = -ENOTSUPP;
|
||||
|
|
|
@ -242,6 +242,7 @@ enum hal_property {
|
|||
HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED,
|
||||
HAL_PARAM_VENC_H264_TRANSFORM_8x8,
|
||||
HAL_PARAM_VENC_VIDEO_SIGNAL_INFO,
|
||||
HAL_PARAM_VENC_IFRAMESIZE_TYPE,
|
||||
};
|
||||
|
||||
enum hal_domain {
|
||||
|
@ -1002,6 +1003,13 @@ struct hal_video_signal_info {
|
|||
bool full_range;
|
||||
};
|
||||
|
||||
enum hal_iframesize_type {
|
||||
HAL_IFRAMESIZE_TYPE_DEFAULT,
|
||||
HAL_IFRAMESIZE_TYPE_MEDIUM,
|
||||
HAL_IFRAMESIZE_TYPE_HUGE,
|
||||
HAL_IFRAMESIZE_TYPE_UNLIMITED,
|
||||
};
|
||||
|
||||
enum vidc_resource_id {
|
||||
VIDC_RESOURCE_NONE,
|
||||
VIDC_RESOURCE_OCMEM,
|
||||
|
|
|
@ -386,6 +386,8 @@ struct hfi_buffer_info {
|
|||
(HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x031)
|
||||
#define HFI_PROPERTY_PARAM_VENC_VQZIP_SEI_TYPE \
|
||||
(HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x033)
|
||||
#define HFI_PROPERTY_PARAM_VENC_IFRAMESIZE \
|
||||
(HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x034)
|
||||
|
||||
#define HFI_PROPERTY_CONFIG_VENC_COMMON_START \
|
||||
(HFI_DOMAIN_BASE_VENC + HFI_ARCH_COMMON_OFFSET + 0x6000)
|
||||
|
@ -888,6 +890,14 @@ struct hfi_aspect_ratio {
|
|||
u32 aspect_height;
|
||||
};
|
||||
|
||||
#define HFI_IFRAME_SIZE_DEFAULT (HFI_COMMON_BASE + 0x1)
|
||||
#define HFI_IFRAME_SIZE_MEDIUM (HFI_COMMON_BASE + 0x2)
|
||||
#define HFI_IFRAME_SIZE_HIGH (HFI_COMMON_BASE + 0x3)
|
||||
#define HFI_IFRAME_SIZE_UNLIMITED (HFI_COMMON_BASE + 0x4)
|
||||
struct hfi_iframe_size {
|
||||
u32 type;
|
||||
};
|
||||
|
||||
#define HFI_MVC_BUFFER_LAYOUT_TOP_BOTTOM (0)
|
||||
#define HFI_MVC_BUFFER_LAYOUT_SIDEBYSIDE (1)
|
||||
#define HFI_MVC_BUFFER_LAYOUT_SEQ (2)
|
||||
|
|
|
@ -1199,6 +1199,15 @@ enum v4l2_cid_mpeg_vidc_video_full_range {
|
|||
#define V4L2_CID_MPEG_VIDC_VIDEO_MATRIX_COEFFS \
|
||||
(V4L2_CID_MPEG_MSM_VIDC_BASE + 97)
|
||||
|
||||
#define V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_TYPE \
|
||||
(V4L2_CID_MPEG_MSM_VIDC_BASE + 98)
|
||||
enum v4l2_mpeg_vidc_video_venc_iframesize_type {
|
||||
V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_DEFAULT,
|
||||
V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_MEDIUM,
|
||||
V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_HUGE,
|
||||
V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_UNLIMITED,
|
||||
};
|
||||
|
||||
/* Camera class control IDs */
|
||||
|
||||
#define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900)
|
||||
|
|
Loading…
Add table
Reference in a new issue