From 2eee89e9044f51263a9635febbb923af73925439 Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Wed, 7 Feb 2024 13:17:19 +0100 Subject: [PATCH] Cleanup webrtc::Environment propagation through java wrappers Force and thus guarantee VideoDecoder created through java wrappers get access to the webrtc::Environment Bug: webrtc:15791 Change-Id: I3f145937c0b914c8e34b24e1ecc55da756551069 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/338441 Reviewed-by: Sergey Silkin Commit-Queue: Danil Chapovalov Cr-Commit-Position: refs/heads/main@{#41745} --- sdk/android/api/org/webrtc/Dav1dDecoder.java | 2 +- .../api/org/webrtc/LibvpxVp8Decoder.java | 2 +- .../api/org/webrtc/LibvpxVp9Decoder.java | 2 +- .../org/webrtc/SoftwareVideoDecoderFactory.java | 7 ------- sdk/android/api/org/webrtc/VideoDecoder.java | 6 ------ .../api/org/webrtc/VideoDecoderFallback.java | 7 ------- .../org/webrtc/WrappedNativeVideoDecoder.java | 4 +--- .../src/jni/software_video_decoder_factory.cc | 16 ---------------- sdk/android/src/jni/video_decoder_fallback.cc | 17 ----------------- sdk/android/src/jni/video_decoder_wrapper.cc | 14 -------------- sdk/android/src/jni/video_decoder_wrapper.h | 6 ------ 11 files changed, 4 insertions(+), 79 deletions(-) diff --git a/sdk/android/api/org/webrtc/Dav1dDecoder.java b/sdk/android/api/org/webrtc/Dav1dDecoder.java index ecb16bc3a1..2a79988470 100644 --- a/sdk/android/api/org/webrtc/Dav1dDecoder.java +++ b/sdk/android/api/org/webrtc/Dav1dDecoder.java @@ -12,7 +12,7 @@ package org.webrtc; public class Dav1dDecoder extends WrappedNativeVideoDecoder { @Override - public long createNativeVideoDecoder() { + public long createNative(long webrtcEnvRef) { return nativeCreateDecoder(); } diff --git a/sdk/android/api/org/webrtc/LibvpxVp8Decoder.java b/sdk/android/api/org/webrtc/LibvpxVp8Decoder.java index 54ad0aa137..b3846f20fb 100644 --- a/sdk/android/api/org/webrtc/LibvpxVp8Decoder.java +++ b/sdk/android/api/org/webrtc/LibvpxVp8Decoder.java @@ -12,7 +12,7 @@ package org.webrtc; public class LibvpxVp8Decoder extends WrappedNativeVideoDecoder { @Override - public long createNativeVideoDecoder() { + public long createNative(long webrtcEnvRef) { return nativeCreateDecoder(); } diff --git a/sdk/android/api/org/webrtc/LibvpxVp9Decoder.java b/sdk/android/api/org/webrtc/LibvpxVp9Decoder.java index 90a24433a3..34718cfa8c 100644 --- a/sdk/android/api/org/webrtc/LibvpxVp9Decoder.java +++ b/sdk/android/api/org/webrtc/LibvpxVp9Decoder.java @@ -12,7 +12,7 @@ package org.webrtc; public class LibvpxVp9Decoder extends WrappedNativeVideoDecoder { @Override - public long createNativeVideoDecoder() { + public long createNative(long webrtcEnvRef) { return nativeCreateDecoder(); } diff --git a/sdk/android/api/org/webrtc/SoftwareVideoDecoderFactory.java b/sdk/android/api/org/webrtc/SoftwareVideoDecoderFactory.java index ac815d395b..1b1cd44a92 100644 --- a/sdk/android/api/org/webrtc/SoftwareVideoDecoderFactory.java +++ b/sdk/android/api/org/webrtc/SoftwareVideoDecoderFactory.java @@ -30,11 +30,6 @@ public class SoftwareVideoDecoderFactory implements VideoDecoderFactory { return null; } return new WrappedNativeVideoDecoder() { - @Override - public long createNativeVideoDecoder() { - return nativeCreateDecoder(nativeFactory, info); - } - @Override public long createNative(long webrtcEnvRef) { return nativeCreate(nativeFactory, webrtcEnvRef, info); @@ -49,8 +44,6 @@ public class SoftwareVideoDecoderFactory implements VideoDecoderFactory { private static native long nativeCreateFactory(); - private static native long nativeCreateDecoder(long factory, VideoCodecInfo videoCodecInfo); - private static native boolean nativeIsSupported(long factory, VideoCodecInfo info); private static native long nativeCreate( diff --git a/sdk/android/api/org/webrtc/VideoDecoder.java b/sdk/android/api/org/webrtc/VideoDecoder.java index f44672da08..195daf5260 100644 --- a/sdk/android/api/org/webrtc/VideoDecoder.java +++ b/sdk/android/api/org/webrtc/VideoDecoder.java @@ -70,12 +70,6 @@ public interface VideoDecoder { */ @CalledByNative default long createNative(long webrtcEnvRef) { - return createNativeVideoDecoder(); - } - - @CalledByNative - @Deprecated - default long createNativeVideoDecoder() { return 0; } diff --git a/sdk/android/api/org/webrtc/VideoDecoderFallback.java b/sdk/android/api/org/webrtc/VideoDecoderFallback.java index dc2e2eeabe..1e7bae9b27 100644 --- a/sdk/android/api/org/webrtc/VideoDecoderFallback.java +++ b/sdk/android/api/org/webrtc/VideoDecoderFallback.java @@ -22,18 +22,11 @@ public class VideoDecoderFallback extends WrappedNativeVideoDecoder { this.primary = primary; } - @Override - public long createNativeVideoDecoder() { - return nativeCreateDecoder(fallback, primary); - } - @Override public long createNative(long webrtcEnvRef) { return nativeCreate(webrtcEnvRef, fallback, primary); } - private static native long nativeCreateDecoder(VideoDecoder fallback, VideoDecoder primary); - private static native long nativeCreate( long webrtcEnvRef, VideoDecoder fallback, VideoDecoder primary); } diff --git a/sdk/android/api/org/webrtc/WrappedNativeVideoDecoder.java b/sdk/android/api/org/webrtc/WrappedNativeVideoDecoder.java index ac9886e6a3..d762e757e4 100644 --- a/sdk/android/api/org/webrtc/WrappedNativeVideoDecoder.java +++ b/sdk/android/api/org/webrtc/WrappedNativeVideoDecoder.java @@ -14,9 +14,7 @@ package org.webrtc; * Wraps a native webrtc::VideoDecoder. */ public abstract class WrappedNativeVideoDecoder implements VideoDecoder { - // TODO: bugs.webrtc.org/15791 - uncomment when implemented by all - // derived classes instead of the createNativeVideoDecoder - // @Override public abstract long createNative(long webrtcEnvRef); + @Override public abstract long createNative(long webrtcEnvRef); @Override public final VideoCodecStatus initDecode(Settings settings, Callback decodeCallback) { diff --git a/sdk/android/src/jni/software_video_decoder_factory.cc b/sdk/android/src/jni/software_video_decoder_factory.cc index 46b67b88eb..6e711e813d 100644 --- a/sdk/android/src/jni/software_video_decoder_factory.cc +++ b/sdk/android/src/jni/software_video_decoder_factory.cc @@ -27,22 +27,6 @@ static jlong JNI_SoftwareVideoDecoderFactory_CreateFactory(JNIEnv* env) { CreateBuiltinVideoDecoderFactory().release()); } -static jlong JNI_SoftwareVideoDecoderFactory_CreateDecoder( - JNIEnv* env, - jlong j_factory, - const webrtc::JavaParamRef& j_video_codec_info) { - auto* const native_factory = - reinterpret_cast(j_factory); - const auto video_format = - webrtc::jni::VideoCodecInfoToSdpVideoFormat(env, j_video_codec_info); - - auto decoder = native_factory->CreateVideoDecoder(video_format); - if (decoder == nullptr) { - return 0; - } - return webrtc::NativeToJavaPointer(decoder.release()); -} - jboolean JNI_SoftwareVideoDecoderFactory_IsSupported( JNIEnv* env, jlong j_factory, diff --git a/sdk/android/src/jni/video_decoder_fallback.cc b/sdk/android/src/jni/video_decoder_fallback.cc index 8b521c8f2f..2688c59d0f 100644 --- a/sdk/android/src/jni/video_decoder_fallback.cc +++ b/sdk/android/src/jni/video_decoder_fallback.cc @@ -18,23 +18,6 @@ namespace webrtc { namespace jni { -static jlong JNI_VideoDecoderFallback_CreateDecoder( - JNIEnv* jni, - const JavaParamRef& j_fallback_decoder, - const JavaParamRef& j_primary_decoder) { - std::unique_ptr fallback_decoder = - JavaToNativeVideoDecoder(jni, j_fallback_decoder); - std::unique_ptr primary_decoder = - JavaToNativeVideoDecoder(jni, j_primary_decoder); - - VideoDecoder* nativeWrapper = - CreateVideoDecoderSoftwareFallbackWrapper(std::move(fallback_decoder), - std::move(primary_decoder)) - .release(); - - return jlongFromPointer(nativeWrapper); -} - static jlong JNI_VideoDecoderFallback_Create( JNIEnv* jni, jlong j_webrtc_env_ref, diff --git a/sdk/android/src/jni/video_decoder_wrapper.cc b/sdk/android/src/jni/video_decoder_wrapper.cc index c96961879c..eaeeb2d298 100644 --- a/sdk/android/src/jni/video_decoder_wrapper.cc +++ b/sdk/android/src/jni/video_decoder_wrapper.cc @@ -269,20 +269,6 @@ absl::optional VideoDecoderWrapper::ParseQP( return qp; } -std::unique_ptr JavaToNativeVideoDecoder( - JNIEnv* jni, - const JavaRef& j_decoder) { - const jlong native_decoder = - Java_VideoDecoder_createNativeVideoDecoder(jni, j_decoder); - VideoDecoder* decoder; - if (native_decoder == 0) { - decoder = new VideoDecoderWrapper(jni, j_decoder); - } else { - decoder = reinterpret_cast(native_decoder); - } - return std::unique_ptr(decoder); -} - std::unique_ptr JavaToNativeVideoDecoder( JNIEnv* jni, const JavaRef& j_decoder, diff --git a/sdk/android/src/jni/video_decoder_wrapper.h b/sdk/android/src/jni/video_decoder_wrapper.h index 80638a7b61..5e397f1ae1 100644 --- a/sdk/android/src/jni/video_decoder_wrapper.h +++ b/sdk/android/src/jni/video_decoder_wrapper.h @@ -116,12 +116,6 @@ class VideoDecoderWrapper : public VideoDecoder { /* If the j_decoder is a wrapped native decoder, unwrap it. If it is not, * wrap it in a VideoDecoderWrapper. */ -// TODO: bugs.webrtc.org/15791 - delete variant without the webrtcEnvRef -// parameter when unused. -std::unique_ptr JavaToNativeVideoDecoder( - JNIEnv* jni, - const JavaRef& j_decoder); - std::unique_ptr JavaToNativeVideoDecoder( JNIEnv* jni, const JavaRef& j_decoder,