Beispiel #1
0
jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
	JNIEnv *env;
	g_JavaVM = vm;

	LOGV("enter JNI_OnLoad");
	//jni_thumbnail_init();
	if ((*vm)->GetEnv(vm,(void**) &env, JNI_VERSION_1_4) != JNI_OK) 
	{
		return -1;
	}

	
	(*env)->PushLocalFrame(env,128);
	initMakeGlobalRef();
	makeGlobalRef(env,g_class_video_db_adapter,adapter_path,str_video_db_adapter);

	g_java_string = (*env)->FindClass(env, "java/lang/String");
	g_java_string = (*env)->NewGlobalRef(env,g_java_string);

	if(!Reg_Uim(env))
	{
        LOGE("error reg uim");
        goto ON_LOAD_ERROR;
	}

	(*env)->PopLocalFrame(env,0);
    
	LOGV("exit JNI_OnLoad ok 0");
	return JNI_VERSION_1_4;
    
ON_LOAD_ERROR:
   	(*env)->PopLocalFrame(env,0);
    return -1;       
}
Beispiel #2
0
jboolean initializeWorker(JNIEnv *env, jobject *javaFront, JavaVM* gJava) {
	__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, "init was ");

	gJavaVM = gJava;
	//cache classes
	mClassCaller = (*env)->FindClass(env, "com/rkapp/JNICaller");
	makeGlobalRef(env, &mClassCaller);
	if (mClassCaller == NULL) {
		goto ERROR;
	}

	//cache java methods
	MethodOnCleanupEnd = (*env)->GetMethodID(env, mClassCaller, "onFinalizeEnd",
			"(Z)V");
	if (MethodOnCleanupEnd == NULL) {
		goto ERROR;
	}

	MethodOnMassage = (*env)->GetMethodID(env, mClassCaller, "onMassage",
			"(Ljava/lang/String;)V");
	if (MethodOnCleanupEnd == NULL) {
		goto ERROR;
	}

	MethodOnMassageByte = (*env)->GetMethodID(env, mClassCaller,
			"onMassageByte", "([C)V");
	if (MethodOnCleanupEnd == NULL) {
		goto ERROR;
	}

	MethodOnNewFrame = (*env)->GetMethodID(env, mClassCaller, "onNewFrame",
			"()V");
	if (MethodOnCleanupEnd == NULL) {
		goto ERROR;
	}

	mJavaFront = (*env)->NewGlobalRef(env, javaFront);
	if (mJavaFront == NULL) {
		goto ERROR;
	}
	sendMsgToJava(env, "init was");
	return TRUE;

	ERROR: __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG,
			"start watcher error.");
	sendMsgToJava(env, "start watcher error.");
	return FALSE;
}
Beispiel #3
0
void startWatcher(JNIEnv* pEnv, StoreWatcher* pWatcher, Store* pStore,
		jobject pStoreFront) {
// Erases the StoreWatcher structure.
	memset(pWatcher, 0, sizeof(StoreWatcher));
	pWatcher->mState = STATE_OK;
	pWatcher->mStore = pStore;
// Caches the VM.
	if ((*pEnv)->GetJavaVM(pEnv, &pWatcher->mJavaVM) != JNI_OK) {
		goto ERROR;
	}
	// Caches classes.
	pWatcher->ClassStore = (*pEnv)->FindClass(pEnv,
			"com/congnt/ndkguide/Store");
	makeGlobalRef(pEnv, &pWatcher->ClassStore);
	if (pWatcher->ClassStore == NULL)
		goto ERROR;
	pWatcher->ClassColor = (*pEnv)->FindClass(pEnv,
			"com/congnt/ndkguide/Color");
	makeGlobalRef(pEnv, &pWatcher->ClassColor);
	if (pWatcher->ClassColor == NULL)
		goto ERROR;
	// Caches Java methods.
	pWatcher->MethodOnAlertInt = (*pEnv)->GetMethodID(pEnv,
			pWatcher->ClassStore, "onAlert", "(I)V");
	if (pWatcher->MethodOnAlertInt == NULL)
		goto ERROR;
	pWatcher->MethodOnAlertString = (*pEnv)->GetMethodID(pEnv,
			pWatcher->ClassStore, "onAlert", "(Ljava/lang/String;)V");
	if (pWatcher->MethodOnAlertString == NULL)
		goto ERROR;
	pWatcher->MethodOnAlertColor = (*pEnv)->GetMethodID(pEnv,
			pWatcher->ClassStore, "onAlert", "(Lcom/packtpub/Color;)V");
	if (pWatcher->MethodOnAlertColor == NULL)
		goto ERROR;
	pWatcher->MethodColorEquals = (*pEnv)->GetMethodID(pEnv,
			pWatcher->ClassColor, "equals", "(Ljava/lang/Object;)Z");
	if (pWatcher->MethodColorEquals == NULL)
		goto ERROR;
	jmethodID ConstructorColor = (*pEnv)->GetMethodID(pEnv,
			pWatcher->ClassColor, "<init>", "(Ljava/lang/String;)V");
	if (ConstructorColor == NULL)
		goto ERROR;
// Caches objects.
	pWatcher->mStoreFront = (*pEnv)->NewGlobalRef(pEnv, pStoreFront);
	if (pWatcher->mStoreFront == NULL)
		goto ERROR;
// Initializes and launches the native thread. For simplicity
// purpose, error results are not checked (but we should...).
	pthread_attr_t lAttributes;
	int lError = pthread_attr_init(&lAttributes);
	if (lError)
		goto ERROR;
	lError = pthread_create(&pWatcher->mThread, &lAttributes, runWatcher,
			pWatcher);
	if (lError)
		goto ERROR;

	// Creates a new white color and keeps a global reference.
	jstring lColor = (*pEnv)->NewStringUTF(pEnv, "white");
	if (lColor == NULL)
		goto ERROR;
	pWatcher->mColor = (*pEnv)->NewObject(pEnv, pWatcher->ClassColor,
			ConstructorColor, lColor);
	makeGlobalRef(pEnv, &pWatcher->mColor);
	if (pWatcher->mColor == NULL)
		goto ERROR;
	return;
	ERROR: stopWatcher(pEnv, pWatcher);
	return;
}
/*===================================================================*/
BOOL InfoNES_CreateContext(JNIEnv *pEnv,
						NES_CONTEXT *pNesContext,
						jobject refNesSimu,
						jobject refBitmap)
{
	if( 0 == pEnv || 0 == pNesContext )
	{
		LOGV("InfoNES_CreateContext failed 1");
		return 0;
	}
	// Caches JavaVM.
	if( ( 0 == pNesContext->pJavaVM )
		&& ((*pEnv)->GetJavaVM(pEnv, &(pNesContext->pJavaVM)) != JNI_OK) )
	{
		LOGV("InfoNES_CreateContext failed 2");
		return 0;
	}
	// caches classNesSimu
	if( 0 == pNesContext->classNesSimu )
	{
		jclass clsNesSimu = (*pEnv)->FindClass(pEnv, "com/falcon/nesSimon/NesSimu");
		LOGV("InfoNES_CreateContext\n");
		pNesContext->classNesSimu = makeGlobalRef(pEnv, clsNesSimu);
		if( 0 == pNesContext->classNesSimu )
		{
			LOGV("InfoNES_CreateContext failed 3");
			return 0;
		}
	}
	if( 0 != refNesSimu && (JNI_TRUE != (*pEnv)->IsSameObject(pEnv, pNesContext->objNesSimu, refNesSimu )))
	{
		pNesContext->objNesSimu = makeGlobalRef(pEnv, refNesSimu);
		if( 0 == pNesContext->objNesSimu )
		{
			LOGV("InfoNES_CreateContext failed 4");
			return 0;
		}
	}
	if( 0 != refBitmap && (JNI_TRUE != (*pEnv)->IsSameObject(pEnv, pNesContext->objBitmap, refBitmap )))
	{
		pNesContext->objBitmap = makeGlobalRef(pEnv, refBitmap);
		if( 0 == pNesContext->objBitmap )
		{
			LOGV("InfoNES_CreateContext failed 5");
			return 0;
		}
	}
	if( 0 == pNesContext->methodUpdateView )
	{
		pNesContext->methodUpdateView = (*pEnv)->GetMethodID(pEnv, pNesContext->classNesSimu, "UpdateView", "()V");
		if( 0 == pNesContext->methodUpdateView )
		{
			LOGV("InfoNES_CreateContext failed 6");
			return 0;
		}
	}
	NES_MUTEX_CREATE( WaitFlagCriticalSection );
	NES_MUTEX_CREATE( PauseFlagCriticalSection );
	NES_SEM_INIT(pNesContext->sem, 0);
	{
		int sem_val;
		sem_getvalue(&(pNesContext->sem), &sem_val);
		LOGV("InfoNES_CreateContext success, sem = %d", sem_val);
	}
	return 1;
}