msm8660: Code cleanups, fix potential crashes

Change-Id: I5e75d1fb459d1231279c511d35a0b5d51b5d10e0
diff --git a/msm8660/AudioHardware.cpp b/msm8660/AudioHardware.cpp
index 946a26b..f2b578c 100644
--- a/msm8660/AudioHardware.cpp
+++ b/msm8660/AudioHardware.cpp
@@ -1195,8 +1195,8 @@
         uint32_t devices, int *format, uint32_t *channels, uint32_t *sampleRate, status_t *status,
         AudioSystem::audio_in_acoustics acoustic_flags)
 {
-    ALOGD("AudioHardware::openInputStream devices %x format %d channels %d samplerate %d",
-        devices, *format, *channels, *sampleRate);
+    ALOGD("AudioHardware::openInputStream devices %x format %d channels %d samplerate %d in_p=%x lin_p=%x in_v=%x lin_v=%x",
+        devices, *format, *channels, *sampleRate, AUDIO_DEVICE_IN_VOICE_CALL, AudioSystem::DEVICE_IN_VOICE_CALL, AUDIO_DEVICE_IN_COMMUNICATION, AudioSystem::DEVICE_IN_COMMUNICATION);
 
     // check for valid input source
     if (!AudioSystem::isInputDevice((AudioSystem::audio_devices)devices)) {
@@ -1205,7 +1205,7 @@
 
     mLock.lock();
 #ifdef QCOM_VOIP_ENABLED
-    if((devices == AUDIO_DEVICE_IN_COMMUNICATION) && (*sampleRate <= AUDIO_HW_VOIP_SAMPLERATE_16K)) {
+    if((devices == AudioSystem::DEVICE_IN_COMMUNICATION) && (*sampleRate <= AUDIO_HW_VOIP_SAMPLERATE_16K)) {
         ALOGE("Create Audio stream Voip \n");
         AudioStreamInVoip* inVoip = new AudioStreamInVoip();
         status_t lStatus = NO_ERROR;
@@ -3128,12 +3128,14 @@
 {
     ALOGD("AudioStreamInVoip::set devices = %u format = %x pChannels = %u Rate = %u \n",
          devices, *pFormat, *pChannels, *pRate);
+
+    mHardware = hw;
+
     if ((pFormat == 0) || BAD_INDEX == hw->getMvsMode(*pFormat, *pRate)) {
         ALOGE("Audio Format (%x) not supported \n",*pFormat);
         return BAD_VALUE;
     }
 
-    if (*pFormat == AudioSystem::PCM_16_BIT){
     if (pRate == 0) {
         return BAD_VALUE;
     }
@@ -3160,9 +3162,6 @@
        return -1;
     }
 
-    }
-    mHardware = hw;
-
     ALOGD("AudioStreamInVoip::set(%d, %d, %u)", *pFormat, *pChannels, *pRate);
 
     status_t status = NO_INIT;
@@ -3171,46 +3170,6 @@
     if(mHardware->mVoipFd >= 0) {
         mFd = mHardware->mVoipFd;
     } else {
-        ALOGE("open mvs driver");
-        status = ::open(MVS_DEVICE, /*O_WRONLY*/ O_RDWR);
-        if (status < 0) {
-            ALOGE("Cannot open %s errno: %d",MVS_DEVICE, errno);
-            goto Error;
-        }
-        mFd = status;
-        ALOGV("VOPIstreamin : Save the fd %d \n",mFd);
-        mHardware->mVoipFd = mFd;
-        // Increment voip stream count
-
-        // configuration
-        ALOGV("get mvs config");
-        struct msm_audio_mvs_config mvs_config;
-        status = ioctl(mFd, AUDIO_GET_MVS_CONFIG, &mvs_config);
-        if (status < 0) {
-           ALOGE("Cannot read mvs config");
-           goto Error;
-        }
-
-        mvs_config.mvs_mode = mHardware->getMvsMode(*pFormat, *pRate);
-        status = mHardware->getMvsRateType(mvs_config.mvs_mode ,&mvs_config.rate_type);
-        ALOGD("set mvs config mode %d rate_type %d", mvs_config.mvs_mode, mvs_config.rate_type);
-        if (status < 0) {
-            ALOGE("Incorrect mvs type");
-            goto Error;
-        }
-        status = ioctl(mFd, AUDIO_SET_MVS_CONFIG, &mvs_config);
-        if (status < 0) {
-            ALOGE("Cannot set mvs config");
-            goto Error;
-        }
-
-        ALOGV("start mvs");
-        status = ioctl(mFd, AUDIO_START, 0);
-        if (status < 0) {
-            ALOGE("Cannot start mvs driver");
-            goto Error;
-        }
-
         ALOGV("Going to enable RX/TX device for voice stream");
 
         Mutex::Autolock lock(mDeviceSwitchLock);
@@ -3254,14 +3213,54 @@
 #endif
         addToTable(0,cur_rx,cur_tx,VOIP_CALL,true);
 
+        ALOGE("open mvs driver");
+        status = ::open(MVS_DEVICE, /*O_WRONLY*/ O_RDWR);
+        if (status < 0) {
+            ALOGE("Cannot open %s errno: %d",MVS_DEVICE, errno);
+            goto Error;
+        }
+        mFd = status;
+        ALOGV("VOPIstreamin : Save the fd %d \n",mFd);
+        mHardware->mVoipFd = mFd;
+        // Increment voip stream count
+
+        // configuration
+        ALOGV("get mvs config");
+        struct msm_audio_mvs_config mvs_config;
+        status = ioctl(mFd, AUDIO_GET_MVS_CONFIG, &mvs_config);
+        if (status < 0) {
+           ALOGE("Cannot read mvs config");
+           goto Error;
+        }
+
+        mvs_config.mvs_mode = mHardware->getMvsMode(*pFormat, *pRate);
+        status = mHardware->getMvsRateType(mvs_config.mvs_mode ,&mvs_config.rate_type);
+        ALOGD("set mvs config mode %u rate_type %u", mvs_config.mvs_mode, mvs_config.rate_type);
+        if (status < 0) {
+            ALOGE("Incorrect mvs type");
+            goto Error;
+        }
+        status = ioctl(mFd, AUDIO_SET_MVS_CONFIG, &mvs_config);
+        if (status < 0) {
+            ALOGE("Cannot set mvs config");
+            goto Error;
+        }
+
+        ALOGV("start mvs");
+        status = ioctl(mFd, AUDIO_START, 0);
+        if (status < 0) {
+            ALOGE("Cannot start mvs driver");
+            goto Error;
+        }
+
     }
     mFormat =  *pFormat;
     mChannels = *pChannels;
     mSampleRate = *pRate;
     if(mSampleRate == AUDIO_HW_VOIP_SAMPLERATE_8K)
-       mBufferSize = 320;
+       mBufferSize = AUDIO_HW_VOIP_BUFFERSIZE_8K;
     else if(mSampleRate == AUDIO_HW_VOIP_SAMPLERATE_16K)
-       mBufferSize = 640;
+       mBufferSize = AUDIO_HW_VOIP_BUFFERSIZE_16K;
     else
     {
        ALOGE(" unsupported sample rate");
@@ -3373,6 +3372,7 @@
 
 status_t AudioHardware::AudioStreamInVoip::standby()
 {
+    Routing_table* temp = NULL;
     ALOGD("AudioStreamInVoip::standby");
     Mutex::Autolock lock(mHardware->mVoipLock);
 
@@ -3854,7 +3854,7 @@
 
 AudioHardware::AudioStreamOutDirect::AudioStreamOutDirect() :
     mHardware(0), mFd(-1), mStartCount(0), mRetryCount(0), mStandby(true), mDevices(0),mChannels(AudioSystem::CHANNEL_OUT_MONO),
-    mSampleRate(AUDIO_HW_VOIP_SAMPLERATE_8K), mBufferSize(AUDIO_HW_VOIP_BUFFERSIZE_8K)
+    mSampleRate(AUDIO_HW_VOIP_SAMPLERATE_8K), mBufferSize(AUDIO_HW_VOIP_BUFFERSIZE_8K), mFormat(AudioSystem::PCM_16_BIT)
 {
 }
 
@@ -3870,46 +3870,38 @@
 
     mHardware = hw;
 
-    if ((pFormat == 0) || BAD_INDEX == hw->getMvsMode(*pFormat, *pRate)) {
-        ALOGE("Audio Format (%x) not supported \n",*pFormat);
+    // fix up defaults
+    if (lFormat == 0) lFormat = format();
+    if (lChannels == 0) lChannels = channels();
+    if (lRate == 0) lRate = sampleRate();
+
+    // check values
+    if ((lFormat != format()) ||
+        (lChannels != channels()) ||
+        (lRate != sampleRate())) {
+        if (pFormat) *pFormat = format();
+        if (pChannels) *pChannels = channels();
+        if (pRate) *pRate = sampleRate();
+        ALOGE("  AudioStreamOutDirect::set return bad values\n");
         return BAD_VALUE;
     }
 
-    if (*pFormat == AudioSystem::PCM_16_BIT){
-        // fix up defaults
-        if (lFormat == 0) lFormat = format();
-        if (lChannels == 0) lChannels = channels();
-        if (lRate == 0) lRate = sampleRate();
+    if (pFormat) *pFormat = lFormat;
+    if (pChannels) *pChannels = lChannels;
+    if (pRate) *pRate = lRate;
 
-        // check values
-        if ((lFormat != format()) ||
-            (lChannels != channels())) {
-            if (pFormat) *pFormat = format();
-            if (pChannels) *pChannels = channels();
-            ALOGE("  AudioStreamOutDirect::set return bad values\n");
-            return BAD_VALUE;
-        }
-
-        if (pFormat) *pFormat = lFormat;
-        if (pChannels) *pChannels = lChannels;
-        if (pRate) *pRate = lRate;
-
-        if(lRate == AUDIO_HW_VOIP_SAMPLERATE_8K) {
-            mBufferSize = AUDIO_HW_VOIP_BUFFERSIZE_8K;
-        } else if(lRate== AUDIO_HW_VOIP_SAMPLERATE_16K) {
-            mBufferSize = AUDIO_HW_VOIP_BUFFERSIZE_16K;
-        } else {
-            ALOGE("  AudioStreamOutDirect::set return bad values\n");
-            return BAD_VALUE;
-        }
-    }
-
-    
-    // check values
-    mFormat =  lFormat;
+    mDevices = devices;
     mChannels = lChannels;
     mSampleRate = lRate;
-    
+
+    if(mSampleRate == AUDIO_HW_VOIP_SAMPLERATE_8K) {
+        mBufferSize = AUDIO_HW_VOIP_BUFFERSIZE_8K;
+    } else if(mSampleRate == AUDIO_HW_VOIP_SAMPLERATE_16K) {
+        mBufferSize = AUDIO_HW_VOIP_BUFFERSIZE_16K;
+    } else {
+        ALOGE("  AudioStreamOutDirect::set return bad values\n");
+        return BAD_VALUE;
+    }
 
 #ifndef LEGACY_QCOM_VOICE
     if((voip_session_id <= 0)) {
@@ -4080,6 +4072,7 @@
 
 status_t AudioHardware::AudioStreamOutDirect::standby()
 {
+    Routing_table* temp = NULL;
     ALOGD("AudioStreamOutDirect::standby()");
     Mutex::Autolock lock(mHardware->mVoipLock);
     status_t status = NO_ERROR;