зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1626081 - Add a pref to disable the audio output stream routing on Android. r=achronop
Differential Revision: https://phabricator.services.mozilla.com/D74274
This commit is contained in:
Родитель
c22eb3baf0
Коммит
32d217338f
|
@ -52,6 +52,7 @@
|
||||||
#define PREF_CUBEB_LOGGING_LEVEL "media.cubeb.logging_level"
|
#define PREF_CUBEB_LOGGING_LEVEL "media.cubeb.logging_level"
|
||||||
// Hidden pref used by tests to force failure to obtain cubeb context
|
// Hidden pref used by tests to force failure to obtain cubeb context
|
||||||
#define PREF_CUBEB_FORCE_NULL_CONTEXT "media.cubeb.force_null_context"
|
#define PREF_CUBEB_FORCE_NULL_CONTEXT "media.cubeb.force_null_context"
|
||||||
|
#define PREF_CUBEB_OUTPUT_VOICE_ROUTING "media.cubeb.output_voice_routing"
|
||||||
// Hidden pref to disable BMO 1427011 experiment; can be removed once proven.
|
// Hidden pref to disable BMO 1427011 experiment; can be removed once proven.
|
||||||
#define PREF_CUBEB_DISABLE_DEVICE_SWITCHING \
|
#define PREF_CUBEB_DISABLE_DEVICE_SWITCHING \
|
||||||
"media.cubeb.disable_device_switching"
|
"media.cubeb.disable_device_switching"
|
||||||
|
@ -100,6 +101,7 @@ bool sCubebMTGLatencyPrefSet = false;
|
||||||
bool sAudioStreamInitEverSucceeded = false;
|
bool sAudioStreamInitEverSucceeded = false;
|
||||||
bool sCubebForceNullContext = false;
|
bool sCubebForceNullContext = false;
|
||||||
bool sCubebDisableDeviceSwitching = true;
|
bool sCubebDisableDeviceSwitching = true;
|
||||||
|
bool sRouteOutputAsVoice = false;
|
||||||
#ifdef MOZ_CUBEB_REMOTING
|
#ifdef MOZ_CUBEB_REMOTING
|
||||||
bool sCubebSandbox = false;
|
bool sCubebSandbox = false;
|
||||||
size_t sAudioIPCPoolSize;
|
size_t sAudioIPCPoolSize;
|
||||||
|
@ -267,6 +269,13 @@ void PrefChanged(const char* aPref, void* aClosure) {
|
||||||
AUDIOIPC_STACK_SIZE_DEFAULT);
|
AUDIOIPC_STACK_SIZE_DEFAULT);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
else if (strcmp(aPref, PREF_CUBEB_OUTPUT_VOICE_ROUTING) == 0) {
|
||||||
|
StaticMutexAutoLock lock(sMutex);
|
||||||
|
sRouteOutputAsVoice = Preferences::GetBool(aPref);
|
||||||
|
MOZ_LOG(gCubebLog, LogLevel::Verbose,
|
||||||
|
("%s: %s", PREF_CUBEB_OUTPUT_VOICE_ROUTING,
|
||||||
|
sRouteOutputAsVoice ? "true" : "false"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GetFirstStream() {
|
bool GetFirstStream() {
|
||||||
|
@ -676,6 +685,8 @@ cubeb_stream_prefs GetDefaultStreamPrefs() {
|
||||||
return CUBEB_STREAM_PREF_NONE;
|
return CUBEB_STREAM_PREF_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RouteOutputAsVoice() { return sRouteOutputAsVoice; }
|
||||||
|
|
||||||
#ifdef MOZ_WIDGET_ANDROID
|
#ifdef MOZ_WIDGET_ANDROID
|
||||||
uint32_t AndroidGetAudioOutputSampleRate() {
|
uint32_t AndroidGetAudioOutputSampleRate() {
|
||||||
int32_t sample_rate = java::GeckoAppShell::GetAudioOutputSampleRate();
|
int32_t sample_rate = java::GeckoAppShell::GetAudioOutputSampleRate();
|
||||||
|
|
|
@ -51,6 +51,10 @@ char* GetForcedOutputDevice();
|
||||||
// to switch to "communication mode", which might change audio routing,
|
// to switch to "communication mode", which might change audio routing,
|
||||||
// bluetooth communication type, etc.
|
// bluetooth communication type, etc.
|
||||||
void SetInCommunication(bool aInCommunication);
|
void SetInCommunication(bool aInCommunication);
|
||||||
|
// Returns true if the output streams should be routed like a stream containing
|
||||||
|
// voice data, and not generic audio. This can influence audio processing and
|
||||||
|
// device selection.
|
||||||
|
bool RouteOutputAsVoice();
|
||||||
|
|
||||||
# ifdef MOZ_WIDGET_ANDROID
|
# ifdef MOZ_WIDGET_ANDROID
|
||||||
uint32_t AndroidGetAudioOutputSampleRate();
|
uint32_t AndroidGetAudioOutputSampleRate();
|
||||||
|
|
|
@ -642,7 +642,8 @@ void AudioCallbackDriver::Init() {
|
||||||
output.layout = static_cast<uint32_t>(channelMap);
|
output.layout = static_cast<uint32_t>(channelMap);
|
||||||
output.prefs = CubebUtils::GetDefaultStreamPrefs();
|
output.prefs = CubebUtils::GetDefaultStreamPrefs();
|
||||||
#if !defined(XP_WIN)
|
#if !defined(XP_WIN)
|
||||||
if (mInputDevicePreference == CUBEB_DEVICE_PREF_VOICE) {
|
if (mInputDevicePreference == CUBEB_DEVICE_PREF_VOICE &&
|
||||||
|
CubebUtils::RouteOutputAsVoice()) {
|
||||||
output.prefs |= static_cast<cubeb_stream_prefs>(CUBEB_STREAM_PREF_VOICE);
|
output.prefs |= static_cast<cubeb_stream_prefs>(CUBEB_STREAM_PREF_VOICE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -671,6 +672,10 @@ void AudioCallbackDriver::Init() {
|
||||||
input = output;
|
input = output;
|
||||||
input.channels = mInputChannelCount;
|
input.channels = mInputChannelCount;
|
||||||
input.layout = CUBEB_LAYOUT_UNDEFINED;
|
input.layout = CUBEB_LAYOUT_UNDEFINED;
|
||||||
|
input.prefs = CubebUtils::GetDefaultStreamPrefs();
|
||||||
|
if (mInputDevicePreference == CUBEB_DEVICE_PREF_VOICE) {
|
||||||
|
input.prefs |= static_cast<cubeb_stream_prefs>(CUBEB_STREAM_PREF_VOICE);
|
||||||
|
}
|
||||||
|
|
||||||
cubeb_stream* stream = nullptr;
|
cubeb_stream* stream = nullptr;
|
||||||
bool inputWanted = mInputChannelCount > 0;
|
bool inputWanted = mInputChannelCount > 0;
|
||||||
|
|
|
@ -583,6 +583,8 @@ pref("media.cubeb.logging_level", "");
|
||||||
pref("media.cubeb.backend", "audiounit-rust");
|
pref("media.cubeb.backend", "audiounit-rust");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
pref("media.cubeb.output_voice_routing", true);
|
||||||
|
|
||||||
// GraphRunner (fixed MediaTrackGraph thread) control
|
// GraphRunner (fixed MediaTrackGraph thread) control
|
||||||
pref("media.audiograph.single_thread.enabled", true);
|
pref("media.audiograph.single_thread.enabled", true);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче