Decouple input and output sample rate overrides.

We may sometimes want to override only input or only output, or
override them with different values. This change allows setting the
overrides separately.


Change-Id: Ib0c44cb7a3cfa834f997fb6cd54f7cad68705f41
Bug: webrtc:10441
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/128763
Commit-Queue: Paulina Hensman <phensman@webrtc.org>
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27236}
This commit is contained in:
Paulina Hensman
2019-03-21 16:02:41 +01:00
committed by Commit Bot
parent 2293622f02
commit 1ca30a7e41
6 changed files with 61 additions and 28 deletions

View File

@ -29,7 +29,8 @@ public class JavaAudioDeviceModule implements AudioDeviceModule {
public static class Builder {
private final Context context;
private final AudioManager audioManager;
private int sampleRate;
private int inputSampleRate;
private int outputSampleRate;
private int audioSource = WebRtcAudioRecord.DEFAULT_AUDIO_SOURCE;
private int audioFormat = WebRtcAudioRecord.DEFAULT_AUDIO_FORMAT;
private AudioTrackErrorCallback audioTrackErrorCallback;
@ -43,7 +44,8 @@ public class JavaAudioDeviceModule implements AudioDeviceModule {
private Builder(Context context) {
this.context = context;
this.audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
this.sampleRate = WebRtcAudioManager.getSampleRate(audioManager);
this.inputSampleRate = WebRtcAudioManager.getSampleRate(audioManager);
this.outputSampleRate = WebRtcAudioManager.getSampleRate(audioManager);
}
/**
@ -52,8 +54,27 @@ public class JavaAudioDeviceModule implements AudioDeviceModule {
* return invalid results.
*/
public Builder setSampleRate(int sampleRate) {
Logging.d(TAG, "Sample rate overridden to: " + sampleRate);
this.sampleRate = sampleRate;
Logging.d(TAG, "Input/Output sample rate overridden to: " + sampleRate);
this.inputSampleRate = sampleRate;
this.outputSampleRate = sampleRate;
return this;
}
/**
* Call this method to specifically override input sample rate.
*/
public Builder setInputSampleRate(int inputSampleRate) {
Logging.d(TAG, "Input sample rate overridden to: " + inputSampleRate);
this.inputSampleRate = inputSampleRate;
return this;
}
/**
* Call this method to specifically override output sample rate.
*/
public Builder setOutputSampleRate(int outputSampleRate) {
Logging.d(TAG, "Output sample rate overridden to: " + outputSampleRate);
this.outputSampleRate = outputSampleRate;
return this;
}
@ -171,8 +192,8 @@ public class JavaAudioDeviceModule implements AudioDeviceModule {
useHardwareAcousticEchoCanceler, useHardwareNoiseSuppressor);
final WebRtcAudioTrack audioOutput =
new WebRtcAudioTrack(context, audioManager, audioTrackErrorCallback);
return new JavaAudioDeviceModule(context, audioManager, audioInput, audioOutput, sampleRate,
useStereoInput, useStereoOutput);
return new JavaAudioDeviceModule(context, audioManager, audioInput, audioOutput,
inputSampleRate, outputSampleRate, useStereoInput, useStereoOutput);
}
}
@ -264,7 +285,8 @@ public class JavaAudioDeviceModule implements AudioDeviceModule {
private final AudioManager audioManager;
private final WebRtcAudioRecord audioInput;
private final WebRtcAudioTrack audioOutput;
private final int sampleRate;
private final int inputSampleRate;
private final int outputSampleRate;
private final boolean useStereoInput;
private final boolean useStereoOutput;
@ -272,13 +294,14 @@ public class JavaAudioDeviceModule implements AudioDeviceModule {
private long nativeAudioDeviceModule;
private JavaAudioDeviceModule(Context context, AudioManager audioManager,
WebRtcAudioRecord audioInput, WebRtcAudioTrack audioOutput, int sampleRate,
boolean useStereoInput, boolean useStereoOutput) {
WebRtcAudioRecord audioInput, WebRtcAudioTrack audioOutput, int inputSampleRate,
int outputSampleRate, boolean useStereoInput, boolean useStereoOutput) {
this.context = context;
this.audioManager = audioManager;
this.audioInput = audioInput;
this.audioOutput = audioOutput;
this.sampleRate = sampleRate;
this.inputSampleRate = inputSampleRate;
this.outputSampleRate = outputSampleRate;
this.useStereoInput = useStereoInput;
this.useStereoOutput = useStereoOutput;
}
@ -288,7 +311,7 @@ public class JavaAudioDeviceModule implements AudioDeviceModule {
synchronized (nativeLock) {
if (nativeAudioDeviceModule == 0) {
nativeAudioDeviceModule = nativeCreateAudioDeviceModule(context, audioManager, audioInput,
audioOutput, sampleRate, useStereoInput, useStereoOutput);
audioOutput, inputSampleRate, outputSampleRate, useStereoInput, useStereoOutput);
}
return nativeAudioDeviceModule;
}
@ -318,5 +341,5 @@ public class JavaAudioDeviceModule implements AudioDeviceModule {
private static native long nativeCreateAudioDeviceModule(Context context,
AudioManager audioManager, WebRtcAudioRecord audioInput, WebRtcAudioTrack audioOutput,
int sampleRate, boolean useStereoInput, boolean useStereoOutput);
int inputSampleRate, int outputSampleRate, boolean useStereoInput, boolean useStereoOutput);
}