Beispiel #1
0
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;
}
Beispiel #2
0
Datei: rtv.c Projekt: myler/unix
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;
}