mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-20 00:31:13 +00:00
queue2: update current read position before waiting
When we don't have enough bytes in the ringbuffer to satisfy the current request, first update the current read position before waiting. If we don't do that, the ringbuffer might appear full and the writer will never write more bytes to wake us up.
This commit is contained in:
parent
463a8d9abf
commit
ccbeb19881
1 changed files with 4 additions and 8 deletions
|
@ -1304,15 +1304,11 @@ gst_queue2_create_read (GstQueue2 * queue, guint64 offset, guint length,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (read_length == 0) {
|
if (read_length == 0) {
|
||||||
if (QUEUE_IS_USING_RING_BUFFER (queue)
|
if (QUEUE_IS_USING_RING_BUFFER (queue)) {
|
||||||
&& queue->current->max_reading_pos > rpos) {
|
|
||||||
/* protect cached data (data between offset and max_reading_pos)
|
|
||||||
* and update current level */
|
|
||||||
GST_DEBUG_OBJECT (queue,
|
GST_DEBUG_OBJECT (queue,
|
||||||
"protecting cached data [%" G_GUINT64_FORMAT "-%" G_GUINT64_FORMAT
|
"update current position [%" G_GUINT64_FORMAT "-%"
|
||||||
"]", rpos, queue->current->max_reading_pos);
|
G_GUINT64_FORMAT "]", rpos, queue->current->max_reading_pos);
|
||||||
queue->current->max_reading_pos = rpos;
|
update_cur_pos (queue, queue->current, rpos);
|
||||||
update_cur_level (queue, queue->current);
|
|
||||||
}
|
}
|
||||||
GST_DEBUG_OBJECT (queue, "waiting for add");
|
GST_DEBUG_OBJECT (queue, "waiting for add");
|
||||||
GST_QUEUE2_WAIT_ADD_CHECK (queue, queue->srcresult, out_flushing);
|
GST_QUEUE2_WAIT_ADD_CHECK (queue, queue->srcresult, out_flushing);
|
||||||
|
|
Loading…
Reference in a new issue