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}
diff --git a/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java b/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java
index e40a17c..0e3ea0c 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.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 @@
     createPeerConnection(
         localRender, Collections.singletonList(remoteRender), videoCapturer, signalingParameters);
   }
+
   public void createPeerConnection(final VideoSink localRender,
       final List<VideoRenderer.Callbacks> remoteRenders, final VideoCapturer videoCapturer,
       final SignalingParameters signalingParameters) {
@@ -509,7 +512,12 @@
     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 ceecda2..55ebeef 100644
--- a/sdk/android/src/jni/videoencoderwrapper.cc
+++ b/sdk/android/src/jni/videoencoderwrapper.cc
@@ -97,8 +97,6 @@
 
   implementation_name_ = GetImplementationName(jni);
 
-  encoder_queue_ = rtc::TaskQueue::Current();
-
   initialized_ = false;
   num_resets_ = 0;
 
@@ -116,6 +114,7 @@
   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 @@
   jobject ret = jni->CallObjectMethod(*encoder_, release_method_);
   frame_extra_infos_.clear();
   initialized_ = false;
+  encoder_queue_ = nullptr;
   return HandleReturnCode(jni, ret);
 }