annotate libvo/vo_svga.c @ 483:92f170c8b9ba

fix to newest revision after cvs rollback
author atmosfear
date Tue, 17 Apr 2001 06:22:48 +0000
parents 198b46b739d8
children dfafa47d751d
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 /*
292
2c0bb83b77b3 Some bugfix.
se7encode
parents: 290
diff changeset
2 Video driver for SVGAlib - alpha, slow
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
3 by Zoltan Mark Vician <se7en@sch.bme.hu>
381
bbd079aa1614 Date bugfix :)
se7encode
parents: 377
diff changeset
4 Code started: Mon Apr 1 23:25:47 2001
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
5
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
6 Uses HW acceleration if your card is supported by SVGAlib.
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
7 */
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
8
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
9 #include <stdio.h>
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
10 #include <stdlib.h>
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
11
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
12 #include <vga.h>
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
13 #include <vgagl.h>
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
14
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
15 #include "config.h"
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
16 #include "video_out.h"
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
17 #include "video_out_internal.h"
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
18
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
19 #include "yuv2rgb.h"
377
8ad594a8c94c Bugfixes in draw_slice.
se7encode
parents: 343
diff changeset
20 #include "mmx.h"
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
21
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
22 extern void rgb15to16_mmx(char* s0,char* d0,int count);
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
23
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
24 LIBVO_EXTERN(svga)
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
25
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
26 static vo_info_t vo_info = {
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
27 "SVGAlib",
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
28 "svga",
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
29 "Zoltan Mark Vician <se7en@sch.bme.hu>",
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
30 ""
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
31 };
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
32
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
33 // SVGAlib definitions
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
34
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
35 GraphicsContext *screen;
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
36 GraphicsContext *virt;
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
37
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
38 static uint8_t *scalebuf = NULL, *yuvbuf = NULL, *bppbuf = NULL;
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
39
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
40 static uint32_t orig_w, orig_h, maxw, maxh; // Width, height
377
8ad594a8c94c Bugfixes in draw_slice.
se7encode
parents: 343
diff changeset
41 static float scaling = 1.0;
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
42 static uint32_t x_pos, y_pos; // Position
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
43
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
44 // SVGAlib - list of detected modes
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
45 typedef struct vga_modelist_s {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
46 uint16_t modenum;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
47 vga_modeinfo modeinfo;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
48 struct vga_modelist_s *next;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
49 } vga_modelist_t;
447
b3b28a0d9404 All available videomodes support added.
se7encode
parents: 411
diff changeset
50
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
51 vga_modelist_t *modelist = NULL;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
52
327
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
53 static uint8_t bpp;
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
54 static uint8_t bpp_conv = 0;
448
198b46b739d8 qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents: 447
diff changeset
55 static uint32_t pformat;
447
b3b28a0d9404 All available videomodes support added.
se7encode
parents: 411
diff changeset
56
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
57 #define BPP_15 1
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
58 #define BPP_16 2
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
59 #define BPP_24 4
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
60 #define BPP_32 8
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
61 static uint8_t bpp_avail = 0;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
62
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
63 static uint8_t checked = 0;
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
64
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
65 static int add_mode(uint16_t mode, vga_modeinfo minfo) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
66 vga_modelist_t *list;
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
67
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
68 if (modelist == NULL) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
69 modelist = malloc(sizeof(vga_modelist_t));
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
70 modelist->modenum = mode;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
71 modelist->modeinfo = minfo;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
72 modelist->next = NULL;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
73 if (modelist == NULL) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
74 printf("vo_svga: add_mode() failed. Not enough memory for modelist.");
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
75 return(1); // error
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
76 }
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
77 } else {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
78 list = modelist;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
79 while (list->next != NULL)
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
80 list = list->next;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
81 list->next = malloc(sizeof(vga_modelist_t));
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
82 if (list->next == NULL) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
83 printf("vo_svga: add_mode() failed. Not enough memory for modelist.");
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
84 return(1); // error
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
85 }
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
86 list = list->next;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
87 list->modenum = mode;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
88 list->modeinfo = minfo;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
89 list->next = NULL;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
90 }
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
91 }
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
92
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
93 static int checksupportedmodes() {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
94 uint16_t i;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
95 vga_modeinfo *minfo;
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
96
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
97 checked = 1;
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
98 vga_init();
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
99 vga_disabledriverreport();
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
100 for (i = 1; i < vga_lastmodenumber(); i++)
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
101 if (vga_hasmode(i) > 0) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
102 minfo = vga_getmodeinfo(i);
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
103 switch (minfo->colors) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
104 case 32768: bpp_avail |= BPP_15; break;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
105 case 65536: bpp_avail |= BPP_16; break;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
106 }
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
107 switch (minfo->bytesperpixel) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
108 case 3: bpp_avail |= BPP_24; break;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
109 case 4: bpp_avail |= BPP_32; break;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
110 }
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
111 if (add_mode(i, *minfo))
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
112 return(1);
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
113 }
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
114 }
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
115
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
116 static uint32_t init(uint32_t width, uint32_t height, uint32_t d_width,
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
117 uint32_t d_height, uint32_t fullscreen, char *title,
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
118 uint32_t format) {
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
119 uint32_t req_w = (d_width > 0 ? d_width : width);
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
120 uint32_t req_h = (d_height > 0 ? d_height : height);
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
121 uint16_t vid_mode = 0;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
122 uint8_t widescreen = (((req_w*1.0)/req_h) > (4.0/3)) ? 1 : 0;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
123 vga_modelist_t *list = modelist;
387
43acef8f7c74 Requested resolution (d_width) added.
se7encode
parents: 381
diff changeset
124
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
125 if (!checked) {
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
126 if (checksupportedmodes()) // Looking for available video modes
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
127 return(1);
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
128 }
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
129
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
130 bpp_avail = 0;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
131 while (list != NULL) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
132 if ((list->modeinfo.width >= req_w) && (list->modeinfo.height >= req_h)) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
133 switch (list->modeinfo.colors) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
134 case 32768: bpp_avail |= BPP_15; break;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
135 case 65536: bpp_avail |= BPP_16; break;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
136 }
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
137 switch (list->modeinfo.bytesperpixel) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
138 case 3: bpp_avail |= BPP_24; break;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
139 case 4: bpp_avail |= BPP_32; break;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
140 }
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
141 }
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
142 list = list->next;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
143 }
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
144
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
145 pformat = format;
411
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
146
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
147 // bpp check
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
148 bpp_conv = 0;
411
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
149 if (!vo_dbpp) {
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
150 if (format == IMGFMT_YV12) bpp = 32;
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
151 else bpp = format & 255;
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
152 switch (bpp) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
153 case 32: if (!(bpp_avail & BPP_32)) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
154 printf("vo_svga: Haven't found video mode which fit to: %dx%d %dbpp\n",req_w,req_h,bpp);
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
155 printf("vo_svga: Maybe you should try -bpp\n");
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
156 return(1);
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
157 }
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
158 break;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
159 case 24: if (!(bpp_avail & BPP_24))
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
160 if (!(bpp_avail & BPP_32)) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
161 printf("vo_svga: Haven't found video mode which fit to: %dx%d %dbpp\n",req_w,req_h,bpp);
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
162 printf("vo_svga: Maybe you should try -bpp\n");
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
163 return(1);
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
164 } else {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
165 bpp = 32;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
166 bpp_conv = 1;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
167 }
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
168 break;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
169 case 16: if (!(bpp_avail & BPP_16)) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
170 printf("vo_svga: Haven't found video mode which fit to: %dx%d %dbpp\n",req_w,req_h,bpp);
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
171 printf("vo_svga: Maybe you should try -bpp\n");
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
172 return(1);
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
173 }
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
174 break;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
175 case 15: if (!(bpp_avail & BPP_15))
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
176 if (!(bpp_avail & BPP_16)) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
177 printf("vo_svga: Haven't found video mode which fit to: %dx%d %dbpp\n",req_w,req_h,bpp);
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
178 printf("vo_svga: Maybe you should try -bpp\n");
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
179 return(1);
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
180 } else {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
181 bpp = 16;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
182 bpp_conv = 1;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
183 }
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
184 break;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
185 }
411
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
186 } else {
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
187 bpp = vo_dbpp;
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
188 switch (bpp) {
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
189 case 32: if (!(bpp_avail & BPP_32)) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
190 printf("vo_svga: %dbpp not supported by HW or SVGAlib\n",bpp);
411
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
191 return(1);
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
192 }
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
193 case 24: if (!(bpp_avail & BPP_24)) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
194 printf("vo_svga: %dbpp not supported by HW or SVGAlib\n",bpp);
411
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
195 return(1);
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
196 }
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
197 case 16: if (!(bpp_avail & BPP_16)) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
198 printf("vo_svga: %dbpp not supported by HW or SVGAlib\n",bpp);
411
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
199 return(1);
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
200 }
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
201 case 15: if (!(bpp_avail & BPP_15)) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
202 printf("vo_svga: %dbpp not supported by HW or SVGAlib\n",bpp);
411
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
203 return(1);
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
204 }
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
205 }
53203545daa7 -bpp added.
se7encode
parents: 407
diff changeset
206 }
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
207
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
208 list = modelist;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
209 while ((list != NULL) && (!vid_mode)) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
210 if ((list->modeinfo.width >= req_w) && (list->modeinfo.height >= req_h)) {
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
211 switch (bpp) {
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
212 case 32: if (list->modeinfo.bytesperpixel == 4)
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
213 vid_mode = list->modenum;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
214 case 24: if (list->modeinfo.bytesperpixel == 3)
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
215 vid_mode = list->modenum;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
216 case 16: if (list->modeinfo.colors == 65536)
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
217 vid_mode = list->modenum;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
218 case 15: if (list->modeinfo.colors == 32768)
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
219 vid_mode = list->modenum;
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
220 }
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
221 }
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
222 list = list->next;
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
223 }
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
224
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
225 vga_setlinearaddressing();
286
b2f3f2ab3787 integrated vo_svga by se7en
arpi_esp
parents: 285
diff changeset
226 if (vga_setmode(vid_mode) == -1){
b2f3f2ab3787 integrated vo_svga by se7en
arpi_esp
parents: 285
diff changeset
227 printf("vo_svga: vga_setmode(%d) failed.\n",vid_mode);
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
228 uninit();
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
229 return(1); // error
286
b2f3f2ab3787 integrated vo_svga by se7en
arpi_esp
parents: 285
diff changeset
230 }
b2f3f2ab3787 integrated vo_svga by se7en
arpi_esp
parents: 285
diff changeset
231 if (gl_setcontextvga(vid_mode)){
b2f3f2ab3787 integrated vo_svga by se7en
arpi_esp
parents: 285
diff changeset
232 printf("vo_svga: gl_setcontextvga(%d) failed.\n",vid_mode);
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
233 uninit();
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
234 return(1); // error
286
b2f3f2ab3787 integrated vo_svga by se7en
arpi_esp
parents: 285
diff changeset
235 }
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
236 screen = gl_allocatecontext();
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
237 gl_getcontext(screen);
286
b2f3f2ab3787 integrated vo_svga by se7en
arpi_esp
parents: 285
diff changeset
238 if (gl_setcontextvgavirtual(vid_mode)){
b2f3f2ab3787 integrated vo_svga by se7en
arpi_esp
parents: 285
diff changeset
239 printf("vo_svga: gl_setcontextvgavirtual(%d) failed.\n",vid_mode);
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
240 uninit();
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
241 return(1); // error
286
b2f3f2ab3787 integrated vo_svga by se7en
arpi_esp
parents: 285
diff changeset
242 }
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
243 virt = gl_allocatecontext();
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
244 gl_getcontext(virt);
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
245 gl_setcontext(virt);
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
246 gl_clearscreen(0);
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
247
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
248 if (bpp_conv)
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
249 bppbuf = malloc(maxw * maxh * BYTESPERPIXEL);
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
250 if (bppbuf == NULL) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
251 printf("vo_svga: Not enough memory for buffering!\n");
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
252 uninit();
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
253 return (1);
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
254 }
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
255
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
256 orig_w = width;
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
257 orig_h = height;
343
ec7b16345547 -zoom added.
se7encode
parents: 327
diff changeset
258 if ((fullscreen & 0x04) && (WIDTH != orig_w)) {
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
259 if (!widescreen) {
292
2c0bb83b77b3 Some bugfix.
se7encode
parents: 290
diff changeset
260 maxh = HEIGHT;
2c0bb83b77b3 Some bugfix.
se7encode
parents: 290
diff changeset
261 scaling = maxh / (orig_h * 1.0);
2c0bb83b77b3 Some bugfix.
se7encode
parents: 290
diff changeset
262 maxw = (uint32_t) (orig_w * scaling);
2c0bb83b77b3 Some bugfix.
se7encode
parents: 290
diff changeset
263 scalebuf = malloc(maxw * maxh * BYTESPERPIXEL);
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
264 if (scalebuf == NULL) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
265 printf("vo_svga: Not enough memory for buffering!\n");
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
266 uninit();
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
267 return (1);
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
268 }
292
2c0bb83b77b3 Some bugfix.
se7encode
parents: 290
diff changeset
269 } else {
2c0bb83b77b3 Some bugfix.
se7encode
parents: 290
diff changeset
270 maxw = WIDTH;
2c0bb83b77b3 Some bugfix.
se7encode
parents: 290
diff changeset
271 scaling = maxw / (orig_w * 1.0);
2c0bb83b77b3 Some bugfix.
se7encode
parents: 290
diff changeset
272 maxh = (uint32_t) (orig_h * scaling);
2c0bb83b77b3 Some bugfix.
se7encode
parents: 290
diff changeset
273 scalebuf = malloc(maxw * maxh * BYTESPERPIXEL);
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
274 if (scalebuf == NULL) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
275 printf("vo_svga: Not enough memory for buffering!\n");
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
276 uninit();
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
277 return (1);
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
278 }
292
2c0bb83b77b3 Some bugfix.
se7encode
parents: 290
diff changeset
279 }
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
280 } else {
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
281 maxw = orig_w;
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
282 maxh = orig_h;
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
283 }
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
284 x_pos = (WIDTH - maxw) / 2;
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
285 y_pos = (HEIGHT - maxh) / 2;
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
286
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
287 if (pformat == IMGFMT_YV12) {
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
288 yuv2rgb_init(bpp, MODE_RGB);
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
289 yuvbuf = malloc(maxw * maxh * BYTESPERPIXEL);
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
290 if (yuvbuf == NULL) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
291 printf("vo_svga: Not enough memory for buffering!\n");
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
292 uninit();
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
293 return (1);
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
294 }
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
295 }
377
8ad594a8c94c Bugfixes in draw_slice.
se7encode
parents: 343
diff changeset
296
292
2c0bb83b77b3 Some bugfix.
se7encode
parents: 290
diff changeset
297 printf("SVGAlib resolution: %dx%d %dbpp - ", WIDTH, HEIGHT, bpp);
293
f7e65132e296 Some bugfix.
se7encode
parents: 292
diff changeset
298 if (maxw != orig_w || maxh != orig_h) printf("Video scaled to: %dx%d\n",maxw,maxh);
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
299 else printf("No video scaling\n");
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
300
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
301 return (0);
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
302 }
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
303
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
304 static uint32_t query_format(uint32_t format) {
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
305 uint8_t res = 0;
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
306
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
307 if (!checked) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
308 if (checksupportedmodes()) // Looking for available video modes
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
309 return(0);
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
310 }
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
311 switch (format) {
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
312 case IMGFMT_RGB32:
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
313 case IMGFMT_BGR|32: {
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
314 return ((bpp_avail & BPP_32) ? 1 : 0);
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
315 }
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
316 case IMGFMT_RGB24:
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
317 case IMGFMT_BGR|24: {
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
318 res = (bpp_avail & BPP_24) ? 1 : 0;
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
319 if (!res) {
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
320 res = (bpp_avail & BPP_32) ? 1 : 0;
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
321 bpp_conv = 1;
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
322 }
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
323 return (res);
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
324 }
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
325 case IMGFMT_RGB16:
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
326 case IMGFMT_BGR|16: {
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
327 return ((bpp_avail & BPP_16) ? 1 : 0);
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
328 }
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
329 case IMGFMT_RGB15:
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
330 case IMGFMT_BGR|15: {
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
331 res = (bpp_avail & BPP_15) ? 1 : 0;
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
332 if (!res) {
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
333 res = (bpp_avail & BPP_16) ? 1 : 0;
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
334 bpp_conv = 1;
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
335 }
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
336 return (res);
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
337 }
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
338 case IMGFMT_YV12: return (1);
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
339 }
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
340 return (0);
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
341 }
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
342
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
343 static const vo_info_t* get_info(void) {
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
344 return (&vo_info);
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
345 }
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
346
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
347 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
348 unsigned char *srca, int stride) {
327
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
349 switch (bpp) {
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
350 case 32:
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
351 vo_draw_alpha_rgb32(w, h, src, srca, stride, virt->vbuf+4*(y0*WIDTH+x0), 4*WIDTH);
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
352 break;
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
353 case 24:
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
354 vo_draw_alpha_rgb24(w, h, src, srca, stride, virt->vbuf+3*(y0*WIDTH+x0), 3*WIDTH);
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
355 break;
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
356 case 16:
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
357 vo_draw_alpha_rgb16(w, h, src, srca, stride, virt->vbuf+2*(y0*WIDTH+x0), 2*WIDTH);
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
358 break;
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
359 case 15:
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
360 vo_draw_alpha_rgb15(w, h, src, srca, stride, virt->vbuf+2*(y0*WIDTH+x0), 2*WIDTH);
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
361 break;
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
362 }
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
363 }
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
364
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
365 static uint32_t draw_frame(uint8_t *src[]) {
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
366 if (pformat == IMGFMT_YV12) {
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
367 yuv2rgb(yuvbuf, src[0], src[1], src[2], orig_w, orig_h, orig_w * BYTESPERPIXEL, orig_w, orig_w / 2);
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
368 src[0] = yuvbuf;
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
369 }
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
370 if (scalebuf != NULL) {
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
371 gl_scalebox(orig_w, orig_h, src[0], maxw, maxh, scalebuf);
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
372 src[0] = scalebuf;
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
373 }
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
374 if (bpp_conv) {
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
375 uint16_t *src = (uint16_t *) src[0];
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
376 uint16_t *dest = (uint16_t *) bppbuf;
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
377 uint16_t *end;
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
378
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
379 switch(bpp) {
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
380 case 32:
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
381 end = src + (maxw * maxh * 2);
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
382 while (src < end) {
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
383 *dest++ = *src++;
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
384 (uint8_t *)dest = (uint8_t *)src;
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
385 *(((uint8_t *)dest)+1) = 0;
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
386 dest++;
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
387 src++;
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
388 }
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
389 case 16:
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
390 #ifdef HAVE_MMX
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
391 rgb15to16_mmx(src[0],bppbuf,maxw * maxh * 2);
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
392 #else
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
393 register uint16_t srcdata;
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
394
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
395 end = src + (maxw * maxh);
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
396 while (src < end) {
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
397 srcdata = *src++;
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
398 *dest++ = (srcdata & 0x1f) | ((srcdata & 0x7fe0) << 1);
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
399 }
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
400 #endif
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
401 }
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
402 src[0] = bppbuf;
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
403 }
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
404 gl_putbox(x_pos, y_pos, maxw, maxh, src[0]);
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
405 }
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
406
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
407 static uint32_t draw_slice(uint8_t *image[], int stride[],
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
408 int w, int h, int x, int y) {
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
409 uint8_t *src = yuvbuf;
377
8ad594a8c94c Bugfixes in draw_slice.
se7encode
parents: 343
diff changeset
410 uint32_t sw, sh;
8ad594a8c94c Bugfixes in draw_slice.
se7encode
parents: 343
diff changeset
411
8ad594a8c94c Bugfixes in draw_slice.
se7encode
parents: 343
diff changeset
412 emms();
8ad594a8c94c Bugfixes in draw_slice.
se7encode
parents: 343
diff changeset
413 sw = (uint32_t) (w * scaling);
8ad594a8c94c Bugfixes in draw_slice.
se7encode
parents: 343
diff changeset
414 sh = (uint32_t) (h * scaling);
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
415 yuv2rgb(yuvbuf, image[0], image[1], image[2], w, h, orig_w * BYTESPERPIXEL, stride[0], stride[1]);
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
416 if (scalebuf != NULL) {
377
8ad594a8c94c Bugfixes in draw_slice.
se7encode
parents: 343
diff changeset
417 gl_scalebox(w, h, yuvbuf, sw, sh, scalebuf);
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
418 src = scalebuf;
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
419 }
377
8ad594a8c94c Bugfixes in draw_slice.
se7encode
parents: 343
diff changeset
420 gl_putbox((int)(x * scaling) + x_pos, (int)(y * scaling) + y_pos, sw, sh, src);
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
421 }
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
422
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
423 static void flip_page(void) {
292
2c0bb83b77b3 Some bugfix.
se7encode
parents: 290
diff changeset
424 if (y_pos) {
2c0bb83b77b3 Some bugfix.
se7encode
parents: 290
diff changeset
425 gl_fillbox(0, 0, WIDTH, y_pos, 0);
2c0bb83b77b3 Some bugfix.
se7encode
parents: 290
diff changeset
426 gl_fillbox(0, HEIGHT - y_pos, WIDTH, y_pos, 0);
2c0bb83b77b3 Some bugfix.
se7encode
parents: 290
diff changeset
427 } else {
2c0bb83b77b3 Some bugfix.
se7encode
parents: 290
diff changeset
428 gl_fillbox(0, 0, x_pos, HEIGHT, 0);
2c0bb83b77b3 Some bugfix.
se7encode
parents: 290
diff changeset
429 gl_fillbox(WIDTH - x_pos, 0, x_pos, HEIGHT, 0);
327
e7731f5c76cc OSD renderers for all modes added.
se7encode
parents: 293
diff changeset
430 }
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
431 vo_draw_text(WIDTH, HEIGHT, draw_alpha);
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
432 gl_copyscreen(screen);
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
433 }
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
434
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
435 static void check_events(void) {
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
436 }
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
437
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
438 static void uninit(void) {
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
439 vga_modelist_t *list = modelist;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
440
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
441 gl_freecontext(screen);
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
442 gl_freecontext(virt);
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
443 vga_setmode(TEXT);
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
444 if (bppbuf != NULL)
407
0a5b131f1f11 24/15bpp -> 32/16bpp added.
se7encode
parents: 387
diff changeset
445 free(bppbuf);
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
446 if (scalebuf != NULL)
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
447 free(scalebuf);
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
448 if (yuvbuf != NULL)
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
449 free(yuvbuf);
483
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
450 if (modelist != NULL) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
451 while (modelist->next != NULL) {
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
452 list = modelist;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
453 while (list->next != NULL)
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
454 list = list->next;
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
455 free(list);
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
456 }
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
457 free(modelist);
92f170c8b9ba fix to newest revision after cvs rollback
atmosfear
parents: 448
diff changeset
458 }
285
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
459 }
5cb4fdc94146 SVGAlib support - vo_svga.c added.
se7encode
parents:
diff changeset
460