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;
}
示例#2
0
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;

}