annotate libvo/vo_tdfxfb.c @ 25317:7f3cb5408f28

Fixed VIDIX color bug that was introduced when Radeon VIDIX driver was synchronized with vidix.sf.net. The red color was saturating. Corrected value fixes the issue and restore the color to the level it used to have before synchronization. Meaning of the value remains unknow but was retrieved from register's value of a Radeon 9000 card, so it may need further testing. Patch by Guillaume Lecerf (foxcore at gmail dot com)
author ben
date Mon, 10 Dec 2007 19:27:46 +0000
parents c9e9ac2008c2
children d97a607821f1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
1 /* Copyright (C) Mark Zealey, 2002, <mark@zealos.org>. Released under the terms
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
2 * and conditions of the GPL.
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
3 *
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
4 * 30/03/02: An almost total rewrite, added DR support and support for modes
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
5 * other than 16bpp. Fixed the crash when playing multiple files
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
6 * 07/04/02: Fixed DR support, added YUY2 support, fixed OSD stuff.
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
7 * 08/04/02: Fixed a wierd sound corruption problem caused by some optomizations
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
8 * I made.
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
9 * 09/04/02: Fixed a problem with changing the variables passed to draw_slice().
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
10 * Fixed DR support for YV12 et al. Added BGR support. Removed lots of dud code.
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
11 * 10/04/02: Changed the memcpy functions to mem2agpcpy.. should be a tad
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
12 * faster.
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
13 * 11/04/02: Added a compile option so you can watch the film with the console
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
14 * as the background, or not.
5579
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
15 * 13/04/02: Fix rough OSD stuff by rendering it straight onto the output
5580
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
16 * buffer. Added double-buffering. Supports hardware zoom/reduce zoom modes.
5590
cd591b2fa883 Misc cleanups of the code
mark
parents: 5580
diff changeset
17 * 13/04/02: Misc cleanups of the code.
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents: 7708
diff changeset
18 * 22/10/02: Added geometry support to it
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
19 *
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
20 * Hints and tricks:
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
21 * - Use -dr to get direct rendering
11261
835822ce4bb1 -vop ---> -vf
diego
parents: 11129
diff changeset
22 * - Use -vf yuy2 to get yuy2 rendering, *MUCH* faster than yv12
5580
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
23 * - To get a black background and nice smooth OSD, use -double
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
24 * - To get the console as a background, but with scaled OSD, use -nodouble
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
25 * - The driver supports both scaling and shrinking the image using the -x and
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents: 7708
diff changeset
26 * -y options on the mplayer commandline. Also repositioning via the -geometry
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents: 7708
diff changeset
27 * option.
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
28 */
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
29
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
30 #include <stdio.h>
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
31 #include <stdlib.h>
4737
32e1f5042f65 I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents: 4596
diff changeset
32 #include <errno.h>
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
33 #include <string.h>
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
34 #include <unistd.h>
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
35 #include <sys/ioctl.h>
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
36 #include <fcntl.h>
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
37 #include <sys/mman.h>
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
38 #include <linux/fb.h>
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
39
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
40 #include "config.h"
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 16171
diff changeset
41 #include "mp_msg.h"
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 16171
diff changeset
42 #include "help_mp.h"
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
43 #include "fastmemcpy.h"
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
44 #include "video_out.h"
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
45 #include "video_out_internal.h"
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
46 #include "drivers/3dfx.h"
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
47 #include "aspect.h"
8123
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 7866
diff changeset
48 #include "sub.h"
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
49
25216
3aee342be929 Make vo info structs const
reimar
parents: 18335
diff changeset
50 static const vo_info_t info =
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
51 {
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
52 "3Dfx Banshee/Voodoo3/Voodoo5",
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
53 "tdfxfb",
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
54 "Mark Zealey <mark@zealos.org>",
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
55 ""
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
56 };
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
57
25220
c9e9ac2008c2 Mark the vo_functions_t definitions as const where possible.
reimar
parents: 25216
diff changeset
58 const LIBVO_EXTERN(tdfxfb)
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 8123
diff changeset
59
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
60 /* Some registers on the card */
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
61 #define S2S_STRECH_BLT 2 // BLT + Strech
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
62 #define S2S_IMMED (1 << 8) // Do it immediatly
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
63 #define S2S_ROP (0xCC << 24) // ???
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
64
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
65 /* Stepping between the different YUV plane registers */
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
66 #define YUV_STRIDE 1024
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
67 struct YUV_plane {
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
68 char Y[0x0100000];
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
69 char U[0x0100000];
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
70 char V[0x0100000];
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
71 };
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
72
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
73 static int fd = -1;
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
74 static struct fb_fix_screeninfo fb_finfo;
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
75 static struct fb_var_screeninfo fb_vinfo;
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
76 static uint32_t in_width, in_height, in_format, in_depth, in_voodoo_format,
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
77 screenwidth, screenheight, screendepth, vidwidth, vidheight, vidx, vidy,
5579
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
78 vid_voodoo_format, *vidpage, *hidpage, *inpage, vidpageoffset,
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
79 hidpageoffset, inpageoffset, *memBase0 = NULL, *memBase1 = NULL, r_width, r_height;
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
80 static volatile voodoo_io_reg *reg_IO;
11129
9a941857969a I found that the tdfxfb video output driver doesn't work when compiled with
attila
parents: 9521
diff changeset
81 static volatile voodoo_2d_reg *reg_2d;
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
82 static voodoo_yuv_reg *reg_YUV;
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
83 static struct YUV_plane *YUV;
5580
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
84 static void (*alpha_func)(), (*alpha_func_double)();
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
85
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 11261
diff changeset
86 static int preinit(const char *arg)
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
87 {
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
88 char *name;
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
89
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
90 if(arg)
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
91 name = (char*)arg;
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
92 else if(!(name = getenv("FRAMEBUFFER")))
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
93 name = "/dev/fb0";
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
94
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
95 if((fd = open(name, O_RDWR)) == -1) {
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 16171
diff changeset
96 mp_msg(MSGT_VO,MSGL_ERR, MSGTR_LIBVO_TDFXFB_CantOpen, name, strerror(errno));
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
97 return -1;
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
98 }
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
99
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
100 if(ioctl(fd, FBIOGET_FSCREENINFO, &fb_finfo)) {
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 16171
diff changeset
101 mp_msg(MSGT_VO,MSGL_ERR, MSGTR_LIBVO_TDFXFB_ProblemWithFbitgetFscreenInfo,
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
102 strerror(errno));
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
103 close(fd);
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
104 fd = -1;
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
105 return -1;
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
106 }
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
107
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
108 if(ioctl(fd, FBIOGET_VSCREENINFO, &fb_vinfo)) {
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 16171
diff changeset
109 mp_msg(MSGT_VO,MSGL_ERR, MSGTR_LIBVO_TDFXFB_ProblemWithFbitgetVscreenInfo,
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
110 strerror(errno));
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
111 close(fd);
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
112 fd = -1;
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
113 return -1;
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
114 }
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
115
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
116 /* BANSHEE means any of the series aparently */
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
117 if (fb_finfo.accel != FB_ACCEL_3DFX_BANSHEE) {
18335
5766a9d21992 Rename some misspelled and misnamed messages.
diego
parents: 18260
diff changeset
118 mp_msg(MSGT_VO,MSGL_ERR, MSGTR_LIBVO_TDFXFB_ThisDriverOnlySupports);
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
119 close(fd);
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
120 fd = -1;
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
121 return -1;
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
122 }
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
123
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
124 // Check the depth now as config() musn't fail
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
125 switch(fb_vinfo.bits_per_pixel) {
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
126 case 16:
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
127 case 24:
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
128 case 32:
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
129 break; // Ok
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
130 default:
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 16171
diff changeset
131 mp_msg(MSGT_VO,MSGL_ERR, MSGTR_LIBVO_TDFXFB_OutputIsNotSupported, fb_vinfo.bits_per_pixel);
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
132 close(fd);
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
133 fd = -1;
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
134 return -1;
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
135 }
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
136
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
137 /* Open up a window to the hardware */
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
138 memBase1 = mmap(0, fb_finfo.smem_len, PROT_READ | PROT_WRITE,
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
139 MAP_SHARED, fd, 0);
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
140 memBase0 = mmap(0, fb_finfo.mmio_len, PROT_READ | PROT_WRITE,
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
141 MAP_SHARED, fd, fb_finfo.smem_len);
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
142
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
143 if((long)memBase0 == -1 || (long)memBase1 == -1) {
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 16171
diff changeset
144 mp_msg(MSGT_VO,MSGL_ERR, MSGTR_LIBVO_TDFXFB_CouldntMapMemoryAreas, strerror(errno));
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
145 if((long)memBase0 != -1)
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
146 munmap(memBase0, fb_finfo.smem_len);
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
147 if((long)memBase1 != -1)
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
148 munmap(memBase1, fb_finfo.smem_len);
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
149 memBase0 = memBase1 = NULL;
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
150 return -1;
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
151 }
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
152
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
153 /* Set up global pointers to the voodoo's regs */
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
154 reg_IO = (void *)memBase0 + VOODOO_IO_REG_OFFSET;
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
155 reg_2d = (void *)memBase0 + VOODOO_2D_REG_OFFSET;
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
156 reg_YUV = (void *)memBase0 + VOODOO_YUV_REG_OFFSET;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
157 YUV = (void *)memBase0 + VOODOO_YUV_PLANE_OFFSET;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
158
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
159 return 0;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
160 }
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
161
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
162 static void uninit(void)
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
163 {
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
164 if(reg_IO) {
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
165 /* Restore the screen (Linux lives at 0) */
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
166 reg_IO->vidDesktopStartAddr = 0;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
167 reg_IO = NULL;
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
168 }
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
169
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
170 /* And close our mess */
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
171 if(memBase1) {
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
172 munmap(memBase1, fb_finfo.smem_len);
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
173 memBase1 = NULL;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
174 }
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
175
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
176 if(memBase0) {
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
177 munmap(memBase0, fb_finfo.mmio_len);
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
178 memBase0 = NULL;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
179 }
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
180
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
181 if(fd != -1) {
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
182 close(fd);
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
183 fd = -1;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
184 }
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
185 }
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
186
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
187 static void clear_screen()
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
188 {
7137
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
189 /* There needs to be some sort of delay here or else things seriously
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
190 * screw up. Causes the image to not be the right size on screen if
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
191 * this isn't like this. A printf before the memset call also seems to
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
192 * work, but this made more sense since it actually checks the status of
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
193 * the card.
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
194 */
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
195 if(vo_doublebuffering) {
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
196 /* first wait for the card to be ready, do not try to write
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
197 * every time - alex */
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
198 do {} while((reg_IO->status & 0x1f) < 1);
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
199 memset(vidpage, 0, screenwidth * screenheight * screendepth);
5580
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
200 memset(hidpage, 0, screenwidth * screenheight * screendepth);
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
201 }
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
202 }
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
203
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
204 /* Setup output screen dimensions etc */
5590
cd591b2fa883 Misc cleanups of the code
mark
parents: 5580
diff changeset
205 static void setup_screen(uint32_t full)
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
206 {
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents: 7708
diff changeset
207 aspect(&vidwidth, &vidheight, full ? A_ZOOM : A_NOZOOM);
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 8745
diff changeset
208
9521
7de2fabb1fa2 Fixed geometry that someone broke grr.
mark
parents: 9517
diff changeset
209 geometry(&vidx, &vidy, &vidwidth, &vidheight, screenwidth, screenheight);
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
210 vo_fs = full;
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
211 clear_screen();
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
212 }
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
213
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 11261
diff changeset
214 static int config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height,
7124
eca7dbad0166 finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents: 7117
diff changeset
215 uint32_t flags, char *title, uint32_t format)
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
216 {
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
217 screenwidth = fb_vinfo.xres;
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
218 screenheight = fb_vinfo.yres;
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
219 aspect_save_screenres(fb_vinfo.xres,fb_vinfo.yres);
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
220
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
221 in_width = width;
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
222 in_height = height;
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
223 in_format = format;
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
224 aspect_save_orig(width,height);
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
225
5579
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
226 r_width = d_width;
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
227 r_height = d_height;
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
228 aspect_save_prescale(d_width,d_height);
5579
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
229
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
230 /* Setup the screen for rendering to */
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
231 switch(fb_vinfo.bits_per_pixel) {
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
232 case 16:
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
233 screendepth = 2;
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
234 vid_voodoo_format = VOODOO_BLT_FORMAT_16;
5580
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
235 alpha_func_double = vo_draw_alpha_rgb16;
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
236 break;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
237
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
238 case 24:
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
239 screendepth = 3;
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
240 vid_voodoo_format = VOODOO_BLT_FORMAT_24;
5580
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
241 alpha_func_double = vo_draw_alpha_rgb24;
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
242 break;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
243
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
244 case 32:
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
245 screendepth = 4;
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
246 vid_voodoo_format = VOODOO_BLT_FORMAT_32;
5580
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
247 alpha_func_double = vo_draw_alpha_rgb32;
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
248 break;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
249
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
250 default:
18260
51588cd0dca5 fix printf->mp_msg transition, 10l to Reynaldo and/or Attila
rathann
parents: 18234
diff changeset
251 mp_msg(MSGT_VO, MSGL_ERR, MSGTR_LIBVO_TDFXFB_BppOutputIsNotSupported, fb_vinfo.bits_per_pixel);
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
252 return -1;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
253 }
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
254
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
255 vid_voodoo_format |= screenwidth * screendepth;
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
256
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
257 /* Some defaults here */
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
258 in_voodoo_format = VOODOO_BLT_FORMAT_YUYV;
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
259 in_depth = 2;
5580
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
260 alpha_func = vo_draw_alpha_yuy2;
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
261
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
262 switch(in_format) {
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
263 case IMGFMT_YV12:
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
264 case IMGFMT_I420:
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
265 case IMGFMT_IYUV:
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
266 case IMGFMT_YUY2:
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
267 break;
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
268 case IMGFMT_UYVY:
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
269 in_voodoo_format = VOODOO_BLT_FORMAT_UYVY;
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
270 break;
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
271 case IMGFMT_BGR16:
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
272 in_voodoo_format = VOODOO_BLT_FORMAT_16;
5580
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
273 alpha_func = vo_draw_alpha_rgb16;
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
274 break;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
275
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
276 case IMGFMT_BGR24:
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
277 in_depth = 3;
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
278 in_voodoo_format = VOODOO_BLT_FORMAT_24;
5580
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
279 alpha_func = vo_draw_alpha_rgb24;
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
280 break;
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
281
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
282 case IMGFMT_BGR32:
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
283 in_depth = 4;
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
284 in_voodoo_format = VOODOO_BLT_FORMAT_32;
5580
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
285 alpha_func = vo_draw_alpha_rgb32;
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
286 break;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
287
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
288 default:
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 16171
diff changeset
289 mp_msg(MSGT_VO,MSGL_ERR, MSGTR_LIBVO_TDFXFB_SomethingIsWrongWithControl);
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
290 return -1;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
291 }
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
292
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
293 in_voodoo_format |= in_width * in_depth;
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
294
7137
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
295 /* Linux lives in the first frame */
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
296 if(vo_doublebuffering) {
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
297 vidpageoffset = screenwidth * screenheight * screendepth;
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
298 hidpageoffset = vidpageoffset + screenwidth * screenheight * screendepth;
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
299 } else
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
300 vidpageoffset = hidpageoffset = 0; /* Console background */
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
301
5580
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
302
5579
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
303 inpageoffset = hidpageoffset + screenwidth * screenheight * screendepth;
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
304
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
305 if(inpageoffset + in_width * in_depth * in_height > fb_finfo.smem_len) {
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 16171
diff changeset
306 mp_msg(MSGT_VO,MSGL_ERR, MSGTR_LIBVO_TDFXFB_NotEnoughVideoMemoryToPlay);
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
307 return -1;
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
308 }
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
309
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
310 vidpage = (void *)memBase1 + (unsigned long)vidpageoffset;
5579
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
311 hidpage = (void *)memBase1 + (unsigned long)hidpageoffset;
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
312 inpage = (void *)memBase1 + (unsigned long)inpageoffset;
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
313
5590
cd591b2fa883 Misc cleanups of the code
mark
parents: 5580
diff changeset
314 setup_screen(flags & VOFLAG_FULLSCREEN);
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
315
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
316 memset(inpage, 0, in_width * in_height * in_depth);
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
317
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 16171
diff changeset
318 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_TDFXFB_ScreenIs,
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
319 screenwidth, screenheight, screendepth * 8,
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
320 in_width, in_height, in_depth * 8,
5579
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
321 d_width, d_height);
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
322
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
323 return 0;
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
324 }
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
325
5580
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
326 /* Double-buffering draw_alpha */
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
327 static void draw_alpha_double(int x, int y, int w, int h, unsigned char *src,
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
328 unsigned char *srca, int stride)
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
329 {
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
330 char *dst = (char *)vidpage + ((y + vidy) * screenwidth + x + vidx) * screendepth;
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
331 alpha_func_double(w, h, src, srca, stride, dst, screenwidth * screendepth);
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
332 }
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
333
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
334 /* Single-buffering draw_alpha */
5579
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
335 static void draw_alpha(int x, int y, int w, int h, unsigned char *src,
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
336 unsigned char *srca, int stride)
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
337 {
5580
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
338 char *dst = (char *)inpage + (y * in_width + x) * in_depth;
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
339 alpha_func(w, h, src, srca, stride, dst, in_width * in_depth);
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
340 }
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
341
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
342 static void draw_osd(void)
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
343 {
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
344 if(!vo_doublebuffering)
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
345 vo_draw_text(in_width, in_height, draw_alpha);
5579
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
346 }
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
347
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
348 /* Render onto the screen */
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
349 static void flip_page(void)
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
350 {
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
351 voodoo_2d_reg regs = *reg_2d; /* Copy the regs */
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
352 int i = 0;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
353
5580
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
354 if(vo_doublebuffering) {
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
355 /* Flip to an offscreen buffer for rendering */
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
356 uint32_t t = vidpageoffset;
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
357 void *j = vidpage;
5579
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
358
5580
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
359 vidpage = hidpage;
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
360 hidpage = j;
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
361 vidpageoffset = hidpageoffset;
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
362 hidpageoffset = t;
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
363 }
5579
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
364
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
365 reg_2d->commandExtra = 0;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
366 reg_2d->clip0Min = 0;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
367 reg_2d->clip0Max = 0xffffffff;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
368
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
369 reg_2d->srcBaseAddr = inpageoffset;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
370 reg_2d->srcXY = 0;
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
371 reg_2d->srcFormat = in_voodoo_format;
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
372 reg_2d->srcSize = XYREG(in_width, in_height);
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
373
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
374 reg_2d->dstBaseAddr = vidpageoffset;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
375 reg_2d->dstXY = XYREG(vidx, vidy);
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
376 reg_2d->dstFormat = vid_voodoo_format;
7137
9a44c38d388c Fixed some breakages of single-buffer rendering of tdfx
mark
parents: 7124
diff changeset
377 reg_2d->dstSize = XYREG(vidwidth, vidheight);
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
378 reg_2d->command = S2S_STRECH_BLT | S2S_IMMED | S2S_ROP;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
379
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
380 /* Wait for the command to finish (If we don't do this, we get wierd
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
381 * sound corruption... */
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
382 while((reg_IO->status & 0x1f) < 1)
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
383 /* Wait */;
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
384
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
385 *((volatile uint32_t *)((uint32_t *)reg_IO + COMMAND_3D)) = COMMAND_3D_NOP;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
386
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
387 while(i < 3)
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
388 if(!(reg_IO->status & STATUS_BUSY))
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
389 i++;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
390
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
391 /* Restore the old regs now */
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
392 reg_2d->commandExtra = regs.commandExtra;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
393 reg_2d->clip0Min = regs.clip0Min;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
394 reg_2d->clip0Max = regs.clip0Max;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
395
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
396 reg_2d->srcBaseAddr = regs.srcBaseAddr;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
397 reg_2d->srcXY = regs.srcXY;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
398 reg_2d->srcFormat = regs.srcFormat;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
399 reg_2d->srcSize = regs.srcSize;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
400
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
401 reg_2d->dstBaseAddr = regs.dstBaseAddr;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
402 reg_2d->dstXY = regs.dstXY;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
403 reg_2d->dstFormat = regs.dstFormat;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
404 reg_2d->dstSize = regs.dstSize;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
405
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
406 reg_2d->command = 0;
5579
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
407
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
408 /* Render any text onto this buffer */
5580
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
409 if(vo_doublebuffering)
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
410 vo_draw_text(vidwidth, vidheight, draw_alpha_double);
5579
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
411
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
412 /* And flip to the new buffer! */
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
413 reg_IO->vidDesktopStartAddr = vidpageoffset;
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
414 }
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
415
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 11261
diff changeset
416 static int draw_frame(uint8_t *src[])
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
417 {
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
418 mem2agpcpy(inpage, src[0], in_width * in_depth * in_height);
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
419 return 0;
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
420 }
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
421
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 11261
diff changeset
422 static int draw_slice(uint8_t *i[], int s[], int w, int h, int x, int y)
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
423 {
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
424 /* We want to render to the YUV to the input page + the location
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
425 * of the stripes we're doing */
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
426 reg_YUV->yuvBaseAddr = inpageoffset + in_width * in_depth * y + x;
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
427 reg_YUV->yuvStride = in_width * in_depth;
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
428
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
429 /* Put the YUV channels into the voodoos internal combiner unit
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
430 * thingie */
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
431 mem2agpcpy_pic(YUV->Y, i[0], s[0], h , YUV_STRIDE, s[0]);
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
432 mem2agpcpy_pic(YUV->U, i[1], s[1], h / 2, YUV_STRIDE, s[1]);
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
433 mem2agpcpy_pic(YUV->V, i[2], s[2], h / 2, YUV_STRIDE, s[2]);
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
434 return 0;
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
435 }
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
436
5590
cd591b2fa883 Misc cleanups of the code
mark
parents: 5580
diff changeset
437 /* Attempt to start doing DR */
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
438 static uint32_t get_image(mp_image_t *mpi)
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
439 {
2350
d3a67a417352 new version by zsteva@ptt.yu
arpi
parents: 1979
diff changeset
440
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
441 if(mpi->flags & MP_IMGFLAG_READABLE)
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
442 return VO_FALSE;
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
443 if(mpi->type == MP_IMGTYPE_STATIC && vo_doublebuffering)
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
444 return VO_FALSE;
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
445 if(mpi->type > MP_IMGTYPE_TEMP)
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
446 return VO_FALSE; // TODO ??
2350
d3a67a417352 new version by zsteva@ptt.yu
arpi
parents: 1979
diff changeset
447
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
448 switch(in_format) {
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
449 case IMGFMT_YUY2:
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
450 case IMGFMT_BGR16:
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
451 case IMGFMT_BGR24:
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
452 case IMGFMT_BGR32:
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
453 case IMGFMT_UYVY:
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
454 mpi->planes[0] = (char *)inpage;
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
455 mpi->stride[0] = in_width * in_depth;
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
456 break;
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
457
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
458 case IMGFMT_YV12:
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
459 case IMGFMT_I420:
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
460 case IMGFMT_IYUV:
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
461 if(!(mpi->flags & MP_IMGFLAG_ACCEPT_STRIDE) && mpi->w != YUV_STRIDE)
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
462 return VO_FALSE;
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
463 mpi->planes[0] = YUV->Y;
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
464 mpi->planes[1] = YUV->U;
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
465 mpi->planes[2] = YUV->V;
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
466 mpi->stride[0] = mpi->stride[1] = mpi->stride[2] = YUV_STRIDE;
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
467 reg_YUV->yuvBaseAddr = inpageoffset;
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
468 reg_YUV->yuvStride = in_width * in_depth;
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
469 break;
2350
d3a67a417352 new version by zsteva@ptt.yu
arpi
parents: 1979
diff changeset
470
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
471 default:
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
472 return VO_FALSE;
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
473 }
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
474
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
475 mpi->width = in_width;
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
476 mpi->flags |= MP_IMGFLAG_DIRECT;
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
477
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
478 return VO_TRUE;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 2732
diff changeset
479 }
1979
6278f566cd91 tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
diff changeset
480
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 11261
diff changeset
481 static int control(uint32_t request, void *data, ...)
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 2732
diff changeset
482 {
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
483 switch(request) {
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
484 case VOCTRL_GET_IMAGE:
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
485 return get_image(data);
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
486
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
487 case VOCTRL_QUERY_FORMAT:
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
488 switch(*((uint32_t*)data)) {
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
489 case IMGFMT_YV12:
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
490 case IMGFMT_I420:
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
491 case IMGFMT_IYUV:
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
492 case IMGFMT_YUY2:
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
493 case IMGFMT_UYVY:
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
494 case IMGFMT_BGR16:
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
495 case IMGFMT_BGR24:
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
496 case IMGFMT_BGR32:
5579
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
497 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW |
2250b6ad5ad9 Some OSD and other random fixes. Added double buffering
mark
parents: 5567
diff changeset
498 VFCAP_OSD | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN;
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
499 }
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
500
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
501 return 0; /* Not supported */
5567
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
502
cfa4a2c0366e Lots of updates and bugfixes to the tdfxfb driver
mark
parents: 5540
diff changeset
503 case VOCTRL_FULLSCREEN:
7708
c1e8287f9574 Use the common aspect code
albeu
parents: 7137
diff changeset
504 setup_screen(!vo_fs);
5590
cd591b2fa883 Misc cleanups of the code
mark
parents: 5580
diff changeset
505 return 0;
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
506 }
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
507
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
508 return VO_NOTIMPL;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 2732
diff changeset
509 }
5540
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
510
80d8fed6e683 new tdfxfb yuv driver by Mark Zealey <mark@zealos.org>
arpi
parents: 4737
diff changeset
511 /* Dummy funcs */
5580
6366586083bb Added support for choosing weather to use double-buffering or single buffering
mark
parents: 5579
diff changeset
512 static void check_events(void) {}