Mercurial > mplayer.hg
comparison libvo/vo_ggi.c @ 1147:82bbd3ee8ce7
hacked osd working on yv12
author | al3x |
---|---|
date | Sun, 17 Jun 2001 18:32:14 +0000 |
parents | 065583b867fd |
children | 93a9a0ca5fb0 |
comparison
equal
deleted
inserted
replaced
1146:a84610bb5476 | 1147:82bbd3ee8ce7 |
---|---|
50 #ifdef GGI_OST | 50 #ifdef GGI_OST |
51 static ggi_pixel white; | 51 static ggi_pixel white; |
52 static ggi_pixel black; | 52 static ggi_pixel black; |
53 #endif | 53 #endif |
54 | 54 |
55 static int ggi_setmode(uint32_t d_width, uint32_t d_height, int d_depth, int format) | 55 static int ggi_setmode(uint32_t d_width, uint32_t d_height, int d_depth) |
56 { | 56 { |
57 ggi_mode mode = | 57 ggi_mode mode = |
58 { | 58 { |
59 1, /* frames */ | 59 1, /* frames */ |
60 { GGI_AUTO, GGI_AUTO }, /* visible */ | 60 { GGI_AUTO, GGI_AUTO }, /* visible */ |
107 ggiClose(ggi_vis); | 107 ggiClose(ggi_vis); |
108 ggiExit(); | 108 ggiExit(); |
109 return(-1); | 109 return(-1); |
110 } | 110 } |
111 | 111 |
112 if (ggiGetMode(ggi_vis, &mode) != 0) | |
113 { | |
114 printf("ggi-setmode: unable to get mode\n"); | |
115 ggiClose(ggi_vis); | |
116 ggiExit(); | |
117 return(-1); | |
118 } | |
119 | |
112 virt_width = mode.virt.x; | 120 virt_width = mode.virt.x; |
113 virt_height = mode.virt.y; | 121 virt_height = mode.virt.y; |
114 vo_screenwidth = mode.visible.x; | 122 vo_screenwidth = mode.visible.x; |
115 vo_screenheight = mode.visible.y; | 123 vo_screenheight = mode.visible.y; |
116 vo_depthonscreen = d_depth; | 124 vo_depthonscreen = d_depth; |
117 ggi_bpp = d_depth; /* why ? */ | 125 // vo_depthonscreen = GT_DEPTH(mode.graphtype); |
126 // ggi_bpp = GT_SIZE(mode.graphtype); | |
127 ggi_bpp = vo_depthonscreen; | |
118 | 128 |
119 #ifdef get_db_info | 129 #ifdef get_db_info |
120 { | 130 { |
121 const ggi_directbuffer *db = ggiDBGetBuffer(ggi_vis, 0); | 131 const ggi_directbuffer *db = ggiDBGetBuffer(ggi_vis, 0); |
122 | 132 |
133 ggiSetColorfulPalette(ggi_vis); | 143 ggiSetColorfulPalette(ggi_vis); |
134 ggiGetPalette(ggi_vis, 0, 1 << ggi_bpp, pal); | 144 ggiGetPalette(ggi_vis, 0, 1 << ggi_bpp, pal); |
135 } | 145 } |
136 | 146 |
137 if (verbose) | 147 if (verbose) |
138 printf("ggi-setmode: %dx%d (virt: %dx%d) screen depth: %d, bpp: %d, format: %s\n", | 148 printf("ggi-setmode: %dx%d (virt: %dx%d) screen depth: %d, bpp: %d\n", |
139 vo_screenwidth, vo_screenheight, virt_width, virt_height, | 149 vo_screenwidth, vo_screenheight, virt_width, virt_height, |
140 vo_depthonscreen, ggi_bpp, vo_format_name(ggi_format)); | 150 vo_depthonscreen, ggi_bpp); |
141 | 151 |
142 ggi_bppmul = ggi_bpp/8; | 152 ggi_bppmul = ggi_bpp/8; |
143 | 153 |
144 return(0); | 154 return(0); |
145 } | 155 } |
147 | 157 |
148 static uint32_t init(uint32_t width, uint32_t height, uint32_t d_width, | 158 static uint32_t init(uint32_t width, uint32_t height, uint32_t d_width, |
149 uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format) | 159 uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format) |
150 { | 160 { |
151 vo_depthonscreen = 32; | 161 vo_depthonscreen = 32; |
152 | |
153 printf("ggi-init: This driver has got bugs, if you can, fix them.\n"); | 162 printf("ggi-init: This driver has got bugs, if you can, fix them.\n"); |
154 | 163 |
155 if (ggiInit() != 0) | 164 if (ggiInit() != 0) |
156 { | 165 { |
157 printf("ggi-init: unable to initialize GGI\n"); | 166 printf("ggi-init: unable to initialize GGI\n"); |
201 case IMGFMT_BGR32: | 210 case IMGFMT_BGR32: |
202 ggi_bpp = 32; | 211 ggi_bpp = 32; |
203 break; | 212 break; |
204 case IMGFMT_YV12: /* rgb, 24bit */ | 213 case IMGFMT_YV12: /* rgb, 24bit */ |
205 ggi_bpp = 16; | 214 ggi_bpp = 16; |
206 yuv2rgb_init(vo_depthonscreen, MODE_RGB); | 215 yuv2rgb_init(32/*vo_depthonscreen*/, MODE_RGB); |
207 break; | 216 break; |
208 default: | 217 default: |
209 printf("ggi-init: no suitable image format found (requested: %s)\n", | 218 printf("ggi-init: no suitable image format found (requested: %s)\n", |
210 vo_format_name(format)); | 219 vo_format_name(format)); |
211 return(-1); | 220 return(-1); |
212 } | 221 } |
213 ggi_format = format; | 222 ggi_format = format; |
214 | 223 |
224 if (ggi_setmode(d_width, d_height, vo_depthonscreen) != 0) | |
225 { | |
226 printf("ggi-init: setmode returned with error\n"); | |
227 return(-1); | |
228 } | |
229 | |
230 printf("ggi-init: input: %d bpp %s - screen depth: %d\n", ggi_bpp, | |
231 vo_format_name(ggi_format), vo_depthonscreen); | |
232 | |
215 ggiSetFlags(ggi_vis, GGIFLAG_ASYNC); | 233 ggiSetFlags(ggi_vis, GGIFLAG_ASYNC); |
216 | |
217 if (ggi_setmode(d_width, d_height, vo_depthonscreen, ggi_format) != 0) | |
218 { | |
219 printf("ggi-init: setmode returned with error\n"); | |
220 return(-1); | |
221 } | |
222 | 234 |
223 ggi_buffer = (ggi_directbuffer *)ggiDBGetBuffer(ggi_vis, 0); | 235 ggi_buffer = (ggi_directbuffer *)ggiDBGetBuffer(ggi_vis, 0); |
224 | 236 |
225 if (ggi_buffer == NULL) | 237 if (ggi_buffer == NULL) |
226 { | 238 { |
292 switch(ggi_format) | 304 switch(ggi_format) |
293 { | 305 { |
294 case IMGFMT_YV12: | 306 case IMGFMT_YV12: |
295 case IMGFMT_I420: | 307 case IMGFMT_I420: |
296 case IMGFMT_IYUV: | 308 case IMGFMT_IYUV: |
297 vo_draw_alpha_yv12(w, h, src, srca, stride, | 309 switch (vo_depthonscreen) |
298 ggi_buffer->write+(virt_width*y0+x0), | 310 { |
299 virt_width); | 311 case 32: |
312 vo_draw_alpha_rgb32(w, h, src, srca, stride, | |
313 ggi_buffer->write+4*(virt_width*y0+x0), 4*virt_width); | |
314 break; | |
315 case 24: | |
316 vo_draw_alpha_rgb24(w, h, src, srca, stride, | |
317 ggi_buffer->write+3*(virt_width*y0+x0), 3*virt_width); | |
318 break; | |
319 case 16: | |
320 vo_draw_alpha_rgb16(w, h, src, srca, stride, | |
321 ggi_buffer->write+2*(virt_width*y0+x0), 2*virt_width); | |
322 break; | |
323 case 15: | |
324 vo_draw_alpha_rgb15(w, h, src, srca, stride, | |
325 ggi_buffer->write+2*(virt_width*y0+x0), 2*virt_width); | |
326 break; | |
327 } | |
328 // vo_draw_alpha_yv12(w, h, src, srca, stride, | |
329 // ggi_buffer->write+(virt_width*y0+x0), | |
330 // virt_width); | |
300 break; | 331 break; |
301 case IMGFMT_YUY2: | 332 case IMGFMT_YUY2: |
302 case IMGFMT_YVYU: | 333 case IMGFMT_YVYU: |
303 vo_draw_alpha_yuy2(w, h, src, srca, stride, | 334 vo_draw_alpha_yuy2(w, h, src, srca, stride, |
304 ggi_buffer->write+2*(virt_width*y0+x0), | 335 ggi_buffer->write+2*(virt_width*y0+x0), |
310 2*virt_width); | 341 2*virt_width); |
311 break; | 342 break; |
312 case IMGFMT_RGB15: | 343 case IMGFMT_RGB15: |
313 case IMGFMT_BGR15: | 344 case IMGFMT_BGR15: |
314 vo_draw_alpha_rgb15(w, h, src, srca, stride, | 345 vo_draw_alpha_rgb15(w, h, src, srca, stride, |
315 ggi_buffer->write+2*(virt_width*y0+x0), | 346 ggi_buffer->write+2*(virt_width*y0+x0), 2*virt_width); |
316 2*virt_width); | |
317 break; | 347 break; |
318 case IMGFMT_RGB16: | 348 case IMGFMT_RGB16: |
319 case IMGFMT_BGR16: | 349 case IMGFMT_BGR16: |
320 vo_draw_alpha_rgb16(w, h, src, srca, stride, | 350 vo_draw_alpha_rgb16(w, h, src, srca, stride, |
321 ggi_buffer->write+2*(virt_width*y0+x0), | 351 ggi_buffer->write+2*(virt_width*y0+x0), 2*virt_width); |
322 2*virt_width); | |
323 break; | 352 break; |
324 case IMGFMT_RGB24: | 353 case IMGFMT_RGB24: |
325 case IMGFMT_BGR24: | 354 case IMGFMT_BGR24: |
326 vo_draw_alpha_rgb24(w, h, src, srca, stride, | 355 vo_draw_alpha_rgb24(w, h, src, srca, stride, |
327 ggi_buffer->write+3*(virt_width*y0+x0), | 356 ggi_buffer->write+3*(virt_width*y0+x0), 3*virt_width); |
328 3*virt_width); | |
329 break; | 357 break; |
330 case IMGFMT_RGB32: | 358 case IMGFMT_RGB32: |
331 case IMGFMT_BGR32: | 359 case IMGFMT_BGR32: |
332 vo_draw_alpha_rgb32(w, h, src, srca, stride, | 360 vo_draw_alpha_rgb32(w, h, src, srca, stride, |
333 ggi_buffer->write+4*(virt_width*y0+x0), | 361 ggi_buffer->write+4*(virt_width*y0+x0), 4*virt_width); |
334 4*virt_width); | |
335 break; | 362 break; |
336 } | 363 } |
337 } | 364 } |
338 #endif | 365 #endif |
339 | 366 |
361 switch(format) | 388 switch(format) |
362 { | 389 { |
363 case IMGFMT_YV12: | 390 case IMGFMT_YV12: |
364 /* case IMGFMT_I420: | 391 /* case IMGFMT_I420: |
365 case IMGFMT_IYUV: | 392 case IMGFMT_IYUV: |
366 case IMGFMT_YUY2: | 393 */ case IMGFMT_YUY2: |
367 case IMGFMT_YVYU: | 394 /* case IMGFMT_YVYU: |
368 case IMGFMT_UYVY:*/ | 395 case IMGFMT_UYVY:*/ |
369 return(1); | 396 return(1); |
370 case IMGFMT_RGB8: | 397 case IMGFMT_RGB8: |
371 case IMGFMT_RGB15: | 398 case IMGFMT_RGB15: |
372 case IMGFMT_RGB16: | 399 case IMGFMT_RGB16: |