IPB

Welcome Guest ( Log In | Register )

> video4linux2 example, v4l2
猫猫草
post 2012-11-01 11:52:56, Thu
Post #1


猫猫猫
***

Group: Power Cat
Posts: 626
Joined: 2006-12-8
Member No.: 2



Attached File  v4l2_test.tar.gz ( 2.14k ) Number of downloads: 294
Go to the top of the page
 
+Quote Post
 
Start new topic
Replies
猫猫草
post 2012-11-01 11:54:05, Thu
Post #2


猫猫猫
***

Group: Power Cat
Posts: 626
Joined: 2006-12-8
Member No.: 2



v4l2-test1.c

代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

#include <getopt.h>

#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <malloc.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/mman.h>
#include <sys/ioctl.h>

#include <asm/types.h>
#include <linux/videodev2.h>

#define CLEAR(x) memset (&(x), 0, sizeof (x))

struct buffer {
    void           *start;
    size_t          length;
};

static char    *dev_name = "/dev/video0";
static int      fd = -1;
struct buffer  *buffers = NULL;

FILE           *file_fd;
static unsigned long file_length;
static unsigned char *file_name;

int
main(int argc, char **argv)
{
    struct v4l2_capability cap;
    struct v4l2_format fmt;

    file_fd = fopen("test.jpg", "w");

    fd = open(dev_name, O_RDWR /* required */  | O_NONBLOCK, 0);

    ioctl(fd, VIDIOC_QUERYCAP, &cap);

    CLEAR(fmt);
    fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    fmt.fmt.pix.width = 640;
    fmt.fmt.pix.height = 480;
    fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
    fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
    ioctl(fd, VIDIOC_S_FMT, &fmt);

    file_length = fmt.fmt.pix.bytesperline * fmt.fmt.pix.height;

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

    buffers[0].length = file_length;
    buffers[0].start = malloc(file_length);

    for (;;) {
        fd_set          fds;
        struct timeval  tv;
        int             r;

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

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

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

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

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

        if (read(fd, buffers[0].start, buffers[0].length))
            break;
    }

    fwrite(buffers[0].start, buffers[0].length, 1, file_fd);

    free(buffers[0].start);
    close(fd);
    fclose(file_fd);
    exit(EXIT_SUCCESS);
    return 0;
}
Go to the top of the page
 
+Quote Post

Posts in this topic
猫猫草   video4linux2 example   2012-11-01 11:52:56, Thu
猫猫草   v4l2-test1.c #include <stdio.h> #include ...   2012-11-01 11:54:05, Thu
猫猫草   v4l2-test2.c #include <stdio.h> #include ...   2012-11-01 11:54:30, Thu


Reply to this topicStart new topic
2 User(s) are reading this topic (2 Guests and 0 Anonymous Users)
0 Members:

 



Lo-Fi Version Time is now: 2024-12-25 01:58