mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
module-rtp: Stop any ongoing timer when starting stream
This commit is contained in:
parent
5f3ae4376e
commit
2f22c1d595
2 changed files with 15 additions and 0 deletions
|
|
@ -450,6 +450,11 @@ done:
|
|||
}
|
||||
}
|
||||
|
||||
static void rtp_audio_stop_timer(struct impl *impl)
|
||||
{
|
||||
set_timer(impl, 0, 0);
|
||||
}
|
||||
|
||||
static void rtp_audio_flush_timeout(struct impl *impl, uint64_t expirations)
|
||||
{
|
||||
if (expirations > 1)
|
||||
|
|
@ -785,6 +790,7 @@ static int rtp_audio_init(struct impl *impl, struct pw_core *core, enum spa_dire
|
|||
impl->stream_events.process = rtp_audio_process_playback;
|
||||
|
||||
impl->receive_rtp = rtp_audio_receive;
|
||||
impl->stop_timer = rtp_audio_stop_timer;
|
||||
impl->flush_timeout = rtp_audio_flush_timeout;
|
||||
|
||||
setup_ptp_sender(impl, core, direction, ptp_driver);
|
||||
|
|
|
|||
|
|
@ -111,6 +111,7 @@ struct impl {
|
|||
* requires filling the ring buffer with something other than nullbytes
|
||||
* (this can happen with DSD for example). */
|
||||
void (*reset_ringbuffer)(struct impl *impl);
|
||||
void (*stop_timer)(struct impl *impl);
|
||||
void (*flush_timeout)(struct impl *impl, uint64_t expirations);
|
||||
void (*deinit)(struct impl *impl, enum spa_direction direction);
|
||||
|
||||
|
|
@ -195,6 +196,14 @@ static int stream_start(struct impl *impl)
|
|||
|
||||
impl->first = true;
|
||||
|
||||
/* Stop the timer now (if the timer is used). Any lingering timer
|
||||
* will try to send data that is stale at this point, especially
|
||||
* after the ring buffer contents get reset. Worse, the timer might
|
||||
* emit a "stopped" state change after a "started" state change
|
||||
* is emitted here, causing undefined behavior. */
|
||||
if (impl->stop_timer)
|
||||
impl->stop_timer(impl);
|
||||
|
||||
impl->reset_ringbuffer(impl);
|
||||
|
||||
rtp_stream_emit_state_changed(impl, true, NULL);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue