Re: [PATCH 01/12] videodev2.h, v4l2-ioctl: add IPU3 meta buffer format

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

 



On Tue, Jun 6, 2017 at 7:09 PM, Tomasz Figa <tfiga@xxxxxxxxxxxx> wrote:
> On Tue, Jun 6, 2017 at 5:04 PM, Hans Verkuil <hverkuil@xxxxxxxxx> wrote:
>> On 06/06/17 09:25, Sakari Ailus wrote:
>>> Hi Tomasz,
>>>
>>> On Tue, Jun 06, 2017 at 01:30:41PM +0900, Tomasz Figa wrote:
>>>> Uhm, +Laurent. Sorry for the noise.
>>>>
>>>> On Tue, Jun 6, 2017 at 1:30 PM, Tomasz Figa <tfiga@xxxxxxxxxxxx> wrote:
>>>>> Hi Yong,
>>>>>
>>>>> On Tue, Jun 6, 2017 at 5:39 AM, Yong Zhi <yong.zhi@xxxxxxxxx> wrote:
>>>>>> Add the IPU3 specific processing parameter format
>>>>>> V4L2_META_FMT_IPU3_PARAMS and metadata formats
>>>>>> for 3A and other statistics:
>>>>>
>>>>> Please see my comments inline.
>>>>>
>>>>>>
>>>>>>   V4L2_META_FMT_IPU3_PARAMS
>>>>>>   V4L2_META_FMT_IPU3_STAT_3A
>>>>>>   V4L2_META_FMT_IPU3_STAT_DVS
>>>>>>   V4L2_META_FMT_IPU3_STAT_LACE
>>>>>>
>>>>>> Signed-off-by: Yong Zhi <yong.zhi@xxxxxxxxx>
>>>>>> ---
>>>>>>  drivers/media/v4l2-core/v4l2-ioctl.c | 4 ++++
>>>>>>  include/uapi/linux/videodev2.h       | 6 ++++++
>>>>>>  2 files changed, 10 insertions(+)
>>>>> [snip]
>>>>>> +/* Vendor specific - used for IPU3 camera sub-system */
>>>>>> +#define V4L2_META_FMT_IPU3_PARAMS      v4l2_fourcc('i', 'p', '3', 'p') /* IPU3 params */
>>>>>> +#define V4L2_META_FMT_IPU3_STAT_3A     v4l2_fourcc('i', 'p', '3', 's') /* IPU3 3A statistics */
>>>>>> +#define V4L2_META_FMT_IPU3_STAT_DVS    v4l2_fourcc('i', 'p', '3', 'd') /* IPU3 DVS statistics */
>>>>>> +#define V4L2_META_FMT_IPU3_STAT_LACE   v4l2_fourcc('i', 'p', '3', 'l') /* IPU3 LACE statistics */
>>>>>
>>>>> We had some discussion about this with Laurent and if I remember
>>>>> correctly, the conclusion was that it might make sense to define one
>>>>> FourCC for a vendor specific format, ('v', 'n', 'd', 'r') for example,
>>>>> and then have a V4L2-specific enum within the v4l2_pix_format(_mplane)
>>>>> struct that specifies the exact vendor data type. It seems saner than
>>>>> assigning a new FourCC whenever a new hardware revision comes out,
>>>>> especially given that FourCCs tend to be used outside of the V4L2
>>>>> world as well and being kind of (de facto) standardized (with existing
>>>>> exceptions, unfortunately).
>>
>> I can't remember that discussion
>
> I think that was just a casual chat between Lauren, me and few more guys.
>
>> although I've had other discussions with
>> Laurent related to this on how to handle formats that have many variations
>> on a theme.
>>
>> But speaking for this specific case I see no reason to do something special.
>> There are only four new formats, which seems perfectly reasonable to me.
>>
>> I don't see the advantage of adding another layer of pixel formats. You still
>> need to define something for this, one way or the other. And this way doesn't
>> require API changes.
>>
>>> If we have four video nodes with different vendor specific formats, how does
>>> the user tell the formats apart? I presume the user space could use the
>>> entity names for instance, but that would essentially make them device
>>> specific.
>>
>> Well, they are. There really is no way to avoid that.
>>
>>> I'm not sure if there would be any harm from that in practice though: the
>>> user will need to find the device nodes somehow and that will be very likely
>>> based on e.g. entity names.
>>>
>>> How should the documentation be arranged? The documentation is arranged by
>>> fourccs currently; we'd probably need a separate section for vendor specific
>>> formats. I think the device name should be listed there as well.
>>
>> There already is a separate section for metadata formats:
>>
>> https://hverkuil.home.xs4all.nl/spec/uapi/v4l/meta-formats.html
>>
>> But perhaps that page should be organized by device. And with some more
>> detailed information on how to find the video node (i.e. entity names).
>>
>>> I'd like to have perhaps Hans's comment on that as well.
>>>
>>> I don't really see a drawback in the current way of doing this either; we
>>> may get a few new fourcc codes occasionally of which I'm not really worried
>>> about. --- I'd rather ask why should there be an exception on how vendor
>>> specific formats are defined. And if we do make an exception, then how do
>>> you decide which one is and isn't vendor specific? There are raw bayer
>>> format variants that are just raw bayer data but the pixels are arranged
>>> differently (e.g. CIO2 driver).
>>>
>>
>> For these unique formats I am happy with the way it is today. The problem
>> is more with 'parameterized' formats. A simple example would be the 4:2:2
>> interleaved YUV formats where you have four different ways of ordering the
>> Y, U and V components. Right now we have four defines for that, but things
>> get out of hand quickly when you have multiple parameters like that.
>>
>> Laurent and myself discussed that with NVidia some time ago, without
>> reaching a clear conclusion. Mostly because we couldn't come up with an
>> API that is simple enough.
>
> Actually I back off a bit. Still, it looks like we have a metadata
> interface already, but it's limited to CAPTURE:
>
> https://linuxtv.org/downloads/v4l-dvb-apis/uapi/v4l/dev-meta.html#metadata
>
> Maybe we can also have V4L2_BUF_TYPE_META_OUTPUT and solve the problem
> of private FourCCs (and possible collisions with rest of the world) by
> restricting them to the V4L2_BUF_TYPE_META_* classes only?

Any comments on this idea?

Actually, there is one more thing, which would become possible with
switching to different queue types. If we have a device with queues
like this:
- video input,
- video output,
- parameters,
- statistics,
they could all be contained within one video node simply exposing 4
different queues. It would actually even allow an easy implementation
of mem2mem, given that for mem2mem devices opening a video node means
creating a mem2mem context (while multiple video nodes would require
some special synchronization to map contexts together, which doesn't
exist as of today).

Best regards,
Tomasz



[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