On Tuesday, July 19, 2011 15:38:07 Sakari Ailus wrote: > Define a frame start event to tell user space when the reception of a frame > starts. > > Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxx> > --- > Documentation/DocBook/media/v4l/vidioc-dqevent.xml | 26 ++++++++++++++++++++ > .../DocBook/media/v4l/vidioc-subscribe-event.xml | 18 +++++++++++++ > include/linux/videodev2.h | 12 +++++++-- > 3 files changed, 53 insertions(+), 3 deletions(-) > > diff --git a/Documentation/DocBook/media/v4l/vidioc-dqevent.xml b/Documentation/DocBook/media/v4l/vidioc-dqevent.xml > index 5200b68..d2cb8db 100644 > --- a/Documentation/DocBook/media/v4l/vidioc-dqevent.xml > +++ b/Documentation/DocBook/media/v4l/vidioc-dqevent.xml > @@ -88,6 +88,12 @@ > </row> > <row> > <entry></entry> > + <entry>&v4l2-event-frame-sync;</entry> > + <entry><structfield>frame</structfield></entry> > + <entry>Event data for event V4L2_EVENT_FRAME_START.</entry> The name of the struct and the event are not in sync (pardon the expression :-) ). Both should either be named FRAME_SYNC or FRAME_START. > + </row> > + <row> > + <entry></entry> > <entry>__u8</entry> > <entry><structfield>data</structfield>[64]</entry> > <entry>Event data. Defined by the event type. The union > @@ -220,6 +226,26 @@ > </tgroup> > </table> > > + <table frame="none" pgwide="1" id="v4l2-event-frame-sync"> > + <title>struct <structname>v4l2_event_frame_sync</structname></title> > + <tgroup cols="3"> > + &cs-str; > + <tbody valign="top"> > + <row> > + <entry>__u32</entry> > + <entry><structfield>buffer_sequence</structfield></entry> > + <entry> > + The sequence number of the buffer to be handled next or > + currently handled by the driver. So this refers to the sequence field in struct v4l2_buffer? Assuming it is, then you definitely need to refer to that struct. And to answer question 2 in the RFC: buffer_sequence is specific to this event, and so belongs to a v4l2_event_frame_sync struct. BTW, using 'id' to specify a specific line in the future seems reasonable to me. Initially id is just set to 0, meaning the start of the frame. Regards, Hans > + </entry> > + </row> > + </tbody> > + </tgroup> > + </table> > + > + <para>&v4l2-event-frame-sync; is associated with > + <constant>V4L2_EVENT_FRAME_START</constant> event.</para> > + > <table pgwide="1" frame="none" id="changes-flags"> > <title>Changes</title> > <tgroup cols="3"> > diff --git a/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml b/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml > index 275be96..7ec42bb 100644 > --- a/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml > +++ b/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml > @@ -139,6 +139,24 @@ > </entry> > </row> > <row> > + <entry><constant>V4L2_EVENT_FRAME_START</constant></entry> > + <entry>4</entry> > + <entry> > + <para>Triggered immediately when the reception of a > + frame has begun. This event has a > + &v4l2-event-frame-sync; associated with it.</para> > + > + <para>A driver will only generate this event when the > + hardware can generate it. This might not be the case > + e.g. when the hardware has no DMA buffer to write the > + image data to. In such cases the > + <structfield>buffer_sequence</structfield> field in > + &v4l2-event-frame-sync; will not be incremented either. > + This causes two consecutive buffer sequence numbers to > + have n times frame interval in between them.</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/linux/videodev2.h b/include/linux/videodev2.h > index fca24cc..4265102 100644 > --- a/include/linux/videodev2.h > +++ b/include/linux/videodev2.h > @@ -2006,6 +2006,7 @@ struct v4l2_streamparm { > #define V4L2_EVENT_VSYNC 1 > #define V4L2_EVENT_EOS 2 > #define V4L2_EVENT_CTRL 3 > +#define V4L2_EVENT_FRAME_START 4 > #define V4L2_EVENT_PRIVATE_START 0x08000000 > > /* Payload for V4L2_EVENT_VSYNC */ > @@ -2032,12 +2033,17 @@ struct v4l2_event_ctrl { > __s32 default_value; > }; > > +struct v4l2_event_frame_sync { > + __u32 buffer_sequence; > +}; > + > struct v4l2_event { > __u32 type; > union { > - struct v4l2_event_vsync vsync; > - struct v4l2_event_ctrl ctrl; > - __u8 data[64]; > + struct v4l2_event_vsync vsync; > + struct v4l2_event_ctrl ctrl; > + struct v4l2_event_frame_sync frame_sync; > + __u8 data[64]; > } u; > __u32 pending; > __u32 sequence; > -- 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