std::shared_ptr<std::map<std::string, std::string> > PluginJniHelper::JSONObject2Map(jobject json) { auto stdmap = std::make_shared<std::map<std::string, std::string> >(); JNIEnv* env = getEnv(); jclass c_json = env->FindClass("org/json/JSONObject"); jclass c_iterator = env->FindClass("java/util/Iterator"); jmethodID m_keys = env->GetMethodID(c_json, "keys", "()Ljava/util/Iterator;"); jmethodID m_hasNext = env->GetMethodID(c_iterator, "hasNext", "()Z"); jmethodID m_next = env->GetMethodID(c_iterator, "next", "()Ljava/lang/Object;"); jmethodID m_getString = env->GetMethodID(c_json, "getString", "(Ljava/lang/String;)Ljava/lang/String;"); jstring jKeyString = NULL; jstring jValueString = NULL; jobject jKeys = env->CallObjectMethod(json, m_keys); while(env->CallBooleanMethod(jKeys, m_hasNext)) { jKeyString = (jstring)(env->CallObjectMethod(jKeys, m_next)); jValueString = (jstring)(env-> CallObjectMethod(json, m_getString, jKeyString)); stdmap->insert(std::make_pair(jstring2string(jKeyString), jstring2string(jValueString))); } env->DeleteLocalRef(jKeys); if(jKeyString) env->DeleteLocalRef(jKeyString); if(jValueString) env->DeleteLocalRef(jValueString); env->DeleteLocalRef(c_json); env->DeleteLocalRef(c_iterator); return stdmap; }
const char *LoomJni::getPackageName() { static utString packageName; if (packageName.size()) { return packageName.c_str(); } loomJniMethodInfo t; if (getStaticMethodInfo(t, "co/theengine/loomdemo/LoomDemo", "getActivityPackageName", "()Ljava/lang/String;")) { jstring str = (jstring)t.getEnv()->CallStaticObjectMethod(t.classID, t.methodID); t.getEnv()->DeleteLocalRef(t.classID); packageName = jstring2string(str); t.getEnv()->DeleteLocalRef(str); lmLog(jniLogGroup, "package name %s", packageName.c_str()); return packageName.c_str(); } return 0; }
/* * Class: org_imgsdk_core_NativeImageSdk * Method: setEffectCmd * Signature: (JLjava/lang/String;)V */ void JNICALL Java_org_imgsdk_core_NativeImageSdk_setEffectCmd (JNIEnv *env, jobject thiz, jlong ptr, jstring jcommand) { LOG_ENTRY; SdkEnv* sdk = (SdkEnv *)((intptr_t)ptr); if (NULL == sdk) { LogE("NULL pointer exception\n"); return; } if (NULL == jcommand) { LogE("NULL pointer exception\n"); return; } Log("setEffectCmd pthread self:%lx\n", pthread_self() ); Log("setEffectCmd gettid:%x\n", gettid() ); char *cmd = jstring2string(env, jcommand); if (NULL == cmd) { LogE("Effect cmd is NULL\n"); return; } Log("EffectCmd = %s\n", cmd); setEffectCmd (sdk, cmd); LOG_EXIT; }
/* * Class: org_imgsdk_core_NativeImageSdk * Method: setOutputPath * Signature: (JLjava/lang/String;)V */ JNIEXPORT void JNICALL Java_org_imgsdk_core_NativeImageSdk_setOutputPath (JNIEnv *env, jobject thiz, jlong ptr, jstring jpath) { LOG_ENTRY; SdkEnv* sdk = (SdkEnv *)((intptr_t)ptr); if (NULL == sdk) { LogE("NULL pointer exception\n"); return; } if (NULL == jpath) { LogE("NULL pointer exception\n"); return; } char *path = jstring2string(env, jpath); if (NULL == path) { LogE("output path is NULL\n"); return; } Log("output path:%s\n", path); setOutputImagePath(sdk, path); LOG_EXIT; }
JNIEXPORT void JNICALL Java_org_openscenegraph_osg_core_Node_nativeSetRenderBinDetails(JNIEnv *env, jclass, jlong cptr, jint order, jstring bin) { osg::Node *node = reinterpret_cast<osg::Node *>(cptr); if(node != 0) { node->getOrCreateStateSet()->setRenderBinDetails(order,jstring2string(env,bin)); } }
JNIEXPORT void JNICALL Java_com_dmzj_manhua_openapi_OpenApiHelper_onTokenReturn (JNIEnv * env, jclass obj, jint plat, jstring token ,jstring uid) { jclass LogClass = env->FindClass("android/util/Log"); jmethodID dID = env->GetStaticMethodID(LogClass,"d","(Ljava/lang/String;Ljava/lang/String;)I"); jstring tag = env->NewStringUTF("Demo"); jstring infostart = env->NewStringUTF("----- onTokenReturn -----"); env->CallStaticIntMethod(LogClass,dID,tag,infostart);// // std::string mtoken = jstring2string(token,env); std::string muid = jstring2string(uid,env); if(plat == 1){ DMLoginController::getInstance()->threePartyLand("qq",mtoken,muid); } else if(plat ==2){ DMLoginController::getInstance()->threePartyLand("weibo",mtoken,muid); } }
JNIEXPORT jlong JNICALL Java_org_openscenegraph_osg_db_ReadFile_nativeReadNodeFile(JNIEnv *env, jclass, jstring filename) { osg::Node *node = osgDB::readNodeFile(jstring2string(env,filename)); if(node == 0) { LOGE("Error loading scene"); return 0; } node->ref(); return reinterpret_cast<jlong>(node); }
const char *LoomJni::getWritablePath() { static utString writablePath; loomJniMethodInfo t; if (getStaticMethodInfo(t, "co/theengine/loomdemo/LoomDemo", "getActivityWritablePath", "()Ljava/lang/String;")) { jstring str = (jstring)t.getEnv()->CallStaticObjectMethod(t.classID, t.methodID); writablePath = jstring2string(str); t.getEnv()->DeleteLocalRef(str); lmLog(jniLogGroup, "writable path %s", writablePath.c_str()); return writablePath.c_str(); } return 0; }
const char *LoomJni::getSettingsPath() { static utString path; loomJniMethodInfo t; if (getStaticMethodInfo(t, "co/theengine/loomplayer/LoomPlayer", "getActivitySettingsPath", "()Ljava/lang/String;")) { jstring str = (jstring)t.getEnv()->CallStaticObjectMethod(t.classID, t.methodID); path = jstring2string(str); t.getEnv()->DeleteLocalRef(str); lmLog(jniLogGroup, "settings path %s", path.c_str()); return path.c_str(); } return 0; }
JNIEXPORT void JNICALL Java_org_openscenegraph_osg_core_Geode_nativeGetTextureRectangle( JNIEnv *env, jclass, jlong cptr, jfloat width, jfloat height, jstring fileName) { osg::Geode *geode = reinterpret_cast<osg::Geode *>(cptr); osg::BoundingBox bb(-width/2,-height/2,0.0f,width,height,0.0f); const std::string& filename = jstring2string(env,fileName); osg::Vec3 top_left(bb.xMin(),bb.yMax(),bb.zMax()); osg::Vec3 bottom_left(bb.xMin(),bb.yMin(),bb.zMax()); osg::Vec3 bottom_right(bb.xMax(),bb.yMin(),bb.zMax()); osg::Vec3 top_right(bb.xMax(),bb.yMax(),bb.zMax()); // create geometry osg::Geometry* geom = new osg::Geometry; osg::Vec3Array* vertices = new osg::Vec3Array(6); (*vertices)[0] = top_left; (*vertices)[1] = bottom_left; (*vertices)[2] = bottom_right; (*vertices)[3] = bottom_right; (*vertices)[4] = top_right; (*vertices)[5] = top_left; geom->setVertexArray(vertices); osg::Vec2Array* texcoords = new osg::Vec2Array(6); (*texcoords)[0].set(0.0f, 0.0f); (*texcoords)[1].set(0.0f, 1.0f); (*texcoords)[2].set(1.0f, 1.0f); (*texcoords)[3].set(1.0f, 1.0f); (*texcoords)[4].set(1.0f, 0.0f); (*texcoords)[5].set(0.0f, 0.0f); geom->setTexCoordArray(0,texcoords); osg::Vec3Array* normals = new osg::Vec3Array(1); (*normals)[0].set(0.0f,-1.0f,0.0f); geom->setNormalArray(normals); geom->setNormalBinding(osg::Geometry::BIND_OVERALL); osg::Vec4Array* colors = new osg::Vec4Array(1); (*colors)[0].set(1.0f,1.0f,1.0f,1.0f); geom->setColorArray(colors); geom->setColorBinding(osg::Geometry::BIND_OVERALL); geom->addPrimitiveSet(new osg::DrawArrays(GL_TRIANGLES, 0, 6)); // disable display list so our modified tex coordinates show up geom->setUseDisplayList(false); // load image osg::Image* img = osgDB::readImageFile(filename); // setup texture osg::Texture2D* texture = new osg::Texture2D(img); texture->setDataVariance(osg::Object::DYNAMIC); /*/////////////////////kookmin start/////////////////////*/ // setup state osg::StateSet* state = geom->getOrCreateStateSet(); state->setTextureAttributeAndModes(0, texture, osg::StateAttribute::ON); state->setRenderingHint(osg::StateSet::TRANSPARENT_BIN); /*/////////////////////kookmin over/////////////////////*/ // turn off lighting state->setMode(GL_LIGHTING, osg::StateAttribute::OFF); texture->ref(); img->ref(); LOGE("set up texture start 5...."); geom->ref(); LOGE("set up texture start 6...."); geode->addDrawable(geom); LOGE("set up texture start 7...."); }
void Java_com_test_surfaceview_TestNative_Draw(JNIEnv* env,jobject obj,jstring jstr) { LOGI("Java_com_test_surfaceview_TestNative_Draw"); char* path = jstring2string(env,jstr); if(g_assetManager == NULL) { LOGE("Get AAssetManager ERROR!"); } AAsset* asset = AAssetManager_open(g_assetManager, path,AASSET_MODE_UNKNOWN); free(path); path = NULL; if(asset == NULL) return ; int bufferLen = AAsset_getLength(asset); unsigned char* buffer = (unsigned char*)malloc(bufferLen+1); buffer[bufferLen] = 0; int numBytesRead = AAsset_read(asset, buffer, bufferLen); g_buffer = buffer; g_bufferLen = bufferLen; AAsset_close(asset); LOGI("g_bufferLen=%d",g_bufferLen); BITMAPFILEHEADER filehead; BITMAPINFOHEADER head; memcpy(&filehead,g_buffer,sizeof(BITMAPFILEHEADER)); memcpy(&head,g_buffer+sizeof(BITMAPFILEHEADER),sizeof(BITMAPINFOHEADER)); if(filehead.bfType != 0x4D42) { free(buffer); buffer=NULL; return ; } ANativeWindow_setBuffersGeometry(g_nativeWindow,head.biWidth,head.biHeight,WINDOW_FORMAT_RGB_565); g_nWidth = ANativeWindow_getWidth(g_nativeWindow); g_nHeight = ANativeWindow_getHeight(g_nativeWindow); int nfomat = ANativeWindow_getFormat(g_nativeWindow); LOGI("bfOffBits=%d,g_nWidth=%d,g_nHeight=%d,nfomat=%d",filehead.bfOffBits,g_nWidth,g_nHeight,nfomat); ANativeWindow_Buffer windowBuffer; if(ANativeWindow_lock(g_nativeWindow,&windowBuffer,NULL) <0 ) { LOGE("cannot lock window"); } else { // unsigned char* tmp =(unsigned char*)( g_buffer+filehead.bfOffBits); // unsigned int* data =(unsigned int*) windowBuffer.bits; // for(int i=0;i<head.biHeight;i++) // { // for(int j=0;j<head.biWidth;j++) // { // int nFlag = 0; // memcpy(&nFlag,tmp+(head.biWidth*i+j)*3,3); // data[i*windowBuffer.stride+j] = nFlag; // } // //memcpy(data+i*buffer.stride*2,tmp+(600-i-1)*800*2,800*2); // } unsigned short* data =(unsigned short*) windowBuffer.bits; unsigned char* tmp = (unsigned char*)(g_buffer+filehead.bfOffBits); LOGI("%d,%d,%d",head.biWidth,head.biHeight,head.biBitCount); int offsize = head.biBitCount/8; int lineByte=(head.biWidth* head.biBitCount/8+3)/4*4; LOGI("lineByte=%d",lineByte); for(int i=0;i<head.biHeight;i++) { for(int j=0;j<head.biWidth;j++,tmp+=offsize) { if(offsize>2) data[(head.biHeight-i-1)*windowBuffer.stride+j] = RGB565(*(tmp+2),*(tmp+1),*(tmp)); else memcpy(&data[(head.biHeight-i-1)*windowBuffer.stride+j],tmp,2); } tmp+=(lineByte-offsize*head.biWidth); } LOGI("buffer.stride=%d,buffer.format=%d",windowBuffer.stride,windowBuffer.format); ANativeWindow_unlockAndPost(g_nativeWindow); } free(buffer); buffer=NULL; LOGI("Java_com_test_surfaceview_TestNative_Draw END!"); }
query_result *jni_db::exec_sql(const std::string& sql){ query_result *result=NULL; std::string row_index; field field; char **fields=NULL; jstring jsql=env->NewStringUTF(sql.c_str()); jobjectArray raw_sqlite_result=reinterpret_cast<jobjectArray>(env->CallObjectMethod(dbhelperobj,dbhelper_exec_sql,jsql)); if(env->ExceptionCheck()==JNI_TRUE){ env->ExceptionClear(); throw sql_execution_error(); } env->ReleaseStringUTFChars(jsql,env->GetStringUTFChars(jsql,NULL)); env->DeleteLocalRef(jsql); if(raw_sqlite_result!=NULL){ jsize raw_sqlite_result_size=env->GetArrayLength(raw_sqlite_result); result=new query_result(); jobjectArray column_names=reinterpret_cast<jobjectArray>(env->CallObjectMethod(dbhelperobj,dbhelper_get_metadata)); jsize column_names_size=env->GetArrayLength(column_names); if(column_names_size>0){ fields=new char*[column_names_size]; for(jsize i=0;i<column_names_size;++i){ jobject column_name_jobj=env->GetObjectArrayElement(column_names,i); jstring column_name=reinterpret_cast<jstring>(column_name_jobj); std::string colname=jstring2string(column_name); env->DeleteLocalRef(column_name_jobj); logger::singleton()==NULL?(void)0:logger::singleton()->log(3,"execsql:"+colname); fields[i]=new char[colname.length()+1]; fields[i][colname.length()]='\0'; colname.copy(fields[i],colname.length()); } unsigned int nr_of_columns=column_names_size; result->set_metadata(nr_of_columns,(const char**) &(*fields)); } env->DeleteLocalRef(column_names); unsigned char row_struct_counter=0; for(jsize i=0;i<raw_sqlite_result_size;++i){ if(row_struct_counter==0){ jobject rowid_jobj=env->GetObjectArrayElement(raw_sqlite_result,i); jstring rowid=reinterpret_cast<jstring>(rowid_jobj); row_index=jstring2string(rowid); env->DeleteLocalRef(rowid_jobj); row_struct_counter=1; } else if(row_struct_counter==1){ jobject column_name_jobj=env->GetObjectArrayElement(raw_sqlite_result,i); jstring column_name=reinterpret_cast<jstring>(column_name_jobj); field.field_name=jstring2string(column_name); env->DeleteLocalRef(column_name_jobj); row_struct_counter=2; } else if(row_struct_counter==2){ jobject column_value_jobj=env->GetObjectArrayElement(raw_sqlite_result,i); jstring column_value=reinterpret_cast<jstring>(column_value_jobj); field.field_value=jstring2string(column_value); env->DeleteLocalRef(column_value_jobj); result->insert(std::make_pair(std::atoi(row_index.c_str()),field)); row_struct_counter=0; } } env->DeleteLocalRef(raw_sqlite_result); } return result; }