From 157a97cc98d27d283cd99c32b8c1ca2c0a61c3e1 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 24 Mar 2023 16:13:51 +0100 Subject: [PATCH] bluez5: do rate matching before next timeout Because else we might not have a rate and divide by 0. --- spa/plugins/bluez5/media-source.c | 6 +++--- spa/plugins/bluez5/sco-source.c | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/spa/plugins/bluez5/media-source.c b/spa/plugins/bluez5/media-source.c index 6765183c1..e45363476 100644 --- a/spa/plugins/bluez5/media-source.c +++ b/spa/plugins/bluez5/media-source.c @@ -571,7 +571,7 @@ static int setup_matching(struct impl *this) this->matching = this->following; this->resampling = this->matching || - (port->current_format.info.raw.rate != this->position->clock.rate.denom); + (port->current_format.info.raw.rate != this->position->clock.target_rate.denom); } else { this->matching = false; this->resampling = false; @@ -619,6 +619,8 @@ static void media_on_timeout(struct spa_source *source) rate = 48000; } + setup_matching(this); + this->next_time = now_time + duration * SPA_NSEC_PER_SEC / port->buffer.corr / rate; if (SPA_LIKELY(this->clock)) { @@ -630,8 +632,6 @@ static void media_on_timeout(struct spa_source *source) this->clock->next_nsec = this->next_time; } - setup_matching(this); - if (port->io) { int io_status = port->io->status; int status = produce_buffer(this); diff --git a/spa/plugins/bluez5/sco-source.c b/spa/plugins/bluez5/sco-source.c index 067056215..90b39aff6 100644 --- a/spa/plugins/bluez5/sco-source.c +++ b/spa/plugins/bluez5/sco-source.c @@ -572,7 +572,7 @@ static int setup_matching(struct impl *this) this->matching = this->following; this->resampling = this->matching || - (port->current_format.info.raw.rate != this->position->clock.rate.denom); + (port->current_format.info.raw.rate != this->position->clock.target_rate.denom); } else { this->matching = false; this->resampling = false; @@ -618,6 +618,8 @@ static void sco_on_timeout(struct spa_source *source) rate = 48000; } + setup_matching(this); + this->next_time = now_time + duration * SPA_NSEC_PER_SEC / port->buffer.corr / rate; if (SPA_LIKELY(this->clock)) { @@ -629,8 +631,6 @@ static void sco_on_timeout(struct spa_source *source) this->clock->next_nsec = this->next_time; } - setup_matching(this); - if (port->io) { int io_status = port->io->status; int status = produce_buffer(this);