コード例 #1
0
ファイル: v4l2.c プロジェクト: jonnor/gegl
static void stop_capturing(Priv *priv)
{
	enum v4l2_buf_type type;

	switch (priv->io) {
	case IO_METHOD_READ:
		/* Nothing to do. */
		break;

	case IO_METHOD_MMAP:
	case IO_METHOD_USERPTR:
		type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
		if (-1 == xioctl(priv->fd, VIDIOC_STREAMOFF, &type))
			errno_exit("VIDIOC_STREAMOFF");
		break;
	}
}
コード例 #2
0
ファイル: svv.c プロジェクト: engie/robo_gui
static void stop_capturing(void)
{
	enum v4l2_buf_type type;

	switch (io) {
	case IO_METHOD_READ:
		/* Nothing to do. */
		break;
	case V4L2_MEMORY_MMAP:
	case V4L2_MEMORY_USERPTR:
		type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

		if (v4l2_ioctl(fd, VIDIOC_STREAMOFF, &type) < 0)
			errno_exit("VIDIOC_STREAMOFF");
		break;
	}
}
コード例 #3
0
ファイル: v4l2grab.c プロジェクト: JGrewal123/v4l2grab
/**
	mainloop: read frames and process them
*/
static void mainLoop(void)
{	
	unsigned int count;
	unsigned int numberOfTimeouts;

	numberOfTimeouts = 0;
	count = 3;

	while (count-- > 0) {
		for (;;) {
			fd_set fds;
			struct timeval tv;
			int r;

			FD_ZERO(&fds);
			FD_SET(fd, &fds);

			/* Timeout. */
			tv.tv_sec = 1;
			tv.tv_usec = 0;

			r = select(fd + 1, &fds, NULL, NULL, &tv);

			if (-1 == r) {
				if (EINTR == errno)
					continue;

				errno_exit("select");
			}

			if (0 == r) {
				if (numberOfTimeouts <= 0) {
					count++;
				} else {
					fprintf(stderr, "select timeout\n");
					exit(EXIT_FAILURE);
				}
			}

			if (frameRead())
				break;

			/* EAGAIN - continue select loop. */
		}
	}
}
コード例 #4
0
ファイル: camera.c プロジェクト: matrix207/webcamera
static void mainloop (void) {
	unsigned int count;


	count = G_frames;

	while (G_frames == 0 || count-- > 0) {
		for (;;) {
			fd_set fds;
			struct timeval tv;
			int r;

			FD_ZERO (&fds);
			FD_SET (fd, &fds);

			/* Timeout. */
			tv.tv_sec = 2;
			tv.tv_usec = 0;

			r = select (fd + 1, &fds, NULL, NULL, &tv);

			if (-1 == r) {
				if (EINTR == errno)
					continue;

				errno_exit ("select");
			}

			if (0 == r) {
				//char msg[256];
				if (G_paused)
					continue;
				fprintf (stderr, "select timeout\n");
				//ioctl (fd, S2253_VIDIOC_DEBUG, msg);
				//fprintf (stderr, "debug: %s\n", msg);
				exit (EXIT_FAILURE);
			}

			if (read_frame ())
				break;

			/* EAGAIN - continue select loop. */
		}
	}
}
コード例 #5
0
ファイル: camera.c プロジェクト: eugenelet/Dodgeball
void capture(int *fd, camera_buffer *cam_bufs, void **img, int camera_count, int isSelect)
{
	int i;
	void *ptr;

	for (i=0;i<camera_count;i++){
		for (;;) {
			fd_set fds;
			struct timeval tv;
			int r;

			FD_ZERO (&fds);
			FD_SET (fd[i], &fds);

			/* Timeout. */
			tv.tv_sec = 0;
			tv.tv_usec = 1000000;

			if (isSelect==1)
			{
				r = select (fd[i] + 1, &fds, NULL, NULL, &tv);

				if (-1 == r) 
				{
     					if (EINTR == errno)
					continue;
					errno_exit (__FILE__,__LINE__,"select");
				}

				if (0 == r) 
				{
					fprintf (stderr, "select timeout\n");
					exit (EXIT_FAILURE);
				}
			}
			
			ptr=read_frame(fd[i],&cam_bufs[i]);
			if (ptr){
				img[i]=ptr;
				break;
			}
			/* EAGAIN - continue select loop. */
		}
	}
}
コード例 #6
0
void
video_driver::init_userp (unsigned int buffer_size)
{
  struct v4l2_requestbuffers req;

  CLEAR (req);

  req.count = 4;
  req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
  req.memory = V4L2_MEMORY_USERPTR;

  if (-1 == xioctl (fd, VIDIOC_REQBUFS, &req))
    {
      if (EINVAL == errno)
	{
	  fprintf (stderr, "%s does not support "
		   "user pointer i/o\n", dev_name);
	  exit (EXIT_FAILURE);
	}
      else
	{
	  errno_exit ("VIDIOC_REQBUFS");
	}
    }

  buffers = (buffer *) calloc (4, sizeof (*buffers));

  if (!buffers)
    {
      fprintf (stderr, "Out of memory\n");
      exit (EXIT_FAILURE);
    }

  for (n_buffers = 0; n_buffers < 4; ++n_buffers)
    {
      buffers[n_buffers].length = buffer_size;
      buffers[n_buffers].start = malloc (buffer_size);

      if (!buffers[n_buffers].start)
	{
	  fprintf (stderr, "Out of memory\n");
	  exit (EXIT_FAILURE);
	}
    }
}
コード例 #7
0
ファイル: capture.c プロジェクト: pedwo/gst-sh-mobile
void
capture_queue_buffer(capture * cap, const void * buffer_data)
{
    unsigned int i;

    for (i = 0; i < cap->n_buffers; ++i) {
        if (cap->buffers[i].start == buffer_data) {
            goto found;
        }
    }

    fprintf (stderr, "%s: Tried to release bad buffer %d %p\n", __func__, i, buffer_data);
    exit (EXIT_FAILURE);

found:
    if (-1 == xioctl(cap->fd, VIDIOC_QBUF, &cap->buffers[i].v4l2buf))
        errno_exit("VIDIOC_QBUF");
}
コード例 #8
0
ファイル: camera.c プロジェクト: matrix207/webcamera
static void stop_capturing (void) {
	enum v4l2_buf_type type;

	switch (io) {
		case IO_METHOD_READ:
			/* Nothing to do. */
			break;

		case IO_METHOD_MMAP:
		case IO_METHOD_USERPTR:
			type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
			fprintf(stderr, "stream off sent\n");
			if (-1 == xioctl (fd, VIDIOC_STREAMOFF, &type))
				errno_exit ("VIDIOC_STREAMOFF");

			break;
	}
}
コード例 #9
0
ファイル: camera.cpp プロジェクト: ashiontang/TQ210
void Camera::uninit_device(void) {
    unsigned int i;
    switch (io) {
    case IO_METHOD_READ:
        free(buffers[0].start);
        break;
    case IO_METHOD_MMAP:
        for (i = 0; i < n_buffers; ++i)
            if (-1 == munmap(buffers[i].start, buffers[i].length))
                errno_exit("munmap");
        break;
    case IO_METHOD_USERPTR:
        for (i = 0; i < n_buffers; ++i)
            free(buffers[i].start);
        break;
    }
    free(buffers);
}
コード例 #10
0
static void init_userp(unsigned int buffer_size)
{
        struct v4l2_requestbuffers req;

        CLEAR(req);

        req.count  = 4;
        req.type   = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        req.memory = V4L2_MEMORY_USERPTR;

        if (-1 == xioctl(fd, VIDIOC_REQBUFS, &req)) {
                if (EINVAL == errno) {
                        fprintf(stderr, "%s does not support "
                                 "user pointer i/o\n", dev_name);
                        exit(EXIT_FAILURE);
                } else {
                        errno_exit("VIDIOC_REQBUFS");
                }
        }

        buffers = calloc(4, sizeof(*buffers));

        if (!buffers) {
                fprintf(stderr, "Out of memory\n");
                exit(EXIT_FAILURE);
        }
				if(!init_SharedMemoryRegion(req.count, buffer_size))
				{
								printf("Shared Memory Region Init Fail!!!\n");
								exit(EXIT_FAILURE);

				}
        for (n_buffers = 0; n_buffers < 4; ++n_buffers) {
               // shmPtr += n_buffers*buffer_size;
								buffers[n_buffers].length = buffer_size;
								buffers[n_buffers].start = shmPtr+n_buffers*buffer_size;
								/*               buffers[n_buffers].start = malloc(buffer_size);

                if (!buffers[n_buffers].start) {
                        fprintf(stderr, "Out of memory\n");
                        exit(EXIT_FAILURE);
                }*/
        }
}
コード例 #11
0
ファイル: capture_test.c プロジェクト: commshare/testSCCamera
//void mainloop(int fd)
void *thread_mainloop(void * camera)
{
	 camera_t *cam=(camera_t *)camera;
	 int	fd=cam->fd;
	//unsigned int count;
       // count = 500;
        while (!cam->stopflag) {
                for (;;) {
                        fd_set fds;
                        struct timeval tv;
                        int r;

                        FD_ZERO (&fds);
                        FD_SET (fd, &fds);

                        /* Timeout. */ //2秒的超时等待
                        tv.tv_sec = 2;
                        tv.tv_usec = 0;
						//等待摄像头设备可读
                        r = select (fd + 1, &fds, NULL, NULL, &tv);

                        if (-1 == r) {
                                if (EINTR == errno)
                                 {
								 	printf("####  select CONTINUE \n");
								 	continue;
								 }
                                errno_exit ("select");
                        }

                        if (0 == r) {
                                fprintf (stderr, "select timeout, EXIT \n");
                                exit (EXIT_FAILURE);
                        }

			if (capture_read_frame (cam))
                    		break;

			/* EAGAIN - continue select loop. */
                }
        }
	//printf("##IN#Mainloop END ######\n");
}
コード例 #12
0
ファイル: framegrabber.c プロジェクト: jbolling/LaserGimbal
static void process_image(const void *p, int size) {
        if (out_buf) {
            FILE *outfile = fopen( out_name, "wb" );

            // try to open file for saving
            if (!outfile) {
                    errno_exit("jpeg");
            }
            // write the image and flush
            fwrite(p, size, 1, outfile);
            fflush(outfile);

            // close output file
            fclose(outfile);
                
            fflush(stderr);
            fprintf(stderr, ".");
	}
}
コード例 #13
0
ファイル: capture_v4l.c プロジェクト: 1ee7/cuav
static void
uninit_device(struct device* dev)
{
  unsigned int i;

  switch (dev->io) {
  case IO_METHOD_READ:
    free(dev->buffers[0].start);
    break;

  case IO_METHOD_MMAP:
    for (i = 0; i < dev->n_buffers; ++i)
      if (-1 == munmap(dev->buffers[i].start, dev->buffers[i].length))
        errno_exit("munmap");
    break;
  }

  free (dev->buffers);
}
コード例 #14
0
ファイル: camera.cpp プロジェクト: ashiontang/TQ210
bool Camera::GetBuffer(unsigned char *image){
    fd_set fds;
    struct timeval tv;
    int r;
    FD_ZERO(&fds);
    FD_SET(fd, &fds);
    /* Timeout. */
    tv.tv_sec = 2;
    tv.tv_usec = 0;
    r = select(fd + 1, &fds, NULL, NULL, &tv);
    if (-1 == r) {
        errno_exit("select");
    }
    if (0 == r) {
        fprintf(stderr, "select timeout\n");
        exit(EXIT_FAILURE);
    }
    read_frame(image);
}
コード例 #15
0
ファイル: v4l2w.c プロジェクト: nozaki87/v4l2wrapper
static void
init_userp                      (V4L2WHandler_t * handle, unsigned int           buffer_size)
{
        struct v4l2_requestbuffers req;
        unsigned int page_size;

        page_size = getpagesize ();
        buffer_size = (buffer_size + page_size - 1) & ~(page_size - 1);

        CLEAR (req);

        req.count               = 4;
        req.type                = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        req.memory              = V4L2_MEMORY_USERPTR;

        if (-1 == xioctl (handle->fd, VIDIOC_REQBUFS, &req)) {
                if (EINVAL == errno) {
                        fprintf (stderr, "%s does not support "
                                 "user pointer i/o\n", handle->dev_name);
                        exit (EXIT_FAILURE);
                } else {
                        errno_exit ("VIDIOC_REQBUFS");
                }
        }

        handle->buffers = calloc (4, sizeof (*handle->buffers));

        if (!handle->buffers) {
                fprintf (stderr, "Out of memory\n");
                exit (EXIT_FAILURE);
        }

        for (handle->n_buffers = 0; handle->n_buffers < 4; ++handle->n_buffers) {
                handle->buffers[handle->n_buffers].length = buffer_size;
                handle->buffers[handle->n_buffers].start = memalign (/* boundary */ page_size,
                                                                     buffer_size);

                if (!handle->buffers[handle->n_buffers].start) {
                        fprintf (stderr, "Out of memory\n");
                        exit (EXIT_FAILURE);
                }
        }
}
コード例 #16
0
ファイル: libcam.cpp プロジェクト: sodeq/Jamtrap
void Camera::Stop() {
  enum v4l2_buf_type type;

  switch(io) {
    case IO_METHOD_READ:
      /* Nothing to do. */
      break;

    case IO_METHOD_MMAP:
    case IO_METHOD_USERPTR:
      type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

      if(-1 == xioctl (fd, VIDIOC_STREAMOFF, &type))
        errno_exit ("VIDIOC_STREAMOFF");

      break;
  }

}
コード例 #17
0
ファイル: SimpleV4L2.cpp プロジェクト: TritonSailor/livepro
void SimpleV4L2::stopCapturing()
{
	enum v4l2_buf_type type;

	switch (m_io) {
	case IO_METHOD_READ:
		/* Nothing to do. */
		break;

	case IO_METHOD_MMAP:
	case IO_METHOD_USERPTR:
		type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

		if (-1 == xioctl (m_fd, VIDIOC_STREAMOFF, &type))
			errno_exit ("VIDIOC_STREAMOFF");

		break;
	}
}
コード例 #18
0
int UninitDeviceV4L2(FRAMEGRABBER_V4L2 *fg_v4l2){
	
	unsigned int i;
	
	//=================================
	///  Only memory mapped buffers
	//=================================	
		
		for (i = 0; i < fg_v4l2->n_buffers; ++i){
			if (-1 == munmap (fg_v4l2->buffers[i].start, fg_v4l2->buffers[i].length))
				errno_exit ("munmap");
	       //free(fg_v4l2->buffers[i].start);
		   //free(fg_v4l2->buffers[i].length);
		}
	
	free (fg_v4l2->buffers);

	return 0;	
}
コード例 #19
0
ファイル: v4ldevice.cpp プロジェクト: ccrb/golf-club
unsigned char* snapFrame()
{
      //printf("Start snapFrame\n");
      for (;;)
      {
	  fd_set fds;
	  struct timeval tv;
	  int r;

	  FD_ZERO(&fds);
	  FD_SET(fd, &fds);

	  /* Timeout. */
	  tv.tv_sec = 2;
	  tv.tv_usec = 0;

	  r = select(fd + 1, &fds, NULL, NULL, &tv);

	  if (-1 == r)
	  {
	      if (EINTR == errno)
		  continue;
	      errno_exit("select");
	  }

	  if (0 == r)
	  {
	      fprintf(stderr, "select timeout\n");
	      exit(EXIT_FAILURE);
	  }

	  if (read_frame())
	      break;
	  /* EAGAIN - continue select loop. */
      }
      //printf("End snapFrame\n");
      
     // v4l2_buffer* pI = ((v4l2_buffer*)buffers[buf.index].start);
      //return pI;
      return (unsigned char*)buffers[buf.index].start;
 
}
コード例 #20
0
ファイル: capture.c プロジェクト: DeLaGuardo/bonecam
static void mainloop(void)
{
	unsigned int count;

	if (frame_count == 0) {
		infinit_count = 1;
	}
	count = frame_count;

	while (infinit_count || count-- > 0) {
		// printf("%u\n", count);
		for (;; ) {
			fd_set fds;
			struct timeval tv;
			int r;

			FD_ZERO(&fds);
			FD_SET(fd, &fds);

			/* Timeout. */
			tv.tv_sec = 2;
			tv.tv_usec = 0;

			r = select(fd + 1, &fds, NULL, NULL, &tv);

			if (-1 == r) {
				if (EINTR == errno)
					continue;
				errno_exit("select");
			}

			if (0 == r) {
				fprintf(stderr, "select timeout\n");
				exit(EXIT_FAILURE);
			}

			if (read_frame())
				break;
			/* EAGAIN - continue select loop. */
		}
	}
}
コード例 #21
0
ファイル: v4l.c プロジェクト: jdegges/image-analyzer
static void
uninit_device                   (ia_v4l_t*              v)
{
    unsigned int i;

    io_method io            = v->io;
    void* buffer            = v->mmap_buffer;
    size_t length           = v->mmap_length;
    struct buffer* buffers  = v->buffers;

    switch (io) {
        case IO_METHOD_MMAP:
            if (-1 == ia_munmap (buffer, length))
                errno_exit ("munmap");
            ia_free (buffers);
            break;
        default:
            break;
    }
}
コード例 #22
0
ファイル: cap.cpp プロジェクト: sangk54/mia
int V4LCapture::load_frame(void **data, struct v4l2_buffer *buf)
{
	*buf = buf_next;
	if(*data == NULL){
		*data = malloc(buf->length);
		if(!*data){
			errno_exit("calloc error");
		}
	}
	int len = fread(*data, buf->bytesused, 1, video_rec);
#if 0
	fprintf(stderr, "load %s %d %d %d bytes\n", 
			dev_name, buf->sequence, buf->bytesused, buf->length);
#endif
	int ret = fread(&buf_next, sizeof(buf_next), 1, time_rec);
	if(ret == 0){
		buf_next.bytesused = 0;
	}
	return len;
}
コード例 #23
0
ファイル: camera.cpp プロジェクト: ashiontang/TQ210
bool Camera::init_mmap(void) {
    struct v4l2_requestbuffers req;
    CLEAR (req);
    req.count = 4;
    req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    req.memory = V4L2_MEMORY_MMAP;
    if (-1 == xioctl(fd, VIDIOC_REQBUFS, &req)) {
        if (EINVAL == errno) {
            fprintf(stderr, "%s does not support "
                    "memory mapping\n", dev_name);
            return false;
        } else {
            return false;
        }
    }
    if (req.count < 2) {
        fprintf(stderr, "Insufficient buffer memory on %s\n", dev_name);
        return false;
    }
    buffers = (buffer*)calloc(req.count, sizeof(*buffers));
    if (!buffers) {
        fprintf(stderr, "Out of memory\n");
        return false;
    }
    for (n_buffers = 0; n_buffers < req.count; ++n_buffers) {
        struct v4l2_buffer buf;
        CLEAR (buf);
        buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        buf.memory = V4L2_MEMORY_MMAP;
        buf.index = n_buffers;
        if (-1 == xioctl(fd, VIDIOC_QUERYBUF, &buf))
            errno_exit("VIDIOC_QUERYBUF");
        buffers[n_buffers].length = buf.length;
        buffers[n_buffers].start = mmap(NULL /* start anywhere */, buf.length,
                                        PROT_READ | PROT_WRITE /* required */,
                                        MAP_SHARED /* recommended */, fd, buf.m.offset);
        if (MAP_FAILED == buffers[n_buffers].start)
            return false;
    }
    return true;
}
コード例 #24
0
ファイル: server_board.c プロジェクト: aravinthkumarj1/kemsys
static void mainloop()
{
    unsigned long val,count;
    time_t elapsed = time(NULL);
    val = count = 100;

    while (count-- > 0)
    {
        for (;;)
        {
            fd_set fds;
            struct timeval tv;
            int r;
            FD_ZERO (&fds);
            FD_SET (fd, &fds);

            // * Timeout. *
            tv.tv_sec = 2;
            tv.tv_usec = 0;

            r = select (fd + 1, &fds, NULL, NULL, &tv);
            if (-1 == r)
            {
                if (EINTR == errno)
                    continue;
                errno_exit ("select");
            }
            if (0 == r)
            {
                fprintf (stderr, "select timeout\n");
                exit (EXIT_FAILURE);
            }
            if (read_frame ())
                break;
        }
    }

    elapsed = time(NULL) - elapsed;
    fprintf(stdout, "The frame rate (per second) = %lu\n", val/elapsed);

}
コード例 #25
0
ファイル: SimpleV4L2.cpp プロジェクト: TritonSailor/livepro
void SimpleV4L2::io_init_userp(unsigned int buffer_size)
{
	struct v4l2_requestbuffers req;
	unsigned int page_size;

	page_size = getpagesize ();
	buffer_size = (buffer_size + page_size - 1) & ~(page_size - 1);

	CLEAR (req);

	req.count               = 4;
	req.type                = V4L2_BUF_TYPE_VIDEO_CAPTURE;
	req.memory              = V4L2_MEMORY_USERPTR;

	if (-1 == xioctl (m_fd, VIDIOC_REQBUFS, &req)) {
		if (EINVAL == errno) {
			fprintf (stderr, "%s does not support user pointer i/o\n", m_devName);
			exit (EXIT_FAILURE);
		} else {
			errno_exit ("VIDIOC_REQBUFS");
		}
	}

	m_buffers = (v4l2_simple_buffer*)calloc (4, sizeof (*m_buffers));

	if (!m_buffers) {
		fprintf (stderr, "Out of memory\n");
		exit (EXIT_FAILURE);
	}

	for (m_numBuffers = 0; m_numBuffers < 4; ++m_numBuffers) {
		m_buffers[m_numBuffers].length = buffer_size;
		m_buffers[m_numBuffers].start = memalign (/* boundary */ page_size,
						buffer_size);

		if (!m_buffers[m_numBuffers].start) {
			fprintf (stderr, "Out of memory\n");
			exit (EXIT_FAILURE);
		}
	}
}
コード例 #26
0
ファイル: usb_cam.cpp プロジェクト: STMPNGRND/rospilot
static void init_userp(unsigned int buffer_size)
{
  struct v4l2_requestbuffers req;
  unsigned int page_size;

  page_size = getpagesize();
  buffer_size = (buffer_size+page_size-1)&~(page_size-1);

  CLEAR (req);

  req.count = 4;
  req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
  req.memory = V4L2_MEMORY_USERPTR;

  if (-1==xioctl(fd, VIDIOC_REQBUFS, &req)) {
    if (EINVAL==errno) {
      ROS_ERROR("%s does not support "
        "user pointer i/o\n", camera_dev);
      exit(EXIT_FAILURE);
    } else {
      errno_exit("VIDIOC_REQBUFS");
    }
  }

  buffers = (buffer*)calloc(4, sizeof(*buffers));

  if (!buffers) {
    ROS_ERROR("Out of memory\n");
    exit(EXIT_FAILURE);
  }

  for(n_buffers = 0; n_buffers<4; ++n_buffers) {
    buffers[n_buffers].length = buffer_size;
    buffers[n_buffers].start = memalign(/* boundary */page_size, buffer_size);

    if (!buffers[n_buffers].start) {
      ROS_ERROR("Out of memory\n");
      exit(EXIT_FAILURE);
    }
  }
}
コード例 #27
0
ファイル: capture.c プロジェクト: chubahowsmall/uvcvideo
static void mainloop(void)
{
	unsigned int count = capture_count;
	printf("Start capture %d frames\n", count);

	while (count-- > 0) {
		for (;;) {
#if 0
			fd_set fds;
			struct timeval tv;
			int r;

			FD_ZERO(&fds);
			FD_SET(fd, &fds);

			/* Timeout. */
			tv.tv_sec = 2;
			tv.tv_usec = 0;

			r = select(fd + 1, &fds, NULL, NULL, &tv);

			if (-1 == r) {
				if (EINTR == errno)
					continue;

				errno_exit("select");
			}

			if (0 == r) {
				fprintf(stderr, "select timeout\n");
				exit(EXIT_FAILURE);
			}
#endif

			if (read_frame())
				break;

			/* EAGAIN - continue select loop. */
		}
	}
}
コード例 #28
0
ファイル: capture.c プロジェクト: Esperadoce/pupil
int start_capturing(int fd)
{
	unsigned int i;
	enum v4l2_buf_type type;
	for (i = 0; i < n_buffers; ++i) {
		struct v4l2_buffer buf;

		CLEAR(buf);
		buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
		buf.memory = V4L2_MEMORY_MMAP;
		buf.index = i;

		if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
			// errno_exit("VIDIOC_QBUF");
			return -1;
	}
	type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
	if (-1 == xioctl(fd, VIDIOC_STREAMON, &type))
		errno_exit("VIDIOC_STREAMON");
	return 1;
}
コード例 #29
0
ファイル: cap.cpp プロジェクト: sangk54/mia
int V4LCapture::read_frame(uint8_t **data, struct v4l2_buffer *buf)
{
	if (param.replay_mode) {
		int ret = load_frame(&(buffers->start), &buf_now);
		*data = (uint8_t *) buffers->start;
		*buf = buf_now;
		return ret;
	}

	if( (int)buf_now.index != -1 ) {
		if( -1 == xioctl(fd, VIDIOC_QBUF, &buf_now) ){
			errno_exit("VIDIOC_QBUF");
		}
	}
	
	CLEAR( buf_now );

	buf_now.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
	buf_now.memory = V4L2_MEMORY_MMAP;

	if( -1 == xioctl(fd, VIDIOC_DQBUF, &buf_now) ){
		if (EAGAIN == errno) {
			return -1;
			errno_exit("EAGAIN");
		} else if (EINVAL == errno) {
			errno_exit("EINVAL");
		} else if (ENOMEM == errno) {
			errno_exit("ENOMEM");
		} else if (EIO == errno) {
			errno_exit("EIO");
		} else {
			errno_exit("VIDIOC_DQBUF");
		}
	}
	
	struct buffer *pbuf = &buffers[buf_now.index];

	if (param.record_prefix != NULL) {
		dump_frame((uint8_t *)pbuf->start, &buf_now);
	}

	*data = (uint8_t *) pbuf->start;
	*buf = buf_now;

	return buf_now.bytesused;


}
コード例 #30
0
ファイル: svv.c プロジェクト: engie/robo_gui
static void uninit_device(void)
{
	int i;

	switch (io) {
	case IO_METHOD_READ:
		free(buffers[0].start);
		break;
	case V4L2_MEMORY_MMAP:
		for (i = 0; i < n_buffers; ++i)
			if (-1 ==
				v4l2_munmap(buffers[i].start, buffers[i].length))
				errno_exit("munmap");
		break;
	case V4L2_MEMORY_USERPTR:
		for (i = 0; i < n_buffers; ++i)
			free(buffers[i].start);
		break;
	}
	free(buffers);
}