summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVinay Vaka <vvaka@codeaurora.org>2012-05-15 11:38:06 +0530
committerGiulio Cervera <giulio.cervera@gmail.com>2012-09-16 20:48:50 +0200
commit5e830bf85823d7c37bde8907d2290dab98028d1c (patch)
treea0bcd3840ab0943aa3ea212ee6db79aa39d2f59b
parent20be0ac16e807cdc38a729891e689ddaea679448 (diff)
downloadandroid_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.cpp4
-rw-r--r--audio/msm7x30/AudioPolicyManager.cpp17
-rw-r--r--audio/msm7x30/AudioPolicyManager.h8
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