Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1660082

[PATCH v8 31/34] media: imx: capture: add frame sizes/interval enumeration

From Steve Longerbeam <slongerbeam@gmail.com>
Newsgroups linux.kernel
Subject [PATCH v8 31/34] media: imx: capture: add frame sizes/interval enumeration
Date 2017-06-07 20:40 +0200
Message-ID <tPO28-1PO-55@gated-at.bofh.it> (permalink)
References <tPO26-1PO-7@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


From: Russell King <rmk+kernel@armlinux.org.uk>

Add support for enumerating frame sizes and frame intervals from the
first subdev via the V4L2 interfaces.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Steve Longerbeam <steve_longerbeam@mentor.com>
---
 drivers/staging/media/imx/imx-media-capture.c | 73 +++++++++++++++++++++++++++
 1 file changed, 73 insertions(+)

diff --git a/drivers/staging/media/imx/imx-media-capture.c b/drivers/staging/media/imx/imx-media-capture.c
index f07ed9a..ddab4c2 100644
--- a/drivers/staging/media/imx/imx-media-capture.c
+++ b/drivers/staging/media/imx/imx-media-capture.c
@@ -81,6 +81,76 @@ static int vidioc_querycap(struct file *file, void *fh,
 	return 0;
 }
 
+static int capture_enum_framesizes(struct file *file, void *fh,
+				   struct v4l2_frmsizeenum *fsize)
+{
+	struct capture_priv *priv = video_drvdata(file);
+	const struct imx_media_pixfmt *cc;
+	struct v4l2_subdev_frame_size_enum fse = {
+		.index = fsize->index,
+		.pad = priv->src_sd_pad,
+		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
+	};
+	int ret;
+
+	cc = imx_media_find_format(fsize->pixel_format, CS_SEL_ANY, true);
+	if (!cc)
+		return -EINVAL;
+
+	fse.code = cc->codes[0];
+
+	ret = v4l2_subdev_call(priv->src_sd, pad, enum_frame_size, NULL, &fse);
+	if (ret)
+		return ret;
+
+	if (fse.min_width == fse.max_width &&
+	    fse.min_height == fse.max_height) {
+		fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE;
+		fsize->discrete.width = fse.min_width;
+		fsize->discrete.height = fse.min_height;
+	} else {
+		fsize->type = V4L2_FRMSIZE_TYPE_CONTINUOUS;
+		fsize->stepwise.min_width = fse.min_width;
+		fsize->stepwise.max_width = fse.max_width;
+		fsize->stepwise.min_height = fse.min_height;
+		fsize->stepwise.max_height = fse.max_height;
+		fsize->stepwise.step_width = 1;
+		fsize->stepwise.step_height = 1;
+	}
+
+	return 0;
+}
+
+static int capture_enum_frameintervals(struct file *file, void *fh,
+				       struct v4l2_frmivalenum *fival)
+{
+	struct capture_priv *priv = video_drvdata(file);
+	const struct imx_media_pixfmt *cc;
+	struct v4l2_subdev_frame_interval_enum fie = {
+		.index = fival->index,
+		.pad = priv->src_sd_pad,
+		.width = fival->width,
+		.height = fival->height,
+		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
+	};
+	int ret;
+
+	cc = imx_media_find_format(fival->pixel_format, CS_SEL_ANY, true);
+	if (!cc)
+		return -EINVAL;
+
+	fie.code = cc->codes[0];
+
+	ret = v4l2_subdev_call(priv->src_sd, pad, enum_frame_interval, NULL, &fie);
+	if (ret)
+		return ret;
+
+	fival->type = V4L2_FRMIVAL_TYPE_DISCRETE;
+	fival->discrete = fie.interval;
+
+	return 0;
+}
+
 static int capture_enum_fmt_vid_cap(struct file *file, void *fh,
 				    struct v4l2_fmtdesc *f)
 {
@@ -269,6 +339,9 @@ static int capture_s_parm(struct file *file, void *fh,
 static const struct v4l2_ioctl_ops capture_ioctl_ops = {
 	.vidioc_querycap	= vidioc_querycap,
 
+	.vidioc_enum_framesizes = capture_enum_framesizes,
+	.vidioc_enum_frameintervals = capture_enum_frameintervals,
+
 	.vidioc_enum_fmt_vid_cap        = capture_enum_fmt_vid_cap,
 	.vidioc_g_fmt_vid_cap           = capture_g_fmt_vid_cap,
 	.vidioc_try_fmt_vid_cap         = capture_try_fmt_vid_cap,
-- 
2.7.4

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v8 00/34] i.MX Media Driver Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:40 +0200
  [PATCH v8 28/34] media: imx: csi: add frame skipping support Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:40 +0200
  [PATCH v8 11/34] ARM: dts: imx6-sabreauto: create i2cmux for i2c3 Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:40 +0200
  [PATCH v8 26/34] media: imx: csi: add support for bayer formats Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:40 +0200
  [PATCH v8 31/34] media: imx: capture: add frame sizes/interval enumeration Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:40 +0200
  [PATCH v8 25/34] media: imx: Add MIPI CSI-2 Receiver subdev driver Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:40 +0200
  [PATCH v8 32/34] media: imx: set and propagate default field, colorimetry Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:40 +0200
  [PATCH v8 33/34] media: imx: Drop warning upon multiple S_STREAM disable calls Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:40 +0200
  [PATCH v8 30/34] media: imx: csi: add frame size/interval enumeration Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:40 +0200
  [PATCH v8 16/34] platform: add video-multiplexer subdevice driver Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:40 +0200
  [PATCH v8 09/34] ARM: dts: imx6-sabrelite: add OV5642 and OV5640 camera sensors Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:50 +0200
  [PATCH v8 18/34] media: Add userspace header file for i.MX Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:50 +0200
  [PATCH v8 07/34] ARM: dts: imx6qdl: add capture-subsystem device Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:50 +0200
  [PATCH v8 15/34] add mux and video interface bridge entity functions Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:50 +0200
  [PATCH v8 23/34] media: imx: Add VDIC subdev driver Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:50 +0200
  [PATCH v8 04/34] ARM: dts: imx6qdl: add multiplexer controls Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:50 +0200
  [PATCH v8 21/34] media: imx: Add Capture Device Interface Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:50 +0200
  [PATCH v8 13/34] ARM: dts: imx6-sabreauto: add pinctrl for gpt input capture Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:50 +0200
  [PATCH v8 06/34] ARM: dts: imx6qdl: Add video multiplexers, mipi_csi, and their connections Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:50 +0200
  [PATCH v8 12/34] ARM: dts: imx6-sabreauto: add reset-gpios property for max7310_b Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:50 +0200
  [PATCH v8 03/34] [media] dt/bindings: Add bindings for OV5640 Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:50 +0200
  [PATCH v8 01/34] dt-bindings: Add bindings for video-multiplexer device Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 20:50 +0200
  Re: [PATCH v8 00/34] i.MX Media Driver Hans Verkuil <hverkuil@xs4all.nl> - 2017-06-07 21:10 +0200
    Re: [PATCH v8 00/34] i.MX Media Driver Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-07 21:10 +0200
    Re: [PATCH v8 00/34] i.MX Media Driver Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-10 01:20 +0200
    Re: [PATCH v8 00/34] i.MX Media Driver Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-10 01:20 +0200
      Re: [PATCH v8 00/34] i.MX Media Driver Hans Verkuil <hverkuil@xs4all.nl> - 2017-06-10 01:30 +0200
        Re: [PATCH v8 00/34] i.MX Media Driver Pavel Machek <pavel@ucw.cz> - 2017-06-10 09:40 +0200
        Re: [PATCH v8 00/34] i.MX Media Driver Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com> - 2017-06-11 22:10 +0200
          Re: [PATCH v8 00/34] i.MX Media Driver Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-12 20:20 +0200
  Re: [PATCH v8 19/34] media: Add i.MX media core driver Philipp Zabel <p.zabel@pengutronix.de> - 2017-06-09 15:20 +0200
    Re: [PATCH v8 19/34] media: Add i.MX media core driver Steve Longerbeam <slongerbeam@gmail.com> - 2017-06-10 01:10 +0200
  Re: [PATCH v8 17/34] [media] add Omnivision OV5640 sensor driver Sakari Ailus <sakari.ailus@iki.fi> - 2017-06-11 00:00 +0200

csiph-web