annotate example/invert.c @ 5:fa5d2b9d8831

Add make dist to create tarball without .svn contest
author AngelCarpintero
date Sun, 18 May 2008 19:24:57 +0000
parents 5f21a4dddc0c
children 2fce9e157b8d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
1 /* invert.c
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
2 *
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
3 * Example program for videoloopback device.
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
4 * Copyright 2000 by Jeroen Vreeken (pe1rxq@amsat.org)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
5 * Copyright 2005 by Angel Carpintero (ack@telefonica.net)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
6 * This software is distributed under the GNU public license version 2
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
7 * See also the file 'COPYING'.
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
8 *
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
9 */
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
10
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
11 #include <unistd.h>
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
12 #include <stdlib.h>
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
13 #include <stdio.h>
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
14 #include <fcntl.h>
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
15 #include <string.h>
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
16 #include <errno.h>
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
17 #include <sys/ioctl.h>
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
18 #include <sys/mman.h>
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
19 #include <signal.h>
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
20 #include <sys/wait.h>
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
21 #include <linux/videodev.h>
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
22
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
23
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
24 int fmt=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
25 int noexit = 1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
26 int read_img=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
27
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
28 char *start_capture (int dev, int width, int height)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
29 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
30 struct video_capability vid_caps;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
31 struct video_window vid_win;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
32 struct video_mbuf vid_buf;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
33 char *map;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
34
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
35 if (ioctl (dev, VIDIOCGCAP, &vid_caps) == -1) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
36 printf ("ioctl (VIDIOCGCAP)\nError[%s]\n",strerror(errno));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
37 return (NULL);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
38 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
39 if (vid_caps.type & VID_TYPE_MONOCHROME) fmt=VIDEO_PALETTE_GREY;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
40 if (ioctl (dev, VIDIOCGMBUF, &vid_buf) == -1) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
41 fprintf(stderr, "no mmap falling back on read\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
42 if (ioctl (dev, VIDIOCGWIN, &vid_win)== -1) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
43 printf ("ioctl VIDIOCGWIN\nError[%s]\n",strerror(errno));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
44 return (NULL);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
45 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
46 vid_win.width=width;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
47 vid_win.height=height;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
48 if (ioctl (dev, VIDIOCSWIN, &vid_win)== -1) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
49 printf ("ioctl VIDIOCSWIN\nError[%s]\n",strerror(errno));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
50 return (NULL);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
51 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
52 read_img=1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
53 map=malloc(width*height*3);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
54 return (map);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
55 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
56 /* If we are going to capture greyscale we need room to blow the image up */
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
57 if (fmt==VIDEO_PALETTE_GREY)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
58 map=mmap(0, vid_buf.size*3, PROT_READ|PROT_WRITE, MAP_SHARED, dev, 0);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
59 else
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
60 map=mmap(0, vid_buf.size, PROT_READ|PROT_WRITE, MAP_SHARED, dev, 0);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
61
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
62 if ((unsigned char *)-1 == (unsigned char *)map)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
63 return (NULL);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
64 return map;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
65 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
66
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
67 int start_pipe (int dev, int width, int height)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
68 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
69 struct video_capability vid_caps;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
70 struct video_window vid_win;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
71 struct video_picture vid_pic;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
72
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
73 if (ioctl (dev, VIDIOCGCAP, &vid_caps) == -1) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
74 printf ("ioctl (VIDIOCGCAP)\nError[%s]\n",strerror(errno));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
75 return (1);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
76 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
77 if (ioctl (dev, VIDIOCGPICT, &vid_pic)== -1) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
78 printf ("ioctl VIDIOCGPICT\nError[%s]\n",strerror(errno));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
79 return (1);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
80 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
81 vid_pic.palette=fmt;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
82 if (ioctl (dev, VIDIOCSPICT, &vid_pic)== -1) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
83 printf ("ioctl VIDIOCSPICT\nError[%s]\n",strerror(errno));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
84 return (1);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
85 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
86 if (ioctl (dev, VIDIOCGWIN, &vid_win)== -1) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
87 printf ("ioctl VIDIOCGWIN\nError[%s]\n",strerror(errno));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
88 return (1);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
89 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
90 vid_win.width=width;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
91 vid_win.height=height;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
92 if (ioctl (dev, VIDIOCSWIN, &vid_win)== -1) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
93 printf ("ioctl VIDIOCSWIN\nError[%s]\n",strerror(errno));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
94 return (1);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
95 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
96 return 0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
97 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
98
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
99 char *next_capture (int dev, char *map, int width, int height)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
100 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
101 int i;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
102 char *grey, *rgb;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
103 struct video_mmap vid_mmap;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
104
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
105 sigset_t set, old;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
106
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
107 if (read_img) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
108 if (fmt==VIDEO_PALETTE_GREY) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
109 if (read(dev, map, width*height) != width*height)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
110 return NULL;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
111 } else {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
112 if (read(dev, map, width*height*3) != width*height*3)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
113 return NULL;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
114 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
115 } else {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
116 vid_mmap.format=fmt;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
117 vid_mmap.frame=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
118 vid_mmap.width=width;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
119 vid_mmap.height=height;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
120
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
121 sigemptyset (&set); //BTTV hates signals during IOCTL
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
122 sigaddset (&set, SIGCHLD); //block SIGCHLD & SIGALRM
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
123 sigaddset (&set, SIGALRM); //for the time of ioctls
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
124 sigprocmask (SIG_BLOCK, &set, &old);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
125
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
126 if (ioctl(dev, VIDIOCMCAPTURE, &vid_mmap) == -1) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
127 sigprocmask (SIG_UNBLOCK, &old, NULL);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
128 return (NULL);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
129 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
130 if (ioctl(dev, VIDIOCSYNC, &vid_mmap) == -1) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
131 sigprocmask (SIG_UNBLOCK, &old, NULL);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
132 return (NULL);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
133 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
134
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
135 sigprocmask (SIG_UNBLOCK, &old, NULL); //undo the signal blocking
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
136 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
137 /* Blow up a grey */
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
138 if (fmt==VIDEO_PALETTE_GREY) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
139 i=width*height;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
140 grey=map+i-1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
141 rgb=map+i*3;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
142 for (; i>=0; i--, grey--) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
143 *(rgb--)=*grey;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
144 *(rgb--)=*grey;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
145 *(rgb--)=*grey;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
146 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
147 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
148 return map;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
149 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
150
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
151 int put_image(int dev, char *image, int width, int height)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
152 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
153 if (write(dev, image, width*height*3)!=width*height*3) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
154 printf("Error writing image to pipe!\nError[%s]\n",strerror(errno));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
155 return 0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
156 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
157 return 1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
158 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
159
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
160
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
161 void sig_handler(int signo)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
162 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
163 noexit = 0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
164 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
165
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
166 int main (int argc, char **argv)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
167 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
168 int i, devin, devout;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
169 int width;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
170 int height;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
171 char *image_out, *image_new;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
172 char palette[10]={'\0'};
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
173
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
174 if (argc != 5) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
175 printf("Usage:\n\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
176 printf("invert input output widthxheight rgb24|yuv420p\n\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
177 printf("example: invert /dev/video0 /dev/video1 352x288 yuv420p\n\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
178 exit(1);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
179 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
180 sscanf(argv[3], "%dx%d", &width, &height);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
181 sscanf(argv[4], "%s", palette);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
182
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
183 if (!strcmp(palette,"rgb24")) fmt = VIDEO_PALETTE_RGB24;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
184 else if (!strcmp(palette,"yuv420p")) fmt = VIDEO_PALETTE_YUV420P;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
185 else fmt = VIDEO_PALETTE_RGB24;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
186
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
187
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
188 image_out=malloc(width*height*3);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
189
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
190 devin=open (argv[1], O_RDWR);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
191 if (devin < 0) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
192 printf("Failed to open input video device [%s]\nError:[%s]\n",argv[1],strerror(errno));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
193 exit(1);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
194 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
195
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
196 devout=open (argv[2], O_RDWR);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
197 if (devout < 0) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
198 printf ("Failed to open output video device [%s]\nError:[%s]\n",argv[2],strerror(errno));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
199 exit(1);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
200 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
201
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
202 image_new=start_capture (devin, width, height);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
203 if (!image_new) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
204 printf("Capture error \n Error[%s]\n",strerror(errno));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
205 exit(1);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
206 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
207
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
208 start_pipe(devout, width, height);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
209
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
210 signal(SIGTERM, sig_handler);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
211
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
212 printf("Starting video stream.\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
213 while ( (next_capture(devin, image_new, width, height)) && (noexit) ){
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
214 for (i=width*height*3; i>=0; i--) image_out[i]=-image_new[i];
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
215 if (put_image(devout, image_out, width, height)==0)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
216 exit(1);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
217 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
218 printf("You bought vaporware!\nError[%s]\n",strerror(errno));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
219 close (devin);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
220 close (devout);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
221 free(image_out);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
222 exit(0);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
223 }