Mercurial > mplayer.hg
annotate vidix/ivtv_vid.c @ 34697:ac6b38cd0d45
Rename sub window video window.
It was a bad idea to name the video window "sub window" at the time
the GUI was written. The term "sub window" does make sense from the
programmer's point of view, but it doesn't make any sense at all from
the user's point of view, because the sub window simply is the window
where the video will be displayed.
Moreover, since the term "sub" is generally short for "subtitles",
the renaming makes the code much easier to understand.
author | ib |
---|---|
date | Sat, 03 Mar 2012 16:45:15 +0000 |
parents | 8fa2f43cb760 |
children | 945eab072c9d |
rev | line source |
---|---|
26719 | 1 /* |
2 * VIDIX driver for Hauppauge PVR 350 | |
3 * | |
4 * Copyright 2007 Lutz Koschorreck | |
5 * Based on genfb_vid.c and ivtv_xv.c | |
6 * | |
7 * This file is part of MPlayer. | |
8 * | |
9 * MPlayer is free software; you can redistribute it and/or modify | |
10 * it under the terms of the GNU General Public License as published by | |
11 * the Free Software Foundation; either version 2 of the License, or | |
12 * (at your option) any later version. | |
13 * | |
14 * MPlayer is distributed in the hope that it will be useful, | |
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 * GNU General Public License for more details. | |
18 * | |
19 * You should have received a copy of the GNU General Public License along | |
20 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
22 */ | |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
23 |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
24 #include <errno.h> |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
25 #include <stdio.h> |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
26 #include <stdlib.h> |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
27 #include <string.h> |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
28 #include <unistd.h> |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
29 #include <math.h> |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
30 #include <inttypes.h> |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
31 #include <fcntl.h> |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
32 #include <sys/ioctl.h> |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
33 #include <linux/types.h> |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
34 #include <linux/version.h> |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
35 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
36 #include <linux/videodev2.h> |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
37 #endif |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
38 #include <linux/ivtv.h> |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
39 #include <linux/fb.h> |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
40 |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
41 #include "vidix.h" |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
42 #include "fourcc.h" |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
43 #include "dha.h" |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
44 #include "pci_ids.h" |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
45 #include "pci_names.h" |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
46 |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
47 #define VIDIX_STATIC ivtv_ |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
48 |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
49 #define IVTV_MSG "[ivtv-vid] " |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
50 #define MAXLINE 128 |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
51 #define IVTVMAXWIDTH 720 |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
52 #define IVTVMAXHEIGHT 576 |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
53 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
54 static int fbdev = -1; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
55 static int yuvdev = -1; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
56 static void *memBase = NULL; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
57 static int frameSize = 0; |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
58 static int probed = 0; |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
59 static int ivtv_verbose; |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
60 static vidix_rect_t destVideo; |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
61 static vidix_rect_t srcVideo; |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
62 static unsigned char *outbuf = NULL; |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
63 double fb_width; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
64 double fb_height; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
65 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
66 static struct ivtvfb_ioctl_state_info fb_state_old; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
67 static struct ivtvfb_ioctl_state_info fb_state_hide; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
68 #else |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
69 struct v4l2_format format_old, format_hide; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
70 #endif |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
71 int alpha_disable = 0; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
72 |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
73 /* VIDIX exports */ |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
74 |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
75 static vidix_capability_t ivtv_cap = |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
76 { |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
77 "Hauppauge PVR 350 YUV Video", |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
78 "Lutz Koschorreck", |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
79 TYPE_OUTPUT, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
80 { 0, 0, 0, 0 }, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
81 IVTVMAXWIDTH, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
82 IVTVMAXHEIGHT, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
83 4, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
84 4, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
85 -1, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
86 FLAG_UPSCALER|FLAG_DOWNSCALER, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
87 -1, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
88 -1, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
89 { 0, 0, 0, 0 } |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
90 }; |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
91 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
92 static void de_macro_y(unsigned char *src, unsigned char *dst, |
27624
905e9c7ac862
Remove pointless and gcc-specific __attribute__ ((unused)).
diego
parents:
27079
diff
changeset
|
93 unsigned int w, unsigned int h, int src_x, int src_y, int height, int width) |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
94 { |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
95 unsigned int x, y, i; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
96 unsigned char *dst_2; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
97 unsigned int h_tail, w_tail; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
98 unsigned int h_size, w_size; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
99 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
100 // Always round the origin, but compensate by increasing the size |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
101 if (src_x & 15) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
102 w += src_x & 15; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
103 src_x &= ~15; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
104 } |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
105 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
106 if (src_y & 15) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
107 h += src_y & 15; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
108 src_y &= ~15; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
109 } |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
110 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
111 // The right / bottom edge might not be a multiple of 16 |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
112 h_tail = h & 15; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
113 w_tail = w & 15; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
114 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
115 // One block is 16 pixels high |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
116 h_size = 16; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
117 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
118 // descramble Y plane |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
119 for (y = 0; y < h; y += 16) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
120 |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
121 // Clip if we've reached the bottom & the size isn't a multiple of 16 |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
122 if (y + 16 > h) h_size = h_tail; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
123 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
124 for (x = 0; x < w; x += 16) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
125 if (x + 16 > w) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
126 w_size = w_tail; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
127 else |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
128 w_size = 16; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
129 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
130 dst_2 = dst + (720 * y) + (720 * src_y) + (256 * (src_x>>4)) + (x * 16); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
131 |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
132 for (i = 0; i < h_size; i++) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
133 memcpy(dst_2, src + src_x + x + (y + i) * width + (src_y * width), w_size); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
134 dst_2 += 16; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
135 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
136 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
137 } |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
138 } |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
139 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
140 static void de_macro_uv(unsigned char *srcu, unsigned char *srcv, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
141 unsigned char *dst, unsigned int w, unsigned int h, int src_x, int src_y, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
142 int height, int width) |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
143 { |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
144 unsigned int x, y, i, f; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
145 unsigned char *dst_2; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
146 unsigned int h_tail, w_tail; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
147 unsigned int h_size; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27625
diff
changeset
|
148 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
149 // The uv plane is half the size of the y plane, so 'correct' all dimensions. |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
150 w /= 2; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
151 h /= 2; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
152 src_x /= 2; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
153 src_y /= 2; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
154 height /= 2; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
155 width /= 2; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
156 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
157 // Always round the origin, but compensate by increasing the size |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
158 if (src_x & 7) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
159 w += src_x & 7; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
160 src_x &= ~7; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
161 } |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
162 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
163 if (src_y & 15) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
164 h += src_y & 15; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
165 src_y &= ~15; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
166 } |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
167 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
168 // The right / bottom edge may not be a multiple of 16 |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
169 h_tail = h & 15; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
170 w_tail = w & 7; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
171 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
172 h_size = 16; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
173 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
174 // descramble U/V plane |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
175 for (y = 0; y < h; y += 16) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
176 if ( y + 16 > h ) h_size = h_tail; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
177 for (x = 0; x < w; x += 8) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
178 dst_2 = dst + (720 * y) + (720 * src_y) + (256 * (src_x>>3)) + (x * 32); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
179 if (x + 8 <= w) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
180 for (i = 0; i < h_size; i++) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
181 int idx = src_x + x + ((y + i) * width) + (src_y * width); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
182 dst_2[0] = srcu[idx + 0]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
183 dst_2[1] = srcv[idx + 0]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
184 dst_2[2] = srcu[idx + 1]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
185 dst_2[3] = srcv[idx + 1]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
186 dst_2[4] = srcu[idx + 2]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
187 dst_2[5] = srcv[idx + 2]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
188 dst_2[6] = srcu[idx + 3]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
189 dst_2[7] = srcv[idx + 3]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
190 dst_2[8] = srcu[idx + 4]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
191 dst_2[9] = srcv[idx + 4]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
192 dst_2[10] = srcu[idx + 5]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
193 dst_2[11] = srcv[idx + 5]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
194 dst_2[12] = srcu[idx + 6]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
195 dst_2[13] = srcv[idx + 6]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
196 dst_2[14] = srcu[idx + 7]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
197 dst_2[15] = srcv[idx + 7]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
198 dst_2 += 16; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
199 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
200 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
201 else { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
202 for (i = 0; i < h_size; i ++) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
203 int idx = src_x + x + ((y + i) * width) + (src_y * width); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
204 for (f = 0; f < w_tail; f++) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
205 dst_2[0] = srcu[idx + f]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
206 dst_2[1] = srcv[idx + f]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
207 dst_2 += 2; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
208 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
209 /* |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
210 // Used for testing edge cutoff. Sets colour to Green |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
211 for (f = w_tail;f < 8;f ++) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
212 dst_2[0] = 0; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
213 dst_2[1] = 0; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
214 dst_2 += 2; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
215 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
216 */ |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
217 dst_2 += 16 - (w_tail << 1); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
218 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
219 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
220 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
221 } |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
222 } |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
223 |
27625
79f8fefa53df
Restore function parameters mistakenly removed in previous commit.
diego
parents:
27624
diff
changeset
|
224 int ivtv_probe(int verbose, int force) |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
225 { |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
226 unsigned char fb_number = 0; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
227 char *device_name = NULL; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
228 char *alpha = NULL; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
229 struct fb_var_screeninfo vinfo; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
230 char fb_dev_name[] = "/dev/fb0\0"; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
231 pciinfo_t lst[MAX_PCI_DEVICES]; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
232 int err = 0; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
233 unsigned int i, num_pci = 0; |
29389
912e642ffb95
Move some variable declarations up to avoid the warnings:
diego
parents:
29263
diff
changeset
|
234 unsigned char yuv_device_number = 48, yuv_device = 48 + fb_number; |
912e642ffb95
Move some variable declarations up to avoid the warnings:
diego
parents:
29263
diff
changeset
|
235 char yuv_device_name[] = "/dev/videoXXX\0"; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
236 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
237 if(verbose) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
238 printf(IVTV_MSG"probe\n"); |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
239 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
240 ivtv_verbose = verbose; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
241 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
242 err = pci_scan(lst, &num_pci); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
243 if(err) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
244 printf(IVTV_MSG"Error occured during pci scan: %s\n", strerror(err)); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
245 return err; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
246 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
247 |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
248 if(ivtv_verbose) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
249 printf(IVTV_MSG"Found %d pci devices\n", num_pci); |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
250 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
251 for(i = 0; i < num_pci; i++) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
252 if(2 == ivtv_verbose) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
253 printf(IVTV_MSG"Found chip [%04X:%04X] '%s' '%s'\n" |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
254 ,lst[i].vendor |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
255 ,lst[i].device |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
256 ,pci_vendor_name(lst[i].vendor) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
257 ,pci_device_name(lst[i].vendor,lst[i].device)); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
258 if(VENDOR_INTERNEXT == lst[i].vendor) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
259 switch(lst[i].device) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
260 { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
261 case DEVICE_INTERNEXT_ITVC15_MPEG_2_ENCODER: |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
262 if(ivtv_verbose) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
263 printf(IVTV_MSG"Found PVR 350\n"); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
264 goto card_found; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
265 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
266 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
267 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27625
diff
changeset
|
268 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
269 if(ivtv_verbose) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
270 printf(IVTV_MSG"Can't find chip\n"); |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
271 return ENXIO; |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
272 |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
273 card_found: |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
274 |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
275 device_name = getenv("FRAMEBUFFER"); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
276 if(NULL == device_name) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
277 device_name = fb_dev_name; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
278 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
279 |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
280 fb_number = atoi(device_name+strlen("/dev/fb")); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
281 |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
282 fbdev = open(device_name, O_RDWR); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
283 if(-1 != fbdev) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
284 if(ioctl(fbdev, FBIOGET_VSCREENINFO, &vinfo) < 0) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
285 printf(IVTV_MSG"Unable to read screen info\n"); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
286 close(fbdev); |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
287 return ENXIO; |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
288 } else { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
289 fb_width = vinfo.xres; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
290 fb_height = vinfo.yres; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
291 if(2 == ivtv_verbose) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
292 printf(IVTV_MSG"framebuffer width : %3.0f\n",fb_width); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
293 printf(IVTV_MSG"framebuffer height: %3.0f\n",fb_height); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
294 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
295 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
296 if(NULL != (alpha = getenv("VIDIXIVTVALPHA"))) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
297 if(0 == strcmp(alpha, "disable")) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
298 alpha_disable = 1; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
299 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
300 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
301 } else { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
302 printf(IVTV_MSG"Failed to open /dev/fb%u\n", fb_number); |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
303 return ENXIO; |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
304 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
305 |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
306 /* Try to find YUV device */ |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
307 do { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
308 sprintf(yuv_device_name, "/dev/video%u", yuv_device); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
309 yuvdev = open(yuv_device_name, O_RDWR); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
310 if(-1 != yuvdev) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
311 if(ivtv_verbose) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
312 printf(IVTV_MSG"YUV device found /dev/video%u\n", yuv_device); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
313 goto yuv_found; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
314 } else { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
315 if(ivtv_verbose) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
316 printf(IVTV_MSG"YUV device not found: /dev/video%u\n", yuv_device); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
317 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
318 } while(yuv_device-- > yuv_device_number); |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
319 return ENXIO; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
320 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
321 yuv_found: |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
322 if(0 == alpha_disable) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
323 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
324 if(ioctl(fbdev, IVTVFB_IOCTL_GET_STATE, &fb_state_old) < 0) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
325 printf(IVTV_MSG"Unable to read fb state\n"); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
326 close(yuvdev); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
327 close(fbdev); |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
328 return ENXIO; |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
329 } else { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
330 if(ivtv_verbose) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
331 printf(IVTV_MSG"old alpha : %ld\n",fb_state_old.alpha); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
332 printf(IVTV_MSG"old status: 0x%lx\n",fb_state_old.status); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
333 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
334 fb_state_hide.alpha = 0; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
335 fb_state_hide.status = fb_state_old.status | IVTVFB_STATUS_GLOBAL_ALPHA; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
336 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
337 #else |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
338 memset(&format_old, 0, sizeof(format_old)); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
339 format_old.type = format_hide.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
340 if(ioctl(yuvdev, VIDIOC_G_FMT , &format_old) < 0) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
341 printf(IVTV_MSG"Unable to read fb state\n"); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
342 close(yuvdev); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
343 close(fbdev); |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
344 return ENXIO; |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
345 } else { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
346 if(ivtv_verbose) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
347 printf(IVTV_MSG"old alpha : %d\n",format_old.fmt.win.global_alpha); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
348 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
349 memcpy(&format_hide, &format_old, sizeof(format_old)); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
350 format_hide.fmt.win.global_alpha = 0; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
351 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
352 #endif |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
353 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
354 probed = 1; |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
355 return 0; |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
356 } |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
357 |
27625
79f8fefa53df
Restore function parameters mistakenly removed in previous commit.
diego
parents:
27624
diff
changeset
|
358 int ivtv_init(const char *args) |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
359 { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
360 if(ivtv_verbose) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
361 printf(IVTV_MSG"init\n"); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
362 |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
363 if (!probed) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
364 if(ivtv_verbose) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
365 printf(IVTV_MSG"Driver was not probed but is being initialized\n"); |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
366 return EINTR; |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
367 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
368 outbuf = malloc((IVTVMAXHEIGHT * IVTVMAXWIDTH) + (IVTVMAXHEIGHT * IVTVMAXWIDTH / 2)); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
369 if(NULL == outbuf) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
370 if(ivtv_verbose) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
371 printf(IVTV_MSG"Not enough memory availabe!\n"); |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
372 return EINTR; |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
373 } |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
374 return 0; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
375 } |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
376 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
377 void ivtv_destroy(void) |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
378 { |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
379 if(ivtv_verbose) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
380 printf(IVTV_MSG"destroy\n"); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
381 if(-1 != yuvdev) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27625
diff
changeset
|
382 close(yuvdev); |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
383 if(-1 != fbdev) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
384 close(fbdev); |
32537
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
29389
diff
changeset
|
385 free(outbuf); |
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
29389
diff
changeset
|
386 free(memBase); |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
387 } |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
388 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
389 int ivtv_get_caps(vidix_capability_t *to) |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
390 { |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
391 if(ivtv_verbose) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
392 printf(IVTV_MSG"GetCap\n"); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
393 memcpy(to, &ivtv_cap, sizeof(vidix_capability_t)); |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
394 return 0; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
395 } |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
396 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
397 int ivtv_query_fourcc(vidix_fourcc_t *to) |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
398 { |
29389
912e642ffb95
Move some variable declarations up to avoid the warnings:
diego
parents:
29263
diff
changeset
|
399 int supports = 0; |
912e642ffb95
Move some variable declarations up to avoid the warnings:
diego
parents:
29263
diff
changeset
|
400 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
401 if(ivtv_verbose) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
402 printf(IVTV_MSG"query fourcc (%x)\n", to->fourcc); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27625
diff
changeset
|
403 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
404 switch(to->fourcc) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
405 { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
406 case IMGFMT_YV12: |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
407 supports = 1; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
408 break; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
409 default: |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
410 supports = 0; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
411 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27625
diff
changeset
|
412 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
413 if(!supports) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
414 to->depth = to->flags = 0; |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
415 return ENOTSUP; |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
416 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
417 to->depth = VID_DEPTH_12BPP | |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
418 VID_DEPTH_15BPP | VID_DEPTH_16BPP | |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
419 VID_DEPTH_24BPP | VID_DEPTH_32BPP; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
420 to->flags = 0; |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
421 return 0; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
422 } |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
423 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
424 int ivtv_config_playback(vidix_playback_t *info) |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
425 { |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
426 if(ivtv_verbose) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
427 printf(IVTV_MSG"config playback\n"); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
428 |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
429 if(2 == ivtv_verbose){ |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27625
diff
changeset
|
430 printf(IVTV_MSG"src : x:%d y:%d w:%d h:%d\n", |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
431 info->src.x, info->src.y, info->src.w, info->src.h); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27625
diff
changeset
|
432 printf(IVTV_MSG"dest: x:%d y:%d w:%d h:%d\n", |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
433 info->dest.x, info->dest.y, info->dest.w, info->dest.h); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
434 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27625
diff
changeset
|
435 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
436 memcpy(&destVideo, &info->dest, sizeof(vidix_rect_t)); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
437 memcpy(&srcVideo, &info->src, sizeof(vidix_rect_t)); |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
438 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
439 info->num_frames = 2; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
440 info->frame_size = frameSize = info->src.w*info->src.h+(info->src.w*info->src.h)/2; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
441 info->dest.pitch.y = 1; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
442 info->dest.pitch.u = info->dest.pitch.v = 2; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
443 info->offsets[0] = 0; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
444 info->offsets[1] = info->frame_size; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
445 info->offset.y = 0; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
446 info->offset.u = info->src.w * info->src.h; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
447 info->offset.v = info->offset.u + ((info->src.w * info->src.h)/4); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27625
diff
changeset
|
448 info->dga_addr = memBase = malloc(info->num_frames*info->frame_size); |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
449 if(ivtv_verbose) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
450 printf(IVTV_MSG"frame_size: %d, dga_addr: %p\n", |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
451 info->frame_size, info->dga_addr); |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
452 return 0; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
453 } |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
454 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
455 int ivtv_playback_on(void) |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
456 { |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
457 if(ivtv_verbose) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
458 printf(IVTV_MSG"playback on\n"); |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
459 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
460 if(0 == alpha_disable) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
461 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
462 if (-1 != fbdev) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
463 if (ioctl(fbdev, IVTVFB_IOCTL_SET_STATE, &fb_state_hide) < 0) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
464 printf (IVTV_MSG"Failed to set fb state\n"); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
465 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
466 #else |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
467 if (-1 != yuvdev) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
468 if (ioctl(yuvdev, VIDIOC_S_FMT, &format_hide) < 0) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
469 printf (IVTV_MSG"Failed to set fb state\n"); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
470 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
471 #endif |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
472 } |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
473 return 0; |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
474 } |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
475 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
476 int ivtv_playback_off(void) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
477 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27625
diff
changeset
|
478 if(ivtv_verbose) |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
479 printf(IVTV_MSG"playback off\n"); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27625
diff
changeset
|
480 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
481 if(0 == alpha_disable) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
482 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
483 if (-1 != fbdev) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
484 if (ioctl(fbdev, IVTVFB_IOCTL_SET_STATE, &fb_state_old) < 0) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
485 printf (IVTV_MSG"Failed to restore fb state\n"); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
486 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
487 #else |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
488 if (-1 != yuvdev) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
489 if (ioctl(yuvdev, VIDIOC_S_FMT, &format_old) < 0) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
490 printf (IVTV_MSG"Failed to restore fb state\n"); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
491 } |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
492 #endif |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
493 } |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
494 return 0; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
495 } |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
496 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
497 int ivtv_frame_sel(unsigned int frame) |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
498 { |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
499 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
500 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
501 struct ivtvyuv_ioctl_dma_host_to_ivtv_args args; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
502 #else |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
503 struct ivtv_dma_frame args; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
504 #endif |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
505 unsigned char *curMemBase = (unsigned char *)memBase + (frame * frameSize); |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
506 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
507 de_macro_y(curMemBase, outbuf, srcVideo.w, srcVideo.h, srcVideo.x, srcVideo.y, srcVideo.h, srcVideo.w); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
508 de_macro_uv(curMemBase + (srcVideo.w * srcVideo.h) + srcVideo.w * srcVideo.h / 4, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
509 curMemBase + (srcVideo.w * srcVideo.h), outbuf + (IVTVMAXHEIGHT * IVTVMAXWIDTH), |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
510 srcVideo.w, srcVideo.h, srcVideo.x, srcVideo.y, srcVideo.h, srcVideo.w); |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
511 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
512 args.y_source = outbuf; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
513 args.uv_source = outbuf + (IVTVMAXHEIGHT * IVTVMAXWIDTH); |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
514 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
515 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
516 args.src_x = srcVideo.x; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
517 args.src_y = srcVideo.y; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
518 args.dst_x = destVideo.x; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
519 args.dst_y = destVideo.y; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
520 args.src_w = srcVideo.w; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
521 args.dst_w = destVideo.w; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
522 args.srcBuf_width = srcVideo.w; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
523 args.src_h = srcVideo.h; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
524 args.dst_h = destVideo.h; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
525 args.srcBuf_height = srcVideo.h; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
526 args.yuv_type = 0; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
527 #else |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
528 args.src.left = srcVideo.x; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
529 args.src.top = srcVideo.y; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
530 args.dst.left = destVideo.x; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
531 args.dst.top = destVideo.y; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
532 args.src.width = srcVideo.w; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
533 args.dst.width = destVideo.w; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
534 args.src_width = srcVideo.w; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
535 args.src.height = srcVideo.h; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
536 args.dst.height = destVideo.h; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
537 args.src_height = srcVideo.h; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
538 args.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
539 #endif |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
540 |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
541 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22) |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
542 if(ioctl(yuvdev, IVTV_IOC_PREP_FRAME_YUV, &args) == -1) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
543 #else |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
544 if(ioctl(yuvdev, IVTV_IOC_DMA_FRAME, &args) == -1) { |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
545 #endif |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
546 printf("Ioctl IVTV_IOC_DMA_FRAME returned failed Error\n"); |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
547 } |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
548 return 0; |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
549 } |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
550 |
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
551 VDXDriver ivtv_drv = { |
25276
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
552 "ivtv", |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
553 NULL, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
554 .probe = ivtv_probe, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
555 .get_caps = ivtv_get_caps, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
556 .query_fourcc = ivtv_query_fourcc, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
557 .init = ivtv_init, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
558 .destroy = ivtv_destroy, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
559 .config_playback = ivtv_config_playback, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
560 .playback_on = ivtv_playback_on, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
561 .playback_off = ivtv_playback_off, |
334d55a31174
sync ivtv driver with vidix.sf.net (multiple revisions)
ben
parents:
23275
diff
changeset
|
562 .frame_sel = ivtv_frame_sel, |
23275
17fcd644f32e
new VIDIX driver for IVTV cards, original patch by Lutz Koschorreck
ben
parents:
diff
changeset
|
563 }; |