Merge change 23801 into eclair

* changes:
  fix issue 2096657: Sholes: residue shutter sound heard ONCE while taking a picture AFTER the volume is turned off.
diff --git a/libs/audioflinger/AudioFlinger.cpp b/libs/audioflinger/AudioFlinger.cpp
index ef71641..8cb89c3 100644
--- a/libs/audioflinger/AudioFlinger.cpp
+++ b/libs/audioflinger/AudioFlinger.cpp
@@ -1319,19 +1319,20 @@
             mAudioMixer->setBufferProvider(track);
             mAudioMixer->enable(AudioMixer::MIXING);
 
-            int param;
-            if ( track->mFillingUpStatus == Track::FS_FILLED) {
+            int param = AudioMixer::VOLUME;
+            if (track->mFillingUpStatus == Track::FS_FILLED) {
                 // no ramp for the first volume setting
                 track->mFillingUpStatus = Track::FS_ACTIVE;
                 if (track->mState == TrackBase::RESUMING) {
                     track->mState = TrackBase::ACTIVE;
                     param = AudioMixer::RAMP_VOLUME;
-                } else {
-                    param = AudioMixer::VOLUME;
                 }
-            } else {
+            } else if (cblk->server != 0) {
+                // If the track is stopped before the first frame was mixed,
+                // do not apply ramp
                 param = AudioMixer::RAMP_VOLUME;
             }
+
             mAudioMixer->setParameter(param, AudioMixer::VOLUME0, left);
             mAudioMixer->setParameter(param, AudioMixer::VOLUME1, right);
             mAudioMixer->setParameter(
@@ -1365,7 +1366,7 @@
                     LOGV("BUFFER TIMEOUT: remove(%d) from active list", track->name());
                     tracksToRemove->add(track);
                 }
-                // For tracks using static shared memry buffer, make sure that we have
+                // For tracks using static shared memory buffer, make sure that we have
                 // written enough data to audio hardware before disabling the track
                 // NOTE: this condition with arrive before track->mRetryCount <= 0 so we
                 // don't care about code removing track from active list above.