media: imx: Validate frame intervals before setting
Steve Longerbeam
maintainerPATCH 1/1 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 <[email protected]>
--- drivers/staging/media/imx/imx-ic-prp.c | 9 +++++++-- drivers/staging/media/imx/imx-ic-prpencvf.c | 9 +++++++-- drivers/staging/media/imx/imx-media-csi.c | 5 ++++- drivers/staging/media/imx/imx-media-vdic.c | 5 ++++- 4 files changed, 22 insertions(+), 6 deletions(-)
drivers/staging/media/imx/imx-ic-prp.c +7 -2
@@ -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 ;
drivers/staging/media/imx/imx-ic-prpencvf.c +7 -2
@@ -1215,9 +1215,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 ;
drivers/staging/media/imx/imx-media-csi.c +4 -1
@@ -905,7 +905,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;
drivers/staging/media/imx/imx-media-vdic.c +4 -1
@@ -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)
Signature · 1 line
2.17.1