JNIEXPORT jobject JNICALL Java_com_sun_media_sound_PortMixerProvider_nNewPortMixerInfo(JNIEnv *env, jclass cls, jint mixerIndex) { jclass portMixerInfoClass; jmethodID portMixerInfoConstructor; PortMixerDescription desc; jobject info = NULL; TRACE1("Java_com_sun_media_sound_PortMixerProvider_nNewPortMixerInfo(%d).\n", mixerIndex); // retrieve class and constructor of PortMixerProvider.PortMixerInfo portMixerInfoClass = (*env)->FindClass(env, IMPLEMENTATION_PACKAGE_NAME"/PortMixerProvider$PortMixerInfo"); if (portMixerInfoClass == NULL) { ERROR0("Java_com_sun_media_sound_PortMixerProvider_nNewPortMixerInfo: portMixerInfoClass is NULL\n"); return NULL; } portMixerInfoConstructor = (*env)->GetMethodID(env, portMixerInfoClass, "<init>", "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); if (portMixerInfoConstructor == NULL) { ERROR0("Java_com_sun_media_sound_PortMixerProvider_nNewPortMixerInfo: portMixerInfoConstructor is NULL\n"); return NULL; } if (getPortMixerDescription(mixerIndex, &desc)) { // create a new PortMixerInfo object and return it info = (*env)->NewObject(env, portMixerInfoClass, portMixerInfoConstructor, mixerIndex, WindowsTojstring(env, desc.name), WindowsTojstring(env, desc.vendor), WindowsTojstring(env, desc.description), WindowsTojstring(env, desc.version)); } TRACE0("Java_com_sun_media_sound_PortMixerProvider_nNewPortMixerInfo succeeded.\n"); return info; }
JNIEXPORT void JNICALL Java_com_seasbase_video_io_VideoReader_DiffProc(JNIEnv * env, jobject obj, jstring jo,jint thd,jint nframes) { jclass jovideo = env->GetObjectClass(obj); jmethodID appendInfo = env->GetMethodID(jovideo,"appendInfo", "(Lcom/seasbase/video/io/Info;)V");//关键代码行 jclass jinfo = env->FindClass("com/seasbase/video/io/Info"); jmethodID initInfo = env->GetMethodID(jinfo, "<init>","(II[BIIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); //调用代码 HMODULE dlh = NULL; char buf[256]={0}; //dlh=LoadLibrary("VehicleTypeRecognition_D.dll"); //dlh=LoadLibrary("HelloWorld.dll"); if (!(dlh=LoadLibrary("VehicleTypeRecognition_D.dll"))) { printf("LoadLibrary() failed: %d\n", GetLastError()); } ThreadInit threadInit; threadInit = (ThreadInit)GetProcAddress(dlh, "ITS_ThreadInit");//ITS_ThreadInit(); 进程启动时调用 /*threadInit = (ThreadInit)GetProcAddress(dlh, "PrintHelloWord");*/ (*threadInit)(); VehicleRecInit vehicleRecInit; int iInitFlag; char* pathvar = getenv("ALG_DIR"); sprintf(buf,"%smodel",pathvar); char* modePath = buf;// ..\\bin\\model vehicleRecInit = (VehicleRecInit)GetProcAddress(dlh, "ITS_VehicleRecInit"); vehproc.pInstance = (*vehicleRecInit)(modePath, iInitFlag);//初始化操作 char* fpath =NULL; fpath = jstringTostring(env,jo); CvCapture * capture = cvCreateFileCapture(fpath); long nbFrames = (long) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT); if( !capture ) { fprintf(stderr,"Could not initialize capturing...\n"); } IplImage* pSrcImg =NULL; //////////////////////////////////////////////////// while (cvGrabFrame(capture) != 0 && (vehproc.pFrame = cvRetrieveFrame(capture)) != NULL) { nframes++; vehproc.nfrnum++; /*if(vehproc.nfrnum>40) { if(vehproc.nfrnum%5!=0) continue; }*/ if (NULL==pSrcImg) { pSrcImg =cvCreateImage(cvSize(vehproc.pFrame->width,vehproc.pFrame->height),IPL_DEPTH_8U,3); } cvCopyImage(vehproc.pFrame,pSrcImg); vehproc.VehiclePreProc(pSrcImg); jobject info; jstring jnumber;jstring jtype;jstring jcolor; for (int j = 0; j < vehproc.vehCnt; j++)// { /*threadInit = (ThreadInit)GetProcAddress(dlh, "PrintHelloWord"); (*threadInit)();*/ IplImage * pOutput = vehproc.vehinfo[j].vehicleImg;//cvCreateImage(cvSize(vehproc.pFrame->width,vehproc.pFrame->height),IPL_DEPTH_8U,3); //cvCopyImage(vehproc.pFrame,pOutput);vehproc.vehinfo[j].plateImg; sprintf(buf,"E:\\aaaa\\%d-%d.jpg",nframes,j); cvSaveImage(buf,pOutput); CvMat* mat = cvEncodeImage(".jpg",pOutput); jbyteArray jarrRV =env->NewByteArray(mat->cols); /*env->NewFloatArray() env->NewFloatArray() env->NewFloatArray()*/ env->SetByteArrayRegion(jarrRV,0,mat->cols,(const jbyte *)mat->data.ptr); cvReleaseMat(&mat); jnumber = WindowsTojstring(env,vehproc.vehinfo[j].platenumber); jtype = WindowsTojstring(env,vehproc.vehinfo[j].tempVehicleType); jcolor= WindowsTojstring(env,vehproc.vehinfo[j].eVehicleColor); //jnumber = env->NewStringUTF(vehproc.vehinfo[j].platenumber); //jtype = env->NewStringUTF(vehproc.vehinfo[j].tempVehicleType); //jbyteArray jarrRV =env->NewByteArray(1); /*jnumber = env->NewStringUTF("fde"); jtype = env->NewStringUTF("bbb"); jcolor = env->NewStringUTF("ccab");*/ //黑AU5881 if (strcmp(vehproc.vehinfo[j].platenumber,"黑AU5881")==0) { system("pause"); } info = env->NewObject(jinfo,initInfo,vehproc.nfrnum,j,jarrRV,vehproc.vehinfo[j].pointLT.x,vehproc.vehinfo[j].pointLT.y,vehproc.vehinfo[j].width,vehproc.vehinfo[j].height,jnumber,jtype,jcolor); //info = env->NewObject(jinfo,initInfo,vehproc.nfrnum,j,jarrRV,100,4,5,6,jnumber,jtype,jcolor); env->CallObjectMethod(obj,appendInfo,info); env->DeleteLocalRef(info); env->DeleteLocalRef(jarrRV); cvReleaseImage(&pOutput); } //#ifdef DEBUG_OUTPUT_IMAGE //sprintf(buf,"E:\\aaaa\\%da.jpg",nframes); cvSaveImage(buf,vehproc.pFrame); //sprintf(buf,"E:\\aaaa\\%db.jpg",nframes); cvSaveImage(buf,pSrcImg); //#endif } jstring jnumber; jstring jtype; jstring jcolor; jnumber = env->NewStringUTF("aaaaa"); jtype = env->NewStringUTF("bbbbb"); jcolor = env->NewStringUTF("ccccc"); jbyteArray jarrRV1 =env->NewByteArray(1);//// jobject info1 = env->NewObject(jinfo,initInfo,-1,-1,jarrRV1,-1,2,3,4,jnumber,jtype,jcolor); env->CallObjectMethod(obj,appendInfo,info1); env->DeleteLocalRef(info1); env->DeleteLocalRef(jarrRV1); env->DeleteLocalRef(jinfo); cvReleaseImage(&pSrcImg); cvReleaseCapture(&capture); //释放视频空间 VehicleRecRelease vehicleRecRelease; vehicleRecRelease = (VehicleRecRelease)GetProcAddress(dlh, "ITS_VehicleRecRelease"); (*vehicleRecRelease)(vehproc.pInstance); return; }