1ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian/*
2ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  Copyright 2012 The LibYuv Project Authors. All rights reserved.
3ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *
4ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  Use of this source code is governed by a BSD-style license
5ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  that can be found in the LICENSE file in the root of the source
6ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  tree. An additional intellectual property rights grant can be found
7ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  in the file PATENTS. All contributing project authors may
8ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  be found in the AUTHORS file in the root of the source tree.
9ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian */
10ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
11ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifndef INCLUDE_LIBYUV_CONVERT_ARGB_H_  // NOLINT
12ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define INCLUDE_LIBYUV_CONVERT_ARGB_H_
13ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
14ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#include "libyuv/basic_types.h"
15ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// TODO(fbarchard): Remove the following headers includes
16ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#include "libyuv/convert_from.h"
17ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#include "libyuv/planar_functions.h"
18ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#include "libyuv/rotate.h"
19ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
20ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// TODO(fbarchard): This set of functions should exactly match convert.h
21ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Add missing Q420.
22ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// TODO(fbarchard): Add tests. Create random content of right size and convert
23ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// with C vs Opt and or to I420 and compare.
24ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// TODO(fbarchard): Some of these functions lack parameter setting.
25ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
26ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifdef __cplusplus
27ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniannamespace libyuv {
28ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianextern "C" {
29ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif
30ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
31ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Alias.
32ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define ARGBToARGB ARGBCopy
33ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
34ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Copy ARGB to ARGB.
35ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
36ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint ARGBCopy(const uint8* src_argb, int src_stride_argb,
37ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian             uint8* dst_argb, int dst_stride_argb,
38ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian             int width, int height);
39ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
40ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert I420 to ARGB.
41ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
42ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint I420ToARGB(const uint8* src_y, int src_stride_y,
43ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               const uint8* src_u, int src_stride_u,
44ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               const uint8* src_v, int src_stride_v,
45ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               uint8* dst_argb, int dst_stride_argb,
46ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               int width, int height);
47ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
48ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert I422 to ARGB.
49ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
50ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint I422ToARGB(const uint8* src_y, int src_stride_y,
51ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               const uint8* src_u, int src_stride_u,
52ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               const uint8* src_v, int src_stride_v,
53ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               uint8* dst_argb, int dst_stride_argb,
54ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               int width, int height);
55ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
56ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert I444 to ARGB.
57ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
58ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint I444ToARGB(const uint8* src_y, int src_stride_y,
59ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               const uint8* src_u, int src_stride_u,
60ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               const uint8* src_v, int src_stride_v,
61ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               uint8* dst_argb, int dst_stride_argb,
62ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               int width, int height);
63ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
64ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert I411 to ARGB.
65ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
66ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint I411ToARGB(const uint8* src_y, int src_stride_y,
67ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               const uint8* src_u, int src_stride_u,
68ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               const uint8* src_v, int src_stride_v,
69ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               uint8* dst_argb, int dst_stride_argb,
70ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               int width, int height);
71ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
72ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert I400 (grey) to ARGB.
73ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
74ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint I400ToARGB(const uint8* src_y, int src_stride_y,
75ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               uint8* dst_argb, int dst_stride_argb,
76ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               int width, int height);
77ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
78ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Alias.
79ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define YToARGB I400ToARGB_Reference
80ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
81ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert I400 to ARGB. Reverse of ARGBToI400.
82ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
83ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint I400ToARGB_Reference(const uint8* src_y, int src_stride_y,
84ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                         uint8* dst_argb, int dst_stride_argb,
85ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                         int width, int height);
86ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
87ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert NV12 to ARGB.
88ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
89ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint NV12ToARGB(const uint8* src_y, int src_stride_y,
90ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               const uint8* src_uv, int src_stride_uv,
91ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               uint8* dst_argb, int dst_stride_argb,
92ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               int width, int height);
93ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
94ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert NV21 to ARGB.
95ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
96ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint NV21ToARGB(const uint8* src_y, int src_stride_y,
97ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               const uint8* src_vu, int src_stride_vu,
98ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               uint8* dst_argb, int dst_stride_argb,
99ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               int width, int height);
100ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
101ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert M420 to ARGB.
102ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
103ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint M420ToARGB(const uint8* src_m420, int src_stride_m420,
104ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               uint8* dst_argb, int dst_stride_argb,
105ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               int width, int height);
106ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
107ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// TODO(fbarchard): Convert Q420 to ARGB.
108ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// LIBYUV_API
109ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// int Q420ToARGB(const uint8* src_y, int src_stride_y,
110ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian//                const uint8* src_yuy2, int src_stride_yuy2,
111ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian//                uint8* dst_argb, int dst_stride_argb,
112ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian//                int width, int height);
113ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
114ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert YUY2 to ARGB.
115ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
116ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint YUY2ToARGB(const uint8* src_yuy2, int src_stride_yuy2,
117ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               uint8* dst_argb, int dst_stride_argb,
118ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               int width, int height);
119ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
120ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert UYVY to ARGB.
121ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
122ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint UYVYToARGB(const uint8* src_uyvy, int src_stride_uyvy,
123ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               uint8* dst_argb, int dst_stride_argb,
124ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               int width, int height);
125ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
126ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// BGRA little endian (argb in memory) to ARGB.
127ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
128ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint BGRAToARGB(const uint8* src_frame, int src_stride_frame,
129ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               uint8* dst_argb, int dst_stride_argb,
130ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               int width, int height);
131ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
132ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// ABGR little endian (rgba in memory) to ARGB.
133ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
134ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint ABGRToARGB(const uint8* src_frame, int src_stride_frame,
135ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               uint8* dst_argb, int dst_stride_argb,
136ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               int width, int height);
137ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
138ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// RGBA little endian (abgr in memory) to ARGB.
139ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
140ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint RGBAToARGB(const uint8* src_frame, int src_stride_frame,
141ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               uint8* dst_argb, int dst_stride_argb,
142ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               int width, int height);
143ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
144ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Deprecated function name.
145ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define BG24ToARGB RGB24ToARGB
146ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
147ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// RGB little endian (bgr in memory) to ARGB.
148ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
149ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint RGB24ToARGB(const uint8* src_frame, int src_stride_frame,
150ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                uint8* dst_argb, int dst_stride_argb,
151ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                int width, int height);
152ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
153ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// RGB big endian (rgb in memory) to ARGB.
154ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
155ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint RAWToARGB(const uint8* src_frame, int src_stride_frame,
156ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian              uint8* dst_argb, int dst_stride_argb,
157ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian              int width, int height);
158ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
159ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// RGB16 (RGBP fourcc) little endian to ARGB.
160ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
161ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint RGB565ToARGB(const uint8* src_frame, int src_stride_frame,
162ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                 uint8* dst_argb, int dst_stride_argb,
163ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                 int width, int height);
164ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
165ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// RGB15 (RGBO fourcc) little endian to ARGB.
166ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
167ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint ARGB1555ToARGB(const uint8* src_frame, int src_stride_frame,
168ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                   uint8* dst_argb, int dst_stride_argb,
169ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                   int width, int height);
170ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
171ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// RGB12 (R444 fourcc) little endian to ARGB.
172ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
173ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint ARGB4444ToARGB(const uint8* src_frame, int src_stride_frame,
174ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                   uint8* dst_argb, int dst_stride_argb,
175ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                   int width, int height);
176ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
177ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifdef HAVE_JPEG
178ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// src_width/height provided by capture
179ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// dst_width/height for clipping determine final size.
180ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
181ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint MJPGToARGB(const uint8* sample, size_t sample_size,
182ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               uint8* dst_argb, int dst_stride_argb,
183ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               int src_width, int src_height,
184ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               int dst_width, int dst_height);
185ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif
186ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
187ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Note Bayer formats (BGGR) to ARGB are in format_conversion.h.
188ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
189ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert camera sample to ARGB with cropping, rotation and vertical flip.
190ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// "src_size" is needed to parse MJPG.
191ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// "dst_stride_argb" number of bytes in a row of the dst_argb plane.
192ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian//   Normally this would be the same as dst_width, with recommended alignment
193ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian//   to 16 bytes for better efficiency.
194ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian//   If rotation of 90 or 270 is used, stride is affected. The caller should
195ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian//   allocate the I420 buffer according to rotation.
196ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// "dst_stride_u" number of bytes in a row of the dst_u plane.
197ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian//   Normally this would be the same as (dst_width + 1) / 2, with
198ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian//   recommended alignment to 16 bytes for better efficiency.
199ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian//   If rotation of 90 or 270 is used, stride is affected.
200ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// "crop_x" and "crop_y" are starting position for cropping.
201ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian//   To center, crop_x = (src_width - dst_width) / 2
202ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian//              crop_y = (src_height - dst_height) / 2
203ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// "src_width" / "src_height" is size of src_frame in pixels.
204ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian//   "src_height" can be negative indicating a vertically flipped image source.
205ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// "crop_width" / "crop_height" is the size to crop the src to.
206ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian//    Must be less than or equal to src_width/src_height
207ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian//    Cropping parameters are pre-rotation.
208ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// "rotation" can be 0, 90, 180 or 270.
209ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// "format" is a fourcc. ie 'I420', 'YUY2'
210ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Returns 0 for successful; -1 for invalid parameter. Non-zero for failure.
211ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
212ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint ConvertToARGB(const uint8* src_frame, size_t src_size,
213ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                  uint8* dst_argb, int dst_stride_argb,
214ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                  int crop_x, int crop_y,
215ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                  int src_width, int src_height,
216ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                  int crop_width, int crop_height,
217ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                  enum RotationMode rotation,
218ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                  uint32 format);
219ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
220ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifdef __cplusplus
221ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}  // extern "C"
222ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}  // namespace libyuv
223ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif
224ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
225ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif  // INCLUDE_LIBYUV_CONVERT_ARGB_H_  NOLINT
226