video: driver: fix for fence support
- Add METADATA_PICTURE_TYPE support. - some fixes for fence support. Change-Id: Icd2285aa9fef57775122e9d2433f1e5d708ccdd3 Signed-off-by: Akshata Sahukar <quic_asahukar@quicinc.com>
This commit is contained in:
@@ -1752,7 +1752,7 @@ static struct msm_platform_inst_capability instance_data_kalama[] = {
|
||||
HFI_PROP_CONEALED_MB_COUNT,
|
||||
CAP_FLAG_BITMASK},
|
||||
|
||||
{META_HIST_INFO, DEC, CODECS_ALL,
|
||||
{META_HIST_INFO, DEC, HEVC|AV1|VP9,
|
||||
V4L2_MPEG_VIDC_META_DISABLE,
|
||||
V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT,
|
||||
0, V4L2_MPEG_VIDC_META_DISABLE,
|
||||
@@ -1760,6 +1760,14 @@ static struct msm_platform_inst_capability instance_data_kalama[] = {
|
||||
HFI_PROP_HISTOGRAM_INFO,
|
||||
CAP_FLAG_BITMASK},
|
||||
|
||||
{META_PICTURE_TYPE, DEC, CODECS_ALL,
|
||||
V4L2_MPEG_VIDC_META_DISABLE,
|
||||
V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_INPUT,
|
||||
0, V4L2_MPEG_VIDC_META_DISABLE,
|
||||
V4L2_CID_MPEG_VIDC_METADATA_PICTURE_TYPE,
|
||||
HFI_PROP_PICTURE_TYPE,
|
||||
CAP_FLAG_BITMASK},
|
||||
|
||||
{META_SEI_MASTERING_DISP, ENC, HEVC|HEIC,
|
||||
V4L2_MPEG_VIDC_META_DISABLE,
|
||||
V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT,
|
||||
@@ -1868,17 +1876,6 @@ static struct msm_platform_inst_capability instance_data_kalama[] = {
|
||||
HFI_PROP_ENC_QP_METADATA,
|
||||
CAP_FLAG_BITMASK},
|
||||
|
||||
{META_ROI_INFO, ENC, CODECS_ALL,
|
||||
V4L2_MPEG_VIDC_META_DISABLE,
|
||||
V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT,
|
||||
0, V4L2_MPEG_VIDC_META_DISABLE,
|
||||
V4L2_CID_MPEG_VIDC_METADATA_ROI_INFO,
|
||||
HFI_PROP_ROI_INFO,
|
||||
CAP_FLAG_INPUT_PORT | CAP_FLAG_BITMASK,
|
||||
{BITRATE_MODE, PIX_FMTS},
|
||||
{0},
|
||||
msm_vidc_adjust_roi_info, NULL},
|
||||
|
||||
{META_ROI_INFO, ENC, H264|HEVC,
|
||||
V4L2_MPEG_VIDC_META_DISABLE,
|
||||
V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT,
|
||||
|
@@ -368,6 +368,7 @@ enum msm_vidc_inst_capability_type {
|
||||
META_TIMESTAMP,
|
||||
META_CONCEALED_MB_CNT,
|
||||
META_HIST_INFO,
|
||||
META_PICTURE_TYPE,
|
||||
META_SEI_MASTERING_DISP,
|
||||
META_SEI_CLL,
|
||||
META_HDR10PLUS,
|
||||
|
@@ -1435,6 +1435,10 @@ int msm_vdec_streamon_input(struct msm_vidc_inst *inst)
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
rc = msm_vdec_subscribe_metadata(inst, INPUT_PORT);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
rc = msm_vdec_set_delivery_mode_metadata(inst, INPUT_PORT);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
@@ -707,7 +707,8 @@ void msm_vidc_add_volatile_flag(struct v4l2_ctrl *ctrl)
|
||||
{
|
||||
if (ctrl->id == V4L2_CID_MIN_BUFFERS_FOR_OUTPUT ||
|
||||
ctrl->id == V4L2_CID_MIN_BUFFERS_FOR_CAPTURE ||
|
||||
ctrl->id == V4L2_CID_MPEG_VIDC_AV1D_FILM_GRAIN_PRESENT)
|
||||
ctrl->id == V4L2_CID_MPEG_VIDC_AV1D_FILM_GRAIN_PRESENT ||
|
||||
ctrl->id == V4L2_CID_MPEG_VIDC_SW_FENCE_FD)
|
||||
ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE;
|
||||
}
|
||||
|
||||
|
@@ -68,6 +68,7 @@ static const struct msm_vidc_cap_name cap_name_arr[] = {
|
||||
{META_TIMESTAMP, "META_TIMESTAMP" },
|
||||
{META_CONCEALED_MB_CNT, "META_CONCEALED_MB_CNT" },
|
||||
{META_HIST_INFO, "META_HIST_INFO" },
|
||||
{META_PICTURE_TYPE, "META_PICTURE_TYPE" },
|
||||
{META_SEI_MASTERING_DISP, "META_SEI_MASTERING_DISP" },
|
||||
{META_SEI_CLL, "META_SEI_CLL" },
|
||||
{META_HDR10PLUS, "META_HDR10PLUS" },
|
||||
@@ -1320,6 +1321,7 @@ bool msm_vidc_allow_s_ctrl(struct msm_vidc_inst *inst, u32 id)
|
||||
case V4L2_CID_MPEG_VIDC_INPUT_METADATA_FD:
|
||||
case V4L2_CID_MPEG_VIDC_FRAME_RATE:
|
||||
case V4L2_CID_MPEG_VIDC_OPERATING_RATE:
|
||||
case V4L2_CID_MPEG_VIDC_SW_FENCE_ID:
|
||||
allow = true;
|
||||
break;
|
||||
default:
|
||||
@@ -1408,6 +1410,7 @@ bool msm_vidc_allow_metadata_subscription(struct msm_vidc_inst *inst, u32 cap_id
|
||||
case META_SEI_MASTERING_DISP:
|
||||
case META_SEI_CLL:
|
||||
case META_HDR10PLUS:
|
||||
case META_PICTURE_TYPE:
|
||||
if (!is_meta_rx_inp_enabled(inst, META_OUTBUF_FENCE)) {
|
||||
i_vpr_h(inst,
|
||||
"%s: cap: %24s not allowed as output buffer fence is disabled\n",
|
||||
@@ -2098,9 +2101,8 @@ int msm_vidc_get_fence_fd(struct msm_vidc_inst *inst, int *fence_fd)
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
i_vpr_e(inst, "%s: could not find matching fence for fence id: %d\n",
|
||||
i_vpr_h(inst, "%s: could not find matching fence for fence id: %d\n",
|
||||
__func__, inst->capabilities->cap[FENCE_ID].value);
|
||||
rc = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
@@ -3893,6 +3895,9 @@ static int msm_vidc_v4l2_buffer_event(struct msm_vidc_inst *inst,
|
||||
event_data = (struct v4l2_event_vidc_metadata *)event.u.data;
|
||||
event_data->type = INPUT_META_PLANE;
|
||||
event_data->fd = buf->fd;
|
||||
event_data->index = buf->index;
|
||||
event_data->bytesused = buf->data_size;
|
||||
event_data->offset = buf->data_offset;
|
||||
|
||||
v4l2_event_queue_fh(&inst->event_handler, &event);
|
||||
|
||||
|
@@ -106,8 +106,10 @@ int msm_vidc_create_fence_fd(struct msm_vidc_inst *inst,
|
||||
goto err_sync_file;
|
||||
}
|
||||
fd_install(fence->fd, fence->sync_file->file);
|
||||
i_vpr_l(inst, "%s: created fd %d for fence %s id: %llu\n", __func__,
|
||||
fence->fd, fence->name, fence->dma_fence.seqno);
|
||||
|
||||
i_vpr_l(inst, "%s: created fd %d for fence %s\n", __func__,
|
||||
fence->fd, fence->name);
|
||||
return rc;
|
||||
|
||||
err_sync_file:
|
||||
put_unused_fd(fence->fd);
|
||||
|
@@ -3525,6 +3525,11 @@ int venus_hfi_queue_buffer(struct msm_vidc_inst *inst,
|
||||
|
||||
if (is_meta_rx_inp_enabled(inst, META_OUTBUF_FENCE) &&
|
||||
is_output_buffer(buffer->type)) {
|
||||
if (!buffer->fence_id) {
|
||||
i_vpr_e(inst, "%s: fence id cannot be 0\n", __func__);
|
||||
rc = -EINVAL;
|
||||
goto unlock;
|
||||
}
|
||||
rc = hfi_create_packet(inst->packet,
|
||||
inst->packet_size,
|
||||
HFI_PROP_FENCE,
|
||||
|
@@ -1063,6 +1063,14 @@ static int msm_vidc_check_meta_buffers(struct msm_vidc_inst *inst)
|
||||
};
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(buffer_type); i++) {
|
||||
/*
|
||||
* skip input meta buffers check as meta buffers were
|
||||
* already delivered if output fence enabled.
|
||||
*/
|
||||
if (is_meta_rx_inp_enabled(inst, META_OUTBUF_FENCE)) {
|
||||
if (buffer_type[i] == MSM_VIDC_BUF_INPUT)
|
||||
continue;
|
||||
}
|
||||
buffers = msm_vidc_get_buffers(inst, buffer_type[i], __func__);
|
||||
if (!buffers)
|
||||
return -EINVAL;
|
||||
@@ -1116,7 +1124,13 @@ static int handle_dequeue_buffers(struct msm_vidc_inst *inst)
|
||||
"vb2 done already", inst, buf);
|
||||
} else {
|
||||
buf->attr |= MSM_VIDC_ATTR_BUFFER_DONE;
|
||||
msm_vidc_buffer_done(inst, buf);
|
||||
rc = msm_vidc_buffer_done(inst, buf);
|
||||
if (rc) {
|
||||
print_vidc_buffer(VIDC_HIGH, "err ",
|
||||
"vb2 done failed", inst, buf);
|
||||
/* ignore the error */
|
||||
rc = 0;
|
||||
}
|
||||
}
|
||||
msm_vidc_put_driver_buf(inst, buf);
|
||||
}
|
||||
@@ -1734,12 +1748,12 @@ static int __handle_session_response(struct msm_vidc_inst *inst,
|
||||
}
|
||||
}
|
||||
|
||||
memset(&inst->hfi_frame_info, 0, sizeof(struct msm_vidc_hfi_frame_info));
|
||||
if (dequeue) {
|
||||
rc = handle_dequeue_buffers(inst);
|
||||
if (rc)
|
||||
return rc;
|
||||
}
|
||||
memset(&inst->hfi_frame_info, 0, sizeof(struct msm_vidc_hfi_frame_info));
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
@@ -227,6 +227,8 @@ enum v4l2_mpeg_video_av1_tier {
|
||||
*/
|
||||
#define V4L2_CID_MPEG_VIDC_SW_FENCE_FD \
|
||||
(V4L2_CID_MPEG_VIDC_BASE + 0x3A)
|
||||
#define V4L2_CID_MPEG_VIDC_METADATA_PICTURE_TYPE \
|
||||
(V4L2_CID_MPEG_VIDC_BASE + 0x3B)
|
||||
|
||||
/* add new controls above this line */
|
||||
/* Deprecate below controls once availble in gki and gsi bionic header */
|
||||
@@ -355,6 +357,7 @@ enum v4l2_mpeg_vidc_metadata {
|
||||
METADATA_TIMESTAMP = 0x0300015c,
|
||||
METADATA_CONCEALED_MB_COUNT = 0x0300015f,
|
||||
METADATA_HISTOGRAM_INFO = 0x03000161,
|
||||
METADATA_PICTURE_TYPE = 0x03000162,
|
||||
METADATA_SEI_MASTERING_DISPLAY_COLOUR = 0x03000163,
|
||||
METADATA_SEI_CONTENT_LIGHT_LEVEL = 0x03000164,
|
||||
METADATA_HDR10PLUS = 0x03000165,
|
||||
@@ -403,7 +406,10 @@ enum meta_interlace_info {
|
||||
struct v4l2_event_vidc_metadata {
|
||||
__u32 type;
|
||||
__s32 fd;
|
||||
__u8 reserved[56];
|
||||
__u32 index;
|
||||
__u32 bytesused;
|
||||
__u32 offset;
|
||||
__u8 reserved[44];
|
||||
};
|
||||
/* vendor events end */
|
||||
|
||||
|
Verwijs in nieuw issue
Block a user