Message ID | 20220630000251.31295-8-laurent.pinchart@ideasonboard.com |
---|---|
State | Accepted |
Headers | show |
Series |
|
Related | show |
Hi Laurent, Thank you for the patch. On 6/30/22 05:32, Laurent Pinchart via libcamera-devel wrote: > This simplifies the code, and allows removing the internal queue in the > GstLibcameraPad object. > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com> > --- > src/gstreamer/gstlibcamerapad.cpp | 35 ------------------------------- > src/gstreamer/gstlibcamerapad.h | 6 ------ > src/gstreamer/gstlibcamerasrc.cpp | 11 ++++------ > 3 files changed, 4 insertions(+), 48 deletions(-) > > diff --git a/src/gstreamer/gstlibcamerapad.cpp b/src/gstreamer/gstlibcamerapad.cpp > index c00e81c8966e..87b4057ac101 100644 > --- a/src/gstreamer/gstlibcamerapad.cpp > +++ b/src/gstreamer/gstlibcamerapad.cpp > @@ -18,7 +18,6 @@ struct _GstLibcameraPad { > GstPad parent; > StreamRole role; > GstLibcameraPool *pool; > - GQueue pending_buffers; > GstClockTime latency; > }; > > @@ -155,40 +154,6 @@ gst_libcamera_pad_get_stream(GstPad *pad) > return nullptr; > } > > -void > -gst_libcamera_pad_queue_buffer(GstPad *pad, GstBuffer *buffer) > -{ > - auto *self = GST_LIBCAMERA_PAD(pad); > - GLibLocker lock(GST_OBJECT(self)); > - > - g_queue_push_head(&self->pending_buffers, buffer); > -} > - > -GstFlowReturn > -gst_libcamera_pad_push_pending(GstPad *pad) > -{ > - auto *self = GST_LIBCAMERA_PAD(pad); > - GstBuffer *buffer; > - > - { > - GLibLocker lock(GST_OBJECT(self)); > - buffer = GST_BUFFER(g_queue_pop_tail(&self->pending_buffers)); > - } > - > - if (!buffer) > - return GST_FLOW_OK; > - > - return gst_pad_push(pad, buffer); > -} > - > -bool > -gst_libcamera_pad_has_pending(GstPad *pad) > -{ > - auto *self = GST_LIBCAMERA_PAD(pad); > - GLibLocker lock(GST_OBJECT(self)); > - return self->pending_buffers.length > 0; > -} > - > void > gst_libcamera_pad_set_latency(GstPad *pad, GstClockTime latency) > { > diff --git a/src/gstreamer/gstlibcamerapad.h b/src/gstreamer/gstlibcamerapad.h > index 207695173313..103ee57ab384 100644 > --- a/src/gstreamer/gstlibcamerapad.h > +++ b/src/gstreamer/gstlibcamerapad.h > @@ -25,10 +25,4 @@ void gst_libcamera_pad_set_pool(GstPad *pad, GstLibcameraPool *pool); > > libcamera::Stream *gst_libcamera_pad_get_stream(GstPad *pad); > > -void gst_libcamera_pad_queue_buffer(GstPad *pad, GstBuffer *buffer); > - > -GstFlowReturn gst_libcamera_pad_push_pending(GstPad *pad); > - > -bool gst_libcamera_pad_has_pending(GstPad *pad); > - > void gst_libcamera_pad_set_latency(GstPad *pad, GstClockTime latency); > diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp > index 2cb915637874..8c1cd7017d98 100644 > --- a/src/gstreamer/gstlibcamerasrc.cpp > +++ b/src/gstreamer/gstlibcamerasrc.cpp > @@ -311,6 +311,9 @@ gst_libcamera_src_task_run(gpointer user_data) > return; > } > > + GstFlowReturn ret = GST_FLOW_OK; > + gst_flow_combiner_reset(self->flow_combiner); > + > for (GstPad *srcpad : state->srcpads_) { > Stream *stream = gst_libcamera_pad_get_stream(srcpad); > GstBuffer *buffer = wrap->detachBuffer(stream); > @@ -327,13 +330,7 @@ gst_libcamera_src_task_run(gpointer user_data) > GST_BUFFER_OFFSET(buffer) = fb->metadata().sequence; > GST_BUFFER_OFFSET_END(buffer) = fb->metadata().sequence; > > - gst_libcamera_pad_queue_buffer(srcpad, buffer); > - } > - > - GstFlowReturn ret = GST_FLOW_OK; > - gst_flow_combiner_reset(self->flow_combiner); > - for (GstPad *srcpad : state->srcpads_) { > - ret = gst_libcamera_pad_push_pending(srcpad); > + ret = gst_pad_push(srcpad, buffer); > ret = gst_flow_combiner_update_pad_flow(self->flow_combiner, > srcpad, ret); > }
diff --git a/src/gstreamer/gstlibcamerapad.cpp b/src/gstreamer/gstlibcamerapad.cpp index c00e81c8966e..87b4057ac101 100644 --- a/src/gstreamer/gstlibcamerapad.cpp +++ b/src/gstreamer/gstlibcamerapad.cpp @@ -18,7 +18,6 @@ struct _GstLibcameraPad { GstPad parent; StreamRole role; GstLibcameraPool *pool; - GQueue pending_buffers; GstClockTime latency; }; @@ -155,40 +154,6 @@ gst_libcamera_pad_get_stream(GstPad *pad) return nullptr; } -void -gst_libcamera_pad_queue_buffer(GstPad *pad, GstBuffer *buffer) -{ - auto *self = GST_LIBCAMERA_PAD(pad); - GLibLocker lock(GST_OBJECT(self)); - - g_queue_push_head(&self->pending_buffers, buffer); -} - -GstFlowReturn -gst_libcamera_pad_push_pending(GstPad *pad) -{ - auto *self = GST_LIBCAMERA_PAD(pad); - GstBuffer *buffer; - - { - GLibLocker lock(GST_OBJECT(self)); - buffer = GST_BUFFER(g_queue_pop_tail(&self->pending_buffers)); - } - - if (!buffer) - return GST_FLOW_OK; - - return gst_pad_push(pad, buffer); -} - -bool -gst_libcamera_pad_has_pending(GstPad *pad) -{ - auto *self = GST_LIBCAMERA_PAD(pad); - GLibLocker lock(GST_OBJECT(self)); - return self->pending_buffers.length > 0; -} - void gst_libcamera_pad_set_latency(GstPad *pad, GstClockTime latency) { diff --git a/src/gstreamer/gstlibcamerapad.h b/src/gstreamer/gstlibcamerapad.h index 207695173313..103ee57ab384 100644 --- a/src/gstreamer/gstlibcamerapad.h +++ b/src/gstreamer/gstlibcamerapad.h @@ -25,10 +25,4 @@ void gst_libcamera_pad_set_pool(GstPad *pad, GstLibcameraPool *pool); libcamera::Stream *gst_libcamera_pad_get_stream(GstPad *pad); -void gst_libcamera_pad_queue_buffer(GstPad *pad, GstBuffer *buffer); - -GstFlowReturn gst_libcamera_pad_push_pending(GstPad *pad); - -bool gst_libcamera_pad_has_pending(GstPad *pad); - void gst_libcamera_pad_set_latency(GstPad *pad, GstClockTime latency); diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp index 2cb915637874..8c1cd7017d98 100644 --- a/src/gstreamer/gstlibcamerasrc.cpp +++ b/src/gstreamer/gstlibcamerasrc.cpp @@ -311,6 +311,9 @@ gst_libcamera_src_task_run(gpointer user_data) return; } + GstFlowReturn ret = GST_FLOW_OK; + gst_flow_combiner_reset(self->flow_combiner); + for (GstPad *srcpad : state->srcpads_) { Stream *stream = gst_libcamera_pad_get_stream(srcpad); GstBuffer *buffer = wrap->detachBuffer(stream); @@ -327,13 +330,7 @@ gst_libcamera_src_task_run(gpointer user_data) GST_BUFFER_OFFSET(buffer) = fb->metadata().sequence; GST_BUFFER_OFFSET_END(buffer) = fb->metadata().sequence; - gst_libcamera_pad_queue_buffer(srcpad, buffer); - } - - GstFlowReturn ret = GST_FLOW_OK; - gst_flow_combiner_reset(self->flow_combiner); - for (GstPad *srcpad : state->srcpads_) { - ret = gst_libcamera_pad_push_pending(srcpad); + ret = gst_pad_push(srcpad, buffer); ret = gst_flow_combiner_update_pad_flow(self->flow_combiner, srcpad, ret); }