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);