annotate libvo/vo_tdfx_vid.c @ 28883:c3f295ceae51

Do not call waveOutReset in uninit if you should wait till playing finishes, and retry waveOutClose if it fails due to still playing.
author reimar
date Mon, 09 Mar 2009 19:15:20 +0000
parents c413dfbbbc13
children 0f1b5b68af32
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27508
c413dfbbbc13 license header cosmetics
diego
parents: 25220
diff changeset
1 /*
c413dfbbbc13 license header cosmetics
diego
parents: 25220
diff changeset
2 * copyright (C) 2003 Alban Bedel
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
3 *
27508
c413dfbbbc13 license header cosmetics
diego
parents: 25220
diff changeset
4 * This file is part of MPlayer.
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
5 *
27508
c413dfbbbc13 license header cosmetics
diego
parents: 25220
diff changeset
6 * MPlayer is free software; you can redistribute it and/or modify
c413dfbbbc13 license header cosmetics
diego
parents: 25220
diff changeset
7 * it under the terms of the GNU General Public License as published by
c413dfbbbc13 license header cosmetics
diego
parents: 25220
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
c413dfbbbc13 license header cosmetics
diego
parents: 25220
diff changeset
9 * (at your option) any later version.
c413dfbbbc13 license header cosmetics
diego
parents: 25220
diff changeset
10 *
c413dfbbbc13 license header cosmetics
diego
parents: 25220
diff changeset
11 * MPlayer is distributed in the hope that it will be useful,
c413dfbbbc13 license header cosmetics
diego
parents: 25220
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
c413dfbbbc13 license header cosmetics
diego
parents: 25220
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c413dfbbbc13 license header cosmetics
diego
parents: 25220
diff changeset
14 * GNU General Public License for more details.
c413dfbbbc13 license header cosmetics
diego
parents: 25220
diff changeset
15 *
c413dfbbbc13 license header cosmetics
diego
parents: 25220
diff changeset
16 * You should have received a copy of the GNU General Public License along
c413dfbbbc13 license header cosmetics
diego
parents: 25220
diff changeset
17 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
c413dfbbbc13 license header cosmetics
diego
parents: 25220
diff changeset
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
19 */
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
20
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
21 #include <stdio.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
22 #include <stdlib.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
23 #include <string.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
24 #include <errno.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
25 #include <sys/types.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
26 #include <sys/stat.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
27 #include <fcntl.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
28 #include <unistd.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
29 #include <sys/ioctl.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
30 #include <sys/mman.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
31 #include "config.h"
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
32 #include "video_out.h"
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
33 #include "video_out_internal.h"
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
34 #include "aspect.h"
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
35 #include "mp_msg.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
36 #include "help_mp.h"
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
37
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
38 #include "fastmemcpy.h"
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
39 #include "drivers/tdfx_vid.h"
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
40
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
41
25216
3aee342be929 Make vo info structs const
reimar
parents: 24862
diff changeset
42 static const vo_info_t info =
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
43 {
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
44 "tdfx vid",
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
45 "tdfx_vid",
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
46 "Albeu",
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
47 ""
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
48 };
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
49
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
50 //#define VERBOSE
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
51
25220
c9e9ac2008c2 Mark the vo_functions_t definitions as const where possible.
reimar
parents: 25216
diff changeset
52 const LIBVO_EXTERN(tdfx_vid)
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
53
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
54 static tdfx_vid_config_t tdfx_cfg;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
55
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
56 static unsigned char* agp_mem = NULL;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
57 static int tdfx_fd = -1;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
58
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
59 static uint32_t img_fmt; // The real input format
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
60 static uint32_t src_width, src_height, src_fmt, src_bpp, src_stride;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
61 static uint32_t dst_width, dst_height, dst_fmt, dst_bpp, dst_stride;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
62
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
63 static uint32_t tdfx_page;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
64 static uint32_t front_buffer;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
65 static uint32_t back_buffer;
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
66 static uint8_t num_buffer = 3;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
67 static uint32_t buffer_size; // Max size
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
68 static uint8_t current_buffer = 0;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
69 static uint8_t current_ip_buf = 0;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
70 static uint32_t buffer_stride[3];
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
71
9567
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
72 static int use_overlay = 1;
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
73 static tdfx_vid_overlay_t tdfx_ov;
9567
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
74
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
75 // FIXME
24862
94ec445120da Disable clear_screen function, the call to the function is commented out
diego
parents: 24252
diff changeset
76 #if 0
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
77 static void clear_screen(void) {
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
78 tdfx_vid_agp_move_t mov;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
79
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
80 memset(agp_mem,0,tdfx_cfg.screen_width*dst_bpp*tdfx_cfg.screen_height);
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
81
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
82 mov.move2 = TDFX_VID_MOVE_2_PACKED;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
83 mov.width = tdfx_cfg.screen_width*dst_bpp;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
84 mov.height = tdfx_cfg.screen_height;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
85 mov.src = 0;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
86 mov.src_stride = tdfx_cfg.screen_width*dst_bpp;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
87 mov.dst = front_buffer;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
88 mov.dst_stride = tdfx_cfg.screen_stride;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
89
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
90 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_TDFXVID_Move, mov.width,mov.src_stride,mov.height,mov.dst_stride);
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
91
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
92 if(ioctl(tdfx_fd,TDFX_VID_AGP_MOVE,&mov))
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
93 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_TDFXVID_AGPMoveFailedToClearTheScreen);
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
94
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
95 }
24862
94ec445120da Disable clear_screen function, the call to the function is commented out
diego
parents: 24252
diff changeset
96 #endif
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
97
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
98 static int draw_slice(uint8_t *image[], int stride[], int w,int h,int x,int y)
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
99 {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
100 uint8_t* ptr[3];
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
101
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
102 #ifdef VERBOSE
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
103 printf("Draw slices %d\n",current_buffer);
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
104 #endif
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
105 switch(img_fmt) {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
106 case IMGFMT_YUY2:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
107 case IMGFMT_UYVY:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
108 case IMGFMT_BGR8:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
109 case IMGFMT_BGR16:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
110 case IMGFMT_BGR24:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
111 case IMGFMT_BGR32:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
112 // copy :( to agp_mem
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
113 // still faster than tdfxfb wich directly copy to the video mem :)
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
114 mem2agpcpy_pic(agp_mem + current_buffer * buffer_size +
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
115 y*buffer_stride[0] + x * src_bpp,
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
116 image[0],
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
117 src_bpp*w,h,buffer_stride[0],stride[0]);
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
118 return 0;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
119
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
120 case IMGFMT_YV12:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
121 case IMGFMT_I420:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
122 // Copy to agp mem
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
123 ptr[0] = agp_mem + current_buffer * buffer_size;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
124 mem2agpcpy_pic(ptr[0] + y * buffer_stride[0] + x,image[0],w,h,
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
125 buffer_stride[0],stride[0]);
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
126 ptr[1] = ptr[0] + (src_height*src_width);
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
127 mem2agpcpy_pic(ptr[1] + y/2 * buffer_stride[1] + x/2,image[1],w/2,h/2,
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
128 buffer_stride[1],stride[1]);
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
129 ptr[2] = ptr[1] + (src_height*src_width/4);
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
130 mem2agpcpy_pic(ptr[2] + y/2 * buffer_stride[2] + x/2,image[2],w/2,h/2,
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
131 buffer_stride[2],stride[2]);
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
132 return 0;
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
133 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
134
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
135 return 1;
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
136 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
137
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
138 static void draw_osd(void)
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
139 {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
140 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
141
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
142 static void
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
143 flip_page(void)
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
144 {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
145 tdfx_vid_blit_t blit;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
146 //return;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
147 // Scale convert
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
148 #ifdef VERBOSE
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
149 printf("Flip\n");
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
150 #endif
9567
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
151 if(use_overlay) {
23873
49a433e2e78f cosmetics: misc typo fixes
diego
parents: 21977
diff changeset
152 // TDFX_VID_OVERLAY_ON does nothing if the overlay is already on
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
153 if(!ioctl(tdfx_fd,TDFX_VID_OVERLAY_ON)) { // X11 killed the overlay :(
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
154 if(ioctl(tdfx_fd,TDFX_VID_SET_OVERLAY,&tdfx_ov))
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
155 mp_msg(MSGT_VO, MSGL_ERR, "tdfx_vid: set_overlay failed\n");
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
156 }
9567
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
157 // These formats need conversion
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
158 switch(src_fmt) {
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
159 case IMGFMT_BGR8:
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
160 case IMGFMT_BGR24:
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
161 case IMGFMT_BGR32:
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
162 memset(&blit,0,sizeof(tdfx_vid_blit_t));
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
163 blit.src = back_buffer;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
164 blit.src_stride = src_stride;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
165 blit.src_x = 0;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
166 blit.src_y = 0;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
167 blit.src_w = src_width;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
168 blit.src_h = src_height;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
169 blit.src_format = src_fmt;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
170
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
171 blit.dst = front_buffer;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
172 blit.dst_stride = dst_stride;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
173 blit.dst_x = 0;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
174 blit.dst_y = 0;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
175 blit.dst_w = src_width;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
176 blit.dst_h = src_height;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
177 blit.dst_format = IMGFMT_BGR16;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
178 if(ioctl(tdfx_fd,TDFX_VID_BLIT,&blit))
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
179 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_TDFXVID_BlitFailed);
9567
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
180 }
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
181 return;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
182 }
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
183 memset(&blit,0,sizeof(tdfx_vid_blit_t));
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
184 blit.src = back_buffer;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
185 blit.src_stride = src_stride;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
186 blit.src_x = 0;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
187 blit.src_y = 0;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
188 blit.src_w = src_width;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
189 blit.src_h = src_height;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
190 blit.src_format = src_fmt;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
191
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
192 blit.dst = front_buffer;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
193 blit.dst_stride = dst_stride;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
194 blit.dst_x = 0;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
195 blit.dst_y = 0;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
196 blit.dst_w = dst_width;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
197 blit.dst_h = dst_height;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
198 blit.dst_format = dst_fmt;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
199
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
200 if(ioctl(tdfx_fd,TDFX_VID_BLIT,&blit))
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
201 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_TDFXVID_BlitFailed);
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
202 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
203
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
204 static int
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
205 draw_frame(uint8_t *src[])
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
206 {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
207 int stride[] = { src_stride, 0, 0};
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
208 return draw_slice(src,stride,src_width, src_height,0,0);
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
209 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
210
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
211 static int
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
212 query_format(uint32_t format)
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
213 {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
214 switch(format) {
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
215 case IMGFMT_BGR8:
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
216 if(tdfx_cfg.screen_format == TDFX_VID_FORMAT_BGR8)
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 9569
diff changeset
217 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN | VFCAP_ACCEPT_STRIDE;
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
218 return 0;
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
219 case IMGFMT_YUY2:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
220 case IMGFMT_UYVY:
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
221 case IMGFMT_BGR15:
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
222 case IMGFMT_BGR16:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
223 case IMGFMT_BGR24:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
224 case IMGFMT_BGR32:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
225 case IMGFMT_YV12:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
226 case IMGFMT_I420:
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
227 if(tdfx_cfg.screen_format == TDFX_VID_FORMAT_BGR8)
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
228 return 0;
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 9569
diff changeset
229 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN | VFCAP_ACCEPT_STRIDE;
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
230 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
231 return 0;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
232 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
233
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
234 static int
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 9569
diff changeset
235 config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format)
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
236 {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
237
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
238 if(tdfx_fd < 0)
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
239 return 1;
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
240 // When we are run as sub vo we must follow the size gaven to us
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 9569
diff changeset
241 if(!(flags & VOFLAG_XOVERLAY_SUB_VO)) {
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
242 if(!vo_screenwidth)
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
243 vo_screenwidth = tdfx_cfg.screen_width;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
244 if(!vo_screenheight)
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
245 vo_screenheight = tdfx_cfg.screen_height;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
246
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
247 aspect_save_orig(width,height);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
248 aspect_save_prescale(d_width,d_height);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
249 aspect_save_screenres(vo_screenwidth,vo_screenheight);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
250
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 9569
diff changeset
251 if(flags&VOFLAG_FULLSCREEN) { /* -fs */
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
252 aspect(&d_width,&d_height,A_ZOOM);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
253 vo_fs = VO_TRUE;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
254 } else {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
255 aspect(&d_width,&d_height,A_NOZOOM);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
256 vo_fs = VO_FALSE;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
257 }
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
258 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
259 src_width = width;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
260 src_height = height;
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
261 buffer_size = 0;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
262 buffer_stride[0] = 0;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
263 src_fmt = 0;
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
264 switch(format) {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
265 case IMGFMT_BGR8:
9567
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
266 case IMGFMT_BGR24:
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
267 case IMGFMT_BGR32:
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
268 if(use_overlay)
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
269 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_TDFXVID_NonNativeOverlayFormatNeedConversion);
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
270 case IMGFMT_BGR15:
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
271 case IMGFMT_BGR16:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
272 src_bpp = ((format & 0x3F)+7)/8;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
273 break;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
274 case IMGFMT_YV12:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
275 case IMGFMT_I420:
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
276 buffer_size = src_width * src_height * 3 / 2;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
277 buffer_stride[0] = ((src_width+1)/2)*2;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
278 buffer_stride[1] = buffer_stride[2] = buffer_stride[0]/2;
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
279 src_fmt = TDFX_VID_FORMAT_YUY2;
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
280 case IMGFMT_YUY2:
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
281 case IMGFMT_UYVY:
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
282 src_bpp = 2;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
283 break;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
284 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
285 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_TDFXVID_UnsupportedInputFormat,format);
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
286 return 1;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
287 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
288
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
289 img_fmt = format;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
290 src_stride = src_width*src_bpp;
9567
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
291 // The overlay need a 4 bytes aligned stride
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
292 if(use_overlay)
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
293 src_stride = ((src_stride+3)/4)*4;
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
294 if(!src_fmt)
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
295 src_fmt = format;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
296 if(!buffer_size)
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
297 buffer_size = src_stride*src_height;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
298 if(!buffer_stride[0])
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
299 buffer_stride[0] = src_stride;
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
300
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
301 dst_fmt = tdfx_cfg.screen_format;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
302 dst_bpp = ((dst_fmt & 0x3F)+7)/8;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
303 dst_width = d_width;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
304 dst_height = d_height;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
305 dst_stride = tdfx_cfg.screen_stride;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
306
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
307 tdfx_page = tdfx_cfg.screen_stride*tdfx_cfg.screen_height;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
308 front_buffer = tdfx_cfg.screen_start;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
309 back_buffer = front_buffer + tdfx_page;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
310
9567
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
311 while(use_overlay) {
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
312 tdfx_vid_overlay_t ov;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
313 uint32_t ov_fmt = src_fmt, ov_stride = src_stride;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
314 // Align the buffer
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
315 back_buffer = (((back_buffer+3)/4)*4);
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
316 // With the overlay the front buffer is not on the screen
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
317 // so we take the back buffer
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
318 front_buffer = back_buffer;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
319 switch(src_fmt) {
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
320 case IMGFMT_BGR8:
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
321 case IMGFMT_BGR24:
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
322 case IMGFMT_BGR32:
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
323 back_buffer = front_buffer + 2*(src_stride*src_height);
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
324 ov_stride = dst_stride = src_width<<1;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
325 ov_fmt = IMGFMT_BGR16;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
326 break;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
327 }
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
328 ov.src[0] = front_buffer;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
329 ov.src[1] = front_buffer + (src_stride*src_height);
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
330 ov.src_width = src_width;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
331 ov.src_height = src_height;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
332 ov.src_stride = ov_stride;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
333 ov.format = ov_fmt;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
334 ov.dst_width = dst_width;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
335 ov.dst_height = dst_height;
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
336 ov.dst_x = vo_dx;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
337 ov.dst_y = vo_dy;
9567
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
338 ov.use_colorkey = 0;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
339
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
340 if(ioctl(tdfx_fd,TDFX_VID_SET_OVERLAY,&ov)) {
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
341 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_TDFXVID_OverlaySetupFailed);
9567
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
342 use_overlay = 0;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
343 break;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
344 }
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
345 tdfx_ov = ov;
9567
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
346 if(use_overlay == 1) {
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
347 if(ioctl(tdfx_fd,TDFX_VID_OVERLAY_ON)) {
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
348 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_TDFXVID_OverlayOnFailed);
9567
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
349 use_overlay = 0;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
350 break;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
351 }
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
352 use_overlay++;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
353 }
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
354
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
355 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_TDFXVID_OverlayReady,
9567
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
356 src_width,src_stride,src_height,src_bpp,
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
357 dst_width,dst_stride,dst_height,dst_bpp);
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
358 break;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
359 }
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
360
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
361 if(!use_overlay)
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
362 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_TDFXVID_TextureBlitReady,
9567
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
363 src_width,src_stride,src_height,src_bpp,
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
364 dst_width,dst_stride,dst_height,dst_bpp);
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
365
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
366 return 0;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
367 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
368
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
369 static void
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
370 uninit(void)
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
371 {
9567
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
372 if(use_overlay == 2) {
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
373 if(ioctl(tdfx_fd,TDFX_VID_OVERLAY_OFF))
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
374 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_TDFXVID_OverlayOffFailed);
9567
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
375 use_overlay--;
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
376 }
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
377 close(tdfx_fd);
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
378 tdfx_fd = -1;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
379 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
380
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
381
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
382 static void check_events(void)
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
383 {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
384 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
385
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
386 static int preinit(const char *arg)
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
387 {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
388
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
389 tdfx_fd = open(arg ? arg : "/dev/tdfx_vid", O_RDWR);
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
390 if(tdfx_fd < 0) {
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
391 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_TDFXVID_CantOpen,arg ? arg : "/dev/tdfx_vid",
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
392 strerror(errno));
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
393 return 1;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
394 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
395
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
396 if(ioctl(tdfx_fd,TDFX_VID_GET_CONFIG,&tdfx_cfg)) {
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
397 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_TDFXVID_CantGetCurrentCfg,strerror(errno));
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
398 return 1;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
399 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
400
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
401 mp_msg(MSGT_VO,MSGL_INFO, "tdfx_vid version %d\n"
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
402 " Ram: %d\n"
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
403 " Screen: %d x %d\n"
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
404 " Format: %c%c%c%d\n",
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
405 tdfx_cfg.version,
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
406 tdfx_cfg.ram_size,
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
407 tdfx_cfg.screen_width, tdfx_cfg.screen_height,
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
408 tdfx_cfg.screen_format>>24,(tdfx_cfg.screen_format>>16)&0xFF,
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
409 (tdfx_cfg.screen_format>>8)&0xFF,tdfx_cfg.screen_format&0xFF);
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
410
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
411 // For now just allocate more than i ever need
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
412 agp_mem = mmap( NULL, 1024*768*4, PROT_READ | PROT_WRITE, MAP_SHARED,
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
413 tdfx_fd, 0);
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
414
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
415 if(agp_mem == MAP_FAILED) {
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
416 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_TDFXVID_MemmapFailed);
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
417 return 1;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
418 }
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
419
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
420 memset(agp_mem,0,1024*768*4);
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
421
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
422 return 0;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
423 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
424
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
425 static uint32_t get_image(mp_image_t *mpi) {
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
426 int buf = 0;
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
427
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
428 #ifdef VERBOSE
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
429 printf("Get image %d\n",buf);
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
430 #endif
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
431
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
432 // Currently read are too slow bcs we read from the
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
433 // agp aperture and not the memory directly
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
434 //if(mpi->flags&MP_IMGFLAG_READABLE) return VO_FALSE;
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
435
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
436 if(mpi->flags&MP_IMGFLAG_READABLE &&
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
437 (mpi->type==MP_IMGTYPE_IPB || mpi->type==MP_IMGTYPE_IP)){
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
438 // reference (I/P) frame of IP or IPB:
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
439 if(num_buffer<2) return VO_FALSE; // not enough
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
440 current_ip_buf^=1;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
441 // for IPB with 2 buffers we can DR only one of the 2 P frames:
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
442 if(mpi->type==MP_IMGTYPE_IPB && num_buffer<3 && current_ip_buf) return VO_FALSE;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
443 buf=current_ip_buf;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
444 if(mpi->type==MP_IMGTYPE_IPB) ++buf; // preserve space for B
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
445 }
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
446
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
447 switch(mpi->imgfmt) {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
448 case IMGFMT_YUY2:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
449 case IMGFMT_UYVY:
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
450 case IMGFMT_BGR8:
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
451 case IMGFMT_BGR15:
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
452 case IMGFMT_BGR16:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
453 case IMGFMT_BGR24:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
454 case IMGFMT_BGR32:
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
455 mpi->planes[0] = agp_mem + buf * buffer_size;
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
456 mpi->stride[0] = src_stride;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
457 break;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
458 case IMGFMT_YV12:
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
459 case IMGFMT_I420:
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
460 mpi->planes[0] = agp_mem + buf * buffer_size;
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
461 mpi->stride[0] = mpi->width;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
462 mpi->planes[1] = mpi->planes[0] + mpi->stride[0]*mpi->height;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
463 mpi->stride[1] = mpi->chroma_width;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
464 mpi->planes[2] = mpi->planes[1] + mpi->stride[1]*mpi->chroma_height;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
465 mpi->stride[2] = mpi->chroma_width;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
466 break;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
467 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
468 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_TDFXVID_GetImageTodo);
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
469 return VO_FALSE;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
470 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
471 mpi->flags |= MP_IMGFLAG_DIRECT;
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
472 mpi->priv = (void*)buf;
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
473
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
474 return VO_TRUE;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
475 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
476
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
477 static uint32_t start_slice(mp_image_t *mpi){
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
478 int buf = 0;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
479
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
480 #ifdef VERBOSE
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
481 printf("Start slices %d\n",buf);
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
482 #endif
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
483
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
484 if(mpi->flags & MP_IMGFLAG_DIRECT)
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
485 buf = (int)mpi->priv;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
486 current_buffer = buf;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
487
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
488 return VO_TRUE;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
489 }
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
490
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
491 static uint32_t draw_image(mp_image_t *mpi){
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
492 int buf = 0;
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
493 tdfx_vid_agp_move_t mov;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
494 tdfx_vid_yuv_t yuv;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
495 int p;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
496 uint8_t* planes[3];
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
497
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
498 #ifdef VERBOSE
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
499 printf("Draw image %d\n",buf);
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
500 #endif
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
501
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
502 if(mpi->flags & MP_IMGFLAG_DIRECT)
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
503 buf = (int)mpi->priv;
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
504
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
505 switch(mpi->imgfmt) {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
506 case IMGFMT_YUY2:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
507 case IMGFMT_UYVY:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
508 case IMGFMT_BGR8:
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
509 case IMGFMT_BGR15:
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
510 case IMGFMT_BGR16:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
511 case IMGFMT_BGR24:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
512 case IMGFMT_BGR32:
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
513 if(!(mpi->flags&(MP_IMGFLAG_DIRECT|MP_IMGFLAG_DRAW_CALLBACK))) {
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
514 // copy to agp_mem
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
515 #ifdef VERBOSE
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
516 printf("Memcpy\n");
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
517 #endif
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
518 planes[0] = agp_mem + buf * buffer_size;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
519 mem2agpcpy_pic(planes[0],mpi->planes[0],src_bpp*mpi->width,mpi->height,
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
520 buffer_stride[0],mpi->stride[0]);
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
521 } else
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
522 planes[0] = agp_mem + buf * buffer_size;
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
523
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
524 mov.move2 = TDFX_VID_MOVE_2_PACKED;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
525 mov.width = mpi->width*((mpi->bpp+7)/8);
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
526 mov.height = mpi->height;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
527 mov.src = planes[0] - agp_mem;
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
528 mov.src_stride = buffer_stride[0];
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
529
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
530 mov.dst = back_buffer;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
531 mov.dst_stride = src_stride;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
532
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
533 if(ioctl(tdfx_fd,TDFX_VID_AGP_MOVE,&mov))
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
534 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_TDFXVID_AgpMoveFailed);
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
535 break;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
536
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
537 case IMGFMT_YV12:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
538 case IMGFMT_I420:
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
539 if(!(mpi->flags&(MP_IMGFLAG_DIRECT|MP_IMGFLAG_DRAW_CALLBACK))) {
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
540 // Copy to agp mem
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
541 #ifdef VERBOSE
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
542 printf("Memcpy\n");
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
543 #endif
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
544 planes[0] = agp_mem + buf * buffer_size;
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
545 memcpy_pic(planes[0],mpi->planes[0],mpi->width,mpi->height,
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
546 buffer_stride[0],mpi->stride[0]);
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
547 planes[1] = planes[0] + (mpi->height*mpi->stride[0]);
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
548 memcpy_pic(planes[1],mpi->planes[1],mpi->chroma_width,mpi->chroma_height,
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
549 buffer_stride[1],mpi->stride[1]);
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
550 planes[2] = planes[1] + (mpi->chroma_height*mpi->stride[1]);
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
551 memcpy_pic(planes[2],mpi->planes[2],mpi->chroma_width,mpi->chroma_height,
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
552 buffer_stride[2],mpi->stride[2]);
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
553 } else {
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
554 planes[0] = agp_mem + buf * buffer_size;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
555 planes[1] = planes[0] + buffer_stride[0] * src_height;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
556 planes[2] = planes[1] + buffer_stride[1] * src_height/2;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
557 }
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
558
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
559 // Setup the yuv thing
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
560 yuv.base = back_buffer;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
561 yuv.stride = src_stride;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
562 if(ioctl(tdfx_fd,TDFX_VID_SET_YUV,&yuv)) {
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
563 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_TDFXVID_SetYuvFailed);
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
564 break;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
565 }
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
566
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
567
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
568 // Now agp move that
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
569 // Y
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
570 mov.move2 = TDFX_VID_MOVE_2_YUV;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
571 mov.width = mpi->width;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
572 mov.height = mpi->height;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
573 mov.src = planes[0] - agp_mem;
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
574 mov.src_stride = buffer_stride[0];
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
575 mov.dst = 0x0;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
576 mov.dst_stride = TDFX_VID_YUV_STRIDE;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
577
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
578 if(ioctl(tdfx_fd,TDFX_VID_AGP_MOVE,&mov)) {
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
579 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_TDFXVID_AgpMoveFailedOnYPlane);
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
580 break;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
581 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
582 //return 0;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
583 // U
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
584 p = mpi->imgfmt == IMGFMT_YV12 ? 1 : 2;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
585 mov.width = mpi->chroma_width;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
586 mov.height = mpi->chroma_height;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
587 mov.src = planes[p] - agp_mem;
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
588 mov.src_stride = buffer_stride[p];
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
589 mov.dst += TDFX_VID_YUV_PLANE_SIZE;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
590 if(ioctl(tdfx_fd,TDFX_VID_AGP_MOVE,&mov)) {
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
591 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_TDFXVID_AgpMoveFailedOnUPlane);
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
592 break;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
593 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
594 // V
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
595 p = mpi->imgfmt == IMGFMT_YV12 ? 2 : 1;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
596 mov.src = planes[p] - agp_mem;
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
597 mov.src_stride = buffer_stride[p];
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
598 mov.dst += TDFX_VID_YUV_PLANE_SIZE;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
599 if(ioctl(tdfx_fd,TDFX_VID_AGP_MOVE,&mov)) {
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
600 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_TDFXVID_AgpMoveFailedOnVPlane);
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
601 break;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
602 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
603 break;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
604 default:
18335
5766a9d21992 Rename some misspelled and misnamed messages.
diego
parents: 18234
diff changeset
605 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_TDFXVID_UnknownFormat,mpi->imgfmt);
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
606 return VO_TRUE;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
607 }
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
608
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
609 return VO_TRUE;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
610 }
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
611
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
612 static uint32_t fullscreen(void) {
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
613 vo_fs ^= 1;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
614 aspect(&dst_width,&dst_height,vo_fs ? A_ZOOM : A_NOZOOM);
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
615 // This does not work :((
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
616 //clear_screen();
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
617 return VO_TRUE;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
618 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
619
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
620 static uint32_t set_window(mp_win_t* w) {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
621 if(!use_overlay) return VO_FALSE;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
622
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
623 tdfx_ov.dst_x = w->x;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
624 tdfx_ov.dst_y = w->y;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
625 tdfx_ov.dst_width = w->w;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
626 tdfx_ov.dst_height = w->h;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
627
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
628 if(ioctl(tdfx_fd,TDFX_VID_SET_OVERLAY,&tdfx_ov))
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
629 mp_msg(MSGT_VO, MSGL_V, "tdfx_vid: set window failed\n");
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
630
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
631 return VO_TRUE;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
632 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
633
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
634 static uint32_t set_colorkey(mp_colorkey_t* colork) {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
635 if(!use_overlay) return VO_FALSE;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
636
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
637 tdfx_ov.colorkey[0] = tdfx_ov.colorkey[1] = colork->x11;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
638 tdfx_ov.use_colorkey = 1;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
639 tdfx_ov.invert_colorkey = 0;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
640
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
641 if(ioctl(tdfx_fd,TDFX_VID_SET_OVERLAY,&tdfx_ov))
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
642 mp_msg(MSGT_VO, MSGL_V, "tdfx_vid: set colorkey failed\n");
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
643
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
644 return VO_TRUE;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
645 }
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
646
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
647 static int control(uint32_t request, void *data, ...)
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
648 {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
649 switch (request) {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
650 case VOCTRL_QUERY_FORMAT:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
651 return query_format(*((uint32_t*)data));
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
652 case VOCTRL_GET_IMAGE:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
653 return get_image(data);
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
654 case VOCTRL_DRAW_IMAGE:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
655 return draw_image(data);
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
656 case VOCTRL_START_SLICE:
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
657 return start_slice(data);
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
658 case VOCTRL_FULLSCREEN:
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
659 return fullscreen();
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
660 case VOCTRL_XOVERLAY_SUPPORT:
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
661 return VO_TRUE;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
662 case VOCTRL_XOVERLAY_SET_COLORKEY:
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
663 return set_colorkey(data);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
664 case VOCTRL_XOVERLAY_SET_WIN:
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
665 return set_window(data);
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
666 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
667 return VO_NOTIMPL;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
668 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
669