comparison imgconvert.c @ 5706:3e8764a25c53 libavcodec

add support for yuva420p colorspace (yuv420p + alpha)
author aurel
date Mon, 24 Sep 2007 13:21:41 +0000
parents 1a25f2f6316e
children 8b211f34a3eb
comparison
equal deleted inserted replaced
5705:c08c9340c7ca 5706:3e8764a25c53
127 .pixel_type = FF_PIXEL_PLANAR, 127 .pixel_type = FF_PIXEL_PLANAR,
128 .depth = 8, 128 .depth = 8,
129 .x_chroma_shift = 0, .y_chroma_shift = 1, 129 .x_chroma_shift = 0, .y_chroma_shift = 1,
130 }, 130 },
131 131
132 /* YUV formats with alpha plane */
133 [PIX_FMT_YUVA420P] = {
134 .name = "yuva420p",
135 .nb_channels = 4,
136 .color_type = FF_COLOR_YUV,
137 .pixel_type = FF_PIXEL_PLANAR,
138 .depth = 8,
139 .x_chroma_shift = 1, .y_chroma_shift = 1,
140 },
141
132 /* JPEG YUV */ 142 /* JPEG YUV */
133 [PIX_FMT_YUVJ420P] = { 143 [PIX_FMT_YUVJ420P] = {
134 .name = "yuvj420p", 144 .name = "yuvj420p",
135 .nb_channels = 3, 145 .nb_channels = 3,
136 .color_type = FF_COLOR_YUV_JPEG, 146 .color_type = FF_COLOR_YUV_JPEG,
442 h2 = (height + (1 << pinfo->y_chroma_shift) - 1) >> pinfo->y_chroma_shift; 452 h2 = (height + (1 << pinfo->y_chroma_shift) - 1) >> pinfo->y_chroma_shift;
443 size2 = w2 * h2; 453 size2 = w2 * h2;
444 picture->data[0] = ptr; 454 picture->data[0] = ptr;
445 picture->data[1] = picture->data[0] + size; 455 picture->data[1] = picture->data[0] + size;
446 picture->data[2] = picture->data[1] + size2; 456 picture->data[2] = picture->data[1] + size2;
457 picture->data[3] = NULL;
447 picture->linesize[0] = width; 458 picture->linesize[0] = width;
448 picture->linesize[1] = w2; 459 picture->linesize[1] = w2;
449 picture->linesize[2] = w2; 460 picture->linesize[2] = w2;
461 picture->linesize[3] = 0;
450 return size + 2 * size2; 462 return size + 2 * size2;
463 case PIX_FMT_YUVA420P:
464 w2 = (width + (1 << pinfo->x_chroma_shift) - 1) >> pinfo->x_chroma_shift;
465 h2 = (height + (1 << pinfo->y_chroma_shift) - 1) >> pinfo->y_chroma_shift;
466 size2 = w2 * h2;
467 picture->data[0] = ptr;
468 picture->data[1] = picture->data[0] + size;
469 picture->data[2] = picture->data[1] + size2;
470 picture->data[3] = picture->data[1] + size2 + size2;
471 picture->linesize[0] = width;
472 picture->linesize[1] = w2;
473 picture->linesize[2] = w2;
474 picture->linesize[3] = width;
475 return 2 * size + 2 * size2;
451 case PIX_FMT_NV12: 476 case PIX_FMT_NV12:
452 case PIX_FMT_NV21: 477 case PIX_FMT_NV21:
453 w2 = (width + (1 << pinfo->x_chroma_shift) - 1) >> pinfo->x_chroma_shift; 478 w2 = (width + (1 << pinfo->x_chroma_shift) - 1) >> pinfo->x_chroma_shift;
454 h2 = (height + (1 << pinfo->y_chroma_shift) - 1) >> pinfo->y_chroma_shift; 479 h2 = (height + (1 << pinfo->y_chroma_shift) - 1) >> pinfo->y_chroma_shift;
455 size2 = w2 * h2 * 2; 480 size2 = w2 * h2 * 2;
456 picture->data[0] = ptr; 481 picture->data[0] = ptr;
457 picture->data[1] = picture->data[0] + size; 482 picture->data[1] = picture->data[0] + size;
458 picture->data[2] = NULL; 483 picture->data[2] = NULL;
484 picture->data[3] = NULL;
459 picture->linesize[0] = width; 485 picture->linesize[0] = width;
460 picture->linesize[1] = w2; 486 picture->linesize[1] = w2;
461 picture->linesize[2] = 0; 487 picture->linesize[2] = 0;
488 picture->linesize[3] = 0;
462 return size + 2 * size2; 489 return size + 2 * size2;
463 case PIX_FMT_RGB24: 490 case PIX_FMT_RGB24:
464 case PIX_FMT_BGR24: 491 case PIX_FMT_BGR24:
465 picture->data[0] = ptr; 492 picture->data[0] = ptr;
466 picture->data[1] = NULL; 493 picture->data[1] = NULL;
467 picture->data[2] = NULL; 494 picture->data[2] = NULL;
495 picture->data[3] = NULL;
468 picture->linesize[0] = width * 3; 496 picture->linesize[0] = width * 3;
469 return size * 3; 497 return size * 3;
470 case PIX_FMT_RGB32: 498 case PIX_FMT_RGB32:
471 case PIX_FMT_BGR32: 499 case PIX_FMT_BGR32:
472 case PIX_FMT_RGB32_1: 500 case PIX_FMT_RGB32_1:
473 case PIX_FMT_BGR32_1: 501 case PIX_FMT_BGR32_1:
474 picture->data[0] = ptr; 502 picture->data[0] = ptr;
475 picture->data[1] = NULL; 503 picture->data[1] = NULL;
476 picture->data[2] = NULL; 504 picture->data[2] = NULL;
505 picture->data[3] = NULL;
477 picture->linesize[0] = width * 4; 506 picture->linesize[0] = width * 4;
478 return size * 4; 507 return size * 4;
479 case PIX_FMT_GRAY16BE: 508 case PIX_FMT_GRAY16BE:
480 case PIX_FMT_GRAY16LE: 509 case PIX_FMT_GRAY16LE:
481 case PIX_FMT_BGR555: 510 case PIX_FMT_BGR555:
484 case PIX_FMT_RGB565: 513 case PIX_FMT_RGB565:
485 case PIX_FMT_YUYV422: 514 case PIX_FMT_YUYV422:
486 picture->data[0] = ptr; 515 picture->data[0] = ptr;
487 picture->data[1] = NULL; 516 picture->data[1] = NULL;
488 picture->data[2] = NULL; 517 picture->data[2] = NULL;
518 picture->data[3] = NULL;
489 picture->linesize[0] = width * 2; 519 picture->linesize[0] = width * 2;
490 return size * 2; 520 return size * 2;
491 case PIX_FMT_UYVY422: 521 case PIX_FMT_UYVY422:
492 picture->data[0] = ptr; 522 picture->data[0] = ptr;
493 picture->data[1] = NULL; 523 picture->data[1] = NULL;
494 picture->data[2] = NULL; 524 picture->data[2] = NULL;
525 picture->data[3] = NULL;
495 picture->linesize[0] = width * 2; 526 picture->linesize[0] = width * 2;
496 return size * 2; 527 return size * 2;
497 case PIX_FMT_UYYVYY411: 528 case PIX_FMT_UYYVYY411:
498 picture->data[0] = ptr; 529 picture->data[0] = ptr;
499 picture->data[1] = NULL; 530 picture->data[1] = NULL;
500 picture->data[2] = NULL; 531 picture->data[2] = NULL;
532 picture->data[3] = NULL;
501 picture->linesize[0] = width + width/2; 533 picture->linesize[0] = width + width/2;
502 return size + size/2; 534 return size + size/2;
503 case PIX_FMT_RGB8: 535 case PIX_FMT_RGB8:
504 case PIX_FMT_BGR8: 536 case PIX_FMT_BGR8:
505 case PIX_FMT_RGB4_BYTE: 537 case PIX_FMT_RGB4_BYTE:
506 case PIX_FMT_BGR4_BYTE: 538 case PIX_FMT_BGR4_BYTE:
507 case PIX_FMT_GRAY8: 539 case PIX_FMT_GRAY8:
508 picture->data[0] = ptr; 540 picture->data[0] = ptr;
509 picture->data[1] = NULL; 541 picture->data[1] = NULL;
510 picture->data[2] = NULL; 542 picture->data[2] = NULL;
543 picture->data[3] = NULL;
511 picture->linesize[0] = width; 544 picture->linesize[0] = width;
512 return size; 545 return size;
513 case PIX_FMT_RGB4: 546 case PIX_FMT_RGB4:
514 case PIX_FMT_BGR4: 547 case PIX_FMT_BGR4:
515 picture->data[0] = ptr; 548 picture->data[0] = ptr;
516 picture->data[1] = NULL; 549 picture->data[1] = NULL;
517 picture->data[2] = NULL; 550 picture->data[2] = NULL;
551 picture->data[3] = NULL;
518 picture->linesize[0] = width / 2; 552 picture->linesize[0] = width / 2;
519 return size / 2; 553 return size / 2;
520 case PIX_FMT_MONOWHITE: 554 case PIX_FMT_MONOWHITE:
521 case PIX_FMT_MONOBLACK: 555 case PIX_FMT_MONOBLACK:
522 picture->data[0] = ptr; 556 picture->data[0] = ptr;
523 picture->data[1] = NULL; 557 picture->data[1] = NULL;
524 picture->data[2] = NULL; 558 picture->data[2] = NULL;
559 picture->data[3] = NULL;
525 picture->linesize[0] = (width + 7) >> 3; 560 picture->linesize[0] = (width + 7) >> 3;
526 return picture->linesize[0] * height; 561 return picture->linesize[0] * height;
527 case PIX_FMT_PAL8: 562 case PIX_FMT_PAL8:
528 size2 = (size + 3) & ~3; 563 size2 = (size + 3) & ~3;
529 picture->data[0] = ptr; 564 picture->data[0] = ptr;
530 picture->data[1] = ptr + size2; /* palette is stored here as 256 32 bit words */ 565 picture->data[1] = ptr + size2; /* palette is stored here as 256 32 bit words */
531 picture->data[2] = NULL; 566 picture->data[2] = NULL;
567 picture->data[3] = NULL;
532 picture->linesize[0] = width; 568 picture->linesize[0] = width;
533 picture->linesize[1] = 4; 569 picture->linesize[1] = 4;
534 return size2 + 256 * 4; 570 return size2 + 256 * 4;
535 default: 571 default:
536 fail: 572 fail: