diff options
author | Glenn Kasten <gkasten@google.com> | 2012-03-21 08:19:04 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-03-21 08:19:04 -0700 |
commit | ccf89b54f973f11082150d02ed957f7e967fbc8b (patch) | |
tree | b3446119a9b6c03dcca98d1d9ee31a83adb8acad /services/audioflinger | |
parent | 63c1faa8dea7feb90255d31ef2a133d8f2818844 (diff) | |
parent | 5c94b6c7689a335e26a86e8a0d04b56dc627738e (diff) | |
download | frameworks_av-ccf89b54f973f11082150d02ed957f7e967fbc8b.zip frameworks_av-ccf89b54f973f11082150d02ed957f7e967fbc8b.tar.gz frameworks_av-ccf89b54f973f11082150d02ed957f7e967fbc8b.tar.bz2 |
Merge "AudioMixer can be configured for fewer max tracks"
Diffstat (limited to 'services/audioflinger')
-rw-r--r-- | services/audioflinger/AudioMixer.cpp | 9 | ||||
-rw-r--r-- | services/audioflinger/AudioMixer.h | 9 |
2 files changed, 14 insertions, 4 deletions
diff --git a/services/audioflinger/AudioMixer.cpp b/services/audioflinger/AudioMixer.cpp index 98852fd..3f4c19a 100644 --- a/services/audioflinger/AudioMixer.cpp +++ b/services/audioflinger/AudioMixer.cpp @@ -42,12 +42,15 @@ namespace android { // ---------------------------------------------------------------------------- -AudioMixer::AudioMixer(size_t frameCount, uint32_t sampleRate) - : mTrackNames(0), mSampleRate(sampleRate) +AudioMixer::AudioMixer(size_t frameCount, uint32_t sampleRate, uint32_t maxNumTracks) + : mTrackNames(0), mConfiguredNames((1 << maxNumTracks) - 1), mSampleRate(sampleRate) { // AudioMixer is not yet capable of multi-channel beyond stereo COMPILE_TIME_ASSERT_FUNCTION_SCOPE(2 == MAX_NUM_CHANNELS); + ALOG_ASSERT(maxNumTracks <= MAX_NUM_TRACKS, "maxNumTracks %u > MAX_NUM_TRACKS %u", + maxNumTracks, MAX_NUM_TRACKS); + LocalClock lc; mState.enabledTracks= 0; @@ -107,7 +110,7 @@ AudioMixer::~AudioMixer() int AudioMixer::getTrackName() { - uint32_t names = ~mTrackNames; + uint32_t names = (~mTrackNames) & mConfiguredNames; if (names != 0) { int n = __builtin_ctz(names); ALOGV("add track (%d)", n); diff --git a/services/audioflinger/AudioMixer.h b/services/audioflinger/AudioMixer.h index ab80a9a..856450c 100644 --- a/services/audioflinger/AudioMixer.h +++ b/services/audioflinger/AudioMixer.h @@ -31,7 +31,8 @@ namespace android { class AudioMixer { public: - AudioMixer(size_t frameCount, uint32_t sampleRate); + AudioMixer(size_t frameCount, uint32_t sampleRate, + uint32_t maxNumTracks = MAX_NUM_TRACKS); /*virtual*/ ~AudioMixer(); // non-virtual saves a v-table, restore if sub-classed @@ -189,11 +190,17 @@ private: int32_t *outputTemp; int32_t *resampleTemp; int32_t reserved[2]; + // FIXME allocate dynamically to save some memory when maxNumTracks < MAX_NUM_TRACKS track_t tracks[MAX_NUM_TRACKS]; __attribute__((aligned(32))); }; // bitmask of allocated track names, where bit 0 corresponds to TRACK0 etc. uint32_t mTrackNames; + + // bitmask of configured track names; ~0 if maxNumTracks == MAX_NUM_TRACKS, + // but will have fewer bits set if maxNumTracks < MAX_NUM_TRACKS + const uint32_t mConfiguredNames; + const uint32_t mSampleRate; state_t mState __attribute__((aligned(32))); |