diff --git a/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java b/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java index e40a17cd14..0e3ea0cf07 100644 --- a/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java +++ b/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java @@ -36,6 +36,8 @@ import org.webrtc.AudioTrack; import org.webrtc.CameraVideoCapturer; import org.webrtc.DataChannel; import org.webrtc.EglBase; +import org.webrtc.HardwareVideoDecoderFactory; +import org.webrtc.HardwareVideoEncoderFactory; import org.webrtc.IceCandidate; import org.webrtc.Logging; import org.webrtc.MediaConstraints; @@ -339,6 +341,7 @@ public class PeerConnectionClient { createPeerConnection( localRender, Collections.singletonList(remoteRender), videoCapturer, signalingParameters); } + public void createPeerConnection(final VideoSink localRender, final List remoteRenders, final VideoCapturer videoCapturer, final SignalingParameters signalingParameters) { @@ -509,7 +512,12 @@ public class PeerConnectionClient { if (options != null) { Log.d(TAG, "Factory networkIgnoreMask option: " + options.networkIgnoreMask); } - factory = new PeerConnectionFactory(options); + final boolean enableH264HighProfile = + peerConnectionParameters.videoCodec.equals(VIDEO_CODEC_H264_HIGH); + factory = new PeerConnectionFactory(options, + new HardwareVideoEncoderFactory(rootEglBase.getEglBaseContext(), + true /* enableIntelVp8Encoder */, enableH264HighProfile), + new HardwareVideoDecoderFactory(rootEglBase.getEglBaseContext())); Log.d(TAG, "Peer connection factory created."); } diff --git a/sdk/android/src/jni/videoencoderwrapper.cc b/sdk/android/src/jni/videoencoderwrapper.cc index ceecda2bf2..55ebeef219 100644 --- a/sdk/android/src/jni/videoencoderwrapper.cc +++ b/sdk/android/src/jni/videoencoderwrapper.cc @@ -97,8 +97,6 @@ VideoEncoderWrapper::VideoEncoderWrapper(JNIEnv* jni, jobject j_encoder) implementation_name_ = GetImplementationName(jni); - encoder_queue_ = rtc::TaskQueue::Current(); - initialized_ = false; num_resets_ = 0; @@ -116,6 +114,7 @@ int32_t VideoEncoderWrapper::InitEncode(const VideoCodec* codec_settings, number_of_cores_ = number_of_cores; codec_settings_ = *codec_settings; num_resets_ = 0; + encoder_queue_ = rtc::TaskQueue::Current(); return InitEncodeInternal(jni); } @@ -167,6 +166,7 @@ int32_t VideoEncoderWrapper::Release() { jobject ret = jni->CallObjectMethod(*encoder_, release_method_); frame_extra_infos_.clear(); initialized_ = false; + encoder_queue_ = nullptr; return HandleReturnCode(jni, ret); }