[libcamera-devel,08/13] gstreamer: Combine the two pad loops in the task run handler
diff mbox series

Message ID 20220623232210.18742-9-laurent.pinchart@ideasonboard.com
State Accepted
Headers show
Series
  • gstreamer: Queue multiple requests
Related show

Commit Message

Laurent Pinchart June 23, 2022, 11:22 p.m. UTC
This simplifies the code, and allows removing the internal queue in the
GstLibcameraPad object.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 src/gstreamer/gstlibcamerapad.cpp | 35 -------------------------------
 src/gstreamer/gstlibcamerapad.h   |  6 ------
 src/gstreamer/gstlibcamerasrc.cpp | 11 ++++------
 3 files changed, 4 insertions(+), 48 deletions(-)

Comments

Nicolas Dufresne June 27, 2022, 9:13 p.m. UTC | #1
Hi Laurent,

Le vendredi 24 juin 2022 à 02:22 +0300, Laurent Pinchart a écrit :
> This simplifies the code, and allows removing the internal queue in the
> GstLibcameraPad object.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

Thanks for your patch.

Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.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 ee9c83fde777..e30d45fa2223 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);
>  	}

Patch
diff mbox series

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 ee9c83fde777..e30d45fa2223 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);
 	}