diff mbox series

media: videodev2: add V4L2_FMT_FLAG_NO_SOURCE_CHANGE

Message ID 20181004133739.19086-1-mjourdan@baylibre.com (mailing list archive)
State New, archived
Headers show
Series media: videodev2: add V4L2_FMT_FLAG_NO_SOURCE_CHANGE | expand

Commit Message

Maxime Jourdan Oct. 4, 2018, 1:37 p.m. UTC
When a v4l2 driver exposes V4L2_EVENT_SOURCE_CHANGE, some (usually
OUTPUT) formats may not be able to trigger this event.

Add a enum_fmt format flag to tag those specific formats.

Signed-off-by: Maxime Jourdan <mjourdan@baylibre.com>
---
 Documentation/media/uapi/v4l/vidioc-enum-fmt.rst | 5 +++++
 include/uapi/linux/videodev2.h                   | 5 +++--
 2 files changed, 8 insertions(+), 2 deletions(-)

Comments

Tomasz Figa Oct. 9, 2018, 7:58 a.m. UTC | #1
Hi Maxime,

On Thu, Oct 4, 2018 at 10:38 PM Maxime Jourdan <mjourdan@baylibre.com> wrote:
>
> When a v4l2 driver exposes V4L2_EVENT_SOURCE_CHANGE, some (usually
> OUTPUT) formats may not be able to trigger this event.
>
> Add a enum_fmt format flag to tag those specific formats.
>
> Signed-off-by: Maxime Jourdan <mjourdan@baylibre.com>
> ---
>  Documentation/media/uapi/v4l/vidioc-enum-fmt.rst | 5 +++++
>  include/uapi/linux/videodev2.h                   | 5 +++--
>  2 files changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst b/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
> index 019c513df217..e0040b36ac43 100644
> --- a/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
> +++ b/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
> @@ -116,6 +116,11 @@ one until ``EINVAL`` is returned.
>        - This format is not native to the device but emulated through
>         software (usually libv4l2), where possible try to use a native
>         format instead for better performance.
> +    * - ``V4L2_FMT_FLAG_NO_SOURCE_CHANGE``
> +      - 0x0004
> +      - The event ``V4L2_EVENT_SOURCE_CHANGE`` is not supported
> +       for this format.
> +
>
>
>  Return Value
> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> index 3a65951ca51e..a28acee1cb52 100644
> --- a/include/uapi/linux/videodev2.h
> +++ b/include/uapi/linux/videodev2.h
> @@ -723,8 +723,9 @@ struct v4l2_fmtdesc {
>         __u32               reserved[4];
>  };
>
> -#define V4L2_FMT_FLAG_COMPRESSED 0x0001
> -#define V4L2_FMT_FLAG_EMULATED   0x0002
> +#define V4L2_FMT_FLAG_COMPRESSED       0x0001
> +#define V4L2_FMT_FLAG_EMULATED         0x0002
> +#define V4L2_FMT_FLAG_NO_SOURCE_CHANGE 0x0004

I think it indeed makes sense. I'd suggest submitting this patch
together with the series that adds the affected driver, though, since
we'd be otherwise just adding a dead API.

Also, it would be good to refer to it from the Decoder Interface
documentation. Depending on which one gets in earlier, you might
either want to base on it or I'd add a note myself.

Best regards,
Tomasz
Maxime Jourdan Oct. 9, 2018, 11:04 a.m. UTC | #2
Hi Tomasz,

On Tue, Oct 9, 2018 at 9:59 AM Tomasz Figa <tfiga@chromium.org> wrote:
>
> Hi Maxime,
>
> On Thu, Oct 4, 2018 at 10:38 PM Maxime Jourdan <mjourdan@baylibre.com> wrote:
> >
> > When a v4l2 driver exposes V4L2_EVENT_SOURCE_CHANGE, some (usually
> > OUTPUT) formats may not be able to trigger this event.
> >
> > Add a enum_fmt format flag to tag those specific formats.
> >
> > Signed-off-by: Maxime Jourdan <mjourdan@baylibre.com>
> > ---
> >  Documentation/media/uapi/v4l/vidioc-enum-fmt.rst | 5 +++++
> >  include/uapi/linux/videodev2.h                   | 5 +++--
> >  2 files changed, 8 insertions(+), 2 deletions(-)
> >
> > diff --git a/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst b/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
> > index 019c513df217..e0040b36ac43 100644
> > --- a/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
> > +++ b/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
> > @@ -116,6 +116,11 @@ one until ``EINVAL`` is returned.
> >        - This format is not native to the device but emulated through
> >         software (usually libv4l2), where possible try to use a native
> >         format instead for better performance.
> > +    * - ``V4L2_FMT_FLAG_NO_SOURCE_CHANGE``
> > +      - 0x0004
> > +      - The event ``V4L2_EVENT_SOURCE_CHANGE`` is not supported
> > +       for this format.
> > +
> >
> >
> >  Return Value
> > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> > index 3a65951ca51e..a28acee1cb52 100644
> > --- a/include/uapi/linux/videodev2.h
> > +++ b/include/uapi/linux/videodev2.h
> > @@ -723,8 +723,9 @@ struct v4l2_fmtdesc {
> >         __u32               reserved[4];
> >  };
> >
> > -#define V4L2_FMT_FLAG_COMPRESSED 0x0001
> > -#define V4L2_FMT_FLAG_EMULATED   0x0002
> > +#define V4L2_FMT_FLAG_COMPRESSED       0x0001
> > +#define V4L2_FMT_FLAG_EMULATED         0x0002
> > +#define V4L2_FMT_FLAG_NO_SOURCE_CHANGE 0x0004
>
> I think it indeed makes sense. I'd suggest submitting this patch
> together with the series that adds the affected driver, though, since
> we'd be otherwise just adding a dead API.
>
> Also, it would be good to refer to it from the Decoder Interface
> documentation. Depending on which one gets in earlier, you might
> either want to base on it or I'd add a note myself.
>
> Best regards,
> Tomasz

