modules: use pw_stream_set_rate() when we can

This commit is contained in:
Wim Taymans 2024-11-22 09:49:27 +01:00
parent 433afeaa1e
commit 804df3389a
7 changed files with 32 additions and 72 deletions

View file

@ -37,7 +37,7 @@ static void vban_audio_process_playback(void *data)
pw_log(level, "underrun %d/%u < %u",
avail, target_buffer, wanted);
} else {
float error, corr;
double error, corr;
if (impl->first) {
if ((uint32_t)avail > target_buffer) {
uint32_t skip = avail - target_buffer;
@ -54,19 +54,16 @@ static void vban_audio_process_playback(void *data)
}
/* try to adjust our playback rate to keep the
* requested target_buffer bytes in the ringbuffer */
error = (float)target_buffer - (float)avail;
error = SPA_CLAMP(error, -impl->max_error, impl->max_error);
error = (double)target_buffer - (double)avail;
error = SPA_CLAMPD(error, -impl->max_error, impl->max_error);
corr = (float)spa_dll_update(&impl->dll, error);
corr = spa_dll_update(&impl->dll, error);
pw_log_debug("avail:%u target:%u error:%f corr:%f", avail,
target_buffer, error, corr);
if (impl->io_rate_match) {
SPA_FLAG_SET(impl->io_rate_match->flags,
SPA_IO_RATE_MATCH_FLAG_ACTIVE);
impl->io_rate_match->rate = 1.0f / corr;
}
pw_stream_set_rate(impl->stream, 1.0 / corr);
spa_ringbuffer_read_data(&impl->ring,
impl->buffer,
BUFFER_SIZE,

View file

@ -65,12 +65,11 @@ struct impl {
struct spa_ringbuffer ring;
uint8_t buffer[BUFFER_SIZE];
struct spa_io_rate_match *io_rate_match;
struct spa_io_position *io_position;
struct spa_dll dll;
double corr;
uint32_t target_buffer;
float max_error;
double max_error;
float last_timestamp;
float last_time;
@ -108,9 +107,6 @@ static void stream_io_changed(void *data, uint32_t id, void *area, uint32_t size
{
struct impl *impl = data;
switch (id) {
case SPA_IO_RateMatch:
impl->io_rate_match = area;
break;
case SPA_IO_Position:
impl->io_position = area;
break;