AudioMixer default track parameters
Move the default initialization of track parameters from the AudioMixer
constructor to getTrackName(). This fixes a bug where the defaults were
only valid the first time a name was allocated.
Also added a switch case for parameter FORMAT.
Change-Id: I07abd3aaf7f4efe9825a761d2bc662aaee2c6db0
diff --git a/services/audioflinger/AudioMixer.cpp b/services/audioflinger/AudioMixer.cpp
index 3f4c19a..0e6ea12 100644
--- a/services/audioflinger/AudioMixer.cpp
+++ b/services/audioflinger/AudioMixer.cpp
@@ -66,32 +66,7 @@
// and mTrackNames is initially 0. However, leave it here until that's verified.
track_t* t = mState.tracks;
for (unsigned i=0 ; i < MAX_NUM_TRACKS ; i++) {
- t->needs = 0;
- t->volume[0] = UNITY_GAIN;
- t->volume[1] = UNITY_GAIN;
- // no initialization needed
- // t->prevVolume[0]
- // t->prevVolume[1]
- t->volumeInc[0] = 0;
- t->volumeInc[1] = 0;
- t->auxLevel = 0;
- t->auxInc = 0;
- // no initialization needed
- // t->prevAuxLevel
- // t->frameCount
- t->channelCount = 2;
- t->enabled = false;
- t->format = 16;
- t->channelMask = AUDIO_CHANNEL_OUT_STEREO;
- t->bufferProvider = NULL;
- t->buffer.raw = NULL;
- // t->buffer.frameCount
- t->hook = NULL;
- t->in = NULL;
- t->resampler = NULL;
- t->sampleRate = mSampleRate;
- t->mainBuffer = NULL;
- t->auxBuffer = NULL;
+ // FIXME redundant per track
t->localTimeFreq = lc.getLocalFreq();
t++;
}
@@ -115,6 +90,38 @@
int n = __builtin_ctz(names);
ALOGV("add track (%d)", n);
mTrackNames |= 1 << n;
+ // assume default parameters for the track, except where noted below
+ track_t* t = &mState.tracks[n];
+ t->needs = 0;
+ t->volume[0] = UNITY_GAIN;
+ t->volume[1] = UNITY_GAIN;
+ // no initialization needed
+ // t->prevVolume[0]
+ // t->prevVolume[1]
+ t->volumeInc[0] = 0;
+ t->volumeInc[1] = 0;
+ t->auxLevel = 0;
+ t->auxInc = 0;
+ // no initialization needed
+ // t->prevAuxLevel
+ // t->frameCount
+ t->channelCount = 2;
+ t->enabled = false;
+ t->format = 16;
+ t->channelMask = AUDIO_CHANNEL_OUT_STEREO;
+ // setBufferProvider(name, AudioBufferProvider *) is required before enable(name)
+ t->bufferProvider = NULL;
+ t->buffer.raw = NULL;
+ // no initialization needed
+ // t->buffer.frameCount
+ t->hook = NULL;
+ t->in = NULL;
+ t->resampler = NULL;
+ t->sampleRate = mSampleRate;
+ // setParameter(name, TRACK, MAIN_BUFFER, mixBuffer) is required before enable(name)
+ t->mainBuffer = NULL;
+ t->auxBuffer = NULL;
+ // see t->localTimeFreq in constructor above
return TRACK0 + n;
}
return -1;
@@ -215,6 +222,9 @@
invalidateState(1 << name);
}
break;
+ case FORMAT:
+ ALOG_ASSERT(valueInt == AUDIO_FORMAT_PCM_16_BIT);
+ break;
default:
LOG_FATAL("bad param");
}