// // Created by JIBUM HAN on 2026. 4. 9.. // #include #include #include "PlayerEngine.h" // 기존 월페이퍼 코드 어딘가에 있는 전역 JavaVM 포인터를 가져다 씁니다. extern JavaVM* g_vm; // C++ 객체를 포인터로 변환하는 헬퍼 함수 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) { // 엔진 생성 시 JavaVM과 Kotlin 콜백 객체(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 void JNICALL Java_bums_lunatic_launcher_player_NativePlayer_nativeSetDataSource(JNIEnv *env, jobject thiz, jlong handle, jint videoFd, jstring jSubPath) { PlayerEngine* engine = toPlayerNative(handle); if (engine) { const char* subPath = env->GetStringUTFChars(jSubPath, nullptr); // 엔진으로 FD 번호를 전달 engine->setDataSource(videoFd, subPath); env->ReleaseStringUTFChars(jSubPath, subPath); } } 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); // RGBA 포맷으로 버퍼 설정 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; } }