mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -05:00
parent
4867edb947
commit
6b50279364
4 changed files with 36 additions and 1 deletions
|
|
@ -678,6 +678,15 @@ static int flush_data(struct impl *this, uint64_t now_time)
|
||||||
spa_system_timerfd_settime(this->data_system, this->timerfd, SPA_FD_TIMER_ABSTIME, &ts, NULL);
|
spa_system_timerfd_settime(this->data_system, this->timerfd, SPA_FD_TIMER_ABSTIME, &ts, NULL);
|
||||||
this->source.mask = SPA_IO_IN;
|
this->source.mask = SPA_IO_IN;
|
||||||
spa_loop_update_source(this->data_loop, &this->source);
|
spa_loop_update_source(this->data_loop, &this->source);
|
||||||
|
|
||||||
|
if (this->clock) {
|
||||||
|
this->clock->nsec = now_time;
|
||||||
|
this->clock->position = this->sample_count;
|
||||||
|
this->clock->duration = this->write_samples;
|
||||||
|
this->clock->delay = queued;
|
||||||
|
this->clock->rate_diff = 1.0f;
|
||||||
|
this->clock->next_nsec = SPA_TIMESPEC_TO_NSEC(&ts.it_value);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
this->start_time = now_time;
|
this->start_time = now_time;
|
||||||
this->sample_time = 0;
|
this->sample_time = 0;
|
||||||
|
|
|
||||||
|
|
@ -442,6 +442,14 @@ static void a2dp_on_ready_read(struct spa_source *source)
|
||||||
this->sample_count += datas[0].chunk->size / port->frame_size;
|
this->sample_count += datas[0].chunk->size / port->frame_size;
|
||||||
spa_list_append(&port->ready, &port->current_buffer->link);
|
spa_list_append(&port->ready, &port->current_buffer->link);
|
||||||
port->current_buffer = NULL;
|
port->current_buffer = NULL;
|
||||||
|
|
||||||
|
if (!this->following && this->clock) {
|
||||||
|
this->clock->nsec = SPA_TIMESPEC_TO_NSEC(&this->now);
|
||||||
|
this->clock->position = this->sample_count;
|
||||||
|
this->clock->delay = 0;
|
||||||
|
this->clock->rate_diff = 1.0f;
|
||||||
|
this->clock->next_nsec = this->clock->nsec;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* done if there are no buffers ready */
|
/* done if there are no buffers ready */
|
||||||
|
|
|
||||||
|
|
@ -354,8 +354,15 @@ static void flush_data(struct impl *this)
|
||||||
spa_log_debug(this->log, "wrote socket data %d", written);
|
spa_log_debug(this->log, "wrote socket data %d", written);
|
||||||
|
|
||||||
next_timeout = get_next_timeout(this, now_time, written / port->frame_size);
|
next_timeout = get_next_timeout(this, now_time, written / port->frame_size);
|
||||||
}
|
|
||||||
|
|
||||||
|
if (this->clock) {
|
||||||
|
this->clock->nsec = now_time;
|
||||||
|
this->clock->position = this->total_samples;
|
||||||
|
this->clock->delay = written / port->frame_size;
|
||||||
|
this->clock->rate_diff = 1.0f;
|
||||||
|
this->clock->next_nsec = next_timeout;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* schedule next timeout */
|
/* schedule next timeout */
|
||||||
set_timeout(this, next_timeout);
|
set_timeout(this, next_timeout);
|
||||||
|
|
|
||||||
|
|
@ -335,6 +335,9 @@ static void sco_on_ready_read(struct spa_source *source)
|
||||||
}
|
}
|
||||||
datas = port->current_buffer->buf->datas;
|
datas = port->current_buffer->buf->datas;
|
||||||
|
|
||||||
|
/* update the current pts */
|
||||||
|
spa_system_clock_gettime(this->data_system, CLOCK_MONOTONIC, &this->now);
|
||||||
|
|
||||||
/* read */
|
/* read */
|
||||||
size_read = read_data(this, (uint8_t *)datas[0].data + port->ready_offset, this->transport->read_mtu);
|
size_read = read_data(this, (uint8_t *)datas[0].data + port->ready_offset, this->transport->read_mtu);
|
||||||
if (size_read < 0) {
|
if (size_read < 0) {
|
||||||
|
|
@ -353,6 +356,14 @@ static void sco_on_ready_read(struct spa_source *source)
|
||||||
this->sample_count += datas[0].chunk->size / port->frame_size;
|
this->sample_count += datas[0].chunk->size / port->frame_size;
|
||||||
spa_list_append(&port->ready, &port->current_buffer->link);
|
spa_list_append(&port->ready, &port->current_buffer->link);
|
||||||
port->current_buffer = NULL;
|
port->current_buffer = NULL;
|
||||||
|
|
||||||
|
if (this->clock) {
|
||||||
|
this->clock->nsec = SPA_TIMESPEC_TO_NSEC(&this->now);
|
||||||
|
this->clock->position = this->sample_count;
|
||||||
|
this->clock->delay = 0;
|
||||||
|
this->clock->rate_diff = 1.0f;
|
||||||
|
this->clock->next_nsec = this->clock->nsec;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* done if there are no buffers ready */
|
/* done if there are no buffers ready */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue