annotate example/dummy.c @ 0:5f21a4dddc0c

Initial checkin
author KennethLavrsen
date Sun, 01 Apr 2007 05:22:43 +0000
parents
children 2fce9e157b8d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
1 /* dummy.c
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
2 *
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
3 * Example program for using a videoloopback device in zero-copy mode.
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 <sys/poll.h>
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
22 #include <dirent.h>
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
23 #include <sys/utsname.h>
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
24 #include <linux/videodev.h>
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
25
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
26 /* all seem reasonable, or not? */
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
27 #define MAXIOCTL 1024
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
28 #define MAXWIDTH 640
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
29 #define MAXHEIGHT 480
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
30 int width;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
31 int height;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
32 int fmt=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
33 char ioctlbuf[MAXIOCTL];
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
34 int v4ldev;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
35 char *image_out;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
36
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
37
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
38 int get_frame(void)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
39 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
40 int i;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
41 char colour = 0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
42
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
43 memset(image_out, 0x128, width*height*3);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
44
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
45 for (i=10; i<width-10; i++) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
46 image_out[10*width*3+i*3]=colour++;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
47 image_out[10*width*3+i*3+1]=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
48 image_out[10*width*3+i*3+2]=-colour;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
49 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
50 for (i=10; i<width-10; i++) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
51 image_out[(height-10)*width*3+i*3]=colour;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
52 image_out[(height-10)*width*3+i*3+1]=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
53 image_out[(height-10)*width*3+i*3+2]=-colour++;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
54 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
55 /*
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
56 */
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
57 usleep(500); /* BIG XXX */
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
58 return 0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
59 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
60
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
61 char *v4l_create (int dev, int memsize)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
62 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
63 char *map;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
64
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
65 map=mmap(0, memsize, PROT_READ|PROT_WRITE, MAP_SHARED, dev, 0);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
66 if ((unsigned char *)-1 == (unsigned char *)map)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
67 return NULL;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
68 return map;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
69 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
70
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
71 int v4l_ioctl(unsigned long int cmd, void *arg)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
72 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
73 int i;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
74 switch (cmd) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
75 case VIDIOCGCAP:
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
76 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
77 struct video_capability *vidcap=arg;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
78
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
79 sprintf(vidcap->name, "Jeroen's dummy v4l driver");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
80 vidcap->type= VID_TYPE_CAPTURE;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
81 vidcap->channels=1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
82 vidcap->audios=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
83 vidcap->maxwidth=MAXWIDTH;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
84 vidcap->maxheight=MAXHEIGHT;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
85 vidcap->minwidth=20;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
86 vidcap->minheight=20;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
87 return 0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
88 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
89 case VIDIOCGCHAN:
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
90 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
91 struct video_channel *vidchan= (struct video_channel *)arg;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
92
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
93 printf("VIDIOCGCHAN called\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
94 if (vidchan->channel!=0)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
95 ;//return 1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
96 vidchan->channel=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
97 vidchan->flags=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
98 vidchan->tuners=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
99 vidchan->norm=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
100 vidchan->type=VIDEO_TYPE_CAMERA;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
101 strcpy(vidchan->name, "Loopback");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
102
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
103 return 0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
104 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
105 case VIDIOCSCHAN:
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
106 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
107 int *v=arg;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
108
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
109 if (v[0]!=0)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
110 return 1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
111 return 0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
112 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
113 case VIDIOCGTUNER:
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
114 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
115 struct video_tuner *v = arg;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
116
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
117 if(v->tuner) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
118 printf("VIDIOCGTUNER: Invalid Tuner, was %d\n", v->tuner);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
119 //return -EINVAL;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
120 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
121 v->tuner=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
122 strcpy(v->name, "Format");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
123 v->rangelow=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
124 v->rangehigh=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
125 v->flags=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
126 v->mode=VIDEO_MODE_AUTO;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
127 return 1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
128 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
129 case VIDIOCGPICT:
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
130 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
131 struct video_picture *vidpic=arg;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
132
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
133 vidpic->colour=0x8000;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
134 vidpic->hue=0x8000;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
135 vidpic->brightness=0x8000;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
136 vidpic->contrast=0x8000;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
137 vidpic->whiteness=0x8000;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
138 vidpic->depth=0x8000;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
139 vidpic->palette=fmt;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
140 return 0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
141 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
142 case VIDIOCSPICT:
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
143 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
144 struct video_picture *vidpic=arg;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
145
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
146 if (vidpic->palette!=fmt)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
147 return 1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
148 return 0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
149 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
150 case VIDIOCGWIN:
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
151 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
152 struct video_window *vidwin=arg;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
153
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
154 vidwin->x=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
155 vidwin->y=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
156 vidwin->width=width;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
157 vidwin->height=height;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
158 vidwin->chromakey=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
159 vidwin->flags=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
160 vidwin->clipcount=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
161 return 0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
162 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
163 case VIDIOCSWIN:
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
164 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
165 struct video_window *vidwin=arg;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
166
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
167 if (vidwin->width > MAXWIDTH ||
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
168 vidwin->height > MAXHEIGHT )
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
169 return 1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
170 if (vidwin->flags)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
171 return 1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
172 width=vidwin->width;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
173 height=vidwin->height;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
174 printf("new size: %dx%d\n", width, height);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
175 return 0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
176 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
177 case VIDIOCGMBUF:
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
178 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
179 struct video_mbuf *vidmbuf=arg;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
180
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
181 vidmbuf->size=width*height*3;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
182 vidmbuf->frames=1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
183 for (i=0; i<vidmbuf->frames; i++)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
184 vidmbuf->offsets[i]=i*vidmbuf->size;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
185 return 0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
186 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
187 case VIDIOCMCAPTURE:
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
188 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
189 struct video_mmap *vidmmap=arg;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
190
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
191 //return 0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
192 if (vidmmap->height>MAXHEIGHT ||
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
193 vidmmap->width>MAXWIDTH ||
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
194 vidmmap->format!=fmt )
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
195 return 1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
196 if (vidmmap->height!=height ||
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
197 vidmmap->width!=width) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
198 height=vidmmap->height;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
199 width=vidmmap->width;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
200 printf("new size: %dx%d\n", width, height);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
201 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
202 // check if 'vidmmap->frame' is valid
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
203 // initiate capture for 'vidmmap->frame' frames
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
204 return 0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
205 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
206 case VIDIOCSYNC:
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
207 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
208 //struct video_mmap *vidmmap=arg;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
209
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
210 // check if frames are ready.
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
211 // wait until ready.
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
212 get_frame();
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
213 return 0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
214 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
215 default:
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
216 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
217 printf("unknown ioctl: %ld\n", cmd & 0xff);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
218 return 1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
219 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
220 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
221 return 0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
222 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
223
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
224 #define VIDIOCSINVALID _IO('v',BASE_VIDIOCPRIVATE+1)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
225
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
226 void sighandler(int signo)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
227 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
228 int size, ret;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
229 unsigned long int cmd;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
230 struct pollfd ufds;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
231
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
232 if (signo!=SIGIO)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
233 return;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
234 ufds.fd=v4ldev;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
235 ufds.events=POLLIN;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
236 ufds.revents=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
237 poll(&ufds, 1, 1000);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
238 if (!ufds.revents & POLLIN) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
239 printf("Received signal but got negative on poll?!?!?!?\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
240 return;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
241 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
242 size=read(v4ldev, ioctlbuf, MAXIOCTL);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
243 if (size >= sizeof(unsigned long int)) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
244 memcpy(&cmd, ioctlbuf, sizeof(unsigned long int));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
245 if (cmd==0) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
246 printf("Client closed device\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
247 return;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
248 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
249 ret=v4l_ioctl(cmd, ioctlbuf+sizeof(unsigned long int));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
250 if (ret) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
251 memset(ioctlbuf+sizeof(unsigned long int), MAXIOCTL-sizeof(unsigned long int), 0xff);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
252 printf("ioctl %lx unsuccesfull, lets issue VIDIOCSINVALID (%x)\n", cmd, VIDIOCSINVALID);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
253 ioctl(v4ldev, VIDIOCSINVALID);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
254 } else
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
255 ioctl(v4ldev, cmd, ioctlbuf+sizeof(unsigned long int));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
256 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
257 return;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
258 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
259
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
260 int open_vidpipe(void)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
261 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
262 int pipe_fd = -1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
263 FILE *vloopbacks;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
264 char pipepath[255];
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
265 char buffer[255];
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
266 char *loop;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
267 char *input;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
268 char *istatus;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
269 char *output;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
270 char *ostatus;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
271 char *major;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
272 char *minor;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
273 struct utsname uts;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
274
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
275 if (uname(&uts) < 0) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
276 printf("Unable to execute uname\nError[%s]\n",strerror(errno));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
277 return -1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
278 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
279
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
280 major = strtok(uts.release, ".");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
281 minor = strtok(NULL, ".");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
282 if ((major == NULL) || (minor == NULL) || (strcmp(major, "2"))) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
283 printf("Unable to decipher OS version\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
284 return -1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
285 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
286
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
287 if (strcmp(minor, "5") < 0) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
288
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
289 vloopbacks=fopen("/proc/video/vloopback/vloopbacks", "r");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
290 if (!vloopbacks) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
291 printf ("Failed to open '/proc/video/vloopback/vloopbacks");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
292 return -1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
293 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
294 /* Read vloopback version */
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
295 fgets(buffer, 255, vloopbacks);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
296 printf("%s", buffer);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
297 /* Read explaination line */
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
298 fgets(buffer, 255, vloopbacks);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
299 while (fgets(buffer, 255, vloopbacks)) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
300 if (strlen(buffer)>1) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
301 buffer[strlen(buffer)-1]=0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
302 loop=strtok(buffer, "\t");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
303 input=strtok(NULL, "\t");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
304 istatus=strtok(NULL, "\t");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
305 output=strtok(NULL, "\t");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
306 ostatus=strtok(NULL, "\t");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
307 if (istatus[0]=='-') {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
308 sprintf(pipepath, "/dev/%s", input);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
309 pipe_fd=open(pipepath, O_RDWR);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
310 if (pipe_fd>=0) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
311 printf("Input: /dev/%s\n", input);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
312 printf("Output: /dev/%s\n", output);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
313 return pipe_fd;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
314 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
315 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
316 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
317 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
318
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
319 }else{
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
320 DIR *dir;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
321 struct dirent *dirp;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
322 const char prefix[]="/sys/class/video4linux/";
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
323 char *ptr, *io;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
324 int fd;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
325 int low=9999;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
326 int tfd;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
327 int tnum;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
328
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
329 if ((dir=opendir(prefix))== NULL) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
330 printf( "Failed to open '%s'", prefix);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
331 return -1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
332 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
333
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
334 while ((dirp=readdir(dir)) != NULL) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
335 if (!strncmp(dirp->d_name, "video", 5)) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
336 strcpy(buffer, prefix);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
337 strcat(buffer, dirp->d_name);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
338 strcat(buffer, "/name");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
339 if ((fd=open(buffer, O_RDONLY)) >= 0) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
340 if ((read(fd, buffer, sizeof(buffer)-1))<0) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
341 close(fd);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
342 continue;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
343 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
344 ptr = strtok(buffer, " ");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
345 if (strcmp(ptr,"Video")) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
346 close(fd);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
347 continue;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
348 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
349 major = strtok(NULL, " ");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
350 minor = strtok(NULL, " ");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
351 io = strtok(NULL, " \n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
352 if (strcmp(major, "loopback") || strcmp(io, "input")) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
353 close(fd);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
354 continue;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
355 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
356 if ((ptr=strtok(buffer, " "))==NULL) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
357 close(fd);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
358 continue;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
359 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
360 tnum = atoi(minor);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
361 if (tnum < low) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
362 strcpy(buffer, "/dev/");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
363 strcat(buffer, dirp->d_name);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
364 if ((tfd=open(buffer, O_RDWR))>=0) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
365 strcpy(pipepath, buffer);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
366 if (pipe_fd>=0) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
367 close(pipe_fd);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
368 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
369 pipe_fd = tfd;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
370 low = tnum;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
371 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
372 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
373 close(fd);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
374 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
375 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
376 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
377
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
378
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
379 closedir(dir);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
380 if (pipe_fd >= 0)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
381 printf("Opened input of %s", pipepath);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
382 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
383
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
384 return pipe_fd;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
385 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
386
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
387 int main (int argc, char **argv)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
388 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
389 char palette[10]={'\0'};
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
390
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
391 if (argc != 3) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
392 printf("dummy.c\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
393 printf("A example for using a video4linux loopback in zero-copy mode\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
394 printf("Written by Jeroen Vreeken, 2000\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
395 printf("Updated to vloopback API v0.97\n\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
396 printf("Usage:\n\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
397 printf("dummy widthxheight rgb24|yuv420p\n\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
398 printf("example: dummy 352x288 yuv420p\n\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
399 exit(1);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
400 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
401
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
402 sscanf(argv[1], "%dx%d", &width, &height);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
403 sscanf(argv[2], "%s", palette);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
404
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
405 if (!strcmp(palette,"rgb24")) fmt = VIDEO_PALETTE_RGB24;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
406 else if (!strcmp(palette,"yuv420p")) fmt = VIDEO_PALETTE_YUV420P;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
407 else fmt = VIDEO_PALETTE_RGB24;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
408
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
409 /* Default startup values, nothing special
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
410 width=352;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
411 height=288;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
412 */
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
413
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
414 v4ldev=open_vidpipe();
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
415 if (v4ldev < 0) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
416 printf ("Failed to open video loopback device\nError[%s]\n",strerror(errno));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
417 exit(1);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
418 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
419 image_out=v4l_create(v4ldev, MAXWIDTH*MAXHEIGHT*3);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
420 if (!image_out) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
421 exit(1);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
422 printf ("Failed to set device to zero-copy mode\nError[%s]\n",strerror(errno));
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
423 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
424
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
425 signal (SIGIO, sighandler);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
426
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
427 printf("\nListening.\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
428 while (1) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
429 sleep(1000);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
430 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
431
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
432 close (v4ldev);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
433 free(image_out);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
434 exit(0);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
435 }