mirror of
https://gitlab.freedesktop.org/pipewire/pipewire
synced 2024-10-02 06:04:13 +00:00
stream: improve queued_buffers reporting
Also add the queued buffers in the converter to the pw_time.queued_buffers field. This means that queued_buffers + avail_buffers always equal the total amount of allocated buffers, which makes more sense. Fixes #3592
This commit is contained in:
parent
cb26ea2dfa
commit
3d8c7c40b5
|
@ -2340,6 +2340,7 @@ int pw_stream_get_time_n(struct pw_stream *stream, struct pw_time *time, size_t
|
||||||
struct stream *impl = SPA_CONTAINER_OF(stream, struct stream, this);
|
struct stream *impl = SPA_CONTAINER_OF(stream, struct stream, this);
|
||||||
uintptr_t seq1, seq2;
|
uintptr_t seq1, seq2;
|
||||||
uint32_t buffered, quantum, index;
|
uint32_t buffered, quantum, index;
|
||||||
|
int32_t avail_buffers;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
seq1 = SPA_SEQ_READ(impl->seq);
|
seq1 = SPA_SEQ_READ(impl->seq);
|
||||||
|
@ -2358,19 +2359,23 @@ int pw_stream_get_time_n(struct pw_stream *stream, struct pw_time *time, size_t
|
||||||
time->delay += (impl->latency.min_rate + impl->latency.max_rate) / 2;
|
time->delay += (impl->latency.min_rate + impl->latency.max_rate) / 2;
|
||||||
time->delay += ((impl->latency.min_ns + impl->latency.max_ns) / 2) * time->rate.denom / SPA_NSEC_PER_SEC;
|
time->delay += ((impl->latency.min_ns + impl->latency.max_ns) / 2) * time->rate.denom / SPA_NSEC_PER_SEC;
|
||||||
|
|
||||||
|
avail_buffers = spa_ringbuffer_get_read_index(&impl->dequeued.ring, &index);
|
||||||
|
avail_buffers = SPA_CLAMP(avail_buffers, 0, (int32_t)impl->n_buffers);
|
||||||
|
|
||||||
if (size >= offsetof(struct pw_time, queued_buffers))
|
if (size >= offsetof(struct pw_time, queued_buffers))
|
||||||
time->buffered = buffered;
|
time->buffered = buffered;
|
||||||
if (size >= offsetof(struct pw_time, avail_buffers))
|
if (size >= offsetof(struct pw_time, avail_buffers))
|
||||||
time->queued_buffers = spa_ringbuffer_get_read_index(&impl->queued.ring, &index);
|
time->queued_buffers = impl->n_buffers - avail_buffers;
|
||||||
if (size >= sizeof(struct pw_time))
|
if (size >= sizeof(struct pw_time))
|
||||||
time->avail_buffers = spa_ringbuffer_get_read_index(&impl->dequeued.ring, &index);
|
time->avail_buffers = avail_buffers;
|
||||||
|
|
||||||
pw_log_trace_fp("%p: %"PRIi64" %"PRIi64" %"PRIu64" %d/%d %"PRIu64" %"
|
pw_log_trace_fp("%p: %"PRIi64" %"PRIi64" %"PRIu64" %d/%d %"PRIu64" %"
|
||||||
PRIu64" %"PRIu64" %"PRIu64" %"PRIu64, stream,
|
PRIu64" %"PRIu64" %"PRIu64" %"PRIu64" %d/%d", stream,
|
||||||
time->now, time->delay, time->ticks,
|
time->now, time->delay, time->ticks,
|
||||||
time->rate.num, time->rate.denom, time->queued,
|
time->rate.num, time->rate.denom, time->queued,
|
||||||
impl->dequeued.outcount, impl->dequeued.incount,
|
impl->dequeued.outcount, impl->dequeued.incount,
|
||||||
impl->queued.outcount, impl->queued.incount);
|
impl->queued.outcount, impl->queued.incount,
|
||||||
|
avail_buffers, impl->n_buffers);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue