ToneGenerator: fix use of STREAM_VOICE_CALL
ToneGenerator is only used for signalling, never for voice.
In order to use proper audio attributes usage and content type, convert
requests to play on stream VOICE_CALL to stream DTMF.
This will produce consistent routing and volume behavior when apps use
DTMF or VOICE_CALL streams.
Also use audio attributes when creating the AudioTrack
Test: CTS for ToneGenerator, voice and VoIP calls
Change-Id: Ic67abaeed0ea09f08ad5586cebe858e74fe21af9
diff --git a/media/libaudioclient/ToneGenerator.cpp b/media/libaudioclient/ToneGenerator.cpp
index cfb5be6..5a33975 100644
--- a/media/libaudioclient/ToneGenerator.cpp
+++ b/media/libaudioclient/ToneGenerator.cpp
@@ -20,6 +20,7 @@
#include <math.h>
#include <utils/Log.h>
#include <cutils/properties.h>
+#include <media/AudioPolicyHelper.h>
#include "media/ToneGenerator.h"
@@ -1044,7 +1045,7 @@
}
}
- ALOGV("startTone");
+ ALOGV("startTone toneType %d", toneType);
mLock.lock();
@@ -1196,9 +1197,16 @@
mpAudioTrack = new AudioTrack();
ALOGV("AudioTrack(%p) created", mpAudioTrack.get());
+ audio_attributes_t attr;
+ audio_stream_type_t streamType = mStreamType;
+ if (mStreamType == AUDIO_STREAM_VOICE_CALL) {
+ streamType = AUDIO_STREAM_DTMF;
+ }
+ stream_type_to_audio_attributes(streamType, &attr);
+
const size_t frameCount = mProcessSize;
status_t status = mpAudioTrack->set(
- mStreamType,
+ AUDIO_STREAM_DEFAULT,
0, // sampleRate
AUDIO_FORMAT_PCM_16_BIT,
AUDIO_CHANNEL_OUT_MONO,
@@ -1210,7 +1218,11 @@
0, // sharedBuffer
mThreadCanCallJava,
AUDIO_SESSION_ALLOCATE,
- AudioTrack::TRANSFER_CALLBACK);
+ AudioTrack::TRANSFER_CALLBACK,
+ nullptr,
+ AUDIO_UID_INVALID,
+ -1,
+ &attr);
if (status != NO_ERROR) {
ALOGE("AudioTrack(%p) set failed with error %d", mpAudioTrack.get(), status);