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:
parent
413dbfb1e7
commit
3ae535ceb4
3 changed files with 4 additions and 48 deletions
|
@ -18,7 +18,6 @@ struct _GstLibcameraPad {
|
||||||
GstPad parent;
|
GstPad parent;
|
||||||
StreamRole role;
|
StreamRole role;
|
||||||
GstLibcameraPool *pool;
|
GstLibcameraPool *pool;
|
||||||
GQueue pending_buffers;
|
|
||||||
GstClockTime latency;
|
GstClockTime latency;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -155,40 +154,6 @@ gst_libcamera_pad_get_stream(GstPad *pad)
|
||||||
return nullptr;
|
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
|
void
|
||||||
gst_libcamera_pad_set_latency(GstPad *pad, GstClockTime latency)
|
gst_libcamera_pad_set_latency(GstPad *pad, GstClockTime latency)
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,10 +25,4 @@ void gst_libcamera_pad_set_pool(GstPad *pad, GstLibcameraPool *pool);
|
||||||
|
|
||||||
libcamera::Stream *gst_libcamera_pad_get_stream(GstPad *pad);
|
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);
|
void gst_libcamera_pad_set_latency(GstPad *pad, GstClockTime latency);
|
||||||
|
|
|
@ -311,6 +311,9 @@ gst_libcamera_src_task_run(gpointer user_data)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GstFlowReturn ret = GST_FLOW_OK;
|
||||||
|
gst_flow_combiner_reset(self->flow_combiner);
|
||||||
|
|
||||||
for (GstPad *srcpad : state->srcpads_) {
|
for (GstPad *srcpad : state->srcpads_) {
|
||||||
Stream *stream = gst_libcamera_pad_get_stream(srcpad);
|
Stream *stream = gst_libcamera_pad_get_stream(srcpad);
|
||||||
GstBuffer *buffer = wrap->detachBuffer(stream);
|
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(buffer) = fb->metadata().sequence;
|
||||||
GST_BUFFER_OFFSET_END(buffer) = fb->metadata().sequence;
|
GST_BUFFER_OFFSET_END(buffer) = fb->metadata().sequence;
|
||||||
|
|
||||||
gst_libcamera_pad_queue_buffer(srcpad, buffer);
|
ret = gst_pad_push(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_flow_combiner_update_pad_flow(self->flow_combiner,
|
ret = gst_flow_combiner_update_pad_flow(self->flow_combiner,
|
||||||
srcpad, ret);
|
srcpad, ret);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue