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:
jp9000 2016-01-31 14:04:54 -08:00
parent 6407707a04
commit d2f2783b44
2 changed files with 10 additions and 0 deletions

View File

@ -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,

View File

@ -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)