Merge "Move up initialization of mFormat, mStreamType, and mSharedBuffer earlier"
diff --git a/include/media/AudioTrack.h b/include/media/AudioTrack.h
index 88a5a4c..e59b0df 100644
--- a/include/media/AudioTrack.h
+++ b/include/media/AudioTrack.h
@@ -674,6 +674,7 @@
     audio_stream_type_t     mStreamType;
     uint32_t                mChannelCount;
     audio_channel_mask_t    mChannelMask;
+    sp<IMemory>             mSharedBuffer;
     transfer_type           mTransfer;
 
     // mFrameSize is equal to mFrameSizeAF for non-PCM or 16-bit PCM data.  For 8-bit PCM data, it's
@@ -715,7 +716,6 @@
     bool                    mRetryOnPartialBuffer;  // sleep and retry after partial obtainBuffer()
     uint32_t                mObservedSequence;      // last observed value of mSequence
 
-    sp<IMemory>             mSharedBuffer;
     uint32_t                mLoopPeriod;            // in frames, zero means looping is disabled
 
     uint32_t                mMarkerPosition;        // in wrapping (overflow) frame units
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index 640a2c9..7e6074d 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -222,6 +222,7 @@
         ALOGE("Invalid transfer type %d", transferType);
         return BAD_VALUE;
     }
+    mSharedBuffer = sharedBuffer;
     mTransfer = transferType;
 
     // FIXME "int" here is legacy and will be replaced by size_t later
@@ -250,6 +251,11 @@
     if (streamType == AUDIO_STREAM_DEFAULT) {
         streamType = AUDIO_STREAM_MUSIC;
     }
+    if (uint32_t(streamType) >= AUDIO_STREAM_CNT) {
+        ALOGE("Invalid stream type %d", streamType);
+        return BAD_VALUE;
+    }
+    mStreamType = streamType;
 
     status_t status;
     if (sampleRate == 0) {
@@ -272,6 +278,7 @@
         ALOGE("Invalid format %d", format);
         return BAD_VALUE;
     }
+    mFormat = format;
 
     if (!audio_is_output_channel(channelMask)) {
         ALOGE("Invalid channel mask %#x", channelMask);
@@ -369,9 +376,6 @@
     }
 
     mStatus = NO_ERROR;
-    mStreamType = streamType;
-    mFormat = format;
-    mSharedBuffer = sharedBuffer;
     mState = STATE_STOPPED;
     mUserData = user;
     mLoopPeriod = 0;