Re: [PATCH v7] [media] vimc: Virtual Media Controller core, capture and sensor

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

 



On 29/03/17 00:35, Nicolas Dufresne wrote:
> 
> 
> Le 28 mars 2017 4:38 PM, "Sakari Ailus" <sakari.ailus@xxxxxx <mailto:sakari.ailus@xxxxxx>> a écrit :
> 
>     Hi Mauro,
> 
>     On Tue, Mar 28, 2017 at 08:38:26AM -0300, Mauro Carvalho Chehab wrote:
>     > Em Tue, 28 Mar 2017 12:00:36 +0200
>     > Hans Verkuil <hverkuil@xxxxxxxxx <mailto:hverkuil@xxxxxxxxx>> escreveu:
>     >
>     > > On 27/03/17 20:09, Mauro Carvalho Chehab wrote:
>     > > > Em Mon, 27 Mar 2017 12:19:51 -0300
>     > > > Helen Koike <helen.koike@xxxxxxxxxxxxxxx <mailto:helen.koike@xxxxxxxxxxxxxxx>> escreveu:
>     > > >
>     > > >> Hi Sakari,
>     > > >>
>     > > >> On 2017-03-26 10:31 AM, Sakari Ailus wrote:
>     > > >>> Hi Helen,
>     > > >>>
>     > > >>> ...
>     > > >>>> +static int vimc_cap_enum_input(struct file *file, void *priv,
>     > > >>>> +                             struct v4l2_input *i)
>     > > >>>> +{
>     > > >>>> +      /* We only have one input */
>     > > >>>> +      if (i->index > 0)
>     > > >>>> +              return -EINVAL;
>     > > >>>> +
>     > > >>>> +      i->type = V4L2_INPUT_TYPE_CAMERA;
>     > > >>>> +      strlcpy(i->name, "VIMC capture", sizeof(i->name));
>     > > >>>> +
>     > > >>>> +      return 0;
>     > > >>>> +}
>     > > >>>> +
>     > > >>>> +static int vimc_cap_g_input(struct file *file, void *priv, unsigned int *i)
>     > > >>>> +{
>     > > >>>> +      /* We only have one input */
>     > > >>>> +      *i = 0;
>     > > >>>> +      return 0;
>     > > >>>> +}
>     > > >>>> +
>     > > >>>> +static int vimc_cap_s_input(struct file *file, void *priv, unsigned int i)
>     > > >>>> +{
>     > > >>>> +      /* We only have one input */
>     > > >>>> +      return i ? -EINVAL : 0;
>     > > >>>> +}
>     > > >>>
>     > > >>> You can drop the input IOCTLs altogether here. If you had e.g. a TV
>     > > >>> tuner, it'd be the TV tuner driver's responsibility to implement them.
>     > > >>>
>     > > >>
>     > > >> input IOCTLs seems to be mandatory from v4l2-compliance when capability
>     > > >> V4L2_CAP_VIDEO_CAPTURE is set (which is the case):
>     > > >>
>     > > >> https://git.linuxtv.org/v4l-utils.git/tree/utils/v4l2-compliance/v4l2-test-input-output.cpp#n418
>     <https://git.linuxtv.org/v4l-utils.git/tree/utils/v4l2-compliance/v4l2-test-input-output.cpp#n418>
>     > > >>
>     > > >> https://git.linuxtv.org/v4l-utils.git/tree/utils/v4l2-compliance/v4l2-compliance.cpp#n989 <https://git.linuxtv.org/v4l-utils.git/tree/utils/v4l2-compliance/v4l2-compliance.cpp#n989>
>     > > >
>     > > > The V4L2 spec doesn't actually define what's mandatory and what's
>     > > > optional. The idea that was agreed on one of the media summits
>     > > > were to define a set of profiles for different device types,
>     > > > matching the features required by existing applications to work,
>     > > > but this was never materialized.
>     > > >
>     > > > So, my understanding is that any driver can implement
>     > > > any V4L2 ioctl.
>     > > >
>     > > > Yet, some applications require enum/get/set inputs, or otherwise
>     > > > they wouldn't work. It is too late to change this behavior.
>     > > > So, either the driver or the core should implement those
>     > > > ioctls, in order to avoid breaking backward-compatibility.
>     > >
>     > > The closest we have to determining which ioctls are mandatory or not is
>     > > v4l2-compliance.
>     >
>     > Yes, but we should explicitly document what's mandatory at the V4L2
>     > API spec and mention the v4l2-compliance tool there.
>     >
>     > > That said, v4l2-compliance is actually a bit more strict
>     > > in some cases than the spec since some ioctls are optional in the spec, but
>     > > required in v4l2-compliance for the simple reason that there is no reason
>     > > for drivers NOT to implement those ioctls.
>     > >
>     > > However, the v4l2-compliance test was never written for MC devices. It turns
>     > > out that it works reasonably well as long as a working pipeline is configured
>     > > first, but these input ioctls are a bit iffy.
>     >
>     > The way I see, v4l2-compliance V4L2 API check[1] should not be modified to
>     > explicitly support devices with MC and/or subdev API.
> 
>     The V4L2 API documentation states that
> 
>             Video inputs and outputs are physical connectors of a device. ...
>             Drivers must implement all the input ioctls when the device has one
>             or more inputs, all the output ioctls when the device has one or
>             more outputs.
> 
>     "Inputs" and "outputs", as the spec defines them, mean physical connectors
>     to the device.
> 
>     Does e.g. a camera have a physical connector? I don't think one could
>     imagine it does, meaning also there is no need to implement these IOCTLs.
> 
> 
> In the case of MC drivers, could that be used to allow selecting the sensor ? It's not physical connector, but it's physically different input. 

For MC drivers each video node has just a single input or output: it cannot be used
to switch between inputs, since that depends on the configured video pipeline.

It's just there to satisfy existing applications. I also think it can be useful
to provide quick information about the device where possible, e.g. "scalar input",
"bayer capture", etc.

Regards,

	Hans



[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