FILE *temp_file;
guint64 writing_pos;
guint64 reading_pos;
+ guint64 max_reading_pos;
/* we need this to send the first new segment event of the stream
* because we can't save it on the file */
gboolean segment_event_received;
queue->cur_level.time, \
queue->max_level.time, \
(guint64) (QUEUE_IS_USING_TEMP_FILE(queue) ? \
- queue->writing_pos - queue->reading_pos : \
+ queue->writing_pos - queue->max_reading_pos : \
queue->queue->length))
#define GST_QUEUE_MUTEX_LOCK(q) G_STMT_START { \
GST_ERROR_OBJECT (queue, "fwrite returned error");
}
queue->writing_pos += size;
+
+ if (queue->writing_pos > queue->max_reading_pos)
+ queue->cur_level.bytes = queue->writing_pos - queue->max_reading_pos;
+ else
+ queue->cur_level.bytes = 0;
}
/* see if there is enough data in the file to read a full buffer */
*buffer = buf;
queue->reading_pos = offset + length;
+ queue->max_reading_pos = MAX (queue->max_reading_pos, queue->reading_pos);
+
+ if (queue->writing_pos > queue->max_reading_pos)
+ queue->cur_level.bytes = queue->writing_pos - queue->max_reading_pos;
+ else
+ queue->cur_level.bytes = 0;
return GST_FLOW_OK;
queue->writing_pos = 0;
queue->reading_pos = 0;
+ queue->max_reading_pos = 0;
return TRUE;
queue->writing_pos = 0;
queue->reading_pos = 0;
+ queue->max_reading_pos = 0;
}
static void
queue->cur_level.buffers++;
queue->cur_level.bytes += size;
queue->bytes_in += size;
+
/* apply new buffer to segment stats */
apply_buffer (queue, buffer, &queue->sink_segment);
/* update the byterate stats */
goto unexpected_event;
queue->segment_event_received = TRUE;
+ if (queue->starting_segment != NULL)
+ gst_event_unref (queue->starting_segment);
queue->starting_segment = event;
+ item = NULL;
}
/* a new segment allows us to accept more buffers if we got UNEXPECTED
* from downstream */
if (!QUEUE_IS_USING_TEMP_FILE (queue))
g_queue_push_tail (queue->queue, item);
+ else
+ gst_mini_object_unref (GST_MINI_OBJECT_CAST (item));
+
GST_QUEUE_SIGNAL_ADD (queue);
}
return FALSE;
if (QUEUE_IS_USING_TEMP_FILE (queue)) {
- return queue->writing_pos == queue->reading_pos;
+ return queue->writing_pos == queue->max_reading_pos;
} else {
if (queue->queue->length == 0)
return TRUE;