Skip to content

Commit 004f9ba

Browse files
gkastenAndroid (Google) Code Review
authored andcommitted
Merge "AudioMixer can be configured for fewer max tracks"
2 parents 652e18d + 25f1bc4 commit 004f9ba

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

services/audioflinger/AudioMixer.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,15 @@ namespace android {
4242

4343
// ----------------------------------------------------------------------------
4444

45-
AudioMixer::AudioMixer(size_t frameCount, uint32_t sampleRate)
46-
: mTrackNames(0), mSampleRate(sampleRate)
45+
AudioMixer::AudioMixer(size_t frameCount, uint32_t sampleRate, uint32_t maxNumTracks)
46+
: mTrackNames(0), mConfiguredNames((1 << maxNumTracks) - 1), mSampleRate(sampleRate)
4747
{
4848
// AudioMixer is not yet capable of multi-channel beyond stereo
4949
COMPILE_TIME_ASSERT_FUNCTION_SCOPE(2 == MAX_NUM_CHANNELS);
5050

51+
ALOG_ASSERT(maxNumTracks <= MAX_NUM_TRACKS, "maxNumTracks %u > MAX_NUM_TRACKS %u",
52+
maxNumTracks, MAX_NUM_TRACKS);
53+
5154
LocalClock lc;
5255

5356
mState.enabledTracks= 0;
@@ -107,7 +110,7 @@ AudioMixer::~AudioMixer()
107110

108111
int AudioMixer::getTrackName()
109112
{
110-
uint32_t names = ~mTrackNames;
113+
uint32_t names = (~mTrackNames) & mConfiguredNames;
111114
if (names != 0) {
112115
int n = __builtin_ctz(names);
113116
ALOGV("add track (%d)", n);

services/audioflinger/AudioMixer.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ namespace android {
3131
class AudioMixer
3232
{
3333
public:
34-
AudioMixer(size_t frameCount, uint32_t sampleRate);
34+
AudioMixer(size_t frameCount, uint32_t sampleRate,
35+
uint32_t maxNumTracks = MAX_NUM_TRACKS);
3536

3637
/*virtual*/ ~AudioMixer(); // non-virtual saves a v-table, restore if sub-classed
3738

@@ -189,11 +190,17 @@ class AudioMixer
189190
int32_t *outputTemp;
190191
int32_t *resampleTemp;
191192
int32_t reserved[2];
193+
// FIXME allocate dynamically to save some memory when maxNumTracks < MAX_NUM_TRACKS
192194
track_t tracks[MAX_NUM_TRACKS]; __attribute__((aligned(32)));
193195
};
194196

195197
// bitmask of allocated track names, where bit 0 corresponds to TRACK0 etc.
196198
uint32_t mTrackNames;
199+
200+
// bitmask of configured track names; ~0 if maxNumTracks == MAX_NUM_TRACKS,
201+
// but will have fewer bits set if maxNumTracks < MAX_NUM_TRACKS
202+
const uint32_t mConfiguredNames;
203+
197204
const uint32_t mSampleRate;
198205

199206
state_t mState __attribute__((aligned(32)));

0 commit comments

Comments
 (0)