annotate libvo/vo_vesa.c @ 16708:89504641c2a5

100000l to me fixdelay() pre-read a frame to make pts sane, and then called slowseek(), which AGAIN read another frame, and then tries to decode it (which breaks as all frames should be read)
author ods15
date Sat, 08 Oct 2005 17:21:00 +0000
parents 578e8b4c3e7f
children 55b59021b953
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2519
6f3fa9bc3b27 yv12 to yv12 scaler
michael
parents: 2506
diff changeset
1 /*
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
2 * video_out_vesa.c
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
3 *
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
4 * Copyright (C) Nick Kurshev <nickols_k@mail.ru> - Oct 2001
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
5 *
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
6 * You can redistribute this file under terms and conditions
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
7 * of GNU General Public licence v2.
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
8 * This file is partly based on vbetest.c from lrmi distributive.
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
9 */
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
10
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
11 /*
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
12 TODO:
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
13 - hw YUV support (need volunteers who have corresponding hardware)
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
14 - triple buffering (if it will really speedup playback).
2692
b8e628b7a029 Minor notes
nick
parents: 2689
diff changeset
15 note: triple buffering requires VBE 3.0 - need volunteers.
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
16 */
2775
8e3875816f6d added missing #include <malloc.h>
pl
parents: 2774
diff changeset
17 #include "config.h"
7069
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
18 #include "gtf.h"
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
19 #include <stdio.h>
2775
8e3875816f6d added missing #include <malloc.h>
pl
parents: 2774
diff changeset
20 #ifdef HAVE_MALLOC_H
8e3875816f6d added missing #include <malloc.h>
pl
parents: 2774
diff changeset
21 #include <malloc.h>
8e3875816f6d added missing #include <malloc.h>
pl
parents: 2774
diff changeset
22 #endif
2446
6fb598bd7ede Suppressing warnings
nick
parents: 2410
diff changeset
23 #include <stdlib.h>
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
24 #include <string.h>
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
25 #include <stddef.h>
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
26 #include <limits.h>
4739
a2df307ed979 Screenshot on the fly
nick
parents: 4667
diff changeset
27 #include <unistd.h>
a2df307ed979 Screenshot on the fly
nick
parents: 4667
diff changeset
28 #include <pwd.h>
a2df307ed979 Screenshot on the fly
nick
parents: 4667
diff changeset
29 #include <sys/types.h>
a2df307ed979 Screenshot on the fly
nick
parents: 4667
diff changeset
30 #include <sys/stat.h>
8791
668b30187d48 Check if we can open /dev/mem in preinit(), so we can exit cleanly.
filon
parents: 8786
diff changeset
31 #include <fcntl.h>
4739
a2df307ed979 Screenshot on the fly
nick
parents: 4667
diff changeset
32
16256
578e8b4c3e7f use libvbe from vesautils
alex
parents: 16196
diff changeset
33 #include <vbe.h>
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
34
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
35 #include "video_out.h"
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
36 #include "video_out_internal.h"
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
37
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
38 #include "fastmemcpy.h"
2337
e6d8e9a54afa OSD support
nick
parents: 2336
diff changeset
39 #include "sub.h"
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
40 #include "bswap.h"
2689
6a5b6b16d85c Use standard aspect code
nick
parents: 2688
diff changeset
41 #include "aspect.h"
3202
e9b18714e3dc Minor optimization
nick
parents: 2971
diff changeset
42 #include "vesa_lvo.h"
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4083
diff changeset
43 #ifdef CONFIG_VIDIX
4030
922241968c63 Embedding vidix
nick
parents: 4002
diff changeset
44 #include "vosub_vidix.h"
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4083
diff changeset
45 #endif
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
46
2298
674acdf0aa43 SwScaling support
nick
parents: 2296
diff changeset
47 #include "../postproc/swscale.h"
10233
35f52ad860a0 vf_scale.h & related cleanup & some small warning fix by dominik
michael
parents: 9958
diff changeset
48 #include "../libmpcodecs/vf_scale.h"
2298
674acdf0aa43 SwScaling support
nick
parents: 2296
diff changeset
49
4739
a2df307ed979 Screenshot on the fly
nick
parents: 4667
diff changeset
50
a2df307ed979 Screenshot on the fly
nick
parents: 4667
diff changeset
51 #ifdef HAVE_PNG
a2df307ed979 Screenshot on the fly
nick
parents: 4667
diff changeset
52 extern vo_functions_t video_out_png;
a2df307ed979 Screenshot on the fly
nick
parents: 4667
diff changeset
53 #endif
a2df307ed979 Screenshot on the fly
nick
parents: 4667
diff changeset
54
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
55 extern int verbose;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
56
7069
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
57 extern char *monitor_hfreq_str;
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
58 extern char *monitor_vfreq_str;
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
59 extern char *monitor_dotclock_str;
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
60
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
61 #define MAX_BUFFERS 3
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
62
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
63 #ifndef max
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
64 #define max(a,b) ((a)>(b)?(a):(b))
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
65 #endif
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
66 #ifndef min
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
67 #define min(a,b) ((a)<(b)?(a):(b))
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
68 #endif
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
69
2688
e9f6634c6374 Code cleanup
nick
parents: 2686
diff changeset
70 #define UNUSED(x) ((void)(x)) /**< Removes warning about unused arguments */
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
71
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7690
diff changeset
72 static vo_info_t info =
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
73 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
74 "VESA VBE 2.0 video output",
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
75 "vesa",
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
76 "Nick Kurshev <nickols_k@mail.ru>",
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
77 "Requires ROOT privileges"
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
78 };
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
79
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7690
diff changeset
80 LIBVO_EXTERN(vesa)
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7690
diff changeset
81
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
82 /* driver data */
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
83
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
84 struct win_frame
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
85 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
86 uint8_t *ptr; /* pointer to window's frame memory */
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
87 uint32_t low; /* lowest boundary of frame */
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
88 uint32_t high; /* highest boundary of frame */
2610
65cb69a90a9f vo_vesa: DGA support
nick
parents: 2554
diff changeset
89 char idx; /* indicates index of relocatable frame (A=0 or B=1)
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
90 special case for DGA: idx=-1
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
91 idx=-2 indicates invalid frame, exists only in init() */
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
92 };
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
93
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
94 static void (*cpy_blk_fnc)(unsigned long,uint8_t *,unsigned long) = NULL;
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
95
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
96 static uint32_t srcW=0,srcH=0,srcBpp,srcFourcc; /* source image description */
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
97 static uint32_t dstBpp,dstW, dstH,dstFourcc; /* destinition image description */
2298
674acdf0aa43 SwScaling support
nick
parents: 2296
diff changeset
98
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9380
diff changeset
99 static struct SwsContext * sws = NULL;
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
100
2329
fc52a0a1626f Support of: -x -y -bpp
nick
parents: 2328
diff changeset
101 static int32_t x_offset,y_offset; /* to center image on screen */
9170
bcf4bf10f9c7 hopefully better uninit check
arpi
parents: 8792
diff changeset
102 static unsigned init_mode=0; /* mode before run of mplayer */
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
103 static void *init_state = NULL; /* state before run of mplayer */
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
104 static struct win_frame win; /* real-mode window to video memory */
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
105 static uint8_t *dga_buffer = NULL; /* for yuv2rgb and sw_scaling */
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
106 static unsigned video_mode; /* selected video mode for playback */
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
107 static struct VesaModeInfoBlock video_mode_info;
2331
9e8585a7182e Final fix of libmpeg2 zooming: flipping page support
nick
parents: 2329
diff changeset
108 static int flip_trigger = 0;
2337
e6d8e9a54afa OSD support
nick
parents: 2336
diff changeset
109 static void (*draw_alpha_fnc)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride);
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
110
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
111 /* multibuffering */
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
112 uint8_t* video_base; /* should be never changed */
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
113 uint32_t multi_buff[MAX_BUFFERS]; /* contains offsets of buffers */
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
114 uint8_t multi_size=0; /* total number of buffers */
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
115 uint8_t multi_idx=0; /* active buffer */
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
116
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents: 2775
diff changeset
117 /* Linux Video Overlay */
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents: 2775
diff changeset
118 static const char *lvo_name = NULL;
9883
3a407acefec5 multiple init fix by Aurelien JACOBS <aurel@gnuage.org>
alex
parents: 9714
diff changeset
119 static int lvo_opened = 0;
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4083
diff changeset
120 #ifdef CONFIG_VIDIX
4030
922241968c63 Embedding vidix
nick
parents: 4002
diff changeset
121 static const char *vidix_name = NULL;
9883
3a407acefec5 multiple init fix by Aurelien JACOBS <aurel@gnuage.org>
alex
parents: 9714
diff changeset
122 static int vidix_opened = 0;
11158
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 10734
diff changeset
123 static vidix_grkey_t gr_key;
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4083
diff changeset
124 #endif
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents: 2775
diff changeset
125
12660
430a71a762b4 neomagic tv out support throught vesa vbe, patch by Rudolf Marek
alex
parents: 11678
diff changeset
126 /* Neomagic TV out */
430a71a762b4 neomagic tv out support throught vesa vbe, patch by Rudolf Marek
alex
parents: 11678
diff changeset
127 static int neomagic_tvout = 0;
430a71a762b4 neomagic tv out support throught vesa vbe, patch by Rudolf Marek
alex
parents: 11678
diff changeset
128 static int neomagic_tvnorm = NEO_PAL;
430a71a762b4 neomagic tv out support throught vesa vbe, patch by Rudolf Marek
alex
parents: 11678
diff changeset
129
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
130 #define HAS_DGA() (win.idx == -1)
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
131 #define MOVIE_MODE (MODE_ATTR_COLOR | MODE_ATTR_GRAPHICS)
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
132 #define FRAME_MODE (MODE_WIN_RELOCATABLE | MODE_WIN_WRITEABLE)
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
133
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
134 static char * vbeErrToStr(int err)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
135 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
136 char *retval;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
137 static char sbuff[80];
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
138 if((err & VBE_VESA_ERROR_MASK) == VBE_VESA_ERROR_MASK)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
139 {
4667
95fa3901cafc add vsync support for doublebuffering to vo_vesa
atmos4
parents: 4601
diff changeset
140 sprintf(sbuff,"VESA failed = 0x4f%02x",(err & VBE_VESA_ERRCODE_MASK)>>8);
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
141 retval = sbuff;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
142 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
143 else
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
144 switch(err)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
145 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
146 case VBE_OK: retval = "No error"; break;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
147 case VBE_VM86_FAIL: retval = "vm86() syscall failed"; break;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
148 case VBE_OUT_OF_DOS_MEM: retval = "Out of DOS memory"; break;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
149 case VBE_OUT_OF_MEM: retval = "Out of memory"; break;
2360
aa4d96380b7f Broken BIOS test
nick
parents: 2337
diff changeset
150 case VBE_BROKEN_BIOS: retval = "Broken BIOS or DOS TSR"; break;
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
151 default: sprintf(sbuff,"Unknown or internal error: %i",err); retval=sbuff; break;
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
152 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
153 return retval;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
154 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
155
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
156 #define PRINT_VBE_ERR(name,err) { printf("vo_vesa: %s returns: %s\n",name,vbeErrToStr(err)); fflush(stdout); }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
157
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
158 static void vesa_term( void )
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
159 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
160 int err;
9883
3a407acefec5 multiple init fix by Aurelien JACOBS <aurel@gnuage.org>
alex
parents: 9714
diff changeset
161 if(lvo_opened) { vlvo_term(); lvo_opened = 0; }
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4083
diff changeset
162 #ifdef CONFIG_VIDIX
9883
3a407acefec5 multiple init fix by Aurelien JACOBS <aurel@gnuage.org>
alex
parents: 9714
diff changeset
163 else if(vidix_opened) { vidix_term(); vidix_opened = 0; }
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4083
diff changeset
164 #endif
9170
bcf4bf10f9c7 hopefully better uninit check
arpi
parents: 8792
diff changeset
165 if(init_state) if((err=vbeRestoreState(init_state)) != VBE_OK) PRINT_VBE_ERR("vbeRestoreState",err);
bcf4bf10f9c7 hopefully better uninit check
arpi
parents: 8792
diff changeset
166 init_state=NULL;
bcf4bf10f9c7 hopefully better uninit check
arpi
parents: 8792
diff changeset
167 if(init_mode) if((err=vbeSetMode(init_mode,NULL)) != VBE_OK) PRINT_VBE_ERR("vbeSetMode",err);
bcf4bf10f9c7 hopefully better uninit check
arpi
parents: 8792
diff changeset
168 init_mode=0;
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
169 if(HAS_DGA()) vbeUnmapVideoBuffer((unsigned long)win.ptr,win.high);
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
170 if(dga_buffer && !HAS_DGA()) free(dga_buffer);
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
171 vbeDestroy();
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9380
diff changeset
172 if(sws) sws_freeContext(sws);
9170
bcf4bf10f9c7 hopefully better uninit check
arpi
parents: 8792
diff changeset
173 sws=NULL;
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
174 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
175
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
176 #define VALID_WIN_FRAME(offset) (offset >= win.low && offset < win.high)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
177 #define VIDEO_PTR(offset) (win.ptr + offset - win.low)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
178
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
179 static inline void __vbeSwitchBank(unsigned long offset)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
180 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
181 unsigned long gran;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
182 unsigned new_offset;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
183 int err;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
184 gran = video_mode_info.WinGranularity*1024;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
185 new_offset = offset / gran;
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
186 if(HAS_DGA()) { err = -1; goto show_err; }
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
187 if((err=vbeSetWindow(win.idx,new_offset)) != VBE_OK)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
188 {
2610
65cb69a90a9f vo_vesa: DGA support
nick
parents: 2554
diff changeset
189 show_err:
2686
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
190 vesa_term();
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
191 PRINT_VBE_ERR("vbeSetWindow",err);
11678
972d1998bde9 occured --> occurred typo patch by Clinton Roy <croy@dstc.edu.au>
diego
parents: 11565
diff changeset
192 printf("vo_vesa: Fatal error occurred! Can't continue\n");
10734
b105d7aba10d remove exit_player and exit references
alex
parents: 10404
diff changeset
193 abort();
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
194 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
195 win.low = new_offset * gran;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
196 win.high = win.low + video_mode_info.WinSize*1024;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
197 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
198
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
199 static void __vbeSetPixel(int x, int y, int r, int g, int b)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
200 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
201 int x_res = video_mode_info.XResolution;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
202 int y_res = video_mode_info.YResolution;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
203 int shift_r = video_mode_info.RedFieldPosition;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
204 int shift_g = video_mode_info.GreenFieldPosition;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
205 int shift_b = video_mode_info.BlueFieldPosition;
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
206 int pixel_size = (dstBpp+7)/8;
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
207 int bpl = video_mode_info.BytesPerScanLine;
2676
d3393d940aa5 Fixed rgb2rgb in DGA mode
nick
parents: 2649
diff changeset
208 int color;
d3393d940aa5 Fixed rgb2rgb in DGA mode
nick
parents: 2649
diff changeset
209 unsigned offset;
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
210
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
211 if (x < 0 || x >= x_res || y < 0 || y >= y_res) return;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
212 r >>= 8 - video_mode_info.RedMaskSize;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
213 g >>= 8 - video_mode_info.GreenMaskSize;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
214 b >>= 8 - video_mode_info.BlueMaskSize;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
215 color = (r << shift_r) | (g << shift_g) | (b << shift_b);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
216 offset = y * bpl + (x * pixel_size);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
217 if(!VALID_WIN_FRAME(offset)) __vbeSwitchBank(offset);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
218 memcpy(VIDEO_PTR(offset), &color, pixel_size);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
219 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
220
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
221 /*
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
222 Copies part of frame to video memory. Data should be in the same format
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
223 as video memory.
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
224 */
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
225 static void __vbeCopyBlockFast(unsigned long offset,uint8_t *image,unsigned long size)
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
226 {
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
227 memcpy(&win.ptr[offset],image,size);
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
228 }
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
229
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
230 static void __vbeCopyBlock(unsigned long offset,uint8_t *image,unsigned long size)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
231 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
232 unsigned long delta,src_idx = 0;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
233 while(size)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
234 {
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
235 if(!VALID_WIN_FRAME(offset)) __vbeSwitchBank(offset);
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
236 delta = min(size,win.high - offset);
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
237 memcpy(VIDEO_PTR(offset),&image[src_idx],delta);
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
238 src_idx += delta;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
239 offset += delta;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
240 size -= delta;
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
241 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
242 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
243
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
244 /*
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
245 Copies frame to video memory. Data should be in the same format as video
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
246 memory.
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
247 */
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
248
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
249 #define PIXEL_SIZE() ((dstBpp+7)/8)
2676
d3393d940aa5 Fixed rgb2rgb in DGA mode
nick
parents: 2649
diff changeset
250 #define SCREEN_LINE_SIZE(pixel_size) (video_mode_info.XResolution*(pixel_size) )
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
251 #define IMAGE_LINE_SIZE(pixel_size) (dstW*(pixel_size))
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
252
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
253 static void __vbeCopyData(uint8_t *image)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
254 {
2308
ce35271bdb10 Best fix of slice drawing with libmpeg2
nick
parents: 2307
diff changeset
255 unsigned long i,j,image_offset,offset;
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
256 unsigned pixel_size,image_line_size,screen_line_size,x_shift;
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
257 pixel_size = PIXEL_SIZE();
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
258 screen_line_size = SCREEN_LINE_SIZE(pixel_size);
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
259 image_line_size = IMAGE_LINE_SIZE(pixel_size);
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
260 if(dstW == video_mode_info.XResolution)
2306
42cf51474f45 Qualitative speedup for P3 & K7 cpus
nick
parents: 2305
diff changeset
261 {
42cf51474f45 Qualitative speedup for P3 & K7 cpus
nick
parents: 2305
diff changeset
262 /* Special case for zooming */
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
263 (*cpy_blk_fnc)(y_offset*screen_line_size,image,image_line_size*dstH);
2306
42cf51474f45 Qualitative speedup for P3 & K7 cpus
nick
parents: 2305
diff changeset
264 }
42cf51474f45 Qualitative speedup for P3 & K7 cpus
nick
parents: 2305
diff changeset
265 else
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
266 {
2306
42cf51474f45 Qualitative speedup for P3 & K7 cpus
nick
parents: 2305
diff changeset
267 x_shift = x_offset*pixel_size;
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
268 for(j=0,i=y_offset;j<dstH;i++,j++)
2306
42cf51474f45 Qualitative speedup for P3 & K7 cpus
nick
parents: 2305
diff changeset
269 {
42cf51474f45 Qualitative speedup for P3 & K7 cpus
nick
parents: 2305
diff changeset
270 offset = i*screen_line_size+x_shift;
42cf51474f45 Qualitative speedup for P3 & K7 cpus
nick
parents: 2305
diff changeset
271 image_offset = j*image_line_size;
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
272 (*cpy_blk_fnc)(offset,&image[image_offset],image_line_size);
2306
42cf51474f45 Qualitative speedup for P3 & K7 cpus
nick
parents: 2305
diff changeset
273 }
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
274 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
275 }
2328
00f64d5858b8 Bad fix of libmpeg2 zooming
nick
parents: 2308
diff changeset
276
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
277 /* is called for yuv only */
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
278 static int draw_slice(uint8_t *image[], int stride[], int w,int h,int x,int y)
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
279 {
14796
e98f3d37bc1c strides should always be signed
rfelker
parents: 13568
diff changeset
280 int dstride=HAS_DGA()?video_mode_info.XResolution:dstW;
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
281 uint8_t *dst[3]= {dga_buffer, NULL, NULL};
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
282 int dstStride[3];
2504
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents: 2446
diff changeset
283 if(verbose > 2)
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents: 2446
diff changeset
284 printf("vo_vesa: draw_slice was called: w=%u h=%u x=%u y=%u\n",w,h,x,y);
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
285 dstStride[0]=dstride*((dstBpp+7)/8);
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
286 dstStride[1]=
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
287 dstStride[2]=dstStride[0]>>1;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
288 if(HAS_DGA()) dst[0] += y_offset*SCREEN_LINE_SIZE(PIXEL_SIZE())+x_offset*PIXEL_SIZE();
10404
fdcb22f51ec3 10l (red <-> blue) fix
michael
parents: 10233
diff changeset
289 sws_scale_ordered(sws,image,stride,y,h,dst,dstStride);
2331
9e8585a7182e Final fix of libmpeg2 zooming: flipping page support
nick
parents: 2329
diff changeset
290 flip_trigger = 1;
2298
674acdf0aa43 SwScaling support
nick
parents: 2296
diff changeset
291 return 0;
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
292 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
293
4572
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
294 /* Please comment it out if you want have OSD within movie */
6825
2cbf7d447bb2 Disable OSD outside movie, because it's not redrawn currently, user can use -vop expand to get osd outisde movie.
atmos4
parents: 6203
diff changeset
295 /*#define OSD_OUTSIDE_MOVIE 1*/
4572
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
296
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
297 static void draw_alpha_32(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
298 {
14796
e98f3d37bc1c strides should always be signed
rfelker
parents: 13568
diff changeset
299 int dstride=HAS_DGA()?video_mode_info.XResolution:dstW;
4572
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
300 #ifndef OSD_OUTSIDE_MOVIE
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
301 if(HAS_DGA())
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
302 {
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
303 x0 += x_offset;
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
304 y0 += y_offset;
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
305 }
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
306 #endif
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
307 vo_draw_alpha_rgb32(w,h,src,srca,stride,dga_buffer+4*(y0*dstride+x0),4*dstride);
2337
e6d8e9a54afa OSD support
nick
parents: 2336
diff changeset
308 }
e6d8e9a54afa OSD support
nick
parents: 2336
diff changeset
309
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
310 static void draw_alpha_24(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
311 {
14796
e98f3d37bc1c strides should always be signed
rfelker
parents: 13568
diff changeset
312 int dstride=HAS_DGA()?video_mode_info.XResolution:dstW;
4572
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
313 #ifndef OSD_OUTSIDE_MOVIE
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
314 if(HAS_DGA())
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
315 {
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
316 x0 += x_offset;
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
317 y0 += y_offset;
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
318 }
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
319 #endif
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
320 vo_draw_alpha_rgb24(w,h,src,srca,stride,dga_buffer+3*(y0*dstride+x0),3*dstride);
2337
e6d8e9a54afa OSD support
nick
parents: 2336
diff changeset
321 }
e6d8e9a54afa OSD support
nick
parents: 2336
diff changeset
322
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
323 static void draw_alpha_16(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
324 {
14796
e98f3d37bc1c strides should always be signed
rfelker
parents: 13568
diff changeset
325 int dstride=HAS_DGA()?video_mode_info.XResolution:dstW;
4572
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
326 #ifndef OSD_OUTSIDE_MOVIE
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
327 if(HAS_DGA())
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
328 {
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
329 x0 += x_offset;
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
330 y0 += y_offset;
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
331 }
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
332 #endif
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
333 vo_draw_alpha_rgb16(w,h,src,srca,stride,dga_buffer+2*(y0*dstride+x0),2*dstride);
2337
e6d8e9a54afa OSD support
nick
parents: 2336
diff changeset
334 }
e6d8e9a54afa OSD support
nick
parents: 2336
diff changeset
335
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
336 static void draw_alpha_15(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
337 {
14796
e98f3d37bc1c strides should always be signed
rfelker
parents: 13568
diff changeset
338 int dstride=HAS_DGA()?video_mode_info.XResolution:dstW;
4572
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
339 #ifndef OSD_OUTSIDE_MOVIE
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
340 if(HAS_DGA())
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
341 {
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
342 x0 += x_offset;
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
343 y0 += y_offset;
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
344 }
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
345 #endif
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
346 vo_draw_alpha_rgb15(w,h,src,srca,stride,dga_buffer+2*(y0*dstride+x0),2*dstride);
2337
e6d8e9a54afa OSD support
nick
parents: 2336
diff changeset
347 }
e6d8e9a54afa OSD support
nick
parents: 2336
diff changeset
348
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
349 static void draw_alpha_null(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
350 {
2688
e9f6634c6374 Code cleanup
nick
parents: 2686
diff changeset
351 UNUSED(x0);
e9f6634c6374 Code cleanup
nick
parents: 2686
diff changeset
352 UNUSED(y0);
e9f6634c6374 Code cleanup
nick
parents: 2686
diff changeset
353 UNUSED(w);
e9f6634c6374 Code cleanup
nick
parents: 2686
diff changeset
354 UNUSED(h);
e9f6634c6374 Code cleanup
nick
parents: 2686
diff changeset
355 UNUSED(src);
e9f6634c6374 Code cleanup
nick
parents: 2686
diff changeset
356 UNUSED(srca);
e9f6634c6374 Code cleanup
nick
parents: 2686
diff changeset
357 UNUSED(stride);
2337
e6d8e9a54afa OSD support
nick
parents: 2336
diff changeset
358 }
e6d8e9a54afa OSD support
nick
parents: 2336
diff changeset
359
e6d8e9a54afa OSD support
nick
parents: 2336
diff changeset
360
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
361 static void draw_osd(void)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
362 {
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
363 uint32_t w,h;
2504
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents: 2446
diff changeset
364 if(verbose > 2)
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents: 2446
diff changeset
365 printf("vo_vesa: draw_osd was called\n");
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents: 2775
diff changeset
366 {
4572
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
367 #ifdef OSD_OUTSIDE_MOVIE
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
368 w = HAS_DGA()?video_mode_info.XResolution:dstW;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
369 h = HAS_DGA()?video_mode_info.YResolution:dstH;
4572
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
370 #else
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
371 w = dstW;
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
372 h = dstH;
67d10f13a930 Configurable OSD zones
nick
parents: 4554
diff changeset
373 #endif
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents: 2775
diff changeset
374 if(dga_buffer) vo_draw_text(w,h,draw_alpha_fnc);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents: 2775
diff changeset
375 }
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
376 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
377
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
378 static void flip_page(void)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
379 {
2504
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents: 2446
diff changeset
380 if(verbose > 2)
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents: 2446
diff changeset
381 printf("vo_vesa: flip_page was called\n");
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
382 if(flip_trigger)
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
383 {
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
384 if(!HAS_DGA()) __vbeCopyData(dga_buffer);
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
385 flip_trigger = 0;
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
386 }
4493
be41ab8c8918 code cleanup
nick
parents: 4434
diff changeset
387 if(vo_doublebuffering && multi_size > 1)
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
388 {
2686
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
389 int err;
4667
95fa3901cafc add vsync support for doublebuffering to vo_vesa
atmos4
parents: 4601
diff changeset
390 if((err=vbeSetDisplayStart(multi_buff[multi_idx],vo_vsync)) != VBE_OK)
2686
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
391 {
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
392 vesa_term();
2692
b8e628b7a029 Minor notes
nick
parents: 2689
diff changeset
393 PRINT_VBE_ERR("vbeSetDisplayStart",err);
11678
972d1998bde9 occured --> occurred typo patch by Clinton Roy <croy@dstc.edu.au>
diego
parents: 11565
diff changeset
394 printf("vo_vesa: Fatal error occurred! Can't continue\n");
10734
b105d7aba10d remove exit_player and exit references
alex
parents: 10404
diff changeset
395 abort();
2686
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
396 }
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
397 multi_idx = multi_idx ? 0 : 1;
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
398 win.ptr = dga_buffer = video_base + multi_buff[multi_idx];
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
399 }
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
400 /*
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
401 else
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
402 if(tripple_buffering)
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
403 {
4667
95fa3901cafc add vsync support for doublebuffering to vo_vesa
atmos4
parents: 4601
diff changeset
404 vbeSetScheduledDisplayStart(multi_buff[multi_idx],vo_vsync);
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
405 multi_idx++;
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
406 if(multi_idx > 2) multi_idx = 0;
4667
95fa3901cafc add vsync support for doublebuffering to vo_vesa
atmos4
parents: 4601
diff changeset
407 win.ptr = dga_buffer = video_base + multi_buff[multi_idx];
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
408 }
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
409 */
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
410 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
411
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
412 /* is called for rgb only */
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
413 static int draw_frame(uint8_t *src[])
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
414 {
2504
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents: 2446
diff changeset
415 if(verbose > 2)
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents: 2446
diff changeset
416 printf("vo_vesa: draw_frame was called\n");
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
417 if(sws)
2504
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents: 2446
diff changeset
418 {
14796
e98f3d37bc1c strides should always be signed
rfelker
parents: 13568
diff changeset
419 int dstride=HAS_DGA()?video_mode_info.XResolution:dstW;
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
420 int srcStride[1];
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
421 uint8_t *dst[3]= {dga_buffer, NULL, NULL};
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
422 int dstStride[3];
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
423 dstStride[0]=dstride*((dstBpp+7)/8);
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
424 dstStride[1]=
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
425 dstStride[2]=dstStride[0]>>1;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
426 if(srcFourcc == IMGFMT_RGB32 || srcFourcc == IMGFMT_BGR32)
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
427 srcStride[0] = srcW*4;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
428 else
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
429 if(srcFourcc == IMGFMT_RGB24 || srcFourcc == IMGFMT_BGR24)
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
430 srcStride[0] = srcW*3;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
431 else
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
432 srcStride[0] = srcW*2;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
433 if(HAS_DGA()) dst[0] += y_offset*SCREEN_LINE_SIZE(PIXEL_SIZE())+x_offset*PIXEL_SIZE();
10404
fdcb22f51ec3 10l (red <-> blue) fix
michael
parents: 10233
diff changeset
434 sws_scale_ordered(sws,src,srcStride,0,srcH,dst,dstStride);
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
435 flip_trigger=1;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
436 }
2504
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents: 2446
diff changeset
437 return 0;
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
438 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
439
2953
b0cf2b649d3c Fixed incorretc terminating of lvo stuff and improving of query_format
nick
parents: 2918
diff changeset
440 #define SUBDEV_NODGA 0x00000001UL
b0cf2b649d3c Fixed incorretc terminating of lvo stuff and improving of query_format
nick
parents: 2918
diff changeset
441 #define SUBDEV_FORCEDGA 0x00000002UL
4362
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
442 static uint32_t subdev_flags = 0xFFFFFFFEUL;
2953
b0cf2b649d3c Fixed incorretc terminating of lvo stuff and improving of query_format
nick
parents: 2918
diff changeset
443 static uint32_t parseSubDevice(const char *sd)
b0cf2b649d3c Fixed incorretc terminating of lvo stuff and improving of query_format
nick
parents: 2918
diff changeset
444 {
b0cf2b649d3c Fixed incorretc terminating of lvo stuff and improving of query_format
nick
parents: 2918
diff changeset
445 uint32_t flags;
b0cf2b649d3c Fixed incorretc terminating of lvo stuff and improving of query_format
nick
parents: 2918
diff changeset
446 flags = 0;
b0cf2b649d3c Fixed incorretc terminating of lvo stuff and improving of query_format
nick
parents: 2918
diff changeset
447 if(strcmp(sd,"nodga") == 0) { flags |= SUBDEV_NODGA; flags &= ~(SUBDEV_FORCEDGA); }
b0cf2b649d3c Fixed incorretc terminating of lvo stuff and improving of query_format
nick
parents: 2918
diff changeset
448 else
b0cf2b649d3c Fixed incorretc terminating of lvo stuff and improving of query_format
nick
parents: 2918
diff changeset
449 if(strcmp(sd,"dga") == 0) { flags &= ~(SUBDEV_NODGA); flags |= SUBDEV_FORCEDGA; }
b0cf2b649d3c Fixed incorretc terminating of lvo stuff and improving of query_format
nick
parents: 2918
diff changeset
450 else
12660
430a71a762b4 neomagic tv out support throught vesa vbe, patch by Rudolf Marek
alex
parents: 11678
diff changeset
451 if(strcmp(sd,"neotv_pal") == 0) { neomagic_tvout = 1; neomagic_tvnorm = NEO_PAL; }
430a71a762b4 neomagic tv out support throught vesa vbe, patch by Rudolf Marek
alex
parents: 11678
diff changeset
452 else
430a71a762b4 neomagic tv out support throught vesa vbe, patch by Rudolf Marek
alex
parents: 11678
diff changeset
453 if(strcmp(sd,"neotv_ntsc") == 0) { neomagic_tvout = 1; neomagic_tvnorm = NEO_NTSC; }
430a71a762b4 neomagic tv out support throught vesa vbe, patch by Rudolf Marek
alex
parents: 11678
diff changeset
454 else
2953
b0cf2b649d3c Fixed incorretc terminating of lvo stuff and improving of query_format
nick
parents: 2918
diff changeset
455 if(memcmp(sd,"lvo:",4) == 0) lvo_name = &sd[4]; /* lvo_name will be valid within init() */
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4083
diff changeset
456 #ifdef CONFIG_VIDIX
4030
922241968c63 Embedding vidix
nick
parents: 4002
diff changeset
457 else
922241968c63 Embedding vidix
nick
parents: 4002
diff changeset
458 if(memcmp(sd,"vidix",5) == 0) vidix_name = &sd[5]; /* vidix_name will be valid within init() */
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4083
diff changeset
459 #endif
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
460 else { printf("vo_vesa: Unknown subdevice: '%s'\n", sd); return 0xFFFFFFFFUL; }
2953
b0cf2b649d3c Fixed incorretc terminating of lvo stuff and improving of query_format
nick
parents: 2918
diff changeset
461 return flags;
b0cf2b649d3c Fixed incorretc terminating of lvo stuff and improving of query_format
nick
parents: 2918
diff changeset
462 }
b0cf2b649d3c Fixed incorretc terminating of lvo stuff and improving of query_format
nick
parents: 2918
diff changeset
463
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
464 static int query_format(uint32_t format)
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
465 {
2504
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents: 2446
diff changeset
466 if(verbose > 2)
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents: 2446
diff changeset
467 printf("vo_vesa: query_format was called: %x (%s)\n",format,vo_format_name(format));
12926
6eb8d78e2d47 10l query format at least when used with vidix, disable colorkeying with vidix, should fix #38 and #33
faust3
parents: 12660
diff changeset
468 #ifdef CONFIG_VIDIX
6eb8d78e2d47 10l query format at least when used with vidix, disable colorkeying with vidix, should fix #38 and #33
faust3
parents: 12660
diff changeset
469 if(vidix_name)return(vidix_query_fourcc(format));
6eb8d78e2d47 10l query format at least when used with vidix, disable colorkeying with vidix, should fix #38 and #33
faust3
parents: 12660
diff changeset
470 #endif
16196
d90f867b870d 10l, patch found in geexbox
alex
parents: 16171
diff changeset
471 if (format == IMGFMT_MPEGPES)
d90f867b870d 10l, patch found in geexbox
alex
parents: 16171
diff changeset
472 return 0;
d90f867b870d 10l, patch found in geexbox
alex
parents: 16171
diff changeset
473 // FIXME: this is just broken...
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 14796
diff changeset
474 return VFCAP_CSP_SUPPORTED | VFCAP_OSD | VFCAP_SWSCALE | VFCAP_ACCEPT_STRIDE; /* due new SwScale code */
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
475 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
476
2686
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
477 static void paintBkGnd( void )
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
478 {
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
479 int x_res = video_mode_info.XResolution;
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
480 int y_res = video_mode_info.YResolution;
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
481 int x, y;
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
482
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
483 for (y = 0; y < y_res; ++y)
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
484 {
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
485 for (x = 0; x < x_res; ++x)
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
486 {
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
487 int r, g, b;
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
488 if ((x & 16) ^ (y & 16))
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
489 {
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
490 r = x * 255 / x_res;
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
491 g = y * 255 / y_res;
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
492 b = 255 - x * 255 / x_res;
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
493 }
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
494 else
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
495 {
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
496 r = 255 - x * 255 / x_res;
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
497 g = y * 255 / y_res;
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
498 b = 255 - y * 255 / y_res;
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
499 }
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
500 __vbeSetPixel(x, y, r, g, b);
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
501 }
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
502 }
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
503 }
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
504
2914
1ccec8cd9310 Screen clearing instead of stupid BIOSes
nick
parents: 2872
diff changeset
505 static void clear_screen( void )
1ccec8cd9310 Screen clearing instead of stupid BIOSes
nick
parents: 2872
diff changeset
506 {
1ccec8cd9310 Screen clearing instead of stupid BIOSes
nick
parents: 2872
diff changeset
507 int x_res = video_mode_info.XResolution;
1ccec8cd9310 Screen clearing instead of stupid BIOSes
nick
parents: 2872
diff changeset
508 int y_res = video_mode_info.YResolution;
1ccec8cd9310 Screen clearing instead of stupid BIOSes
nick
parents: 2872
diff changeset
509 int x, y;
1ccec8cd9310 Screen clearing instead of stupid BIOSes
nick
parents: 2872
diff changeset
510
1ccec8cd9310 Screen clearing instead of stupid BIOSes
nick
parents: 2872
diff changeset
511 for (y = 0; y < y_res; ++y)
1ccec8cd9310 Screen clearing instead of stupid BIOSes
nick
parents: 2872
diff changeset
512 for (x = 0; x < x_res; ++x)
1ccec8cd9310 Screen clearing instead of stupid BIOSes
nick
parents: 2872
diff changeset
513 __vbeSetPixel(x, y, 0, 0, 0);
1ccec8cd9310 Screen clearing instead of stupid BIOSes
nick
parents: 2872
diff changeset
514 }
1ccec8cd9310 Screen clearing instead of stupid BIOSes
nick
parents: 2872
diff changeset
515
2293
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
516 static char *model2str(unsigned char type)
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
517 {
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
518 char *retval;
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
519 switch(type)
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
520 {
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
521 case memText: retval = "Text"; break;
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
522 case memCGA: retval="CGA"; break;
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
523 case memHercules: retval="Hercules"; break;
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
524 case memPL: retval="Planar"; break;
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
525 case memPK: retval="Packed pixel"; break;
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
526 case mem256: retval="256"; break;
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
527 case memRGB: retval="Direct color RGB"; break;
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
528 case memYUV: retval="Direct color YUV"; break;
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
529 default: retval="Unknown"; break;
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
530 }
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
531 return retval;
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
532 }
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
533
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
534 unsigned fillMultiBuffer( unsigned long vsize, unsigned nbuffs )
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
535 {
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
536 unsigned long screen_size, offset;
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
537 unsigned total,i;
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
538 screen_size = video_mode_info.XResolution*video_mode_info.YResolution*((dstBpp+7)/8);
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
539 if(screen_size%64) screen_size=((screen_size/64)*64)+64;
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
540 total = vsize / screen_size;
2918
a4646faefabd No comments
nick
parents: 2914
diff changeset
541 if(verbose) printf("vo_vesa: Can use up to %u video buffers\n",total);
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
542 i = 0;
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
543 offset = 0;
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
544 total = min(total,nbuffs);
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
545 while(i < total) { multi_buff[i++] = offset; offset += screen_size; }
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
546 if(!i)
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
547 printf("vo_vesa: Your have too small size of video memory for this mode:\n"
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
548 "vo_vesa: Requires: %08lX exists: %08lX\n", screen_size, vsize);
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
549 return i;
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
550 }
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
551
7360
18e1b57616fc It prevents mode change when Hsync out of range.
arpi
parents: 7124
diff changeset
552
7069
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
553 static int set_refresh(unsigned x, unsigned y, unsigned mode,struct VesaCRTCInfoBlock *crtc_pass)
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
554 {
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
555 unsigned pixclk;
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
556 float H_freq;
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
557
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
558 range_t *monitor_hfreq = NULL;
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
559 range_t *monitor_vfreq = NULL;
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
560 range_t *monitor_dotclock = NULL;
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
561
7069
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
562 monitor_hfreq = str2range(monitor_hfreq_str);
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
563 monitor_vfreq = str2range(monitor_vfreq_str);
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
564 monitor_dotclock = str2range(monitor_dotclock_str);
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
565
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
566 if (!monitor_hfreq || !monitor_vfreq || !monitor_dotclock) {
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
567 printf("vo_vesa: you have to specify the capabilities of"
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
568 " the monitor. Not changing refresh rate.\n");
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
569 return 0;
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
570 }
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
571
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
572 H_freq = range_max(monitor_hfreq)/1000;
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
573
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
574 // printf("H_freq MAX %f\n",H_freq);
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
575
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
576 do
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
577 {
7360
18e1b57616fc It prevents mode change when Hsync out of range.
arpi
parents: 7124
diff changeset
578 H_freq -= 0.01;
7069
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
579 GTF_calcTimings(x,y,H_freq,GTF_HF,0, 0,crtc_pass);
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
580 // printf("PixelCLK %d\n",(unsigned)crtc_pass->PixelClock);
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
581 }
7360
18e1b57616fc It prevents mode change when Hsync out of range.
arpi
parents: 7124
diff changeset
582 while ( (!in_range(monitor_vfreq,crtc_pass->RefreshRate/100)||
18e1b57616fc It prevents mode change when Hsync out of range.
arpi
parents: 7124
diff changeset
583 !in_range(monitor_hfreq,H_freq*1000))&&(H_freq>0));
7069
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
584
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
585 pixclk = crtc_pass->PixelClock;
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
586 // printf("PIXclk before %d\n",pixclk);
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
587 vbeGetPixelClock(&mode,&pixclk);
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
588 // printf("PIXclk after %d\n",pixclk);
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
589 GTF_calcTimings(x,y,pixclk/1000000,GTF_PF,0,0,crtc_pass);
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
590 // printf("Flags: %x\n",(unsigned) crtc_pass->Flags);
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
591 /*
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
592 printf("hTotal %d\n",crtc_pass->hTotal);
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
593 printf("hSyncStart %d\n",crtc_pass->hSyncStart);
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
594 printf("hSyncEnd %d\n",crtc_pass->hSyncEnd);
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
595
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
596 printf("vTotal %d\n",crtc_pass->vTotal);
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
597 printf("vSyncStart %d\n",crtc_pass->vSyncStart);
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
598 printf("vSyncEnd %d\n",crtc_pass->vSyncEnd);
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
599
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
600 printf("RR %d\n",crtc_pass->RefreshRate);
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
601 printf("PixelCLK %d\n",(unsigned)crtc_pass->PixelClock);*/
7360
18e1b57616fc It prevents mode change when Hsync out of range.
arpi
parents: 7124
diff changeset
602
18e1b57616fc It prevents mode change when Hsync out of range.
arpi
parents: 7124
diff changeset
603 if (!in_range(monitor_vfreq,crtc_pass->RefreshRate/100)||
18e1b57616fc It prevents mode change when Hsync out of range.
arpi
parents: 7124
diff changeset
604 !in_range(monitor_hfreq,H_freq*1000)) {
18e1b57616fc It prevents mode change when Hsync out of range.
arpi
parents: 7124
diff changeset
605 printf( "vo_vesa: Unable to fit the mode into monitor's limitation."
18e1b57616fc It prevents mode change when Hsync out of range.
arpi
parents: 7124
diff changeset
606 " Not changing refresh rate.\n");
18e1b57616fc It prevents mode change when Hsync out of range.
arpi
parents: 7124
diff changeset
607 return 0;
18e1b57616fc It prevents mode change when Hsync out of range.
arpi
parents: 7124
diff changeset
608 }
18e1b57616fc It prevents mode change when Hsync out of range.
arpi
parents: 7124
diff changeset
609
7069
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
610 return 1;
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
611 }
7360
18e1b57616fc It prevents mode change when Hsync out of range.
arpi
parents: 7124
diff changeset
612
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
613 /* fullscreen:
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
614 * bit 0 (0x01) means fullscreen (-fs)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
615 * bit 1 (0x02) means mode switching (-vm)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
616 * bit 2 (0x04) enables software scaling (-zoom)
2335
26fdd1a317ad Again changed logic:
nick
parents: 2333
diff changeset
617 * bit 3 (0x08) enables flipping (-flip) (NK: and for what?)
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
618 */
7069
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
619
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
620 static int
7124
eca7dbad0166 finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents: 7069
diff changeset
621 config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format)
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
622 {
7069
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
623 struct VbeInfoBlock vib;
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
624 struct VesaModeInfoBlock vmib;
7069
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
625 struct VesaCRTCInfoBlock crtc_pass;
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
626 size_t i,num_modes;
4362
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
627 uint32_t w,h;
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
628 unsigned short *mode_ptr,win_seg;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
629 unsigned bpp,best_x = UINT_MAX,best_y=UINT_MAX,best_mode_idx = UINT_MAX;
4601
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
630 int err,fs_mode,use_scaler=0;
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
631 srcW = dstW = width;
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
632 srcH = dstH = height;
2336
b2e0b131c1a7 Again changed logic:
nick
parents: 2335
diff changeset
633 fs_mode = 0;
4362
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
634 if(subdev_flags == 0xFFFFFFFEUL)
2971
56faed773768 Added preinit of lvo stuff
nick
parents: 2966
diff changeset
635 {
4362
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
636 printf("vo_vesa: detected internal fatal error: init is called before preinit\n");
2971
56faed773768 Added preinit of lvo stuff
nick
parents: 2966
diff changeset
637 return -1;
4362
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
638 }
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
639 if(subdev_flags == 0xFFFFFFFFUL) return -1;
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 14796
diff changeset
640 if(flags & VOFLAG_FLIPPING)
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
641 {
2329
fc52a0a1626f Support of: -x -y -bpp
nick
parents: 2328
diff changeset
642 printf("vo_vesa: switch -flip is not supported\n");
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
643 }
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 14796
diff changeset
644 if(flags & VOFLAG_SWSCALE) use_scaler = 1;
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 14796
diff changeset
645 if(flags & VOFLAG_FULLSCREEN)
2336
b2e0b131c1a7 Again changed logic:
nick
parents: 2335
diff changeset
646 {
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
647 if(use_scaler) use_scaler = 2;
2336
b2e0b131c1a7 Again changed logic:
nick
parents: 2335
diff changeset
648 else fs_mode = 1;
b2e0b131c1a7 Again changed logic:
nick
parents: 2335
diff changeset
649 }
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
650 if((err=vbeInit()) != VBE_OK) { PRINT_VBE_ERR("vbeInit",err); return -1; }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
651 memcpy(vib.VESASignature,"VBE2",4);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
652 if((err=vbeGetControllerInfo(&vib)) != VBE_OK)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
653 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
654 PRINT_VBE_ERR("vbeGetControllerInfo",err);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
655 printf("vo_vesa: possible reason: No VBE2 BIOS found\n");
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
656 return -1;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
657 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
658 /* Print general info here */
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
659 printf("vo_vesa: Found VESA VBE BIOS Version %x.%x Revision: %x\n",
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
660 (int)(vib.VESAVersion >> 8) & 0xff,
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
661 (int)(vib.VESAVersion & 0xff),
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
662 (int)(vib.OemSoftwareRev & 0xffff));
2255
98c2bfc87825 More hints. Use save-restore mechanism
nick
parents: 2244
diff changeset
663 printf("vo_vesa: Video memory: %u Kb\n",vib.TotalMemory*64);
98c2bfc87825 More hints. Use save-restore mechanism
nick
parents: 2244
diff changeset
664 printf("vo_vesa: VESA Capabilities: %s %s %s %s %s\n"
98c2bfc87825 More hints. Use save-restore mechanism
nick
parents: 2244
diff changeset
665 ,vib.Capabilities & VBE_DAC_8BIT ? "8-bit DAC," : "6-bit DAC,"
98c2bfc87825 More hints. Use save-restore mechanism
nick
parents: 2244
diff changeset
666 ,vib.Capabilities & VBE_NONVGA_CRTC ? "non-VGA CRTC,":"VGA CRTC,"
98c2bfc87825 More hints. Use save-restore mechanism
nick
parents: 2244
diff changeset
667 ,vib.Capabilities & VBE_SNOWED_RAMDAC ? "snowed RAMDAC,":"normal RAMDAC,"
98c2bfc87825 More hints. Use save-restore mechanism
nick
parents: 2244
diff changeset
668 ,vib.Capabilities & VBE_STEREOSCOPIC ? "stereoscopic,":"no stereoscopic,"
98c2bfc87825 More hints. Use save-restore mechanism
nick
parents: 2244
diff changeset
669 ,vib.Capabilities & VBE_STEREO_EVC ? "Stereo EVC":"no stereo");
98c2bfc87825 More hints. Use save-restore mechanism
nick
parents: 2244
diff changeset
670 printf("vo_vesa: !!! Below will be printed OEM info. !!!\n");
98c2bfc87825 More hints. Use save-restore mechanism
nick
parents: 2244
diff changeset
671 printf("vo_vesa: You should watch 5 OEM related lines below else you've broken vm86\n");
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
672 printf("vo_vesa: OEM info: %s\n",vib.OemStringPtr);
2255
98c2bfc87825 More hints. Use save-restore mechanism
nick
parents: 2244
diff changeset
673 printf("vo_vesa: OEM Revision: %x\n",vib.OemSoftwareRev);
98c2bfc87825 More hints. Use save-restore mechanism
nick
parents: 2244
diff changeset
674 printf("vo_vesa: OEM vendor: %s\n",vib.OemVendorNamePtr);
98c2bfc87825 More hints. Use save-restore mechanism
nick
parents: 2244
diff changeset
675 printf("vo_vesa: OEM Product Name: %s\n",vib.OemProductNamePtr);
98c2bfc87825 More hints. Use save-restore mechanism
nick
parents: 2244
diff changeset
676 printf("vo_vesa: OEM Product Rev: %s\n",vib.OemProductRevPtr);
98c2bfc87825 More hints. Use save-restore mechanism
nick
parents: 2244
diff changeset
677 printf("vo_vesa: Hint: To get workable TV-Out you should have plugged tv-connector in\n"
98c2bfc87825 More hints. Use save-restore mechanism
nick
parents: 2244
diff changeset
678 "vo_vesa: before booting PC since VESA BIOS initializes itself only during POST\n");
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
679 /* Find best mode here */
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
680 num_modes = 0;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
681 mode_ptr = vib.VideoModePtr;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
682 while(*mode_ptr++ != 0xffff) num_modes++;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
683 switch(format)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
684 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
685 case IMGFMT_BGR8:
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
686 case IMGFMT_RGB8: bpp = 8; break;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
687 case IMGFMT_BGR15:
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
688 case IMGFMT_RGB15: bpp = 15; break;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
689 case IMGFMT_BGR16:
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
690 case IMGFMT_RGB16: bpp = 16; break;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
691 case IMGFMT_BGR24:
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
692 case IMGFMT_RGB24: bpp = 24; break;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
693 case IMGFMT_BGR32:
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
694 case IMGFMT_RGB32: bpp = 32; break;
4601
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
695 default: bpp = 16; break;
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
696 }
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
697 srcBpp = bpp;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
698 srcFourcc = format;
2504
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents: 2446
diff changeset
699 if(vo_dbpp) bpp = vo_dbpp;
2337
e6d8e9a54afa OSD support
nick
parents: 2336
diff changeset
700 switch(bpp)
e6d8e9a54afa OSD support
nick
parents: 2336
diff changeset
701 {
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
702 case 15: draw_alpha_fnc = draw_alpha_15;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
703 dstFourcc = IMGFMT_BGR15;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
704 break;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
705 case 16: draw_alpha_fnc = draw_alpha_16;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
706 dstFourcc = IMGFMT_BGR16;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
707 break;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
708 case 24: draw_alpha_fnc = draw_alpha_24;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
709 dstFourcc = IMGFMT_BGR24;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
710 break;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
711 case 32: draw_alpha_fnc = draw_alpha_32;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
712 dstFourcc = IMGFMT_BGR32;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
713 break;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
714 default: draw_alpha_fnc = draw_alpha_null;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
715 dstFourcc = IMGFMT_BGR16;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
716 break;
2337
e6d8e9a54afa OSD support
nick
parents: 2336
diff changeset
717 }
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
718 if(verbose)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
719 {
2304
0769b2fb3ce2 Fixed zooming bug
nick
parents: 2298
diff changeset
720 printf("vo_vesa: Requested mode: %ux%u@%u (%s)\n",width,height,bpp,vo_format_name(format));
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
721 printf("vo_vesa: Total modes found: %u\n",num_modes);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
722 mode_ptr = vib.VideoModePtr;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
723 printf("vo_vesa: Mode list:");
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
724 for(i = 0;i < num_modes;i++)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
725 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
726 printf(" %04X",mode_ptr[i]);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
727 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
728 printf("\nvo_vesa: Modes in detail:\n");
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
729 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
730 mode_ptr = vib.VideoModePtr;
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
731 if(use_scaler)
2335
26fdd1a317ad Again changed logic:
nick
parents: 2333
diff changeset
732 {
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
733 dstW = d_width;
4601
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
734 dstH = d_height;
2335
26fdd1a317ad Again changed logic:
nick
parents: 2333
diff changeset
735 }
26fdd1a317ad Again changed logic:
nick
parents: 2333
diff changeset
736 if(vo_screenwidth) w = vo_screenwidth;
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
737 else w = max(dstW,width);
2335
26fdd1a317ad Again changed logic:
nick
parents: 2333
diff changeset
738 if(vo_screenheight) h = vo_screenheight;
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
739 else h = max(dstH,height);
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
740 for(i=0;i < num_modes;i++)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
741 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
742 if((err=vbeGetModeInfo(mode_ptr[i],&vmib)) != VBE_OK)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
743 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
744 PRINT_VBE_ERR("vbeGetModeInfo",err);
13568
1cb0e1833515 Currently vbeGetProtModeInfo call the 0x4f0a function of int 10h the get
faust3
parents: 13480
diff changeset
745 continue;
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
746 }
2329
fc52a0a1626f Support of: -x -y -bpp
nick
parents: 2328
diff changeset
747 if(vmib.XResolution >= w &&
fc52a0a1626f Support of: -x -y -bpp
nick
parents: 2328
diff changeset
748 vmib.YResolution >= h &&
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
749 (vmib.ModeAttributes & MOVIE_MODE) == MOVIE_MODE &&
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
750 vmib.BitsPerPixel == bpp &&
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
751 vmib.MemoryModel == memRGB)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
752 {
2293
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
753 if(vmib.XResolution <= best_x &&
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
754 vmib.YResolution <= best_y)
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
755 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
756 best_x = vmib.XResolution;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
757 best_y = vmib.YResolution;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
758 best_mode_idx = i;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
759 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
760 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
761 if(verbose)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
762 {
2298
674acdf0aa43 SwScaling support
nick
parents: 2296
diff changeset
763 printf("vo_vesa: Mode (%03u): mode=%04X %ux%u@%u attr=%04X\n"
2293
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
764 "vo_vesa: #planes=%u model=%u(%s) #pages=%u\n"
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
765 "vo_vesa: winA=%X(attr=%u) winB=%X(attr=%u) winSize=%u winGran=%u\n"
2446
6fb598bd7ede Suppressing warnings
nick
parents: 2410
diff changeset
766 "vo_vesa: direct_color=%u DGA_phys_addr=%08lX\n"
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
767 ,i,mode_ptr[i],vmib.XResolution,vmib.YResolution,vmib.BitsPerPixel,vmib.ModeAttributes
2293
638cd37032da Better resolution detection
nick
parents: 2255
diff changeset
768 ,vmib.NumberOfPlanes,vmib.MemoryModel,model2str(vmib.MemoryModel),vmib.NumberOfImagePages
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
769 ,vmib.WinASegment,vmib.WinAAttributes,vmib.WinBSegment,vmib.WinBAttributes,vmib.WinSize,vmib.WinGranularity
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
770 ,vmib.DirectColorModeInfo,vmib.PhysBasePtr);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
771 if(vmib.MemoryModel == 6 || vmib.MemoryModel == 7)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
772 printf("vo_vesa: direct_color_info = %u:%u:%u:%u\n"
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
773 ,vmib.RedMaskSize,vmib.GreenMaskSize,vmib.BlueMaskSize,vmib.RsvdMaskSize);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
774 fflush(stdout);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
775 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
776 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
777 if(best_mode_idx != UINT_MAX)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
778 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
779 video_mode = vib.VideoModePtr[best_mode_idx];
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
780 fflush(stdout);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
781 if((err=vbeGetMode(&init_mode)) != VBE_OK)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
782 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
783 PRINT_VBE_ERR("vbeGetMode",err);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
784 return -1;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
785 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
786 if(verbose) printf("vo_vesa: Initial video mode: %x\n",init_mode);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
787 if((err=vbeGetModeInfo(video_mode,&video_mode_info)) != VBE_OK)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
788 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
789 PRINT_VBE_ERR("vbeGetModeInfo",err);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
790 return -1;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
791 }
7025
3bc8ff93d64e 10l bug - noticed by Emiel Neggers <emiel@neggers.net>
arpi
parents: 6825
diff changeset
792 dstBpp = video_mode_info.BitsPerPixel;
2329
fc52a0a1626f Support of: -x -y -bpp
nick
parents: 2328
diff changeset
793 printf("vo_vesa: Using VESA mode (%u) = %x [%ux%u@%u]\n"
fc52a0a1626f Support of: -x -y -bpp
nick
parents: 2328
diff changeset
794 ,best_mode_idx,video_mode,video_mode_info.XResolution
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
795 ,video_mode_info.YResolution,dstBpp);
4362
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
796 if(subdev_flags & SUBDEV_NODGA) video_mode_info.PhysBasePtr = 0;
4601
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
797 if(use_scaler || fs_mode)
2298
674acdf0aa43 SwScaling support
nick
parents: 2296
diff changeset
798 {
2304
0769b2fb3ce2 Fixed zooming bug
nick
parents: 2298
diff changeset
799 /* software scale */
13480
c10922751a8e use aspect code when used with vidix
faust3
parents: 12926
diff changeset
800 if(use_scaler > 1
c10922751a8e use aspect code when used with vidix
faust3
parents: 12926
diff changeset
801 #ifdef CONFIG_VIDIX
c10922751a8e use aspect code when used with vidix
faust3
parents: 12926
diff changeset
802 || vidix_name
c10922751a8e use aspect code when used with vidix
faust3
parents: 12926
diff changeset
803 #endif
c10922751a8e use aspect code when used with vidix
faust3
parents: 12926
diff changeset
804 )
2689
6a5b6b16d85c Use standard aspect code
nick
parents: 2688
diff changeset
805 {
6a5b6b16d85c Use standard aspect code
nick
parents: 2688
diff changeset
806 aspect_save_orig(width,height);
6a5b6b16d85c Use standard aspect code
nick
parents: 2688
diff changeset
807 aspect_save_prescale(d_width,d_height);
6a5b6b16d85c Use standard aspect code
nick
parents: 2688
diff changeset
808 aspect_save_screenres(video_mode_info.XResolution,video_mode_info.YResolution);
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
809 aspect(&dstW,&dstH,A_ZOOM);
2689
6a5b6b16d85c Use standard aspect code
nick
parents: 2688
diff changeset
810 }
2336
b2e0b131c1a7 Again changed logic:
nick
parents: 2335
diff changeset
811 else
b2e0b131c1a7 Again changed logic:
nick
parents: 2335
diff changeset
812 if(fs_mode)
b2e0b131c1a7 Again changed logic:
nick
parents: 2335
diff changeset
813 {
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
814 dstW = video_mode_info.XResolution;
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
815 dstH = video_mode_info.YResolution;
2336
b2e0b131c1a7 Again changed logic:
nick
parents: 2335
diff changeset
816 }
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
817 use_scaler = 1;
4601
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
818 }
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
819 if(!lvo_name
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4083
diff changeset
820 #ifdef CONFIG_VIDIX
4601
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
821 && !vidix_name
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4083
diff changeset
822 #endif
4601
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
823 )
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
824 {
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9380
diff changeset
825 sws = sws_getContextFromCmdLine(srcW,srcH,srcFourcc,dstW,dstH,dstFourcc);
4601
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
826 if(!sws)
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
827 {
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
828 printf("vo_vesa: Can't initialize SwScaler\n");
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
829 return -1;
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
830 }
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
831 else if(verbose) printf("vo_vesa: Using SW BES emulator\n");
2298
674acdf0aa43 SwScaling support
nick
parents: 2296
diff changeset
832 }
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
833 if((video_mode_info.WinAAttributes & FRAME_MODE) == FRAME_MODE)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
834 win.idx = 0; /* frame A */
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
835 else
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
836 if((video_mode_info.WinBAttributes & FRAME_MODE) == FRAME_MODE)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
837 win.idx = 1; /* frame B */
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
838 else win.idx = -2;
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
839 /* Try use DGA instead */
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
840 if(video_mode_info.PhysBasePtr && vib.TotalMemory && (video_mode_info.ModeAttributes & MODE_ATTR_LINEAR))
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
841 {
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
842 void *lfb;
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
843 unsigned long vsize;
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
844 vsize = vib.TotalMemory*64*1024;
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
845 lfb = vbeMapVideoBuffer(video_mode_info.PhysBasePtr,vsize);
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
846 if(lfb == NULL)
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
847 printf("vo_vesa: Can't use DGA. Force bank switching mode. :(\n");
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
848 else
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
849 {
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
850 video_base = win.ptr = lfb;
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
851 win.low = 0UL;
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
852 win.high = vsize;
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
853 win.idx = -1; /* HAS_DGA() is on */
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
854 video_mode |= VESA_MODE_USE_LINEAR;
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
855 printf("vo_vesa: Using DGA (physical resources: %08lXh, %08lXh)"
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
856 ,video_mode_info.PhysBasePtr
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
857 ,vsize);
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
858 if(verbose) printf(" at %08lXh",(unsigned long)lfb);
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
859 printf("\n");
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
860 if(!(multi_size = fillMultiBuffer(vsize,2))) return -1;
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
861 if(vo_doublebuffering && multi_size < 2)
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
862 printf("vo_vesa: Can't use double buffering: not enough video memory\n");
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
863 }
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
864 }
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
865 if(win.idx == -2)
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
866 {
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
867 printf("vo_vesa: Can't find neither DGA nor relocatable window's frame.\n");
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
868 return -1;
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
869 }
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
870 if(!HAS_DGA())
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
871 {
4362
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
872 if(subdev_flags & SUBDEV_FORCEDGA)
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
873 {
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
874 printf("vo_vesa: you've forced DGA. Exiting\n");
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
875 return -1;
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
876 }
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
877 if(!(win_seg = win.idx == 0 ? video_mode_info.WinASegment:video_mode_info.WinBSegment))
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
878 {
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
879 printf("vo_vesa: Can't find valid window address\n");
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
880 return -1;
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
881 }
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
882 win.ptr = PhysToVirtSO(win_seg,0);
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
883 win.low = 0L;
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
884 win.high= video_mode_info.WinSize*1024;
2649
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
885 printf("vo_vesa: Using bank switching mode (physical resources: %08lXh, %08lXh)\n"
d05fc32b7984 What's new:
nick
parents: 2637
diff changeset
886 ,(unsigned long)win.ptr,(unsigned long)win.high);
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
887 }
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
888 if(video_mode_info.XResolution > dstW)
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
889 x_offset = (video_mode_info.XResolution - dstW) / 2;
2329
fc52a0a1626f Support of: -x -y -bpp
nick
parents: 2328
diff changeset
890 else x_offset = 0;
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
891 if(video_mode_info.YResolution > dstH)
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
892 y_offset = (video_mode_info.YResolution - dstH) / 2;
2329
fc52a0a1626f Support of: -x -y -bpp
nick
parents: 2328
diff changeset
893 else y_offset = 0;
2305
82c17b134946 Fixed half-image bug and added computing of correct aspect during zooming
nick
parents: 2304
diff changeset
894 if(verbose)
82c17b134946 Fixed half-image bug and added computing of correct aspect during zooming
nick
parents: 2304
diff changeset
895 printf("vo_vesa: image: %ux%u screen = %ux%u x_offset = %u y_offset = %u\n"
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
896 ,dstW,dstH
2305
82c17b134946 Fixed half-image bug and added computing of correct aspect during zooming
nick
parents: 2304
diff changeset
897 ,video_mode_info.XResolution,video_mode_info.YResolution
82c17b134946 Fixed half-image bug and added computing of correct aspect during zooming
nick
parents: 2304
diff changeset
898 ,x_offset,y_offset);
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
899 if(HAS_DGA())
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
900 {
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
901 dga_buffer = win.ptr; /* Trickly ;) */
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
902 cpy_blk_fnc = __vbeCopyBlockFast;
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
903 }
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
904 else
2610
65cb69a90a9f vo_vesa: DGA support
nick
parents: 2554
diff changeset
905 {
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
906 cpy_blk_fnc = __vbeCopyBlock;
4601
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
907 if(!lvo_name
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4083
diff changeset
908 #ifdef CONFIG_VIDIX
e1c6178de089 Configurable VIDIX usage
nick
parents: 4083
diff changeset
909 && !vidix_name
e1c6178de089 Configurable VIDIX usage
nick
parents: 4083
diff changeset
910 #endif
4601
8cda24d7f074 Make code simple. Use swScaler even for fastmemcpy purposes :)
nick
parents: 4596
diff changeset
911 )
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
912 {
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
913 if(!(dga_buffer = memalign(64,video_mode_info.XResolution*video_mode_info.YResolution*dstBpp)))
2610
65cb69a90a9f vo_vesa: DGA support
nick
parents: 2554
diff changeset
914 {
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
915 printf("vo_vesa: Can't allocate temporary buffer\n");
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
916 return -1;
2610
65cb69a90a9f vo_vesa: DGA support
nick
parents: 2554
diff changeset
917 }
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
918 if(verbose) printf("vo_vesa: dga emulator was allocated = %p\n",dga_buffer);
2337
e6d8e9a54afa OSD support
nick
parents: 2336
diff changeset
919 }
2504
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents: 2446
diff changeset
920 }
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
921 if((err=vbeSaveState(&init_state)) != VBE_OK)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
922 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
923 PRINT_VBE_ERR("vbeSaveState",err);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
924 return -1;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
925 }
7360
18e1b57616fc It prevents mode change when Hsync out of range.
arpi
parents: 7124
diff changeset
926
18e1b57616fc It prevents mode change when Hsync out of range.
arpi
parents: 7124
diff changeset
927 /* TODO:
18e1b57616fc It prevents mode change when Hsync out of range.
arpi
parents: 7124
diff changeset
928 user might pass refresh value,
7069
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
929 GTF constants might be read from monitor
7360
18e1b57616fc It prevents mode change when Hsync out of range.
arpi
parents: 7124
diff changeset
930 for best results, I don't have a spec (RM)
7069
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
931 */
7360
18e1b57616fc It prevents mode change when Hsync out of range.
arpi
parents: 7124
diff changeset
932
7069
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
933 if (((int)(vib.VESAVersion >> 8) & 0xff) > 2) {
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
934
7650
7e8193475ddf a small fix for vo_vesa, when calling set_refresh, when -nofs used.
arpi
parents: 7360
diff changeset
935 if (set_refresh(video_mode_info.XResolution,video_mode_info.YResolution,video_mode,&crtc_pass))
7069
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
936 video_mode = video_mode | 0x800;
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
937
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
938 }
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
939
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
940 ;
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
941
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
942 if ((err=vbeSetMode(video_mode,&crtc_pass)) != VBE_OK)
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
943 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
944 PRINT_VBE_ERR("vbeSetMode",err);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
945 return -1;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
946 }
7069
21e1ab99cb21 General Timing Formula algorithm from a scratch.
arpi
parents: 7025
diff changeset
947
12660
430a71a762b4 neomagic tv out support throught vesa vbe, patch by Rudolf Marek
alex
parents: 11678
diff changeset
948 if (neomagic_tvout) {
430a71a762b4 neomagic tv out support throught vesa vbe, patch by Rudolf Marek
alex
parents: 11678
diff changeset
949 err = vbeSetTV(video_mode,neomagic_tvnorm);
430a71a762b4 neomagic tv out support throught vesa vbe, patch by Rudolf Marek
alex
parents: 11678
diff changeset
950 if (err!=0x4f) {
430a71a762b4 neomagic tv out support throught vesa vbe, patch by Rudolf Marek
alex
parents: 11678
diff changeset
951 printf("vo_vesa: Sorry unsupported mode, try -x 640 -zoom\n");
430a71a762b4 neomagic tv out support throught vesa vbe, patch by Rudolf Marek
alex
parents: 11678
diff changeset
952 }
430a71a762b4 neomagic tv out support throught vesa vbe, patch by Rudolf Marek
alex
parents: 11678
diff changeset
953 else {
430a71a762b4 neomagic tv out support throught vesa vbe, patch by Rudolf Marek
alex
parents: 11678
diff changeset
954 printf("vo_vesa: Oh you really have picture on TV!\n");
430a71a762b4 neomagic tv out support throught vesa vbe, patch by Rudolf Marek
alex
parents: 11678
diff changeset
955 }
430a71a762b4 neomagic tv out support throught vesa vbe, patch by Rudolf Marek
alex
parents: 11678
diff changeset
956 }
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
957 /* Now we are in video mode!!!*/
2337
e6d8e9a54afa OSD support
nick
parents: 2336
diff changeset
958 /* Below 'return -1' is impossible */
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
959 if(verbose)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
960 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
961 printf("vo_vesa: Graphics mode was activated\n");
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
962 fflush(stdout);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
963 }
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents: 2775
diff changeset
964 if(lvo_name)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents: 2775
diff changeset
965 {
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
966 if(vlvo_init(width,height,x_offset,y_offset,dstW,dstH,format,dstBpp) != 0)
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents: 2775
diff changeset
967 {
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents: 2775
diff changeset
968 printf("vo_vesa: Can't initialize Linux Video Overlay\n");
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents: 2775
diff changeset
969 vesa_term();
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents: 2775
diff changeset
970 return -1;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents: 2775
diff changeset
971 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents: 2775
diff changeset
972 else printf("vo_vesa: Using video overlay: %s\n",lvo_name);
9883
3a407acefec5 multiple init fix by Aurelien JACOBS <aurel@gnuage.org>
alex
parents: 9714
diff changeset
973 lvo_opened = 1;
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents: 2775
diff changeset
974 }
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4083
diff changeset
975 #ifdef CONFIG_VIDIX
4030
922241968c63 Embedding vidix
nick
parents: 4002
diff changeset
976 else
922241968c63 Embedding vidix
nick
parents: 4002
diff changeset
977 if(vidix_name)
922241968c63 Embedding vidix
nick
parents: 4002
diff changeset
978 {
4537
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
979 if(vidix_init(width,height,x_offset,y_offset,dstW,
bc5b78f1df77 Support of scaling with every fourcc
nick
parents: 4493
diff changeset
980 dstH,format,dstBpp,
7124
eca7dbad0166 finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents: 7069
diff changeset
981 video_mode_info.XResolution,video_mode_info.YResolution) != 0)
4030
922241968c63 Embedding vidix
nick
parents: 4002
diff changeset
982 {
922241968c63 Embedding vidix
nick
parents: 4002
diff changeset
983 printf("vo_vesa: Can't initialize VIDIX driver\n");
4548
59a90d0d662d Correct vesa shutdown on 'config playback' errors
nick
parents: 4537
diff changeset
984 vesa_term();
4030
922241968c63 Embedding vidix
nick
parents: 4002
diff changeset
985 return -1;
922241968c63 Embedding vidix
nick
parents: 4002
diff changeset
986 }
4083
00c1bba6ca14 Minor bugs and new vidix stuff support
nick
parents: 4030
diff changeset
987 else printf("vo_vesa: Using VIDIX\n");
4198
7e2bf04c9a7c added vidix_start() and vidix_stop() for better runtime-resize support ;)
alex
parents: 4089
diff changeset
988 vidix_start();
11158
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 10734
diff changeset
989
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 10734
diff changeset
990 /* set colorkey */
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 10734
diff changeset
991 if (vidix_grkey_support())
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 10734
diff changeset
992 {
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 10734
diff changeset
993 vidix_grkey_get(&gr_key);
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 10734
diff changeset
994 gr_key.key_op = KEYS_PUT;
12926
6eb8d78e2d47 10l query format at least when used with vidix, disable colorkeying with vidix, should fix #38 and #33
faust3
parents: 12660
diff changeset
995 #if 0
11216
30eccb0d1a64 fixed -nocolorkey
alex
parents: 11158
diff changeset
996 if (!(vo_colorkey & 0xFF000000))
11158
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 10734
diff changeset
997 {
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 10734
diff changeset
998 gr_key.ckey.op = CKEY_TRUE;
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 10734
diff changeset
999 gr_key.ckey.red = (vo_colorkey & 0x00FF0000) >> 16;
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 10734
diff changeset
1000 gr_key.ckey.green = (vo_colorkey & 0x0000FF00) >> 8;
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 10734
diff changeset
1001 gr_key.ckey.blue = vo_colorkey & 0x000000FF;
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 10734
diff changeset
1002 } else
12926
6eb8d78e2d47 10l query format at least when used with vidix, disable colorkeying with vidix, should fix #38 and #33
faust3
parents: 12660
diff changeset
1003 #endif
11158
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 10734
diff changeset
1004 gr_key.ckey.op = CKEY_FALSE;
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 10734
diff changeset
1005 vidix_grkey_set(&gr_key);
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 10734
diff changeset
1006 }
9883
3a407acefec5 multiple init fix by Aurelien JACOBS <aurel@gnuage.org>
alex
parents: 9714
diff changeset
1007 vidix_opened = 1;
4030
922241968c63 Embedding vidix
nick
parents: 4002
diff changeset
1008 }
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4083
diff changeset
1009 #endif
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1010 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1011 else
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1012 {
2255
98c2bfc87825 More hints. Use save-restore mechanism
nick
parents: 2244
diff changeset
1013 printf("vo_vesa: Can't find mode for: %ux%u@%u\n",width,height,bpp);
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1014 return -1;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1015 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1016 if(verbose)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1017 {
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1018 printf("vo_vesa: VESA initialization complete\n");
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1019 fflush(stdout);
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1020 }
2688
e9f6634c6374 Code cleanup
nick
parents: 2686
diff changeset
1021 if(HAS_DGA() && vo_doublebuffering)
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1022 {
2686
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
1023 for(i=0;i<MAX_BUFFERS;i++)
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
1024 {
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
1025 win.ptr = dga_buffer = video_base + multi_buff[i];
8652
edfe94b9d578 Juste a trivial patch for vesa output. The screen were cleaned at init
arpi
parents: 8148
diff changeset
1026 clear_screen(); /* Clear screen for stupid BIOSes */
4002
6ce744b637ad paint background on -v -v
nick
parents: 3209
diff changeset
1027 if(verbose>1) paintBkGnd();
2686
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
1028 }
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1029 }
2686
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
1030 else
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
1031 {
8652
edfe94b9d578 Juste a trivial patch for vesa output. The screen were cleaned at init
arpi
parents: 8148
diff changeset
1032 clear_screen(); /* Clear screen for stupid BIOSes */
9714
3ed7400a9e74 Only write title if verbose>0.
ranma
parents: 9632
diff changeset
1033 if(verbose>1)
2686
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
1034 {
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
1035 int x;
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
1036 x = (video_mode_info.XResolution/video_mode_info.XCharSize)/2-strlen(title)/2;
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
1037 if(x < 0) x = 0;
9714
3ed7400a9e74 Only write title if verbose>0.
ranma
parents: 9632
diff changeset
1038 paintBkGnd();
2686
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
1039 vbeWriteString(x,0,7,title);
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
1040 }
2633
fe5ab8c660de Qualitative speedup decoding when video card supports DGA!
nick
parents: 2610
diff changeset
1041 }
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1042 return 0;
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1043 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1044
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1045 static void
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1046 uninit(void)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1047 {
8786
605c85c27e68 Not checking it caused SIGSEV when uninitning after vesa init failed.
filon
parents: 8652
diff changeset
1048 // not inited
2686
44ff6b5c7cea Double buffering support
nick
parents: 2676
diff changeset
1049 vesa_term();
2504
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents: 2446
diff changeset
1050 if(verbose > 2)
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents: 2446
diff changeset
1051 printf("vo_vesa: uninit was called\n");
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1052 }
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1053
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1054
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1055 static void check_events(void)
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1056 {
2504
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents: 2446
diff changeset
1057 if(verbose > 2)
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents: 2446
diff changeset
1058 printf("vo_vesa: check_events was called\n");
2244
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1059 /* Nothing to do */
4e464b527f5a vo_vesa support
nick
parents:
diff changeset
1060 }
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4198
diff changeset
1061
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
1062 static int preinit(const char *arg)
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4198
diff changeset
1063 {
4362
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
1064 int pre_init_err = 0;
8791
668b30187d48 Check if we can open /dev/mem in preinit(), so we can exit cleanly.
filon
parents: 8786
diff changeset
1065 int fd;
4362
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
1066 if(verbose>1) printf("vo_vesa: preinit(%s) was called\n",arg);
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
1067 if(verbose > 2)
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
1068 printf("vo_vesa: subdevice %s is being initialized\n",arg);
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
1069 subdev_flags = 0;
9958
fe733da8e8b9 10l fix by Aurelien JACOBS <aurel@gnuage.org>
alex
parents: 9883
diff changeset
1070 lvo_name = NULL;
fe733da8e8b9 10l fix by Aurelien JACOBS <aurel@gnuage.org>
alex
parents: 9883
diff changeset
1071 #ifdef CONFIG_VIDIX
fe733da8e8b9 10l fix by Aurelien JACOBS <aurel@gnuage.org>
alex
parents: 9883
diff changeset
1072 vidix_name = NULL;
fe733da8e8b9 10l fix by Aurelien JACOBS <aurel@gnuage.org>
alex
parents: 9883
diff changeset
1073 #endif
4362
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
1074 if(arg) subdev_flags = parseSubDevice(arg);
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
1075 if(lvo_name) pre_init_err = vlvo_preinit(lvo_name);
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
1076 #ifdef CONFIG_VIDIX
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
1077 else if(vidix_name) pre_init_err = vidix_preinit(vidix_name,&video_out_vesa);
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
1078 #endif
8791
668b30187d48 Check if we can open /dev/mem in preinit(), so we can exit cleanly.
filon
parents: 8786
diff changeset
1079 // check if we can open /dev/mem (it will be opened later in config(), but if we
668b30187d48 Check if we can open /dev/mem in preinit(), so we can exit cleanly.
filon
parents: 8786
diff changeset
1080 // detect now that we can't we can exit cleanly)
668b30187d48 Check if we can open /dev/mem in preinit(), so we can exit cleanly.
filon
parents: 8786
diff changeset
1081 fd = open("/dev/mem", O_RDWR);
668b30187d48 Check if we can open /dev/mem in preinit(), so we can exit cleanly.
filon
parents: 8786
diff changeset
1082 if (fd < 0)
668b30187d48 Check if we can open /dev/mem in preinit(), so we can exit cleanly.
filon
parents: 8786
diff changeset
1083 return -1;
8792
filon
parents: 8791
diff changeset
1084 else
filon
parents: 8791
diff changeset
1085 close(fd);
4362
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
1086 if(verbose > 2)
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
1087 printf("vo_subdevice: initialization returns: %i\n",pre_init_err);
7ef67ffa9274 preinit usage
nick
parents: 4352
diff changeset
1088 return pre_init_err;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4198
diff changeset
1089 }
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4198
diff changeset
1090
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
1091 static int control(uint32_t request, void *data, ...)
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4198
diff changeset
1092 {
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4572
diff changeset
1093 switch (request) {
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4572
diff changeset
1094 case VOCTRL_QUERY_FORMAT:
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4572
diff changeset
1095 return query_format(*((uint32_t*)data));
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4572
diff changeset
1096 }
11565
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1097
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1098 #ifdef CONFIG_VIDIX
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1099 if (vidix_name) {
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1100 switch (request) {
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1101 case VOCTRL_SET_EQUALIZER:
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1102 {
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1103 va_list ap;
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1104 int value;
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1105
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1106 va_start(ap, data);
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1107 value = va_arg(ap, int);
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1108 va_end(ap);
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1109
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1110 return vidix_control(request, data, (int *)value);
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1111 }
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1112 case VOCTRL_GET_EQUALIZER:
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1113 {
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1114 va_list ap;
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1115 int *value;
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1116
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1117 va_start(ap, data);
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1118 value = va_arg(ap, int*);
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1119 va_end(ap);
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1120
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1121 return vidix_control(request, data, value);
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1122 }
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1123 }
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1124 return vidix_control(request, data);
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1125 }
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1126 #endif
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
1127
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4572
diff changeset
1128 return VO_NOTIMPL;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4198
diff changeset
1129 }