#include #include #include "PlayerEngine.h" extern JavaVM* g_vm; template T* toPlayerNative(jlong handle) { return reinterpret_cast(handle); } extern "C" { JNIEXPORT jlong JNICALL Java_bums_lunatic_launcher_player_NativePlayer_nativeInit(JNIEnv *env, jobject thiz) { PlayerEngine* engine = new PlayerEngine(g_vm, thiz); return reinterpret_cast(engine); } JNIEXPORT void JNICALL Java_bums_lunatic_launcher_player_NativePlayer_nativeSeekBy(JNIEnv *env, jobject thiz, jlong handle, jdouble seconds) { PlayerEngine* engine = toPlayerNative(handle); if (engine) engine->seekBy(seconds); } JNIEXPORT void JNICALL Java_bums_lunatic_launcher_player_NativePlayer_nativeSetSpeed(JNIEnv *env, jobject thiz, jlong handle, jfloat speed) { PlayerEngine* engine = toPlayerNative(handle); if (engine) engine->setSpeed(speed); } JNIEXPORT jdouble JNICALL Java_bums_lunatic_launcher_player_NativePlayer_nativeGetCurrentPosition(JNIEnv *env, jobject thiz, jlong handle) { PlayerEngine* engine = toPlayerNative(handle); return engine ? engine->getCurrentPosition() : 0.0; } JNIEXPORT jstring JNICALL Java_bums_lunatic_launcher_player_NativePlayer_nativeGetSubtitleTracks(JNIEnv *env, jobject thiz, jlong handle) { PlayerEngine* engine = toPlayerNative(handle); std::string tracks = engine ? engine->getSubtitleTracks() : ""; return env->NewStringUTF(tracks.c_str()); } JNIEXPORT void JNICALL Java_bums_lunatic_launcher_player_NativePlayer_nativeSetSubtitleTrack(JNIEnv *env, jobject thiz, jlong handle, jint index) { PlayerEngine* engine = toPlayerNative(handle); if (engine) engine->setSubtitleTrack(index); } JNIEXPORT void JNICALL Java_bums_lunatic_launcher_player_NativePlayer_nativeSetDataSource(JNIEnv *env, jobject thiz, jlong handle, jint videoFd, jint jSubFd) { PlayerEngine* engine = toPlayerNative(handle); if (engine) engine->setDataSource(videoFd, jSubFd); } // 💡 추가된 비동기 준비 JNIEXPORT void JNICALL Java_bums_lunatic_launcher_player_NativePlayer_nativePrepareAsync(JNIEnv *env, jobject thiz, jlong handle) { PlayerEngine* engine = toPlayerNative(handle); if (engine) engine->prepareAsync(); } JNIEXPORT void JNICALL Java_bums_lunatic_launcher_player_NativePlayer_nativePause(JNIEnv *env, jobject thiz, jlong handle) { PlayerEngine* engine = toPlayerNative(handle); if (engine) engine->pause(); } JNIEXPORT void JNICALL Java_bums_lunatic_launcher_player_NativePlayer_nativePlay(JNIEnv *env, jobject thiz, jlong handle, jobject surface) { PlayerEngine* engine = toPlayerNative(handle); if (engine && surface) { ANativeWindow* window = ANativeWindow_fromSurface(env, surface); ANativeWindow_setBuffersGeometry(window, 0, 0, WINDOW_FORMAT_RGBX_8888); engine->play(window); ANativeWindow_release(window); } } JNIEXPORT void JNICALL Java_bums_lunatic_launcher_player_NativePlayer_nativeStop(JNIEnv *env, jobject thiz, jlong handle) { PlayerEngine* engine = toPlayerNative(handle); if (engine) engine->stop(); } JNIEXPORT void JNICALL Java_bums_lunatic_launcher_player_NativePlayer_nativeDestroy(JNIEnv *env, jobject thiz, jlong handle) { PlayerEngine* engine = toPlayerNative(handle); if (engine) delete engine; } }