From 1f2a3e705809c3d2233eafe9e6cca44d46e9c09a Mon Sep 17 00:00:00 2001 From: Magnus Jedvert Date: Thu, 23 Nov 2017 16:56:44 +0100 Subject: [PATCH] Android: Clean up JNI generated code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It's now possible to generate JNI code for constructors and enums correctly. This CL cleans that up. Bug: webrtc:8278,webrtc:8551,webrtc:8556 Change-Id: I2284a30139cbb186c80713eb6113eda5659c16ad Reviewed-on: https://webrtc-review.googlesource.com/25622 Reviewed-by: Sami Kalliomäki Commit-Queue: Magnus Jedvert Cr-Commit-Position: refs/heads/master@{#20860} --- sdk/android/api/org/webrtc/EncodedImage.java | 15 ++------------- sdk/android/api/org/webrtc/Metrics.java | 16 ++++------------ .../org/webrtc/NetworkMonitorAutoDetect.java | 3 +-- sdk/android/api/org/webrtc/VideoDecoder.java | 1 + sdk/android/api/org/webrtc/VideoEncoder.java | 5 +++++ sdk/android/api/org/webrtc/VideoFrame.java | 7 +------ .../src/java/org/webrtc/CalledByNative.java | 2 +- .../java/org/webrtc/VideoDecoderWrapper.java | 6 ------ .../java/org/webrtc/VideoEncoderWrapper.java | 18 ------------------ sdk/android/src/jni/androidmetrics_jni.cc | 4 ++-- sdk/android/src/jni/encodedimage.cc | 2 +- sdk/android/src/jni/videodecoderwrapper.cc | 2 +- sdk/android/src/jni/videoencoderwrapper.cc | 8 +++----- sdk/android/src/jni/videoframe.cc | 2 +- 14 files changed, 23 insertions(+), 68 deletions(-) diff --git a/sdk/android/api/org/webrtc/EncodedImage.java b/sdk/android/api/org/webrtc/EncodedImage.java index dc8eb62615..84c72b1db5 100644 --- a/sdk/android/api/org/webrtc/EncodedImage.java +++ b/sdk/android/api/org/webrtc/EncodedImage.java @@ -12,8 +12,6 @@ package org.webrtc; import java.nio.ByteBuffer; import java.util.concurrent.TimeUnit; -// TODO(bugs.webrtc.org/8556): Remove unnecessary import. -import org.webrtc.EncodedImage; /** * An encoded frame from a video stream. Used as an input for decoders and as an output for @@ -36,9 +34,8 @@ public class EncodedImage { return nativeIndex; } - // TODO(bugs.webrtc.org/8556): Remove unnecessary 'EncodedImage.'. @CalledByNative("FrameType") - static EncodedImage.FrameType fromNativeIndex(int nativeIndex) { + static FrameType fromNativeIndex(int nativeIndex) { for (FrameType type : FrameType.values()) { if (type.getNative() == nativeIndex) { return type; @@ -58,6 +55,7 @@ public class EncodedImage { public final boolean completeFrame; public final Integer qp; + @CalledByNative private EncodedImage(ByteBuffer buffer, int encodedWidth, int encodedHeight, long captureTimeNs, FrameType frameType, int rotation, boolean completeFrame, Integer qp) { this.buffer = buffer; @@ -138,13 +136,4 @@ public class EncodedImage { rotation, completeFrame, qp); } } - - // TODO(bugs.webrtc.org/8551) Remove. - @CalledByNative - static EncodedImage create(ByteBuffer buffer, int encodedWidth, int encodedHeight, - long captureTimeNs, EncodedImage.FrameType frameType, int rotation, boolean completeFrame, - Integer qp) { - return new EncodedImage( - buffer, encodedWidth, encodedHeight, captureTimeNs, frameType, rotation, completeFrame, qp); - } } diff --git a/sdk/android/api/org/webrtc/Metrics.java b/sdk/android/api/org/webrtc/Metrics.java index 30570671ef..fac41ed6c7 100644 --- a/sdk/android/api/org/webrtc/Metrics.java +++ b/sdk/android/api/org/webrtc/Metrics.java @@ -38,6 +38,9 @@ public class Metrics { public final Map map = new HashMap(); // + @CalledByNative + Metrics() {} + /** * Class holding histogram information. */ @@ -48,6 +51,7 @@ public class Metrics { public final Map samples = new HashMap(); // + @CalledByNative("HistogramInfo") public HistogramInfo(int min, int max, int bucketCount) { this.min = min; this.max = max; @@ -76,18 +80,6 @@ public class Metrics { return getAndResetNative(); } - // TODO(bugs.webrtc.org/8551) Remove. - @CalledByNative - static Metrics createMetrics() { - return new Metrics(); - } - - // TODO(bugs.webrtc.org/8551) Remove. - @CalledByNative - static HistogramInfo createHistogramInfo(int min, int max, int bucketCount) { - return new HistogramInfo(min, max, bucketCount); - } - private static native void enableNative(); private static native Metrics getAndResetNative(); } diff --git a/sdk/android/api/org/webrtc/NetworkMonitorAutoDetect.java b/sdk/android/api/org/webrtc/NetworkMonitorAutoDetect.java index ae7908ddc6..86eb1c20f6 100644 --- a/sdk/android/api/org/webrtc/NetworkMonitorAutoDetect.java +++ b/sdk/android/api/org/webrtc/NetworkMonitorAutoDetect.java @@ -35,7 +35,6 @@ import java.net.SocketException; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import org.webrtc.NetworkMonitorAutoDetect; /** * Borrowed from Chromium's @@ -90,7 +89,7 @@ public class NetworkMonitorAutoDetect extends BroadcastReceiver { } @CalledByNative("NetworkInformation") - private NetworkMonitorAutoDetect.ConnectionType getConnectionType() { + private ConnectionType getConnectionType() { return type; } diff --git a/sdk/android/api/org/webrtc/VideoDecoder.java b/sdk/android/api/org/webrtc/VideoDecoder.java index f5acfad0fc..7bf9ac54d7 100644 --- a/sdk/android/api/org/webrtc/VideoDecoder.java +++ b/sdk/android/api/org/webrtc/VideoDecoder.java @@ -21,6 +21,7 @@ public interface VideoDecoder { public final int width; public final int height; + @CalledByNative("Settings") public Settings(int numberOfCores, int width, int height) { this.numberOfCores = numberOfCores; this.width = width; diff --git a/sdk/android/api/org/webrtc/VideoEncoder.java b/sdk/android/api/org/webrtc/VideoEncoder.java index 30bfaafec5..4f97fb0c0d 100644 --- a/sdk/android/api/org/webrtc/VideoEncoder.java +++ b/sdk/android/api/org/webrtc/VideoEncoder.java @@ -10,6 +10,8 @@ package org.webrtc; +import org.webrtc.EncodedImage; + /** * Interface for a video encoder that can be used with WebRTC. All calls will be made on the * encoding thread. The encoder may be constructed on a different thread and changing thread after @@ -25,6 +27,7 @@ public interface VideoEncoder { public final int maxFramerate; public final boolean automaticResizeOn; + @CalledByNative("Settings") public Settings(int numberOfCores, int width, int height, int startBitrate, int maxFramerate, boolean automaticResizeOn) { this.numberOfCores = numberOfCores; @@ -40,6 +43,7 @@ public interface VideoEncoder { public class EncodeInfo { public final EncodedImage.FrameType[] frameTypes; + @CalledByNative("EncodeInfo") public EncodeInfo(EncodedImage.FrameType[] frameTypes) { this.frameTypes = frameTypes; } @@ -67,6 +71,7 @@ public interface VideoEncoder { * Initializes the allocation with a two dimensional array of bitrates. The first index of the * array is the spatial layer and the second index in the temporal layer. */ + @CalledByNative("BitrateAllocation") public BitrateAllocation(int[][] bitratesBbs) { this.bitratesBbs = bitratesBbs; } diff --git a/sdk/android/api/org/webrtc/VideoFrame.java b/sdk/android/api/org/webrtc/VideoFrame.java index 62d4cf231d..3ee368d2ea 100644 --- a/sdk/android/api/org/webrtc/VideoFrame.java +++ b/sdk/android/api/org/webrtc/VideoFrame.java @@ -121,6 +121,7 @@ public class VideoFrame { private final int rotation; private final long timestampNs; + @CalledByNative public VideoFrame(Buffer buffer, int rotation, long timestampNs) { if (buffer == null) { throw new IllegalArgumentException("buffer not allowed to be null"); @@ -206,12 +207,6 @@ public class VideoFrame { return newBuffer; } - // TODO(bugs.webrtc.org/8278): Add a way to generate JNI code for constructors directly. - @CalledByNative - static VideoFrame create(Buffer buffer, int rotation, long timestampNs) { - return new VideoFrame(buffer, rotation, timestampNs); - } - private static native void cropAndScaleI420Native(ByteBuffer srcY, int srcStrideY, ByteBuffer srcU, int srcStrideU, ByteBuffer srcV, int srcStrideV, int cropX, int cropY, int cropWidth, int cropHeight, ByteBuffer dstY, int dstStrideY, ByteBuffer dstU, diff --git a/sdk/android/src/java/org/webrtc/CalledByNative.java b/sdk/android/src/java/org/webrtc/CalledByNative.java index 42487ff772..5d6c41f1a2 100644 --- a/sdk/android/src/java/org/webrtc/CalledByNative.java +++ b/sdk/android/src/java/org/webrtc/CalledByNative.java @@ -19,7 +19,7 @@ import java.lang.annotation.Target; * @CalledByNative is used by the JNI generator to create the necessary JNI * bindings and expose this method to native code. */ -@Target(ElementType.METHOD) +@Target({ElementType.CONSTRUCTOR, ElementType.METHOD}) @Retention(RetentionPolicy.CLASS) @interface CalledByNative { /* diff --git a/sdk/android/src/java/org/webrtc/VideoDecoderWrapper.java b/sdk/android/src/java/org/webrtc/VideoDecoderWrapper.java index 97134c51a8..93e74e05e4 100644 --- a/sdk/android/src/java/org/webrtc/VideoDecoderWrapper.java +++ b/sdk/android/src/java/org/webrtc/VideoDecoderWrapper.java @@ -16,12 +16,6 @@ import org.webrtc.VideoDecoder; * This class contains the Java glue code for JNI generation of VideoDecoder. */ class VideoDecoderWrapper { - // TODO(bugs.webrtc.org/8551) Remove. - @CalledByNative - static VideoDecoder.Settings createSettings(int numberOfCores, int width, int height) { - return new VideoDecoder.Settings(numberOfCores, width, height); - } - @CalledByNative static VideoDecoder.Callback createDecoderCallback(final long nativeDecoder) { return (VideoFrame frame, Integer decodeTimeMs, diff --git a/sdk/android/src/java/org/webrtc/VideoEncoderWrapper.java b/sdk/android/src/java/org/webrtc/VideoEncoderWrapper.java index 5acfe677e4..bc9fcece6d 100644 --- a/sdk/android/src/java/org/webrtc/VideoEncoderWrapper.java +++ b/sdk/android/src/java/org/webrtc/VideoEncoderWrapper.java @@ -11,7 +11,6 @@ package org.webrtc; // Explicit imports necessary for JNI generation. -import org.webrtc.EncodedImage; import org.webrtc.VideoEncoder; import java.nio.ByteBuffer; @@ -19,23 +18,6 @@ import java.nio.ByteBuffer; * This class contains the Java glue code for JNI generation of VideoEncoder. */ class VideoEncoderWrapper { - @CalledByNative - static VideoEncoder.Settings createSettings(int numberOfCores, int width, int height, - int startBitrate, int maxFramerate, boolean automaticResizeOn) { - return new VideoEncoder.Settings( - numberOfCores, width, height, startBitrate, maxFramerate, automaticResizeOn); - } - - @CalledByNative - static VideoEncoder.EncodeInfo createEncodeInfo(EncodedImage.FrameType[] frameTypes) { - return new VideoEncoder.EncodeInfo(frameTypes); - } - - @CalledByNative - static VideoEncoder.BitrateAllocation createBitrateAllocation(int[][] bitratesBbs) { - return new VideoEncoder.BitrateAllocation(bitratesBbs); - } - @CalledByNative static boolean getScalingSettingsOn(VideoEncoder.ScalingSettings scalingSettings) { return scalingSettings.on; diff --git a/sdk/android/src/jni/androidmetrics_jni.cc b/sdk/android/src/jni/androidmetrics_jni.cc index 33e450ca0e..6391e175db 100644 --- a/sdk/android/src/jni/androidmetrics_jni.cc +++ b/sdk/android/src/jni/androidmetrics_jni.cc @@ -30,13 +30,13 @@ JNI_FUNCTION_DECLARATION(jobject, Metrics_getAndResetNative, JNIEnv* jni, jclass) { - jobject j_metrics = Java_Metrics_createMetrics(jni); + jobject j_metrics = Java_Metrics_Constructor(jni); std::map> histograms; metrics::GetAndReset(&histograms); for (const auto& kv : histograms) { // Create and add samples to |HistogramInfo|. - jobject j_info = Java_Metrics_createHistogramInfo( + jobject j_info = Java_HistogramInfo_Constructor( jni, kv.second->min, kv.second->max, static_cast(kv.second->bucket_count)); for (const auto& sample : kv.second->samples) { diff --git a/sdk/android/src/jni/encodedimage.cc b/sdk/android/src/jni/encodedimage.cc index f540b77f1e..966ef93d39 100644 --- a/sdk/android/src/jni/encodedimage.cc +++ b/sdk/android/src/jni/encodedimage.cc @@ -25,7 +25,7 @@ jobject NativeToJavaEncodedImage(JNIEnv* jni, const EncodedImage& image) { jobject buffer = jni->NewDirectByteBuffer(image._buffer, image._length); jobject frame_type = NativeToJavaFrameType(jni, image._frameType); jobject qp = (image.qp_ == -1) ? nullptr : JavaIntegerFromInt(jni, image.qp_); - return Java_EncodedImage_create( + return Java_EncodedImage_Constructor( jni, buffer, image._encodedWidth, image._encodedHeight, image.capture_time_ms_ * rtc::kNumNanosecsPerMillisec, frame_type, static_cast(image.rotation_), image._completeFrame, qp); diff --git a/sdk/android/src/jni/videodecoderwrapper.cc b/sdk/android/src/jni/videodecoderwrapper.cc index 63bc76dc79..6b29c0eefe 100644 --- a/sdk/android/src/jni/videodecoderwrapper.cc +++ b/sdk/android/src/jni/videodecoderwrapper.cc @@ -57,7 +57,7 @@ int32_t VideoDecoderWrapper::InitDecode(const VideoCodec* codec_settings, } int32_t VideoDecoderWrapper::InitDecodeInternal(JNIEnv* jni) { - jobject settings = Java_VideoDecoderWrapper_createSettings( + jobject settings = Java_Settings_Constructor( jni, number_of_cores_, codec_settings_.width, codec_settings_.height); jobject callback = Java_VideoDecoderWrapper_createDecoderCallback( diff --git a/sdk/android/src/jni/videoencoderwrapper.cc b/sdk/android/src/jni/videoencoderwrapper.cc index 66b54f9e8a..19c00ec371 100644 --- a/sdk/android/src/jni/videoencoderwrapper.cc +++ b/sdk/android/src/jni/videoencoderwrapper.cc @@ -74,7 +74,7 @@ int32_t VideoEncoderWrapper::InitEncodeInternal(JNIEnv* jni) { automatic_resize_on = true; } - jobject settings = Java_VideoEncoderWrapper_createSettings( + jobject settings = Java_Settings_Constructor( jni, number_of_cores_, codec_settings_.width, codec_settings_.height, codec_settings_.startBitrate, codec_settings_.maxFramerate, automatic_resize_on); @@ -127,8 +127,7 @@ int32_t VideoEncoderWrapper::Encode( jobject j_frame_type = NativeToJavaFrameType(jni, (*frame_types)[i]); jni->SetObjectArrayElement(j_frame_types, i, j_frame_type); } - jobject encode_info = - Java_VideoEncoderWrapper_createEncodeInfo(jni, j_frame_types); + jobject encode_info = Java_EncodeInfo_Constructor(jni, j_frame_types); FrameExtraInfo info; info.capture_time_ns = frame.timestamp_us() * rtc::kNumNanosecsPerMicrosec; @@ -385,8 +384,7 @@ jobject VideoEncoderWrapper::ToJavaBitrateAllocation( jni->SetObjectArrayElement(j_allocation_array, spatial_i, j_array_spatial_layer); } - return Java_VideoEncoderWrapper_createBitrateAllocation(jni, - j_allocation_array); + return Java_BitrateAllocation_Constructor(jni, j_allocation_array); } std::string VideoEncoderWrapper::GetImplementationName(JNIEnv* jni) const { diff --git a/sdk/android/src/jni/videoframe.cc b/sdk/android/src/jni/videoframe.cc index be07c75744..5dbc5fbb8f 100644 --- a/sdk/android/src/jni/videoframe.cc +++ b/sdk/android/src/jni/videoframe.cc @@ -403,7 +403,7 @@ jobject NativeToJavaFrame(JNIEnv* jni, const VideoFrame& frame) { } else { j_buffer = WrapI420Buffer(jni, buffer->ToI420()); } - return Java_VideoFrame_create( + return Java_VideoFrame_Constructor( jni, j_buffer, static_cast(frame.rotation()), static_cast(frame.timestamp_us() * rtc::kNumNanosecsPerMicrosec)); }