int v4lGrab (struct vdIn *vd ) { static int frame = 0; int len; int status; int count = 0; int size; int erreur = 0; int jpegsize = 0; int qualite = 1024; struct frame_t *headerframe; double timecourant =0; double temps = 0; timecourant = ms_time(); if (vd->grabMethod) { vd->vmmap.height = vd->hdrheight; vd->vmmap.width = vd->hdrwidth; vd->vmmap.format = vd->formatIn; if (ioctl (vd->fd, VIDIOCSYNC,&vd->vmmap.frame) < 0) { perror ("cvsync err\n"); erreur = -1; } /* Is there someone using the frame */ while((vd->framelock[vd->frame_cour] != 0) && vd->signalquit) usleep(500); pthread_mutex_lock (&vd->grabmutex); /* memcpy (vd->ptframe[vd->frame_cour]+ sizeof(struct frame_t), vd->pFramebuffer + vd->videombuf.offsets[vd->vmmap.frame] , vd->framesizeIn); jpegsize =jpeg_compress(vd->ptframe[vd->frame_cour]+ sizeof(struct frame_t),vd->framesizeIn, vd->pFramebuffer + vd->videombuf.offsets[vd->vmmap.frame] ,vd->hdrwidth, vd->hdrheight, qualite); */ temps = ms_time(); jpegsize= convertframe(vd->ptframe[vd->frame_cour]+ sizeof(struct frame_t), vd->pFramebuffer + vd->videombuf.offsets[vd->vmmap.frame], vd->hdrwidth,vd->hdrheight,vd->formatIn,qualite); headerframe=(struct frame_t*)vd->ptframe[vd->frame_cour]; snprintf(headerframe->header,5,"%s","SPCA"); headerframe->seqtimes = ms_time(); headerframe->deltatimes=(int)(headerframe->seqtimes-timecourant); headerframe->w = vd->hdrwidth; headerframe->h = vd->hdrheight; headerframe->size = (( jpegsize < 0)?0:jpegsize); headerframe->format = vd->formatIn; headerframe->nbframe = frame++; // printf("compress frame %d times %f\n",frame, headerframe->seqtimes-temps); pthread_mutex_unlock (&vd->grabmutex); /************************************/ if ((ioctl (vd->fd, VIDIOCMCAPTURE, &(vd->vmmap))) < 0) { perror ("cmcapture"); printf (">>cmcapture err %d\n", status); erreur = -1; } vd->vmmap.frame = (vd->vmmap.frame + 1) % vd->videombuf.frames; vd->frame_cour = (vd->frame_cour +1) % OUTFRMNUMB; //printf("frame nb %d\n",vd->vmmap.frame); } else { /* read method */ size = vd->framesizeIn; len = read (vd->fd, vd->pFramebuffer, size); if (len <= 0 ) { printf ("v4l read error\n"); printf ("len %d asked %d \n", len, size); return 0; } /* Is there someone using the frame */ while((vd->framelock[vd->frame_cour] != 0)&& vd->signalquit) usleep(1000); pthread_mutex_lock (&vd->grabmutex); /* memcpy (vd->ptframe[vd->frame_cour]+ sizeof(struct frame_t), vd->pFramebuffer, vd->framesizeIn); jpegsize =jpeg_compress(vd->ptframe[vd->frame_cour]+ sizeof(struct frame_t),len, vd->pFramebuffer, vd->hdrwidth, vd->hdrheight, qualite); */ temps = ms_time(); jpegsize= convertframe(vd->ptframe[vd->frame_cour]+ sizeof(struct frame_t), vd->pFramebuffer , vd->hdrwidth,vd->hdrheight,vd->formatIn,qualite); headerframe=(struct frame_t*)vd->ptframe[vd->frame_cour]; snprintf(headerframe->header,5,"%s","SPCA"); headerframe->seqtimes = ms_time(); headerframe->deltatimes=(int)(headerframe->seqtimes-timecourant); headerframe->w = vd->hdrwidth; headerframe->h = vd->hdrheight; headerframe->size = (( jpegsize < 0)?0:jpegsize);; headerframe->format = vd->formatIn; headerframe->nbframe = frame++; // printf("compress frame %d times %f\n",frame, headerframe->seqtimes-temps); vd->frame_cour = (vd->frame_cour +1) % OUTFRMNUMB; pthread_mutex_unlock (&vd->grabmutex); /************************************/ } return erreur; }
int v4lGrab (struct vdIn *vd, int channel ) { // static int frame = 0; // int len; // int status; // int count = 0; // int size; int erreur = 0; int jpegsize = 0; int qualite = 1024; struct frame_t *headerframe; // double timecourant =0; // double temps = 0; // timecourant = ms_time(); if (vd->grabMethod) { vd->vmmap.height = vd->hdrheight; vd->vmmap.width = vd->hdrwidth; vd->vmmap.format = vd->formatIn; // logger(TLOG_NOTICE, "channel:%d step 1.\n", channel); if (ioctl (vd->fd, VIDIOCSYNC,&vd->vmmap.frame) < 0) { logger(TLOG_ERROR, "rtv cvsync err\n"); erreur = -1; } thread_syn_wait(&frame_syn_ctrl[channel][vd->frame_cour].mutex_w, &frame_syn_ctrl[channel][vd->frame_cour].cond_w, &frame_syn_ctrl[channel][vd->frame_cour].flag_w); // logger(TLOG_NOTICE, "channel:%d step 3.\n", channel); jpegsize= convertframe(vd->ptframe[vd->frame_cour]+ sizeof(struct frame_t), vd->pFramebuffer + vd->videombuf.offsets[vd->vmmap.frame], vd->hdrwidth,vd->hdrheight,vd->formatIn,qualite); vd->ptframesize[vd->frame_cour] = ((jpegsize < 0)?0:jpegsize); headerframe=(struct frame_t*)vd->ptframe[vd->frame_cour]; // snprintf(headerframe->header,5,"%s","SPCA"); // headerframe->seqtimes = ms_time(); frame_time(&(headerframe->date), &(headerframe->time)); // headerframe->deltatimes=(int)(headerframe->seqtimes-timecourant); headerframe->w = vd->hdrwidth; headerframe->h = vd->hdrheight; headerframe->size = (( jpegsize < 0)?0:jpegsize); headerframe->format = vd->formatIn; // headerframe->nbframe = frame++; // logger(TLOG_NOTICE, "channel:%d step 4.\n", channel); thread_syn_flag_clr(&frame_syn_ctrl[channel][vd->frame_cour].mutex_w, &frame_syn_ctrl[channel][vd->frame_cour].cond_w, &frame_syn_ctrl[channel][vd->frame_cour].flag_w); thread_syn_flag_set(&frame_syn_ctrl[channel][vd->frame_cour].mutex_r, &frame_syn_ctrl[channel][vd->frame_cour].cond_r, &frame_syn_ctrl[channel][vd->frame_cour].flag_r); // logger(TLOG_NOTICE, "compress frame %d times %f\n",frame, headerframe->seqtimes-temps); // pthread_mutex_unlock (&vd->grabmutex); /************************************/ // logger(TLOG_NOTICE, "channel:%d step 5.\n", channel); if ((ioctl (vd->fd, VIDIOCMCAPTURE, &(vd->vmmap))) < 0) { logger(TLOG_ERROR, "rtv cmcapture err\n"); erreur = -1; } vd->vmmap.frame = (vd->vmmap.frame + 1) % vd->videombuf.frames; vd->frame_cour = (vd->frame_cour +1) % OUTFRMNUMB; // logger(TLOG_NOTICE, "channel:%d step 6.\n", channel); //logger(TLOG_NOTICE, "frame nb %d\n",vd->vmmap.frame); } #if 0 else { /* read method */ size = vd->framesizeIn; len = read (vd->fd, vd->pFramebuffer, size); if (len <= 0 ) { printf ("v4l read error\n"); printf ("len %d asked %d \n", len, size); return 0; } /* Is there someone using the frame */ while ((vd->framelock[vd->frame_cour] != 0)&& vd->signalquit) usleep(1000); pthread_mutex_lock (&vd->grabmutex); /* memcpy (vd->ptframe[vd->frame_cour]+ sizeof(struct frame_t), vd->pFramebuffer, vd->framesizeIn); jpegsize =jpeg_compress(vd->ptframe[vd->frame_cour]+ sizeof(struct frame_t),len, vd->pFramebuffer, vd->hdrwidth, vd->hdrheight, qualite); */ temps = ms_time(); jpegsize= convertframe(vd->ptframe[vd->frame_cour]+ sizeof(struct frame_t), vd->pFramebuffer , vd->hdrwidth,vd->hdrheight,vd->formatIn,qualite); headerframe=(struct frame_t*)vd->ptframe[vd->frame_cour]; snprintf(headerframe->header,5,"%s","SPCA"); headerframe->seqtimes = ms_time(); headerframe->deltatimes=(int)(headerframe->seqtimes-timecourant); headerframe->w = vd->hdrwidth; headerframe->h = vd->hdrheight; headerframe->size = (( jpegsize < 0)?0:jpegsize);; headerframe->format = vd->formatIn; headerframe->nbframe = frame++; // printf("compress frame %d times %f\n",frame, headerframe->seqtimes-temps); vd->frame_cour = (vd->frame_cour +1) % OUTFRMNUMB; pthread_mutex_unlock (&vd->grabmutex); /************************************/ } #endif return erreur; }