libobs: Always reset last audio buf size when it changes
This variable is used to detect whether audio has stopped -- if audio stops, it detects that no new data is coming in, and resets the audio position so that it eliminates the chance of causing the audio buffering to go haywire if audio starts up again. However, this variable was not being reset every time the value changes, which it should.
This commit is contained in:
parent
6407707a04
commit
d2f2783b44
@ -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,
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user