Mercurial > mplayer.hg
annotate vidix/unichrome_vid.c @ 36730:8bc4d669c5d7
Enable option font_encoding without freetype.
subtitle_font_encoding is now also used when freetype is disabled.
This is corresponding to r36825, although the GUI doesn't support
changing the option through the preferences in this case (but it's
in gui.conf at least).
author | ib |
---|---|
date | Thu, 13 Feb 2014 10:41:33 +0000 |
parents | 598ef7d90b78 |
children | 3c5c93a30fb7 |
rev | line source |
---|---|
22850 | 1 /* |
23046
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
2 * VIDIX driver for VIA CLE266/Unichrome chipsets. |
26715 | 3 * |
23046
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
4 * Copyright (C) 2004 Timothy Lee |
26715 | 5 * Thanks to Gilles Frattini for bugfixes |
6 * Doxygen documentation by Benjamin Zores <ben@geexbox.org> | |
7 * h/w revision detection by Timothy Lee <timothy.lee@siriushk.com> | |
23046
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
8 * |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
9 * This file is part of MPlayer. |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
10 * |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
11 * MPlayer is free software; you can redistribute it and/or modify |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
12 * it under the terms of the GNU General Public License as published by |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
13 * the Free Software Foundation; either version 2 of the License, or |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
14 * (at your option) any later version. |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
15 * |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
16 * MPlayer is distributed in the hope that it will be useful, |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
19 * GNU General Public License for more details. |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
20 * |
26719 | 21 * You should have received a copy of the GNU General Public License along |
22 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
23046
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
24 */ |
22850 | 25 |
26 #include <errno.h> | |
27 #include <stdio.h> | |
28 #include <stdlib.h> | |
29 #include <string.h> | |
30 #include <inttypes.h> | |
31 #include <unistd.h> | |
32 | |
26203 | 33 #include "config.h" |
22850 | 34 #include "vidix.h" |
35 #include "fourcc.h" | |
22901 | 36 #include "dha.h" |
22900
a9e111b88c4a
merged libdha and libvidix, moved all files from libdha to vidix directory
ben
parents:
22874
diff
changeset
|
37 #include "pci_ids.h" |
a9e111b88c4a
merged libdha and libvidix, moved all files from libdha to vidix directory
ben
parents:
22874
diff
changeset
|
38 #include "pci_names.h" |
22850 | 39 |
40 #include "unichrome_regs.h" | |
41 | |
42 /** | |
43 * @brief Information on PCI device. | |
44 */ | |
23059 | 45 static pciinfo_t pci_info; |
22850 | 46 |
47 /** | |
48 * @brief Unichrome driver colorkey settings. | |
49 */ | |
50 static vidix_grkey_t uc_grkey; | |
51 | |
52 static int frames[VID_PLAY_MAXFRAMES]; | |
23059 | 53 static uint8_t *vio; |
54 static uint8_t *uc_mem; | |
55 static uint8_t mclk_save[3]; | |
56 static uint8_t hwrev; | |
22850 | 57 |
58 #define VIA_OUT(hwregs, reg, val) *(volatile uint32_t *)((hwregs) + (reg)) = (val) | |
59 #define VIA_IN(hwregs, reg) *(volatile uint32_t *)((hwregs) + (reg)) | |
60 #define VGA_OUT8(hwregs, reg, val) *(volatile uint8_t *)((hwregs) + (reg) + 0x8000) = (val) | |
61 #define VGA_IN8(hwregs, reg) *(volatile uint8_t *)((hwregs) + (reg) + 0x8000) | |
62 #define VIDEO_OUT(hwregs, reg, val) VIA_OUT((hwregs)+0x200, reg, val) | |
63 #define VIDEO_IN(hwregs, reg) VIA_IN((hwregs)+0x200, reg) | |
64 | |
65 #define outb(val,reg) OUTPORT8(reg,val) | |
66 #define inb(reg) INPORT8(reg) | |
67 | |
68 #define ALIGN_TO(v, n) (((v) + (n-1)) & ~(n-1)) | |
69 #define UC_MAP_V1_FIFO_CONTROL(depth, pre_thr, thr) \ | |
70 (((depth)-1) | ((thr) << 8) | ((pre_thr) << 24)) | |
71 | |
72 #define VIDEOMEMORY_SIZE (8 * 1024 * 1024) | |
73 #define FRAMEBUFFER_SIZE 0x200000 | |
74 #define FRAMEBUFFER_START (VIDEOMEMORY_SIZE - FRAMEBUFFER_SIZE) | |
75 | |
76 #ifdef DEBUG_LOGFILE | |
23059 | 77 static FILE *logfile = 0; |
22850 | 78 #define LOGWRITE(x) {if(logfile) fprintf(logfile,x);} |
79 #else | |
80 #define LOGWRITE(x) | |
81 #endif | |
82 | |
83 /** | |
84 * @brief Unichrome driver vidix capabilities. | |
85 */ | |
86 static vidix_capability_t uc_cap = { | |
87 "VIA CLE266 Unichrome driver", | |
88 "Timothy Lee <timothy@siriushk.com>", | |
89 TYPE_OUTPUT, | |
90 {0, 0, 0, 0}, | |
91 4096, | |
92 4096, | |
93 4, | |
94 4, | |
95 -1, | |
96 FLAG_UPSCALER | FLAG_DOWNSCALER, | |
97 VENDOR_VIA2, | |
98 -1, | |
99 {0, 0, 0, 0} | |
100 }; | |
101 | |
102 /** | |
103 * @brief list of card IDs compliant with the Unichrome driver . | |
104 */ | |
105 static unsigned short uc_card_ids[] = { | |
22874
9a8f6901e888
updated pci ids list, fixed vidix drivers compilation and added nearly exhaustive pci ids for nvidia driver
ben
parents:
22866
diff
changeset
|
106 DEVICE_VIA2_VT8623_APOLLO_CLE266, |
9a8f6901e888
updated pci ids list, fixed vidix drivers compilation and added nearly exhaustive pci ids for nvidia driver
ben
parents:
22866
diff
changeset
|
107 DEVICE_VIA2_VT8378_S3_UNICHROME |
22850 | 108 }; |
109 | |
110 /** | |
111 * @brief Find chip index in Unichrome compliant devices list. | |
112 * | |
113 * @param chip_id PCI device ID. | |
114 * | |
115 * @returns index position in uc_card_ids if successful. | |
116 * -1 if chip_id is not a compliant chipset ID. | |
117 */ | |
118 static int | |
119 find_chip (unsigned chip_id) | |
120 { | |
121 unsigned i; | |
122 for (i = 0; i < sizeof (uc_card_ids) / sizeof (unsigned short); i++) | |
123 { | |
124 if (chip_id == uc_card_ids[i]) | |
125 return i; | |
126 } | |
127 return -1; | |
128 } | |
129 | |
130 /** | |
131 * @brief Map hardware settings for vertical scaling. | |
132 * | |
133 * @param sh source height. | |
134 * @param dh destination height. | |
135 * @param zoom will hold vertical setting of zoom register. | |
136 * @param mini will hold vertical setting of mini register. | |
137 * | |
138 * @returns 1 if successful. | |
139 * 0 if the zooming factor is too large or small. | |
140 * | |
141 * @note Derived from VIA's V4L driver. | |
142 * See ddover.c, DDOVER_HQVCalcZoomHeight() | |
143 */ | |
144 static int | |
22866 | 145 uc_ovl_map_vzoom (uint32_t sh, uint32_t dh, uint32_t * zoom, uint32_t * mini) |
22850 | 146 { |
147 uint32_t sh1, tmp, d; | |
148 int zoom_ok = 1; | |
149 | |
150 if (sh == dh) /* No zoom */ | |
151 { | |
152 /* Do nothing */ | |
153 } | |
154 else if (sh < dh) /* Zoom in */ | |
155 { | |
156 tmp = (sh * 0x0400) / dh; | |
157 zoom_ok = !(tmp > 0x3ff); | |
158 | |
159 *zoom |= (tmp & 0x3ff) | V1_Y_ZOOM_ENABLE; | |
160 *mini |= V1_Y_INTERPOLY | V1_YCBCR_INTERPOLY; | |
161 } | |
162 else /* sw > dh - Zoom out */ | |
163 { | |
164 /* Find a suitable divider (1 << d) = {2, 4, 8 or 16} */ | |
165 sh1 = sh; | |
166 for (d = 1; d < 5; d++) | |
167 { | |
168 sh1 >>= 1; | |
169 if (sh1 <= dh) | |
170 break; | |
171 } | |
172 if (d == 5) /* too small */ | |
173 { | |
174 d = 4; | |
175 zoom_ok = 0; | |
176 } | |
177 | |
178 *mini |= ((d << 1) - 1) << 16; /* <= {1,3,5,7} << 16 */ | |
179 | |
180 /* Add scaling */ | |
181 if (sh1 < dh) | |
182 { | |
183 tmp = (sh1 * 0x400) / dh; | |
184 *zoom |= ((tmp & 0x3ff) | V1_Y_ZOOM_ENABLE); | |
185 *mini |= V1_Y_INTERPOLY | V1_YCBCR_INTERPOLY; | |
186 } | |
187 } | |
188 | |
189 return zoom_ok; | |
190 } | |
191 | |
192 /** | |
193 * @brief Map hardware settings for horizontal scaling. | |
194 * | |
195 * @param sw source width. | |
196 * @param dw destination width. | |
197 * @param zoom will hold horizontal setting of zoom register. | |
198 * @param mini will hold horizontal setting of mini register. | |
199 * @param falign will hold fetch aligment. | |
200 * @param dcount will hold display count. | |
201 * | |
202 * @returns 1 if successful. | |
203 * 0 if the zooming factor is too large or small. | |
204 * | |
205 * @note Derived from VIA's V4L driver. | |
206 * See ddover.c, DDOVER_HQVCalcZoomWidth() and DDOver_GetDisplayCount() | |
207 */ | |
208 static int | |
22866 | 209 uc_ovl_map_hzoom (uint32_t sw, uint32_t dw, uint32_t * zoom, uint32_t * mini, |
22850 | 210 int *falign, int *dcount) |
211 { | |
212 uint32_t tmp, sw1, d; | |
213 int md; /* Minify-divider */ | |
214 int zoom_ok = 1; | |
215 | |
216 md = 1; | |
217 *falign = 0; | |
218 | |
219 if (sw == dw) /* no zoom */ | |
220 { | |
221 /* Do nothing */ | |
222 } | |
223 else if (sw < dw) /* zoom in */ | |
224 { | |
225 tmp = (sw * 0x0800) / dw; | |
226 zoom_ok = !(tmp > 0x7ff); | |
227 | |
228 *zoom |= ((tmp & 0x7ff) << 16) | V1_X_ZOOM_ENABLE; | |
229 *mini |= V1_X_INTERPOLY; | |
230 } | |
231 else /* sw > dw - Zoom out */ | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27079
diff
changeset
|
232 { |
22850 | 233 /* Find a suitable divider (1 << d) = {2, 4, 8 or 16} */ |
234 sw1 = sw; | |
235 for (d = 1; d < 5; d++) | |
236 { | |
237 sw1 >>= 1; | |
238 if (sw1 <= dw) | |
239 break; | |
240 } | |
241 if (d == 5) /* too small */ | |
242 { | |
243 d = 4; | |
244 zoom_ok = 0; | |
245 } | |
246 | |
247 md = 1 << d; /* <= {2,4,8,16} */ | |
248 *falign = ((md << 1) - 1) & 0xf; /* <= {3,7,15,15} */ | |
249 *mini |= V1_X_INTERPOLY; | |
250 *mini |= ((d << 1) - 1) << 24; /* <= {1,3,5,7} << 24 */ | |
251 | |
252 /* Add scaling */ | |
253 if (sw1 < dw) | |
254 { | |
255 /* CLE bug */ | |
256 /* tmp = sw1*0x0800 / dw; */ | |
257 tmp = (sw1 - 2) * 0x0800 / dw; | |
258 *zoom |= ((tmp & 0x7ff) << 16) | V1_X_ZOOM_ENABLE; | |
259 } | |
260 } | |
261 | |
262 *dcount = sw - md; | |
263 return zoom_ok; | |
264 } | |
265 | |
266 /** | |
267 * @brief qword fetch register setting. | |
268 * | |
269 * @param format overlay pixel format. | |
270 * @param sw source width. | |
271 * | |
272 * @return qword fetch register setting | |
273 * | |
274 * @note Derived from VIA's V4L driver. See ddover.c, DDOver_GetFetch() | |
275 * @note Only call after uc_ovl_map_hzoom() | |
276 */ | |
277 static uint32_t | |
278 uc_ovl_map_qwfetch (uint32_t format, int sw) | |
279 { | |
280 uint32_t fetch = 0; | |
281 | |
282 switch (format) | |
283 { | |
284 case IMGFMT_YV12: | |
285 case IMGFMT_I420: | |
286 fetch = ALIGN_TO (sw, 32) >> 4; | |
287 break; | |
288 case IMGFMT_UYVY: | |
289 case IMGFMT_YVYU: | |
290 case IMGFMT_YUY2: | |
291 fetch = (ALIGN_TO (sw << 1, 16) >> 4) + 1; | |
292 break; | |
293 case IMGFMT_BGR15: | |
294 case IMGFMT_BGR16: | |
295 fetch = (ALIGN_TO (sw << 1, 16) >> 4) + 1; | |
296 break; | |
297 case IMGFMT_BGR32: | |
298 fetch = (ALIGN_TO (sw << 2, 16) >> 4) + 1; | |
299 break; | |
300 default: | |
301 printf ("[unichrome] Unexpected pixelformat!"); | |
302 break; | |
303 } | |
304 | |
305 if (fetch < 4) | |
306 fetch = 4; | |
307 | |
308 return fetch; | |
309 } | |
310 | |
311 /** | |
312 * @brief Map pixel format. | |
313 * | |
314 * @param format pixel format. | |
315 * | |
316 * @return the mapped pixel format. | |
317 * | |
318 * @note Derived from VIA's V4L driver. See ddover.c, DDOver_GetV1Format() | |
319 */ | |
320 static uint32_t | |
321 uc_ovl_map_format (uint32_t format) | |
322 { | |
323 switch (format) | |
324 { | |
325 case IMGFMT_UYVY: | |
326 case IMGFMT_YVYU: | |
327 case IMGFMT_YUY2: | |
328 return V1_COLORSPACE_SIGN | V1_YUV422; | |
329 case IMGFMT_IYUV: | |
330 return V1_COLORSPACE_SIGN | V1_YCbCr420 | V1_SWAP_SW; | |
331 case IMGFMT_YV12: | |
332 case IMGFMT_I420: | |
333 return V1_COLORSPACE_SIGN | V1_YCbCr420; | |
334 case IMGFMT_BGR15: | |
335 return V1_RGB15; | |
336 case IMGFMT_BGR16: | |
337 return V1_RGB16; | |
338 case IMGFMT_BGR32: | |
339 return V1_RGB32; | |
340 default: | |
341 printf ("[unichrome] Unexpected pixelformat!"); | |
342 return V1_YUV422; | |
343 } | |
344 } | |
345 | |
346 /** | |
347 * @brief Calculate V1 control and fifo-control register values. | |
348 * | |
349 * @param format pixel format. | |
350 * @param sw source width. | |
351 * @param hwrev CLE266 hardware revision. | |
352 * @param extfifo_on set this 1 if the extended FIFO is enabled. | |
353 * @param control will hold value for V1_CONTROL. | |
354 * @param fifo will hold value for V1_FIFO_CONTROL. | |
355 */ | |
356 static void | |
357 uc_ovl_map_v1_control (uint32_t format, int sw, | |
358 int hwrev, int extfifo_on, | |
359 uint32_t * control, uint32_t * fifo) | |
360 { | |
361 *control = V1_BOB_ENABLE | uc_ovl_map_format (format); | |
362 | |
363 if (hwrev == 0x10) | |
364 { | |
365 *control |= V1_EXPIRE_NUM_F; | |
366 } | |
367 else | |
368 { | |
369 if (extfifo_on) | |
370 { | |
371 *control |= V1_EXPIRE_NUM_A | V1_FIFO_EXTENDED; | |
372 } | |
373 else | |
374 { | |
375 *control |= V1_EXPIRE_NUM; | |
376 } | |
377 } | |
378 | |
379 if ((format == IMGFMT_YV12) || (format == IMGFMT_I420)) | |
380 { | |
381 /* Minified video will be skewed without this workaround. */ | |
382 if (sw <= 80) /* Fetch count <= 5 */ | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27079
diff
changeset
|
383 { |
22850 | 384 *fifo = UC_MAP_V1_FIFO_CONTROL (16, 0, 0); |
385 } | |
386 else | |
387 { | |
388 if (hwrev == 0x10) | |
389 *fifo = UC_MAP_V1_FIFO_CONTROL (64, 56, 56); | |
390 else | |
391 *fifo = UC_MAP_V1_FIFO_CONTROL (16, 12, 8); | |
392 } | |
393 } | |
394 else | |
395 { | |
396 if (hwrev == 0x10) | |
397 { | |
398 *fifo = UC_MAP_V1_FIFO_CONTROL (64, 56, 56); /* Default rev 0x10 */ | |
399 } | |
400 else | |
401 { | |
402 if (extfifo_on) | |
403 *fifo = UC_MAP_V1_FIFO_CONTROL (48, 40, 40); | |
404 else | |
405 *fifo = UC_MAP_V1_FIFO_CONTROL (32, 29, 16); /* Default */ | |
406 } | |
407 } | |
408 } | |
409 | |
410 /** | |
411 * @brief Setup extended FIFO. | |
412 * | |
413 * @param extfifo_on pointer determining if extended fifo is enable or not. | |
414 * @param dst_w destination width. | |
415 */ | |
416 static void | |
417 uc_ovl_setup_fifo (int *extfifo_on, int dst_w) | |
418 { | |
419 if (dst_w <= 1024) /* Disable extended FIFO */ | |
420 { | |
421 outb (0x16, 0x3c4); | |
422 outb (mclk_save[0], 0x3c5); | |
423 outb (0x17, 0x3c4); | |
424 outb (mclk_save[1], 0x3c5); | |
425 outb (0x18, 0x3c4); | |
426 outb (mclk_save[2], 0x3c5); | |
427 *extfifo_on = 0; | |
428 } | |
429 else /* Enable extended FIFO */ | |
430 { | |
431 outb (0x17, 0x3c4); | |
432 outb (0x2f, 0x3c5); | |
433 outb (0x16, 0x3c4); | |
434 outb ((mclk_save[0] & 0xf0) | 0x14, 0x3c5); | |
435 outb (0x18, 0x3c4); | |
436 outb (0x56, 0x3c5); | |
437 *extfifo_on = 1; | |
438 } | |
439 } | |
440 | |
441 static void | |
442 uc_ovl_vcmd_wait (volatile uint8_t * vio) | |
443 { | |
444 while ((VIDEO_IN (vio, V_COMPOSE_MODE) | |
445 & (V1_COMMAND_FIRE | V3_COMMAND_FIRE))); | |
446 } | |
447 | |
448 /** | |
449 * @brief Probe hardware to find some useable chipset. | |
450 * | |
451 * @param verbose specifies verbose level. | |
452 * @param force specifies force mode : driver should ignore | |
453 * device_id (danger but useful for new devices) | |
454 * | |
455 * @returns 0 if it can handle something in PC. | |
456 * a negative error code otherwise. | |
457 */ | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
458 static int |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
459 unichrome_probe (int verbose, int force) |
22850 | 460 { |
461 pciinfo_t lst[MAX_PCI_DEVICES]; | |
462 unsigned i, num_pci; | |
463 int err; | |
464 err = pci_scan (lst, &num_pci); | |
465 if (err) | |
466 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27079
diff
changeset
|
467 printf ("[unichrome] Error occurred during pci scan: %s\n", |
22850 | 468 strerror (err)); |
469 return err; | |
470 } | |
471 else | |
472 { | |
473 err = ENXIO; | |
474 for (i = 0; i < num_pci; i++) | |
475 { | |
476 if (lst[i].vendor == VENDOR_VIA2) | |
477 { | |
478 int idx; | |
479 const char *dname; | |
480 idx = find_chip (lst[i].device); | |
481 if (idx == -1) | |
482 continue; | |
483 dname = pci_device_name (VENDOR_VIA2, lst[i].device); | |
484 dname = dname ? dname : "Unknown chip"; | |
485 printf ("[unichrome] Found chip: %s\n", dname); | |
486 if ((lst[i].command & PCI_COMMAND_IO) == 0) | |
487 { | |
488 printf ("[unichrome] Device is disabled, ignoring\n"); | |
489 continue; | |
490 } | |
491 uc_cap.device_id = lst[i].device; | |
492 err = 0; | |
493 memcpy (&pci_info, &lst[i], sizeof (pciinfo_t)); | |
494 break; | |
495 } | |
496 } | |
497 } | |
498 | |
499 if (err && verbose) | |
500 printf ("[unichrome] Can't find chip\n"); | |
501 return err; | |
502 } | |
503 | |
504 /** | |
505 * @brief Initializes driver. | |
506 * | |
507 * @returns 0 if ok. | |
508 * a negative error code otherwise. | |
509 */ | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
510 static int |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
511 unichrome_init (void) |
22850 | 512 { |
513 long tmp; | |
514 uc_mem = map_phys_mem (pci_info.base0, VIDEOMEMORY_SIZE); | |
515 enable_app_io (); | |
516 | |
517 outb (0x2f, 0x3c4); | |
518 tmp = inb (0x3c5) << 0x18; | |
519 vio = map_phys_mem (tmp, 0x1000); | |
520 | |
521 outb (0x16, 0x3c4); | |
522 mclk_save[0] = inb (0x3c5); | |
523 outb (0x17, 0x3c4); | |
524 mclk_save[1] = inb (0x3c5); | |
525 outb (0x18, 0x3c4); | |
526 mclk_save[2] = inb (0x3c5); | |
527 | |
528 uc_grkey.ckey.blue = 0x00; | |
529 uc_grkey.ckey.green = 0x00; | |
530 uc_grkey.ckey.red = 0x00; | |
531 | |
532 /* Detect whether we have a CLE266Ax or CLE266Cx */ | |
533 outb (0x4f, 0x3d4); | |
534 tmp = inb (0x3d5); | |
535 outb (0x4f, 0x3d4); | |
536 outb (0x55, 0x3d5); | |
537 outb (0x4f, 0x3d4); | |
538 if (0x55 == inb (0x3d5)) | |
539 { | |
540 /* Only CLE266Cx supports CR4F */ | |
541 hwrev = 0x11; | |
542 } | |
543 else | |
544 { | |
545 /* Otherwise assume to be a CLE266Ax */ | |
546 hwrev = 0x00; | |
547 } | |
548 outb (0x4f, 0x3d4); | |
549 outb (tmp, 0x3d5); | |
550 | |
551 #ifdef DEBUG_LOGFILE | |
552 logfile = fopen ("/tmp/uc_vidix.log", "w"); | |
553 #endif | |
554 return 0; | |
555 } | |
556 | |
557 /** | |
558 * @brief Destroys driver. | |
559 */ | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
560 static void |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
561 unichrome_destroy (void) |
22850 | 562 { |
563 #ifdef DEBUG_LOGFILE | |
564 if (logfile) | |
565 fclose (logfile); | |
566 #endif | |
567 outb (0x16, 0x3c4); | |
568 outb (mclk_save[0], 0x3c5); | |
569 outb (0x17, 0x3c4); | |
570 outb (mclk_save[1], 0x3c5); | |
571 outb (0x18, 0x3c4); | |
572 outb (mclk_save[2], 0x3c5); | |
573 | |
574 disable_app_io (); | |
575 unmap_phys_mem (uc_mem, VIDEOMEMORY_SIZE); | |
576 unmap_phys_mem (vio, 0x1000); | |
577 } | |
578 | |
579 /** | |
580 * @brief Get chipset's hardware capabilities. | |
581 * | |
582 * @param to Pointer to the vidix_capability_t structure to be filled. | |
583 * | |
584 * @returns 0. | |
585 */ | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
586 static int |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
587 unichrome_get_caps (vidix_capability_t * to) |
22850 | 588 { |
589 memcpy (to, &uc_cap, sizeof (vidix_capability_t)); | |
590 return 0; | |
591 } | |
592 | |
593 /** | |
594 * @brief Report if the video FourCC is supported by hardware. | |
595 * | |
596 * @param fourcc input image format. | |
597 * | |
598 * @returns 1 if the fourcc is supported. | |
599 * 0 otherwise. | |
600 */ | |
601 static int | |
602 is_supported_fourcc (uint32_t fourcc) | |
603 { | |
604 switch (fourcc) | |
605 { | |
606 case IMGFMT_YV12: | |
607 case IMGFMT_I420: | |
608 case IMGFMT_UYVY: | |
609 case IMGFMT_YVYU: | |
610 case IMGFMT_YUY2: | |
611 case IMGFMT_BGR15: | |
612 case IMGFMT_BGR16: | |
613 case IMGFMT_BGR32: | |
614 return 1; | |
615 default: | |
616 return 0; | |
617 } | |
618 } | |
619 | |
620 /** | |
621 * @brief Try to configure video memory for given fourcc. | |
622 * | |
623 * @param to Pointer to the vidix_fourcc_t structure to be filled. | |
624 * | |
625 * @returns 0 if ok. | |
626 * errno otherwise. | |
627 */ | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
628 static int |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
629 unichrome_query_fourcc (vidix_fourcc_t * to) |
22850 | 630 { |
631 if (is_supported_fourcc (to->fourcc)) | |
632 { | |
23060 | 633 to->depth = VID_DEPTH_ALL; |
22850 | 634 to->flags = VID_CAP_EXPAND | VID_CAP_SHRINK | VID_CAP_COLORKEY; |
635 return 0; | |
636 } | |
637 return ENOSYS; | |
638 } | |
639 | |
640 /** | |
641 * @brief Get the GrKeys | |
642 * | |
643 * @param grkey Pointer to the vidix_grkey_t structure to be filled by driver. | |
644 * | |
645 * @return 0. | |
646 */ | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
647 static int |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
648 unichrome_get_gkey (vidix_grkey_t * grkey) |
22850 | 649 { |
650 memcpy (grkey, &uc_grkey, sizeof (vidix_grkey_t)); | |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
651 return 0; |
22850 | 652 } |
653 | |
654 /** | |
655 * @brief Set the GrKeys | |
656 * | |
657 * @param grkey Colorkey to be set. | |
658 * | |
659 * @return 0. | |
660 */ | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
661 static int |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
662 unichrome_set_gkey (const vidix_grkey_t * grkey) |
22850 | 663 { |
664 unsigned long dwCompose = VIDEO_IN (vio, V_COMPOSE_MODE) & ~0x0f; | |
665 memcpy (&uc_grkey, grkey, sizeof (vidix_grkey_t)); | |
666 if (uc_grkey.ckey.op != CKEY_FALSE) | |
667 { | |
668 /* Set colorkey (how do I detect BPP in hardware ??) */ | |
669 unsigned long ckey; | |
670 if (1) /* Assume 16-bit graphics */ | |
671 { | |
672 ckey = (grkey->ckey.blue & 0x1f) | |
673 | ((grkey->ckey.green & 0x3f) << 5) | |
674 | ((grkey->ckey.red & 0x1f) << 11); | |
675 } | |
676 else | |
677 { | |
678 ckey = (grkey->ckey.blue) | |
679 | (grkey->ckey.green << 8) | (grkey->ckey.red << 16); | |
680 } | |
681 VIDEO_OUT (vio, V_COLOR_KEY, ckey); | |
682 dwCompose |= SELECT_VIDEO_IF_COLOR_KEY; | |
683 } | |
684 | |
685 /* Execute the changes */ | |
686 VIDEO_OUT (vio, V_COMPOSE_MODE, dwCompose | V1_COMMAND_FIRE); | |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26719
diff
changeset
|
687 return 0; |
22850 | 688 } |
689 | |
690 /** | |
691 * @brief Unichrome driver equalizer capabilities. | |
692 */ | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
693 static vidix_video_eq_t equal = { |
22850 | 694 VEQ_CAP_BRIGHTNESS | VEQ_CAP_SATURATION | VEQ_CAP_HUE, |
695 300, 100, 0, 0, 0, 0, 0, 0 | |
696 }; | |
697 | |
698 | |
699 /** | |
700 * @brief Get the equalizer capabilities. | |
701 * | |
702 * @param eq Pointer to the vidix_video_eq_t structure to be filled by driver. | |
703 * | |
704 * @return 0. | |
705 */ | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
706 static int |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
707 unichrome_get_eq (vidix_video_eq_t * eq) |
22850 | 708 { |
709 memcpy (eq, &equal, sizeof (vidix_video_eq_t)); | |
710 return 0; | |
711 } | |
712 | |
713 /** | |
714 * @brief Set the equalizer capabilities for color correction | |
715 * | |
716 * @param eq equalizer capabilities to be set. | |
717 * | |
718 * @return 0. | |
719 */ | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
720 static int |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
721 unichrome_set_eq (const vidix_video_eq_t * eq) |
22850 | 722 { |
723 return 0; | |
724 } | |
725 | |
726 /** | |
727 * @brief Y, U, V offsets. | |
728 */ | |
729 static int YOffs, UOffs, VOffs; | |
730 | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
731 static int unichrome_frame_select (unsigned int frame); |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
732 |
22850 | 733 /** |
734 * @brief Configure driver for playback. Driver should prepare BES. | |
735 * | |
736 * @param info configuration description for playback. | |
737 * | |
738 * @returns 0 in case of success. | |
739 * -1 otherwise. | |
740 */ | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
741 static int |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
742 unichrome_config_playback (vidix_playback_t * info) |
22850 | 743 { |
744 int src_w, drw_w; | |
745 int src_h, drw_h; | |
22866 | 746 long base0, pitch = 0; |
747 int uv_size = 0, swap_uv; | |
22850 | 748 unsigned int i; |
749 int extfifo_on; | |
750 | |
751 /* Overlay register settings */ | |
752 uint32_t win_start, win_end; | |
753 uint32_t zoom, mini; | |
754 uint32_t dcount, falign, qwfetch; | |
755 uint32_t v_ctrl, fifo_ctrl; | |
756 | |
757 if (!is_supported_fourcc (info->fourcc)) | |
758 return -1; | |
759 | |
760 src_w = info->src.w; | |
761 src_h = info->src.h; | |
762 | |
763 drw_w = info->dest.w; | |
764 drw_h = info->dest.h; | |
765 | |
766 /* Setup FIFO */ | |
767 uc_ovl_setup_fifo (&extfifo_on, src_w); | |
768 | |
769 /* Get image format, FIFO size, etc. */ | |
770 uc_ovl_map_v1_control (info->fourcc, src_w, hwrev, extfifo_on, | |
771 &v_ctrl, &fifo_ctrl); | |
772 | |
773 /* Setup layer window */ | |
774 win_start = (info->dest.x << 16) | info->dest.y; | |
775 win_end = ((info->dest.x + drw_w - 1) << 16) | (info->dest.y + drw_h - 1); | |
776 | |
777 /* Get scaling and data-fetch parameters */ | |
778 zoom = 0; | |
779 mini = 0; | |
780 uc_ovl_map_vzoom (src_h, drw_h, &zoom, &mini); | |
22866 | 781 uc_ovl_map_hzoom (src_w, drw_w, &zoom, &mini, (int *) &falign, (int *) &dcount); |
22850 | 782 qwfetch = uc_ovl_map_qwfetch (info->fourcc, src_w); |
783 | |
784 /* Calculate buffer sizes */ | |
785 swap_uv = 0; | |
786 switch (info->fourcc) | |
787 { | |
788 case IMGFMT_YV12: | |
789 swap_uv = 1; | |
36641 | 790 /* Fallthrough, same as the following otherwise */ |
22850 | 791 case IMGFMT_I420: |
792 case IMGFMT_UYVY: | |
793 case IMGFMT_YVYU: | |
794 pitch = ALIGN_TO (src_w, 32); | |
795 uv_size = (pitch >> 1) * (src_h >> 1); | |
796 break; | |
797 | |
798 case IMGFMT_YUY2: | |
799 case IMGFMT_BGR15: | |
800 case IMGFMT_BGR16: | |
801 pitch = ALIGN_TO (src_w << 1, 32); | |
802 uv_size = 0; | |
803 break; | |
804 | |
805 case IMGFMT_BGR32: | |
806 pitch = ALIGN_TO (src_w << 2, 32); | |
807 uv_size = 0; | |
808 break; | |
809 } | |
810 if ((src_w > 4096) || (src_h > 4096) || | |
811 (src_w < 32) || (src_h < 1) || (pitch > 0x1fff)) | |
812 { | |
813 printf ("[unichrome] Layer size out of bounds\n"); | |
814 } | |
815 | |
816 /* Calculate offsets */ | |
817 info->offset.y = 0; | |
818 info->offset.v = info->offset.y + pitch * src_h; | |
819 info->offset.u = info->offset.v + uv_size; | |
820 info->frame_size = info->offset.u + uv_size; | |
821 YOffs = info->offset.y; | |
822 UOffs = (swap_uv ? info->offset.v : info->offset.u); | |
823 VOffs = (swap_uv ? info->offset.u : info->offset.v); | |
824 | |
825 /* Assume we have 2 MB to play with */ | |
826 info->num_frames = FRAMEBUFFER_SIZE / info->frame_size; | |
827 if (info->num_frames > VID_PLAY_MAXFRAMES) | |
828 info->num_frames = VID_PLAY_MAXFRAMES; | |
829 | |
830 /* Start at 6 MB. Let's hope it's not in use. */ | |
831 base0 = FRAMEBUFFER_START; | |
832 info->dga_addr = uc_mem + base0; | |
833 | |
834 info->dest.pitch.y = 32; | |
835 info->dest.pitch.u = 32; | |
836 info->dest.pitch.v = 32; | |
837 | |
838 for (i = 0; i < info->num_frames; i++) | |
839 { | |
840 info->offsets[i] = info->frame_size * i; | |
841 frames[i] = base0 + info->offsets[i]; | |
842 } | |
843 | |
844 /* Write to the hardware */ | |
845 uc_ovl_vcmd_wait (vio); | |
846 | |
847 /* Configure diy_pitchlay parameters now */ | |
848 if (v_ctrl & V1_COLORSPACE_SIGN) | |
849 { | |
850 if (hwrev >= 0x10) | |
851 { | |
852 VIDEO_OUT (vio, V1_ColorSpaceReg_2, ColorSpaceValue_2_3123C0); | |
853 VIDEO_OUT (vio, V1_ColorSpaceReg_1, ColorSpaceValue_1_3123C0); | |
854 } | |
855 else | |
856 { | |
857 VIDEO_OUT (vio, V1_ColorSpaceReg_2, ColorSpaceValue_2); | |
858 VIDEO_OUT (vio, V1_ColorSpaceReg_1, ColorSpaceValue_1); | |
859 } | |
860 } | |
861 | |
862 VIDEO_OUT (vio, V1_CONTROL, v_ctrl); | |
863 VIDEO_OUT (vio, V_FIFO_CONTROL, fifo_ctrl); | |
864 | |
865 VIDEO_OUT (vio, V1_WIN_START_Y, win_start); | |
866 VIDEO_OUT (vio, V1_WIN_END_Y, win_end); | |
867 | |
868 VIDEO_OUT (vio, V1_SOURCE_HEIGHT, (src_h << 16) | dcount); | |
869 | |
870 VIDEO_OUT (vio, V12_QWORD_PER_LINE, qwfetch << 20); | |
871 VIDEO_OUT (vio, V1_STRIDE, pitch | ((pitch >> 1) << 16)); | |
872 | |
873 VIDEO_OUT (vio, V1_MINI_CONTROL, mini); | |
874 VIDEO_OUT (vio, V1_ZOOM_CONTROL, zoom); | |
875 | |
876 /* Configure buffer address and execute the changes now! */ | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
877 unichrome_frame_select (0); |
22850 | 878 |
879 return 0; | |
880 } | |
881 | |
882 /** | |
883 * @brief Set playback on : driver should activate BES on this call. | |
884 * | |
885 * @return 0. | |
886 */ | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
887 static int |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
888 unichrome_playback_on (void) |
22850 | 889 { |
890 LOGWRITE ("Enable overlay\n"); | |
891 | |
892 /* Turn on overlay */ | |
893 VIDEO_OUT (vio, V1_CONTROL, VIDEO_IN (vio, V1_CONTROL) | V1_ENABLE); | |
894 | |
895 /* Execute the changes */ | |
896 VIDEO_OUT (vio, V_COMPOSE_MODE, | |
897 VIDEO_IN (vio, V_COMPOSE_MODE) | V1_COMMAND_FIRE); | |
898 | |
899 return 0; | |
900 } | |
901 | |
902 /** | |
903 * @brief Set playback off : driver should deactivate BES on this call. | |
904 * | |
905 * @return 0. | |
906 */ | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
907 static int |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
908 unichrome_playback_off (void) |
22850 | 909 { |
910 LOGWRITE ("Disable overlay\n"); | |
911 | |
912 uc_ovl_vcmd_wait (vio); | |
913 | |
914 /* Restore FIFO */ | |
915 VIDEO_OUT (vio, V_FIFO_CONTROL, UC_MAP_V1_FIFO_CONTROL (16, 12, 8)); | |
916 | |
917 /* Turn off overlay */ | |
918 VIDEO_OUT (vio, V1_CONTROL, VIDEO_IN (vio, V1_CONTROL) & ~V1_ENABLE); | |
919 | |
920 /* Execute the changes */ | |
921 VIDEO_OUT (vio, V_COMPOSE_MODE, | |
922 VIDEO_IN (vio, V_COMPOSE_MODE) | V1_COMMAND_FIRE); | |
923 | |
924 return 0; | |
925 } | |
926 | |
927 /** | |
928 * @brief Driver should prepare and activate corresponded frame. | |
929 * | |
930 * @param frame the frame index. | |
931 * | |
932 * @return 0. | |
933 * | |
934 * @note This function is used only for double and triple buffering | |
935 * and never used for single buffering playback. | |
936 */ | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
937 static int |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
938 unichrome_frame_select (unsigned int frame) |
22850 | 939 { |
940 LOGWRITE ("Frame select\n"); | |
941 | |
942 uc_ovl_vcmd_wait (vio); | |
943 | |
944 /* Configure buffer address */ | |
945 VIDEO_OUT (vio, V1_STARTADDR_Y0, frames[frame] + YOffs); | |
946 VIDEO_OUT (vio, V1_STARTADDR_CB0, frames[frame] + UOffs); | |
947 VIDEO_OUT (vio, V1_STARTADDR_CR0, frames[frame] + VOffs); | |
948 | |
949 /* Execute the changes */ | |
950 VIDEO_OUT (vio, V_COMPOSE_MODE, | |
951 VIDEO_IN (vio, V_COMPOSE_MODE) | V1_COMMAND_FIRE); | |
952 | |
953 return 0; | |
954 } | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
955 |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
956 VDXDriver unichrome_drv = { |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
957 "unichrome", |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
958 NULL, |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
959 .probe = unichrome_probe, |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
960 .get_caps = unichrome_get_caps, |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
961 .query_fourcc = unichrome_query_fourcc, |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
962 .init = unichrome_init, |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
963 .destroy = unichrome_destroy, |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
964 .config_playback = unichrome_config_playback, |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
965 .playback_on = unichrome_playback_on, |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
966 .playback_off = unichrome_playback_off, |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
967 .frame_sel = unichrome_frame_select, |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
968 .get_eq = unichrome_get_eq, |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
969 .set_eq = unichrome_set_eq, |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
970 .get_gkey = unichrome_get_gkey, |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
971 .set_gkey = unichrome_set_gkey, |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
972 }; |