Browse Source

video: driver: add streamon allow checks inside state handler

use state specific checks inside state_handler instead of
relying global msm_vidc_allow_streamon function.

Change-Id: I67948831612ebb33cdd12a2e9f8561b6095e9433
Signed-off-by: Govindaraj Rajagopal <[email protected]>
Govindaraj Rajagopal 2 years ago
parent
commit
4afdecc4fd

+ 0 - 1
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);

+ 0 - 21
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;

+ 15 - 0
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;

+ 0 - 3
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));