1 /* 2 * Copyright 2012 The LibYuv Project Authors. All rights reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef INCLUDE_LIBYUV_CONVERT_ARGB_H_ 12 #define INCLUDE_LIBYUV_CONVERT_ARGB_H_ 13 14 #include "libyuv/basic_types.h" 15 16 #include "libyuv/rotate.h" // For enum RotationMode. 17 18 #ifdef __cplusplus 19 namespace libyuv { 20 extern "C" { 21 #endif 22 23 // Conversion matrix for YUV to RGB 24 LIBYUV_API extern const struct YuvConstants kYuvI601Constants; // BT.601 25 LIBYUV_API extern const struct YuvConstants kYuvJPEGConstants; // JPeg 26 LIBYUV_API extern const struct YuvConstants kYuvH709Constants; // BT.709 27 LIBYUV_API extern const struct YuvConstants kYuv2020Constants; // BT.2020 28 29 // Conversion matrix for YVU to BGR 30 LIBYUV_API extern const struct YuvConstants kYvuI601Constants; // BT.601 31 LIBYUV_API extern const struct YuvConstants kYvuJPEGConstants; // JPeg 32 LIBYUV_API extern const struct YuvConstants kYvuH709Constants; // BT.709 33 LIBYUV_API extern const struct YuvConstants kYvu2020Constants; // BT.2020 34 35 // Macros for end swapped destination Matrix conversions. 36 // Swap UV and pass mirrored kYvuJPEGConstants matrix. 37 // TODO(fbarchard): Add macro for each Matrix function. 38 #define kYuvI601ConstantsVU kYvuI601Constants 39 #define kYuvJPEGConstantsVU kYvuJPEGConstants 40 #define kYuvH709ConstantsVU kYvuH709Constants 41 #define kYuv2020ConstantsVU kYvu2020Constants 42 #define NV12ToABGRMatrix(a, b, c, d, e, f, g, h, i) \ 43 NV21ToARGBMatrix(a, b, c, d, e, f, g##VU, h, i) 44 #define NV21ToABGRMatrix(a, b, c, d, e, f, g, h, i) \ 45 NV12ToARGBMatrix(a, b, c, d, e, f, g##VU, h, i) 46 #define NV12ToRAWMatrix(a, b, c, d, e, f, g, h, i) \ 47 NV21ToRGB24Matrix(a, b, c, d, e, f, g##VU, h, i) 48 #define NV21ToRAWMatrix(a, b, c, d, e, f, g, h, i) \ 49 NV12ToRGB24Matrix(a, b, c, d, e, f, g##VU, h, i) 50 #define I420AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, k, l, m, n) \ 51 I420AlphaToARGBMatrix(a, b, e, f, c, d, g, h, i, j, k##VU, l, m, n) 52 53 // Alias. 54 #define ARGBToARGB ARGBCopy 55 56 // Copy ARGB to ARGB. 57 LIBYUV_API 58 int ARGBCopy(const uint8_t* src_argb, 59 int src_stride_argb, 60 uint8_t* dst_argb, 61 int dst_stride_argb, 62 int width, 63 int height); 64 65 // Convert I420 to ARGB. 66 LIBYUV_API 67 int I420ToARGB(const uint8_t* src_y, 68 int src_stride_y, 69 const uint8_t* src_u, 70 int src_stride_u, 71 const uint8_t* src_v, 72 int src_stride_v, 73 uint8_t* dst_argb, 74 int dst_stride_argb, 75 int width, 76 int height); 77 78 // Convert I420 to ABGR. 79 LIBYUV_API 80 int I420ToABGR(const uint8_t* src_y, 81 int src_stride_y, 82 const uint8_t* src_u, 83 int src_stride_u, 84 const uint8_t* src_v, 85 int src_stride_v, 86 uint8_t* dst_abgr, 87 int dst_stride_abgr, 88 int width, 89 int height); 90 91 // Convert J420 to ARGB. 92 LIBYUV_API 93 int J420ToARGB(const uint8_t* src_y, 94 int src_stride_y, 95 const uint8_t* src_u, 96 int src_stride_u, 97 const uint8_t* src_v, 98 int src_stride_v, 99 uint8_t* dst_argb, 100 int dst_stride_argb, 101 int width, 102 int height); 103 104 // Convert J420 to ABGR. 105 LIBYUV_API 106 int J420ToABGR(const uint8_t* src_y, 107 int src_stride_y, 108 const uint8_t* src_u, 109 int src_stride_u, 110 const uint8_t* src_v, 111 int src_stride_v, 112 uint8_t* dst_abgr, 113 int dst_stride_abgr, 114 int width, 115 int height); 116 117 // Convert H420 to ARGB. 118 LIBYUV_API 119 int H420ToARGB(const uint8_t* src_y, 120 int src_stride_y, 121 const uint8_t* src_u, 122 int src_stride_u, 123 const uint8_t* src_v, 124 int src_stride_v, 125 uint8_t* dst_argb, 126 int dst_stride_argb, 127 int width, 128 int height); 129 130 // Convert H420 to ABGR. 131 LIBYUV_API 132 int H420ToABGR(const uint8_t* src_y, 133 int src_stride_y, 134 const uint8_t* src_u, 135 int src_stride_u, 136 const uint8_t* src_v, 137 int src_stride_v, 138 uint8_t* dst_abgr, 139 int dst_stride_abgr, 140 int width, 141 int height); 142 143 // Convert U420 to ARGB. 144 LIBYUV_API 145 int U420ToARGB(const uint8_t* src_y, 146 int src_stride_y, 147 const uint8_t* src_u, 148 int src_stride_u, 149 const uint8_t* src_v, 150 int src_stride_v, 151 uint8_t* dst_argb, 152 int dst_stride_argb, 153 int width, 154 int height); 155 156 // Convert U420 to ABGR. 157 LIBYUV_API 158 int U420ToABGR(const uint8_t* src_y, 159 int src_stride_y, 160 const uint8_t* src_u, 161 int src_stride_u, 162 const uint8_t* src_v, 163 int src_stride_v, 164 uint8_t* dst_abgr, 165 int dst_stride_abgr, 166 int width, 167 int height); 168 169 // Convert I422 to ARGB. 170 LIBYUV_API 171 int I422ToARGB(const uint8_t* src_y, 172 int src_stride_y, 173 const uint8_t* src_u, 174 int src_stride_u, 175 const uint8_t* src_v, 176 int src_stride_v, 177 uint8_t* dst_argb, 178 int dst_stride_argb, 179 int width, 180 int height); 181 182 // Convert I422 to ABGR. 183 LIBYUV_API 184 int I422ToABGR(const uint8_t* src_y, 185 int src_stride_y, 186 const uint8_t* src_u, 187 int src_stride_u, 188 const uint8_t* src_v, 189 int src_stride_v, 190 uint8_t* dst_abgr, 191 int dst_stride_abgr, 192 int width, 193 int height); 194 195 // Convert J422 to ARGB. 196 LIBYUV_API 197 int J422ToARGB(const uint8_t* src_y, 198 int src_stride_y, 199 const uint8_t* src_u, 200 int src_stride_u, 201 const uint8_t* src_v, 202 int src_stride_v, 203 uint8_t* dst_argb, 204 int dst_stride_argb, 205 int width, 206 int height); 207 208 // Convert J422 to ABGR. 209 LIBYUV_API 210 int J422ToABGR(const uint8_t* src_y, 211 int src_stride_y, 212 const uint8_t* src_u, 213 int src_stride_u, 214 const uint8_t* src_v, 215 int src_stride_v, 216 uint8_t* dst_abgr, 217 int dst_stride_abgr, 218 int width, 219 int height); 220 221 // Convert H422 to ARGB. 222 LIBYUV_API 223 int H422ToARGB(const uint8_t* src_y, 224 int src_stride_y, 225 const uint8_t* src_u, 226 int src_stride_u, 227 const uint8_t* src_v, 228 int src_stride_v, 229 uint8_t* dst_argb, 230 int dst_stride_argb, 231 int width, 232 int height); 233 234 // Convert H422 to ABGR. 235 LIBYUV_API 236 int H422ToABGR(const uint8_t* src_y, 237 int src_stride_y, 238 const uint8_t* src_u, 239 int src_stride_u, 240 const uint8_t* src_v, 241 int src_stride_v, 242 uint8_t* dst_abgr, 243 int dst_stride_abgr, 244 int width, 245 int height); 246 247 // Convert U422 to ARGB. 248 LIBYUV_API 249 int U422ToARGB(const uint8_t* src_y, 250 int src_stride_y, 251 const uint8_t* src_u, 252 int src_stride_u, 253 const uint8_t* src_v, 254 int src_stride_v, 255 uint8_t* dst_argb, 256 int dst_stride_argb, 257 int width, 258 int height); 259 260 // Convert U422 to ABGR. 261 LIBYUV_API 262 int U422ToABGR(const uint8_t* src_y, 263 int src_stride_y, 264 const uint8_t* src_u, 265 int src_stride_u, 266 const uint8_t* src_v, 267 int src_stride_v, 268 uint8_t* dst_abgr, 269 int dst_stride_abgr, 270 int width, 271 int height); 272 273 // Convert I444 to ARGB. 274 LIBYUV_API 275 int I444ToARGB(const uint8_t* src_y, 276 int src_stride_y, 277 const uint8_t* src_u, 278 int src_stride_u, 279 const uint8_t* src_v, 280 int src_stride_v, 281 uint8_t* dst_argb, 282 int dst_stride_argb, 283 int width, 284 int height); 285 286 // Convert I444 to ABGR. 287 LIBYUV_API 288 int I444ToABGR(const uint8_t* src_y, 289 int src_stride_y, 290 const uint8_t* src_u, 291 int src_stride_u, 292 const uint8_t* src_v, 293 int src_stride_v, 294 uint8_t* dst_abgr, 295 int dst_stride_abgr, 296 int width, 297 int height); 298 299 // Convert J444 to ARGB. 300 LIBYUV_API 301 int J444ToARGB(const uint8_t* src_y, 302 int src_stride_y, 303 const uint8_t* src_u, 304 int src_stride_u, 305 const uint8_t* src_v, 306 int src_stride_v, 307 uint8_t* dst_argb, 308 int dst_stride_argb, 309 int width, 310 int height); 311 312 // Convert J444 to ABGR. 313 LIBYUV_API 314 int J444ToABGR(const uint8_t* src_y, 315 int src_stride_y, 316 const uint8_t* src_u, 317 int src_stride_u, 318 const uint8_t* src_v, 319 int src_stride_v, 320 uint8_t* dst_abgr, 321 int dst_stride_abgr, 322 int width, 323 int height); 324 325 // Convert H444 to ARGB. 326 LIBYUV_API 327 int H444ToARGB(const uint8_t* src_y, 328 int src_stride_y, 329 const uint8_t* src_u, 330 int src_stride_u, 331 const uint8_t* src_v, 332 int src_stride_v, 333 uint8_t* dst_argb, 334 int dst_stride_argb, 335 int width, 336 int height); 337 338 // Convert H444 to ABGR. 339 LIBYUV_API 340 int H444ToABGR(const uint8_t* src_y, 341 int src_stride_y, 342 const uint8_t* src_u, 343 int src_stride_u, 344 const uint8_t* src_v, 345 int src_stride_v, 346 uint8_t* dst_abgr, 347 int dst_stride_abgr, 348 int width, 349 int height); 350 351 // Convert U444 to ARGB. 352 LIBYUV_API 353 int U444ToARGB(const uint8_t* src_y, 354 int src_stride_y, 355 const uint8_t* src_u, 356 int src_stride_u, 357 const uint8_t* src_v, 358 int src_stride_v, 359 uint8_t* dst_argb, 360 int dst_stride_argb, 361 int width, 362 int height); 363 364 // Convert U444 to ABGR. 365 LIBYUV_API 366 int U444ToABGR(const uint8_t* src_y, 367 int src_stride_y, 368 const uint8_t* src_u, 369 int src_stride_u, 370 const uint8_t* src_v, 371 int src_stride_v, 372 uint8_t* dst_abgr, 373 int dst_stride_abgr, 374 int width, 375 int height); 376 377 // Convert I010 to ARGB. 378 LIBYUV_API 379 int I010ToARGB(const uint16_t* src_y, 380 int src_stride_y, 381 const uint16_t* src_u, 382 int src_stride_u, 383 const uint16_t* src_v, 384 int src_stride_v, 385 uint8_t* dst_argb, 386 int dst_stride_argb, 387 int width, 388 int height); 389 390 // Convert I010 to ABGR. 391 LIBYUV_API 392 int I010ToABGR(const uint16_t* src_y, 393 int src_stride_y, 394 const uint16_t* src_u, 395 int src_stride_u, 396 const uint16_t* src_v, 397 int src_stride_v, 398 uint8_t* dst_abgr, 399 int dst_stride_abgr, 400 int width, 401 int height); 402 403 // Convert H010 to ARGB. 404 LIBYUV_API 405 int H010ToARGB(const uint16_t* src_y, 406 int src_stride_y, 407 const uint16_t* src_u, 408 int src_stride_u, 409 const uint16_t* src_v, 410 int src_stride_v, 411 uint8_t* dst_argb, 412 int dst_stride_argb, 413 int width, 414 int height); 415 416 // Convert H010 to ABGR. 417 LIBYUV_API 418 int H010ToABGR(const uint16_t* src_y, 419 int src_stride_y, 420 const uint16_t* src_u, 421 int src_stride_u, 422 const uint16_t* src_v, 423 int src_stride_v, 424 uint8_t* dst_abgr, 425 int dst_stride_abgr, 426 int width, 427 int height); 428 429 // Convert U010 to ARGB. 430 LIBYUV_API 431 int U010ToARGB(const uint16_t* src_y, 432 int src_stride_y, 433 const uint16_t* src_u, 434 int src_stride_u, 435 const uint16_t* src_v, 436 int src_stride_v, 437 uint8_t* dst_argb, 438 int dst_stride_argb, 439 int width, 440 int height); 441 442 // Convert U010 to ABGR. 443 LIBYUV_API 444 int U010ToABGR(const uint16_t* src_y, 445 int src_stride_y, 446 const uint16_t* src_u, 447 int src_stride_u, 448 const uint16_t* src_v, 449 int src_stride_v, 450 uint8_t* dst_abgr, 451 int dst_stride_abgr, 452 int width, 453 int height); 454 455 // Convert I210 to ARGB. 456 LIBYUV_API 457 int I210ToARGB(const uint16_t* src_y, 458 int src_stride_y, 459 const uint16_t* src_u, 460 int src_stride_u, 461 const uint16_t* src_v, 462 int src_stride_v, 463 uint8_t* dst_argb, 464 int dst_stride_argb, 465 int width, 466 int height); 467 468 // Convert I210 to ABGR. 469 LIBYUV_API 470 int I210ToABGR(const uint16_t* src_y, 471 int src_stride_y, 472 const uint16_t* src_u, 473 int src_stride_u, 474 const uint16_t* src_v, 475 int src_stride_v, 476 uint8_t* dst_abgr, 477 int dst_stride_abgr, 478 int width, 479 int height); 480 481 // Convert H210 to ARGB. 482 LIBYUV_API 483 int H210ToARGB(const uint16_t* src_y, 484 int src_stride_y, 485 const uint16_t* src_u, 486 int src_stride_u, 487 const uint16_t* src_v, 488 int src_stride_v, 489 uint8_t* dst_argb, 490 int dst_stride_argb, 491 int width, 492 int height); 493 494 // Convert H210 to ABGR. 495 LIBYUV_API 496 int H210ToABGR(const uint16_t* src_y, 497 int src_stride_y, 498 const uint16_t* src_u, 499 int src_stride_u, 500 const uint16_t* src_v, 501 int src_stride_v, 502 uint8_t* dst_abgr, 503 int dst_stride_abgr, 504 int width, 505 int height); 506 507 // Convert U210 to ARGB. 508 LIBYUV_API 509 int U210ToARGB(const uint16_t* src_y, 510 int src_stride_y, 511 const uint16_t* src_u, 512 int src_stride_u, 513 const uint16_t* src_v, 514 int src_stride_v, 515 uint8_t* dst_argb, 516 int dst_stride_argb, 517 int width, 518 int height); 519 520 // Convert U210 to ABGR. 521 LIBYUV_API 522 int U210ToABGR(const uint16_t* src_y, 523 int src_stride_y, 524 const uint16_t* src_u, 525 int src_stride_u, 526 const uint16_t* src_v, 527 int src_stride_v, 528 uint8_t* dst_abgr, 529 int dst_stride_abgr, 530 int width, 531 int height); 532 533 // Convert I420 with Alpha to preattenuated ARGB. 534 LIBYUV_API 535 int I420AlphaToARGB(const uint8_t* src_y, 536 int src_stride_y, 537 const uint8_t* src_u, 538 int src_stride_u, 539 const uint8_t* src_v, 540 int src_stride_v, 541 const uint8_t* src_a, 542 int src_stride_a, 543 uint8_t* dst_argb, 544 int dst_stride_argb, 545 int width, 546 int height, 547 int attenuate); 548 549 // Convert I420 with Alpha to preattenuated ABGR. 550 LIBYUV_API 551 int I420AlphaToABGR(const uint8_t* src_y, 552 int src_stride_y, 553 const uint8_t* src_u, 554 int src_stride_u, 555 const uint8_t* src_v, 556 int src_stride_v, 557 const uint8_t* src_a, 558 int src_stride_a, 559 uint8_t* dst_abgr, 560 int dst_stride_abgr, 561 int width, 562 int height, 563 int attenuate); 564 565 // Convert I400 (grey) to ARGB. Reverse of ARGBToI400. 566 LIBYUV_API 567 int I400ToARGB(const uint8_t* src_y, 568 int src_stride_y, 569 uint8_t* dst_argb, 570 int dst_stride_argb, 571 int width, 572 int height); 573 574 // Convert J400 (jpeg grey) to ARGB. 575 LIBYUV_API 576 int J400ToARGB(const uint8_t* src_y, 577 int src_stride_y, 578 uint8_t* dst_argb, 579 int dst_stride_argb, 580 int width, 581 int height); 582 583 // Alias. 584 #define YToARGB I400ToARGB 585 586 // Convert NV12 to ARGB. 587 LIBYUV_API 588 int NV12ToARGB(const uint8_t* src_y, 589 int src_stride_y, 590 const uint8_t* src_uv, 591 int src_stride_uv, 592 uint8_t* dst_argb, 593 int dst_stride_argb, 594 int width, 595 int height); 596 597 // Convert NV21 to ARGB. 598 LIBYUV_API 599 int NV21ToARGB(const uint8_t* src_y, 600 int src_stride_y, 601 const uint8_t* src_vu, 602 int src_stride_vu, 603 uint8_t* dst_argb, 604 int dst_stride_argb, 605 int width, 606 int height); 607 608 // Convert NV12 to ABGR. 609 LIBYUV_API 610 int NV12ToABGR(const uint8_t* src_y, 611 int src_stride_y, 612 const uint8_t* src_uv, 613 int src_stride_uv, 614 uint8_t* dst_abgr, 615 int dst_stride_abgr, 616 int width, 617 int height); 618 619 // Convert NV21 to ABGR. 620 LIBYUV_API 621 int NV21ToABGR(const uint8_t* src_y, 622 int src_stride_y, 623 const uint8_t* src_vu, 624 int src_stride_vu, 625 uint8_t* dst_abgr, 626 int dst_stride_abgr, 627 int width, 628 int height); 629 630 // Convert NV12 to RGB24. 631 LIBYUV_API 632 int NV12ToRGB24(const uint8_t* src_y, 633 int src_stride_y, 634 const uint8_t* src_uv, 635 int src_stride_uv, 636 uint8_t* dst_rgb24, 637 int dst_stride_rgb24, 638 int width, 639 int height); 640 641 // Convert NV21 to RGB24. 642 LIBYUV_API 643 int NV21ToRGB24(const uint8_t* src_y, 644 int src_stride_y, 645 const uint8_t* src_vu, 646 int src_stride_vu, 647 uint8_t* dst_rgb24, 648 int dst_stride_rgb24, 649 int width, 650 int height); 651 652 // Convert NV21 to YUV24. 653 LIBYUV_API 654 int NV21ToYUV24(const uint8_t* src_y, 655 int src_stride_y, 656 const uint8_t* src_vu, 657 int src_stride_vu, 658 uint8_t* dst_yuv24, 659 int dst_stride_yuv24, 660 int width, 661 int height); 662 663 // Convert NV12 to RAW. 664 LIBYUV_API 665 int NV12ToRAW(const uint8_t* src_y, 666 int src_stride_y, 667 const uint8_t* src_uv, 668 int src_stride_uv, 669 uint8_t* dst_raw, 670 int dst_stride_raw, 671 int width, 672 int height); 673 674 // Convert NV21 to RAW. 675 LIBYUV_API 676 int NV21ToRAW(const uint8_t* src_y, 677 int src_stride_y, 678 const uint8_t* src_vu, 679 int src_stride_vu, 680 uint8_t* dst_raw, 681 int dst_stride_raw, 682 int width, 683 int height); 684 685 // Convert YUY2 to ARGB. 686 LIBYUV_API 687 int YUY2ToARGB(const uint8_t* src_yuy2, 688 int src_stride_yuy2, 689 uint8_t* dst_argb, 690 int dst_stride_argb, 691 int width, 692 int height); 693 694 // Convert UYVY to ARGB. 695 LIBYUV_API 696 int UYVYToARGB(const uint8_t* src_uyvy, 697 int src_stride_uyvy, 698 uint8_t* dst_argb, 699 int dst_stride_argb, 700 int width, 701 int height); 702 703 // Convert I010 to AR30. 704 LIBYUV_API 705 int I010ToAR30(const uint16_t* src_y, 706 int src_stride_y, 707 const uint16_t* src_u, 708 int src_stride_u, 709 const uint16_t* src_v, 710 int src_stride_v, 711 uint8_t* dst_ar30, 712 int dst_stride_ar30, 713 int width, 714 int height); 715 716 // Convert I010 to AB30. 717 LIBYUV_API 718 int I010ToAB30(const uint16_t* src_y, 719 int src_stride_y, 720 const uint16_t* src_u, 721 int src_stride_u, 722 const uint16_t* src_v, 723 int src_stride_v, 724 uint8_t* dst_ab30, 725 int dst_stride_ab30, 726 int width, 727 int height); 728 729 // Convert H010 to AR30. 730 LIBYUV_API 731 int H010ToAR30(const uint16_t* src_y, 732 int src_stride_y, 733 const uint16_t* src_u, 734 int src_stride_u, 735 const uint16_t* src_v, 736 int src_stride_v, 737 uint8_t* dst_ar30, 738 int dst_stride_ar30, 739 int width, 740 int height); 741 742 // Convert H010 to AB30. 743 LIBYUV_API 744 int H010ToAB30(const uint16_t* src_y, 745 int src_stride_y, 746 const uint16_t* src_u, 747 int src_stride_u, 748 const uint16_t* src_v, 749 int src_stride_v, 750 uint8_t* dst_ab30, 751 int dst_stride_ab30, 752 int width, 753 int height); 754 755 // Convert U010 to AR30. 756 LIBYUV_API 757 int U010ToAR30(const uint16_t* src_y, 758 int src_stride_y, 759 const uint16_t* src_u, 760 int src_stride_u, 761 const uint16_t* src_v, 762 int src_stride_v, 763 uint8_t* dst_ar30, 764 int dst_stride_ar30, 765 int width, 766 int height); 767 768 // Convert U010 to AB30. 769 LIBYUV_API 770 int U010ToAB30(const uint16_t* src_y, 771 int src_stride_y, 772 const uint16_t* src_u, 773 int src_stride_u, 774 const uint16_t* src_v, 775 int src_stride_v, 776 uint8_t* dst_ab30, 777 int dst_stride_ab30, 778 int width, 779 int height); 780 781 // Convert I210 to AR30. 782 LIBYUV_API 783 int I210ToAR30(const uint16_t* src_y, 784 int src_stride_y, 785 const uint16_t* src_u, 786 int src_stride_u, 787 const uint16_t* src_v, 788 int src_stride_v, 789 uint8_t* dst_ar30, 790 int dst_stride_ar30, 791 int width, 792 int height); 793 794 // Convert I210 to AB30. 795 LIBYUV_API 796 int I210ToAB30(const uint16_t* src_y, 797 int src_stride_y, 798 const uint16_t* src_u, 799 int src_stride_u, 800 const uint16_t* src_v, 801 int src_stride_v, 802 uint8_t* dst_ab30, 803 int dst_stride_ab30, 804 int width, 805 int height); 806 807 // Convert H210 to AR30. 808 LIBYUV_API 809 int H210ToAR30(const uint16_t* src_y, 810 int src_stride_y, 811 const uint16_t* src_u, 812 int src_stride_u, 813 const uint16_t* src_v, 814 int src_stride_v, 815 uint8_t* dst_ar30, 816 int dst_stride_ar30, 817 int width, 818 int height); 819 820 // Convert H210 to AB30. 821 LIBYUV_API 822 int H210ToAB30(const uint16_t* src_y, 823 int src_stride_y, 824 const uint16_t* src_u, 825 int src_stride_u, 826 const uint16_t* src_v, 827 int src_stride_v, 828 uint8_t* dst_ab30, 829 int dst_stride_ab30, 830 int width, 831 int height); 832 833 // Convert U210 to AR30. 834 LIBYUV_API 835 int U210ToAR30(const uint16_t* src_y, 836 int src_stride_y, 837 const uint16_t* src_u, 838 int src_stride_u, 839 const uint16_t* src_v, 840 int src_stride_v, 841 uint8_t* dst_ar30, 842 int dst_stride_ar30, 843 int width, 844 int height); 845 846 // Convert U210 to AB30. 847 LIBYUV_API 848 int U210ToAB30(const uint16_t* src_y, 849 int src_stride_y, 850 const uint16_t* src_u, 851 int src_stride_u, 852 const uint16_t* src_v, 853 int src_stride_v, 854 uint8_t* dst_ab30, 855 int dst_stride_ab30, 856 int width, 857 int height); 858 859 // BGRA little endian (argb in memory) to ARGB. 860 LIBYUV_API 861 int BGRAToARGB(const uint8_t* src_bgra, 862 int src_stride_bgra, 863 uint8_t* dst_argb, 864 int dst_stride_argb, 865 int width, 866 int height); 867 868 // ABGR little endian (rgba in memory) to ARGB. 869 LIBYUV_API 870 int ABGRToARGB(const uint8_t* src_abgr, 871 int src_stride_abgr, 872 uint8_t* dst_argb, 873 int dst_stride_argb, 874 int width, 875 int height); 876 877 // RGBA little endian (abgr in memory) to ARGB. 878 LIBYUV_API 879 int RGBAToARGB(const uint8_t* src_rgba, 880 int src_stride_rgba, 881 uint8_t* dst_argb, 882 int dst_stride_argb, 883 int width, 884 int height); 885 886 // Deprecated function name. 887 #define BG24ToARGB RGB24ToARGB 888 889 // RGB little endian (bgr in memory) to ARGB. 890 LIBYUV_API 891 int RGB24ToARGB(const uint8_t* src_rgb24, 892 int src_stride_rgb24, 893 uint8_t* dst_argb, 894 int dst_stride_argb, 895 int width, 896 int height); 897 898 // RGB big endian (rgb in memory) to ARGB. 899 LIBYUV_API 900 int RAWToARGB(const uint8_t* src_raw, 901 int src_stride_raw, 902 uint8_t* dst_argb, 903 int dst_stride_argb, 904 int width, 905 int height); 906 907 // RGB big endian (rgb in memory) to RGBA. 908 LIBYUV_API 909 int RAWToRGBA(const uint8_t* src_raw, 910 int src_stride_raw, 911 uint8_t* dst_rgba, 912 int dst_stride_rgba, 913 int width, 914 int height); 915 916 // RGB16 (RGBP fourcc) little endian to ARGB. 917 LIBYUV_API 918 int RGB565ToARGB(const uint8_t* src_rgb565, 919 int src_stride_rgb565, 920 uint8_t* dst_argb, 921 int dst_stride_argb, 922 int width, 923 int height); 924 925 // RGB15 (RGBO fourcc) little endian to ARGB. 926 LIBYUV_API 927 int ARGB1555ToARGB(const uint8_t* src_argb1555, 928 int src_stride_argb1555, 929 uint8_t* dst_argb, 930 int dst_stride_argb, 931 int width, 932 int height); 933 934 // RGB12 (R444 fourcc) little endian to ARGB. 935 LIBYUV_API 936 int ARGB4444ToARGB(const uint8_t* src_argb4444, 937 int src_stride_argb4444, 938 uint8_t* dst_argb, 939 int dst_stride_argb, 940 int width, 941 int height); 942 943 // Aliases 944 #define AB30ToARGB AR30ToABGR 945 #define AB30ToABGR AR30ToARGB 946 #define AB30ToAR30 AR30ToAB30 947 948 // Convert AR30 To ARGB. 949 LIBYUV_API 950 int AR30ToARGB(const uint8_t* src_ar30, 951 int src_stride_ar30, 952 uint8_t* dst_argb, 953 int dst_stride_argb, 954 int width, 955 int height); 956 957 // Convert AR30 To ABGR. 958 LIBYUV_API 959 int AR30ToABGR(const uint8_t* src_ar30, 960 int src_stride_ar30, 961 uint8_t* dst_abgr, 962 int dst_stride_abgr, 963 int width, 964 int height); 965 966 // Convert AR30 To AB30. 967 LIBYUV_API 968 int AR30ToAB30(const uint8_t* src_ar30, 969 int src_stride_ar30, 970 uint8_t* dst_ab30, 971 int dst_stride_ab30, 972 int width, 973 int height); 974 975 // src_width/height provided by capture 976 // dst_width/height for clipping determine final size. 977 LIBYUV_API 978 int MJPGToARGB(const uint8_t* sample, 979 size_t sample_size, 980 uint8_t* dst_argb, 981 int dst_stride_argb, 982 int src_width, 983 int src_height, 984 int dst_width, 985 int dst_height); 986 987 // Convert Android420 to ARGB. 988 LIBYUV_API 989 int Android420ToARGB(const uint8_t* src_y, 990 int src_stride_y, 991 const uint8_t* src_u, 992 int src_stride_u, 993 const uint8_t* src_v, 994 int src_stride_v, 995 int src_pixel_stride_uv, 996 uint8_t* dst_argb, 997 int dst_stride_argb, 998 int width, 999 int height); 1000 1001 // Convert Android420 to ABGR. 1002 LIBYUV_API 1003 int Android420ToABGR(const uint8_t* src_y, 1004 int src_stride_y, 1005 const uint8_t* src_u, 1006 int src_stride_u, 1007 const uint8_t* src_v, 1008 int src_stride_v, 1009 int src_pixel_stride_uv, 1010 uint8_t* dst_abgr, 1011 int dst_stride_abgr, 1012 int width, 1013 int height); 1014 1015 // Convert NV12 to RGB565. 1016 LIBYUV_API 1017 int NV12ToRGB565(const uint8_t* src_y, 1018 int src_stride_y, 1019 const uint8_t* src_uv, 1020 int src_stride_uv, 1021 uint8_t* dst_rgb565, 1022 int dst_stride_rgb565, 1023 int width, 1024 int height); 1025 1026 // Convert I422 to BGRA. 1027 LIBYUV_API 1028 int I422ToBGRA(const uint8_t* src_y, 1029 int src_stride_y, 1030 const uint8_t* src_u, 1031 int src_stride_u, 1032 const uint8_t* src_v, 1033 int src_stride_v, 1034 uint8_t* dst_bgra, 1035 int dst_stride_bgra, 1036 int width, 1037 int height); 1038 1039 // Convert I422 to ABGR. 1040 LIBYUV_API 1041 int I422ToABGR(const uint8_t* src_y, 1042 int src_stride_y, 1043 const uint8_t* src_u, 1044 int src_stride_u, 1045 const uint8_t* src_v, 1046 int src_stride_v, 1047 uint8_t* dst_abgr, 1048 int dst_stride_abgr, 1049 int width, 1050 int height); 1051 1052 // Convert I422 to RGBA. 1053 LIBYUV_API 1054 int I422ToRGBA(const uint8_t* src_y, 1055 int src_stride_y, 1056 const uint8_t* src_u, 1057 int src_stride_u, 1058 const uint8_t* src_v, 1059 int src_stride_v, 1060 uint8_t* dst_rgba, 1061 int dst_stride_rgba, 1062 int width, 1063 int height); 1064 1065 LIBYUV_API 1066 int I420ToARGB(const uint8_t* src_y, 1067 int src_stride_y, 1068 const uint8_t* src_u, 1069 int src_stride_u, 1070 const uint8_t* src_v, 1071 int src_stride_v, 1072 uint8_t* dst_argb, 1073 int dst_stride_argb, 1074 int width, 1075 int height); 1076 1077 LIBYUV_API 1078 int I420ToBGRA(const uint8_t* src_y, 1079 int src_stride_y, 1080 const uint8_t* src_u, 1081 int src_stride_u, 1082 const uint8_t* src_v, 1083 int src_stride_v, 1084 uint8_t* dst_bgra, 1085 int dst_stride_bgra, 1086 int width, 1087 int height); 1088 1089 LIBYUV_API 1090 int I420ToABGR(const uint8_t* src_y, 1091 int src_stride_y, 1092 const uint8_t* src_u, 1093 int src_stride_u, 1094 const uint8_t* src_v, 1095 int src_stride_v, 1096 uint8_t* dst_abgr, 1097 int dst_stride_abgr, 1098 int width, 1099 int height); 1100 1101 LIBYUV_API 1102 int I420ToRGBA(const uint8_t* src_y, 1103 int src_stride_y, 1104 const uint8_t* src_u, 1105 int src_stride_u, 1106 const uint8_t* src_v, 1107 int src_stride_v, 1108 uint8_t* dst_rgba, 1109 int dst_stride_rgba, 1110 int width, 1111 int height); 1112 1113 LIBYUV_API 1114 int I420ToRGB24(const uint8_t* src_y, 1115 int src_stride_y, 1116 const uint8_t* src_u, 1117 int src_stride_u, 1118 const uint8_t* src_v, 1119 int src_stride_v, 1120 uint8_t* dst_rgb24, 1121 int dst_stride_rgb24, 1122 int width, 1123 int height); 1124 1125 LIBYUV_API 1126 int I420ToRAW(const uint8_t* src_y, 1127 int src_stride_y, 1128 const uint8_t* src_u, 1129 int src_stride_u, 1130 const uint8_t* src_v, 1131 int src_stride_v, 1132 uint8_t* dst_raw, 1133 int dst_stride_raw, 1134 int width, 1135 int height); 1136 1137 LIBYUV_API 1138 int H420ToRGB24(const uint8_t* src_y, 1139 int src_stride_y, 1140 const uint8_t* src_u, 1141 int src_stride_u, 1142 const uint8_t* src_v, 1143 int src_stride_v, 1144 uint8_t* dst_rgb24, 1145 int dst_stride_rgb24, 1146 int width, 1147 int height); 1148 1149 LIBYUV_API 1150 int H420ToRAW(const uint8_t* src_y, 1151 int src_stride_y, 1152 const uint8_t* src_u, 1153 int src_stride_u, 1154 const uint8_t* src_v, 1155 int src_stride_v, 1156 uint8_t* dst_raw, 1157 int dst_stride_raw, 1158 int width, 1159 int height); 1160 1161 LIBYUV_API 1162 int J420ToRGB24(const uint8_t* src_y, 1163 int src_stride_y, 1164 const uint8_t* src_u, 1165 int src_stride_u, 1166 const uint8_t* src_v, 1167 int src_stride_v, 1168 uint8_t* dst_rgb24, 1169 int dst_stride_rgb24, 1170 int width, 1171 int height); 1172 1173 LIBYUV_API 1174 int J420ToRAW(const uint8_t* src_y, 1175 int src_stride_y, 1176 const uint8_t* src_u, 1177 int src_stride_u, 1178 const uint8_t* src_v, 1179 int src_stride_v, 1180 uint8_t* dst_raw, 1181 int dst_stride_raw, 1182 int width, 1183 int height); 1184 1185 LIBYUV_API 1186 int I420ToRGB565(const uint8_t* src_y, 1187 int src_stride_y, 1188 const uint8_t* src_u, 1189 int src_stride_u, 1190 const uint8_t* src_v, 1191 int src_stride_v, 1192 uint8_t* dst_rgb565, 1193 int dst_stride_rgb565, 1194 int width, 1195 int height); 1196 1197 LIBYUV_API 1198 int J420ToRGB565(const uint8_t* src_y, 1199 int src_stride_y, 1200 const uint8_t* src_u, 1201 int src_stride_u, 1202 const uint8_t* src_v, 1203 int src_stride_v, 1204 uint8_t* dst_rgb565, 1205 int dst_stride_rgb565, 1206 int width, 1207 int height); 1208 1209 LIBYUV_API 1210 int H420ToRGB565(const uint8_t* src_y, 1211 int src_stride_y, 1212 const uint8_t* src_u, 1213 int src_stride_u, 1214 const uint8_t* src_v, 1215 int src_stride_v, 1216 uint8_t* dst_rgb565, 1217 int dst_stride_rgb565, 1218 int width, 1219 int height); 1220 1221 LIBYUV_API 1222 int I422ToRGB565(const uint8_t* src_y, 1223 int src_stride_y, 1224 const uint8_t* src_u, 1225 int src_stride_u, 1226 const uint8_t* src_v, 1227 int src_stride_v, 1228 uint8_t* dst_rgb565, 1229 int dst_stride_rgb565, 1230 int width, 1231 int height); 1232 1233 // Convert I420 To RGB565 with 4x4 dither matrix (16 bytes). 1234 // Values in dither matrix from 0 to 7 recommended. 1235 // The order of the dither matrix is first byte is upper left. 1236 1237 LIBYUV_API 1238 int I420ToRGB565Dither(const uint8_t* src_y, 1239 int src_stride_y, 1240 const uint8_t* src_u, 1241 int src_stride_u, 1242 const uint8_t* src_v, 1243 int src_stride_v, 1244 uint8_t* dst_rgb565, 1245 int dst_stride_rgb565, 1246 const uint8_t* dither4x4, 1247 int width, 1248 int height); 1249 1250 LIBYUV_API 1251 int I420ToARGB1555(const uint8_t* src_y, 1252 int src_stride_y, 1253 const uint8_t* src_u, 1254 int src_stride_u, 1255 const uint8_t* src_v, 1256 int src_stride_v, 1257 uint8_t* dst_argb1555, 1258 int dst_stride_argb1555, 1259 int width, 1260 int height); 1261 1262 LIBYUV_API 1263 int I420ToARGB4444(const uint8_t* src_y, 1264 int src_stride_y, 1265 const uint8_t* src_u, 1266 int src_stride_u, 1267 const uint8_t* src_v, 1268 int src_stride_v, 1269 uint8_t* dst_argb4444, 1270 int dst_stride_argb4444, 1271 int width, 1272 int height); 1273 1274 // Convert I420 to AR30. 1275 LIBYUV_API 1276 int I420ToAR30(const uint8_t* src_y, 1277 int src_stride_y, 1278 const uint8_t* src_u, 1279 int src_stride_u, 1280 const uint8_t* src_v, 1281 int src_stride_v, 1282 uint8_t* dst_ar30, 1283 int dst_stride_ar30, 1284 int width, 1285 int height); 1286 1287 // Convert H420 to AR30. 1288 LIBYUV_API 1289 int H420ToAR30(const uint8_t* src_y, 1290 int src_stride_y, 1291 const uint8_t* src_u, 1292 int src_stride_u, 1293 const uint8_t* src_v, 1294 int src_stride_v, 1295 uint8_t* dst_ar30, 1296 int dst_stride_ar30, 1297 int width, 1298 int height); 1299 1300 // Convert I420 to ARGB with matrix. 1301 LIBYUV_API 1302 int I420ToARGBMatrix(const uint8_t* src_y, 1303 int src_stride_y, 1304 const uint8_t* src_u, 1305 int src_stride_u, 1306 const uint8_t* src_v, 1307 int src_stride_v, 1308 uint8_t* dst_argb, 1309 int dst_stride_argb, 1310 const struct YuvConstants* yuvconstants, 1311 int width, 1312 int height); 1313 1314 // Convert I422 to ARGB with matrix. 1315 LIBYUV_API 1316 int I422ToARGBMatrix(const uint8_t* src_y, 1317 int src_stride_y, 1318 const uint8_t* src_u, 1319 int src_stride_u, 1320 const uint8_t* src_v, 1321 int src_stride_v, 1322 uint8_t* dst_argb, 1323 int dst_stride_argb, 1324 const struct YuvConstants* yuvconstants, 1325 int width, 1326 int height); 1327 1328 // Convert I444 to ARGB with matrix. 1329 LIBYUV_API 1330 int I444ToARGBMatrix(const uint8_t* src_y, 1331 int src_stride_y, 1332 const uint8_t* src_u, 1333 int src_stride_u, 1334 const uint8_t* src_v, 1335 int src_stride_v, 1336 uint8_t* dst_argb, 1337 int dst_stride_argb, 1338 const struct YuvConstants* yuvconstants, 1339 int width, 1340 int height); 1341 1342 // multiply 10 bit yuv into high bits to allow any number of bits. 1343 LIBYUV_API 1344 int I010ToAR30Matrix(const uint16_t* src_y, 1345 int src_stride_y, 1346 const uint16_t* src_u, 1347 int src_stride_u, 1348 const uint16_t* src_v, 1349 int src_stride_v, 1350 uint8_t* dst_ar30, 1351 int dst_stride_ar30, 1352 const struct YuvConstants* yuvconstants, 1353 int width, 1354 int height); 1355 1356 // multiply 10 bit yuv into high bits to allow any number of bits. 1357 LIBYUV_API 1358 int I210ToAR30Matrix(const uint16_t* src_y, 1359 int src_stride_y, 1360 const uint16_t* src_u, 1361 int src_stride_u, 1362 const uint16_t* src_v, 1363 int src_stride_v, 1364 uint8_t* dst_ar30, 1365 int dst_stride_ar30, 1366 const struct YuvConstants* yuvconstants, 1367 int width, 1368 int height); 1369 1370 // Convert 10 bit YUV to ARGB with matrix. 1371 LIBYUV_API 1372 int I010ToARGBMatrix(const uint16_t* src_y, 1373 int src_stride_y, 1374 const uint16_t* src_u, 1375 int src_stride_u, 1376 const uint16_t* src_v, 1377 int src_stride_v, 1378 uint8_t* dst_argb, 1379 int dst_stride_argb, 1380 const struct YuvConstants* yuvconstants, 1381 int width, 1382 int height); 1383 1384 // Convert 10 bit 422 YUV to ARGB with matrix. 1385 LIBYUV_API 1386 int I210ToARGBMatrix(const uint16_t* src_y, 1387 int src_stride_y, 1388 const uint16_t* src_u, 1389 int src_stride_u, 1390 const uint16_t* src_v, 1391 int src_stride_v, 1392 uint8_t* dst_argb, 1393 int dst_stride_argb, 1394 const struct YuvConstants* yuvconstants, 1395 int width, 1396 int height); 1397 1398 // Convert I420 with Alpha to preattenuated ARGB with matrix. 1399 LIBYUV_API 1400 int I420AlphaToARGBMatrix(const uint8_t* src_y, 1401 int src_stride_y, 1402 const uint8_t* src_u, 1403 int src_stride_u, 1404 const uint8_t* src_v, 1405 int src_stride_v, 1406 const uint8_t* src_a, 1407 int src_stride_a, 1408 uint8_t* dst_argb, 1409 int dst_stride_argb, 1410 const struct YuvConstants* yuvconstants, 1411 int width, 1412 int height, 1413 int attenuate); 1414 1415 // Convert NV12 to ARGB with matrix. 1416 LIBYUV_API 1417 int NV12ToARGBMatrix(const uint8_t* src_y, 1418 int src_stride_y, 1419 const uint8_t* src_uv, 1420 int src_stride_uv, 1421 uint8_t* dst_argb, 1422 int dst_stride_argb, 1423 const struct YuvConstants* yuvconstants, 1424 int width, 1425 int height); 1426 1427 // Convert NV21 to ARGB with matrix. 1428 LIBYUV_API 1429 int NV21ToARGBMatrix(const uint8_t* src_y, 1430 int src_stride_y, 1431 const uint8_t* src_vu, 1432 int src_stride_vu, 1433 uint8_t* dst_argb, 1434 int dst_stride_argb, 1435 const struct YuvConstants* yuvconstants, 1436 int width, 1437 int height); 1438 1439 // Convert NV12 to RGB565 with matrix. 1440 LIBYUV_API 1441 int NV12ToRGB565Matrix(const uint8_t* src_y, 1442 int src_stride_y, 1443 const uint8_t* src_uv, 1444 int src_stride_uv, 1445 uint8_t* dst_rgb565, 1446 int dst_stride_rgb565, 1447 const struct YuvConstants* yuvconstants, 1448 int width, 1449 int height); 1450 1451 // Convert NV12 to RGB24 with matrix. 1452 LIBYUV_API 1453 int NV12ToRGB24Matrix(const uint8_t* src_y, 1454 int src_stride_y, 1455 const uint8_t* src_uv, 1456 int src_stride_uv, 1457 uint8_t* dst_rgb24, 1458 int dst_stride_rgb24, 1459 const struct YuvConstants* yuvconstants, 1460 int width, 1461 int height); 1462 1463 // Convert NV21 to RGB24 with matrix. 1464 LIBYUV_API 1465 int NV21ToRGB24Matrix(const uint8_t* src_y, 1466 int src_stride_y, 1467 const uint8_t* src_vu, 1468 int src_stride_vu, 1469 uint8_t* dst_rgb24, 1470 int dst_stride_rgb24, 1471 const struct YuvConstants* yuvconstants, 1472 int width, 1473 int height); 1474 1475 // Convert Android420 to ARGB with matrix. 1476 LIBYUV_API 1477 int Android420ToARGBMatrix(const uint8_t* src_y, 1478 int src_stride_y, 1479 const uint8_t* src_u, 1480 int src_stride_u, 1481 const uint8_t* src_v, 1482 int src_stride_v, 1483 int src_pixel_stride_uv, 1484 uint8_t* dst_argb, 1485 int dst_stride_argb, 1486 const struct YuvConstants* yuvconstants, 1487 int width, 1488 int height); 1489 1490 // Convert I422 to RGBA with matrix. 1491 LIBYUV_API 1492 int I422ToRGBAMatrix(const uint8_t* src_y, 1493 int src_stride_y, 1494 const uint8_t* src_u, 1495 int src_stride_u, 1496 const uint8_t* src_v, 1497 int src_stride_v, 1498 uint8_t* dst_rgba, 1499 int dst_stride_rgba, 1500 const struct YuvConstants* yuvconstants, 1501 int width, 1502 int height); 1503 1504 // Convert I422 to RGBA with matrix. 1505 LIBYUV_API 1506 int I420ToRGBAMatrix(const uint8_t* src_y, 1507 int src_stride_y, 1508 const uint8_t* src_u, 1509 int src_stride_u, 1510 const uint8_t* src_v, 1511 int src_stride_v, 1512 uint8_t* dst_rgba, 1513 int dst_stride_rgba, 1514 const struct YuvConstants* yuvconstants, 1515 int width, 1516 int height); 1517 1518 // Convert I420 to RGB24 with matrix. 1519 LIBYUV_API 1520 int I420ToRGB24Matrix(const uint8_t* src_y, 1521 int src_stride_y, 1522 const uint8_t* src_u, 1523 int src_stride_u, 1524 const uint8_t* src_v, 1525 int src_stride_v, 1526 uint8_t* dst_rgb24, 1527 int dst_stride_rgb24, 1528 const struct YuvConstants* yuvconstants, 1529 int width, 1530 int height); 1531 1532 // Convert I420 to RGB565 with specified color matrix. 1533 LIBYUV_API 1534 int I420ToRGB565Matrix(const uint8_t* src_y, 1535 int src_stride_y, 1536 const uint8_t* src_u, 1537 int src_stride_u, 1538 const uint8_t* src_v, 1539 int src_stride_v, 1540 uint8_t* dst_rgb565, 1541 int dst_stride_rgb565, 1542 const struct YuvConstants* yuvconstants, 1543 int width, 1544 int height); 1545 1546 // Convert I420 to AR30 with matrix. 1547 LIBYUV_API 1548 int I420ToAR30Matrix(const uint8_t* src_y, 1549 int src_stride_y, 1550 const uint8_t* src_u, 1551 int src_stride_u, 1552 const uint8_t* src_v, 1553 int src_stride_v, 1554 uint8_t* dst_ar30, 1555 int dst_stride_ar30, 1556 const struct YuvConstants* yuvconstants, 1557 int width, 1558 int height); 1559 1560 // Convert I400 (grey) to ARGB. Reverse of ARGBToI400. 1561 LIBYUV_API 1562 int I400ToARGBMatrix(const uint8_t* src_y, 1563 int src_stride_y, 1564 uint8_t* dst_argb, 1565 int dst_stride_argb, 1566 const struct YuvConstants* yuvconstants, 1567 int width, 1568 int height); 1569 1570 // Convert camera sample to ARGB with cropping, rotation and vertical flip. 1571 // "sample_size" is needed to parse MJPG. 1572 // "dst_stride_argb" number of bytes in a row of the dst_argb plane. 1573 // Normally this would be the same as dst_width, with recommended alignment 1574 // to 16 bytes for better efficiency. 1575 // If rotation of 90 or 270 is used, stride is affected. The caller should 1576 // allocate the I420 buffer according to rotation. 1577 // "dst_stride_u" number of bytes in a row of the dst_u plane. 1578 // Normally this would be the same as (dst_width + 1) / 2, with 1579 // recommended alignment to 16 bytes for better efficiency. 1580 // If rotation of 90 or 270 is used, stride is affected. 1581 // "crop_x" and "crop_y" are starting position for cropping. 1582 // To center, crop_x = (src_width - dst_width) / 2 1583 // crop_y = (src_height - dst_height) / 2 1584 // "src_width" / "src_height" is size of src_frame in pixels. 1585 // "src_height" can be negative indicating a vertically flipped image source. 1586 // "crop_width" / "crop_height" is the size to crop the src to. 1587 // Must be less than or equal to src_width/src_height 1588 // Cropping parameters are pre-rotation. 1589 // "rotation" can be 0, 90, 180 or 270. 1590 // "fourcc" is a fourcc. ie 'I420', 'YUY2' 1591 // Returns 0 for successful; -1 for invalid parameter. Non-zero for failure. 1592 LIBYUV_API 1593 int ConvertToARGB(const uint8_t* sample, 1594 size_t sample_size, 1595 uint8_t* dst_argb, 1596 int dst_stride_argb, 1597 int crop_x, 1598 int crop_y, 1599 int src_width, 1600 int src_height, 1601 int crop_width, 1602 int crop_height, 1603 enum RotationMode rotation, 1604 uint32_t fourcc); 1605 1606 #ifdef __cplusplus 1607 } // extern "C" 1608 } // namespace libyuv 1609 #endif 1610 1611 #endif // INCLUDE_LIBYUV_CONVERT_ARGB_H_ 1612