<div dir="ltr"><div>Hi Laurent,</div><div>Sure, I will divide it into 2 patches.</div><div><br></div><div>Regards,</div><div>Vedant Paranjape</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jul 19, 2021 at 8:36 PM Laurent Pinchart <<a href="mailto:laurent.pinchart@ideasonboard.com">laurent.pinchart@ideasonboard.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Mon, Jul 19, 2021 at 12:56:55PM +0530, Vedant Paranjape wrote:<br>
> Hi Paul,<br>
> Yes, it is expected behaviour. group_id should stay same throughout<br>
> lifetime of application.<br>
> <br>
> I will remove the non-functional part from commit message.<br>
<br>
Better, please split the patch in two, with the non-functional<br>
refactoring and the functional change in two separate patches.<br>
<br>
> On Mon, 19 Jul, 2021, 12:54 , <<a href="mailto:paul.elder@ideasonboard.com" target="_blank">paul.elder@ideasonboard.com</a>> wrote:<br>
> > On Sun, Jul 18, 2021 at 12:18:50PM +0530, Vedant Paranjape wrote:<br>
> > > This patch creates gst_libcamera_pad_push_stream_start function to<br>
> > > create stream id and to push the stream start. This is a non functional<br>
> > > change.<br>
> > ><br>
> > > Signed-off-by: Vedant Paranjape <<a href="mailto:vedantparanjape160201@gmail.com" target="_blank">vedantparanjape160201@gmail.com</a>><br>
> > > ---<br>
> > >  src/gstreamer/gstlibcamerapad.cpp | 13 +++++++++++++<br>
> > >  src/gstreamer/gstlibcamerapad.h   |  2 ++<br>
> > >  src/gstreamer/gstlibcamerasrc.cpp |  7 +------<br>
> > >  3 files changed, 16 insertions(+), 6 deletions(-)<br>
> > ><br>
> > > diff --git a/src/gstreamer/gstlibcamerapad.cpp b/src/gstreamer/gstlibcamerapad.cpp<br>
> > > index c00e81c8..6f889472 100644<br>
> > > --- a/src/gstreamer/gstlibcamerapad.cpp<br>
> > > +++ b/src/gstreamer/gstlibcamerapad.cpp<br>
> > > @@ -155,6 +155,19 @@ gst_libcamera_pad_get_stream(GstPad *pad)<br>
> > >       return nullptr;<br>
> > >  }<br>
> > ><br>
> > > +void<br>
> > > +gst_libcamera_pad_push_stream_start(GstPad *pad, const guint group_id)<br>
> > > +{<br>
> > > +     GstElement *element = gst_pad_get_parent_element(pad);<br>
> > > +     static gint stream_id_num = 0;<br>
> ><br>
> > If gst_libcamera_src_task_enter() is called more than once then this won't<br>
> > be reset to zero, as the original behavior was.<br>
> ><br>
> > > +<br>
> > > +     g_autofree gchar *stream_id_intermediate = g_strdup_printf("%i%i", group_id, stream_id_num++);<br>
> > > +     g_autofree gchar *stream_id = gst_pad_create_stream_id(pad, element, stream_id_intermediate);<br>
> > > +     GstEvent *event = gst_event_new_stream_start(stream_id);<br>
> > > +     gst_event_set_group_id(event, group_id);<br>
> > > +     gst_pad_push_event(pad, event);<br>
> > > +}<br>
> > > +<br>
> > >  void<br>
> > >  gst_libcamera_pad_queue_buffer(GstPad *pad, GstBuffer *buffer)<br>
> > >  {<br>
> > > diff --git a/src/gstreamer/gstlibcamerapad.h b/src/gstreamer/gstlibcamerapad.h<br>
> > > index 779f2d13..7693374f 100644<br>
> > > --- a/src/gstreamer/gstlibcamerapad.h<br>
> > > +++ b/src/gstreamer/gstlibcamerapad.h<br>
> > > @@ -26,6 +26,8 @@ void gst_libcamera_pad_set_pool(GstPad *pad, GstLibcameraPool *pool);<br>
> > ><br>
> > >  libcamera::Stream *gst_libcamera_pad_get_stream(GstPad *pad);<br>
> > ><br>
> > > +void gst_libcamera_pad_push_stream_start(GstPad *pad, const guint group_id);<br>
> > > +<br>
> > >  void gst_libcamera_pad_queue_buffer(GstPad *pad, GstBuffer *buffer);<br>
> > ><br>
> > >  GstFlowReturn gst_libcamera_pad_push_pending(GstPad *pad);<br>
> > > diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp<br>
> > > index 79b0d867..f9ac50ef 100644<br>
> > > --- a/src/gstreamer/gstlibcamerasrc.cpp<br>
> > > +++ b/src/gstreamer/gstlibcamerasrc.cpp<br>
> > > @@ -364,15 +364,10 @@ gst_libcamera_src_task_enter(GstTask *task, [[maybe_unused]] GThread *thread,<br>
> > >       if (state->group_id_ == 0) {<br>
> > >               state->group_id_ = gst_util_group_id_next();<br>
> > >       }<br>
> > > -     gint stream_id_num = 0;<br>
> > >       StreamRoles roles;<br>
> > >       for (GstPad *srcpad : state->srcpads_) {<br>
> > >               /* Create stream-id and push stream-start. */<br>
> > > -             g_autofree gchar *stream_id_intermediate = g_strdup_printf("%i%i", state->group_id_, stream_id_num++);<br>
> > > -             g_autofree gchar *stream_id = gst_pad_create_stream_id(srcpad, GST_ELEMENT(self), stream_id_intermediate);<br>
> > > -             GstEvent *event = gst_event_new_stream_start(stream_id);<br>
> > > -             gst_event_set_group_id(event, state->group_id_);<br>
> > > -             gst_pad_push_event(srcpad, event);<br>
> > > +             gst_libcamera_pad_push_stream_start(srcpad, state->group_id_);<br>
> > ><br>
> > >               /* Collect the streams roles for the next iteration. */<br>
> > >               roles.push_back(gst_libcamera_pad_get_role(srcpad));<br>
<br>
-- <br>
Regards,<br>
<br>
Laurent Pinchart<br>
</blockquote></div>