video: driver: Add support to handle synx fence related hfi props/info
Add support to handle synx v2 fence related hfi properties and infos mentioned below: - HFI_PROP_FENCE_CLIENT_DATA - HFI_PROP_FENCE_TYPE - HFI_PROP_FENCE_DIRECTION - HFI_PROP_FENCE_ERROR_DATA_CORRUPT - HFI_INFO_FENCE_SIGNAL_ERROR Change-Id: Ifac0230dbeb0da80c104860c0e115167e82e85c6 Signed-off-by: Akshata Sahukar <quic_asahukar@quicinc.com>
Este cometimento está contido em:

cometido por
Gerrit - the friendly Code Review server

ascendente
1fdfa4758c
cometimento
203f619b7f
@@ -328,6 +328,9 @@ int msm_vidc_adjust_session_priority(void *instance, struct v4l2_ctrl *ctrl);
|
||||
int msm_vidc_adjust_roi_info(void *instance, struct v4l2_ctrl *ctrl);
|
||||
int msm_vidc_adjust_all_intra(void *instance, struct v4l2_ctrl *ctrl);
|
||||
int msm_vidc_adjust_dec_outbuf_fence(void *instance, struct v4l2_ctrl *ctrl);
|
||||
int msm_vidc_adjust_dec_outbuf_fence_type(void *instance, struct v4l2_ctrl *ctrl);
|
||||
int msm_vidc_adjust_dec_outbuf_fence_direction(void *instance,
|
||||
struct v4l2_ctrl *ctrl);
|
||||
int msm_vidc_adjust_dec_slice_mode(void *instance, struct v4l2_ctrl *ctrl);
|
||||
int msm_vidc_adjust_preprocess(void *instance, struct v4l2_ctrl *ctrl);
|
||||
int msm_vidc_adjust_eva_stats(void *instance, struct v4l2_ctrl *ctrl);
|
||||
@@ -400,5 +403,9 @@ int msm_vidc_set_q16(void *instance,
|
||||
enum msm_vidc_inst_capability_type cap_id);
|
||||
int msm_vidc_set_vui_timing_info(void *instance,
|
||||
enum msm_vidc_inst_capability_type cap_id);
|
||||
int msm_vidc_set_outbuf_fence_type(void *instance,
|
||||
enum msm_vidc_inst_capability_type cap_id);
|
||||
int msm_vidc_set_outbuf_fence_direction(void *instance,
|
||||
enum msm_vidc_inst_capability_type cap_id);
|
||||
|
||||
#endif // _MSM_VIDC_PLATFORM_H_
|
||||
|
@@ -2632,6 +2632,83 @@ int msm_vidc_adjust_dec_outbuf_fence(void *instance, struct v4l2_ctrl *ctrl)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int msm_vidc_adjust_dec_outbuf_fence_type(void *instance, struct v4l2_ctrl *ctrl)
|
||||
{
|
||||
struct msm_vidc_inst_capability *capability;
|
||||
s32 adjusted_value, meta_outbuf_fence = 0;
|
||||
struct msm_vidc_inst *inst = (struct msm_vidc_inst *) instance;
|
||||
struct msm_vidc_core *core;
|
||||
|
||||
if (!inst || !inst->capabilities || !inst->core) {
|
||||
d_vpr_e("%s: invalid params\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
capability = inst->capabilities;
|
||||
core = inst->core;
|
||||
if (!core->capabilities) {
|
||||
d_vpr_e("%s: invalid core caps\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
adjusted_value = ctrl ? ctrl->val :
|
||||
capability->cap[OUTBUF_FENCE_TYPE].value;
|
||||
|
||||
if (msm_vidc_get_parent_value(inst, OUTBUF_FENCE_TYPE,
|
||||
META_OUTBUF_FENCE, &meta_outbuf_fence, __func__))
|
||||
return -EINVAL;
|
||||
|
||||
if (is_meta_rx_inp_enabled(inst, META_OUTBUF_FENCE)) {
|
||||
if (core->capabilities[SUPPORTS_SYNX_FENCE].value)
|
||||
adjusted_value = MSM_VIDC_SYNX_V2_FENCE;
|
||||
else
|
||||
adjusted_value = MSM_VIDC_SW_FENCE;
|
||||
} else {
|
||||
adjusted_value = MSM_VIDC_FENCE_NONE;
|
||||
}
|
||||
|
||||
msm_vidc_update_cap_value(inst, OUTBUF_FENCE_TYPE,
|
||||
adjusted_value, __func__);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int msm_vidc_adjust_dec_outbuf_fence_direction(void *instance, struct v4l2_ctrl *ctrl)
|
||||
{
|
||||
struct msm_vidc_inst_capability *capability;
|
||||
s32 adjusted_value, meta_outbuf_fence = 0;
|
||||
struct msm_vidc_inst *inst = (struct msm_vidc_inst *) instance;
|
||||
struct msm_vidc_core *core;
|
||||
|
||||
if (!inst || !inst->capabilities || !inst->core) {
|
||||
d_vpr_e("%s: invalid params\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
capability = inst->capabilities;
|
||||
core = inst->core;
|
||||
if (!core->capabilities) {
|
||||
d_vpr_e("%s: invalid core caps\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
adjusted_value = ctrl ? ctrl->val :
|
||||
capability->cap[OUTBUF_FENCE_DIRECTION].value;
|
||||
|
||||
if (msm_vidc_get_parent_value(inst, OUTBUF_FENCE_DIRECTION,
|
||||
META_OUTBUF_FENCE, &meta_outbuf_fence, __func__))
|
||||
return -EINVAL;
|
||||
|
||||
if (is_meta_rx_inp_enabled(inst, META_OUTBUF_FENCE)) {
|
||||
adjusted_value = MSM_VIDC_FENCE_DIR_TX;
|
||||
} else {
|
||||
adjusted_value = MSM_VIDC_FENCE_DIR_NONE;
|
||||
}
|
||||
|
||||
msm_vidc_update_cap_value(inst, OUTBUF_FENCE_DIRECTION,
|
||||
adjusted_value, __func__);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int msm_vidc_adjust_dec_slice_mode(void *instance, struct v4l2_ctrl *ctrl)
|
||||
{
|
||||
struct msm_vidc_inst_capability *capability;
|
||||
@@ -4095,4 +4172,56 @@ int msm_vidc_set_vui_timing_info(void *instance,
|
||||
return rc;
|
||||
}
|
||||
|
||||
int msm_vidc_set_outbuf_fence_type(void *instance,
|
||||
enum msm_vidc_inst_capability_type cap_id)
|
||||
{
|
||||
int rc = 0;
|
||||
struct msm_vidc_inst *inst = (struct msm_vidc_inst *)instance;
|
||||
u32 hfi_value;
|
||||
|
||||
if (!inst || !inst->capabilities) {
|
||||
d_vpr_e("%s: invalid params\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (inst->capabilities->cap[OUTBUF_FENCE_TYPE].value ==
|
||||
MSM_VIDC_FENCE_NONE)
|
||||
return 0;
|
||||
|
||||
hfi_value = inst->capabilities->cap[cap_id].value;
|
||||
|
||||
rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32_ENUM,
|
||||
&hfi_value, sizeof(u32), __func__);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
int msm_vidc_set_outbuf_fence_direction(void *instance,
|
||||
enum msm_vidc_inst_capability_type cap_id)
|
||||
{
|
||||
int rc = 0;
|
||||
struct msm_vidc_inst *inst = (struct msm_vidc_inst *)instance;
|
||||
u32 hfi_value;
|
||||
|
||||
if (!inst || !inst->capabilities) {
|
||||
d_vpr_e("%s: invalid params\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (inst->capabilities->cap[OUTBUF_FENCE_DIRECTION].value ==
|
||||
MSM_VIDC_FENCE_DIR_NONE)
|
||||
return 0;
|
||||
|
||||
hfi_value = inst->capabilities->cap[cap_id].value;
|
||||
|
||||
rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32_ENUM,
|
||||
&hfi_value, sizeof(u32), __func__);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/********************* End of Control Set functions **************************/
|
||||
|
@@ -633,6 +633,47 @@ static struct msm_platform_inst_capability instance_cap_data_pineapple[] = {
|
||||
0,
|
||||
CAP_FLAG_VOLATILE},
|
||||
|
||||
/* Fence type for input buffer. Currently unsed */
|
||||
{INBUF_FENCE_TYPE, DEC, CODECS_ALL,
|
||||
MSM_VIDC_FENCE_NONE, MSM_VIDC_FENCE_NONE,
|
||||
BIT(MSM_VIDC_FENCE_NONE),
|
||||
MSM_VIDC_FENCE_NONE,
|
||||
0,
|
||||
HFI_PROP_FENCE_TYPE,
|
||||
CAP_FLAG_MENU | CAP_FLAG_INPUT_PORT},
|
||||
|
||||
{OUTBUF_FENCE_TYPE, DEC, CODECS_ALL,
|
||||
MSM_VIDC_FENCE_NONE, MSM_VIDC_SYNX_V2_FENCE,
|
||||
BIT(MSM_VIDC_FENCE_NONE) | BIT(MSM_VIDC_SW_FENCE) |
|
||||
BIT(MSM_VIDC_SYNX_V2_FENCE),
|
||||
MSM_VIDC_FENCE_NONE,
|
||||
0,
|
||||
HFI_PROP_FENCE_TYPE,
|
||||
CAP_FLAG_MENU | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
/* Fence direction for input buffer. Currently unsed */
|
||||
{INBUF_FENCE_DIRECTION, DEC, CODECS_ALL,
|
||||
MSM_VIDC_FENCE_DIR_NONE, MSM_VIDC_FENCE_DIR_NONE,
|
||||
BIT(MSM_VIDC_FENCE_DIR_NONE),
|
||||
MSM_VIDC_FENCE_DIR_NONE,
|
||||
0,
|
||||
HFI_PROP_FENCE_DIRECTION,
|
||||
CAP_FLAG_MENU | CAP_FLAG_INPUT_PORT},
|
||||
|
||||
{OUTBUF_FENCE_DIRECTION, DEC, CODECS_ALL,
|
||||
MSM_VIDC_FENCE_DIR_NONE, MSM_VIDC_FENCE_DIR_RX,
|
||||
BIT(MSM_VIDC_FENCE_DIR_NONE) | BIT(MSM_VIDC_FENCE_DIR_TX) |
|
||||
BIT(MSM_VIDC_FENCE_DIR_RX),
|
||||
MSM_VIDC_FENCE_DIR_NONE,
|
||||
0,
|
||||
HFI_PROP_FENCE_DIRECTION,
|
||||
CAP_FLAG_MENU | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{FENCE_ERROR_DATA_CORRUPT, DEC, CODECS_ALL,
|
||||
0, 1, 1, 0,
|
||||
0,
|
||||
HFI_PROP_FENCE_ERROR_DATA_CORRUPT},
|
||||
|
||||
{TS_REORDER, DEC, H264|HEVC,
|
||||
0, 1, 1, 0,
|
||||
V4L2_CID_MPEG_VIDC_TS_REORDER},
|
||||
@@ -2060,15 +2101,41 @@ static struct msm_platform_inst_cap_dependency instance_cap_dependency_data_pine
|
||||
msm_vidc_set_u32},
|
||||
|
||||
{META_OUTBUF_FENCE, DEC, H264|HEVC|AV1,
|
||||
{LOWLATENCY_MODE, SLICE_DECODE},
|
||||
{LOWLATENCY_MODE, SLICE_DECODE,
|
||||
OUTBUF_FENCE_TYPE, OUTBUF_FENCE_DIRECTION},
|
||||
msm_vidc_adjust_dec_outbuf_fence,
|
||||
NULL},
|
||||
|
||||
{META_OUTBUF_FENCE, DEC, VP9,
|
||||
{LOWLATENCY_MODE},
|
||||
{LOWLATENCY_MODE, OUTBUF_FENCE_TYPE, OUTBUF_FENCE_DIRECTION},
|
||||
msm_vidc_adjust_dec_outbuf_fence,
|
||||
NULL},
|
||||
|
||||
{INBUF_FENCE_TYPE, DEC, CODECS_ALL,
|
||||
{0},
|
||||
NULL,
|
||||
NULL},
|
||||
|
||||
{OUTBUF_FENCE_TYPE, DEC, CODECS_ALL,
|
||||
{0},
|
||||
msm_vidc_adjust_dec_outbuf_fence_type,
|
||||
msm_vidc_set_outbuf_fence_type},
|
||||
|
||||
{INBUF_FENCE_DIRECTION, DEC, CODECS_ALL,
|
||||
{0},
|
||||
NULL,
|
||||
NULL},
|
||||
|
||||
{OUTBUF_FENCE_DIRECTION, DEC, CODECS_ALL,
|
||||
{0},
|
||||
msm_vidc_adjust_dec_outbuf_fence_direction,
|
||||
msm_vidc_set_outbuf_fence_direction},
|
||||
|
||||
{FENCE_ERROR_DATA_CORRUPT, DEC, CODECS_ALL,
|
||||
{0},
|
||||
NULL,
|
||||
msm_vidc_set_u32},
|
||||
|
||||
{HFLIP, ENC, CODECS_ALL,
|
||||
{0},
|
||||
NULL,
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador