mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-31 22:25:38 -04:00
stream: improve the timing info
Always copy the timing info when capturing, not only when there is a buffer to dequeue. We can update the rate_queued and rate_size with defaults when we don't have rate matching. We can then also directly use the rate_size field to update the buffer requested size.
This commit is contained in:
parent
1d8a96d240
commit
9af26d1718
1 changed files with 8 additions and 5 deletions
|
|
@ -425,7 +425,6 @@ static inline uint32_t update_requested(struct stream *impl)
|
||||||
{
|
{
|
||||||
uint32_t index, id;
|
uint32_t index, id;
|
||||||
struct buffer *buffer;
|
struct buffer *buffer;
|
||||||
struct spa_io_rate_match *r = impl->rate_match;
|
|
||||||
|
|
||||||
if (spa_ringbuffer_get_read_index(&impl->dequeued.ring, &index) < 1) {
|
if (spa_ringbuffer_get_read_index(&impl->dequeued.ring, &index) < 1) {
|
||||||
pw_log_debug("%p: no free buffers %d", impl, impl->n_buffers);
|
pw_log_debug("%p: no free buffers %d", impl, impl->n_buffers);
|
||||||
|
|
@ -434,7 +433,7 @@ static inline uint32_t update_requested(struct stream *impl)
|
||||||
|
|
||||||
id = impl->dequeued.ids[index & MASK_BUFFERS];
|
id = impl->dequeued.ids[index & MASK_BUFFERS];
|
||||||
buffer = &impl->buffers[id];
|
buffer = &impl->buffers[id];
|
||||||
buffer->this.requested = r ? r->size : impl->quantum;
|
buffer->this.requested = impl->rate_size;
|
||||||
|
|
||||||
pw_log_trace_fp("%p: update buffer:%u req:%"PRIu64, impl, id, buffer->this.requested);
|
pw_log_trace_fp("%p: update buffer:%u req:%"PRIu64, impl, id, buffer->this.requested);
|
||||||
|
|
||||||
|
|
@ -691,6 +690,9 @@ static inline void copy_position(struct stream *impl, int64_t queued)
|
||||||
if (SPA_LIKELY(impl->rate_match != NULL)) {
|
if (SPA_LIKELY(impl->rate_match != NULL)) {
|
||||||
impl->rate_queued = impl->rate_match->delay;
|
impl->rate_queued = impl->rate_match->delay;
|
||||||
impl->rate_size = impl->rate_match->size;
|
impl->rate_size = impl->rate_match->size;
|
||||||
|
} else {
|
||||||
|
impl->rate_queued = 0;
|
||||||
|
impl->rate_size = impl->quantum;
|
||||||
}
|
}
|
||||||
SPA_SEQ_WRITE(impl->seq);
|
SPA_SEQ_WRITE(impl->seq);
|
||||||
}
|
}
|
||||||
|
|
@ -1068,10 +1070,11 @@ static int impl_node_process_input(void *object)
|
||||||
SPA_ATOMIC_INC(b->busy->count);
|
SPA_ATOMIC_INC(b->busy->count);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!queue_is_empty(impl, &impl->dequeued)) {
|
|
||||||
copy_position(impl, impl->dequeued.incount);
|
copy_position(impl, impl->dequeued.incount);
|
||||||
|
|
||||||
|
if (!queue_is_empty(impl, &impl->dequeued))
|
||||||
call_process(impl);
|
call_process(impl);
|
||||||
}
|
|
||||||
|
|
||||||
if (io->status != SPA_STATUS_NEED_DATA || io->buffer_id == SPA_ID_INVALID) {
|
if (io->status != SPA_STATUS_NEED_DATA || io->buffer_id == SPA_ID_INVALID) {
|
||||||
/* pop buffer to recycle */
|
/* pop buffer to recycle */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue