Android: Fix leaking software video codec instances.
Previously, wrapped native codec instances would leak the native object
if it was never used. This change fixes it by changing getNative method
to createNative.
Also fixes "Video codec hardware acceleration" setting in AppRTCMobile.
Bug: webrtc:7925
Change-Id: I53f6dc1dd5e37dea8d14278423122dede17719c5
Reviewed-on: https://webrtc-review.googlesource.com/24881
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Commit-Queue: Sami Kalliomäki <sakal@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20859}
diff --git a/sdk/android/api/org/webrtc/VideoDecoderFallback.java b/sdk/android/api/org/webrtc/VideoDecoderFallback.java
index 7c4d8ca..67e746f 100644
--- a/sdk/android/api/org/webrtc/VideoDecoderFallback.java
+++ b/sdk/android/api/org/webrtc/VideoDecoderFallback.java
@@ -14,8 +14,17 @@
* A combined video decoder that falls back on a secondary decoder if the primary decoder fails.
*/
public class VideoDecoderFallback extends WrappedNativeVideoDecoder {
+ private final VideoDecoder fallback;
+ private final VideoDecoder primary;
+
public VideoDecoderFallback(VideoDecoder fallback, VideoDecoder primary) {
- super(createNativeDecoder(fallback, primary));
+ this.fallback = fallback;
+ this.primary = primary;
+ }
+
+ @Override
+ long createNativeDecoder() {
+ return createNativeDecoder(fallback, primary);
}
private static native long createNativeDecoder(VideoDecoder fallback, VideoDecoder primary);
diff --git a/sdk/android/api/org/webrtc/VideoEncoderFallback.java b/sdk/android/api/org/webrtc/VideoEncoderFallback.java
index 0072c13..6ee6351 100644
--- a/sdk/android/api/org/webrtc/VideoEncoderFallback.java
+++ b/sdk/android/api/org/webrtc/VideoEncoderFallback.java
@@ -14,8 +14,17 @@
* A combined video encoder that falls back on a secondary encoder if the primary encoder fails.
*/
public class VideoEncoderFallback extends WrappedNativeVideoEncoder {
+ private final VideoEncoder fallback;
+ private final VideoEncoder primary;
+
public VideoEncoderFallback(VideoEncoder fallback, VideoEncoder primary) {
- super(createNativeEncoder(fallback, primary));
+ this.fallback = fallback;
+ this.primary = primary;
+ }
+
+ @Override
+ long createNativeEncoder() {
+ return createNativeEncoder(fallback, primary);
}
private static native long createNativeEncoder(VideoEncoder fallback, VideoEncoder primary);