From 59f3b71c04deb301c989d8f316424d01dd91d2c5 Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Tue, 10 Mar 2020 13:57:07 +0100 Subject: [PATCH] Automate conversion from c++ VideoCodeType to java VideoCodecType MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: b/148146536 Change-Id: I030c7c6c2a1a9d002bcc60f45c8d6025bd0935b8 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/167301 Reviewed-by: Sami Kalliomäki Reviewed-by: Magnus Jedvert Commit-Queue: Danil Chapovalov Cr-Commit-Position: refs/heads/master@{#30751} --- api/video/BUILD.gn | 10 ++++++++++ api/video/video_codec_type.h | 2 +- sdk/android/BUILD.gn | 1 + .../org/webrtc/MediaCodecVideoDecoder.java | 16 +-------------- .../org/webrtc/MediaCodecVideoEncoder.java | 20 +++---------------- .../webrtc/MediaCodecVideoEncoderTest.java | 20 +++++++++---------- sdk/android/src/jni/android_media_decoder.cc | 4 +--- sdk/android/src/jni/android_media_encoder.cc | 6 ++---- 8 files changed, 29 insertions(+), 50 deletions(-) diff --git a/api/video/BUILD.gn b/api/video/BUILD.gn index aaa0d56ecb..3aae5fb654 100644 --- a/api/video/BUILD.gn +++ b/api/video/BUILD.gn @@ -7,6 +7,10 @@ # be found in the AUTHORS file in the root of the source tree. import("../../webrtc.gni") +if (is_android) { + import("//build/config/android/config.gni") + import("//build/config/android/rules.gni") +} rtc_library("video_rtp_headers") { visibility = [ "*" ] @@ -56,6 +60,12 @@ rtc_library("video_frame") { ] } +if (is_android) { + java_cpp_enum("video_frame_enums") { + sources = [ "video_codec_type.h" ] + } +} + rtc_source_set("recordable_encoded_frame") { visibility = [ "*" ] sources = [ "recordable_encoded_frame.h" ] diff --git a/api/video/video_codec_type.h b/api/video/video_codec_type.h index efbe3cc8cb..12dcfac1b9 100644 --- a/api/video/video_codec_type.h +++ b/api/video/video_codec_type.h @@ -13,7 +13,7 @@ namespace webrtc { -// Video codec types +// GENERATED_JAVA_ENUM_PACKAGE: org.webrtc enum VideoCodecType { // There are various memset(..., 0, ...) calls in the code that rely on // kVideoCodecGeneric being zero. diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn index 1a5dc82e66..9ee4216bdf 100644 --- a/sdk/android/BUILD.gn +++ b/sdk/android/BUILD.gn @@ -327,6 +327,7 @@ if (is_android) { "//rtc_base:base_java", "//third_party/android_deps:com_android_support_support_annotations_java", ] + srcjar_deps = [ "//api/video:video_frame_enums" ] } # Modules, in alphabetical order. diff --git a/sdk/android/api/org/webrtc/MediaCodecVideoDecoder.java b/sdk/android/api/org/webrtc/MediaCodecVideoDecoder.java index 8c91de049e..5b51df26cb 100644 --- a/sdk/android/api/org/webrtc/MediaCodecVideoDecoder.java +++ b/sdk/android/api/org/webrtc/MediaCodecVideoDecoder.java @@ -134,20 +134,6 @@ public class MediaCodecVideoDecoder { private static final String FORMAT_KEY_CROP_TOP = "crop-top"; private static final String FORMAT_KEY_CROP_BOTTOM = "crop-bottom"; - // Tracks webrtc::VideoCodecType. - public enum VideoCodecType { - VIDEO_CODEC_UNKNOWN, - VIDEO_CODEC_VP8, - VIDEO_CODEC_VP9, - VIDEO_CODEC_AV1, - VIDEO_CODEC_H264; - - @CalledByNative("VideoCodecType") - static VideoCodecType fromNativeIndex(int nativeIndex) { - return values()[nativeIndex]; - } - } - // Timeout for input buffer dequeue. private static final int DEQUEUE_INPUT_TIMEOUT = 500000; // Timeout for codec releasing. @@ -423,7 +409,7 @@ public class MediaCodecVideoDecoder { } @CalledByNativeUnchecked - private boolean initDecode(VideoCodecType type, int width, int height) { + private boolean initDecode(@VideoCodecType int type, int width, int height) { if (mediaCodecThread != null) { throw new RuntimeException("initDecode: Forgot to release()?"); } diff --git a/sdk/android/api/org/webrtc/MediaCodecVideoEncoder.java b/sdk/android/api/org/webrtc/MediaCodecVideoEncoder.java index 5f5d44b581..1c9bc42ba5 100644 --- a/sdk/android/api/org/webrtc/MediaCodecVideoEncoder.java +++ b/sdk/android/api/org/webrtc/MediaCodecVideoEncoder.java @@ -135,20 +135,6 @@ public class MediaCodecVideoEncoder { } } - // Tracks webrtc::VideoCodecType. - public enum VideoCodecType { - VIDEO_CODEC_UNKNOWN, - VIDEO_CODEC_VP8, - VIDEO_CODEC_VP9, - VIDEO_CODEC_AV1, - VIDEO_CODEC_H264; - - @CalledByNative("VideoCodecType") - static VideoCodecType fromNativeIndex(int nativeIndex) { - return values()[nativeIndex]; - } - } - private static final int MEDIA_CODEC_RELEASE_TIMEOUT_MS = 5000; // Timeout for codec releasing. private static final int DEQUEUE_TIMEOUT = 0; // Non-blocking, no wait. private static final int BITRATE_ADJUSTMENT_FPS = 30; @@ -331,7 +317,7 @@ public class MediaCodecVideoEncoder { CodecCapabilities.COLOR_QCOM_FormatYUV420SemiPlanar, COLOR_QCOM_FORMATYUV420PackedSemiPlanar32m}; private static final int[] supportedSurfaceColorList = {CodecCapabilities.COLOR_FormatSurface}; - private VideoCodecType type; + @VideoCodecType private int type; private int colorFormat; // Variables used for dynamic bitrate adjustment. @@ -559,8 +545,8 @@ public class MediaCodecVideoEncoder { } @CalledByNativeUnchecked - boolean initEncode(VideoCodecType type, int profile, int width, int height, int kbps, int fps, - boolean useSurface) { + boolean initEncode(@VideoCodecType int type, int profile, int width, int height, int kbps, + int fps, boolean useSurface) { Logging.d(TAG, "Java initEncode: " + type + ". Profile: " + profile + " : " + width + " x " + height + ". @ " + kbps + " kbps. Fps: " + fps + ". Encode from texture : " + useSurface); diff --git a/sdk/android/instrumentationtests/src/org/webrtc/MediaCodecVideoEncoderTest.java b/sdk/android/instrumentationtests/src/org/webrtc/MediaCodecVideoEncoderTest.java index 7693b592b2..7182f481fb 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/MediaCodecVideoEncoderTest.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/MediaCodecVideoEncoderTest.java @@ -38,8 +38,8 @@ public class MediaCodecVideoEncoderTest { return; } MediaCodecVideoEncoder encoder = new MediaCodecVideoEncoder(); - assertTrue(encoder.initEncode(MediaCodecVideoEncoder.VideoCodecType.VIDEO_CODEC_VP8, profile, - 640, 480, 300, 30, /* useSurface= */ false)); + assertTrue(encoder.initEncode( + VideoCodecType.VIDEO_CODEC_VP8, profile, 640, 480, 300, 30, /* useSurface= */ false)); encoder.release(); } @@ -53,8 +53,8 @@ public class MediaCodecVideoEncoderTest { EglBase14 eglBase = EglBase.createEgl14(EglBase.CONFIG_PLAIN); MediaCodecVideoEncoder.setEglContext(eglBase.getEglBaseContext()); MediaCodecVideoEncoder encoder = new MediaCodecVideoEncoder(); - assertTrue(encoder.initEncode(MediaCodecVideoEncoder.VideoCodecType.VIDEO_CODEC_VP8, profile, - 640, 480, 300, 30, /* useSurface= */ true)); + assertTrue(encoder.initEncode( + VideoCodecType.VIDEO_CODEC_VP8, profile, 640, 480, 300, 30, /* useSurface= */ true)); encoder.release(); MediaCodecVideoEncoder.disposeEglContext(); eglBase.release(); @@ -68,13 +68,13 @@ public class MediaCodecVideoEncoderTest { return; } MediaCodecVideoEncoder encoder = new MediaCodecVideoEncoder(); - assertTrue(encoder.initEncode(MediaCodecVideoEncoder.VideoCodecType.VIDEO_CODEC_VP8, profile, - 640, 480, 300, 30, /* useSurface= */ false)); + assertTrue(encoder.initEncode( + VideoCodecType.VIDEO_CODEC_VP8, profile, 640, 480, 300, 30, /* useSurface= */ false)); encoder.release(); EglBase14 eglBase = EglBase.createEgl14(EglBase.CONFIG_PLAIN); MediaCodecVideoEncoder.setEglContext(eglBase.getEglBaseContext()); - assertTrue(encoder.initEncode(MediaCodecVideoEncoder.VideoCodecType.VIDEO_CODEC_VP8, profile, - 640, 480, 300, 30, /* useSurface= */ true)); + assertTrue(encoder.initEncode( + VideoCodecType.VIDEO_CODEC_VP8, profile, 640, 480, 300, 30, /* useSurface= */ true)); encoder.release(); MediaCodecVideoEncoder.disposeEglContext(); eglBase.release(); @@ -95,8 +95,8 @@ public class MediaCodecVideoEncoderTest { MediaCodecVideoEncoder encoder = new MediaCodecVideoEncoder(); - assertTrue(encoder.initEncode(MediaCodecVideoEncoder.VideoCodecType.VIDEO_CODEC_VP8, profile, - width, height, 300, 30, /* useSurface= */ false)); + assertTrue(encoder.initEncode( + VideoCodecType.VIDEO_CODEC_VP8, profile, width, height, 300, 30, /* useSurface= */ false)); ByteBuffer[] inputBuffers = encoder.getInputBuffers(); assertNotNull(inputBuffers); assertTrue(min_size <= inputBuffers[0].capacity()); diff --git a/sdk/android/src/jni/android_media_decoder.cc b/sdk/android/src/jni/android_media_decoder.cc index 94ce42d2e0..7c731ce7a4 100644 --- a/sdk/android/src/jni/android_media_decoder.cc +++ b/sdk/android/src/jni/android_media_decoder.cc @@ -213,10 +213,8 @@ int32_t MediaCodecVideoDecoder::InitDecodeOnCodecThread() { ResetVariables(); - ScopedJavaLocalRef j_video_codec_enum = - Java_VideoCodecType_fromNativeIndex(jni, codecType_); bool success = Java_MediaCodecVideoDecoder_initDecode( - jni, j_media_codec_video_decoder_, j_video_codec_enum, codec_.width, + jni, j_media_codec_video_decoder_, codecType_, codec_.width, codec_.height); if (CheckException(jni) || !success) { diff --git a/sdk/android/src/jni/android_media_encoder.cc b/sdk/android/src/jni/android_media_encoder.cc index 4b4ad10dc5..8db368b6ec 100644 --- a/sdk/android/src/jni/android_media_encoder.cc +++ b/sdk/android/src/jni/android_media_encoder.cc @@ -512,11 +512,9 @@ int32_t MediaCodecVideoEncoder::InitEncodeInternal(int width, frames_received_since_last_key_ = kMinKeyFrameInterval; // We enforce no extra stride/padding in the format creation step. - ScopedJavaLocalRef j_video_codec_enum = - Java_VideoCodecType_fromNativeIndex(jni, codec_type); const bool encode_status = Java_MediaCodecVideoEncoder_initEncode( - jni, j_media_codec_video_encoder_, j_video_codec_enum, profile_, width, - height, kbps, fps, use_surface); + jni, j_media_codec_video_encoder_, codec_type, profile_, width, height, + kbps, fps, use_surface); if (!encode_status) { ALOGE << "Failed to configure encoder.";