Mercurial > libavcodec.hg
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: |