File tree Expand file tree Collapse file tree 2 files changed +14
-4
lines changed
Expand file tree Collapse file tree 2 files changed +14
-4
lines changed Original file line number Diff line number Diff 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
108111int 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);
Original file line number Diff line number Diff line change @@ -31,7 +31,8 @@ namespace android {
3131class AudioMixer
3232{
3333public:
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 )));
You can’t perform that action at this time.
0 commit comments