Пример #1
0
/* API: create stream */
static pj_status_t alsa_factory_create_stream(pjmedia_aud_dev_factory *f,
					      const pjmedia_aud_param *param,
					      pjmedia_aud_rec_cb rec_cb,
					      pjmedia_aud_play_cb play_cb,
					      void *user_data,
					      pjmedia_aud_stream **p_strm)
{
    struct alsa_factory *af = (struct alsa_factory*)f;
    pj_status_t status;
    pj_pool_t* pool;
    struct alsa_stream* stream;

    pool = pj_pool_create (af->pf, "alsa%p", 1024, 1024, NULL);
    if (!pool)
	return PJ_ENOMEM;

    /* Allocate and initialize comon stream data */
    stream = PJ_POOL_ZALLOC_T (pool, struct alsa_stream);
    stream->base.op = &alsa_stream_op;
    stream->pool      = pool;
    stream->af 	      = af;
    stream->user_data = user_data;
    stream->pb_cb     = play_cb;
    stream->ca_cb     = rec_cb;
    stream->quit      = 0;
    pj_memcpy(&stream->param, param, sizeof(*param));

    /* Init playback */
    if (param->dir & PJMEDIA_DIR_PLAYBACK) {
	status = open_playback (stream, param);
	if (status != PJ_SUCCESS) {
	    pj_pool_release (pool);
	    return status;
	}
    }

    /* Init capture */
    if (param->dir & PJMEDIA_DIR_CAPTURE) {
	status = open_capture (stream, param);
	if (status != PJ_SUCCESS) {
	    if (param->dir & PJMEDIA_DIR_PLAYBACK)
		snd_pcm_close (stream->pb_pcm);
	    pj_pool_release (pool);
	    return status;
	}
    }

    *p_strm = &stream->base;
    return PJ_SUCCESS;
}
Пример #2
0
int prise_photo()
{
#ifdef DEBUG2
printf("entrer prise_photo odile.c\n");	
#endif

	struct timeval start,stop,res;

	open_capture(0,160,120);

	if ( !capture ) 
	{
		fprintf( stderr, "ERROR: capture is NULL \n" );
		getchar();
		return -1;
	}	

	//recuperation d une premiere image pour avoir les dimensions
	IplImage* frame = cvQueryFrame( capture );
	//recuperation des dimensions de l image
	CvSize taille = cvGetSize(frame);
	int tailleInt = taille.width * taille.height;
	
	//creation des image et matrices intermediaires

	IplImage* frameGray = cvCreateImage(taille,8,1);
	
	float* matriceGradX = malloc(sizeof(float)*tailleInt);
	float* matriceGradY = malloc(sizeof(float)*tailleInt);
	float* matriceHarris= malloc(sizeof(float)*tailleInt);
	float** tabHarris = (float **)malloc(sizeof(float*)*_NBHARRIS);
	char * imageData;
	char* buffer = (char*) malloc(sizeof(char)*20);
	int i=0,j;
	
	for(j=0;j<_NBHARRIS;j++)
    {
	   tabHarris[j]=(float*)malloc(sizeof(float)*3);	
    }

	while(i < 30)
	{
		
		//Recuperation de l image de la camera
		frame = cvQueryFrame( capture );
	
		if ( ! frame  )
		{
			fprintf( stderr, "ERROR: pas d'image\n" );
			return -1;
		}
		
		imageData = frameGray->imageData;

		gettimeofday(&start,NULL);
		//Passage en niveau de gris	
		RGBTOGRAY_1CANAL(frame, frameGray);
		
		//Sobel pour les gradients
		SobelHV(imageData,taille.height, taille.width, matriceGradX, matriceGradY);
				
		//Detecteur de Harris
		harris(matriceHarris, matriceGradX, matriceGradY, tailleInt);
	
		//Maxima de Harris
		getMaxima(matriceHarris, taille.height, taille.width, tabHarris, _NBHARRIS);
		for(j=0;j<_NBHARRIS;j++)
  		{
			
			Dessine_croix(imageData,taille.height, taille.width,tabHarris[j][1],tabHarris[j][0]);
		}		
		if(i > 19){
			sprintf(buffer,"image%d.jpg",i-19);
			cvSaveImage(buffer,frameGray,0);
		}
		i++;
		gettimeofday(&stop,NULL);
		timersub(&stop, &start, &res);
		printf("time Harris = %i,%d sec i= %d\n",(int)res.tv_sec, (int)res.tv_usec,i);
	}
	
	cvReleaseCapture( &capture );
	exit(0);
#ifdef DEBUG2
printf("sortie prise_photo odile.c\n");	
#endif
	return 0;
}
Пример #3
0
int deplacement_zero()
{
#ifdef DEBUG2
printf("entrer deplacement_zero odile.c\n");	
#endif

#ifdef DEBUGIA1
struct timeval start,stop,res;
#endif
	
	open_capture(0,160,120);
	if ( !capture ) 
	{
		fprintf( stderr, "ERROR: capture is NULL \n" );
		getchar();
		return -1;
	}
	//recuperation d une premiere image pour avoir les dimensions
	IplImage* frame = cvQueryFrame( capture );
	//recuperation des dimensions de l image
	CvSize taille = cvGetSize(frame);
	int tailleInt = taille.width * taille.height;

	//creation des image et matrices intermediaires
	IplImage* frameGray = cvCreateImage(taille,8,1);
	float* matriceGradX = malloc(sizeof(float)*tailleInt);
	float* matriceGradY = malloc(sizeof(float)*tailleInt);
	float* matriceHarris= malloc(sizeof(float)*tailleInt);
	float** tabHarris = (float **)malloc(sizeof(float*)*_NBHARRIS);
	float** tabHarrisPrec = (float **)malloc(sizeof(float*)*_NBHARRIS);
	char * imageData;
	int j;

	for(j=0;j<_NBHARRIS;j++)
    {
	   tabHarris[j]=(float*)malloc(sizeof(float)*3);
		
    }
	for(j=0;j<_NBHARRIS;j++)
    {
	   tabHarrisPrec[j]=(float*)malloc(sizeof(float)*3);
		
    }
	vecteur *tabVect = (vecteur*) malloc(sizeof(vecteur)*_NBHARRIS);
	vecteur vecteurMoy;
	vecteurMoy.x = 0; vecteurMoy.y=0;
	int nbVect = 0;
	
	
	
	while(status == MODE_AUTO)
	{
#ifdef DEBUGIA1	
gettimeofday(&start,NULL);
#endif
		//Recuperation de l image de la camera
		frame = cvQueryFrame( capture );
	
		if ( ! frame  )
		{
			fprintf( stderr, "ERROR: pas d'image\n" );
			return -1;
		}
		
		imageData = frameGray->imageData;

		
		//Passage en niveau de gris	
		RGBTOGRAY_1CANAL(frame, frameGray);

		
		//Sobel pour les gradients
		SobelHV(imageData,taille.height, taille.width, matriceGradX, matriceGradY);
		
		
		//Detecteur de Harris
		harris(matriceHarris, matriceGradX, matriceGradY, tailleInt);
	
		//Maxima de Harris
		getMaxima(matriceHarris, taille.height, taille.width, tabHarris, _NBHARRIS);
		
		
		//Matching des points pour trouver les vecteurs
		nbVect = calcul_vecteur_interet(tabHarrisPrec, tabHarris, _NBHARRIS, _SEUIL_DISTANCE, tabVect);
		
		
		//Moyenne des vecteurs
		calcul_moyenne_vecteur(tabVect, nbVect,&vecteurMoy);
		
		for(j=0;j<_NBHARRIS;j++)
  		{

			  tabHarrisPrec[j][0] = tabHarris[j][0];
			  tabHarrisPrec[j][1] = tabHarris[j][1];
			  tabHarrisPrec[j][2] = tabHarris[j][2];
		}
		
#ifdef DEBUGIA1		
		printf("nbVecteur Match = %d \nVecteur moyen  = %d %d\n",nbVect,vecteurMoy.x,vecteurMoy.y);
		gettimeofday(&stop,NULL);
		timersub(&stop, &start, &res);
		printf("time Harris= %d %d\n",(int)res.tv_sec, (int)res.tv_usec);
#endif

		pilote_IA(vecteurMoy,1000, 255);
				
	}

	cvReleaseCapture( &capture );

#ifdef DEBUG2
printf("FIN deplacement_zero odile.c\n");	
#endif
	return 0;


}
Пример #4
0
/*---------------------------------------------------------------------------------------------------------*/
int main (void)
{   
	unsigned int i=0;
    SYS_Init();  
	P20=0;P21=0;
	_GPIO_SET_PIN_MODE(P3,6,GPIO_PMD_OUTPUT);
	open_capture(); //open capture funcation
	open_pwm3();
	while(1)
	{
		if(LIGHT_RESISTANCES) //day
		{
			if(light_flag!=DAY) //night turn to day need close LED 
			{
				light_flag=DAY;
				close_pwm(0);
				close_pwm(1);
				clean_capture_flag(); //day close capture
			}
		}
		else  //night
		{
			if(light_flag!=NIGHT) //day turn to night
			{
				light_flag=NIGHT;
				open_pwm(0);  //open led0
				//open_pwm(1);
				if(!capture_start_enable)
					open_capture_flag();
			}
			else
			{
				if(capture_wave_count>=CAPTURE_ALL_TIME) //capture compelet once time
				{
					
					if(calculate_capture_frequency()==0) //have someone pass by, led1 light
					{
						open_pwm(1);
						open_timer0();
						open_capture_flag();
						while(timer0_100ms_count<50) // 3s
						{
							if(capture_wave_count>=CAPTURE_ALL_TIME) 
							{
								if(calculate_capture_frequency()==0) //have peope
								{
									timer0_100ms_count=0;
								}
								open_capture_flag();
							}
							if(LIGHT_RESISTANCES) //day
							{	
								open_capture_flag();
								break;
							}
						}
						close_timer0();
						close_pwm(1);
					}
					else
						open_capture_flag();
				}
			}
			
		}
		//delay some time for check light resistance	
		for(i=0;i<1000;i++);
	}
	//return 0;  
}