Use injectable hardware video decoder/encoder in AppRTCMobile.

Also include a small fix for getting the encoder queue.

Bug: webrtc:7760
Change-Id: I96dc8ffb363b90382276d88148f81d5f89dca5f2
Reviewed-on: https://webrtc-review.googlesource.com/2683
Commit-Queue: Sami Kalliomäki <sakal@webrtc.org>
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20022}
This commit is contained in:
Sami Kalliomäki
2017-09-28 16:22:04 +02:00
committed by Commit Bot
parent cdd1f687cf
commit 0cbaf1a6f6
2 changed files with 11 additions and 3 deletions

View File

@ -36,6 +36,8 @@ import org.webrtc.AudioTrack;
import org.webrtc.CameraVideoCapturer; import org.webrtc.CameraVideoCapturer;
import org.webrtc.DataChannel; import org.webrtc.DataChannel;
import org.webrtc.EglBase; import org.webrtc.EglBase;
import org.webrtc.HardwareVideoDecoderFactory;
import org.webrtc.HardwareVideoEncoderFactory;
import org.webrtc.IceCandidate; import org.webrtc.IceCandidate;
import org.webrtc.Logging; import org.webrtc.Logging;
import org.webrtc.MediaConstraints; import org.webrtc.MediaConstraints;
@ -339,6 +341,7 @@ public class PeerConnectionClient {
createPeerConnection( createPeerConnection(
localRender, Collections.singletonList(remoteRender), videoCapturer, signalingParameters); localRender, Collections.singletonList(remoteRender), videoCapturer, signalingParameters);
} }
public void createPeerConnection(final VideoSink localRender, public void createPeerConnection(final VideoSink localRender,
final List<VideoRenderer.Callbacks> remoteRenders, final VideoCapturer videoCapturer, final List<VideoRenderer.Callbacks> remoteRenders, final VideoCapturer videoCapturer,
final SignalingParameters signalingParameters) { final SignalingParameters signalingParameters) {
@ -509,7 +512,12 @@ public class PeerConnectionClient {
if (options != null) { if (options != null) {
Log.d(TAG, "Factory networkIgnoreMask option: " + options.networkIgnoreMask); 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."); Log.d(TAG, "Peer connection factory created.");
} }

View File

@ -97,8 +97,6 @@ VideoEncoderWrapper::VideoEncoderWrapper(JNIEnv* jni, jobject j_encoder)
implementation_name_ = GetImplementationName(jni); implementation_name_ = GetImplementationName(jni);
encoder_queue_ = rtc::TaskQueue::Current();
initialized_ = false; initialized_ = false;
num_resets_ = 0; num_resets_ = 0;
@ -116,6 +114,7 @@ int32_t VideoEncoderWrapper::InitEncode(const VideoCodec* codec_settings,
number_of_cores_ = number_of_cores; number_of_cores_ = number_of_cores;
codec_settings_ = *codec_settings; codec_settings_ = *codec_settings;
num_resets_ = 0; num_resets_ = 0;
encoder_queue_ = rtc::TaskQueue::Current();
return InitEncodeInternal(jni); return InitEncodeInternal(jni);
} }
@ -167,6 +166,7 @@ int32_t VideoEncoderWrapper::Release() {
jobject ret = jni->CallObjectMethod(*encoder_, release_method_); jobject ret = jni->CallObjectMethod(*encoder_, release_method_);
frame_extra_infos_.clear(); frame_extra_infos_.clear();
initialized_ = false; initialized_ = false;
encoder_queue_ = nullptr;
return HandleReturnCode(jni, ret); return HandleReturnCode(jni, ret);
} }