forked from rubenslte/android_kernel_samsung_msm8226
msm: vidc: Add support for MBI extradata
Macro Block Information extradata (if enabled) allows interested clients to query for metadata about each macroblock. Change-Id: Icfee32770018338e28ae149e1ccb654f5a48cbec Signed-off-by: Deva Ramasubramanian <dramasub@codeaurora.org>
This commit is contained in:
committed by
Arun Menon
parent
0df9252879
commit
fbd85b747c
@@ -369,6 +369,9 @@ static int get_hfi_extradata_index(enum hal_extradata_id index)
|
||||
case HAL_EXTRADATA_LTR_INFO:
|
||||
ret = HFI_PROPERTY_PARAM_VENC_LTR_INFO;
|
||||
break;
|
||||
case HAL_EXTRADATA_METADATA_MBI:
|
||||
ret = HFI_PROPERTY_PARAM_VENC_MBI_DUMPING;
|
||||
break;
|
||||
default:
|
||||
dprintk(VIDC_WARN, "Extradata index not found: %d\n", index);
|
||||
break;
|
||||
|
||||
@@ -116,6 +116,7 @@ static const char *const mpeg_video_vidc_extradata[] = {
|
||||
"Extradata input crop",
|
||||
"Extradata digital zoom",
|
||||
"Extradata aspect ratio",
|
||||
"Extradata macroblock metadata",
|
||||
};
|
||||
|
||||
static const char *const perf_level[] = {
|
||||
@@ -654,7 +655,7 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
|
||||
.name = "Extradata Type",
|
||||
.type = V4L2_CTRL_TYPE_MENU,
|
||||
.minimum = V4L2_MPEG_VIDC_EXTRADATA_NONE,
|
||||
.maximum = V4L2_MPEG_VIDC_EXTRADATA_LTR,
|
||||
.maximum = V4L2_MPEG_VIDC_EXTRADATA_METADATA_MBI,
|
||||
.default_value = V4L2_MPEG_VIDC_EXTRADATA_NONE,
|
||||
.menu_skip_mask = ~(
|
||||
(1 << V4L2_MPEG_VIDC_EXTRADATA_NONE) |
|
||||
@@ -675,7 +676,8 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
|
||||
(1 << V4L2_MPEG_VIDC_INDEX_EXTRADATA_INPUT_CROP) |
|
||||
(1 << V4L2_MPEG_VIDC_INDEX_EXTRADATA_DIGITAL_ZOOM) |
|
||||
(1 << V4L2_MPEG_VIDC_INDEX_EXTRADATA_ASPECT_RATIO) |
|
||||
(1 << V4L2_MPEG_VIDC_EXTRADATA_LTR)
|
||||
(1 << V4L2_MPEG_VIDC_EXTRADATA_LTR) |
|
||||
(1 << V4L2_MPEG_VIDC_EXTRADATA_METADATA_MBI)
|
||||
),
|
||||
.qmenu = mpeg_video_vidc_extradata,
|
||||
.step = 0,
|
||||
@@ -884,29 +886,33 @@ static int msm_venc_queue_setup(struct vb2_queue *q,
|
||||
*num_buffers = buff_req->buffer_count_actual =
|
||||
max(*num_buffers, buff_req->buffer_count_actual);
|
||||
}
|
||||
if (*num_buffers < MIN_NUM_CAPTURE_BUFFERS)
|
||||
*num_buffers = MIN_NUM_CAPTURE_BUFFERS;
|
||||
|
||||
if (*num_buffers > VIDEO_MAX_FRAME) {
|
||||
dprintk(VIDC_ERR,
|
||||
"Changing buffers requested, from %d to max"\
|
||||
" supported (%d) best effort encoding\n",
|
||||
*num_buffers, VIDEO_MAX_FRAME);
|
||||
*num_buffers = VIDEO_MAX_FRAME;
|
||||
if (*num_buffers < MIN_NUM_CAPTURE_BUFFERS ||
|
||||
*num_buffers > VIDEO_MAX_FRAME) {
|
||||
int temp = *num_buffers;
|
||||
|
||||
*num_buffers = clamp_val(*num_buffers,
|
||||
MIN_NUM_CAPTURE_BUFFERS,
|
||||
VIDEO_MAX_FRAME);
|
||||
dprintk(VIDC_INFO,
|
||||
"Changing buffer count on CAPTURE_MPLANE from %d to %d for best effort encoding\n",
|
||||
temp, *num_buffers);
|
||||
}
|
||||
|
||||
ctrl = v4l2_ctrl_find(&inst->ctrl_handler,
|
||||
V4L2_CID_MPEG_VIDC_VIDEO_EXTRADATA);
|
||||
if (ctrl)
|
||||
extradata = v4l2_ctrl_g_ctrl(ctrl);
|
||||
if ((extradata == V4L2_MPEG_VIDC_EXTRADATA_MULTISLICE_INFO) ||
|
||||
(extradata == V4L2_MPEG_VIDC_EXTRADATA_LTR))
|
||||
if (extradata != V4L2_MPEG_VIDC_EXTRADATA_NONE)
|
||||
*num_planes = *num_planes + 1;
|
||||
inst->fmts[CAPTURE_PORT]->num_planes = *num_planes;
|
||||
|
||||
for (i = 0; i < *num_planes; i++) {
|
||||
sizes[i] = inst->fmts[CAPTURE_PORT]->get_frame_size(
|
||||
i, inst->prop.height[CAPTURE_PORT],
|
||||
inst->prop.width[CAPTURE_PORT]);
|
||||
}
|
||||
|
||||
property_id = HAL_PARAM_BUFFER_COUNT_ACTUAL;
|
||||
new_buf_count.buffer_type = HAL_BUFFER_OUTPUT;
|
||||
new_buf_count.buffer_count_actual = *num_buffers;
|
||||
|
||||
@@ -3149,6 +3149,9 @@ enum hal_extradata_id msm_comm_get_hal_extradata_index(
|
||||
case V4L2_MPEG_VIDC_EXTRADATA_LTR:
|
||||
ret = HAL_EXTRADATA_LTR_INFO;
|
||||
break;
|
||||
case V4L2_MPEG_VIDC_EXTRADATA_METADATA_MBI:
|
||||
ret = HAL_EXTRADATA_METADATA_MBI;
|
||||
break;
|
||||
default:
|
||||
dprintk(VIDC_WARN, "Extradata not found: %d\n", index);
|
||||
break;
|
||||
|
||||
@@ -228,6 +228,8 @@ struct hfi_extradata_header {
|
||||
(HFI_PROPERTY_PARAM_VENC_OX_START + 0x002)
|
||||
#define HFI_PROPERTY_PARAM_VENC_LTR_INFO \
|
||||
(HFI_PROPERTY_PARAM_VENC_OX_START + 0x003)
|
||||
#define HFI_PROPERTY_PARAM_VENC_MBI_DUMPING \
|
||||
(HFI_PROPERTY_PARAM_VENC_OX_START + 0x005)
|
||||
|
||||
#define HFI_PROPERTY_CONFIG_VENC_OX_START \
|
||||
(HFI_DOMAIN_BASE_VENC + HFI_ARCH_OX_OFFSET + 0x6000)
|
||||
|
||||
@@ -101,6 +101,7 @@ enum hal_extradata_id {
|
||||
HAL_EXTRADATA_FRAME_QP,
|
||||
HAL_EXTRADATA_FRAME_BITS_INFO,
|
||||
HAL_EXTRADATA_LTR_INFO,
|
||||
HAL_EXTRADATA_METADATA_MBI,
|
||||
};
|
||||
|
||||
enum hal_property {
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
#define VEN_EXTRADATA_QCOMFILLER 0x002
|
||||
#define VEN_EXTRADATA_SLICEINFO 0x100
|
||||
#define VEN_EXTRADATA_LTRINFO 0x200
|
||||
#define VEN_EXTRADATA_MBINFO 0x400
|
||||
|
||||
/*ENCODER CONFIGURATION CONSTANTS*/
|
||||
|
||||
|
||||
@@ -1845,6 +1845,7 @@ enum v4l2_mpeg_vidc_extradata {
|
||||
V4L2_MPEG_VIDC_EXTRADATA_FRAME_QP,
|
||||
V4L2_MPEG_VIDC_EXTRADATA_FRAME_BITS_INFO,
|
||||
V4L2_MPEG_VIDC_EXTRADATA_LTR,
|
||||
V4L2_MPEG_VIDC_EXTRADATA_METADATA_MBI,
|
||||
};
|
||||
|
||||
#define V4L2_CID_MPEG_VIDC_SET_PERF_LEVEL (V4L2_CID_MPEG_MSM_VIDC_BASE + 26)
|
||||
|
||||
@@ -96,6 +96,16 @@ int msm_vidc_smem_get_domain_partition(void *instance,
|
||||
int *domain_num, int *partition_num);
|
||||
void *msm_vidc_smem_get_client(void *instance);
|
||||
#endif
|
||||
|
||||
struct msm_vidc_extradata_header {
|
||||
unsigned int size;
|
||||
unsigned int:32; /** Keeping binary compatibility */
|
||||
unsigned int:32; /* with firmware and OpenMAX IL **/
|
||||
unsigned int type; /* msm_vidc_extradata_type */
|
||||
unsigned int data_size;
|
||||
unsigned char data[1];
|
||||
};
|
||||
|
||||
struct msm_vidc_interlace_payload {
|
||||
unsigned int format;
|
||||
};
|
||||
@@ -189,6 +199,7 @@ enum msm_vidc_extradata_type {
|
||||
EXTRADATA_ASPECT_RATIO = 0x7F100003,
|
||||
EXTRADATA_METADATA_FILLER = 0x7FE00002,
|
||||
MSM_VIDC_EXTRADATA_METADATA_LTR = 0x7F100004,
|
||||
EXTRADATA_METADATA_MBI = 0x7F100005,
|
||||
};
|
||||
enum msm_vidc_interlace_type {
|
||||
INTERLACE_FRAME_PROGRESSIVE = 0x01,
|
||||
|
||||
Reference in New Issue
Block a user