Re: [PATCH 13/15] mediactl: Add media device ioctl API

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Jacek,

On Mon, Feb 15, 2016 at 02:06:06PM +0100, Jacek Anaszewski wrote:
> Hi Sakari,
> 
> Thanks for the review.
> 
> On 02/15/2016 01:41 PM, Sakari Ailus wrote:
> >Hi Jacek,
> >
> >Jacek Anaszewski wrote:
> >>Ioctls executed on complex media devices need special handling.
> >>For instance some ioctls need to be targeted for specific sub-devices,
> >>depending on the media device configuration. The APIs being introduced
> >>address such requirements.
> >>
> >>Signed-off-by: Jacek Anaszewski <j.anaszewski@xxxxxxxxxxx>
> >>Acked-by: Kyungmin Park <kyungmin.park@xxxxxxxxxxx>
> >>---
> >>  utils/media-ctl/Makefile.am          |    2 +-
> >>  utils/media-ctl/libv4l2media_ioctl.c |  404 ++++++++++++++++++++++++++++++++++
> >>  utils/media-ctl/libv4l2media_ioctl.h |   48 ++++
> >>  3 files changed, 453 insertions(+), 1 deletion(-)
> >>  create mode 100644 utils/media-ctl/libv4l2media_ioctl.c
> >>  create mode 100644 utils/media-ctl/libv4l2media_ioctl.h
> >>
> >>diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
> >>index 3e883e0..7f18624 100644
> >>--- a/utils/media-ctl/Makefile.am
> >>+++ b/utils/media-ctl/Makefile.am
> >>@@ -1,6 +1,6 @@
> >>  noinst_LTLIBRARIES = libmediactl.la libv4l2subdev.la libmediatext.la
> >>
> >>-libmediactl_la_SOURCES = libmediactl.c mediactl-priv.h
> >>+libmediactl_la_SOURCES = libmediactl.c mediactl-priv.h libv4l2media_ioctl.c libv4l2media_ioctl.h
> >>  libmediactl_la_CFLAGS = -static $(LIBUDEV_CFLAGS)
> >>  libmediactl_la_LDFLAGS = -static $(LIBUDEV_LIBS)
> >>
> >>diff --git a/utils/media-ctl/libv4l2media_ioctl.c b/utils/media-ctl/libv4l2media_ioctl.c
> >>new file mode 100644
> >>index 0000000..b186121
> >>--- /dev/null
> >>+++ b/utils/media-ctl/libv4l2media_ioctl.c
> >>@@ -0,0 +1,404 @@
> >>+/*
> >>+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
> >>+ *              http://www.samsung.com
> >>+ *
> >>+ * Author: Jacek Anaszewski <j.anaszewski@xxxxxxxxxxx>
> >>+ *
> >>+ * This program is free software; you can redistribute it and/or modify
> >>+ * it under the terms of the GNU Lesser General Public License as published by
> >>+ * the Free Software Foundation; either version 2.1 of the License, or
> >>+ * (at your option) any later version.
> >>+ *
> >>+ * This program is distributed in the hope that it will be useful,
> >>+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
> >>+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> >>+ * Lesser General Public License for more details.
> >>+ */
> >>+
> >>+#include <errno.h>
> >>+#include <stdlib.h>
> >>+#include <sys/syscall.h>
> >>+#include <unistd.h>
> >>+
> >>+#include <linux/videodev2.h>
> >>+
> >>+#include "libv4l2media_ioctl.h"
> >>+#include "mediactl-priv.h"
> >>+#include "mediactl.h"
> >>+#include "v4l2subdev.h"
> >>+
> >>+#define VIDIOC_CTRL(type)					\
> >>+	((type) == VIDIOC_S_CTRL ? "VIDIOC_S_CTRL" :		\
> >>+				   "VIDIOC_G_CTRL")
> >>+
> >>+#define VIDIOC_EXT_CTRL(type)					\
> >>+	((type) == VIDIOC_S_EXT_CTRLS ? 			\
> >>+		"VIDIOC_S_EXT_CTRLS"	:			\
> >>+		 ((type) == VIDIOC_G_EXT_CTRLS ? 		\
> >>+				    "VIDIOC_G_EXT_CTRLS" :	\
> >>+				    "VIDIOC_TRY_EXT_CTRLS"))
> >>+
> >>+#define SYS_IOCTL(fd, cmd, arg) \
> >>+	syscall(SYS_ioctl, (int)(fd), (unsigned long)(cmd), (void *)(arg))
> >>+
> >>+
> >>+int media_ioctl_ctrl(struct media_device *media, int request,
> >
> >unsigned int request
> 
> OK.
> 
> >
> >>+		     struct v4l2_control *arg)
> >
> >I wonder if it'd make sense to always use v4l2_ext_control instead. You
> >can't access 64-bit integer controls with VIDIOC_S_CTRL for instance.
> 
> This function is meant to handle VIDIOC_S_CTRL/VIDIOC_G_CTRL ioctls.
> For ext ctrls there is media_ioctl_ext_ctrl().

Is there any reason not to use extended control always?

In other words, do we have a driver that does support Media controller but
does not support extended controls?

> >As this is a user space library, I'd probably add a function to handle
> >S/G/TRY control each.
> 
> There is media_ioctl_ext_ctrl() that handles VIDIOC_S_EXT_CTRLS,
> VIDIOC_G_EXT_CTRLS and VIDIOC_TRY_EXT_CTRLS.
> 
> >Have you considered binding the control to a video node rather than a
> >media device? We have many sensors on current media devices already, and
> >e.g. exposure time control can be found in multiple sub-devices.
> 
> Doesn't v4l2-ctrl-redir config entry address that?

How does it work if you have, say, two video nodes where you can capture
images from a different sensor? I.e. your media graph could look like this:

	sensor0 -> CSI-2 0 -> video0

	sensor1 -> CSI-2 1 -> video1

-- 
Kind regards,

Sakari Ailus
e-mail: sakari.ailus@xxxxxx	XMPP: sailus@xxxxxxxxxxxxxx
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux