diff options
author | Vinay Vaka <vvaka@codeaurora.org> | 2012-05-15 11:38:06 +0530 |
---|---|---|
committer | Giulio Cervera <giulio.cervera@gmail.com> | 2012-09-16 20:48:50 +0200 |
commit | 5e830bf85823d7c37bde8907d2290dab98028d1c (patch) | |
tree | a0bcd3840ab0943aa3ea212ee6db79aa39d2f59b | |
parent | 20be0ac16e807cdc38a729891e689ddaea679448 (diff) | |
download | android_hardware_qcom_media-ics-release.tar.gz android_hardware_qcom_media-ics-release.tar.bz2 android_hardware_qcom_media-ics-release.zip |
audio/msm7630: Fix for 16kHz VoIP call failure issueics-release
-VoIP call with 16kHz is not working
-VoIP call failure because of directoutput thread is created for
VoIP calls 8kHz and 16kHz sample rates, but call failed because
target does not have 16kHz PCM support.
-Inherited needsDirectOutput() and added a condition.
so that direct out put thread is created only for 8kHz.
Modified MVS frame structure to use 8x55 modem compatible
MVS buffer size of 320 bytes.
CRs-Fixed: 362068
Change-Id: Id845e9adf0380e66f0b260fa7cd6d1f6227166da
-rw-r--r-- | audio/msm7x30/AudioHardware.cpp | 4 | ||||
-rw-r--r-- | audio/msm7x30/AudioPolicyManager.cpp | 17 | ||||
-rw-r--r-- | audio/msm7x30/AudioPolicyManager.h | 8 |
3 files changed, 27 insertions, 2 deletions
diff --git a/audio/msm7x30/AudioHardware.cpp b/audio/msm7x30/AudioHardware.cpp index 29c70316..4ee712d7 100644 --- a/audio/msm7x30/AudioHardware.cpp +++ b/audio/msm7x30/AudioHardware.cpp @@ -944,7 +944,7 @@ AudioStreamIn* AudioHardware::openInputStream( #ifdef WITH_QCOM_VOIP_OVER_MVS AudioStreamIn *in; - if(devices == AudioSystem::DEVICE_IN_COMMUNICATION) { + if((devices == AudioSystem::DEVICE_IN_COMMUNICATION)&& (*sampleRate == 8000)) { LOGE("Create Audio stream Voip \n"); AudioStreamInVoip* inVoip = new AudioStreamInVoip(); status_t lStatus = NO_ERROR; @@ -3237,7 +3237,7 @@ ssize_t AudioHardware::AudioStreamOutDirect::write(const void* buffer, size_t by mStandby = false; } } - struct msm_audio_mvs_frame audio_mvs_frame; + struct q5v2_msm_audio_mvs_frame audio_mvs_frame; audio_mvs_frame.frame_type = 0; while (count) { audio_mvs_frame.len = mBufferSize; diff --git a/audio/msm7x30/AudioPolicyManager.cpp b/audio/msm7x30/AudioPolicyManager.cpp index 6a6c0e1e..aed44e78 100644 --- a/audio/msm7x30/AudioPolicyManager.cpp +++ b/audio/msm7x30/AudioPolicyManager.cpp @@ -780,7 +780,24 @@ status_t AudioPolicyManager::stopInput(audio_io_handle_t input) return NO_ERROR; } +#ifdef WITH_QCOM_VOIP_OVER_MVS +bool AudioPolicyManager::needsDirectOuput(AudioSystem::stream_type stream, + uint32_t samplingRate, + uint32_t format, + uint32_t channels, + AudioSystem::output_flags flags, + uint32_t device) +{ + LOGV("AudioPolicyManager::needsDirectOuput stream = %d mPhoneState = %d," + "channels=%d,samplingRate=%d",stream, mPhoneState,channels,samplingRate); + + return ((flags & AudioSystem::OUTPUT_FLAG_DIRECT) || + (format !=0 && !AudioSystem::isLinearPCM(format)) || + ((stream == AudioSystem::VOICE_CALL) && (channels == AudioSystem::CHANNEL_OUT_MONO) + && (samplingRate == 8000 ))); +} +#endif // ---------------------------------------------------------------------------- // AudioPolicyManager // ---------------------------------------------------------------------------- diff --git a/audio/msm7x30/AudioPolicyManager.h b/audio/msm7x30/AudioPolicyManager.h index 0161e2c3..443b0ce7 100644 --- a/audio/msm7x30/AudioPolicyManager.h +++ b/audio/msm7x30/AudioPolicyManager.h @@ -73,6 +73,14 @@ public: int session = 0); virtual void setForceUse(AudioSystem::force_use usage, AudioSystem::forced_config config); status_t startInput(audio_io_handle_t input); +#ifdef WITH_QCOM_VOIP_OVER_MVS + virtual bool needsDirectOuput(AudioSystem::stream_type stream, + uint32_t samplingRate, + uint32_t format, + uint32_t channels, + AudioSystem::output_flags flags, + uint32_t device); +#endif protected: // true is current platform implements a back microphone |