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);
|
pkt->size += sizeof(u32) + sizeof(*signal_info);
|
||||||
break;
|
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 */
|
/* FOLLOWING PROPERTIES ARE NOT IMPLEMENTED IN CORE YET */
|
||||||
case HAL_CONFIG_BUFFER_REQUIREMENTS:
|
case HAL_CONFIG_BUFFER_REQUIREMENTS:
|
||||||
case HAL_CONFIG_PRIORITY:
|
case HAL_CONFIG_PRIORITY:
|
||||||
|
|
|
@ -185,6 +185,13 @@ static const char *const timestamp_mode[] = {
|
||||||
"Ignore",
|
"Ignore",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char *const iframe_sizes[] = {
|
||||||
|
"Default",
|
||||||
|
"Medium",
|
||||||
|
"Huge",
|
||||||
|
"Unlimited"
|
||||||
|
};
|
||||||
|
|
||||||
static struct msm_vidc_ctrl msm_venc_ctrls[] = {
|
static struct msm_vidc_ctrl msm_venc_ctrls[] = {
|
||||||
{
|
{
|
||||||
.id = V4L2_CID_MPEG_VIDC_VIDEO_IDR_PERIOD,
|
.id = V4L2_CID_MPEG_VIDC_VIDEO_IDR_PERIOD,
|
||||||
|
@ -1281,6 +1288,20 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
|
||||||
.step = 1,
|
.step = 1,
|
||||||
.qmenu = NULL,
|
.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:
|
default:
|
||||||
goto unknown_value;
|
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:
|
unknown_value:
|
||||||
|
@ -2159,6 +2193,7 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
|
||||||
int frameqp = 0;
|
int frameqp = 0;
|
||||||
int pic_order_cnt = 0;
|
int pic_order_cnt = 0;
|
||||||
struct hal_video_signal_info signal_info = {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) {
|
if (!inst || !inst->core || !inst->core->device) {
|
||||||
dprintk(VIDC_ERR, "%s invalid parameters\n", __func__);
|
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;
|
pdata = &enable;
|
||||||
break;
|
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:
|
default:
|
||||||
dprintk(VIDC_ERR, "Unsupported index: %x\n", ctrl->id);
|
dprintk(VIDC_ERR, "Unsupported index: %x\n", ctrl->id);
|
||||||
rc = -ENOTSUPP;
|
rc = -ENOTSUPP;
|
||||||
|
|
|
@ -242,6 +242,7 @@ enum hal_property {
|
||||||
HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED,
|
HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED,
|
||||||
HAL_PARAM_VENC_H264_TRANSFORM_8x8,
|
HAL_PARAM_VENC_H264_TRANSFORM_8x8,
|
||||||
HAL_PARAM_VENC_VIDEO_SIGNAL_INFO,
|
HAL_PARAM_VENC_VIDEO_SIGNAL_INFO,
|
||||||
|
HAL_PARAM_VENC_IFRAMESIZE_TYPE,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum hal_domain {
|
enum hal_domain {
|
||||||
|
@ -1002,6 +1003,13 @@ struct hal_video_signal_info {
|
||||||
bool full_range;
|
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 {
|
enum vidc_resource_id {
|
||||||
VIDC_RESOURCE_NONE,
|
VIDC_RESOURCE_NONE,
|
||||||
VIDC_RESOURCE_OCMEM,
|
VIDC_RESOURCE_OCMEM,
|
||||||
|
|
|
@ -386,6 +386,8 @@ struct hfi_buffer_info {
|
||||||
(HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x031)
|
(HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x031)
|
||||||
#define HFI_PROPERTY_PARAM_VENC_VQZIP_SEI_TYPE \
|
#define HFI_PROPERTY_PARAM_VENC_VQZIP_SEI_TYPE \
|
||||||
(HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x033)
|
(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 \
|
#define HFI_PROPERTY_CONFIG_VENC_COMMON_START \
|
||||||
(HFI_DOMAIN_BASE_VENC + HFI_ARCH_COMMON_OFFSET + 0x6000)
|
(HFI_DOMAIN_BASE_VENC + HFI_ARCH_COMMON_OFFSET + 0x6000)
|
||||||
|
@ -888,6 +890,14 @@ struct hfi_aspect_ratio {
|
||||||
u32 aspect_height;
|
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_TOP_BOTTOM (0)
|
||||||
#define HFI_MVC_BUFFER_LAYOUT_SIDEBYSIDE (1)
|
#define HFI_MVC_BUFFER_LAYOUT_SIDEBYSIDE (1)
|
||||||
#define HFI_MVC_BUFFER_LAYOUT_SEQ (2)
|
#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 \
|
#define V4L2_CID_MPEG_VIDC_VIDEO_MATRIX_COEFFS \
|
||||||
(V4L2_CID_MPEG_MSM_VIDC_BASE + 97)
|
(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 */
|
/* Camera class control IDs */
|
||||||
|
|
||||||
#define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900)
|
#define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900)
|
||||||
|
|
Loading…
Add table
Reference in a new issue