mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-19 21:13:12 -07:00
Fix JNI Code Style
This commit is contained in:
parent
01bd24a1c1
commit
251a270277
1 changed files with 153 additions and 153 deletions
|
@ -13,44 +13,44 @@
|
||||||
|
|
||||||
static void log_cb_android(ChiakiLogLevel level, const char *msg, void *user)
|
static void log_cb_android(ChiakiLogLevel level, const char *msg, void *user)
|
||||||
{
|
{
|
||||||
int prio;
|
int prio;
|
||||||
switch(level)
|
switch(level)
|
||||||
{
|
{
|
||||||
case CHIAKI_LOG_DEBUG:
|
case CHIAKI_LOG_DEBUG:
|
||||||
prio = ANDROID_LOG_DEBUG;
|
prio = ANDROID_LOG_DEBUG;
|
||||||
break;
|
break;
|
||||||
case CHIAKI_LOG_VERBOSE:
|
case CHIAKI_LOG_VERBOSE:
|
||||||
prio = ANDROID_LOG_VERBOSE;
|
prio = ANDROID_LOG_VERBOSE;
|
||||||
break;
|
break;
|
||||||
case CHIAKI_LOG_INFO:
|
case CHIAKI_LOG_INFO:
|
||||||
prio = ANDROID_LOG_INFO;
|
prio = ANDROID_LOG_INFO;
|
||||||
break;
|
break;
|
||||||
case CHIAKI_LOG_WARNING:
|
case CHIAKI_LOG_WARNING:
|
||||||
prio = ANDROID_LOG_ERROR;
|
prio = ANDROID_LOG_ERROR;
|
||||||
break;
|
break;
|
||||||
case CHIAKI_LOG_ERROR:
|
case CHIAKI_LOG_ERROR:
|
||||||
prio = ANDROID_LOG_ERROR;
|
prio = ANDROID_LOG_ERROR;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
prio = ANDROID_LOG_INFO;
|
prio = ANDROID_LOG_INFO;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
__android_log_write(prio, LOG_TAG, msg);
|
__android_log_write(prio, LOG_TAG, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *strdup_jni(const char *str)
|
static char *strdup_jni(const char *str)
|
||||||
{
|
{
|
||||||
if(!str)
|
if(!str)
|
||||||
return NULL;
|
return NULL;
|
||||||
char *r = strdup(str);
|
char *r = strdup(str);
|
||||||
if(!r)
|
if(!r)
|
||||||
return NULL;
|
return NULL;
|
||||||
for(char *c=r; *c; c++)
|
for(char *c=r; *c; c++)
|
||||||
{
|
{
|
||||||
if(*c & (1 << 7))
|
if(*c & (1 << 7))
|
||||||
*c = '?';
|
*c = '?';
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ChiakiLog global_log;
|
static ChiakiLog global_log;
|
||||||
|
@ -58,183 +58,183 @@ static JavaVM *global_vm;
|
||||||
|
|
||||||
JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved)
|
JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved)
|
||||||
{
|
{
|
||||||
global_vm = vm;
|
global_vm = vm;
|
||||||
chiaki_log_init(&global_log, CHIAKI_LOG_ALL & ~CHIAKI_LOG_VERBOSE, log_cb_android, NULL);
|
chiaki_log_init(&global_log, CHIAKI_LOG_ALL & ~CHIAKI_LOG_VERBOSE, log_cb_android, NULL);
|
||||||
CHIAKI_LOGI(&global_log, "Loading Chiaki Library");
|
CHIAKI_LOGI(&global_log, "Loading Chiaki Library");
|
||||||
ChiakiErrorCode err = chiaki_lib_init();
|
ChiakiErrorCode err = chiaki_lib_init();
|
||||||
CHIAKI_LOGI(&global_log, "Chiaki Library Init Result: %s\n", chiaki_error_string(err));
|
CHIAKI_LOGI(&global_log, "Chiaki Library Init Result: %s\n", chiaki_error_string(err));
|
||||||
return JNI_VERSION;
|
return JNI_VERSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define E (*env)
|
#define E (*env)
|
||||||
|
|
||||||
JNIEXPORT jstring JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_errorCodeToString(JNIEnv *env, jobject obj, jint value)
|
JNIEXPORT jstring JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_errorCodeToString(JNIEnv *env, jobject obj, jint value)
|
||||||
{
|
{
|
||||||
return E->NewStringUTF(env, chiaki_error_string((ChiakiErrorCode)value));
|
return E->NewStringUTF(env, chiaki_error_string((ChiakiErrorCode)value));
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jstring JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_quitReasonToString(JNIEnv *env, jobject obj, jint value)
|
JNIEXPORT jstring JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_quitReasonToString(JNIEnv *env, jobject obj, jint value)
|
||||||
{
|
{
|
||||||
return E->NewStringUTF(env, chiaki_quit_reason_string((ChiakiQuitReason)value));
|
return E->NewStringUTF(env, chiaki_quit_reason_string((ChiakiQuitReason)value));
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct android_chiaki_session_t
|
typedef struct android_chiaki_session_t
|
||||||
{
|
{
|
||||||
ChiakiSession session;
|
ChiakiSession session;
|
||||||
jobject java_session;
|
jobject java_session;
|
||||||
jclass java_session_class;
|
jclass java_session_class;
|
||||||
jmethodID java_session_event_login_pin_request_meth;
|
jmethodID java_session_event_login_pin_request_meth;
|
||||||
jmethodID java_session_event_quit_meth;
|
jmethodID java_session_event_quit_meth;
|
||||||
} AndroidChiakiSession;
|
} AndroidChiakiSession;
|
||||||
|
|
||||||
static JNIEnv *attach_thread_jni()
|
static JNIEnv *attach_thread_jni()
|
||||||
{
|
{
|
||||||
JNIEnv *env;
|
JNIEnv *env;
|
||||||
int r = (*global_vm)->GetEnv(global_vm, (void **)&env, JNI_VERSION);
|
int r = (*global_vm)->GetEnv(global_vm, (void **)&env, JNI_VERSION);
|
||||||
if(r == JNI_OK)
|
if(r == JNI_OK)
|
||||||
return env;
|
return env;
|
||||||
|
|
||||||
if((*global_vm)->AttachCurrentThread(global_vm, &env, NULL) == 0)
|
if((*global_vm)->AttachCurrentThread(global_vm, &env, NULL) == 0)
|
||||||
return env;
|
return env;
|
||||||
|
|
||||||
CHIAKI_LOGE(&global_log, "Failed to get JNIEnv from JavaVM or attach");
|
CHIAKI_LOGE(&global_log, "Failed to get JNIEnv from JavaVM or attach");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_chiaki_event_cb(ChiakiEvent *event, void *user)
|
static void android_chiaki_event_cb(ChiakiEvent *event, void *user)
|
||||||
{
|
{
|
||||||
AndroidChiakiSession *session = user;
|
AndroidChiakiSession *session = user;
|
||||||
|
|
||||||
JNIEnv *env = attach_thread_jni();
|
JNIEnv *env = attach_thread_jni();
|
||||||
if(!env)
|
if(!env)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch(event->type)
|
switch(event->type)
|
||||||
{
|
{
|
||||||
case CHIAKI_EVENT_LOGIN_PIN_REQUEST:
|
case CHIAKI_EVENT_LOGIN_PIN_REQUEST:
|
||||||
E->CallVoidMethod(env, session->java_session,
|
E->CallVoidMethod(env, session->java_session,
|
||||||
session->java_session_event_login_pin_request_meth,
|
session->java_session_event_login_pin_request_meth,
|
||||||
(jboolean)event->login_pin_request.pin_incorrect);
|
(jboolean)event->login_pin_request.pin_incorrect);
|
||||||
break;
|
break;
|
||||||
case CHIAKI_EVENT_QUIT:
|
case CHIAKI_EVENT_QUIT:
|
||||||
{
|
{
|
||||||
char *reason_str = strdup_jni(event->quit.reason_str);
|
char *reason_str = strdup_jni(event->quit.reason_str);
|
||||||
jstring reason_str_java = E->NewStringUTF(env, reason_str ? reason_str : "");
|
jstring reason_str_java = E->NewStringUTF(env, reason_str ? reason_str : "");
|
||||||
E->CallVoidMethod(env, session->java_session,
|
E->CallVoidMethod(env, session->java_session,
|
||||||
session->java_session_event_quit_meth,
|
session->java_session_event_quit_meth,
|
||||||
(jint)event->quit.reason,
|
(jint)event->quit.reason,
|
||||||
reason_str_java);
|
reason_str_java);
|
||||||
E->DeleteLocalRef(env, reason_str_java);
|
E->DeleteLocalRef(env, reason_str_java);
|
||||||
free(reason_str);
|
free(reason_str);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
(*global_vm)->DetachCurrentThread(global_vm);
|
(*global_vm)->DetachCurrentThread(global_vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionCreate(JNIEnv *env, jobject obj, jobject result, jobject connect_info_obj, jobject java_session)
|
JNIEXPORT void JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionCreate(JNIEnv *env, jobject obj, jobject result, jobject connect_info_obj, jobject java_session)
|
||||||
{
|
{
|
||||||
AndroidChiakiSession *session = NULL;
|
AndroidChiakiSession *session = NULL;
|
||||||
ChiakiErrorCode err = CHIAKI_ERR_SUCCESS;
|
ChiakiErrorCode err = CHIAKI_ERR_SUCCESS;
|
||||||
char *host_str = NULL;
|
char *host_str = NULL;
|
||||||
|
|
||||||
jclass result_class = E->GetObjectClass(env, result);
|
jclass result_class = E->GetObjectClass(env, result);
|
||||||
|
|
||||||
jclass connect_info_class = E->GetObjectClass(env, connect_info_obj);
|
jclass connect_info_class = E->GetObjectClass(env, connect_info_obj);
|
||||||
jstring host_string = E->GetObjectField(env, connect_info_obj, E->GetFieldID(env, connect_info_class, "host", "Ljava/lang/String;"));
|
jstring host_string = E->GetObjectField(env, connect_info_obj, E->GetFieldID(env, connect_info_class, "host", "Ljava/lang/String;"));
|
||||||
jbyteArray regist_key_array = E->GetObjectField(env, connect_info_obj, E->GetFieldID(env, connect_info_class, "registKey", "[B"));
|
jbyteArray regist_key_array = E->GetObjectField(env, connect_info_obj, E->GetFieldID(env, connect_info_class, "registKey", "[B"));
|
||||||
jbyteArray morning_array = E->GetObjectField(env, connect_info_obj, E->GetFieldID(env, connect_info_class, "morning", "[B"));
|
jbyteArray morning_array = E->GetObjectField(env, connect_info_obj, E->GetFieldID(env, connect_info_class, "morning", "[B"));
|
||||||
jobject connect_video_profile_obj = E->GetObjectField(env, connect_info_obj, E->GetFieldID(env, connect_info_class, "videoProfile", "Lcom/metallic/chiaki/lib/ConnectVideoProfile;"));
|
jobject connect_video_profile_obj = E->GetObjectField(env, connect_info_obj, E->GetFieldID(env, connect_info_class, "videoProfile", "Lcom/metallic/chiaki/lib/ConnectVideoProfile;"));
|
||||||
jclass connect_video_profile_class = E->GetObjectClass(env, connect_video_profile_obj);
|
jclass connect_video_profile_class = E->GetObjectClass(env, connect_video_profile_obj);
|
||||||
|
|
||||||
ChiakiConnectInfo connect_info;
|
ChiakiConnectInfo connect_info;
|
||||||
const char *str_borrow = E->GetStringUTFChars(env, host_string, NULL);
|
const char *str_borrow = E->GetStringUTFChars(env, host_string, NULL);
|
||||||
connect_info.host = host_str = strdup(str_borrow);
|
connect_info.host = host_str = strdup(str_borrow);
|
||||||
E->ReleaseStringUTFChars(env, host_string, str_borrow);
|
E->ReleaseStringUTFChars(env, host_string, str_borrow);
|
||||||
if(!connect_info.host)
|
if(!connect_info.host)
|
||||||
{
|
{
|
||||||
err = CHIAKI_ERR_MEMORY;
|
err = CHIAKI_ERR_MEMORY;
|
||||||
goto beach;
|
goto beach;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(E->GetArrayLength(env, regist_key_array) != sizeof(connect_info.regist_key))
|
if(E->GetArrayLength(env, regist_key_array) != sizeof(connect_info.regist_key))
|
||||||
{
|
{
|
||||||
CHIAKI_LOGE(&global_log, "Regist Key passed from Java has invalid length");
|
CHIAKI_LOGE(&global_log, "Regist Key passed from Java has invalid length");
|
||||||
err = CHIAKI_ERR_INVALID_DATA;
|
err = CHIAKI_ERR_INVALID_DATA;
|
||||||
goto beach;
|
goto beach;
|
||||||
}
|
}
|
||||||
jbyte *bytes = E->GetByteArrayElements(env, regist_key_array, NULL);
|
jbyte *bytes = E->GetByteArrayElements(env, regist_key_array, NULL);
|
||||||
memcpy(connect_info.regist_key, bytes, sizeof(connect_info.regist_key));
|
memcpy(connect_info.regist_key, bytes, sizeof(connect_info.regist_key));
|
||||||
E->ReleaseByteArrayElements(env, regist_key_array, bytes, JNI_ABORT);
|
E->ReleaseByteArrayElements(env, regist_key_array, bytes, JNI_ABORT);
|
||||||
|
|
||||||
if(E->GetArrayLength(env, morning_array) != sizeof(connect_info.morning))
|
if(E->GetArrayLength(env, morning_array) != sizeof(connect_info.morning))
|
||||||
{
|
{
|
||||||
CHIAKI_LOGE(&global_log, "Morning passed from Java has invalid length");
|
CHIAKI_LOGE(&global_log, "Morning passed from Java has invalid length");
|
||||||
err = CHIAKI_ERR_INVALID_DATA;
|
err = CHIAKI_ERR_INVALID_DATA;
|
||||||
goto beach;
|
goto beach;
|
||||||
}
|
}
|
||||||
bytes = E->GetByteArrayElements(env, morning_array, NULL);
|
bytes = E->GetByteArrayElements(env, morning_array, NULL);
|
||||||
memcpy(connect_info.morning, bytes, sizeof(connect_info.morning));
|
memcpy(connect_info.morning, bytes, sizeof(connect_info.morning));
|
||||||
E->ReleaseByteArrayElements(env, morning_array, bytes, JNI_ABORT);
|
E->ReleaseByteArrayElements(env, morning_array, bytes, JNI_ABORT);
|
||||||
|
|
||||||
|
|
||||||
connect_info.video_profile.width = (unsigned int)E->GetIntField(env, connect_video_profile_obj, E->GetFieldID(env, connect_video_profile_class, "width", "I"));
|
connect_info.video_profile.width = (unsigned int)E->GetIntField(env, connect_video_profile_obj, E->GetFieldID(env, connect_video_profile_class, "width", "I"));
|
||||||
connect_info.video_profile.height = (unsigned int)E->GetIntField(env, connect_video_profile_obj, E->GetFieldID(env, connect_video_profile_class, "height", "I"));
|
connect_info.video_profile.height = (unsigned int)E->GetIntField(env, connect_video_profile_obj, E->GetFieldID(env, connect_video_profile_class, "height", "I"));
|
||||||
connect_info.video_profile.max_fps = (unsigned int)E->GetIntField(env, connect_video_profile_obj, E->GetFieldID(env, connect_video_profile_class, "maxFPS", "I"));
|
connect_info.video_profile.max_fps = (unsigned int)E->GetIntField(env, connect_video_profile_obj, E->GetFieldID(env, connect_video_profile_class, "maxFPS", "I"));
|
||||||
connect_info.video_profile.bitrate = (unsigned int)E->GetIntField(env, connect_video_profile_obj, E->GetFieldID(env, connect_video_profile_class, "bitrate", "I"));
|
connect_info.video_profile.bitrate = (unsigned int)E->GetIntField(env, connect_video_profile_obj, E->GetFieldID(env, connect_video_profile_class, "bitrate", "I"));
|
||||||
|
|
||||||
session = CHIAKI_NEW(AndroidChiakiSession);
|
session = CHIAKI_NEW(AndroidChiakiSession);
|
||||||
if(!session)
|
if(!session)
|
||||||
{
|
{
|
||||||
err = CHIAKI_ERR_MEMORY;
|
err = CHIAKI_ERR_MEMORY;
|
||||||
goto beach;
|
goto beach;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = chiaki_session_init(&session->session, &connect_info, &global_log);
|
err = chiaki_session_init(&session->session, &connect_info, &global_log);
|
||||||
|
|
||||||
if(err != CHIAKI_ERR_SUCCESS)
|
if(err != CHIAKI_ERR_SUCCESS)
|
||||||
{
|
{
|
||||||
session->java_session = NULL;
|
session->java_session = NULL;
|
||||||
goto beach;
|
goto beach;
|
||||||
}
|
}
|
||||||
|
|
||||||
session->java_session = E->NewGlobalRef(env, java_session);
|
session->java_session = E->NewGlobalRef(env, java_session);
|
||||||
session->java_session_class = E->GetObjectClass(env, session->java_session);
|
session->java_session_class = E->GetObjectClass(env, session->java_session);
|
||||||
session->java_session_event_login_pin_request_meth = E->GetMethodID(env, session->java_session_class, "eventLoginPinRequest", "(Z)V");
|
session->java_session_event_login_pin_request_meth = E->GetMethodID(env, session->java_session_class, "eventLoginPinRequest", "(Z)V");
|
||||||
session->java_session_event_quit_meth = E->GetMethodID(env, session->java_session_class, "eventQuit", "(ILjava/lang/String;)V");
|
session->java_session_event_quit_meth = E->GetMethodID(env, session->java_session_class, "eventQuit", "(ILjava/lang/String;)V");
|
||||||
|
|
||||||
chiaki_session_set_event_cb(&session->session, android_chiaki_event_cb, session);
|
chiaki_session_set_event_cb(&session->session, android_chiaki_event_cb, session);
|
||||||
|
|
||||||
beach:
|
beach:
|
||||||
free(host_str);
|
free(host_str);
|
||||||
E->SetIntField(env, result, E->GetFieldID(env, result_class, "errorCode", "I"), (jint)err);
|
E->SetIntField(env, result, E->GetFieldID(env, result_class, "errorCode", "I"), (jint)err);
|
||||||
E->SetLongField(env, result, E->GetFieldID(env, result_class, "sessionPtr", "J"), (jlong)session);
|
E->SetLongField(env, result, E->GetFieldID(env, result_class, "sessionPtr", "J"), (jlong)session);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionFree(JNIEnv *env, jobject obj, jlong ptr)
|
JNIEXPORT void JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionFree(JNIEnv *env, jobject obj, jlong ptr)
|
||||||
{
|
{
|
||||||
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
||||||
if(!session)
|
if(!session)
|
||||||
return;
|
return;
|
||||||
E->DeleteGlobalRef(env, session->java_session);
|
E->DeleteGlobalRef(env, session->java_session);
|
||||||
chiaki_session_fini(&session->session);
|
chiaki_session_fini(&session->session);
|
||||||
free(session);
|
free(session);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionStart(JNIEnv *env, jobject obj, jlong ptr)
|
JNIEXPORT jint JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionStart(JNIEnv *env, jobject obj, jlong ptr)
|
||||||
{
|
{
|
||||||
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
||||||
return chiaki_session_start(&session->session);
|
return chiaki_session_start(&session->session);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionStop(JNIEnv *env, jobject obj, jlong ptr)
|
JNIEXPORT jint JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionStop(JNIEnv *env, jobject obj, jlong ptr)
|
||||||
{
|
{
|
||||||
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
||||||
return chiaki_session_stop(&session->session);
|
return chiaki_session_stop(&session->session);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionJoin(JNIEnv *env, jobject obj, jlong ptr)
|
JNIEXPORT jint JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionJoin(JNIEnv *env, jobject obj, jlong ptr)
|
||||||
{
|
{
|
||||||
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
||||||
return chiaki_session_join(&session->session);
|
return chiaki_session_join(&session->session);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue