Fix bug: don't normalize or compress AC3 samples.

This commit is contained in:
Johns 2012-04-24 16:02:07 +02:00
parent 47d840bbff
commit 3b5c1adef2
2 changed files with 28 additions and 20 deletions

View File

@ -1,6 +1,8 @@
User johns
Date:
Release Version 0.5.1
Fix bug: don't normalize or compress pass-through samples.
Make audio ring buffer size a multiple of 3,5,7,8.
Add reset ring buffer support.
Fix bug: alloca wrong size for audio buffer.

46
audio.c
View File

@ -3570,7 +3570,7 @@ void AudioEnqueue(const void *samples, int count)
int16_t *buffer;
int frames;
#ifdef DEBUG
#ifdef noDEBUG
static uint32_t last_tick;
uint32_t tick;
@ -3585,28 +3585,34 @@ void AudioEnqueue(const void *samples, int count)
Debug(3, "audio: enqueue not ready\n");
return; // no setup yet
}
//
// Convert / resample input to hardware format
//
frames =
count / (AudioRing[AudioRingWrite].InChannels * AudioBytesProSample);
buffer =
alloca(frames * AudioRing[AudioRingWrite].HwChannels *
AudioBytesProSample);
AudioResample(samples, AudioRing[AudioRingWrite].InChannels, frames,
buffer, AudioRing[AudioRingWrite].HwChannels);
if (AudioRing[AudioRingWrite].UseAc3) {
buffer = (void*)samples;
} else {
//
// Convert / resample input to hardware format
//
frames =
count / (AudioRing[AudioRingWrite].InChannels *
AudioBytesProSample);
buffer =
alloca(frames * AudioRing[AudioRingWrite].HwChannels *
AudioBytesProSample);
AudioResample(samples, AudioRing[AudioRingWrite].InChannels, frames,
buffer, AudioRing[AudioRingWrite].HwChannels);
count =
frames * AudioRing[AudioRingWrite].HwChannels * AudioBytesProSample;
count =
frames * AudioRing[AudioRingWrite].HwChannels *
AudioBytesProSample;
// resample into ring-buffer is too complex in the case of a roundabout
// just use a temporary buffer
// resample into ring-buffer is too complex in the case of a roundabout
// just use a temporary buffer
if (AudioCompression) { // in place operation
AudioCompressor(buffer, count);
}
if (AudioNormalize) { // in place operation
AudioNormalizer(buffer, count);
if (AudioCompression) { // in place operation
AudioCompressor(buffer, count);
}
if (AudioNormalize) { // in place operation
AudioNormalizer(buffer, count);
}
}
n = RingBufferWrite(AudioRing[AudioRingWrite].RingBuffer, buffer, count);