annotate vidix/unichrome_vid.c @ 28615:15e7abed4291

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