8000 forceSWCodec for Android (#1400) · liliBestCoder/flutter-webrtc@12ea402 · GitHub
[go: up one dir, main page]

Skip to content

Commit 12ea402

Browse files
forceSWCodec for Android (flutter-webrtc#1400)
1 parent 8d8445d commit 12ea402

File tree

1 file changed

+28
-8
lines changed

1 file changed

+28
-8
lines changed

android/src/main/java/com/cloudwebrtc/webrtc/MethodCallHandlerImpl.java

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@
6262
import org.webrtc.SdpObserver;
6363
import org.webrtc.SessionDescription;
6464
import org.webrtc.SessionDescription.Type;
65+
import org.webrtc.SoftwareVideoDecoderFactory;
66+
import org.webrtc.SoftwareVideoEncoderFactory;
6567
import org.webrtc.VideoTrack;
6668
import org.webrtc.WrappedVideoDecoderFactory;
6769
import org.webrtc.audio.AudioDeviceModule;
@@ -138,7 +140,7 @@ void dispose() {
138140
mPeerConnectionObservers.clear();
139141
}
140142

141-
private void initialize(int networkIgnoreMask) {
143+
private void initialize(int networkIgnoreMask, boolean forceSWCodec) {
142144
if (mFactory != null) {
143145
return;
144146
}
@@ -148,8 +150,7 @@ private void initialize(int networkIgnoreMask) {
148150
.setEnableInternalTracer(true)
149151
.createInitializationOptions());
150152

151-
// Initialize EGL contexts required for HW acceleration.
152-
EglBase.Context eglContext = EglUtils.getRootEglBaseContext();
153+
153154

154155
getUserMediaImpl = new GetUserMediaImpl(this, context);
155156

@@ -166,12 +167,25 @@ private void initialize(int networkIgnoreMask) {
166167
final Options options = new Options();
167168
options.networkIgnoreMask = networkIgnoreMask;
168169

169-
mFactory = PeerConnectionFactory.builder()
170-
.setOptions(options)
171-
.setVideoEncoderFactory(new SimulcastVideoEncoderFactoryWrapper(eglContext, true, true))
172-
.setVideoDecoderFactory(new WrappedVideoDecoderFactory(eglContext))
170+
final PeerConnectionFactory.Builder factoryBuilder = PeerConnectionFactory.builder()
171+
.setOptions(options);
172+
173+
if (forceSWCodec) {
174+
factoryBuilder
175+
.setVideoEncoderFactory(new SoftwareVideoEncoderFactory())
176+
.setVideoDecoderFactory(new SoftwareVideoDecoderFactory());
177+
} else {
178+
// Initialize EGL contexts required for HW acceleration.
179+
EglBase.Context eglContext = EglUtils.getRootEglBaseContext();
180+
181+
factoryBuilder
182+
.setVideoEncoderFactory(new SimulcastVideoEncoderFactoryWrapper(eglContext, true, true))
183+
.setVideoDecoderFactory(new WrappedVideoDecoderFactory(eglContext));
184+
}
185+
mFactory = factoryBuilder
173186
.setAudioDeviceModule(audioDeviceModule)
174187
.createPeerConnectionFactory();
188+
175189
}
176190

177191
@Override
@@ -212,7 +226,13 @@ public void onMethodCall(MethodCall call, @NonNull Result notSafeResult) {
212226

213227
}
214228
}
215-
initialize(networkIgnoreMask);
229+
boolean forceSWCodec = false;
230+
if (constraintsMap.hasKey("forceSWCodec")
231+
&& constraintsMap.getType("forceSWCodec") == ObjectType.Boolean) {
232+
final boolean v = constraintsMap.getBoolean("forceSWCodec");
233+
forceSWCodec = v;
234+
}
235+
initialize(networkIgnoreMask,forceSWCodec);
216236
result.success(null);
217237
break;
218238
}

0 commit comments

Comments
 (0)
0