mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 20:21:24 +00:00
basesink: fix object type handling in queued preroll
Factor out the method to get the object type. When preroll-queue-len > 0, use the right object type instead of ignoring buffer-lists.
This commit is contained in:
parent
54ace28f06
commit
4fd63f0ce2
1 changed files with 23 additions and 10 deletions
|
@ -2201,6 +2201,23 @@ step_unlocked:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline guint8
|
||||||
|
get_object_type (GstMiniObject * obj)
|
||||||
|
{
|
||||||
|
guint8 obj_type;
|
||||||
|
|
||||||
|
if (G_LIKELY (GST_IS_BUFFER (obj)))
|
||||||
|
obj_type = _PR_IS_BUFFER;
|
||||||
|
else if (GST_IS_EVENT (obj))
|
||||||
|
obj_type = _PR_IS_EVENT;
|
||||||
|
else if (GST_IS_BUFFER_LIST (obj))
|
||||||
|
obj_type = _PR_IS_BUFFERLIST;
|
||||||
|
else
|
||||||
|
obj_type = _PR_IS_NOTHING;
|
||||||
|
|
||||||
|
return obj_type;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_base_sink_do_preroll:
|
* gst_base_sink_do_preroll:
|
||||||
* @sink: the sink
|
* @sink: the sink
|
||||||
|
@ -2224,15 +2241,10 @@ gst_base_sink_do_preroll (GstBaseSink * sink, GstMiniObject * obj)
|
||||||
GstFlowReturn ret;
|
GstFlowReturn ret;
|
||||||
|
|
||||||
while (G_UNLIKELY (sink->need_preroll)) {
|
while (G_UNLIKELY (sink->need_preroll)) {
|
||||||
guint8 obj_type = _PR_IS_NOTHING;
|
guint8 obj_type;
|
||||||
GST_DEBUG_OBJECT (sink, "prerolling object %p", obj);
|
GST_DEBUG_OBJECT (sink, "prerolling object %p", obj);
|
||||||
|
|
||||||
if (G_LIKELY (GST_IS_BUFFER (obj)))
|
obj_type = get_object_type (obj);
|
||||||
obj_type = _PR_IS_BUFFER;
|
|
||||||
else if (GST_IS_EVENT (obj))
|
|
||||||
obj_type = _PR_IS_EVENT;
|
|
||||||
else if (GST_IS_BUFFER_LIST (obj))
|
|
||||||
obj_type = _PR_IS_BUFFERLIST;
|
|
||||||
|
|
||||||
ret = gst_base_sink_preroll_object (sink, obj_type, obj);
|
ret = gst_base_sink_preroll_object (sink, obj_type, obj);
|
||||||
if (ret != GST_FLOW_OK)
|
if (ret != GST_FLOW_OK)
|
||||||
|
@ -3124,14 +3136,15 @@ gst_base_sink_queue_object_unlocked (GstBaseSink * basesink, GstPad * pad,
|
||||||
q = basesink->preroll_queue;
|
q = basesink->preroll_queue;
|
||||||
while (G_UNLIKELY (!g_queue_is_empty (q))) {
|
while (G_UNLIKELY (!g_queue_is_empty (q))) {
|
||||||
GstMiniObject *o;
|
GstMiniObject *o;
|
||||||
|
guint8 ot;
|
||||||
|
|
||||||
o = g_queue_pop_head (q);
|
o = g_queue_pop_head (q);
|
||||||
GST_DEBUG_OBJECT (basesink, "rendering queued object %p", o);
|
GST_DEBUG_OBJECT (basesink, "rendering queued object %p", o);
|
||||||
|
|
||||||
|
ot = get_object_type (o);
|
||||||
|
|
||||||
/* do something with the return value */
|
/* do something with the return value */
|
||||||
ret =
|
ret = gst_base_sink_render_object (basesink, pad, ot, o);
|
||||||
gst_base_sink_render_object (basesink, pad,
|
|
||||||
GST_IS_BUFFER (o) ? _PR_IS_BUFFER : _PR_IS_EVENT, o);
|
|
||||||
if (ret != GST_FLOW_OK)
|
if (ret != GST_FLOW_OK)
|
||||||
goto dequeue_failed;
|
goto dequeue_failed;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue