annotate libvo/vo_svga.c @ 25317:7f3cb5408f28

Fixed VIDIX color bug that was introduced when Radeon VIDIX driver was synchronized with vidix.sf.net. The red color was saturating. Corrected value fixes the issue and restore the color to the level it used to have before synchronization. Meaning of the value remains unknow but was retrieved from register's value of a Radeon 9000 card, so it may need further testing. Patch by Guillaume Lecerf (foxcore at gmail dot com)
author ben
date Mon, 10 Dec 2007 19:27:46 +0000
parents 3aee342be929
children 6f6534bf7fbe
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
1 /*
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
2
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
3 Video driver for SVGAlib
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
4 by Zoltan Mark Vician <se7en@sch.bme.hu>
381
bbd079aa1614 Date bugfix :)
se7encode
parents: 377
diff changeset
5 Code started: Mon Apr 1 23:25:47 2001
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
6 Some changes by Matan Ziv-Av <matan@svgalib.org>
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
7 Compleat rewrite by Ivan Kalvachev 19 Mar 2003:
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
8
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
9 Wrangings:
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
10 - 1bpp doesn't work right for me with '-double' and svgalib 1.4.3,
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
11 but works OK with svgalib 1.9.17
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
12 - The HW acceleration is not tested - svgalibs supports few chipsets,
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
13 and i don't have any of them. If it works for you then let me know.
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
14 I will remove this warning after confirm its status.
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
15 - retrace sync works only in doublebuffer mode.
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
16 - the retrace sync may slow down decoding a lot - mplayer is blocked while
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
17 waiting for retrace
9659
iive
parents: 9658
diff changeset
18 - denoise3d fails to find common colorspace, use -vf denoise3d,scale
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
19
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
20 TODO:
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
21 - let choose_best_mode take aspect into account
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
22 - set palette from mpi->palette or mpi->plane[1]
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
23 - make faster OSD black bars clear - need some OSD changes
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
24 - Make nicer CONFIG parsing
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
25 - change video mode logical width to match img->stride[0] - for HW only
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
26 */
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
27
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
28 #include <stdio.h>
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
29 #include <stdlib.h>
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7124
diff changeset
30 #include <string.h>
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
31
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
32 #include <vga.h>
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
33
485
dfafa47d751d Tons of code rewrites.
se7encode
parents: 483
diff changeset
34 #include <limits.h>
dfafa47d751d Tons of code rewrites.
se7encode
parents: 483
diff changeset
35
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
36 #include "config.h"
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
37 #include "video_out.h"
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
38 #include "video_out_internal.h"
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
39 #include "fastmemcpy.h"
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
40 #include "osdep/getch2.h"
8515
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
41 #ifdef CONFIG_VIDIX
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
42 #include "vosub_vidix.h"
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
43 #endif
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
44
616
41d6eec69b60 clean up
pontscho
parents: 612
diff changeset
45 #include "sub.h"
41d6eec69b60 clean up
pontscho
parents: 612
diff changeset
46
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 11565
diff changeset
47 #include "mp_msg.h"
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
48 #include "help_mp.h"
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 11565
diff changeset
49 //#include "mp_image.h"
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
50
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
51 #include <assert.h>
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
52
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
53 //silence warnings, probably it have to go in some global header
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
54 #define UNUSED(x) ((void)(x))
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
55
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
56
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
57 static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src,
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
58 unsigned char *srca, int stride);
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
59 static uint32_t get_image(mp_image_t *mpi);
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
60
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
61 #define MAXPAGES 16
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
62 #define PAGE_EMPTY 0
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
63 #define PAGE_BUSY 1
8515
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
64
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
65 #define CAP_ACCEL_CLEAR 8
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
66 #define CAP_ACCEL_PUTIMAGE 4
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
67 #define CAP_ACCEL_BACKGR 2
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
68 #define CAP_LINEAR 1
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
69
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
70 static uint8_t zerobuf[8192];//used when clear screen with vga_draw
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
71
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
72 static int squarepix;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
73 static int force_vm=0;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
74 static int force_native=0;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
75 static int sync_flip=0;
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
76 static int blackbar_osd=0;
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
77 static int cpage,max_pages,old_page;
447
b3b28a0d9404 All available videomodes support added.
se7encode
parents: 411
diff changeset
78
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
79 static vga_modeinfo * modeinfo;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
80 static int mode_stride; //keep it in case of vga_setlogicalwidth
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
81 static int stride_granularity; //not yet used
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
82 static int mode_bpp;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
83 static int mode_capabilities;
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
84
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
85 static int image_width,image_height; // used by OSD
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
86 static int x_pos, y_pos;
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
87
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
88 static struct {
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
89 int yoffset;//y position of the page
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
90 int doffset;//display start of the page
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
91 void * vbase;//memory start address of the page
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
92 int locks;
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
93 }PageStore[MAXPAGES];
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
94
25216
3aee342be929 Make vo info structs const
reimar
parents: 24238
diff changeset
95 static const vo_info_t info = {
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
96 "SVGAlib",
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
97 "svga",
10940
b99be2c88faf OSD stride fix and correct email
iive
parents: 10924
diff changeset
98 "Ivan Kalvachev <iive@users.sf.net>",
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
99 ""
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
100 };
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
101
8515
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
102 #ifdef CONFIG_VIDIX
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
103 static char vidix_name[32] = "";
11158
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 11000
diff changeset
104 static vidix_grkey_t gr_key;
8515
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
105 #endif
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
106
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7691
diff changeset
107 LIBVO_EXTERN(svga)
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7691
diff changeset
108
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
109
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
110 //return number of 1'st free page or -1 if no free one
22886
71b3e04d0555 "()" to "(void)" function param list fixes
uau
parents: 20110
diff changeset
111 static inline int page_find_free(void){
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
112 int i;
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
113 for(i=0;i<max_pages;i++)
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
114 if(PageStore[i].locks == PAGE_EMPTY) return i;
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
115 return -1;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
116 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
117
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
118 static int preinit(const char *arg)
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
119 {
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
120 int i;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
121 char s[64];
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
122
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
123 getch2_disable();
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
124 memset(zerobuf,0,sizeof(zerobuf));
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
125 force_vm=force_native=squarepix=0;
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
126 sync_flip=vo_vsync;
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
127 blackbar_osd=0;
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
128
8515
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
129 if(arg)while(*arg) {
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
130 #ifdef CONFIG_VIDIX
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
131 if(memcmp(arg,"vidix",5)==0) {
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
132 i=6;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
133 while(arg[i] && arg[i]!=':') i++;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
134 strncpy(vidix_name, arg+6, i-6);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
135 vidix_name[i-5]=0;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
136 if(arg[i]==':')i++;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
137 arg+=i;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
138 vidix_preinit(vidix_name, &video_out_svga);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
139 }
8515
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
140 #endif
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
141 if(!strncmp(arg,"sq",2)) {
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
142 squarepix=1;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
143 arg+=2;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
144 if( *arg == ':' ) arg++;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
145 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
146
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
147 if(!strncmp(arg,"native",6)) {
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
148 force_native=1;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
149 arg+=6;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
150 if( *arg == ':' ) arg++;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
151 }
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
152
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
153 if(!strncmp(arg,"bbosd",5)) {
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
154 blackbar_osd=1;
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
155 arg+=5;
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
156 if( *arg == ':' ) arg++;
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
157 }
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
158
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
159 if(!strncmp(arg,"retrace",7)) {
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
160 sync_flip=1;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
161 arg+=7;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
162 if( *arg == ':' ) arg++;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
163 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
164
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
165 if(*arg) {
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
166 i=0;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
167 while(arg[i] && arg[i]!=':')i++;
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
168 if(i<64){
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
169 strncpy(s, arg, i);
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
170 s[i]=0;
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
171
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
172 force_vm=vga_getmodenumber(s);
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
173 if(force_vm>0) {
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
174 if( mp_msg_test(MSGT_VO,MSGL_V) ) mp_msg(MSGT_VO,MSGL_V, "vo_svga: Forcing mode %i\n",force_vm);
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
175 }else{
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
176 force_vm = 0;
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
177 }
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
178 }
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
179 arg+=i;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
180 if(*arg==':')arg++;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
181 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
182 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
183
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
184 vga_init();
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
185 return 0;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
186 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
187
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
188 static void svga_clear_box(int x,int y,int w,int h){
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
189 uint8_t * rgbplane;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
190 int i;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
191
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
192 if (mode_capabilities&CAP_ACCEL_CLEAR){
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 16280
diff changeset
193 if( mp_msg_test(MSGT_VO,MSGL_DBG3) )
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
194 mp_msg(MSGT_VO,MSGL_DBG3, "vo_svga: clearing box %d,%d - %d,%d with HW acceleration\n",
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
195 x,y,w,h);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
196 if(mode_capabilities&CAP_ACCEL_BACKGR)
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
197 vga_accel(ACCEL_SYNC);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
198 vga_accel(ACCEL_SETFGCOLOR,0);//black
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
199 vga_accel(ACCEL_FILLBOX,x,y,w,h);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
200 return;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
201 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
202 if (mode_capabilities & CAP_LINEAR){
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 16280
diff changeset
203 if( mp_msg_test(MSGT_VO,MSGL_DBG3) )
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
204 mp_msg(MSGT_VO,MSGL_DBG3, "vo_svga: clearing box %d,%d - %d,%d with memset\n",x,y,w,h);
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
205 rgbplane=PageStore[0].vbase + (y*mode_stride) + (x*modeinfo->bytesperpixel);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
206 for(i=0;i<h;i++){
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
207 //i'm afraid that memcpy is better optimized than memset;)
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 22886
diff changeset
208 fast_memcpy(rgbplane,zerobuf,w*modeinfo->bytesperpixel);
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
209 // memset(rgbplane,0,w*modeinfo->bytesperpixel);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
210 rgbplane+=mode_stride;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
211 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
212 return;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
213 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
214 //native
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 16280
diff changeset
215 if( mp_msg_test(MSGT_VO,MSGL_DBG3) )
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
216 mp_msg(MSGT_VO,MSGL_DBG3, "vo_svga: clearing box %d,%d - %d,%d with native draw \n",x,y,w,h);
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
217 if(modeinfo->bytesperpixel!=0) w*=modeinfo->bytesperpixel;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
218 for(i=0;i<h;i++){
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
219 vga_drawscansegment(zerobuf,x,y+i,w);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
220 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
221 };
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
222
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
223 static uint32_t svga_draw_image(mp_image_t *mpi){
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
224 int i,x,y,w,h;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
225 int stride;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
226 uint8_t *rgbplane, *base;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
227 int bytesperline;
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
228 int page;
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
229
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
230 if(mpi->flags & MP_IMGFLAG_DIRECT){
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 16280
diff changeset
231 if( mp_msg_test(MSGT_VO,MSGL_DBG3) )
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
232 mp_msg(MSGT_VO,MSGL_DBG3, "vo_svga: drawing direct rendered surface\n");
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
233 cpage=(uint32_t)mpi->priv;
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
234 assert((cpage>=0)&&(cpage<max_pages));
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
235 return VO_TRUE; //it's already done
8515
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
236 }
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
237 // if (mpi->flags&MP_IMGFLAGS_DRAWBACK)
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
238 // return VO_TRUE;//direct render method 2
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
239
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
240 //find a free page to draw into
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
241 //if there is no one then use the current one
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
242 page = page_find_free();
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
243 if(page>=0) cpage=page;
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
244 PageStore[cpage].locks=PAGE_BUSY;
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
245
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
246 // these variables are used in loops
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
247 x = mpi->x;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
248 y = mpi->y;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
249 w = mpi->w;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
250 h = mpi->h;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
251 stride = mpi->stride[0];
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
252 rgbplane = mpi->planes[0] + y*stride + (x*mpi->bpp)/8;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
253 x+=x_pos;//center
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
254 y+=y_pos;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
255
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
256 if(mpi->bpp >= 8){//for modes<8 use only native
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
257 if( (mode_capabilities&CAP_ACCEL_PUTIMAGE) && (x==0) && (w==mpi->width) &&
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
258 (stride == mode_stride) ){ //only monolite image can be accelerated
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
259 w=(stride*8)/mpi->bpp;//we transfer pixels in the stride so the source
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
260 //ACCELERATE
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 16280
diff changeset
261 if( mp_msg_test(MSGT_VO,MSGL_DBG3) )
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
262 mp_msg(MSGT_VO,MSGL_DBG3, "vo_svga: using HW PutImage (x=%d,y=%d,w=%d,h=%d)\n",x,y,w,h);
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
263 if(mode_capabilities & CAP_ACCEL_BACKGR)
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
264 vga_accel(ACCEL_SYNC);
8515
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
265
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
266 vga_accel(ACCEL_PUTIMAGE,x,y+PageStore[cpage].yoffset,w,h,rgbplane);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
267 return VO_TRUE;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
268 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
269
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
270 if( mode_capabilities&CAP_LINEAR){
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
271 //DIRECT
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 16280
diff changeset
272 if( mp_msg_test(MSGT_VO,MSGL_DBG3) )
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
273 mp_msg(MSGT_VO,MSGL_DBG3, "vo_svga: using Direct memcpy (x=%d,y=%d,w=%d,h=%d)\n",x,y,w,h);
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
274 bytesperline=(w*mpi->bpp)/8;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
275 base=PageStore[cpage].vbase + (y*mode_stride) + (x*mpi->bpp)/8;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
276
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
277 for(i=0;i<h;i++){
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
278 mem2agpcpy(base,rgbplane,bytesperline);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
279 base+=mode_stride;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
280 rgbplane+=stride;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
281 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
282 return VO_TRUE;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
283 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
284 }//(modebpp>=8
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
285
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
286
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
287 //NATIVE
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
288 {
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
289 int length;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
290 length=(w*mpi->bpp)/8;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
291 //one byte per pixel! svgalib innovation
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
292 if(mpi->imgfmt==IMGFMT_RG4B || mpi->imgfmt==IMGFMT_BG4B) length=w;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
293
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 16280
diff changeset
294 if( mp_msg_test(MSGT_VO,MSGL_DBG3) )
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
295 mp_msg(MSGT_VO,MSGL_DBG3, "vo_svga: using Native vga_draw(x=%d,y=%d,w=%d,h=%d)\n",x,y,w,h);
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
296 y+=PageStore[cpage].yoffset;//y position of the page beggining
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
297 for(i=0;i<h;i++){
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
298 vga_drawscansegment(rgbplane,x,y+i,length);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
299 rgbplane+=stride;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
300 }
7675
f78dc7d40730 mode check at preinit()
arpi
parents: 7558
diff changeset
301 }
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
302 return VO_TRUE;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
303 }
7675
f78dc7d40730 mode check at preinit()
arpi
parents: 7558
diff changeset
304
18950
a943bc3f26c8 Make some functions static.
uau
parents: 18335
diff changeset
305 static int bpp_from_vminfo(vga_modeinfo *vminfo){
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
306 switch(vminfo->colors){
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
307 case 2: return 1;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
308 case 16: return 4;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
309 case 256: return 8;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
310 case 32768: return 15;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
311 case 65536: return 16;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
312 case 1<<24: return 8*vminfo->bytesperpixel;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
313 }
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
314 return 0;
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
315 }
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
316
18950
a943bc3f26c8 Make some functions static.
uau
parents: 18335
diff changeset
317 static int find_best_svga_mode(int req_w,int req_h, int req_bpp){
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
318 int badness,prev_badness;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
319 int bestmode,lastmode;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
320 int i;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
321 vga_modeinfo *vminfo;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
322 //int best aspect mode // best linear mode // best normal mode (no modeX)
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
323
9658
0e6d7f48309e fix find_best fail if the black area is bigger than image, few more verbose messages, OSD not rendered if native mode
iive
parents: 9621
diff changeset
324 prev_badness = 0;//take care of special case below
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
325 bestmode = 0; //0 is the TEXT mode
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
326 lastmode = vga_lastmodenumber();
9686
a7aeb72f6fc9 Fix last mode ignored bug
iive
parents: 9659
diff changeset
327 for(i=1;i<=lastmode;i++){
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
328 vminfo = vga_getmodeinfo(i);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
329 if( vminfo == NULL ) continue;
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 16280
diff changeset
330 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
331 mp_msg(MSGT_VO,MSGL_DBG4, "vo_svga: testing mode %d (%s)\n",i,vga_getmodename(i));
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
332 if( vga_hasmode(i) == 0 ) continue;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
333 if( req_bpp != bpp_from_vminfo(vminfo) )continue;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
334 if( (vminfo->width < req_w) || (vminfo->height < req_h) ) continue;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
335 badness=(vminfo->width * vminfo->height) - (req_h * req_w);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
336 //put here aspect calculations
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
337 if(squarepix)
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
338 if( vminfo->width*3 != vminfo->height*4 ) continue;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
339
9658
0e6d7f48309e fix find_best fail if the black area is bigger than image, few more verbose messages, OSD not rendered if native mode
iive
parents: 9621
diff changeset
340 if( bestmode==0 || prev_badness >= badness ){//modeX etc...
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
341 prev_badness=badness;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
342 bestmode=i;
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 16280
diff changeset
343 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
344 mp_msg(MSGT_VO,MSGL_DBG4, "vo_svga: found good mode %d with badness %d\n",i,badness);
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
345 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
346 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
347 return bestmode;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
348 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
349
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
350 static int control(uint32_t request, void *data, ...)
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
351 {
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
352 switch (request) {
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
353 case VOCTRL_QUERY_FORMAT:
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
354 return query_format(*((uint32_t*)data));
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
355 case VOCTRL_DRAW_IMAGE:
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
356 return svga_draw_image( (mp_image_t *)data);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
357 case VOCTRL_GET_IMAGE:
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
358 return get_image(data);
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
359 }
11565
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
360
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
361 #ifdef CONFIG_VIDIX
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
362 if (vidix_name) {
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
363 switch (request) {
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
364 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
365 {
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
366 va_list ap;
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
367 int value;
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
368
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
369 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
370 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
371 va_end(ap);
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
372
20110
d27e00bb61b8 Remove spurious casts to int. Blessed by Reimar.
rathann
parents: 18950
diff changeset
373 return vidix_control(request, data, value);
11565
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
374 }
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
375 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
376 {
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
377 va_list ap;
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
378 int *value;
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
379
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
380 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
381 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
382 va_end(ap);
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
383
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
384 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
385 }
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
386 }
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
387 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
388 }
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
389 #endif
0d24c99199e2 Some more vidix crap - vidix equalizer passthrough. Patch by Oleg I. Vdovikin <vdovikin@jscc.ru>
alex
parents: 11216
diff changeset
390
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
391 return VO_NOTIMPL;
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
392 }
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
393
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
394 //
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
395 // This function is called to init the video driver for specific mode
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
396 //
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
397 static int config(uint32_t width, uint32_t height, uint32_t d_width,
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13865
diff changeset
398 uint32_t d_height, uint32_t flags, char *title,
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
399 uint32_t format) {
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
400 int32_t req_w = width;// (d_width > 0 ? d_width : width);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
401 int32_t req_h = height;// (d_height > 0 ? d_height : height);
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
402 uint16_t vid_mode = 0;
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
403 int32_t req_bpp;
411
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
404
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
405 uint32_t accflags;
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 16280
diff changeset
406 if( mp_msg_test(MSGT_VO,MSGL_V) )
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
407 mp_msg(MSGT_VO,MSGL_V, "vo_svga: config(%i, %i, %i, %i, %08x, %s, %08x)\n", width, height,
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
408 d_width, d_height, flags, title, format);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
409 //Only RGB modes supported
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
410 if (!IMGFMT_IS_RGB(format) && !IMGFMT_IS_BGR(format)) {assert(0);return -1;}
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
411 req_bpp = IMGFMT_BGR_DEPTH(format);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
412
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
413 if( vo_dbpp!=0 && vo_dbpp!=req_bpp) {assert(0);return-1;}
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
414
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
415 if(!force_vm) {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 16280
diff changeset
416 if ( mp_msg_test(MSGT_VO,MSGL_V) ) {
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
417 mp_msg(MSGT_VO,MSGL_V, "vo_svga: Looking for the best resolution...\n");
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
418 mp_msg(MSGT_VO,MSGL_V, "vo_svga: req_w: %d, req_h: %d, bpp: %d\n",req_w,req_h,req_bpp);
411
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
419 }
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
420 vid_mode=find_best_svga_mode(req_w,req_h,req_bpp);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
421 if(vid_mode==0)
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
422 return 1;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
423 modeinfo=vga_getmodeinfo(vid_mode);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
424 }else{//force_vm
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
425 vid_mode=force_vm;
9788
2390fddbe581 force_mode wrong has_mode check, verbose retrace message
iive
parents: 9686
diff changeset
426 if(vga_hasmode(vid_mode) == 0){
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
427 mp_msg(MSGT_VO,MSGL_ERR, MSGTR_LIBVO_SVGA_ForcedVidmodeNotAvailable,
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
428 vid_mode,vga_getmodename(vid_mode));
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
429 return 1; //error;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
430 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
431 modeinfo=vga_getmodeinfo(vid_mode);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
432 if( (modeinfo->width < req_w) || (modeinfo->height < req_h) ){
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
433 mp_msg(MSGT_VO,MSGL_ERR, MSGTR_LIBVO_SVGA_ForcedVidmodeTooSmall,
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
434 vid_mode,vga_getmodename(vid_mode));
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
435 return 1;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
436 }
504
a77e23145686 Some debug information (using verbose) added.
se7encode
parents: 502
diff changeset
437 }
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
438 mode_bpp=bpp_from_vminfo(modeinfo);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
439
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
440 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_SVGA_Vidmode,
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
441 vid_mode,modeinfo->width,modeinfo->height,mode_bpp);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
442
485
dfafa47d751d Tons of code rewrites.
se7encode
parents: 483
diff changeset
443 if (vga_setmode(vid_mode) == -1) {
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
444 mp_msg(MSGT_VO,MSGL_ERR, MSGTR_LIBVO_SVGA_VgasetmodeFailed,vid_mode);
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
445 uninit();
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
446 return 1; // error
6451
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6052
diff changeset
447 }
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6052
diff changeset
448 /* set 332 palette for 8 bpp */
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
449 if(mode_bpp==8){
6451
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6052
diff changeset
450 int i;
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6052
diff changeset
451 for(i=0; i<256; i++)
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6451
diff changeset
452 vga_setpalette(i, ((i>>5)&7)*9, ((i>>2)&7)*9, (i&3)*21);
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6451
diff changeset
453 }
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6451
diff changeset
454 /* set 121 palette for 4 bpp */
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
455 else if(mode_bpp==4){
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6451
diff changeset
456 int i;
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6451
diff changeset
457 for(i=0; i<16; i++)
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6451
diff changeset
458 vga_setpalette(i, ((i>>3)&1)*63, ((i>>1)&3)*21, (i&1)*63);
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
459 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
460 //if we change the logical width, we should know the granularity
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
461 stride_granularity=8;//according to man vga_logicalwidth
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
462 if(modeinfo->flags & EXT_INFO_AVAILABLE){
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
463 stride_granularity=modeinfo->linewidth_unit;
286
b2f3f2ab3787 integrated vo_svga by se7en
arpi_esp
parents: 285
diff changeset
464 }
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
465 //look for hardware acceleration
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
466 mode_capabilities=0;//NATIVE;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
467 if(!force_native){//if we want to use only native drawers
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
468 if(modeinfo->flags & HAVE_EXT_SET){//support for hwaccel interface
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
469 accflags=vga_ext_set(VGA_EXT_AVAILABLE,VGA_AVAIL_ACCEL);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
470 if(accflags & ACCELFLAG_FILLBOX) // clear screen
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
471 mode_capabilities|=CAP_ACCEL_CLEAR;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
472 if(accflags & ACCELFLAG_PUTIMAGE)//support for mem->vid transfer
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
473 mode_capabilities|=CAP_ACCEL_PUTIMAGE;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
474 if((accflags & ACCELFLAG_SETMODE) && (accflags & ACCELFLAG_SYNC)){
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
475 vga_accel(ACCEL_SETMODE,BLITS_IN_BACKGROUND);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
476 mode_capabilities|=CAP_ACCEL_BACKGR;//can draw in backgraund
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
477 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
478 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
479 if(modeinfo->flags & IS_LINEAR){
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
480 mode_capabilities|=CAP_LINEAR; //don't use bank & vga_draw
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
481 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
482 else{
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
483 if(modeinfo->flags & CAPABLE_LINEAR){
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
484 int vid_mem_size;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
485 vid_mem_size = vga_setlinearaddressing();
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
486 if(vid_mem_size != -1){
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
487 modeinfo=vga_getmodeinfo(vid_mode);//sometimes they change parameters
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
488 mode_capabilities|=CAP_LINEAR;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
489 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
490 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
491 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
492 }//fi force native
9658
0e6d7f48309e fix find_best fail if the black area is bigger than image, few more verbose messages, OSD not rendered if native mode
iive
parents: 9621
diff changeset
493 if(mode_capabilities&CAP_LINEAR){
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
494 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_SVGA_VideoModeIsLinearAndMemcpyCouldBeUsed);
9658
0e6d7f48309e fix find_best fail if the black area is bigger than image, few more verbose messages, OSD not rendered if native mode
iive
parents: 9621
diff changeset
495 }
0e6d7f48309e fix find_best fail if the black area is bigger than image, few more verbose messages, OSD not rendered if native mode
iive
parents: 9621
diff changeset
496 if(mode_capabilities&CAP_ACCEL_PUTIMAGE){
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
497 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_SVGA_VideoModeHasHardwareAcceleration);
18335
5766a9d21992 Rename some misspelled and misnamed messages.
diego
parents: 18234
diff changeset
498 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_SVGA_IfItWorksForYouIWouldLikeToKnow);
9658
0e6d7f48309e fix find_best fail if the black area is bigger than image, few more verbose messages, OSD not rendered if native mode
iive
parents: 9621
diff changeset
499 }
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
500
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
501 //here is the place to handle strides for accel_ modes;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
502 mode_stride=modeinfo->linewidth;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
503 //we may try to set a bigger stride for video mode that will match the mpi->stride,
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
504 //this way we will transfer more data, but HW put_image can do it in backgraund!
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
505
11000
6e35326c742f many small typo and grammar fixes
gabucino
parents: 10940
diff changeset
506 //now let's see how many pages we can use
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
507 max_pages = modeinfo->maxpixels/(modeinfo->height * modeinfo->width);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
508 if(max_pages > MAXPAGES) max_pages = MAXPAGES;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
509 if(!vo_doublebuffering) max_pages=1;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
510 //fill PageStore structs
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
511 {
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
512 int i;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
513 uint8_t * GRAPH_MEM;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
514 int dof;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
515 GRAPH_MEM=vga_getgraphmem();
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
516 for(i=0;i<max_pages;i++){
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
517 //calculate display offset
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
518 dof = i * modeinfo->height * modeinfo->width;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
519 if(modeinfo->bytesperpixel != 0) dof*=modeinfo->bytesperpixel;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
520 //check video chip limitations
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
521 if( dof != (dof & modeinfo->startaddressrange) ){
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
522 max_pages=i;//page 0 will never come here
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
523 break;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
524 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
525 PageStore[i].yoffset = i * modeinfo->height;//starting y offset
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
526 PageStore[i].vbase = GRAPH_MEM + i*modeinfo->height*mode_stride; //memory base address
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
527 PageStore[i].doffset = dof; //display offset
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
528 PageStore[i].locks = PAGE_EMPTY;
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
529 }
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
530 }
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
531 assert(max_pages>0);
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
532 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_SVGA_VideoModeHas,max_pages);
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
533 //15bpp
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
534 if(modeinfo->bytesperpixel!=0)
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
535 vga_claimvideomemory(max_pages * modeinfo->height * modeinfo->width * modeinfo->bytesperpixel);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
536 else
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
537 vga_claimvideomemory(max_pages * modeinfo->height * modeinfo->width * mode_bpp / 8);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
538
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
539 cpage=old_page=0;
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
540 svga_clear_box(0,0,modeinfo->width,modeinfo->height * max_pages);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
541
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
542 image_height=req_h;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
543 image_width=req_w;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
544 x_pos = (modeinfo->width - req_w) / 2;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
545 y_pos = (modeinfo->height - req_h) / 2;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
546 x_pos &= ~(15); //align x offset position to 16 pixels
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
547 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_SVGA_CenteringImageStartAt,x_pos,y_pos);
8520
602cf042a013 10l by Matan
alex
parents: 8515
diff changeset
548
602cf042a013 10l by Matan
alex
parents: 8515
diff changeset
549 #ifdef CONFIG_VIDIX
8515
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
550
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
551 if(vidix_name[0]){
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
552 vidix_init(width, height, x_pos, y_pos, modeinfo->width, modeinfo->height,
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
553 format, mode_bpp, modeinfo->width,modeinfo->height);
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
554 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_SVGA_UsingVidix,width,height,
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
555 modeinfo->width,modeinfo->height);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
556 vidix_start();
11158
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 11000
diff changeset
557 /*set colorkey*/
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 11000
diff changeset
558 if(vidix_grkey_support()){
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 11000
diff changeset
559 vidix_grkey_get(&gr_key);
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 11000
diff changeset
560 gr_key.key_op = KEYS_PUT;
11216
30eccb0d1a64 fixed -nocolorkey
alex
parents: 11158
diff changeset
561 if (!(vo_colorkey & 0xFF000000)) {
11158
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 11000
diff changeset
562 gr_key.ckey.op = CKEY_TRUE;
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 11000
diff changeset
563 gr_key.ckey.red = (vo_colorkey & 0x00FF0000) >> 16;
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 11000
diff changeset
564 gr_key.ckey.green = (vo_colorkey & 0x0000FF00) >> 8;
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 11000
diff changeset
565 gr_key.ckey.blue = vo_colorkey & 0x000000FF;
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 11000
diff changeset
566 } else
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 11000
diff changeset
567 gr_key.ckey.op = CKEY_FALSE;
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 11000
diff changeset
568 vidix_grkey_set(&gr_key);
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 11000
diff changeset
569 }
8515
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
570 }
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
571 #endif
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
572
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
573 vga_setdisplaystart(0);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
574 return (0);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
575 }
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
576
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
577 static int draw_slice(uint8_t *image[],int stride[],
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
578 int w, int h, int x, int y) {
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
579 assert(0);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
580 UNUSED(image);UNUSED(stride);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
581 UNUSED(w);UNUSED(h);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
582 UNUSED(x);UNUSED(y);
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
583
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
584 return VO_ERROR;//this is yv12 only -> vf_scale should do all transforms
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
585 }
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
586
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
587 static int draw_frame(uint8_t *src[]) {
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
588 assert(0);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
589 UNUSED(src);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
590 return VO_ERROR;//this one should not be called
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
591 }
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
592
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
593 static void draw_osd(void)
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
594 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 16280
diff changeset
595 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
596 mp_msg(MSGT_VO,MSGL_DBG4, "vo_svga: draw_osd()\n");
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
597 //only modes with bytesperpixel>0 can draw OSD
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
598 if(modeinfo->bytesperpixel==0) return;
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
599 if(!(mode_capabilities&CAP_LINEAR)) return;//force_native will remove OSD
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
600
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
601 if(blackbar_osd){
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
602 //111
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
603 //3 4
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
604 //222
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
605 svga_clear_box(0,0 + PageStore[cpage].yoffset,
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
606 modeinfo->width, y_pos);
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
607 svga_clear_box(0, image_height + y_pos + PageStore[cpage].yoffset,
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
608 modeinfo->width, modeinfo->height-(image_height+ y_pos));
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
609 svga_clear_box(0, y_pos + PageStore[cpage].yoffset,
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
610 x_pos, image_height);
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
611 svga_clear_box(image_width + x_pos, y_pos + PageStore[cpage].yoffset,
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
612 modeinfo->width-(x_pos+image_width), image_height);
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
613 // vo_remove_text(modeinfo->width, modeinfo->height, clear_alpha);
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
614 vo_draw_text(modeinfo->width, modeinfo->height, draw_alpha);
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
615 }else{
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
616 vo_draw_text(image_width, image_height, draw_alpha);
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
617 }
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
618 }
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
619
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
620 static void flip_page(void) {
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
621 PageStore[old_page].locks=PAGE_EMPTY;
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
622 PageStore[cpage].locks=PAGE_BUSY;
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
623
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 16280
diff changeset
624 if( mp_msg_test(MSGT_VO,MSGL_DBG3) )
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
625 mp_msg(MSGT_VO,MSGL_DBG3, "vo_svga: viewing page %d\n",cpage);
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
626 if(sync_flip && old_page!=cpage){
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
627 if( mp_msg_test(MSGT_VO,MSGL_DBG3) ) mp_msg(MSGT_VO,MSGL_DBG3, "vo_svga:vga_waitretrace\n");
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
628 vga_waitretrace();
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
629 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
630 vga_setdisplaystart(PageStore[cpage].doffset);
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
631
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
632 old_page=cpage;//cpage will be overwriten on next draw_image
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
633 }
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
634
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
635 static void check_events(void) {
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
636 }
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
637
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
638 static void uninit(void) {
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
639
8515
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
640 #ifdef CONFIG_VIDIX
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
641 if(vidix_name[0])vidix_term();
b4e5d87b878b vidix support and better device options handler by Matan Ziv-Av <matan@svgalib.org>
alex
parents: 8148
diff changeset
642 #endif
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
643 vga_setmode(TEXT);
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
644 }
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
645
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
646 /* --------------------------------------------------------------------- */
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
647 static int query_format(uint32_t format) {
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
648 int32_t req_bpp,flags;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
649 int i,lastmode;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
650 vga_modeinfo * vminfo;
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
651
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 16280
diff changeset
652 if ( mp_msg_test(MSGT_VO,MSGL_DBG4) )
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
653 mp_msg(MSGT_VO,MSGL_DBG4, "vo_svga: query_format=%X \n",format);
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
654 //only RGB modes supported
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
655 if( (!IMGFMT_IS_RGB(format)) && (!IMGFMT_IS_BGR(format)) ) return 0;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
656
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
657 // Reject different endian
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
658 #ifdef WORDS_BIGENDIAN
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
659 if (IMGFMT_IS_BGR(format)) return 0;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
660 #else
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
661 if (IMGFMT_IS_RGB(format)) return 0;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
662 #endif
485
dfafa47d751d Tons of code rewrites.
se7encode
parents: 483
diff changeset
663
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
664 //svgalib supports only BG4B! if we want BGR4 we have to emulate it (sw)
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
665 if( format==IMGFMT_BGR4 || format==IMGFMT_RGB4) return 0;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
666 req_bpp = IMGFMT_RGB_DEPTH(format);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
667 if( vo_dbpp>0 && vo_dbpp!=req_bpp ) return 0; //support -bpp options
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
668 //scan all modes
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
669 lastmode = vga_lastmodenumber();
9686
a7aeb72f6fc9 Fix last mode ignored bug
iive
parents: 9659
diff changeset
670 for(i=1;i<=lastmode;i++){
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
671 vminfo = vga_getmodeinfo(i);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
672 if( vminfo == NULL ) continue;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
673 if( vga_hasmode(i) == 0 ) continue;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
674 if( req_bpp != bpp_from_vminfo(vminfo) ) continue;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
675 if( (force_vm > 0) && (force_vm != i) ) continue;//quick hack
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
676 flags = VFCAP_CSP_SUPPORTED|
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
677 VFCAP_CSP_SUPPORTED_BY_HW|
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
678 VFCAP_ACCEPT_STRIDE|
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
679 0;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
680 if(req_bpp>8) flags|=VFCAP_OSD;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
681 return flags;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
682 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
683 return 0;
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
684 }
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
685
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
686 static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src,
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
687 unsigned char *srca, int stride) {
7558
f89b4a70dbda warning fix - hope it don't break it
arpi
parents: 7472
diff changeset
688 char* base;
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
689
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 16280
diff changeset
690 if( mp_msg_test(MSGT_VO,MSGL_DBG3) )
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
691 mp_msg(MSGT_VO,MSGL_DBG3, "vo_svga: draw_alpha(x0=%d,y0=%d,w=%d,h=%d,src=%p,srca=%p,stride=%d\n",
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
692 x0,y0,w,h,src,srca,stride);
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
693 if(!blackbar_osd) {
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
694 //drawing in the image, so place the stuff there
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
695 x0+=x_pos;
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
696 y0+=y_pos;
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
697 }
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
698
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 16280
diff changeset
699 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
700 mp_msg(MSGT_VO,MSGL_DBG4, "vo_svga: OSD draw in page %d\n",cpage);
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
701 base=PageStore[cpage].vbase + y0*mode_stride + x0*modeinfo->bytesperpixel;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
702 switch (mode_bpp) {
327
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
703 case 32:
10940
b99be2c88faf OSD stride fix and correct email
iive
parents: 10924
diff changeset
704 vo_draw_alpha_rgb32(w, h, src, srca, stride, base, mode_stride);
327
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
705 break;
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
706 case 24:
10940
b99be2c88faf OSD stride fix and correct email
iive
parents: 10924
diff changeset
707 vo_draw_alpha_rgb24(w, h, src, srca, stride, base, mode_stride);
327
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
708 break;
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
709 case 16:
10940
b99be2c88faf OSD stride fix and correct email
iive
parents: 10924
diff changeset
710 vo_draw_alpha_rgb16(w, h, src, srca, stride, base, mode_stride);
327
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
711 break;
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
712 case 15:
10940
b99be2c88faf OSD stride fix and correct email
iive
parents: 10924
diff changeset
713 vo_draw_alpha_rgb15(w, h, src, srca, stride, base, mode_stride);
327
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
714 break;
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
715 }
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
716 }
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 2982
diff changeset
717
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
718 static uint32_t get_image(mp_image_t *mpi){
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
719 int page;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
720
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
721 if(!IMGFMT_IS_BGR(mpi->imgfmt) && !IMGFMT_IS_RGB(mpi->imgfmt) ){
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
722 assert(0);//should never happen
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
723 return(VO_FALSE);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
724 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
725
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
726 if (
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
727 ( (mpi->type != MP_IMGTYPE_STATIC) && (mpi->type != MP_IMGTYPE_TEMP)) ||
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
728 (mpi->flags & MP_IMGFLAG_PLANAR) ||
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
729 (mpi->flags & MP_IMGFLAG_YUV)
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
730 )
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
731 return(VO_FALSE);
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
732
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
733 //reading from video memory is horribly slow
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
734 if( !(mpi->flags & MP_IMGFLAG_READABLE) && vo_directrendering &&
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
735 (mode_capabilities & CAP_LINEAR) ){
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
736
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
737 //find free page and reserve it
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
738 page=page_find_free();
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
739 if(page >= 0){
10924
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
740 PageStore[page].locks=PAGE_BUSY;
f531971e44cf blackbar osd support based on patch send by Dimitar Zhekov <jimmy@is-vn.bg>, page code removed/merged, small updates
iive
parents: 9788
diff changeset
741
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
742 mpi->flags |= MP_IMGFLAG_DIRECT;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
743 mpi->stride[0] = mode_stride;
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
744 mpi->planes[0] = PageStore[page].vbase +
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
745 y_pos*mode_stride + (x_pos*mpi->bpp)/8;
13865
33a4b3714458 proper gcc4 compile-fix suggested by richard
atmos4
parents: 13829
diff changeset
746 mpi->priv=(void *)page;
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 16280
diff changeset
747 if( mp_msg_test(MSGT_VO,MSGL_DBG3) )
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
748 mp_msg(MSGT_VO,MSGL_DBG3, "vo_svga: direct render allocated! page=%d\n",page);
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
749 return(VO_TRUE);
5679
30f196ff3bec This patch replaces vo_svga.c with an improved version that does not use
arpi
parents: 4596
diff changeset
750 }
9621
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
751 }
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
752
3ef467aac4a1 new svga driver - support double buffering, fast_memcpy, direct render and HW acceleration
iive
parents: 9237
diff changeset
753 return(VO_FALSE);
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 2982
diff changeset
754 }