annotate libvo/vo_tdfx_vid.c @ 14742:76d461a061df

Unified colorkey code for vo xv and vo xvmc. Made the code also more flexible. Colorkey drawing is now by default done as proposed by Marko Macek. Patch also approved by iive.
author al
date Sun, 20 Feb 2005 22:43:25 +0000
parents 894d02a6469e
children 05aa13cdf92f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
1 /*
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
2 * vo_tdfx_vid.c
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
3 *
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
4 * Copyright (C) Alban Bedel - 03/2003
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
5 *
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
6 * This file is part of MPlayer, a free movie player.
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
7 *
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
8 * MPlayer is free software; you can redistribute it and/or modify
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
10 * the Free Software Foundation; either version 2, or (at your option)
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
11 * any later version.
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
12 *
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
13 * MPlayer is distributed in the hope that it will be useful,
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
16 * GNU General Public License for more details.
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
17 *
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
19 * along with GNU Make; see the file COPYING. If not, write to
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
20 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
21 *
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
22 */
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
23
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
24 #include <stdio.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
25 #include <stdlib.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
26 #include <string.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
27 #include <errno.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
28 #include <sys/types.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
29 #include <sys/stat.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
30 #include <fcntl.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
31 #include <unistd.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
32 #include <sys/ioctl.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
33 #include <sys/mman.h>
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
34 #include "config.h"
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
35 #include "video_out.h"
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
36 #include "video_out_internal.h"
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
37 #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
38 #include "mp_msg.h"
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
39
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
40 #include "fastmemcpy.h"
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
41 #include "drivers/tdfx_vid.h"
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
42
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
43
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
44 static vo_info_t info =
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
45 {
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
46 "tdfx vid",
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
47 "tdfx_vid",
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
48 "Albeu",
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
49 ""
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
50 };
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
51
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
52 //#define VERBOSE
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
53
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
54 LIBVO_EXTERN(tdfx_vid)
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 tdfx_vid_config_t tdfx_cfg;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
57
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
58 static unsigned char* agp_mem = NULL;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
59 static int tdfx_fd = -1;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
60
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
61 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
62 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
63 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
64
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
65 static uint32_t tdfx_page;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
66 static uint32_t front_buffer;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
67 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
68 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
69 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
70 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
71 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
72 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
73
9567
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
74 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
75 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
76
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
77 // FIXME
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
78 static void clear_screen(void) {
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
79 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
80
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
81 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
82
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
83 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
84 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
85 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
86 mov.src = 0;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
87 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
88 mov.dst = front_buffer;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
89 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
90
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
91 printf("Move %d(%d) x %d => %d \n", mov.width,mov.src_stride,mov.height,mov.dst_stride);
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
92
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
93 if(ioctl(tdfx_fd,TDFX_VID_AGP_MOVE,&mov))
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
94 printf("tdfx_vid: AGP move failed to clear the screen\n");
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
95
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
96 }
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
97
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
98 static uint32_t draw_slice(uint8_t *image[], int stride[], int w,int h,int x,int y)
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) {
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
152 // TDFX_VID_OVERLAY_ON does nothing if the overlay is alredy on
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))
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
179 printf("tdfx_vid: Blit failed\n");
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))
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
201 printf("tdfx_vid: Blit failed\n");
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
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
204 static uint32_t
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
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
211 static uint32_t
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)
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
217 return 3 | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN | VFCAP_ACCEPT_STRIDE;
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;
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
229 return 3 | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN | VFCAP_ACCEPT_STRIDE;
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
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
234 static uint32_t
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
235 config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format)
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
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
241 if(!(fullscreen & VOFLAG_XOVERLAY_SUB_VO)) {
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
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
251 if(fullscreen&0x01) { /* -fs */
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)
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
269 printf("tdfx_vid: Non-native overlay format need conversion\n");
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:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
285 printf("Unsupported input format 0x%x\n",format);
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)) {
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
341 printf("tdfxvid: Overlay setup failed\n");
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)) {
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
348 printf("tdfx_vid: Overlay on failed\n");
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
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
355 printf("tdfx_vid: Overlay ready : %d(%d) x %d @ %d => %d(%d) x %d @ %d\n",
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)
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
362 printf("tdfx_vid : Texture blit ready %d(%d) x %d @ %d => %d(%d) x %d @ %d\n",
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))
0c9c02cfe815 Support for the overlay, that save one stretch blit for bgr16 and YUV formats
albeu
parents: 9559
diff changeset
374 printf("tdfx_vid: Overlay off failed\n");
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
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
386 static uint32_t preinit(const char *arg)
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) {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
391 printf("tdfx_vid: Can't open %s: %s\n",arg ? arg : "/dev/tdfx_vid",
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)) {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
397 printf("tdfx_vid: Can't get current cfg: %s\n",strerror(errno));
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
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
401 printf("tdfx_vid version %d\n"
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) {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
416 printf("tdfx_vid: Memmap failed !!!!!\n");
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:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
468 printf("Get image todo\n");
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 int stride[3];
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
498
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
499 #ifdef VERBOSE
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
500 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
501 #endif
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
502
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
503 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
504 buf = (int)mpi->priv;
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
505
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
506 switch(mpi->imgfmt) {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
507 case IMGFMT_YUY2:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
508 case IMGFMT_UYVY:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
509 case IMGFMT_BGR8:
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
510 case IMGFMT_BGR15:
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
511 case IMGFMT_BGR16:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
512 case IMGFMT_BGR24:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
513 case IMGFMT_BGR32:
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
514 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
515 // copy to agp_mem
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
516 #ifdef VERBOSE
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
517 printf("Memcpy\n");
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
518 #endif
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
519 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
520 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
521 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
522 } else
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
523 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
524
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
525 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
526 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
527 mov.height = mpi->height;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
528 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
529 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
530
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
531 mov.dst = back_buffer;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
532 mov.dst_stride = src_stride;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
533
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
534 if(ioctl(tdfx_fd,TDFX_VID_AGP_MOVE,&mov))
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
535 printf("tdfx_vid: AGP move failed\n");
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
536 break;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
537
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
538 case IMGFMT_YV12:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
539 case IMGFMT_I420:
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
540 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
541 // Copy to agp mem
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
542 #ifdef VERBOSE
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
543 printf("Memcpy\n");
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
544 #endif
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
545 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
546 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
547 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
548 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
549 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
550 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
551 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
552 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
553 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
554 } else {
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
555 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
556 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
557 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
558 }
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
559
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
560 // Setup the yuv thing
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
561 yuv.base = back_buffer;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
562 yuv.stride = src_stride;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
563 if(ioctl(tdfx_fd,TDFX_VID_SET_YUV,&yuv)) {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
564 printf("tdfx_vid: Set yuv failed\n");
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
565 break;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
566 }
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
567
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
568
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
569 // Now agp move that
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
570 // Y
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
571 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
572 mov.width = mpi->width;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
573 mov.height = mpi->height;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
574 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
575 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
576 mov.dst = 0x0;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
577 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
578
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
579 if(ioctl(tdfx_fd,TDFX_VID_AGP_MOVE,&mov)) {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
580 printf("tdfx_vid: AGP move failed on Y plane\n");
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
581 break;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
582 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
583 //return 0;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
584 // U
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
585 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
586 mov.width = mpi->chroma_width;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
587 mov.height = mpi->chroma_height;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
588 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
589 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
590 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
591 if(ioctl(tdfx_fd,TDFX_VID_AGP_MOVE,&mov)) {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
592 printf("tdfx_vid: AGP move failed on U plane\n");
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
593 break;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
594 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
595 // V
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
596 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
597 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
598 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
599 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
600 if(ioctl(tdfx_fd,TDFX_VID_AGP_MOVE,&mov)) {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
601 printf("tdfx_vid: AGP move failed on U plane\n");
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
602 break;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
603 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
604 break;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
605 default:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
606 printf("What's that for a format 0x%x\n",mpi->imgfmt);
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
607 return VO_TRUE;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
608 }
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
609
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
610 return VO_TRUE;
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
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
613 static uint32_t fullscreen(void) {
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
614 vo_fs ^= 1;
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
615 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
616 // This does not work :((
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
617 //clear_screen();
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
618 return VO_TRUE;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
619 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
620
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
621 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
622 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
623
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_x = w->x;
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_y = w->y;
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_width = w->w;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
627 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
628
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
629 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
630 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
631
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
632 return VO_TRUE;
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
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
635 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
636 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
637
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
638 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
639 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
640 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
641
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
642 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
643 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
644
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
645 return VO_TRUE;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
646 }
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
647
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
648 static uint32_t control(uint32_t request, void *data, ...)
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
649 {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
650 switch (request) {
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
651 case VOCTRL_QUERY_FORMAT:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
652 return query_format(*((uint32_t*)data));
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
653 case VOCTRL_GET_IMAGE:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
654 return get_image(data);
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
655 case VOCTRL_DRAW_IMAGE:
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
656 return draw_image(data);
9559
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
657 case VOCTRL_START_SLICE:
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
658 return start_slice(data);
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
659 case VOCTRL_FULLSCREEN:
9883afd390dc Update, add support for DR and draw image. Sadly reading from the agp
albeu
parents: 9546
diff changeset
660 return fullscreen();
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
661 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
662 return VO_TRUE;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents: 9567
diff changeset
663 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
664 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
665 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
666 return set_window(data);
9546
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
667 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
668 return VO_NOTIMPL;
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
669 }
8feb4bb5b334 vo tdfx vid, even faster than tdfxfb and that's just the beginning ;)
albeu
parents:
diff changeset
670