/* 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; }
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; }
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; }
/*---------------------------------------------------------------------------------------------------------*/ 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; }