stream: add capture queued time calculation

Take the size of a newly captured buffer as the difference between
previous and current tick and use this to calculate the queued size.
This commit is contained in:
Wim Taymans 2018-07-19 16:55:00 +02:00
parent b67fb6fa5b
commit 892b57c55d
2 changed files with 18 additions and 7 deletions

View file

@ -657,9 +657,12 @@ static int impl_node_process_input(struct spa_node *node)
struct pw_stream *stream = &impl->this;
struct spa_io_buffers *io = impl->io;
struct buffer *b;
uint64_t size;
pw_log_trace("stream %p: process in %d %d %"PRIu64" %"PRIi64, stream,
io->status, io->buffer_id, impl->time.ticks, impl->time.delay);
size = impl->time.ticks - impl->dequeued.incount;
pw_log_trace("stream %p: process in %d %d %"PRIu64" %"PRIi64" %"PRIu64, stream,
io->status, io->buffer_id, impl->time.ticks, impl->time.delay, size);
if (io->status != SPA_STATUS_HAVE_BUFFER)
goto done;
@ -667,6 +670,8 @@ static int impl_node_process_input(struct spa_node *node)
if ((b = get_buffer(stream, io->buffer_id)) == NULL)
goto done;
b->this.size = size;
/* push new buffer */
if (push_queue(impl, &impl->dequeued, b) == 0)
call_process(impl);
@ -1138,9 +1143,11 @@ int pw_stream_get_time(struct pw_stream *stream, struct pw_time *time)
} while (impl->seq1 != seq);
if (impl->direction == SPA_DIRECTION_INPUT)
time->queued = time->queued - impl->dequeued.outcount;
time->queued = (int64_t)(time->queued - impl->dequeued.outcount);
else
time->queued = impl->queued.incount - time->queued;
time->queued = (int64_t)(impl->queued.incount - time->queued);
pw_log_trace("%ld %d/%d %ld", time->ticks, time->rate.num, time->rate.denom, time->queued);
return 0;
}

View file

@ -164,9 +164,13 @@ enum pw_stream_state {
};
struct pw_buffer {
struct spa_buffer *buffer; /* the spa buffer */
void *user_data; /* user data attached to the buffer */
uint64_t size; /* size to keep track of queued size */
struct spa_buffer *buffer; /**< the spa buffer */
void *user_data; /**< user data attached to the buffer */
uint64_t size; /**< For input streams, this field is set by pw_stream
* with the duration of the buffer in ticks.
* For output streams, this field is set by the user.
* This field is added for all queued buffers and
* returned in the time info. */
};
/** Events for a stream */