Communicate audio session ID to downmixer

The audio downmixer effect might need the audio session Id, pass it
 from the track creation in AudioFlinger to the downmix effect
 creation in AudioMixer.

Change-Id: I836873eebd6711f1048fce81cd2eb29b94f0ad0c
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index a5d4c6c..dffa099 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -3383,9 +3383,9 @@
 }
 
 // getTrackName_l() must be called with ThreadBase::mLock held
-int AudioFlinger::MixerThread::getTrackName_l(audio_channel_mask_t channelMask)
+int AudioFlinger::MixerThread::getTrackName_l(audio_channel_mask_t channelMask, int sessionId)
 {
-    return mAudioMixer->getTrackName(channelMask);
+    return mAudioMixer->getTrackName(channelMask, sessionId);
 }
 
 // deleteTrackName_l() must be called with ThreadBase::mLock held
@@ -3828,7 +3828,8 @@
 }
 
 // getTrackName_l() must be called with ThreadBase::mLock held
-int AudioFlinger::DirectOutputThread::getTrackName_l(audio_channel_mask_t channelMask)
+int AudioFlinger::DirectOutputThread::getTrackName_l(audio_channel_mask_t channelMask,
+        int sessionId)
 {
     return 0;
 }
@@ -4293,7 +4294,7 @@
         // 16 bit because data is converted to 16 bit before being stored in buffer by AudioTrack
         mCblk->frameSize = audio_is_linear_pcm(format) ? mChannelCount * sizeof(int16_t) : sizeof(uint8_t);
         // to avoid leaking a track name, do not allocate one unless there is an mCblk
-        mName = thread->getTrackName_l(channelMask);
+        mName = thread->getTrackName_l(channelMask, sessionId);
         mCblk->mName = mName;
         if (mName < 0) {
             ALOGE("no more track names available");
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index 5ffa5a6..216e3fa 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -1086,7 +1086,7 @@
 
         // Allocate a track name for a given channel mask.
         //   Returns name >= 0 if successful, -1 on failure.
-        virtual int             getTrackName_l(audio_channel_mask_t channelMask) = 0;
+        virtual int             getTrackName_l(audio_channel_mask_t channelMask, int sessionId) = 0;
         virtual void            deleteTrackName_l(int name) = 0;
 
         // Time to sleep between cycles when:
@@ -1254,7 +1254,7 @@
         virtual     bool        checkForNewParameters_l();
 
     protected:
-        virtual     int         getTrackName_l(audio_channel_mask_t channelMask);
+        virtual     int         getTrackName_l(audio_channel_mask_t channelMask, int sessionId);
         virtual     void        deleteTrackName_l(int name);
         virtual     uint32_t    activeSleepTimeUs() const;
         virtual     uint32_t    idleSleepTimeUs() const;
diff --git a/services/audioflinger/AudioMixer.cpp b/services/audioflinger/AudioMixer.cpp
index 183c1f3..1f13625 100644
--- a/services/audioflinger/AudioMixer.cpp
+++ b/services/audioflinger/AudioMixer.cpp
@@ -163,7 +163,7 @@
     delete [] mState.resampleTemp;
 }
 
-int AudioMixer::getTrackName(audio_channel_mask_t channelMask)
+int AudioMixer::getTrackName(audio_channel_mask_t channelMask, int sessionId)
 {
     uint32_t names = (~mTrackNames) & mConfiguredNames;
     if (names != 0) {
@@ -189,6 +189,7 @@
         t->enabled = false;
         t->format = 16;
         t->channelMask = AUDIO_CHANNEL_OUT_STEREO;
+        t->sessionId = sessionId;
         // setBufferProvider(name, AudioBufferProvider *) is required before enable(name)
         t->bufferProvider = NULL;
         t->buffer.raw = NULL;
@@ -269,7 +270,7 @@
     }
 
     if (EffectCreate(&dwnmFxDesc.uuid,
-            -2 /*sessionId*/, -2 /*ioId*/,// both not relevant here, using random value
+            pTrack->sessionId /*sessionId*/, -2 /*ioId not relevant here, using random value*/,
             &pDbp->mDownmixHandle/*pHandle*/) != 0) {
         ALOGE("prepareTrackForDownmix(%d) fails: error creating downmixer effect", trackName);
         goto noDownmixForActiveTrack;
diff --git a/services/audioflinger/AudioMixer.h b/services/audioflinger/AudioMixer.h
index 6c80253..dc468ff 100644
--- a/services/audioflinger/AudioMixer.h
+++ b/services/audioflinger/AudioMixer.h
@@ -91,7 +91,7 @@
     // For all APIs with "name": TRACK0 <= name < TRACK0 + MAX_NUM_TRACKS
 
     // Allocate a track name.  Returns new track name if successful, -1 on failure.
-    int         getTrackName(audio_channel_mask_t channelMask);
+    int         getTrackName(audio_channel_mask_t channelMask, int sessionId);
 
     // Free an allocated track by name
     void        deleteTrackName(int name);
@@ -190,7 +190,9 @@
 
         DownmixerBufferProvider* downmixerBufferProvider; // 4 bytes
 
-        int32_t     padding[3];
+        int32_t     sessionId;
+
+        int32_t     padding[2];
 
         // 16-byte boundary