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: