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