1 /*
2  *  Copyright 2011 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_FROM_H_  // NOLINT
12 #define INCLUDE_LIBYUV_CONVERT_FROM_H_
13 
14 #include "libyuv/basic_types.h"
15 #include "libyuv/rotate.h"
16 
17 #ifdef __cplusplus
18 namespace libyuv {
19 extern "C" {
20 #endif
21 
22 // See Also convert.h for conversions from formats to I420.
23 
24 // I420Copy in convert to I420ToI420.
25 
26 LIBYUV_API
27 int I420ToI422(const uint8* src_y, int src_stride_y,
28                const uint8* src_u, int src_stride_u,
29                const uint8* src_v, int src_stride_v,
30                uint8* dst_y, int dst_stride_y,
31                uint8* dst_u, int dst_stride_u,
32                uint8* dst_v, int dst_stride_v,
33                int width, int height);
34 
35 LIBYUV_API
36 int I420ToI444(const uint8* src_y, int src_stride_y,
37                const uint8* src_u, int src_stride_u,
38                const uint8* src_v, int src_stride_v,
39                uint8* dst_y, int dst_stride_y,
40                uint8* dst_u, int dst_stride_u,
41                uint8* dst_v, int dst_stride_v,
42                int width, int height);
43 
44 LIBYUV_API
45 int I420ToI411(const uint8* src_y, int src_stride_y,
46                const uint8* src_u, int src_stride_u,
47                const uint8* src_v, int src_stride_v,
48                uint8* dst_y, int dst_stride_y,
49                uint8* dst_u, int dst_stride_u,
50                uint8* dst_v, int dst_stride_v,
51                int width, int height);
52 
53 // Copy to I400. Source can be I420, I422, I444, I400, NV12 or NV21.
54 LIBYUV_API
55 int I400Copy(const uint8* src_y, int src_stride_y,
56              uint8* dst_y, int dst_stride_y,
57              int width, int height);
58 
59 // TODO(fbarchard): I420ToNV12
60 // TODO(fbarchard): I420ToM420
61 // TODO(fbarchard): I420ToQ420
62 
63 LIBYUV_API
64 int I420ToYUY2(const uint8* src_y, int src_stride_y,
65                const uint8* src_u, int src_stride_u,
66                const uint8* src_v, int src_stride_v,
67                uint8* dst_frame, int dst_stride_frame,
68                int width, int height);
69 
70 LIBYUV_API
71 int I420ToUYVY(const uint8* src_y, int src_stride_y,
72                const uint8* src_u, int src_stride_u,
73                const uint8* src_v, int src_stride_v,
74                uint8* dst_frame, int dst_stride_frame,
75                int width, int height);
76 
77 LIBYUV_API
78 int I420ToV210(const uint8* src_y, int src_stride_y,
79                const uint8* src_u, int src_stride_u,
80                const uint8* src_v, int src_stride_v,
81                uint8* dst_frame, int dst_stride_frame,
82                int width, int height);
83 
84 LIBYUV_API
85 int I420ToARGB(const uint8* src_y, int src_stride_y,
86                const uint8* src_u, int src_stride_u,
87                const uint8* src_v, int src_stride_v,
88                uint8* dst_argb, int dst_stride_argb,
89                int width, int height);
90 
91 LIBYUV_API
92 int I420ToBGRA(const uint8* src_y, int src_stride_y,
93                const uint8* src_u, int src_stride_u,
94                const uint8* src_v, int src_stride_v,
95                uint8* dst_argb, int dst_stride_argb,
96                int width, int height);
97 
98 LIBYUV_API
99 int I420ToABGR(const uint8* src_y, int src_stride_y,
100                const uint8* src_u, int src_stride_u,
101                const uint8* src_v, int src_stride_v,
102                uint8* dst_argb, int dst_stride_argb,
103                int width, int height);
104 
105 LIBYUV_API
106 int I420ToRGBA(const uint8* src_y, int src_stride_y,
107                const uint8* src_u, int src_stride_u,
108                const uint8* src_v, int src_stride_v,
109                uint8* dst_rgba, int dst_stride_rgba,
110                int width, int height);
111 
112 LIBYUV_API
113 int I420ToRGB24(const uint8* src_y, int src_stride_y,
114                 const uint8* src_u, int src_stride_u,
115                 const uint8* src_v, int src_stride_v,
116                 uint8* dst_frame, int dst_stride_frame,
117                 int width, int height);
118 
119 LIBYUV_API
120 int I420ToRAW(const uint8* src_y, int src_stride_y,
121               const uint8* src_u, int src_stride_u,
122               const uint8* src_v, int src_stride_v,
123               uint8* dst_frame, int dst_stride_frame,
124               int width, int height);
125 
126 LIBYUV_API
127 int I420ToRGB565(const uint8* src_y, int src_stride_y,
128                  const uint8* src_u, int src_stride_u,
129                  const uint8* src_v, int src_stride_v,
130                  uint8* dst_frame, int dst_stride_frame,
131                  int width, int height);
132 
133 LIBYUV_API
134 int I420ToARGB1555(const uint8* src_y, int src_stride_y,
135                    const uint8* src_u, int src_stride_u,
136                    const uint8* src_v, int src_stride_v,
137                    uint8* dst_frame, int dst_stride_frame,
138                    int width, int height);
139 
140 LIBYUV_API
141 int I420ToARGB4444(const uint8* src_y, int src_stride_y,
142                    const uint8* src_u, int src_stride_u,
143                    const uint8* src_v, int src_stride_v,
144                    uint8* dst_frame, int dst_stride_frame,
145                    int width, int height);
146 
147 // Note Bayer formats (BGGR) To I420 are in format_conversion.h.
148 
149 // Convert I420 to specified format.
150 // "dst_sample_stride" is bytes in a row for the destination. Pass 0 if the
151 //    buffer has contiguous rows. Can be negative. A multiple of 16 is optimal.
152 LIBYUV_API
153 int ConvertFromI420(const uint8* y, int y_stride,
154                     const uint8* u, int u_stride,
155                     const uint8* v, int v_stride,
156                     uint8* dst_sample, int dst_sample_stride,
157                     int width, int height,
158                     uint32 format);
159 
160 #ifdef __cplusplus
161 }  // extern "C"
162 }  // namespace libyuv
163 #endif
164 
165 #endif  // INCLUDE_LIBYUV_CONVERT_FROM_H_  NOLINT
166