queue2: fix calculation of available ringbuffer data

This commit is contained in:
Wim Taymans 2010-06-16 11:20:00 +02:00
parent 8de7cc2222
commit cb6d9b071e

View file

@ -1193,11 +1193,20 @@ gst_queue2_create_read (GstQueue2 * queue, guint64 offset, guint length,
read_length = 0; read_length = 0;
if (QUEUE_IS_USING_RING_BUFFER (queue)) { if (QUEUE_IS_USING_RING_BUFFER (queue)) {
guint64 level;
/* calculate how far away the offset is */
if (queue->current->writing_pos > offset)
level = queue->current->writing_pos - offset;
else
level = 0;
GST_DEBUG_OBJECT (queue, GST_DEBUG_OBJECT (queue,
"reading %" G_GUINT64_FORMAT ", writing %" G_GUINT64_FORMAT, "reading %" G_GUINT64_FORMAT ", writing %" G_GUINT64_FORMAT
queue->current->reading_pos, queue->current->writing_pos); ", level %" G_GUINT64_FORMAT,
if (queue->current->writing_pos - queue->current->reading_pos >= queue->current->reading_pos, queue->current->writing_pos, level);
queue->ring_buffer_max_size) {
if (level >= queue->ring_buffer_max_size) {
/* we don't have the data but if we have a ring buffer that is full, we /* we don't have the data but if we have a ring buffer that is full, we
* need to read */ * need to read */
GST_DEBUG_OBJECT (queue, GST_DEBUG_OBJECT (queue,
@ -1246,6 +1255,7 @@ gst_queue2_create_read (GstQueue2 * queue, guint64 offset, guint length,
read_length -= read_return; read_length -= read_return;
block_length = read_length; block_length = read_length;
remaining -= read_return; remaining -= read_return;
queue->current->reading_pos += read_return; queue->current->reading_pos += read_return;
} }
GST_QUEUE2_SIGNAL_DEL (queue); GST_QUEUE2_SIGNAL_DEL (queue);