gstreamer: Combine the two pad loops in the task run handler
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>
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user