The full walk through can be read here: WebRTC app - C# / Xamarin - (C# - JNI - C/C++) - Summary and GitHub repository
Basically I have some Java code that looks like this
public native int GetVideoEngine();Initially in my C# equivalent app I tried to use DllImport
[DllImport("libwebrtc-video-demo-jni.so")]
public static extern int Java_org_webrtc_videoengineapp_ViEAndroidJavaAPI_GetVideoEngine();
(which did not work), then I ended up wrapping the jars as Java Binding Libraries which in turn JNI'ed the needed classes, so I instead could call the generated JNI wrappersstatic Delegate cb_GetVideoEngine;
#pragma warning disable 0169
static Delegate GetGetVideoEngineHandler ()
{
if (cb_GetVideoEngine == null)
cb_GetVideoEngine = JNINativeWrapper.CreateDelegate ((Func<IntPtr, IntPtr, int>) n_GetVideoEngine);
return cb_GetVideoEngine;
}
static int n_GetVideoEngine (IntPtr jnienv, IntPtr native__this)
{
global::Org.Webrtc.Videoengineapp.ViEAndroidJavaAPI __this = global::Java.Lang.Object.GetObject<global::Org.Webrtc.Videoengineapp.ViEAndroidJavaAPI> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
return __this.VideoEngine;
}
#pragma warning restore 0169
static IntPtr id_GetVideoEngine;
public virtual int VideoEngine {
// Metadata.xml XPath method reference: path="/api/package[@name='org.webrtc.videoengineapp']/class[@name='ViEAndroidJavaAPI']/method[@name='GetVideoEngine' and count(parameter)=0]"
[Register ("GetVideoEngine", "()I", "GetGetVideoEngineHandler")]
get {
if (id_GetVideoEngine == IntPtr.Zero)
id_GetVideoEngine = JNIEnv.GetMethodID (class_ref, "GetVideoEngine", "()I");
if (GetType () == ThresholdType)
return JNIEnv.CallIntMethod (Handle, id_GetVideoEngine);
else
return JNIEnv.CallNonvirtualIntMethod (Handle, ThresholdClass, id_GetVideoEngine);
}
}
My question is related to performance:
How much slower is the C# -> JavaBindingLibrary (JAVA/JNI) -> C/C++ JNI Wrapper -> C native library than if I did unwrapped the C/C++ JNI Wrapper and rewrapped it with something like mono / cxxi or similar direct managed or manually wrote a direct callable wrapper?
No comments:
Post a Comment