annotate vidix/cyberblade_vid.c @ 25317:7f3cb5408f28

Fixed VIDIX color bug that was introduced when Radeon VIDIX driver was synchronized with vidix.sf.net. The red color was saturating. Corrected value fixes the issue and restore the color to the level it used to have before synchronization. Meaning of the value remains unknow but was retrieved from register's value of a Radeon 9000 card, so it may need further testing. Patch by Guillaume Lecerf (foxcore at gmail dot com)
author ben
date Mon, 10 Dec 2007 19:27:46 +0000
parents acfe034e5386
children 0d255d03016f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
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 Cyberblade/i1 chipsets.
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
3 * Copyright (C) 2002 Alastair M. Robinson
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
4 * http://www.blackfiveservices.co.uk/EPIAVidix.shtml
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
5 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
6 * 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
7 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
8 * 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
9 * 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
10 * 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
11 * (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
12 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
13 * 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
14 * 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
15 * 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
16 * 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
17 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
18 * You should have received a copy of the GNU General Public License
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
19 * along with MPlayer; if not, write to the Free Software
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
21 *
23734
acfe034e5386 ISO8859-1 --> UTF-8
diego
parents: 23167
diff changeset
22 * Based on Permedia 3 driver by Måns Rullgård
23046
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
23 * Thanks to Gilles Frattini for bugfixes.
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
24 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
25 * Changes:
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
26 * 18/01/03
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
27 * MMIO is no longer used, sidestepping cache issues on EPIA-800
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
28 * TV-Out modes are now better supported - this should be the end
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
29 * of the magenta stripes :)
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
30 * Brightness/Contrast controls disabled for the time being - they were
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
31 * seriously degrading picture quality, especially with TV-Out.
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
32 *
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
33 * To Do:
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
34 * Implement Hue/Saturation controls
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
35 * Support / Test multiple frames
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
36 * Test colour-key code more extensively
82216ef041e0 updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents: 22905
diff changeset
37 */
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
38
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
39 #include <errno.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
40 #include <stdio.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
41 #include <stdlib.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
42 #include <string.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
43 #include <inttypes.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
44 #include <unistd.h>
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
45
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
46 #include "vidix.h"
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
47 #include "vidixlib.h"
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
48 #include "fourcc.h"
22901
a7605669b114 renamed libdha.[hc] to dha.[hc]
ben
parents: 22900
diff changeset
49 #include "dha.h"
22900
a9e111b88c4a merged libdha and libvidix, moved all files from libdha to vidix directory
ben
parents: 22871
diff changeset
50 #include "pci_ids.h"
a9e111b88c4a merged libdha and libvidix, moved all files from libdha to vidix directory
ben
parents: 22871
diff changeset
51 #include "pci_names.h"
22905
f34e5d778267 consistent include paths for config.h et al.
diego
parents: 22901
diff changeset
52 #include "config.h"
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
53
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
54 #include "cyberblade_regs.h"
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
55
23050
49dc254e7cc7 declare variables as static
ben
parents: 23049
diff changeset
56 static pciinfo_t pci_info;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
57
23050
49dc254e7cc7 declare variables as static
ben
parents: 23049
diff changeset
58 static char save_colourkey[6];
49dc254e7cc7 declare variables as static
ben
parents: 23049
diff changeset
59 static char *cyberblade_mem;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
60
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
61 #ifdef DEBUG_LOGFILE
23050
49dc254e7cc7 declare variables as static
ben
parents: 23049
diff changeset
62 static FILE *logfile=0;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
63 #define LOGWRITE(x) {if(logfile) fprintf(logfile,x);}
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
64 #else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
65 #define LOGWRITE(x)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
66 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
67
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
68 /* Helper functions for reading registers. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
69
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
70 static void CROUTW(int reg,int val)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
71 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
72 CROUTB(reg,val&255);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
73 CROUTB(reg+1,(val>>8)&255);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
74 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
75
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
76 static void SROUTW(int reg,int val)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
77 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
78 SROUTB(reg,val&255);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
79 SROUTB(reg+1,(val>>8)&255);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
80 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
81
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
82 static vidix_capability_t cyberblade_cap =
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
83 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
84 "Trident CyberBlade i1 driver",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
85 "Alastair M. Robinson <blackfive@fakenhamweb.co.uk>",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
86 TYPE_OUTPUT,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
87 { 0, 0, 0, 0 },
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
88 1024,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
89 1024,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
90 4,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
91 4,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
92 -1,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
93 FLAG_UPSCALER|FLAG_DOWNSCALER,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
94 VENDOR_TRIDENT,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
95 -1,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
96 { 0, 0, 0, 0 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
97 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
98
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
99 static unsigned short cyberblade_card_ids[] =
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
100 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
101 DEVICE_TRIDENT_CYBERBLADE_I7,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
102 DEVICE_TRIDENT_CYBERBLADE_I7D,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
103 DEVICE_TRIDENT_CYBERBLADE_I1,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
104 DEVICE_TRIDENT_CYBERBLADE_I12,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
105 DEVICE_TRIDENT_CYBERBLADE_I13,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
106 DEVICE_TRIDENT_CYBERBLADE_XPAI1
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
107 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
108
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
109
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
110 static int find_chip(unsigned chip_id)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
111 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
112 unsigned i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
113 for(i = 0;i < sizeof(cyberblade_card_ids)/sizeof(unsigned short);i++)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
114 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
115 if(chip_id == cyberblade_card_ids[i]) return i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
116 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
117 return -1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
118 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
119
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
120 static int cyberblade_probe(int verbose, int force)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
121 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
122 pciinfo_t lst[MAX_PCI_DEVICES];
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
123 unsigned i,num_pci;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
124 int err;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
125 err = pci_scan(lst,&num_pci);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
126 if(err)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
127 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
128 printf("[cyberblade] Error occurred during pci scan: %s\n",strerror(err));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
129 return err;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
130 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
131 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
132 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
133 err = ENXIO;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
134 for(i=0; i < num_pci; i++)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
135 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
136 if(lst[i].vendor == VENDOR_TRIDENT)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
137 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
138 int idx;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
139 const char *dname;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
140 idx = find_chip(lst[i].device);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
141 if(idx == -1)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
142 continue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
143 dname = pci_device_name(VENDOR_TRIDENT, lst[i].device);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
144 dname = dname ? dname : "Unknown chip";
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
145 printf("[cyberblade] Found chip: %s\n", dname);
23167
2ab3eac7f6da synced with upstream vidix, prevented some drivers to work on some configs/archs
ben
parents: 23052
diff changeset
146 #if 0
2ab3eac7f6da synced with upstream vidix, prevented some drivers to work on some configs/archs
ben
parents: 23052
diff changeset
147 if ((lst[i].command & PCI_COMMAND_IO) == 0)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
148 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
149 printf("[cyberblade] Device is disabled, ignoring\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
150 continue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
151 }
23167
2ab3eac7f6da synced with upstream vidix, prevented some drivers to work on some configs/archs
ben
parents: 23052
diff changeset
152 #endif
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
153 cyberblade_cap.device_id = lst[i].device;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
154 err = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
155 memcpy(&pci_info, &lst[i], sizeof(pciinfo_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
156 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
157 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
158 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
159 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
160
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
161 if(err && verbose) printf("[cyberblade] Can't find chip\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
162 return err;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
163 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
164
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
165
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
166 static int cyberblade_init(void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
167 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
168 cyberblade_mem = map_phys_mem(pci_info.base0, 0x800000);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
169 enable_app_io();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
170 save_colourkey[0]=SRINB(0x50);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
171 save_colourkey[1]=SRINB(0x51);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
172 save_colourkey[2]=SRINB(0x52);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
173 save_colourkey[3]=SRINB(0x54);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
174 save_colourkey[4]=SRINB(0x55);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
175 save_colourkey[5]=SRINB(0x56);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
176 #ifdef DEBUG_LOGFILE
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
177 logfile=fopen("/tmp/cyberblade_vidix.log","w");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
178 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
179 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
180 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
181
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
182 static void cyberblade_destroy(void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
183 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
184 int protect;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
185 #ifdef DEBUG_LOGFILE
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
186 if(logfile)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
187 fclose(logfile);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
188 #endif
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
189 protect=SRINB(0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
190 SROUTB(0x11, 0x92);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
191 CROUTB(0x8E, 0xc4); /* Disable overlay */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
192 SROUTB(0x50,save_colourkey[0]);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
193 SROUTB(0x51,save_colourkey[1]);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
194 SROUTB(0x52,save_colourkey[2]);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
195 SROUTB(0x54,save_colourkey[3]);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
196 SROUTB(0x55,save_colourkey[4]);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
197 SROUTB(0x56,save_colourkey[5]);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
198 SROUTB(0x11, protect);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
199 disable_app_io();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
200 unmap_phys_mem(cyberblade_mem, 0x800000);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
201 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
202
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
203
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
204 static int cyberblade_get_caps(vidix_capability_t *to)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
205 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
206 memcpy(to, &cyberblade_cap, sizeof(vidix_capability_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
207 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
208 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
209
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
210
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
211 static int is_supported_fourcc(uint32_t fourcc)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
212 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
213 switch(fourcc)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
214 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
215 case IMGFMT_YUY2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
216 case IMGFMT_YV12:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
217 case IMGFMT_I420:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
218 case IMGFMT_YVU9:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
219 case IMGFMT_BGR16:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
220 return 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
221 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
222 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
223 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
224 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
225
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
226 static int cyberblade_query_fourcc(vidix_fourcc_t *to)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
227 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
228 if(is_supported_fourcc(to->fourcc))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
229 {
23049
deefad53512a simplified depth definition
ben
parents: 23046
diff changeset
230 to->depth = VID_DEPTH_ALL;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
231 to->flags = VID_CAP_EXPAND | VID_CAP_SHRINK | VID_CAP_COLORKEY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
232 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
233 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
234 to->depth = to->flags = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
235 return ENOSYS;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
236 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
237
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
238
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
239 static int frames[VID_PLAY_MAXFRAMES];
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
240
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
241 static vidix_grkey_t cyberblade_grkey;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
242
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
243 static int cyberblade_get_gkeys(vidix_grkey_t *grkey)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
244 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
245 memcpy(grkey, &cyberblade_grkey, sizeof(vidix_grkey_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
246 return(0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
247 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
248
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
249 static int cyberblade_set_gkeys(const vidix_grkey_t *grkey)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
250 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
251 int pixfmt=CRINB(0x38);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
252 int protect;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
253 memcpy(&cyberblade_grkey, grkey, sizeof(vidix_grkey_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
254
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
255 protect=SRINB(0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
256 SROUTB(0x11, 0x92);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
257
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
258 if(pixfmt&0x28) /* 32 or 24 bpp */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
259 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
260 SROUTB(0x50, cyberblade_grkey.ckey.blue); /* Colour Key */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
261 SROUTB(0x51, cyberblade_grkey.ckey.green); /* Colour Key */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
262 SROUTB(0x52, cyberblade_grkey.ckey.red); /* Colour Key */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
263 SROUTB(0x54, 0xff); /* Colour Key Mask */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
264 SROUTB(0x55, 0xff); /* Colour Key Mask */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
265 SROUTB(0x56, 0xff); /* Colour Key Mask */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
266 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
267 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
268 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
269 int tmp=((cyberblade_grkey.ckey.blue & 0xF8)>>3)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
270 | ((cyberblade_grkey.ckey.green & 0xfc)<<3)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
271 | ((cyberblade_grkey.ckey.red & 0xf8)<<8);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
272 SROUTB(0x50, tmp&0xff); /* Colour Key */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
273 SROUTB(0x51, (tmp>>8)&0xff); /* Colour Key */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
274 SROUTB(0x52, 0); /* Colour Key */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
275 SROUTB(0x54, 0xff); /* Colour Key Mask */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
276 SROUTB(0x55, 0xff); /* Colour Key Mask */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
277 SROUTB(0x56, 0x00); /* Colour Key Mask */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
278 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
279 SROUTB(0x11,protect);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
280 return(0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
281 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
282
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
283
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
284 static vidix_video_eq_t equal =
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
285 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
286 VEQ_CAP_BRIGHTNESS | VEQ_CAP_SATURATION | VEQ_CAP_HUE,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
287 300, 100, 0, 0, 0, 0, 0, 0
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
288 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
289
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
290 static int cyberblade_get_eq( vidix_video_eq_t * eq)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
291 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
292 memcpy(eq,&equal,sizeof(vidix_video_eq_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
293 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
294 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
295
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
296 static int cyberblade_set_eq( const vidix_video_eq_t * eq)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
297 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
298 int br,sat,cr,protect;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
299 if(eq->cap & VEQ_CAP_BRIGHTNESS) equal.brightness = eq->brightness;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
300 if(eq->cap & VEQ_CAP_CONTRAST) equal.contrast = eq->contrast;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
301 if(eq->cap & VEQ_CAP_SATURATION) equal.saturation = eq->saturation;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
302 if(eq->cap & VEQ_CAP_HUE) equal.hue = eq->hue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
303 if(eq->cap & VEQ_CAP_RGB_INTENSITY)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
304 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
305 equal.red_intensity = eq->red_intensity;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
306 equal.green_intensity = eq->green_intensity;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
307 equal.blue_intensity = eq->blue_intensity;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
308 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
309 equal.flags = eq->flags;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
310
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
311 cr = (equal.contrast) * 31 / 2000; cr+=16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
312 if (cr < 0) cr = 0; if(cr > 7) cr = 7;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
313 cr=cr<<4 | cr;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
314
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
315 br = (equal.brightness+1000) * 63 / 2000;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
316 if (br < 0) br = 0; if(br > 63) br = 63;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
317 if(br>32) br-=32; else br+=32;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
318
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
319 sat = (equal.saturation + 1000) * 16 / 2000;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
320 if (sat < 0) sat = 0; if(sat > 31) sat = 31;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
321
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
322 protect=SRINB(0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
323 SROUTB(0x11, 0x92);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
324
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
325 SROUTB(0xBC,cr);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
326 SROUTW(0xB0,(br<<10)|4);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
327
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
328 SROUTB(0x11, protect);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
329
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
330 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
331 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
332
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
333
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
334 static int YOffs,UOffs,VOffs;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
335
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
336 static int cyberblade_config_playback(vidix_playback_t *info)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
337 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
338 int src_w, drw_w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
339 int src_h, drw_h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
340 int hscale,vscale;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
341 long base0;
22871
9a8c258f3f29 killed warnings in cyberblade driver
ben
parents: 22858
diff changeset
342 int y_pitch = 0, uv_pitch = 0;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
343 int protect=0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
344 int layout=0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
345 unsigned int i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
346
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
347 if(!is_supported_fourcc(info->fourcc))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
348 return -1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
349
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
350 src_w = info->src.w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
351 src_h = info->src.h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
352
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
353 drw_w = info->dest.w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
354 drw_h = info->dest.h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
355
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
356 switch(info->fourcc)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
357 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
358 case IMGFMT_YUY2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
359 case IMGFMT_BGR16:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
360 y_pitch = (src_w*2 + 15) & ~15;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
361 uv_pitch = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
362 YOffs=VOffs=UOffs=info->offset.y = info->offset.v = info->offset.u = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
363 info->frame_size = y_pitch*src_h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
364 layout=0x0; /* packed */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
365 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
366 case IMGFMT_YV12:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
367 case IMGFMT_I420:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
368 y_pitch = (src_w+15) & ~15;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
369 uv_pitch = ((src_w/2)+7) & ~7;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
370 YOffs=info->offset.y = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
371 VOffs=info->offset.v = y_pitch*src_h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
372 UOffs=info->offset.u = info->offset.v+(uv_pitch)*(src_h/2);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
373 info->frame_size = y_pitch*src_h + 2*uv_pitch*(src_h/2);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
374 layout=0x1; /* planar, 4:1:1 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
375 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
376 case IMGFMT_YVU9:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
377 y_pitch = (src_w+15) & ~15;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
378 uv_pitch = ((src_w/4)+3) & ~3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
379 YOffs=info->offset.y = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
380 VOffs=info->offset.v = y_pitch*src_h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
381 UOffs=info->offset.u = info->offset.v+(uv_pitch)*(src_h/4);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
382 info->frame_size = y_pitch*src_h + 2*uv_pitch*(src_h/4);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
383 layout=0x51; /* planar, 16:1:1 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
384 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
385 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
386
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
387 /* Assume we have 2 MB to play with */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
388 info->num_frames = 0x200000 / info->frame_size;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
389 if(info->num_frames > VID_PLAY_MAXFRAMES)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
390 info->num_frames = VID_PLAY_MAXFRAMES;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
391
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
392 /* Start at 6 MB. Let's hope it's not in use. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
393 base0 = 0x600000;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
394 info->dga_addr = cyberblade_mem + base0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
395
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
396 info->dest.pitch.y = 16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
397 info->dest.pitch.u = 16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
398 info->dest.pitch.v = 16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
399
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
400 for(i = 0; i < info->num_frames; i++)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
401 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
402 info->offsets[i] = info->frame_size * i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
403 frames[i] = base0+info->offsets[i];
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
404 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
405
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
406 OUTPORT8(0x3d4,0x39);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
407 OUTPORT8(0x3d5,INPORT(0x3d5)|1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
408
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
409 SRINB(0x0b); /* Select new mode */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
410
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
411 /* Unprotect hardware registers... */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
412 protect=SRINB(0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
413 SROUTB(0x11, 0x92);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
414
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
415 SROUTB(0x57, 0xc0); /* Playback key function */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
416 SROUTB(0x21, 0x34); /* Signature control */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
417 SROUTB(0x37, 0x30); /* Video key mode */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
418
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
419 cyberblade_set_gkeys(&cyberblade_grkey);
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
420
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
421 /* compute_scale_factor(&src_w, &drw_w, &shrink, &zoom); */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
422 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
423 int HTotal,VTotal,HSync,VSync,Overflow,HDisp,VDisp;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
424 int HWinStart,VWinStart;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
425 int tx1,ty1,tx2,ty2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
426
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
427 HTotal=CRINB(0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
428 HSync=CRINB(0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
429 VTotal=CRINB(0x06);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
430 VSync=CRINB(0x10);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
431 Overflow=CRINB(0x07);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
432 HTotal <<=3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
433 HSync <<=3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
434 VTotal |= (Overflow & 1) <<8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
435 VTotal |= (Overflow & 0x20) <<4;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
436 VTotal +=4;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
437 VSync |= (Overflow & 4) <<6;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
438 VSync |= (Overflow & 0x80) <<2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
439
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
440 if(CRINB(0xd1)&0x80)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
441 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
442 int TVHTotal,TVVTotal,TVHSyncStart,TVVSyncStart,TVOverflow;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
443 LOGWRITE("[cyberblade] Using TV-CRTC\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
444
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
445 HDisp=(1+CRINB(0x01))*8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
446 VDisp=1+CRINB(0x12);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
447 Overflow=CRINB(0x07);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
448 VDisp |= (Overflow & 2) <<7;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
449 VDisp |= (Overflow & 0x40) << 3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
450
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
451 TVHTotal=CRINB(0xe0)*8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
452 TVVTotal=CRINB(0xe6);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
453 TVOverflow=CRINB(0xe7);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
454 if(TVOverflow&0x20) TVVTotal|=512;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
455 if(TVOverflow&0x01) TVVTotal|=256;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
456 TVHTotal+=40; TVVTotal+=2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
457
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
458 TVHSyncStart=CRINB(0xe4)*8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
459 TVVSyncStart=CRINB(0xf0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
460 if(TVOverflow&0x80) TVVSyncStart|=512;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
461 if(TVOverflow&0x04) TVVSyncStart|=256;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
462
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
463 HWinStart=(TVHTotal-HDisp)&15;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
464 HWinStart|=(HTotal-HDisp)&15;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
465 HWinStart+=(TVHTotal-TVHSyncStart)-49;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
466 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
467 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
468 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
469 LOGWRITE("[cyberblade] Using Standard CRTC\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
470 HWinStart=(HTotal-HSync)+15;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
471 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
472 VWinStart=(VTotal-VSync)-8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
473
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
474 printf("[cyberblade] HTotal: 0x%x, HSStart: 0x%x\n",HTotal,HSync);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
475 printf(" VTotal: 0x%x, VStart: 0x%x\n",VTotal,VSync);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
476 tx1=HWinStart+info->dest.x;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
477 ty1=VWinStart+info->dest.y;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
478 tx2=tx1+info->dest.w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
479 ty2=ty1+info->dest.h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
480
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
481 CROUTW(0x86,tx1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
482 CROUTW(0x88,ty1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
483 CROUTW(0x8a,tx2);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
484 CROUTW(0x8c,ty2+3);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
485 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
486
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
487 if(src_w==drw_w)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
488 hscale=0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
489 else if(src_w<drw_w)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
490 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
491 hscale=((src_w<<10)/(drw_w-2)) & 0x1fff;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
492 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
493 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
494 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
495 hscale=0x8000 | ((((src_w/drw_w)-1)&7)<<10) | (((drw_w<<10)/src_w) & 0x3ff);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
496 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
497
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
498 vscale=(src_h<<10)/(drw_h);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
499 if(drw_h<src_h)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
500 vscale=0x8000|((drw_h<<10)/(src_h));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
501
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
502 /* Write scale factors to hardware */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
503
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
504 CROUTW(0x80,hscale); /* Horizontal Scale */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
505 CROUTW(0x82,vscale); /* Vertical Scale */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
506
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
507 /* Now set the start address and data layout */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
508 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
509 int lb = (y_pitch+2) >> 2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
510 CROUTB(0x95, ((lb & 0x100)>>1) | 0x08 ); /* Linebuffer level bit 8 & threshold */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
511 CROUTB(0x96, (lb & 0xFF)); /* Linebuffer level */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
512
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
513 CROUTB(0x97, 0x00); /* VDE Flags */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
514 CROUTB(0xBA, 0x00); /* Chroma key */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
515 CROUTB(0xBB, 0x00); /* Chroma key */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
516 CROUTB(0xBC, 0xFF); /* Chroma key */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
517 CROUTB(0xBD, 0xFF); /* Chroma key */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
518 CROUTB(0xBE, 0x04); /* Capture control */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
519
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
520 if(src_w > 384)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
521 layout|=4; /* 2x line buffers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
522 SROUTB(0x97, layout);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
523
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
524 CROUTW(0x90,y_pitch); /* Y Bytes per row */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
525 SROUTW(0x9A,uv_pitch); /* UV Bytes per row */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
526
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
527 switch(info->fourcc)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
528 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
529 case IMGFMT_BGR16:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
530 CROUTB(0x8F, 0x24); /* VDE Flags - Edge Recovery & CSC Bypass */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
531 CROUTB(0xBF, 0x02); /* Video format - RGB16 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
532 SROUTB(0xBE, 0x0); /* HSCB disabled */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
533 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
534 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
535 CROUTB(0x8F, 0x20); /* VDE Flags - Edge Recovery */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
536 CROUTB(0xBF, 0x00); /* Video format - YUV */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
537 SROUTB(0xBE, 0x00); /* HSCB disable - was 0x03*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
538 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
539 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
540
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
541 CROUTB(0x92, ((base0+info->offset.y) >> 3) &0xff); /* Lower 8 bits of start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
542 CROUTB(0x93, ((base0+info->offset.y) >> 11) &0xff); /* Mid 8 bits of start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
543 CROUTB(0x94, ((base0+info->offset.y) >> 19) &0xf); /* Upper 4 bits of start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
544 SROUTB(0x80, ((base0+info->offset.v) >> 3) &0xff); /* Lower 8 bits of start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
545 SROUTB(0x81, ((base0+info->offset.v) >> 11) &0xff); /* Mid 8 bits of start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
546 SROUTB(0x82, ((base0+info->offset.v) >> 19) &0xf); /* Upper 4 bits of start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
547 SROUTB(0x83, ((base0+info->offset.u) >> 3) &0xff); /* Lower 8 bits of start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
548 SROUTB(0x84, ((base0+info->offset.u) >> 11) &0xff); /* Mid 8 bits of start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
549 SROUTB(0x85, ((base0+info->offset.u) >> 19) &0xf); /* Upper 4 bits of start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
550 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
551
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
552 cyberblade_set_eq(&equal);
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
553
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
554 /* Protect hardware registers again */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
555 SROUTB(0x11, protect);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
556 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
557 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
558
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
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 int cyberblade_playback_on(void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
561 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
562 LOGWRITE("Enable overlay\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
563 CROUTB(0x8E, 0xd4); /* VDE Flags*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
564
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
565 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
566 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
567
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
568
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
569 static int cyberblade_playback_off(void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
570 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
571 LOGWRITE("Disable overlay\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
572 CROUTB(0x8E, 0xc4); /* VDE Flags*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
573
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
574 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
575 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
576
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
577
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
578 static int cyberblade_frame_sel(unsigned int frame)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
579 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
580 int protect;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
581 LOGWRITE("Frame select\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
582 protect=SRINB(0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
583 SROUTB(0x11, 0x92);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
584 /* Set overlay address to that of selected frame */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
585 CROUTB(0x92, ((frames[frame]+YOffs) >> 3) &0xff); /* Lower 8 bits of start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
586 CROUTB(0x93, ((frames[frame]+YOffs) >> 11) &0xff); /* Mid 8 bits of start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
587 CROUTB(0x94, ((frames[frame]+YOffs) >> 19) &0xf); /* Upper 4 bits of start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
588 SROUTB(0x80, ((frames[frame]+VOffs) >> 3) &0xff); /* Lower 8 bits of start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
589 SROUTB(0x81, ((frames[frame]+VOffs) >> 11) &0xff); /* Mid 8 bits of start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
590 SROUTB(0x82, ((frames[frame]+VOffs) >> 19) &0xf); /* Upper 4 bits of start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
591 SROUTB(0x83, ((frames[frame]+UOffs) >> 3) &0xff); /* Lower 8 bits of start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
592 SROUTB(0x84, ((frames[frame]+UOffs) >> 11) &0xff); /* Mid 8 bits of start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
593 SROUTB(0x85, ((frames[frame]+UOffs) >> 19) &0xf); /* Upper 4 bits of start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
594 SROUTB(0x11, protect);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
595 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
596 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
597
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
598 VDXDriver cyberblade_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
599 "cyberblade",
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
600 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
601 .probe = cyberblade_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
602 .get_caps = cyberblade_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
603 .query_fourcc = cyberblade_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
604 .init = cyberblade_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
605 .destroy = cyberblade_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
606 .config_playback = cyberblade_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
607 .playback_on = cyberblade_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
608 .playback_off = cyberblade_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
609 .frame_sel = cyberblade_frame_sel,
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
610 .get_eq = cyberblade_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
611 .set_eq = cyberblade_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
612 .get_gkey = cyberblade_get_gkeys,
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
613 .set_gkey = cyberblade_set_gkeys,
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
614 };