diff --git a/libobs/obs-audio.c b/libobs/obs-audio.c index 4b1be046bfdae2a2d28e52c591d4662177699c7a..c715b3a6a16029c3d0bdd4f384227b921261b3c0 100644 --- a/libobs/obs-audio.c +++ b/libobs/obs-audio.c @@ -88,6 +88,7 @@ static void ignore_audio(obs_source_t *source, size_t channels, circlebuf_pop_front(&source->audio_input_buf[ch], NULL, source->audio_input_buf[ch].size); + source->last_audio_input_buf_size = 0; source->audio_ts += (uint64_t)num_floats * 1000000000ULL / (uint64_t)sample_rate; } @@ -198,6 +199,8 @@ static inline void discard_audio(struct obs_core_audio *audio, for (size_t ch = 0; ch < channels; ch++) circlebuf_pop_front(&source->audio_input_buf[ch], NULL, size); + source->last_audio_input_buf_size = 0; + #if DEBUG_AUDIO == 1 if (is_audio_source) blog(LOG_DEBUG, "audio discarded, new ts: %"PRIu64, diff --git a/libobs/obs-source.c b/libobs/obs-source.c index 7202408ef8b7dd5686a0b714595e2712a28d9278..b5ae5f15af25873899374e0e131d19ef70a8a8bd 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -985,6 +985,7 @@ static void reset_audio_data(obs_source_t *source, uint64_t os_time) source->audio_input_buf[i].size); } + source->last_audio_input_buf_size = 0; source->audio_ts = os_time; } @@ -1058,6 +1059,8 @@ static void source_output_audio_place(obs_source_t *source, source->audio_input_buf[i].size - (buf_placement + size)); } + + source->last_audio_input_buf_size = 0; } static inline void source_output_audio_push_back(obs_source_t *source, @@ -1074,6 +1077,10 @@ static inline void source_output_audio_push_back(obs_source_t *source, for (size_t i = 0; i < channels; i++) circlebuf_push_back(&source->audio_input_buf[i], in->data[i], size); + + /* reset audio input buffer size to ensure that audio doesn't get + * perpetually cut */ + source->last_audio_input_buf_size = 0; } static inline bool source_muted(obs_source_t *source, uint64_t os_time)