Added support for changing the volume of AudioTrack as discussed in BUG=webrtc:6533
This is a short term solution to change the volume of an AudioTrack until applyConstraints for MediaStreamTracks has been implemented.
This CL adds 1 new Java method & the relevant JNI file update:
AudioTrack.java:
public void setVolume(double volume);
BUG=webrtc:6533
Review-Url: https://codereview.webrtc.org/2710683009
Cr-Commit-Position: refs/heads/master@{#17682}
diff --git a/AUTHORS b/AUTHORS
index 126a138..e13033e 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -12,6 +12,7 @@
Christophe Dumez <ch.dumez@samsung.com>
Cody Barnes <conceptgenesis@gmail.com>
Colin Plumb
+Dax Booysen <dax@younow.com>
Dmitry Lizin <sdkdimon@gmail.com>
Eric Rescorla, RTFM Inc. <ekr@rtfm.com>
Frederik Riedel, Frogg GmbH <frederik.riedel@frogg.io>
diff --git a/webrtc/sdk/android/api/org/webrtc/AudioTrack.java b/webrtc/sdk/android/api/org/webrtc/AudioTrack.java
index c33a9d8..6b71353 100644
--- a/webrtc/sdk/android/api/org/webrtc/AudioTrack.java
+++ b/webrtc/sdk/android/api/org/webrtc/AudioTrack.java
@@ -15,4 +15,13 @@
public AudioTrack(long nativeTrack) {
super(nativeTrack);
}
+
+ /** Sets the volume for the underlying MediaSource. Volume is a gain value in the range
+ * 0 to 10.
+ */
+ public void setVolume(double volume) {
+ nativeSetVolume(super.nativeTrack, volume);
+ }
+
+ private static native void nativeSetVolume(long nativeTrack, double volume);
}
diff --git a/webrtc/sdk/android/src/jni/peerconnection_jni.cc b/webrtc/sdk/android/src/jni/peerconnection_jni.cc
index d31b5d7..0c38091 100644
--- a/webrtc/sdk/android/src/jni/peerconnection_jni.cc
+++ b/webrtc/sdk/android/src/jni/peerconnection_jni.cc
@@ -1194,6 +1194,13 @@
rtc::tracing::ShutdownInternalTracer();
}
+JOW(void, AudioTrack_nativeSetVolume)
+(JNIEnv*, jclass, jlong j_p, jdouble volume) {
+ rtc::scoped_refptr<AudioSourceInterface> source(
+ reinterpret_cast<AudioTrackInterface*>(j_p)->GetSource());
+ source->SetVolume(volume);
+}
+
// Helper struct for working around the fact that CreatePeerConnectionFactory()
// comes in two flavors: either entirely automagical (constructing its own
// threads and deleting them on teardown, but no external codec factory support)