diff options
Diffstat (limited to 'src/gstreamer/gstlibcamerapad.cpp')
-rw-r--r-- | src/gstreamer/gstlibcamerapad.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/gstreamer/gstlibcamerapad.cpp b/src/gstreamer/gstlibcamerapad.cpp index 8616e067..49dd35b8 100644 --- a/src/gstreamer/gstlibcamerapad.cpp +++ b/src/gstreamer/gstlibcamerapad.cpp @@ -18,6 +18,7 @@ struct _GstLibcameraPad { GstPad parent; StreamRole role; GstLibcameraPool *pool; + GQueue pending_buffers; }; enum { @@ -137,3 +138,29 @@ 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); +} |