comparison libvo/vosub_vidix.c @ 4430:b4cc68c448db

IMGFMT_RGBxx experimental support
author nick
date Thu, 31 Jan 2002 08:53:58 +0000
parents 7a4837091398
children e956fa7f79c7
comparison
equal deleted inserted replaced
4429:edc703059853 4430:b4cc68c448db
257 if(verbose > 1) printf("vosub_vidix: vidix_term() was called\n"); 257 if(verbose > 1) printf("vosub_vidix: vidix_term() was called\n");
258 vidix_stop(); 258 vidix_stop();
259 vdlClose(vidix_handler); 259 vdlClose(vidix_handler);
260 } 260 }
261 261
262 uint32_t vidix_draw_slice_420(uint8_t *image[], int stride[], int w,int h,int x,int y) 262 static uint32_t vidix_draw_slice_420(uint8_t *image[], int stride[], int w,int h,int x,int y)
263 { 263 {
264 uint8_t *src; 264 uint8_t *src;
265 uint8_t *dest; 265 uint8_t *dest;
266 unsigned bespitch,apitch; 266 unsigned bespitch,apitch;
267 int i; 267 int i;
311 dest += bespitch/2; 311 dest += bespitch/2;
312 } 312 }
313 return 0; 313 return 0;
314 } 314 }
315 315
316 uint32_t vidix_draw_slice_422(uint8_t *image[], int stride[], int w,int h,int x,int y) 316 static uint32_t vidix_draw_slice_422(uint8_t *image[], int stride[], int w,int h,int x,int y)
317 { 317 {
318 uint8_t *src; 318 uint8_t *src;
319 uint8_t *dest; 319 uint8_t *dest;
320 unsigned bespitch,apitch; 320 unsigned bespitch,apitch;
321 int i; 321 int i;
331 } 331 }
332 332
333 return 0; 333 return 0;
334 } 334 }
335 335
336 static uint32_t vidix_draw_slice_32(uint8_t *image[], int stride[], int w,int h,int x,int y)
337 {
338 uint8_t *src;
339 uint8_t *dest;
340 unsigned bespitch,apitch;
341 int i;
342 apitch = vidix_play.dest.pitch.y-1;
343 bespitch = (w*4 + apitch) & ~apitch;
344 dest = vidix_mem + vidix_play.offsets[next_frame] + vidix_play.offset.y;
345 dest += bespitch*y + x;
346 src = image[0];
347 for(i=0;i<h;i++){
348 memcpy(dest,src,w*4);
349 src+=stride[0];
350 dest += bespitch;
351 }
352
353 return 0;
354 }
355
356 static uint32_t vidix_draw_slice_24(uint8_t *image[], int stride[], int w,int h,int x,int y)
357 {
358 uint8_t *src;
359 uint8_t *dest;
360 unsigned bespitch,apitch;
361 int i;
362 apitch = vidix_play.dest.pitch.y-1;
363 bespitch = (w*3 + apitch) & ~apitch;
364 dest = vidix_mem + vidix_play.offsets[next_frame] + vidix_play.offset.y;
365 dest += bespitch*y + x;
366 src = image[0];
367 for(i=0;i<h;i++){
368 memcpy(dest,src,w*3);
369 src+=stride[0];
370 dest += bespitch;
371 }
372
373 return 0;
374 }
336 375
337 uint32_t vidix_draw_slice(uint8_t *image[], int stride[], int w,int h,int x,int y) 376 uint32_t vidix_draw_slice(uint8_t *image[], int stride[], int w,int h,int x,int y)
338 { 377 {
339 if(verbose > 1) printf("vosub_vidix: vidix_draw_slice() was called\n"); 378 if(verbose > 1) printf("vosub_vidix: vidix_draw_slice() was called\n");
340 if(src_format == IMGFMT_YV12 || src_format == IMGFMT_I420 || src_format == IMGFMT_IYUV) 379 if(src_format == IMGFMT_YV12 || src_format == IMGFMT_I420 || src_format == IMGFMT_IYUV)
341 vidix_draw_slice_420(image,stride,w,h,x,y); 380 vidix_draw_slice_420(image,stride,w,h,x,y);
342 else 381 else
382 if(src_format == IMGFMT_RGB32 || src_format == IMGFMT_BGR32)
383 vidix_draw_slice_32(image,stride,w,h,x,y);
384 else
385 if(src_format == IMGFMT_RGB24 || src_format == IMGFMT_BGR24)
386 vidix_draw_slice_24(image,stride,w,h,x,y);
387 else
343 vidix_draw_slice_422(image,stride,w,h,x,y); 388 vidix_draw_slice_422(image,stride,w,h,x,y);
344 return 0; 389 return 0;
345 } 390 }
346 391
347 uint32_t vidix_draw_frame(uint8_t *image[]) 392 uint32_t vidix_draw_frame(uint8_t *image[])
351 if(src_format == IMGFMT_YV12 || src_format == IMGFMT_I420 || src_format == IMGFMT_IYUV) 396 if(src_format == IMGFMT_YV12 || src_format == IMGFMT_I420 || src_format == IMGFMT_IYUV)
352 { 397 {
353 printf("vosub_vidix: draw_frame for YUV420 called\nExiting...\n"); 398 printf("vosub_vidix: draw_frame for YUV420 called\nExiting...\n");
354 vidix_term(); 399 vidix_term();
355 exit( EXIT_FAILURE ); 400 exit( EXIT_FAILURE );
401 }
402 else
403 if(src_format == IMGFMT_RGB32 || src_format == IMGFMT_BGR32)
404 {
405 int stride[1];
406 stride[0] = vidix_play.src.w*4;
407 vidix_draw_slice_32(image,stride,vidix_play.src.w,vidix_play.src.h,
408 vidix_play.src.x,vidix_play.src.y);
409 }
410 else
411 if(src_format == IMGFMT_RGB24 || src_format == IMGFMT_BGR24)
412 {
413 int stride[1];
414 stride[0] = vidix_play.src.w*3;
415 vidix_draw_slice_24(image,stride,vidix_play.src.w,vidix_play.src.h,
416 vidix_play.src.x,vidix_play.src.y);
356 } 417 }
357 else 418 else
358 { 419 {
359 int stride[1]; 420 int stride[1];
360 stride[0] = vidix_play.src.w*2; 421 stride[0] = vidix_play.src.w*2;
401 case IMGFMT_YUY2: 462 case IMGFMT_YUY2:
402 vo_draw_alpha_yuy2(w,h,src,srca,stride,lvo_mem+2*(bespitch*y0+x0),2*bespitch); 463 vo_draw_alpha_yuy2(w,h,src,srca,stride,lvo_mem+2*(bespitch*y0+x0),2*bespitch);
403 break; 464 break;
404 case IMGFMT_UYVY: 465 case IMGFMT_UYVY:
405 vo_draw_alpha_yuy2(w,h,src,srca,stride,lvo_mem+2*(bespitch*y0+x0)+1,2*bespitch); 466 vo_draw_alpha_yuy2(w,h,src,srca,stride,lvo_mem+2*(bespitch*y0+x0)+1,2*bespitch);
467 break;
468 case IMGFMT_RGB32:
469 case IMGFMT_BGR32:
470 vo_draw_alpha_rgb32(w,h,src,srca,stride,lvo_mem+4*(y0*bespitch+x0),4*bespitch);
471 break;
472 case IMGFMT_RGB24:
473 case IMGFMT_BGR24:
474 vo_draw_alpha_rgb24(w,h,src,srca,stride,lvo_mem+3*(y0*bespitch+x0),3*bespitch);
475 break;
476 case IMGFMT_RGB16:
477 case IMGFMT_BGR16:
478 vo_draw_alpha_rgb16(w,h,src,srca,stride,lvo_mem+2*(y0*bespitch+x0),2*bespitch);
479 break;
480 case IMGFMT_RGB15:
481 case IMGFMT_BGR15:
482 vo_draw_alpha_rgb15(w,h,src,srca,stride,lvo_mem+2*(y0*bespitch+x0),2*bespitch);
406 break; 483 break;
407 default: 484 default:
408 draw_alpha_null(x0,y0,w,h,src,srca,stride); 485 draw_alpha_null(x0,y0,w,h,src,srca,stride);
409 } 486 }
410 } 487 }