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