package im.actor.runtime.android.webrtc;
import org.webrtc.AudioSource;
import org.webrtc.MediaConstraints;
import im.actor.runtime.android.AndroidWebRTCRuntimeProvider;
public class AndroidAudioSource {
private static final Object LOCK = new Object();
private static AndroidAudioSource currentSource;
public static AndroidAudioSource pickAudioSource() {
synchronized (LOCK) {
if (currentSource != null) {
currentSource.count++;
return currentSource;
}
currentSource = new AndroidAudioSource();
return currentSource;
}
}
private int count;
private boolean isReleased;
private AudioSource audioSource;
public AndroidAudioSource() {
this.count = 1;
this.isReleased = false;
MediaConstraints audioConstraints = new MediaConstraints();
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googNoiseSuppression", "true"));
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googEchoCancellation", "true"));
this.audioSource = AndroidWebRTCRuntimeProvider.FACTORY.createAudioSource(audioConstraints);
}
public int getCount() {
return count;
}
public boolean isReleased() {
return isReleased;
}
public AudioSource getAudioSource() {
return audioSource;
}
public void unlink() {
synchronized (LOCK) {
count--;
if (count == 0) {
if (AndroidAudioSource.currentSource == this) {
AndroidAudioSource.currentSource = null;
audioSource.dispose();
}
}
}
}
}