Agreed on both points. If your documentation makes it in before, I'll
update it within the patch. We'll have time to sync on that anyway in
the coming weeks.

Maxime
Hans Verkuil Nov. 29, 2018, 9:01 a.m. UTC | #3
On 10/04/2018 03:37 PM, Maxime Jourdan wrote:
> When a v4l2 driver exposes V4L2_EVENT_SOURCE_CHANGE, some (usually
> OUTPUT) formats may not be able to trigger this event.
> 
> Add a enum_fmt format flag to tag those specific formats.

I think I missed (or forgot) some discussion about this since I have no
idea why this flag is needed. What's the use-case?

Regards,

	Hans

> 
> Signed-off-by: Maxime Jourdan <mjourdan@baylibre.com>
> ---
>  Documentation/media/uapi/v4l/vidioc-enum-fmt.rst | 5 +++++
>  include/uapi/linux/videodev2.h                   | 5 +++--
>  2 files changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst b/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
> index 019c513df217..e0040b36ac43 100644
> --- a/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
> +++ b/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
> @@ -116,6 +116,11 @@ one until ``EINVAL`` is returned.
>        - This format is not native to the device but emulated through
>  	software (usually libv4l2), where possible try to use a native
>  	format instead for better performance.
> +    * - ``V4L2_FMT_FLAG_NO_SOURCE_CHANGE``
> +      - 0x0004
> +      - The event ``V4L2_EVENT_SOURCE_CHANGE`` is not supported
> +	for this format.
> +
>  
>  
>  Return Value
> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> index 3a65951ca51e..a28acee1cb52 100644
> --- a/include/uapi/linux/videodev2.h
> +++ b/include/uapi/linux/videodev2.h
> @@ -723,8 +723,9 @@ struct v4l2_fmtdesc {
>  	__u32		    reserved[4];
>  };
>  
> -#define V4L2_FMT_FLAG_COMPRESSED 0x0001
> -#define V4L2_FMT_FLAG_EMULATED   0x0002
> +#define V4L2_FMT_FLAG_COMPRESSED	0x0001
> +#define V4L2_FMT_FLAG_EMULATED		0x0002
> +#define V4L2_FMT_FLAG_NO_SOURCE_CHANGE	0x0004
>  
>  	/* Frame Size and frame rate enumeration */
>  /*
>
Tomasz Figa Nov. 29, 2018, 7:35 p.m. UTC | #4
On Thu, Nov 29, 2018 at 1:01 AM Hans Verkuil <hverkuil@xs4all.nl> wrote:
>
> On 10/04/2018 03:37 PM, Maxime Jourdan wrote:
> > When a v4l2 driver exposes V4L2_EVENT_SOURCE_CHANGE, some (usually
> > OUTPUT) formats may not be able to trigger this event.
> >
> > Add a enum_fmt format flag to tag those specific formats.
>
> I think I missed (or forgot) some discussion about this since I have no
> idea why this flag is needed. What's the use-case?

As far as I remember, the hardware/firmware Maxime has been working
with can't handle resolution changes for some coded formats. Perhaps
we should explain that better in the commit message and documentation
of the flag, though. Maxime, could you refresh my memory with the
details?

Best regards,
Tomasz

>
> Regards,
>
>         Hans
>
> >
> > Signed-off-by: Maxime Jourdan <mjourdan@baylibre.com>
> > ---
> >  Documentation/media/uapi/v4l/vidioc-enum-fmt.rst | 5 +++++
> >  include/uapi/linux/videodev2.h                   | 5 +++--
> >  2 files changed, 8 insertions(+), 2 deletions(-)
> >
> > diff --git a/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst b/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
> > index 019c513df217..e0040b36ac43 100644
> > --- a/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
> > +++ b/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
> > @@ -116,6 +116,11 @@ one until ``EINVAL`` is returned.
> >        - This format is not native to the device but emulated through
> >       software (usually libv4l2), where possible try to use a native
> >       format instead for better performance.
> > +    * - ``V4L2_FMT_FLAG_NO_SOURCE_CHANGE``
> > +      - 0x0004
> > +      - The event ``V4L2_EVENT_SOURCE_CHANGE`` is not supported
> > +     for this format.
> > +
> >
> >
> >  Return Value
> > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> > index 3a65951ca51e..a28acee1cb52 100644
> > --- a/include/uapi/linux/videodev2.h
> > +++ b/include/uapi/linux/videodev2.h
> > @@ -723,8 +723,9 @@ struct v4l2_fmtdesc {
> >       __u32               reserved[4];
> >  };
> >
> > -#define V4L2_FMT_FLAG_COMPRESSED 0x0001
> > -#define V4L2_FMT_FLAG_EMULATED   0x0002
> > +#define V4L2_FMT_FLAG_COMPRESSED     0x0001
> > +#define V4L2_FMT_FLAG_EMULATED               0x0002
> > +#define V4L2_FMT_FLAG_NO_SOURCE_CHANGE       0x0004
> >
> >       /* Frame Size and frame rate enumeration */
> >  /*
> >
>
Hans Verkuil Nov. 30, 2018, 7:35 a.m. UTC | #5
On 11/29/2018 08:35 PM, Tomasz Figa wrote:
> On Thu, Nov 29, 2018 at 1:01 AM Hans Verkuil <hverkuil@xs4all.nl> wrote:
>>
>> On 10/04/2018 03:37 PM, Maxime Jourdan wrote:
>>> When a v4l2 driver exposes V4L2_EVENT_SOURCE_CHANGE, some (usually
>>> OUTPUT) formats may not be able to trigger this event.
>>>
>>> Add a enum_fmt format flag to tag those specific formats.
>>
>> I think I missed (or forgot) some discussion about this since I have no
>> idea why this flag is needed. What's the use-case?
> 
> As far as I remember, the hardware/firmware Maxime has been working
> with can't handle resolution changes for some coded formats. Perhaps
> we should explain that better in the commit message and documentation
> of the flag, though. Maxime, could you refresh my memory with the
> details?

So basically it describes if a compressed format can handle resolution
changes for the given hardware?

If that's the case, then NO_SOURCE_CHANGE is not a good name as it
describes the symptom, not the real reason.

Perhaps _FIXED_RESOLUTION might be a better name.

Regards,

	Hans

> 
> Best regards,
> Tomasz
> 
>>
>> Regards,
>>
>>         Hans
>>
>>>
>>> Signed-off-by: Maxime Jourdan <mjourdan@baylibre.com>
>>> ---
>>>  Documentation/media/uapi/v4l/vidioc-enum-fmt.rst | 5 +++++
>>>  include/uapi/linux/videodev2.h                   | 5 +++--
>>>  2 files changed, 8 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst b/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
>>> index 019c513df217..e0040b36ac43 100644
>>> --- a/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
>>> +++ b/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
>>> @@ -116,6 +116,11 @@ one until ``EINVAL`` is returned.
>>>        - This format is not native to the device but emulated through
>>>       software (usually libv4l2), where possible try to use a native
>>>       format instead for better performance.
>>> +    * - ``V4L2_FMT_FLAG_NO_SOURCE_CHANGE``
>>> +      - 0x0004
>>> +      - The event ``V4L2_EVENT_SOURCE_CHANGE`` is not supported
>>> +     for this format.
>>> +
>>>
>>>
>>>  Return Value
>>> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
>>> index 3a65951ca51e..a28acee1cb52 100644
>>> --- a/include/uapi/linux/videodev2.h
>>> +++ b/include/uapi/linux/videodev2.h
>>> @@ -723,8 +723,9 @@ struct v4l2_fmtdesc {
>>>       __u32               reserved[4];
>>>  };
>>>
>>> -#define V4L2_FMT_FLAG_COMPRESSED 0x0001
>>> -#define V4L2_FMT_FLAG_EMULATED   0x0002
>>> +#define V4L2_FMT_FLAG_COMPRESSED     0x0001
>>> +#define V4L2_FMT_FLAG_EMULATED               0x0002
>>> +#define V4L2_FMT_FLAG_NO_SOURCE_CHANGE       0x0004
>>>
>>>       /* Frame Size and frame rate enumeration */
>>>  /*
>>>
>>
Maxime Jourdan Dec. 7, 2018, 4:12 p.m. UTC | #6
Hi Hans, Tomasz,

Sorry I missed your messages last week..!
On Fri, Nov 30, 2018 at 8:35 AM Hans Verkuil <hverkuil@xs4all.nl> wrote:
>
> On 11/29/2018 08:35 PM, Tomasz Figa wrote:
> > On Thu, Nov 29, 2018 at 1:01 AM Hans Verkuil <hverkuil@xs4all.nl> wrote:
> >>
> >> On 10/04/2018 03:37 PM, Maxime Jourdan wrote:
> >>> When a v4l2 driver exposes V4L2_EVENT_SOURCE_CHANGE, some (usually
> >>> OUTPUT) formats may not be able to trigger this event.
> >>>
> >>> Add a enum_fmt format flag to tag those specific formats.
> >>
> >> I think I missed (or forgot) some discussion about this since I have no
> >> idea why this flag is needed. What's the use-case?
> >
> > As far as I remember, the hardware/firmware Maxime has been working
> > with can't handle resolution changes for some coded formats. Perhaps
> > we should explain that better in the commit message and documentation
> > of the flag, though. Maxime, could you refresh my memory with the
> > details?
>
> So basically it describes if a compressed format can handle resolution
> changes for the given hardware?
>

Yes, exactly

> If that's the case, then NO_SOURCE_CHANGE is not a good name as it
> describes the symptom, not the real reason.
>
> Perhaps _FIXED_RESOLUTION might be a better name.
>

Fair point, I will update it as such.

Next time, this patch will come in a series that uses the flag.

Cheers,
Maxime

> Regards,
>
>         Hans
>
> >
> > Best regards,
> > Tomasz
> >
> >>
> >> Regards,
> >>
> >>         Hans
> >>
> >>>
> >>> Signed-off-by: Maxime Jourdan <mjourdan@baylibre.com>
> >>> ---
> >>>  Documentation/media/uapi/v4l/vidioc-enum-fmt.rst | 5 +++++
> >>>  include/uapi/linux/videodev2.h                   | 5 +++--
> >>>  2 files changed, 8 insertions(+), 2 deletions(-)
> >>>
> >>> diff --git a/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst b/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
> >>> index 019c513df217..e0040b36ac43 100644
> >>> --- a/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
> >>> +++ b/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
> >>> @@ -116,6 +116,11 @@ one until ``EINVAL`` is returned.
> >>>        - This format is not native to the device but emulated through
> >>>       software (usually libv4l2), where possible try to use a native
> >>>       format instead for better performance.
> >>> +    * - ``V4L2_FMT_FLAG_NO_SOURCE_CHANGE``
> >>> +      - 0x0004
> >>> +      - The event ``V4L2_EVENT_SOURCE_CHANGE`` is not supported
> >>> +     for this format.
> >>> +
> >>>
> >>>
> >>>  Return Value
> >>> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> >>> index 3a65951ca51e..a28acee1cb52 100644
> >>> --- a/include/uapi/linux/videodev2.h
> >>> +++ b/include/uapi/linux/videodev2.h
> >>> @@ -723,8 +723,9 @@ struct v4l2_fmtdesc {
> >>>       __u32               reserved[4];
> >>>  };
> >>>
> >>> -#define V4L2_FMT_FLAG_COMPRESSED 0x0001
> >>> -#define V4L2_FMT_FLAG_EMULATED   0x0002
> >>> +#define V4L2_FMT_FLAG_COMPRESSED     0x0001
> >>> +#define V4L2_FMT_FLAG_EMULATED               0x0002
> >>> +#define V4L2_FMT_FLAG_NO_SOURCE_CHANGE       0x0004
> >>>
> >>>       /* Frame Size and frame rate enumeration */
> >>>  /*
> >>>
> >>
>
diff mbox series

Patch

diff --git a/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst b/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
index 019c513df217..e0040b36ac43 100644
--- a/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
+++ b/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst
@@ -116,6 +116,11 @@  one until ``EINVAL`` is returned.
       - This format is not native to the device but emulated through
 	software (usually libv4l2), where possible try to use a native
 	format instead for better performance.
+    * - ``V4L2_FMT_FLAG_NO_SOURCE_CHANGE``
+      - 0x0004
+      - The event ``V4L2_EVENT_SOURCE_CHANGE`` is not supported
+	for this format.
+
 
 
 Return Value
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 3a65951ca51e..a28acee1cb52 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -723,8 +723,9 @@  struct v4l2_fmtdesc {
 	__u32		    reserved[4];
 };
 
-#define V4L2_FMT_FLAG_COMPRESSED 0x0001
-#define V4L2_FMT_FLAG_EMULATED   0x0002
+#define V4L2_FMT_FLAG_COMPRESSED	0x0001
+#define V4L2_FMT_FLAG_EMULATED		0x0002
+#define V4L2_FMT_FLAG_NO_SOURCE_CHANGE	0x0004
 
 	/* Frame Size and frame rate enumeration */
 /*