From: Hans Verkuil <hverkuil@xs4all.nl>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
Arun Kumar K <arunkk.samsung@gmail.com>
Cc: LMML <linux-media@vger.kernel.org>,
linux-samsung-soc <linux-samsung-soc@vger.kernel.org>,
Kamil Debski <k.debski@samsung.com>,
Sylwester Nawrocki <s.nawrocki@samsung.com>,
Pawel Osciak <posciak@chromium.org>
Subject: Re: [PATCH v2 1/2] v4l: Add resolution change event.
Date: Tue, 22 Apr 2014 14:34:09 +0200 [thread overview]
Message-ID: <535661C1.3040701@xs4all.nl> (raw)
In-Reply-To: <3623958.Gv7Rj4f0MS@avalon>
On 04/21/2014 10:59 PM, Laurent Pinchart wrote:
> Hi Arun,
>
> On Monday 21 April 2014 17:19:26 Arun Kumar K wrote:
>> On Mon, Apr 21, 2014 at 3:54 PM, Laurent Pinchart wrote:
>>> On Monday 21 April 2014 14:56:01 Arun Kumar K wrote:
>>>> From: Pawel Osciak <posciak@chromium.org>
>>>>
>>>> This event indicates that the decoder has reached a point in the stream,
>>>> at which the resolution changes. The userspace is expected to provide a
>>>> new
>>>> set of CAPTURE buffers for the new format before decoding can continue.
>>>> The event can also be used for more generic events involving resolution
>>>> or format changes at runtime for all kinds of video devices.
>>>>
>>>> Signed-off-by: Pawel Osciak <posciak@chromium.org>
>>>> Signed-off-by: Arun Kumar K <arun.kk@samsung.com>
>>>> ---
>>>>
>>>> .../DocBook/media/v4l/vidioc-subscribe-event.xml | 16
>>>> ++++++++++++++++
>>>> include/uapi/linux/videodev2.h | 6 ++++++
>>>> 2 files changed, 22 insertions(+)
>>>>
>>>> diff --git a/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml
>>>> b/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml index
>>>> 5c70b61..0aec831 100644
>>>> --- a/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml
>>>> +++ b/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml
>>>> @@ -155,6 +155,22 @@
>>>> </entry>
>>>> </row>
>>>> <row>
>>>> + <entry><constant>V4L2_EVENT_SOURCE_CHANGE</constant></entry>
>>>> + <entry>5</entry>
>>>> + <entry>
>>>> + <para>This event is triggered when a resolution or format
>>>> change + is detected during runtime by the video device. It
>>>> can be a + runtime resolution change triggered by a video
>>>> decoder or the + format change happening on an HDMI
>>>> connector. Application may + need to reinitialize buffers
>>>> before proceeding further.</para> +
>>>> + <para>This event has a &v4l2-event-source-change;
>>>> associated
>>>> + with it. This has significance only for v4l2 subdevs where
>>>> the
>>>> + <structfield>pad_num</structfield> field will be updated with
>>>> + the pad number on which the event is triggered.</para>
>>>> + </entry>
>>>> + </row>
>>>> + <row>
>>>>
>>>> <entry><constant>V4L2_EVENT_PRIVATE_START</constant></entry>
>>>> <entry>0x08000000</entry>
>>>> <entry>Base event number for driver-private events.</entry>
>>>> diff --git a/include/uapi/linux/videodev2.h
>>>> b/include/uapi/linux/videodev2.h index 6ae7bbe..12e0614 100644
>>>> --- a/include/uapi/linux/videodev2.h
>>>> +++ b/include/uapi/linux/videodev2.h
>>>> @@ -1733,6 +1733,7 @@ struct v4l2_streamparm {
>>>> #define V4L2_EVENT_EOS 2
>>>> #define V4L2_EVENT_CTRL 3
>>>> #define V4L2_EVENT_FRAME_SYNC 4
>>>> +#define V4L2_EVENT_SOURCE_CHANGE 5
>>>> #define V4L2_EVENT_PRIVATE_START 0x08000000
>>>>
>>>> /* Payload for V4L2_EVENT_VSYNC */
>>>> @@ -1764,12 +1765,17 @@ struct v4l2_event_frame_sync {
>>>> __u32 frame_sequence;
>>>> };
>>>>
>>>> +struct v4l2_event_source_change {
>>>> + __u32 pad_num;
>>>
>>> I would call the field just "pad",
>>
>> Ok.
>>
>>>> +};
>>>> +
>>>>
>>>> struct v4l2_event {
>>>> __u32 type;
>>>> union {
>>>> struct v4l2_event_vsync vsync;
>>>> struct v4l2_event_ctrl ctrl;
>>>> struct v4l2_event_frame_sync frame_sync;
>>>> + struct v4l2_event_source_change source_change;
>>>> __u8 data[64];
>>>
>>> This looks pretty good to me, but I'm a bit concerned about future
>>> compatibility. We might need to report more information to userspace, and
>>> in particular what has been changed at the source (resolution, format,
>>> ...). In order to do so, we'll need to add a flag field to
>>> v4l2_event_source_change.
>>
>> Ok a flag can be added with bitfields for reporting specific event type.
>
> I don't think we need to add it now. Just making sure it can be added later
> without breaking the userspace API would be enough for me.
I would add it, I think it makes sense. It would be similar to the 'changes'
field in struct v4l2_event_ctrl.
>
>>> The next __u32 right after the source_change field must thus be zeroed. I
>>> see two ways of doing so:
>>>
>>> - zeroing the whole data array before setting event-specific data
>>> - adding a reserved must-be-zeroed field to v4l2_event_source_change
>>>
>>> I like the former better as it's more generic, but we then need to ensure
>>> that all drivers zero the whole data field correctly. Adding a new
>>> v4l2_event_init() function would help with that.
>>
>> Is that a good idea to have an init() function just for zeroing the data
>> field? If this is agreed upon, I can add this, but it can be easily missed
>> out by drivers.
>
> I'm not sure. On one hand it would be easier to catch missing calls if we use
> a dedicated function, as the function could set an initialized flag in the
> event structure that would be checked by v4l2_event_queue. On the other hand,
> that might be overengineering, and we could just manually check that all
> drivers memset the structure to 0 before initializing fields. In both cases
> the goal is to make sure that the structure is properly initialized, to avoid
> leaking kernel data to userspace, and to avoid breaking the ABI when we'll
> need to extend the v4l2_event_source_change structure. Hans might have an
> opinion on that.
I think a v4l2_event_init function is not a bad idea:
void v4l2_event_init(struct v4l2_event *ev, u32 type, u32 id)
{
ev->type = type;
ev->id = id;
memset(ev->u, 0, sizeof(ev->u));
}
Note: all other fields, including reserved[], are set by v4l2-event.c.
Regards,
Hans
>
>> Also how about the drivers already using the v4l2_event. Should we
>> update those drivers too with v4l2_event_init() ?
>
> If we decide to introduce a new function, yes. Otherwise, no :-)
>
>>>> } u;
>>>> __u32 pending;
>
next prev parent reply other threads:[~2014-04-22 12:34 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-21 9:26 [PATCH v2 0/2] Add resolution change event Arun Kumar K
2014-04-21 9:26 ` [PATCH v2 1/2] v4l: " Arun Kumar K
[not found] ` <CACHYQ-qE4Qnwa9txUsx=MSM4NRG6HrDxqp=qOJUzCPv6uf9egw@mail.gmail.com>
2014-04-21 9:35 ` Arun Kumar K
[not found] ` <CACHYQ-p564-HHpx0mY6rcq+Mg3kPp24pvfk2_MH7Vf5U0ygSOw@mail.gmail.com>
2014-04-22 7:34 ` Kamil Debski
[not found] ` <CACHYQ-pk1VkDj8YATkVGcrdv96wkmnK41UR68400oQQMM7asTw@mail.gmail.com>
2014-04-22 8:46 ` Kamil Debski
2014-04-21 10:24 ` Laurent Pinchart
2014-04-21 11:49 ` Arun Kumar K
2014-04-21 20:59 ` Laurent Pinchart
2014-04-22 12:34 ` Hans Verkuil [this message]
2014-04-22 12:52 ` Hans Verkuil
2014-04-30 12:38 ` Arun Kumar K
2014-04-30 14:33 ` Hans Verkuil
2014-05-05 9:50 ` Arun Kumar K
2014-05-05 10:14 ` Hans Verkuil
2014-04-21 9:26 ` [PATCH v2 2/2] [media] s5p-mfc: Add support for " Arun Kumar K
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=535661C1.3040701@xs4all.nl \
--to=hverkuil@xs4all.nl \
--cc=arunkk.samsung@gmail.com \
--cc=k.debski@samsung.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=posciak@chromium.org \
--cc=s.nawrocki@samsung.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox