/* * Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved. * Licensed under the MIT License. */ #include #include "onnxruntime/core/session/onnxruntime_c_api.h" #include "ai_onnxruntime_OnnxRuntime.h" #include "OrtJniUtil.h" /* * Class: ai_onnxruntime_OnnxRuntime * Method: initialiseAPIBase * Signature: (I)J */ JNIEXPORT jlong JNICALL Java_ai_onnxruntime_OnnxRuntime_initialiseAPIBase (JNIEnv * jniEnv, jclass clazz, jint apiVersion) { (void) jniEnv; (void) clazz; // required JNI parameters not needed by functions which don't call back into Java. const OrtApi* ortPtr = OrtGetApiBase()->GetApi((uint32_t) apiVersion); return (jlong) ortPtr; } /* * Class: ai_onnxruntime_OnnxRuntime * Method: getAvailableProviders * Signature: (J)[Ljava/lang/String; */ JNIEXPORT jobjectArray JNICALL Java_ai_onnxruntime_OnnxRuntime_getAvailableProviders (JNIEnv * jniEnv, jclass clazz, jlong apiHandle) { (void) jniEnv; (void) clazz; // required JNI parameters not needed by functions which don't call back into Java. const OrtApi* api = (const OrtApi*) apiHandle; char** providers = NULL; int numProviders = 0; // Extract the provider array checkOrtStatus(jniEnv,api,api->GetAvailableProviders(&providers,&numProviders)); // Convert to Java String Array char *stringClassName = "java/lang/String"; jclass stringClazz = (*jniEnv)->FindClass(jniEnv, stringClassName); jobjectArray providerArray = (*jniEnv)->NewObjectArray(jniEnv,numProviders,stringClazz,NULL); for (int i = 0; i < numProviders; i++) { // Read out the provider name and convert it to a java.lang.String jstring provider = (*jniEnv)->NewStringUTF(jniEnv,providers[i]); (*jniEnv)->SetObjectArrayElement(jniEnv, providerArray, i, provider); } // Release providers checkOrtStatus(jniEnv,api,api->ReleaseAvailableProviders(providers,numProviders)); providers = NULL; return providerArray; }