module-rtp: add timer for ck requests

Scale RTP timestamps against the clock, allow some jitter.
Make method to query current RTP timestamps.
This commit is contained in:
Wim Taymans 2023-03-07 09:00:40 +01:00
parent 8e5b9da177
commit c5effbd979
5 changed files with 181 additions and 25 deletions

View file

@ -266,13 +266,14 @@ static void process_audio_capture(void *data)
wanted = size / stride;
filled = spa_ringbuffer_get_write_index(&impl->ring, &expected_timestamp);
if (SPA_LIKELY(impl->io_position))
timestamp = impl->io_position->clock.position;
else
if (SPA_LIKELY(impl->io_position)) {
uint32_t rate = impl->io_position->clock.rate.denom;
timestamp = impl->io_position->clock.position * impl->rate / rate;
} else
timestamp = expected_timestamp;
if (impl->have_sync) {
if (expected_timestamp != timestamp) {
if (SPA_ABS((int32_t)expected_timestamp - (int32_t)timestamp) > 32) {
pw_log_warn("expected %u != timestamp %u", expected_timestamp, timestamp);
impl->have_sync = false;
} else if (filled + wanted > (int32_t)(BUFFER_SIZE / stride)) {