comparison xan.c @ 1476:72e115e94673 libavcodec

MACRO-ize a bunch of redundant code blocks; fix 16-bit RGB modes (it's RGB not RGG)
author tmmm
date Fri, 19 Sep 2003 04:00:32 +0000
parents 618b148f6b76
children 6b224ca24033
comparison
equal deleted inserted replaced
1475:26eb7678cb46 1476:72e115e94673
272 g = *palette_data++; 272 g = *palette_data++;
273 b = *palette_data++; 273 b = *palette_data++;
274 palette16[i] = 274 palette16[i] =
275 ((r >> 3) << 10) | 275 ((r >> 3) << 10) |
276 ((g >> 3) << 5) | 276 ((g >> 3) << 5) |
277 ((g >> 3) << 0); 277 ((b >> 3) << 0);
278 } 278 }
279 break; 279 break;
280 280
281 case PIX_FMT_RGB565: 281 case PIX_FMT_RGB565:
282 palette16 = (unsigned short *)s->palette; 282 palette16 = (unsigned short *)s->palette;
285 g = *palette_data++; 285 g = *palette_data++;
286 b = *palette_data++; 286 b = *palette_data++;
287 palette16[i] = 287 palette16[i] =
288 ((r >> 3) << 11) | 288 ((r >> 3) << 11) |
289 ((g >> 2) << 5) | 289 ((g >> 2) << 5) |
290 ((g >> 3) << 0); 290 ((b >> 3) << 0);
291 } 291 }
292 break; 292 break;
293 293
294 case PIX_FMT_RGB24: 294 case PIX_FMT_RGB24:
295 for (i = 0; i < PALETTE_COUNT; i++) { 295 for (i = 0; i < PALETTE_COUNT; i++) {
335 default: 335 default:
336 printf (" Xan WC3: Unhandled colorspace\n"); 336 printf (" Xan WC3: Unhandled colorspace\n");
337 break; 337 break;
338 } 338 }
339 } 339 }
340
341 /* advance current_x variable; reset accounting variables if current_x
342 * moves beyond width */
343 #define ADVANCE_CURRENT_X() \
344 current_x++; \
345 if (current_x >= width) { \
346 index += line_inc; \
347 current_x = 0; \
348 }
340 349
341 static void inline xan_wc3_output_pixel_run(XanContext *s, 350 static void inline xan_wc3_output_pixel_run(XanContext *s,
342 unsigned char *pixel_buffer, int x, int y, int pixel_count) 351 unsigned char *pixel_buffer, int x, int y, int pixel_count)
343 { 352 {
344 int stride; 353 int stride;
369 378
370 /* don't do a memcpy() here; keyframes generally copy an entire 379 /* don't do a memcpy() here; keyframes generally copy an entire
371 * frame of data and the stride needs to be accounted for */ 380 * frame of data and the stride needs to be accounted for */
372 palette_plane[index++] = *pixel_buffer++; 381 palette_plane[index++] = *pixel_buffer++;
373 382
374 current_x++; 383 ADVANCE_CURRENT_X();
375 if (current_x >= width) {
376 /* reset accounting variables */
377 index += line_inc;
378 current_x = 0;
379 }
380 } 384 }
381 break; 385 break;
382 386
383 case PIX_FMT_RGB555: 387 case PIX_FMT_RGB555:
384 case PIX_FMT_RGB565: 388 case PIX_FMT_RGB565:
390 current_x = x; 394 current_x = x;
391 while(pixel_count--) { 395 while(pixel_count--) {
392 396
393 rgb16_plane[index++] = palette16[*pixel_buffer++]; 397 rgb16_plane[index++] = palette16[*pixel_buffer++];
394 398
395 current_x++; 399 ADVANCE_CURRENT_X();
396 if (current_x >= width) {
397 /* reset accounting variables */
398 index += line_inc;
399 current_x = 0;
400 }
401 } 400 }
402 break; 401 break;
403 402
404 case PIX_FMT_RGB24: 403 case PIX_FMT_RGB24:
405 case PIX_FMT_BGR24: 404 case PIX_FMT_BGR24:
413 412
414 rgb_plane[index++] = s->palette[pix * 4 + 0]; 413 rgb_plane[index++] = s->palette[pix * 4 + 0];
415 rgb_plane[index++] = s->palette[pix * 4 + 1]; 414 rgb_plane[index++] = s->palette[pix * 4 + 1];
416 rgb_plane[index++] = s->palette[pix * 4 + 2]; 415 rgb_plane[index++] = s->palette[pix * 4 + 2];
417 416
418 current_x++; 417 ADVANCE_CURRENT_X();
419 if (current_x >= width) {
420 /* reset accounting variables */
421 index += line_inc;
422 current_x = 0;
423 }
424 } 418 }
425 break; 419 break;
426 420
427 case PIX_FMT_RGBA32: 421 case PIX_FMT_RGBA32:
428 rgb32_plane = (unsigned int *)s->current_frame.data[0]; 422 rgb32_plane = (unsigned int *)s->current_frame.data[0];
433 current_x = x; 427 current_x = x;
434 while(pixel_count--) { 428 while(pixel_count--) {
435 429
436 rgb32_plane[index++] = palette32[*pixel_buffer++]; 430 rgb32_plane[index++] = palette32[*pixel_buffer++];
437 431
438 current_x++; 432 ADVANCE_CURRENT_X();
439 if (current_x >= width) {
440 /* reset accounting variables */
441 index += line_inc;
442 current_x = 0;
443 }
444 } 433 }
445 break; 434 break;
446 435
447 case PIX_FMT_YUV444P: 436 case PIX_FMT_YUV444P:
448 y_plane = s->current_frame.data[0]; 437 y_plane = s->current_frame.data[0];
458 y_plane[index] = s->palette[pix * 4 + 0]; 447 y_plane[index] = s->palette[pix * 4 + 0];
459 u_plane[index] = s->palette[pix * 4 + 1]; 448 u_plane[index] = s->palette[pix * 4 + 1];
460 v_plane[index] = s->palette[pix * 4 + 2]; 449 v_plane[index] = s->palette[pix * 4 + 2];
461 450
462 index++; 451 index++;
463 current_x++; 452 ADVANCE_CURRENT_X();
464 if (current_x >= width) {
465 /* reset accounting variables */
466 index += line_inc;
467 current_x = 0;
468 }
469 } 453 }
470 break; 454 break;
471 455
472 default: 456 default:
473 printf (" Xan WC3: Unhandled colorspace\n"); 457 printf (" Xan WC3: Unhandled colorspace\n");
474 break; 458 break;
475 } 459 }
476 } 460 }
461
462 #define ADVANCE_CURFRAME_X() \
463 curframe_x++; \
464 if (curframe_x >= width) { \
465 curframe_index += line_inc; \
466 curframe_x = 0; \
467 }
468
469 #define ADVANCE_PREVFRAME_X() \
470 prevframe_x++; \
471 if (prevframe_x >= width) { \
472 prevframe_index += line_inc; \
473 prevframe_x = 0; \
474 }
477 475
478 static void inline xan_wc3_copy_pixel_run(XanContext *s, 476 static void inline xan_wc3_copy_pixel_run(XanContext *s,
479 int x, int y, int pixel_count, int motion_x, int motion_y) 477 int x, int y, int pixel_count, int motion_x, int motion_y)
480 { 478 {
481 int stride; 479 int stride;
504 while(pixel_count--) { 502 while(pixel_count--) {
505 503
506 palette_plane[curframe_index++] = 504 palette_plane[curframe_index++] =
507 prev_palette_plane[prevframe_index++]; 505 prev_palette_plane[prevframe_index++];
508 506
509 curframe_x++; 507 ADVANCE_CURFRAME_X();
510 if (curframe_x >= width) { 508 ADVANCE_PREVFRAME_X();
511 /* reset accounting variables */
512 curframe_index += line_inc;
513 curframe_x = 0;
514 }
515
516 prevframe_x++;
517 if (prevframe_x >= width) {
518 /* reset accounting variables */
519 prevframe_index += line_inc;
520 prevframe_x = 0;
521 }
522 } 509 }
523 break; 510 break;
524 511
525 case PIX_FMT_RGB555: 512 case PIX_FMT_RGB555:
526 case PIX_FMT_RGB565: 513 case PIX_FMT_RGB565:
535 while(pixel_count--) { 522 while(pixel_count--) {
536 523
537 rgb16_plane[curframe_index++] = 524 rgb16_plane[curframe_index++] =
538 prev_rgb16_plane[prevframe_index++]; 525 prev_rgb16_plane[prevframe_index++];
539 526
540 curframe_x++; 527 ADVANCE_CURFRAME_X();
541 if (curframe_x >= width) { 528 ADVANCE_PREVFRAME_X();
542 /* reset accounting variables */
543 curframe_index += line_inc;
544 curframe_x = 0;
545 }
546
547 prevframe_x++;
548 if (prevframe_x >= width) {
549 /* reset accounting variables */
550 prevframe_index += line_inc;
551 prevframe_x = 0;
552 }
553 } 529 }
554 break; 530 break;
555 531
556 case PIX_FMT_RGB24: 532 case PIX_FMT_RGB24:
557 case PIX_FMT_BGR24: 533 case PIX_FMT_BGR24:
568 544
569 rgb_plane[curframe_index++] = prev_rgb_plane[prevframe_index++]; 545 rgb_plane[curframe_index++] = prev_rgb_plane[prevframe_index++];
570 rgb_plane[curframe_index++] = prev_rgb_plane[prevframe_index++]; 546 rgb_plane[curframe_index++] = prev_rgb_plane[prevframe_index++];
571 rgb_plane[curframe_index++] = prev_rgb_plane[prevframe_index++]; 547 rgb_plane[curframe_index++] = prev_rgb_plane[prevframe_index++];
572 548
573 curframe_x++; 549 ADVANCE_CURFRAME_X();
574 if (curframe_x >= width) { 550 ADVANCE_PREVFRAME_X();
575 /* reset accounting variables */
576 curframe_index += line_inc;
577 curframe_x = 0;
578 }
579
580 prevframe_x++;
581 if (prevframe_x >= width) {
582 /* reset accounting variables */
583 prevframe_index += line_inc;
584 prevframe_x = 0;
585 }
586 } 551 }
587 break; 552 break;
588 553
589 case PIX_FMT_RGBA32: 554 case PIX_FMT_RGBA32:
590 rgb32_plane = (unsigned int *)s->current_frame.data[0]; 555 rgb32_plane = (unsigned int *)s->current_frame.data[0];
598 while(pixel_count--) { 563 while(pixel_count--) {
599 564
600 rgb32_plane[curframe_index++] = 565 rgb32_plane[curframe_index++] =
601 prev_rgb32_plane[prevframe_index++]; 566 prev_rgb32_plane[prevframe_index++];
602 567
603 curframe_x++; 568 ADVANCE_CURFRAME_X();
604 if (curframe_x >= width) { 569 ADVANCE_PREVFRAME_X();
605 /* reset accounting variables */
606 curframe_index += line_inc;
607 curframe_x = 0;
608 }
609
610 prevframe_x++;
611 if (prevframe_x >= width) {
612 /* reset accounting variables */
613 prevframe_index += line_inc;
614 prevframe_x = 0;
615 }
616 } 570 }
617 break; 571 break;
618 572
619 case PIX_FMT_YUV444P: 573 case PIX_FMT_YUV444P:
620 y_plane = s->current_frame.data[0]; 574 y_plane = s->current_frame.data[0];
634 y_plane[curframe_index] = prev_y_plane[prevframe_index]; 588 y_plane[curframe_index] = prev_y_plane[prevframe_index];
635 u_plane[curframe_index] = prev_u_plane[prevframe_index]; 589 u_plane[curframe_index] = prev_u_plane[prevframe_index];
636 v_plane[curframe_index] = prev_v_plane[prevframe_index]; 590 v_plane[curframe_index] = prev_v_plane[prevframe_index];
637 591
638 curframe_index++; 592 curframe_index++;
639 curframe_x++; 593 ADVANCE_CURFRAME_X();
640 if (curframe_x >= width) {
641 /* reset accounting variables */
642 curframe_index += line_inc;
643 curframe_x = 0;
644 }
645
646 prevframe_index++; 594 prevframe_index++;
647 prevframe_x++; 595 ADVANCE_PREVFRAME_X();
648 if (prevframe_x >= width) {
649 /* reset accounting variables */
650 prevframe_index += line_inc;
651 prevframe_x = 0;
652 }
653 } 596 }
654 break; 597 break;
655 598
656 default: 599 default:
657 printf (" Xan WC3: Unhandled colorspace\n"); 600 printf (" Xan WC3: Unhandled colorspace\n");