فهرست منبع

app/vid: cleanup java JNI glue code

jkds 7 ماه پیش
والد
کامیت
edc37a3724
3فایلهای تغییر یافته به همراه12 افزوده شده و 55 حذف شده
  1. 9 53
      bin/app/src/android/vid.rs
  2. 3 1
      bin/app/src/plugin/mod.rs
  3. 0 1
      bin/app/src/ui/vid/decode/android.rs

+ 9 - 53
bin/app/src/android/vid.rs

@@ -124,20 +124,13 @@ pub fn videodecoder_init(path: &str) -> Option<VideoDecoderHandle> {
     unsafe {
         let env = android::attach_jni_env();
 
-        // Call MainActivity.createVideoDecoder() helper method
-        let activity_class = (**env).GetObjectClass.unwrap()(env, android::ACTIVITY);
-        let create_method = (**env).GetMethodID.unwrap()(
+        let decoder_obj = ndk_utils::call_object_method!(
             env,
-            activity_class,
-            b"createVideoDecoder\0".as_ptr() as _,
-            b"()Lvideodecode/VideoDecoder;\0".as_ptr() as _,
+            android::ACTIVITY,
+            "createVideoDecoder",
+            "()Lvideodecode/VideoDecoder;"
         );
 
-        let decoder_obj = (**env).CallObjectMethod.unwrap()(env, android::ACTIVITY, create_method);
-
-        let delete_local_ref = (**env).DeleteLocalRef.unwrap();
-        delete_local_ref(env, activity_class);
-
         if decoder_obj.is_null() {
             error!(target: "android::vid", "Failed to create VideoDecoder object");
             return None;
@@ -146,20 +139,11 @@ pub fn videodecoder_init(path: &str) -> Option<VideoDecoderHandle> {
         let cpath = std::ffi::CString::new(path).unwrap();
         let jpath = (**env).NewStringUTF.unwrap()(env, cpath.as_ptr());
 
-        // Get VideoDecoder class
-        let decoder_class = (**env).GetObjectClass.unwrap()(env, decoder_obj);
-
-        let init_video = (**env).GetMethodID.unwrap()(
-            env,
-            decoder_class,
-            b"init\0".as_ptr() as _,
-            b"(Ljava/lang/String;)Z\0".as_ptr() as _,
-        );
-
-        let result = (**env).CallBooleanMethod.unwrap()(env, decoder_obj, init_video, jpath);
+        let result =
+            ndk_utils::call_bool_method!(env, decoder_obj, "init", "(Ljava/lang/String;)Z", jpath);
 
+        let delete_local_ref = (**env).DeleteLocalRef.unwrap();
         delete_local_ref(env, jpath);
-        delete_local_ref(env, decoder_class);
 
         if result == 0 {
             error!(target: "android::vid", "VideoDecoder.init() failed");
@@ -173,41 +157,13 @@ pub fn videodecoder_init(path: &str) -> Option<VideoDecoderHandle> {
 pub fn videodecoder_set_id(decoder_obj: ndk_sys::jobject, id: usize) {
     unsafe {
         let env = android::attach_jni_env();
-
-        let class_ptr = (**env).GetObjectClass.unwrap()(env, decoder_obj);
-
-        let method_id = (**env).GetMethodID.unwrap()(
-            env,
-            class_ptr,
-            b"setDecoderId\0".as_ptr() as _,
-            b"(I)V\0".as_ptr() as _,
-        );
-
-        (**env).CallVoidMethod.unwrap()(env, decoder_obj, method_id, id as i32);
-
-        let delete_local_ref = (**env).DeleteLocalRef.unwrap();
-        delete_local_ref(env, class_ptr);
+        ndk_utils::call_void_method!(env, decoder_obj, "setDecoderId", "(I)V", id as i32);
     }
 }
 
 pub fn videodecoder_decode_all(decoder_obj: ndk_sys::jobject) -> i32 {
     unsafe {
         let env = android::attach_jni_env();
-
-        let class_ptr = (**env).GetObjectClass.unwrap()(env, decoder_obj);
-
-        let method_id = (**env).GetMethodID.unwrap()(
-            env,
-            class_ptr,
-            b"decodeAll\0".as_ptr() as _,
-            b"()I\0".as_ptr() as _,
-        );
-
-        let result = (**env).CallIntMethod.unwrap()(env, decoder_obj, method_id);
-
-        let delete_local_ref = (**env).DeleteLocalRef.unwrap();
-        delete_local_ref(env, class_ptr);
-
-        result
+        ndk_utils::call_int_method!(env, decoder_obj, "decodeAll", "()I")
     }
 }

+ 3 - 1
bin/app/src/plugin/mod.rs

@@ -292,7 +292,9 @@ impl PluginSettings {
             self.get_setting("net.inbound_connections").unwrap().get_property_u32("value").unwrap()
                 as usize;
         //TODO: Update this when multiple active_profiles at a time is supported
-        if let Some(profile) = p2p_settings.profiles.get_mut(p2p_settings.active_profiles.first().unwrap()) {
+        if let Some(profile) =
+            p2p_settings.profiles.get_mut(p2p_settings.active_profiles.first().unwrap())
+        {
             profile.outbound_connect_timeout = self
                 .get_setting("net.outbound_connect_timeout")
                 .unwrap()

+ 0 - 1
bin/app/src/ui/vid/decode/android.rs

@@ -124,5 +124,4 @@ fn process_frame(
     let vd = vd_guard.as_mut().unwrap();
     vd.textures[frame_idx] = Some(yuv_texs.clone());
     let _ = vd.textures_pub.try_broadcast((frame_idx, yuv_texs));
-    d!("Stored texture for frame {}", frame_idx);
 }