mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-19 13:09:39 -07:00
Init Session in Android
This commit is contained in:
parent
103df69d29
commit
cd50874705
3 changed files with 113 additions and 8 deletions
|
@ -4,6 +4,9 @@
|
||||||
|
|
||||||
#include <chiaki/common.h>
|
#include <chiaki/common.h>
|
||||||
#include <chiaki/log.h>
|
#include <chiaki/log.h>
|
||||||
|
#include <chiaki/session.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#define LOG_TAG "Chiaki"
|
#define LOG_TAG "Chiaki"
|
||||||
|
|
||||||
|
@ -31,7 +34,7 @@ static void log_cb_android(ChiakiLogLevel level, const char *msg, void *user)
|
||||||
prio = ANDROID_LOG_INFO;
|
prio = ANDROID_LOG_INFO;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
__android_log_print(prio, LOG_TAG, "%s", msg);
|
__android_log_write(prio, LOG_TAG, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
ChiakiLog log_ctx;
|
ChiakiLog log_ctx;
|
||||||
|
@ -45,7 +48,75 @@ JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved)
|
||||||
return JNI_VERSION_1_2;
|
return JNI_VERSION_1_2;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jstring JNICALL Java_com_metallic_chiaki_lib_Chiaki_stringFromJNI(JNIEnv *env, jobject thiz)
|
#define E (*env)
|
||||||
|
|
||||||
|
JNIEXPORT jstring JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_errorCodeToString(JNIEnv *env, jobject obj, jint value)
|
||||||
{
|
{
|
||||||
return (*env)->NewStringUTF(env, chiaki_error_string(CHIAKI_ERR_SUCCESS));
|
return E->NewStringUTF(env, chiaki_error_string((ChiakiErrorCode)value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_createSession(JNIEnv *env, jobject obj, jobject result, jobject connect_info_obj)
|
||||||
|
{
|
||||||
|
ChiakiSession *session = NULL;
|
||||||
|
ChiakiErrorCode err = CHIAKI_ERR_SUCCESS;
|
||||||
|
char *host_str = NULL;
|
||||||
|
|
||||||
|
jclass result_class = E->GetObjectClass(env, result);
|
||||||
|
|
||||||
|
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;"));
|
||||||
|
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"));
|
||||||
|
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);
|
||||||
|
|
||||||
|
ChiakiConnectInfo connect_info;
|
||||||
|
const char *str_borrow = E->GetStringUTFChars(env, host_string, NULL);
|
||||||
|
connect_info.host = host_str = strdup(str_borrow);
|
||||||
|
E->ReleaseStringUTFChars(env, host_string, str_borrow);
|
||||||
|
if(!connect_info.host)
|
||||||
|
{
|
||||||
|
err = CHIAKI_ERR_MEMORY;
|
||||||
|
goto beach;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(E->GetArrayLength(env, regist_key_array) != sizeof(connect_info.regist_key))
|
||||||
|
{
|
||||||
|
CHIAKI_LOGE(&log_ctx, "Regist Key passed from Java has invalid length");
|
||||||
|
err = CHIAKI_ERR_INVALID_DATA;
|
||||||
|
goto beach;
|
||||||
|
}
|
||||||
|
jbyte *bytes = E->GetByteArrayElements(env, regist_key_array, NULL);
|
||||||
|
memcpy(connect_info.regist_key, bytes, sizeof(connect_info.regist_key));
|
||||||
|
E->ReleaseByteArrayElements(env, regist_key_array, bytes, JNI_ABORT);
|
||||||
|
|
||||||
|
if(E->GetArrayLength(env, morning_array) != sizeof(connect_info.morning))
|
||||||
|
{
|
||||||
|
CHIAKI_LOGE(&log_ctx, "Morning passed from Java has invalid length");
|
||||||
|
err = CHIAKI_ERR_INVALID_DATA;
|
||||||
|
goto beach;
|
||||||
|
}
|
||||||
|
bytes = E->GetByteArrayElements(env, morning_array, NULL);
|
||||||
|
memcpy(connect_info.morning, bytes, sizeof(connect_info.morning));
|
||||||
|
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.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.bitrate = (unsigned int)E->GetIntField(env, connect_video_profile_obj, E->GetFieldID(env, connect_video_profile_class, "bitrate", "I"));
|
||||||
|
|
||||||
|
session = CHIAKI_NEW(ChiakiSession);
|
||||||
|
if(!session)
|
||||||
|
{
|
||||||
|
err = CHIAKI_ERR_MEMORY;
|
||||||
|
goto beach;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = chiaki_session_init(session, &connect_info, &log_ctx);
|
||||||
|
|
||||||
|
beach:
|
||||||
|
free(host_str);
|
||||||
|
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);
|
||||||
|
}
|
|
@ -2,7 +2,10 @@ package com.metallic.chiaki
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import com.metallic.chiaki.lib.Chiaki
|
import com.metallic.chiaki.lib.ChiakiNative
|
||||||
|
import com.metallic.chiaki.lib.ConnectInfo
|
||||||
|
import com.metallic.chiaki.lib.ConnectVideoProfile
|
||||||
|
import com.metallic.chiaki.lib.ErrorCode
|
||||||
import kotlinx.android.synthetic.main.activity_main.*
|
import kotlinx.android.synthetic.main.activity_main.*
|
||||||
|
|
||||||
class MainActivity : AppCompatActivity()
|
class MainActivity : AppCompatActivity()
|
||||||
|
@ -12,6 +15,12 @@ class MainActivity : AppCompatActivity()
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_main)
|
setContentView(R.layout.activity_main)
|
||||||
|
|
||||||
testTextView.text = Chiaki.stringFromJNI()
|
val result = ChiakiNative.CreateSessionResult(0, 0)
|
||||||
|
ChiakiNative.createSession(result, ConnectInfo("host",
|
||||||
|
ByteArray(0x10) { 0 },
|
||||||
|
ByteArray(0x10) { 0 },
|
||||||
|
ConnectVideoProfile(0, 0, 0, 0)))
|
||||||
|
|
||||||
|
testTextView.text = "${ErrorCode(0).toString()}\n${result}\n${ErrorCode(result.errorCode)}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,39 @@
|
||||||
package com.metallic.chiaki.lib
|
package com.metallic.chiaki.lib
|
||||||
|
|
||||||
class Chiaki
|
data class ConnectVideoProfile(
|
||||||
|
val width: Int,
|
||||||
|
val height: Int,
|
||||||
|
val maxFPS: Int,
|
||||||
|
val bitrate: Int
|
||||||
|
)
|
||||||
|
|
||||||
|
data class ConnectInfo(
|
||||||
|
val host: String,
|
||||||
|
val registKey: ByteArray,
|
||||||
|
val morning: ByteArray,
|
||||||
|
val videoProfile: ConnectVideoProfile
|
||||||
|
)
|
||||||
|
|
||||||
|
class ChiakiNative
|
||||||
{
|
{
|
||||||
|
data class CreateSessionResult(var errorCode: Int, var sessionPtr: Long)
|
||||||
companion object
|
companion object
|
||||||
{
|
{
|
||||||
init
|
init
|
||||||
{
|
{
|
||||||
System.loadLibrary("chiaki-jni")
|
System.loadLibrary("chiaki-jni")
|
||||||
}
|
}
|
||||||
|
@JvmStatic external fun errorCodeToString(value: Int): String
|
||||||
@JvmStatic external fun stringFromJNI(): String
|
@JvmStatic external fun createSession(result: CreateSessionResult, connectInfo: ConnectInfo)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ErrorCode(val value: Int)
|
||||||
|
{
|
||||||
|
override fun toString() = ChiakiNative.errorCodeToString(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
class Session
|
||||||
|
{
|
||||||
|
private val nativePtr: Long = 0
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue