xref: /aosp_15_r20/external/libyuv/include/libyuv/convert_from.h (revision 4e366538070a3a6c5c163c31b791eab742e1657a)
1*4e366538SXin Li /*
2*4e366538SXin Li  *  Copyright 2011 The LibYuv Project Authors. All rights reserved.
3*4e366538SXin Li  *
4*4e366538SXin Li  *  Use of this source code is governed by a BSD-style license
5*4e366538SXin Li  *  that can be found in the LICENSE file in the root of the source
6*4e366538SXin Li  *  tree. An additional intellectual property rights grant can be found
7*4e366538SXin Li  *  in the file PATENTS. All contributing project authors may
8*4e366538SXin Li  *  be found in the AUTHORS file in the root of the source tree.
9*4e366538SXin Li  */
10*4e366538SXin Li 
11*4e366538SXin Li #ifndef INCLUDE_LIBYUV_CONVERT_FROM_H_
12*4e366538SXin Li #define INCLUDE_LIBYUV_CONVERT_FROM_H_
13*4e366538SXin Li 
14*4e366538SXin Li #include "libyuv/basic_types.h"
15*4e366538SXin Li #include "libyuv/rotate.h"
16*4e366538SXin Li 
17*4e366538SXin Li #ifdef __cplusplus
18*4e366538SXin Li namespace libyuv {
19*4e366538SXin Li extern "C" {
20*4e366538SXin Li #endif
21*4e366538SXin Li 
22*4e366538SXin Li // See Also convert.h for conversions from formats to I420.
23*4e366538SXin Li 
24*4e366538SXin Li // Convert 8 bit YUV to 10 bit.
25*4e366538SXin Li #define H420ToH010 I420ToI010
26*4e366538SXin Li LIBYUV_API
27*4e366538SXin Li int I420ToI010(const uint8_t* src_y,
28*4e366538SXin Li                int src_stride_y,
29*4e366538SXin Li                const uint8_t* src_u,
30*4e366538SXin Li                int src_stride_u,
31*4e366538SXin Li                const uint8_t* src_v,
32*4e366538SXin Li                int src_stride_v,
33*4e366538SXin Li                uint16_t* dst_y,
34*4e366538SXin Li                int dst_stride_y,
35*4e366538SXin Li                uint16_t* dst_u,
36*4e366538SXin Li                int dst_stride_u,
37*4e366538SXin Li                uint16_t* dst_v,
38*4e366538SXin Li                int dst_stride_v,
39*4e366538SXin Li                int width,
40*4e366538SXin Li                int height);
41*4e366538SXin Li 
42*4e366538SXin Li // Convert 8 bit YUV to 12 bit.
43*4e366538SXin Li #define H420ToH012 I420ToI012
44*4e366538SXin Li LIBYUV_API
45*4e366538SXin Li int I420ToI012(const uint8_t* src_y,
46*4e366538SXin Li                int src_stride_y,
47*4e366538SXin Li                const uint8_t* src_u,
48*4e366538SXin Li                int src_stride_u,
49*4e366538SXin Li                const uint8_t* src_v,
50*4e366538SXin Li                int src_stride_v,
51*4e366538SXin Li                uint16_t* dst_y,
52*4e366538SXin Li                int dst_stride_y,
53*4e366538SXin Li                uint16_t* dst_u,
54*4e366538SXin Li                int dst_stride_u,
55*4e366538SXin Li                uint16_t* dst_v,
56*4e366538SXin Li                int dst_stride_v,
57*4e366538SXin Li                int width,
58*4e366538SXin Li                int height);
59*4e366538SXin Li 
60*4e366538SXin Li LIBYUV_API
61*4e366538SXin Li int I420ToI422(const uint8_t* src_y,
62*4e366538SXin Li                int src_stride_y,
63*4e366538SXin Li                const uint8_t* src_u,
64*4e366538SXin Li                int src_stride_u,
65*4e366538SXin Li                const uint8_t* src_v,
66*4e366538SXin Li                int src_stride_v,
67*4e366538SXin Li                uint8_t* dst_y,
68*4e366538SXin Li                int dst_stride_y,
69*4e366538SXin Li                uint8_t* dst_u,
70*4e366538SXin Li                int dst_stride_u,
71*4e366538SXin Li                uint8_t* dst_v,
72*4e366538SXin Li                int dst_stride_v,
73*4e366538SXin Li                int width,
74*4e366538SXin Li                int height);
75*4e366538SXin Li 
76*4e366538SXin Li LIBYUV_API
77*4e366538SXin Li int I420ToI444(const uint8_t* src_y,
78*4e366538SXin Li                int src_stride_y,
79*4e366538SXin Li                const uint8_t* src_u,
80*4e366538SXin Li                int src_stride_u,
81*4e366538SXin Li                const uint8_t* src_v,
82*4e366538SXin Li                int src_stride_v,
83*4e366538SXin Li                uint8_t* dst_y,
84*4e366538SXin Li                int dst_stride_y,
85*4e366538SXin Li                uint8_t* dst_u,
86*4e366538SXin Li                int dst_stride_u,
87*4e366538SXin Li                uint8_t* dst_v,
88*4e366538SXin Li                int dst_stride_v,
89*4e366538SXin Li                int width,
90*4e366538SXin Li                int height);
91*4e366538SXin Li 
92*4e366538SXin Li // Copy to I400. Source can be I420, I422, I444, I400, NV12 or NV21.
93*4e366538SXin Li LIBYUV_API
94*4e366538SXin Li int I400Copy(const uint8_t* src_y,
95*4e366538SXin Li              int src_stride_y,
96*4e366538SXin Li              uint8_t* dst_y,
97*4e366538SXin Li              int dst_stride_y,
98*4e366538SXin Li              int width,
99*4e366538SXin Li              int height);
100*4e366538SXin Li 
101*4e366538SXin Li LIBYUV_API
102*4e366538SXin Li int I420ToNV12(const uint8_t* src_y,
103*4e366538SXin Li                int src_stride_y,
104*4e366538SXin Li                const uint8_t* src_u,
105*4e366538SXin Li                int src_stride_u,
106*4e366538SXin Li                const uint8_t* src_v,
107*4e366538SXin Li                int src_stride_v,
108*4e366538SXin Li                uint8_t* dst_y,
109*4e366538SXin Li                int dst_stride_y,
110*4e366538SXin Li                uint8_t* dst_uv,
111*4e366538SXin Li                int dst_stride_uv,
112*4e366538SXin Li                int width,
113*4e366538SXin Li                int height);
114*4e366538SXin Li 
115*4e366538SXin Li LIBYUV_API
116*4e366538SXin Li int I420ToNV21(const uint8_t* src_y,
117*4e366538SXin Li                int src_stride_y,
118*4e366538SXin Li                const uint8_t* src_u,
119*4e366538SXin Li                int src_stride_u,
120*4e366538SXin Li                const uint8_t* src_v,
121*4e366538SXin Li                int src_stride_v,
122*4e366538SXin Li                uint8_t* dst_y,
123*4e366538SXin Li                int dst_stride_y,
124*4e366538SXin Li                uint8_t* dst_vu,
125*4e366538SXin Li                int dst_stride_vu,
126*4e366538SXin Li                int width,
127*4e366538SXin Li                int height);
128*4e366538SXin Li 
129*4e366538SXin Li LIBYUV_API
130*4e366538SXin Li int I420ToYUY2(const uint8_t* src_y,
131*4e366538SXin Li                int src_stride_y,
132*4e366538SXin Li                const uint8_t* src_u,
133*4e366538SXin Li                int src_stride_u,
134*4e366538SXin Li                const uint8_t* src_v,
135*4e366538SXin Li                int src_stride_v,
136*4e366538SXin Li                uint8_t* dst_yuy2,
137*4e366538SXin Li                int dst_stride_yuy2,
138*4e366538SXin Li                int width,
139*4e366538SXin Li                int height);
140*4e366538SXin Li 
141*4e366538SXin Li LIBYUV_API
142*4e366538SXin Li int I420ToUYVY(const uint8_t* src_y,
143*4e366538SXin Li                int src_stride_y,
144*4e366538SXin Li                const uint8_t* src_u,
145*4e366538SXin Li                int src_stride_u,
146*4e366538SXin Li                const uint8_t* src_v,
147*4e366538SXin Li                int src_stride_v,
148*4e366538SXin Li                uint8_t* dst_uyvy,
149*4e366538SXin Li                int dst_stride_uyvy,
150*4e366538SXin Li                int width,
151*4e366538SXin Li                int height);
152*4e366538SXin Li 
153*4e366538SXin Li // The following are from convert_argb.h
154*4e366538SXin Li // DEPRECATED: The prototypes will be removed in future.  Use convert_argb.h
155*4e366538SXin Li 
156*4e366538SXin Li // Convert I420 to ARGB.
157*4e366538SXin Li LIBYUV_API
158*4e366538SXin Li int I420ToARGB(const uint8_t* src_y,
159*4e366538SXin Li                int src_stride_y,
160*4e366538SXin Li                const uint8_t* src_u,
161*4e366538SXin Li                int src_stride_u,
162*4e366538SXin Li                const uint8_t* src_v,
163*4e366538SXin Li                int src_stride_v,
164*4e366538SXin Li                uint8_t* dst_argb,
165*4e366538SXin Li                int dst_stride_argb,
166*4e366538SXin Li                int width,
167*4e366538SXin Li                int height);
168*4e366538SXin Li 
169*4e366538SXin Li // Convert I420 to ABGR.
170*4e366538SXin Li LIBYUV_API
171*4e366538SXin Li int I420ToABGR(const uint8_t* src_y,
172*4e366538SXin Li                int src_stride_y,
173*4e366538SXin Li                const uint8_t* src_u,
174*4e366538SXin Li                int src_stride_u,
175*4e366538SXin Li                const uint8_t* src_v,
176*4e366538SXin Li                int src_stride_v,
177*4e366538SXin Li                uint8_t* dst_abgr,
178*4e366538SXin Li                int dst_stride_abgr,
179*4e366538SXin Li                int width,
180*4e366538SXin Li                int height);
181*4e366538SXin Li 
182*4e366538SXin Li // Convert I420 to specified format.
183*4e366538SXin Li // "dst_sample_stride" is bytes in a row for the destination. Pass 0 if the
184*4e366538SXin Li //    buffer has contiguous rows. Can be negative. A multiple of 16 is optimal.
185*4e366538SXin Li LIBYUV_API
186*4e366538SXin Li int ConvertFromI420(const uint8_t* y,
187*4e366538SXin Li                     int y_stride,
188*4e366538SXin Li                     const uint8_t* u,
189*4e366538SXin Li                     int u_stride,
190*4e366538SXin Li                     const uint8_t* v,
191*4e366538SXin Li                     int v_stride,
192*4e366538SXin Li                     uint8_t* dst_sample,
193*4e366538SXin Li                     int dst_sample_stride,
194*4e366538SXin Li                     int width,
195*4e366538SXin Li                     int height,
196*4e366538SXin Li                     uint32_t fourcc);
197*4e366538SXin Li 
198*4e366538SXin Li #ifdef __cplusplus
199*4e366538SXin Li }  // extern "C"
200*4e366538SXin Li }  // namespace libyuv
201*4e366538SXin Li #endif
202*4e366538SXin Li 
203*4e366538SXin Li #endif  // INCLUDE_LIBYUV_CONVERT_FROM_H_
204