浏览代码

video: driver: add s_fmt allow checks inside state handler

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

Change-Id: I92af08e4cd5d49f763c5a2d381af86eb10a4c061
Signed-off-by: Govindaraj Rajagopal <[email protected]>
Govindaraj Rajagopal 2 年之前
父节点
当前提交
373880e521
共有 2 个文件被更改,包括 15 次插入3 次删除
  1. 0 3
      driver/vidc/src/msm_vidc.c
  2. 15 0
      driver/vidc/src/msm_vidc_state.c

+ 0 - 3
driver/vidc/src/msm_vidc.c

@@ -253,9 +253,6 @@ int msm_vidc_s_fmt(void *instance, struct v4l2_format *f)
 		return -EINVAL;
 	}
 
-	if (!msm_vidc_allow_s_fmt(inst, f->type))
-		return -EBUSY;
-
 	if (inst->domain == MSM_VIDC_DECODER)
 		rc = msm_vdec_s_fmt(inst, f);
 	if (inst->domain == MSM_VIDC_ENCODER)

+ 15 - 0
driver/vidc/src/msm_vidc_state.c

@@ -648,6 +648,7 @@ static int msm_vidc_open_state(struct msm_vidc_inst *inst,
 	{
 		struct v4l2_format *f = (struct v4l2_format *)data;
 
+		/* allow s_fmt request in open state */
 		rc = msm_vidc_s_fmt(inst, f);
 		if (rc)
 			return rc;
@@ -771,6 +772,13 @@ static int msm_vidc_input_streaming_state(struct msm_vidc_inst *inst,
 	{
 		struct v4l2_format *f = (struct v4l2_format *)data;
 
+		/* disallow */
+		if (f->type == INPUT_MPLANE || f->type == INPUT_META_PLANE) {
+			i_vpr_e(inst, "%s: (%s) not allowed for (%s) port\n",
+				__func__, event_name(event), v4l2_type_name(f->type));
+			return -EBUSY;
+		}
+
 		rc = msm_vidc_s_fmt(inst, f);
 		if (rc)
 			return rc;
@@ -921,6 +929,13 @@ static int msm_vidc_output_streaming_state(struct msm_vidc_inst *inst,
 	{
 		struct v4l2_format *f = (struct v4l2_format *)data;
 
+		/* disallow */
+		if (f->type == OUTPUT_MPLANE || f->type == OUTPUT_META_PLANE) {
+			i_vpr_e(inst, "%s: (%s) not allowed for (%s) port\n",
+				__func__, event_name(event), v4l2_type_name(f->type));
+			return -EBUSY;
+		}
+
 		rc = msm_vidc_s_fmt(inst, f);
 		if (rc)
 			return rc;