Some cleanups

Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2018-01-13 11:51:00 +01:00
parent 42b71b9710
commit 413e962ef4
2 changed files with 99 additions and 50 deletions

View File

@ -428,7 +428,14 @@ public class CallActivity extends AppCompatActivity {
}
private void createCameraEnumerator() {
if (Camera2Enumerator.isSupported(this)) {
boolean camera2EnumeratorIsSupported = false;
try {
camera2EnumeratorIsSupported = Camera2Enumerator.isSupported(this);
} catch (final Throwable throwable) {
Log.w(TAG, "Camera2Enumator threw an error");
}
if (camera2EnumeratorIsSupported) {
cameraEnumerator = new Camera2Enumerator(this);
} else {
cameraEnumerator = new Camera1Enumerator(true);
@ -548,14 +555,6 @@ public class CallActivity extends AppCompatActivity {
rootEglBase = EglBase.create();
createCameraEnumerator();
//Initialize PeerConnectionFactory globals.
PeerConnectionFactory.InitializationOptions initializationOptions = PeerConnectionFactory.InitializationOptions
.builder(this)
.setEnableVideoHwAcceleration(true)
.setFieldTrials(null)
.createInitializationOptions();
PeerConnectionFactory.initialize(initializationOptions);
//Create a new PeerConnectionFactory instance.
PeerConnectionFactory.Options options = new PeerConnectionFactory.Options();
peerConnectionFactory = new PeerConnectionFactory(options);
@ -968,14 +967,22 @@ public class CallActivity extends AppCompatActivity {
leavingCall = true;
inCall = false;
dispose(null);
if (videoCapturer != null) {
try {
videoCapturer.stopCapture();
} catch (InterruptedException e) {
Log.e(TAG, "Failed to stop capturing while hanging up");
}
videoCapturer.dispose();
videoCapturer = null;
}
for (int i = 0; i < magicPeerConnectionWrapperList.size(); i++) {
endPeerConnection(magicPeerConnectionWrapperList.get(i).getSessionId());
}
if (!dueToNetworkChange) {
pipVideoView.release();
if (audioSource != null) {
@ -988,19 +995,7 @@ public class CallActivity extends AppCompatActivity {
audioManager = null;
}
if (videoCapturer != null) {
try {
videoCapturer.stopCapture();
} catch (InterruptedException e) {
Log.e(TAG, "Failed to stop capturing while hanging up");
}
videoCapturer.dispose();
videoCapturer = null;
}
Log.d(TAG, "Closing video source.");
if (videoSource != null) {
videoSource.dispose();
videoSource = null;
}
@ -1009,15 +1004,12 @@ public class CallActivity extends AppCompatActivity {
peerConnectionFactory = null;
}
localMediaStream.removeTrack(localAudioTrack);
localMediaStream.removeTrack(localVideoTrack);
localMediaStream = null;
localAudioTrack = null;
localVideoTrack = null;
hangupNetworkCalls();
}
}
private void hangupNetworkCalls() {
String credentials = ApiHelper.getCredentials(userEntity.getUsername(), userEntity.getToken());
@ -1131,6 +1123,7 @@ public class CallActivity extends AppCompatActivity {
hangup(false);
}
//this.unregisterReceiver(networkBroadcastReceier);
rootEglBase.release();
super.onDestroy();
}

View File

@ -43,10 +43,16 @@ import com.nextcloud.talk.utils.database.user.UserModule;
import com.squareup.leakcanary.LeakCanary;
import com.squareup.leakcanary.RefWatcher;
import org.webrtc.PeerConnectionFactory;
import org.webrtc.voiceengine.WebRtcAudioManager;
import org.webrtc.voiceengine.WebRtcAudioUtils;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.security.GeneralSecurityException;
import java.util.HashSet;
import java.util.Set;
import javax.inject.Singleton;
@ -107,6 +113,54 @@ public class NextcloudTalkApplication extends MultiDexApplication {
}
}
}
/*
AEC blacklist and SL_ES_WHITELIST are borrowed from Signal
https://github.com/WhisperSystems/Signal-Android/blob/551470123d006b76a68d705d131bb12513a5e683/src/org/thoughtcrime/securesms/ApplicationContext.java
*/
private void initializeWebRtc() {
try {
Set<String> HARDWARE_AEC_BLACKLIST = new HashSet<String>() {{
add("D6503"); // Sony Xperia Z2 D6503
add("ONE A2005"); // OnePlus 2
add("MotoG3"); // Moto G (3rd Generation)
add("Nexus 6P"); // Nexus 6p
add("Pixel"); // Pixel
add("Pixel XL"); // Pixel XL
add("MI 4LTE"); // Xiami Mi4
add("Redmi Note 3"); // Redmi Note 3
add("Redmi Note 4"); // Redmi Note 4
add("SM-G900F"); // Samsung Galaxy S5
add("g3_kt_kr"); // LG G3
add("SM-G930F"); // Samsung Galaxy S7
add("Xperia SP"); // Sony Xperia SP
add("Nexus 6"); // Nexus 6
add("ONE E1003"); // OnePlus X
add("One"); // OnePlus One
add("Moto G5");
}};
Set<String> OPEN_SL_ES_WHITELIST = new HashSet<String>() {{
add("Pixel");
add("Pixel XL");
}};
if (HARDWARE_AEC_BLACKLIST.contains(Build.MODEL)) {
WebRtcAudioUtils.setWebRtcBasedAcousticEchoCanceler(true);
}
if (!OPEN_SL_ES_WHITELIST.contains(Build.MODEL)) {
WebRtcAudioManager.setBlacklistDeviceForOpenSLESUsage(true);
}
PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions.builder(this)
.setEnableVideoHwAcceleration(true)
.createInitializationOptions());
} catch (UnsatisfiedLinkError e) {
Log.w(TAG, e);
}
}
//endregion
//region Overridden methods
@ -115,8 +169,10 @@ public class NextcloudTalkApplication extends MultiDexApplication {
super.onCreate();
JobManager.create(this).addJobCreator(new MagicJobCreator());
FirebaseAnalytics.getInstance(this).setAnalyticsCollectionEnabled(false);
sharedApplication = this;
initializeWebRtc();
useCompatVectorIfNeeded();