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 Tue, Mar 22, 2016 at 10:36:05AM +0100, Jacek Anaszewski wrote:
> Hi Sakari,
> 
> On 03/21/2016 01:07 AM, Sakari Ailus wrote:
> >Hi Jacek,
> >
> >On Thu, Feb 18, 2016 at 02:14:40PM +0100, Jacek Anaszewski wrote:
> >>Hi Sakari,
> >>
> >>On 02/18/2016 01:09 PM, Sakari Ailus wrote:
> >>>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?
> >>
> >>Shouldn't we support non-extended controls for backward compatibility
> >>reasons? I am not aware of the policy in this matter.
> >
> >To put it bluntly, supporting the non-extended controls in this use is waste
> >of time IMHO.
> 
> OK, I'll drop the non-ext controls related API then.
> 
> >>>>>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
> >>
> >>Exemplary config settings for this case:
> >>
> >>v4l2-ctrl-redir 0x0098091f -> "sensor0"
> >>v4l2-ctrl-redir 0x0098091f -> "sensor1"
> >>
> >>In media_ioctl_ctrl the v4l2_subdev_get_pipeline_entity_by_cid(media,
> >>ctrl.id) is called which walks through the pipeline and checks if there
> >>has been a v4l2 control redirection defined for given entity.
> >
> >That's still based on media device, not video device. Two video devices may
> >be part of different pipelines, and a different sensor as well.
> >
> >Redirecting the controls should be based on a video node, not media device.
> 
> Why do you consider it as based on a media device? I'd rather say that
> it is based on media entity, so indirectly based on media device.
> Is it what you have on mind?

The first argument of the functions in the patch is a pointer ot the media
device, not the media entity.

> 
> >>
> >>If no redirection is defined then the control is set on the first
> >>entity in the pipeline that supports it. Effectively, for this
> >>arrangement no redirection would be required if the control
> >>is to be set on sensors. It would be required if we wanted
> >>to bind the control to the videoN entity. Now I am wondering
> >>if I should change the entry name to v4l2-ctrl-binding, or maybe
> >>someone has better idea?
> >>
> >>BTW, are there some unique identifiers added to the entity names if
> >>more than one entity of a name is to be registered? E.g. what would
> >>happen if I had two S5C73M3 sensors in a media device? I assumed that
> >>entity names are unique.
> >
> >Yes. Currently we've got away with the problem by adding the i2c address of
> >i2c devices to the entity name. The proper solution (there was a lengthy
> >discussion on it ~ a year ago, too late to try to find out exactly when)
> >would be to provide all the available information on the entity to the user
> >space using the property API (which we don't have yet). The entity name
> >remains unique in most situations but it's not necessarily stable.
> >
> 
> I assume that the fact that they're not stable mean that we cannot rely
> on the entity name. Using sub-dev names and video device names seems
> reasonable then.

They're even less so, unfortunately; the device nodes depend e.g. on the
initialisation order an other devices. Please use the entity names, they're
the best option for now.

I wish I'll have some time to proceed the work on the property API. So many
things to do, but so little time. :-I

-- 
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