mirror of https://gitee.com/openkylin/linux.git
media: imx: Validate frame intervals before setting
In the .s_frame_interval() subdev op, don't accept or set a frame interval with a zero numerator or denominator. This fixes a v4l2-compliance failure: fail: v4l2-test-formats.cpp(1146): cap->timeperframe.numerator == 0 || cap->timeperframe.denominator == 0 test VIDIOC_G/S_PARM: FAIL Signed-off-by: Steve Longerbeam <slongerbeam@gmail.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:
parent
22f05d646d
commit
9bcb830bfc
|
@ -422,9 +422,14 @@ static int prp_s_frame_interval(struct v4l2_subdev *sd,
|
|||
if (fi->pad >= PRP_NUM_PADS)
|
||||
return -EINVAL;
|
||||
|
||||
/* No limits on frame interval */
|
||||
mutex_lock(&priv->lock);
|
||||
priv->frame_interval = fi->interval;
|
||||
|
||||
/* No limits on valid frame intervals */
|
||||
if (fi->interval.numerator == 0 || fi->interval.denominator == 0)
|
||||
fi->interval = priv->frame_interval;
|
||||
else
|
||||
priv->frame_interval = fi->interval;
|
||||
|
||||
mutex_unlock(&priv->lock);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -1222,9 +1222,14 @@ static int prp_s_frame_interval(struct v4l2_subdev *sd,
|
|||
if (fi->pad >= PRPENCVF_NUM_PADS)
|
||||
return -EINVAL;
|
||||
|
||||
/* No limits on frame interval */
|
||||
mutex_lock(&priv->lock);
|
||||
priv->frame_interval = fi->interval;
|
||||
|
||||
/* No limits on valid frame intervals */
|
||||
if (fi->interval.numerator == 0 || fi->interval.denominator == 0)
|
||||
fi->interval = priv->frame_interval;
|
||||
else
|
||||
priv->frame_interval = fi->interval;
|
||||
|
||||
mutex_unlock(&priv->lock);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -926,7 +926,10 @@ static int csi_s_frame_interval(struct v4l2_subdev *sd,
|
|||
|
||||
switch (fi->pad) {
|
||||
case CSI_SINK_PAD:
|
||||
/* No limits on input frame interval */
|
||||
/* No limits on valid input frame intervals */
|
||||
if (fi->interval.numerator == 0 ||
|
||||
fi->interval.denominator == 0)
|
||||
fi->interval = *input_fi;
|
||||
/* Reset output intervals and frame skipping ratio to 1:1 */
|
||||
priv->frame_interval[CSI_SRC_PAD_IDMAC] = fi->interval;
|
||||
priv->frame_interval[CSI_SRC_PAD_DIRECT] = fi->interval;
|
||||
|
|
|
@ -818,7 +818,10 @@ static int vdic_s_frame_interval(struct v4l2_subdev *sd,
|
|||
switch (fi->pad) {
|
||||
case VDIC_SINK_PAD_DIRECT:
|
||||
case VDIC_SINK_PAD_IDMAC:
|
||||
/* No limits on input frame interval */
|
||||
/* No limits on valid input frame intervals */
|
||||
if (fi->interval.numerator == 0 ||
|
||||
fi->interval.denominator == 0)
|
||||
fi->interval = priv->frame_interval[fi->pad];
|
||||
/* Reset output interval */
|
||||
*output_fi = fi->interval;
|
||||
if (priv->csi_direct)
|
||||
|
|
Loading…
Reference in New Issue