Fix all sorts of wacky behavior with dummy audio callback

This fixes the VU meter when the audio output is set to NULL.
This commit is contained in:
Ilari Liusvaara 2013-02-05 01:11:52 +02:00
parent 463eacedf1
commit 1e29e41577

View file

@ -58,16 +58,17 @@ namespace
{ {
int operator()() int operator()()
{ {
float buf[16384]; int16_t buf[16384];
uint64_t last_ts = get_utime(); uint64_t last_ts = get_utime();
while(!dummy_cb_quit) { while(!dummy_cb_quit) {
uint64_t cur_ts = get_utime(); uint64_t cur_ts = get_utime();
uint64_t dt = cur_ts - last_ts; uint64_t dt = cur_ts - last_ts;
last_ts = cur_ts;
unsigned samples = dt / 25; unsigned samples = dt / 25;
if(samples > 16384) if(samples > 16384)
samples = 16384; //Don't get crazy. samples = 16384; //Don't get crazy.
if(dummy_cb_active) { if(dummy_cb_active) {
audioapi_get_voice(buf, samples); audioapi_get_mixed(buf, samples, false);
audioapi_put_voice(NULL, samples); audioapi_put_voice(NULL, samples);
} }
usleep(10000); usleep(10000);
@ -319,7 +320,7 @@ void audioapi_put_voice(float* samples, size_t count)
void audioapi_set_dummy_cb(bool enable) void audioapi_set_dummy_cb(bool enable)
{ {
if(enable) if(enable)
voice_rate = 40000; orig_voice_rate = voice_rate = 40000;
dummy_cb_active = enable; dummy_cb_active = enable;
} }
@ -397,7 +398,7 @@ void audioapi_get_mixed(int16_t* samples, size_t count, bool stereo)
else else
for(size_t i = 0; i < 2 * indata; i++) for(size_t i = 0; i < 2 * indata; i++)
intbuf[i] = 0; intbuf[i] = 0;
music_resampler.resample(in, indata, out, outdata, voice_rate / b.rate, true); music_resampler.resample(in, indata, out, outdata, (double)voice_rate / b.rate, true);
indata_used -= indata; indata_used -= indata;
outdata_used -= outdata; outdata_used -= outdata;
audioapi_get_music(indata_used); audioapi_get_music(indata_used);
@ -426,7 +427,7 @@ void audioapi_get_mixed(int16_t* samples, size_t count, bool stereo)
else else
for(size_t i = 0; i < indata; i++) for(size_t i = 0; i < indata; i++)
intbuf[i] = 0; intbuf[i] = 0;
music_resampler.resample(in, indata, out, outdata, voice_rate / b.rate, false); music_resampler.resample(in, indata, out, outdata, (double)voice_rate / b.rate, false);
indata_used -= indata; indata_used -= indata;
outdata_used -= outdata; outdata_used -= outdata;
audioapi_get_music(indata_used); audioapi_get_music(indata_used);