Mercurial > mplayer.hg
annotate vidix/pm3_vid.c @ 26096:e6a565ec1a3b
New S3 VIDIX driver.
Provides support for S3 Trio and S3 Virge chipsets.
This deprecates the old Savage driver that worked with latest chips only.
(synchronized with vidix.sf.net r326 and r327)
author | ben |
---|---|
date | Fri, 29 Feb 2008 20:01:28 +0000 |
parents | acfe034e5386 |
children | 0d255d03016f |
rev | line source |
---|---|
23046
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
1 /* |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
2 * VIDIX driver for 3DLabs Glint R3 and Permedia 3 chipsets. |
23734 | 3 * Copyright (C) 2002 Måns Rullgård |
23046
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
4 * |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
5 * 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
|
6 * |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
7 * 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
|
8 * 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
|
9 * 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
|
10 * (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
|
11 * |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
12 * 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
|
13 * 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
|
14 * 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
|
15 * 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
|
16 * |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
17 * You should have received a copy of the GNU General Public License |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
18 * along with MPlayer; if not, write to the Free Software |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
20 */ |
22850 | 21 |
22 #include <errno.h> | |
23 #include <stdio.h> | |
24 #include <stdlib.h> | |
25 #include <string.h> | |
26 #include <inttypes.h> | |
27 #include <unistd.h> | |
28 | |
29 #include "vidix.h" | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
30 #include "vidixlib.h" |
22850 | 31 #include "fourcc.h" |
22901 | 32 #include "dha.h" |
22900
a9e111b88c4a
merged libdha and libvidix, moved all files from libdha to vidix directory
ben
parents:
22869
diff
changeset
|
33 #include "pci_ids.h" |
a9e111b88c4a
merged libdha and libvidix, moved all files from libdha to vidix directory
ben
parents:
22869
diff
changeset
|
34 #include "pci_names.h" |
22905 | 35 #include "config.h" |
22850 | 36 |
37 #include "pm3_regs.h" | |
38 | |
39 #if 0 | |
40 #define TRACE_ENTER() fprintf(stderr, "%s: enter\n", __FUNCTION__) | |
41 #define TRACE_EXIT() fprintf(stderr, "%s: exit\n", __FUNCTION__) | |
42 #else | |
43 #define TRACE_ENTER() | |
44 #define TRACE_EXIT() | |
45 #endif | |
46 | |
23056 | 47 static pciinfo_t pci_info; |
22850 | 48 |
49 void *pm3_reg_base; | |
23056 | 50 static void *pm3_mem; |
22850 | 51 |
52 static vidix_capability_t pm3_cap = | |
53 { | |
54 "3DLabs GLINT R3/Permedia3 driver", | |
23734 | 55 "Måns Rullgård <mru@users.sf.net>", |
22850 | 56 TYPE_OUTPUT, |
57 { 0, 0, 0, 0 }, | |
58 2048, | |
59 2048, | |
60 4, | |
61 4, | |
62 -1, | |
63 FLAG_UPSCALER|FLAG_DOWNSCALER, | |
64 VENDOR_3DLABS, | |
65 -1, | |
66 { 0, 0, 0, 0 } | |
67 }; | |
68 | |
69 static unsigned short pm3_card_ids[] = | |
70 { | |
71 DEVICE_3DLABS_GLINT_R3 | |
72 }; | |
73 | |
74 static int find_chip(unsigned chip_id) | |
75 { | |
76 unsigned i; | |
77 for(i = 0;i < sizeof(pm3_card_ids)/sizeof(unsigned short);i++) | |
78 { | |
79 if(chip_id == pm3_card_ids[i]) return i; | |
80 } | |
81 return -1; | |
82 } | |
83 | |
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
|
84 static int pm3_probe(int verbose, int force) |
22850 | 85 { |
86 pciinfo_t lst[MAX_PCI_DEVICES]; | |
87 unsigned i,num_pci; | |
88 int err; | |
89 | |
90 err = pci_scan(lst,&num_pci); | |
91 if(err) | |
92 { | |
93 printf("[pm3] Error occurred during pci scan: %s\n",strerror(err)); | |
94 return err; | |
95 } | |
96 else | |
97 { | |
98 err = ENXIO; | |
99 for(i=0; i < num_pci; i++) | |
100 { | |
101 if(lst[i].vendor == VENDOR_3DLABS) | |
102 { | |
103 int idx; | |
104 const char *dname; | |
105 idx = find_chip(lst[i].device); | |
106 if(idx == -1) | |
107 continue; | |
108 dname = pci_device_name(VENDOR_3DLABS, lst[i].device); | |
109 dname = dname ? dname : "Unknown chip"; | |
110 printf("[pm3] Found chip: %s\n", dname); | |
23167
2ab3eac7f6da
synced with upstream vidix, prevented some drivers to work on some configs/archs
ben
parents:
23060
diff
changeset
|
111 #if 0 |
22850 | 112 if ((lst[i].command & PCI_COMMAND_IO) == 0) |
113 { | |
114 printf("[pm3] Device is disabled, ignoring\n"); | |
115 continue; | |
116 } | |
23167
2ab3eac7f6da
synced with upstream vidix, prevented some drivers to work on some configs/archs
ben
parents:
23060
diff
changeset
|
117 #endif |
22850 | 118 pm3_cap.device_id = lst[i].device; |
119 err = 0; | |
120 memcpy(&pci_info, &lst[i], sizeof(pciinfo_t)); | |
121 break; | |
122 } | |
123 } | |
124 } | |
125 if(err && verbose) printf("[pm3] Can't find chip\n"); | |
126 return err; | |
127 } | |
128 | |
129 #define PRINT_REG(reg) \ | |
130 { \ | |
131 long _foo = READ_REG(reg); \ | |
132 printf("[pm3] " #reg " (%x) = %#lx (%li)\n", reg, _foo, _foo); \ | |
133 } | |
134 | |
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
|
135 static int pm3_init(void) |
22850 | 136 { |
137 pm3_reg_base = map_phys_mem(pci_info.base0, 0x20000); | |
138 pm3_mem = map_phys_mem(pci_info.base2, 0x2000000); | |
139 return 0; | |
140 } | |
141 | |
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
|
142 static void pm3_destroy(void) |
22850 | 143 { |
144 unmap_phys_mem(pm3_reg_base, 0x20000); | |
145 unmap_phys_mem(pm3_mem, 0x2000000); | |
146 } | |
147 | |
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
|
148 static int pm3_get_caps(vidix_capability_t *to) |
22850 | 149 { |
150 memcpy(to, &pm3_cap, sizeof(vidix_capability_t)); | |
151 return 0; | |
152 } | |
153 | |
154 static int is_supported_fourcc(uint32_t fourcc) | |
155 { | |
156 switch(fourcc){ | |
157 case IMGFMT_YUY2: | |
158 case IMGFMT_UYVY: | |
159 return 1; | |
160 default: | |
161 return 0; | |
162 } | |
163 } | |
164 | |
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
|
165 static int pm3_query_fourcc(vidix_fourcc_t *to) |
22850 | 166 { |
167 if(is_supported_fourcc(to->fourcc)) | |
168 { | |
23060 | 169 to->depth = VID_DEPTH_ALL; |
22850 | 170 to->flags = VID_CAP_EXPAND | VID_CAP_SHRINK | VID_CAP_COLORKEY; |
171 return 0; | |
172 } | |
173 else to->depth = to->flags = 0; | |
174 return ENOSYS; | |
175 } | |
176 | |
177 #define FORMAT_RGB8888 PM3VideoOverlayMode_COLORFORMAT_RGB8888 | |
178 #define FORMAT_RGB4444 PM3VideoOverlayMode_COLORFORMAT_RGB4444 | |
179 #define FORMAT_RGB5551 PM3VideoOverlayMode_COLORFORMAT_RGB5551 | |
180 #define FORMAT_RGB565 PM3VideoOverlayMode_COLORFORMAT_RGB565 | |
181 #define FORMAT_RGB332 PM3VideoOverlayMode_COLORFORMAT_RGB332 | |
182 #define FORMAT_BGR8888 PM3VideoOverlayMode_COLORFORMAT_BGR8888 | |
183 #define FORMAT_BGR4444 PM3VideoOverlayMode_COLORFORMAT_BGR4444 | |
184 #define FORMAT_BGR5551 PM3VideoOverlayMode_COLORFORMAT_BGR5551 | |
185 #define FORMAT_BGR565 PM3VideoOverlayMode_COLORFORMAT_BGR565 | |
186 #define FORMAT_BGR332 PM3VideoOverlayMode_COLORFORMAT_BGR332 | |
187 #define FORMAT_CI8 PM3VideoOverlayMode_COLORFORMAT_CI8 | |
188 #define FORMAT_VUY444 PM3VideoOverlayMode_COLORFORMAT_VUY444 | |
189 #define FORMAT_YUV444 PM3VideoOverlayMode_COLORFORMAT_YUV444 | |
190 #define FORMAT_VUY422 PM3VideoOverlayMode_COLORFORMAT_VUY422 | |
191 #define FORMAT_YUV422 PM3VideoOverlayMode_COLORFORMAT_YUV422 | |
192 | |
193 /* Notice, have to check that we don't overflow the deltas here ... */ | |
194 static void | |
195 compute_scale_factor( | |
196 short* src_w, short* dst_w, | |
22869 | 197 uint32_t* shrink_delta, uint32_t* zoom_delta) |
22850 | 198 { |
199 /* NOTE: If we don't return reasonable values here then the video | |
200 * unit can potential shut off and won't display an image until re-enabled. | |
201 * Seems as though the zoom_delta is o.k, and I've not had the problem. | |
202 * The 'shrink_delta' is prone to this the most - FIXME ! */ | |
203 | |
204 if (*src_w >= *dst_w) { | |
205 *src_w &= ~0x3; | |
206 *dst_w &= ~0x3; | |
207 *shrink_delta = (((*src_w << 16) / *dst_w) + 0x0f) & 0x0ffffff0; | |
208 *zoom_delta = 1<<16; | |
209 if ( ((*shrink_delta * *dst_w) >> 16) & 0x03 ) | |
210 *shrink_delta += 0x10; | |
211 } else { | |
212 *src_w &= ~0x3; | |
213 *dst_w &= ~0x3; | |
214 *zoom_delta = (((*src_w << 16) / *dst_w) + 0x0f) & 0x0001fff0; | |
215 *shrink_delta = 1<<16; | |
216 if ( ((*zoom_delta * *dst_w) >> 16) & 0x03 ) | |
217 *zoom_delta += 0x10; | |
218 } | |
219 } | |
220 | |
221 static int frames[VID_PLAY_MAXFRAMES]; | |
222 | |
223 static long overlay_mode, overlay_control; | |
224 | |
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
|
225 static int pm3_config_playback(vidix_playback_t *info) |
22850 | 226 { |
22869 | 227 uint32_t shrink, zoom; |
22850 | 228 short src_w, drw_w; |
229 short src_h, drw_h; | |
230 long base0; | |
231 int pitch; | |
232 int format; | |
233 unsigned int i; | |
234 | |
235 TRACE_ENTER(); | |
236 | |
237 if(!is_supported_fourcc(info->fourcc)) | |
238 return -1; | |
239 | |
240 switch(info->fourcc){ | |
241 case IMGFMT_YUY2: | |
242 format = FORMAT_YUV422; | |
243 break; | |
244 case IMGFMT_UYVY: | |
245 format = FORMAT_VUY422; | |
246 break; | |
247 default: | |
248 return -1; | |
249 } | |
250 | |
251 src_w = info->src.w; | |
252 src_h = info->src.h; | |
253 | |
254 drw_w = info->dest.w; | |
255 drw_h = info->dest.h; | |
256 | |
257 pitch = src_w; | |
258 | |
259 /* Assume we have 16 MB to play with */ | |
260 info->num_frames = 0x1000000 / (pitch * src_h * 2); | |
261 if(info->num_frames > VID_PLAY_MAXFRAMES) | |
262 info->num_frames = VID_PLAY_MAXFRAMES; | |
263 | |
264 /* Start at 16 MB. Let's hope it's not in use. */ | |
265 base0 = 0x1000000; | |
266 info->dga_addr = pm3_mem + base0; | |
267 | |
268 info->dest.pitch.y = 2; | |
269 info->dest.pitch.u = 0; | |
270 info->dest.pitch.v = 0; | |
271 info->offset.y = 0; | |
272 info->offset.v = 0; | |
273 info->offset.u = 0; | |
274 info->frame_size = pitch * src_h * 2; | |
275 for(i = 0; i < info->num_frames; i++){ | |
276 info->offsets[i] = info->frame_size * i; | |
277 frames[i] = (base0 + info->offsets[i]) >> 1; | |
278 } | |
279 | |
280 compute_scale_factor(&src_w, &drw_w, &shrink, &zoom); | |
281 | |
282 WRITE_REG(PM3VideoOverlayBase0, base0 >> 1); | |
283 WRITE_REG(PM3VideoOverlayStride, PM3VideoOverlayStride_STRIDE(pitch)); | |
284 WRITE_REG(PM3VideoOverlayWidth, PM3VideoOverlayWidth_WIDTH(src_w)); | |
285 WRITE_REG(PM3VideoOverlayHeight, PM3VideoOverlayHeight_HEIGHT(src_h)); | |
286 WRITE_REG(PM3VideoOverlayOrigin, 0); | |
287 | |
288 /* Scale the source to the destinationsize */ | |
289 if (src_h == drw_h) { | |
290 WRITE_REG(PM3VideoOverlayYDelta, PM3VideoOverlayYDelta_NONE); | |
291 } else { | |
292 WRITE_REG(PM3VideoOverlayYDelta, | |
293 PM3VideoOverlayYDelta_DELTA(src_h, drw_h)); | |
294 } | |
295 if (src_w == drw_w) { | |
296 WRITE_REG(PM3VideoOverlayShrinkXDelta, 1<<16); | |
297 WRITE_REG(PM3VideoOverlayZoomXDelta, 1<<16); | |
298 } else { | |
299 WRITE_REG(PM3VideoOverlayShrinkXDelta, shrink); | |
300 WRITE_REG(PM3VideoOverlayZoomXDelta, zoom); | |
301 } | |
302 WRITE_REG(PM3VideoOverlayIndex, 0); | |
303 | |
304 /* Now set the ramdac video overlay region and mode */ | |
305 RAMDAC_SET_REG(PM3RD_VideoOverlayXStartLow, (info->dest.x & 0xff)); | |
306 RAMDAC_SET_REG(PM3RD_VideoOverlayXStartHigh, (info->dest.x & 0xf00)>>8); | |
307 RAMDAC_SET_REG(PM3RD_VideoOverlayXEndLow, (info->dest.x+drw_w) & 0xff); | |
308 RAMDAC_SET_REG(PM3RD_VideoOverlayXEndHigh, | |
309 ((info->dest.x+drw_w) & 0xf00)>>8); | |
310 RAMDAC_SET_REG(PM3RD_VideoOverlayYStartLow, (info->dest.y & 0xff)); | |
311 RAMDAC_SET_REG(PM3RD_VideoOverlayYStartHigh, (info->dest.y & 0xf00)>>8); | |
312 RAMDAC_SET_REG(PM3RD_VideoOverlayYEndLow, (info->dest.y+drw_h) & 0xff); | |
313 RAMDAC_SET_REG(PM3RD_VideoOverlayYEndHigh, | |
314 ((info->dest.y+drw_h) & 0xf00)>>8); | |
315 | |
316 RAMDAC_SET_REG(PM3RD_VideoOverlayKeyR, 0xff); | |
317 RAMDAC_SET_REG(PM3RD_VideoOverlayKeyG, 0x00); | |
318 RAMDAC_SET_REG(PM3RD_VideoOverlayKeyB, 0xff); | |
319 | |
320 overlay_mode = | |
321 1 << 5 | | |
322 format | | |
323 PM3VideoOverlayMode_FILTER_FULL | | |
324 PM3VideoOverlayMode_BUFFERSYNC_MANUAL | | |
325 PM3VideoOverlayMode_FLIP_VIDEO; | |
326 | |
327 overlay_control = | |
328 PM3RD_VideoOverlayControl_KEY_COLOR | | |
329 PM3RD_VideoOverlayControl_MODE_MAINKEY | | |
330 PM3RD_VideoOverlayControl_DIRECTCOLOR_ENABLED; | |
331 | |
332 TRACE_EXIT(); | |
333 return 0; | |
334 } | |
335 | |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
22850
diff
changeset
|
336 static int pm3_playback_on(void) |
22850 | 337 { |
338 TRACE_ENTER(); | |
339 | |
340 WRITE_REG(PM3VideoOverlayMode, | |
341 overlay_mode | PM3VideoOverlayMode_ENABLE); | |
342 RAMDAC_SET_REG(PM3RD_VideoOverlayControl, | |
343 overlay_control | PM3RD_VideoOverlayControl_ENABLE); | |
344 WRITE_REG(PM3VideoOverlayUpdate, | |
345 PM3VideoOverlayUpdate_ENABLE); | |
346 | |
347 TRACE_EXIT(); | |
348 return 0; | |
349 } | |
350 | |
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
|
351 static int pm3_playback_off(void) |
22850 | 352 { |
353 RAMDAC_SET_REG(PM3RD_VideoOverlayControl, | |
354 PM3RD_VideoOverlayControl_DISABLE); | |
355 WRITE_REG(PM3VideoOverlayMode, | |
356 PM3VideoOverlayMode_DISABLE); | |
357 | |
358 RAMDAC_SET_REG(PM3RD_VideoOverlayKeyR, 0x01); | |
359 RAMDAC_SET_REG(PM3RD_VideoOverlayKeyG, 0x01); | |
360 RAMDAC_SET_REG(PM3RD_VideoOverlayKeyB, 0xfe); | |
361 | |
362 return 0; | |
363 } | |
364 | |
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
|
365 static int pm3_frame_select(unsigned int frame) |
22850 | 366 { |
367 WRITE_REG(PM3VideoOverlayBase0, frames[frame]); | |
368 return 0; | |
369 } | |
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
|
370 |
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
|
371 VDXDriver pm3_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
|
372 "pm3", |
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
|
373 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
|
374 .probe = pm3_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
|
375 .get_caps = pm3_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
|
376 .query_fourcc = pm3_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
|
377 .init = pm3_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
|
378 .destroy = pm3_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
|
379 .config_playback = pm3_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
|
380 .playback_on = pm3_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
|
381 .playback_off = pm3_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
|
382 .frame_sel = pm3_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
|
383 }; |