diff --git a/driver/vidc/inc/msm_vidc_driver.h b/driver/vidc/inc/msm_vidc_driver.h index 827cb803e7..991b76e6d9 100644 --- a/driver/vidc/inc/msm_vidc_driver.h +++ b/driver/vidc/inc/msm_vidc_driver.h @@ -494,7 +494,6 @@ int msm_vidc_update_property_cap(struct msm_vidc_inst *inst, u32 hfi_id, bool allow); enum msm_vidc_allow msm_vidc_allow_stop(struct msm_vidc_inst *inst); bool msm_vidc_allow_start(struct msm_vidc_inst *inst); -bool msm_vidc_allow_streamon(struct msm_vidc_inst *inst, u32 type); enum msm_vidc_allow msm_vidc_allow_input_psc(struct msm_vidc_inst *inst); bool msm_vidc_allow_drain_last_flag(struct msm_vidc_inst *inst); bool msm_vidc_allow_psc_last_flag(struct msm_vidc_inst *inst); diff --git a/driver/vidc/src/msm_vidc_driver.c b/driver/vidc/src/msm_vidc_driver.c index 5046bcdc64..a20595713e 100644 --- a/driver/vidc/src/msm_vidc_driver.c +++ b/driver/vidc/src/msm_vidc_driver.c @@ -1167,27 +1167,6 @@ bool msm_vidc_allow_start(struct msm_vidc_inst *inst) return allow; } -bool msm_vidc_allow_streamon(struct msm_vidc_inst *inst, u32 type) -{ - if (!inst) { - d_vpr_e("%s: invalid params\n", __func__); - return false; - } - if (type == INPUT_MPLANE || type == INPUT_META_PLANE) { - if (is_state(inst, MSM_VIDC_OPEN) || - is_state(inst, MSM_VIDC_OUTPUT_STREAMING)) - return true; - } else if (type == OUTPUT_MPLANE || type == OUTPUT_META_PLANE) { - if (is_state(inst, MSM_VIDC_OPEN) || - is_state(inst, MSM_VIDC_INPUT_STREAMING)) - return true; - } - - i_vpr_e(inst, "%s: type %d not allowed in state %s\n", - __func__, type, state_name(inst->state)); - return false; -} - enum msm_vidc_allow msm_vidc_allow_input_psc(struct msm_vidc_inst *inst) { enum msm_vidc_allow allow = MSM_VIDC_ALLOW; diff --git a/driver/vidc/src/msm_vidc_state.c b/driver/vidc/src/msm_vidc_state.c index 2f084e7dd9..097f73358b 100644 --- a/driver/vidc/src/msm_vidc_state.c +++ b/driver/vidc/src/msm_vidc_state.c @@ -678,6 +678,7 @@ static int msm_vidc_open_state(struct msm_vidc_inst *inst, { struct vb2_queue *q = (struct vb2_queue *)data; + /* allow streamon request in open state */ rc = msm_vidc_start_streaming(inst, q); if (rc) return rc; @@ -830,6 +831,13 @@ static int msm_vidc_input_streaming_state(struct msm_vidc_inst *inst, { struct vb2_queue *q = (struct vb2_queue *)data; + /* disallow */ + if (q->type == INPUT_MPLANE || q->type == INPUT_META_PLANE) { + i_vpr_e(inst, "%s: (%s) not allowed for (%s) type\n", + __func__, event_name(event), v4l2_type_name(q->type)); + return -EBUSY; + } + rc = msm_vidc_start_streaming(inst, q); if (rc) return rc; @@ -994,6 +1002,13 @@ static int msm_vidc_output_streaming_state(struct msm_vidc_inst *inst, { struct vb2_queue *q = (struct vb2_queue *)data; + /* disallow */ + if (q->type == OUTPUT_MPLANE || q->type == OUTPUT_META_PLANE) { + i_vpr_e(inst, "%s: (%s) not allowed for (%s) type\n", + __func__, event_name(event), v4l2_type_name(q->type)); + return -EBUSY; + } + rc = msm_vidc_start_streaming(inst, q); if (rc) return rc; diff --git a/driver/vidc/src/msm_vidc_vb2.c b/driver/vidc/src/msm_vidc_vb2.c index 26ce6916a0..fb853ac11c 100644 --- a/driver/vidc/src/msm_vidc_vb2.c +++ b/driver/vidc/src/msm_vidc_vb2.c @@ -415,9 +415,6 @@ int msm_vidc_start_streaming(struct msm_vidc_inst *inst, struct vb2_queue *q) return -EINVAL; } - if (!msm_vidc_allow_streamon(inst, q->type)) - return -EBUSY; - if (q->type == INPUT_META_PLANE || q->type == OUTPUT_META_PLANE) { i_vpr_h(inst, "%s: nothing to start on %s\n", __func__, v4l2_type_name(q->type));