mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-09-20 04:42:18 +02:00
libobs: Delay stop detection of audio source
Delay the "audio stopped" detection by one audio tick to ensure that audio doesn't get intentionally cut out in some situations
This commit is contained in:
parent
c422d84d6e
commit
dc4e205008
@ -108,10 +108,20 @@ static bool discard_if_stopped(obs_source_t *source, size_t channels)
|
||||
/* if perpetually pending data, it means the audio has stopped,
|
||||
* so clear the audio data */
|
||||
if (last_size == size) {
|
||||
if (!source->pending_stop) {
|
||||
source->pending_stop = true;
|
||||
#if DEBUG_AUDIO == 1
|
||||
blog(LOG_DEBUG, "doing pending stop trick: '%s'",
|
||||
source->context.name);
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
for (size_t ch = 0; ch < channels; ch++)
|
||||
circlebuf_pop_front(&source->audio_input_buf[ch], NULL,
|
||||
source->audio_input_buf[ch].size);
|
||||
|
||||
source->pending_stop = false;
|
||||
source->audio_ts = 0;
|
||||
source->last_audio_input_buf_size = 0;
|
||||
#if DEBUG_AUDIO == 1
|
||||
@ -212,6 +222,7 @@ static inline void discard_audio(struct obs_core_audio *audio,
|
||||
ts->end);
|
||||
#endif
|
||||
|
||||
source->pending_stop = false;
|
||||
source->audio_ts = ts->end;
|
||||
}
|
||||
|
||||
|
@ -562,6 +562,7 @@ struct obs_source {
|
||||
/* audio */
|
||||
bool audio_failed;
|
||||
bool audio_pending;
|
||||
bool pending_stop;
|
||||
bool user_muted;
|
||||
bool muted;
|
||||
struct obs_source *next_audio_source;
|
||||
|
Loading…
Reference in New Issue
Block a user