Эх сурвалжийг харах

video: driver: update required fields of stream parm struct

- Set capability for capture and output plane.
- Update denominator and numerator of timeperframe structure
  to default values if set with zero.

Fixes: v4l2-compliance: testParm(VIDIOC_S/G_PARM) for encoder.

Change-Id: Ib9d92f07fc526a11253ac5d1adc1b639eef3632e
Signed-off-by: Dikshita Agarwal <[email protected]>
Dikshita Agarwal 4 жил өмнө
parent
commit
79ac405a32

+ 10 - 5
driver/vidc/src/msm_venc.c

@@ -1535,18 +1535,22 @@ int msm_venc_s_param(struct msm_vidc_inst *inst,
 		timeperframe = &s_parm->parm.output.timeperframe;
 		max_rate = capability->cap[OPERATING_RATE].max >> 16;
 		default_rate = capability->cap[OPERATING_RATE].value >> 16;
+		s_parm->parm.output.capability = V4L2_CAP_TIMEPERFRAME;
 	} else {
 		timeperframe = &s_parm->parm.capture.timeperframe;
 		is_frame_rate = true;
 		max_rate = capability->cap[FRAME_RATE].max >> 16;
 		default_rate = capability->cap[FRAME_RATE].value >> 16;
+		s_parm->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
 	}
 
 	if (!timeperframe->denominator || !timeperframe->numerator) {
-		i_vpr_e(inst, "%s: type %s, invalid rate\n", __func__,
-			v4l2_type_name(s_parm->type));
-		input_rate = default_rate;
-		goto set_default;
+		i_vpr_e(inst, "%s: type %s, invalid rate, update with default\n",
+			 __func__, v4l2_type_name(s_parm->type));
+		if (!timeperframe->numerator)
+			timeperframe->numerator = 1;
+		if (!timeperframe->denominator)
+			timeperframe->denominator = default_rate;
 	}
 
 	us_per_frame = timeperframe->numerator * (u64)USEC_PER_SEC;
@@ -1561,7 +1565,6 @@ int msm_venc_s_param(struct msm_vidc_inst *inst,
 	input_rate = (u64)USEC_PER_SEC;
 	do_div(input_rate, us_per_frame);
 
-set_default:
 	i_vpr_h(inst, "%s: type %s, %s value %d\n",
 		__func__, v4l2_type_name(s_parm->type),
 		is_frame_rate ? "frame rate" : "operating rate", input_rate);
@@ -1643,11 +1646,13 @@ int msm_venc_g_param(struct msm_vidc_inst *inst,
 		timeperframe->numerator = 1;
 		timeperframe->denominator =
 			capability->cap[OPERATING_RATE].value >> 16;
+		s_parm->parm.output.capability = V4L2_CAP_TIMEPERFRAME;
 	} else {
 		timeperframe = &s_parm->parm.capture.timeperframe;
 		timeperframe->numerator = 1;
 		timeperframe->denominator =
 			capability->cap[FRAME_RATE].value >> 16;
+		s_parm->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
 	}
 
 	i_vpr_h(inst, "%s: type %s, num %u denom %u\n",