Exemplo n.º 1
0
bool JNIKit::detach() {
	if (env) {
		auto jvm = getVm();
		if (jvm)
			return jvm->DetachCurrentThread() == JNI_OK;
	}

	return false;
}
Exemplo n.º 2
0
void platformSetOrientation(int orientation)
{
	auto env = gApp->activity->env;
	auto vm = gApp->activity->vm;
	auto obj = gApp->activity->clazz;

	vm->AttachCurrentThread( &env, NULL );

	auto clazz = env->GetObjectClass(obj);
	jmethodID orientationID = env->GetMethodID(clazz, "setOrientation", "(I)V");

	env->CallVoidMethod(obj, orientationID, orientation);
	vm->DetachCurrentThread();
}
Exemplo n.º 3
0
int platformVibrate(uint64_t milliseconds)
{
	auto env = gApp->activity->env;
	auto vm = gApp->activity->vm;
	auto obj = gApp->activity->clazz;

    vm->AttachCurrentThread( &env, NULL );

	auto clazz = env->GetObjectClass(obj);
	jmethodID vibrateID = env->GetMethodID(clazz, "vibrate", "(J)I");
    auto result = env->CallIntMethod(obj, vibrateID, milliseconds);
    vm->DetachCurrentThread();
    return result;
}
Exemplo n.º 4
0
uint32_t platformLanIP()
{
	auto env = gApp->activity->env;
	auto vm = gApp->activity->vm;
	auto obj = gApp->activity->clazz;

	vm->AttachCurrentThread( &env, NULL );

	auto clazz = env->GetObjectClass(obj);
	jmethodID methodID = env->GetMethodID(clazz, "getLanIp", "()I");
	auto result = env->CallIntMethod(obj, methodID);
	vm->DetachCurrentThread();
	return result;
}
Exemplo n.º 5
0
static void callJNIReturnString(const char* str, char* result)
{
	auto env = gApp->activity->env;
	auto vm = gApp->activity->vm;
	auto obj = gApp->activity->clazz;

	vm->AttachCurrentThread( &env, NULL );
	auto clazz = env->GetObjectClass(obj);
	jmethodID methodID = env->GetMethodID(clazz, str, "()[B");

	auto array = (jbyteArray)env->CallObjectMethod(obj, methodID);
	auto ptr   = env->GetByteArrayElements(array, 0);
	int len   = env->GetArrayLength(array);

	memcpy(result, ptr, len);
	result[len] = '\0';

	env->ReleaseByteArrayElements(array, ptr, JNI_ABORT);

	vm->DetachCurrentThread();
}
Exemplo n.º 6
0
static void *slurp(void *pVoidInfo) {
    GifInfo *info = pVoidInfo;
    while (1) {
        pthread_mutex_lock(&info->surfaceDescriptor->slurpMutex);
        while (info->surfaceDescriptor->slurpHelper == 0)
            pthread_cond_wait(&info->surfaceDescriptor->slurpCond, &info->surfaceDescriptor->slurpMutex);

        if (info->surfaceDescriptor->slurpHelper == 2) {
            pthread_mutex_unlock(&info->surfaceDescriptor->slurpMutex);
            break;
        }
        info->surfaceDescriptor->slurpHelper = 0;
        pthread_mutex_unlock(&info->surfaceDescriptor->slurpMutex);
        DDGifSlurp(info, true);
        pthread_mutex_lock(&info->surfaceDescriptor->renderMutex);
        info->surfaceDescriptor->renderHelper = 1;
        pthread_cond_signal(&info->surfaceDescriptor->renderCond);
        pthread_mutex_unlock(&info->surfaceDescriptor->renderMutex);
    }

    DetachCurrentThread();
    return NULL;
}
Exemplo n.º 7
0
static void *slurp(void *pVoidInfo) {
	GifInfo *info = pVoidInfo;
	SurfaceDescriptor *descriptor = info->frameBufferDescriptor;
	while (1) {
		pthread_mutex_lock(&descriptor->slurpMutex);
		while (descriptor->slurpHelper == 0) {
			pthread_cond_wait(&descriptor->slurpCond, &descriptor->slurpMutex);
		}

		if (descriptor->slurpHelper == 2) {
			pthread_mutex_unlock(&descriptor->slurpMutex);
			DetachCurrentThread();
			return NULL;
		}
		descriptor->slurpHelper = 0;
		pthread_mutex_unlock(&descriptor->slurpMutex);
		DDGifSlurp(info, true, false);
		pthread_mutex_lock(&descriptor->renderMutex);
		descriptor->renderHelper = 1;
		pthread_cond_signal(&descriptor->renderCond);
		pthread_mutex_unlock(&descriptor->renderMutex);
	}
}