annotate example/dummy.c @ 13:5971a90f2459

Fix some gcc warnings
author AngelCarpintero
date Tue, 20 Jan 2009 12:23:52 +0000
parents 2fce9e157b8d
children
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;
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
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;
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
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
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
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
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
67 if ((unsigned char *)-1 == (unsigned char *)map)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
70 return map;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
71 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
72
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
73 int v4l_ioctl(unsigned long int cmd, void *arg)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
74 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
75 int i;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
221 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
222 return 0;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
223 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
224
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
225 #define VIDIOCSINVALID _IO('v',BASE_VIDIOCPRIVATE+1)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
232 void sighandler(int signo)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
233 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
234 int size, ret;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
235 unsigned long int cmd;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
236 struct pollfd ufds;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
246 if (!ufds.revents & POLLIN) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
247 printf("Received signal but got negative on poll?!?!?!?\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
248 return;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
253 if (size >= sizeof(unsigned long int)) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
256 printf("Client closed device\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
257 return;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
262 printf("ioctl %lx unsuccesfull, lets issue VIDIOCSINVALID (%x)\n", cmd, VIDIOCSINVALID);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
267 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
268 return;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
269 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
272 int open_vidpipe(void)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
273 {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
274 int pipe_fd = -1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
275 FILE *vloopbacks;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
276 char pipepath[255];
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
277 char buffer[255];
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
278 char *loop;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
279 char *input;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
280 char *istatus;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
281 char *output;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
282 char *ostatus;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
283 char *major;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
284 char *minor;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
285 struct utsname uts;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
286
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
289 return -1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
290 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
291
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
292 major = strtok(uts.release, ".");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
293 minor = strtok(NULL, ".");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
294 if ((major == NULL) || (minor == NULL) || (strcmp(major, "2"))) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
295 printf("Unable to decipher OS version\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
296 return -1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
297 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
298
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
301 if (!vloopbacks) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
302 printf ("Failed to open '/proc/video/vloopback/vloopbacks");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
303 return -1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
306 /* Read vloopback version */
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
307 fgets(buffer, 255, vloopbacks);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
310 /* Read explaination line */
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5971a90f2459 Fix some gcc warnings
AngelCarpintero
parents: 7
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
328 printf("Input: /dev/%s\n", input);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
329 printf("Output: /dev/%s\n", output);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
330 return pipe_fd;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
331 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
332 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
333 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
336 DIR *dir;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
339 char *ptr, *io;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
342 int tfd;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
343 int tnum;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
346 printf( "Failed to open '%s'", prefix);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
347 return -1;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
348 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5971a90f2459 Fix some gcc warnings
AngelCarpintero
parents: 7
diff changeset
352 strncpy(buffer, prefix, 255 - strlen(prefix));
5971a90f2459 Fix some gcc warnings
AngelCarpintero
parents: 7
diff changeset
353 strncat(buffer, dirp->d_name, 255 - strlen(buffer));
5971a90f2459 Fix some gcc warnings
AngelCarpintero
parents: 7
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
400
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
401
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
406
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
407 return pipe_fd;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
408 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
409
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
410 int main (int argc, char **argv)
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
413
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
414 if (argc != 3) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
415 printf("dummy.c\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
416 printf("A example for using a video4linux loopback in zero-copy mode\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
419 printf("Usage:\n\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
420 printf("dummy widthxheight rgb24|yuv420p\n\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
421 printf("example: dummy 352x288 yuv420p\n\n");
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
422 exit(1);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
423 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
424
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
425 sscanf(argv[1], "%dx%d", &width, &height);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
426 sscanf(argv[2], "%s", palette);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
432 else fmt = VIDEO_PALETTE_RGB24;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
433
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
434 /* Default startup values, nothing special
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
435 width=352;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
436 height=288;
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
437 */
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
443 exit(1);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
448 if (!image_out) {
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
451 }
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
456
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
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
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
467 exit(0);
5f21a4dddc0c Initial checkin
KennethLavrsen
parents:
diff changeset
468 }