Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(325)

Side by Side Diff: source/libvpx/third_party/libyuv/include/libyuv/planar_functions.h

Issue 341293003: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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_PLANAR_FUNCTIONS_H_ // NOLINT
12 #define INCLUDE_LIBYUV_PLANAR_FUNCTIONS_H_
13
14 #include "basic_types.h"
15
16 // TODO(fbarchard): Remove the following headers includes.
17 // #include "convert.h"
18 // #include "convert_argb.h"
19
20 #ifdef __cplusplus
21 namespace libyuv {
22 extern "C" {
23 #endif
24
25 // Copy a plane of data.
26 LIBYUV_API
27 void CopyPlane(const uint8* src_y, int src_stride_y,
28 uint8* dst_y, int dst_stride_y,
29 int width, int height);
30
31 LIBYUV_API
32 void CopyPlane_16(const uint16* src_y, int src_stride_y,
33 uint16* dst_y, int dst_stride_y,
34 int width, int height);
35
36 // Set a plane of data to a 32 bit value.
37 LIBYUV_API
38 void SetPlane(uint8* dst_y, int dst_stride_y,
39 int width, int height,
40 uint32 value);
41
42 // Copy I400. Supports inverting.
43 LIBYUV_API
44 int I400ToI400(const uint8* src_y, int src_stride_y,
45 uint8* dst_y, int dst_stride_y,
46 int width, int height);
47
48
49 // Copy I422 to I422.
50 #define I422ToI422 I422Copy
51 LIBYUV_API
52 int I422Copy(const uint8* src_y, int src_stride_y,
53 const uint8* src_u, int src_stride_u,
54 const uint8* src_v, int src_stride_v,
55 uint8* dst_y, int dst_stride_y,
56 uint8* dst_u, int dst_stride_u,
57 uint8* dst_v, int dst_stride_v,
58 int width, int height);
59
60 // Copy I444 to I444.
61 #define I444ToI444 I444Copy
62 LIBYUV_API
63 int I444Copy(const uint8* src_y, int src_stride_y,
64 const uint8* src_u, int src_stride_u,
65 const uint8* src_v, int src_stride_v,
66 uint8* dst_y, int dst_stride_y,
67 uint8* dst_u, int dst_stride_u,
68 uint8* dst_v, int dst_stride_v,
69 int width, int height);
70
71 // Convert YUY2 to I422.
72 LIBYUV_API
73 int YUY2ToI422(const uint8* src_yuy2, int src_stride_yuy2,
74 uint8* dst_y, int dst_stride_y,
75 uint8* dst_u, int dst_stride_u,
76 uint8* dst_v, int dst_stride_v,
77 int width, int height);
78
79 // Convert UYVY to I422.
80 LIBYUV_API
81 int UYVYToI422(const uint8* src_uyvy, int src_stride_uyvy,
82 uint8* dst_y, int dst_stride_y,
83 uint8* dst_u, int dst_stride_u,
84 uint8* dst_v, int dst_stride_v,
85 int width, int height);
86
87 // Convert I420 to I400. (calls CopyPlane ignoring u/v).
88 LIBYUV_API
89 int I420ToI400(const uint8* src_y, int src_stride_y,
90 const uint8* src_u, int src_stride_u,
91 const uint8* src_v, int src_stride_v,
92 uint8* dst_y, int dst_stride_y,
93 int width, int height);
94
95 // Alias
96 #define I420ToI420Mirror I420Mirror
97
98 // I420 mirror.
99 LIBYUV_API
100 int I420Mirror(const uint8* src_y, int src_stride_y,
101 const uint8* src_u, int src_stride_u,
102 const uint8* src_v, int src_stride_v,
103 uint8* dst_y, int dst_stride_y,
104 uint8* dst_u, int dst_stride_u,
105 uint8* dst_v, int dst_stride_v,
106 int width, int height);
107
108 // Alias
109 #define I400ToI400Mirror I400Mirror
110
111 // I400 mirror. A single plane is mirrored horizontally.
112 // Pass negative height to achieve 180 degree rotation.
113 LIBYUV_API
114 int I400Mirror(const uint8* src_y, int src_stride_y,
115 uint8* dst_y, int dst_stride_y,
116 int width, int height);
117
118 // Alias
119 #define ARGBToARGBMirror ARGBMirror
120
121 // ARGB mirror.
122 LIBYUV_API
123 int ARGBMirror(const uint8* src_argb, int src_stride_argb,
124 uint8* dst_argb, int dst_stride_argb,
125 int width, int height);
126
127 // Convert NV12 to RGB565.
128 LIBYUV_API
129 int NV12ToRGB565(const uint8* src_y, int src_stride_y,
130 const uint8* src_uv, int src_stride_uv,
131 uint8* dst_rgb565, int dst_stride_rgb565,
132 int width, int height);
133
134 // Convert NV21 to RGB565.
135 LIBYUV_API
136 int NV21ToRGB565(const uint8* src_y, int src_stride_y,
137 const uint8* src_uv, int src_stride_uv,
138 uint8* dst_rgb565, int dst_stride_rgb565,
139 int width, int height);
140
141 // I422ToARGB is in convert_argb.h
142 // Convert I422 to BGRA.
143 LIBYUV_API
144 int I422ToBGRA(const uint8* src_y, int src_stride_y,
145 const uint8* src_u, int src_stride_u,
146 const uint8* src_v, int src_stride_v,
147 uint8* dst_bgra, int dst_stride_bgra,
148 int width, int height);
149
150 // Convert I422 to ABGR.
151 LIBYUV_API
152 int I422ToABGR(const uint8* src_y, int src_stride_y,
153 const uint8* src_u, int src_stride_u,
154 const uint8* src_v, int src_stride_v,
155 uint8* dst_abgr, int dst_stride_abgr,
156 int width, int height);
157
158 // Convert I422 to RGBA.
159 LIBYUV_API
160 int I422ToRGBA(const uint8* src_y, int src_stride_y,
161 const uint8* src_u, int src_stride_u,
162 const uint8* src_v, int src_stride_v,
163 uint8* dst_rgba, int dst_stride_rgba,
164 int width, int height);
165
166 // Draw a rectangle into I420.
167 LIBYUV_API
168 int I420Rect(uint8* dst_y, int dst_stride_y,
169 uint8* dst_u, int dst_stride_u,
170 uint8* dst_v, int dst_stride_v,
171 int x, int y, int width, int height,
172 int value_y, int value_u, int value_v);
173
174 // Draw a rectangle into ARGB.
175 LIBYUV_API
176 int ARGBRect(uint8* dst_argb, int dst_stride_argb,
177 int x, int y, int width, int height, uint32 value);
178
179 // Convert ARGB to gray scale ARGB.
180 LIBYUV_API
181 int ARGBGrayTo(const uint8* src_argb, int src_stride_argb,
182 uint8* dst_argb, int dst_stride_argb,
183 int width, int height);
184
185 // Make a rectangle of ARGB gray scale.
186 LIBYUV_API
187 int ARGBGray(uint8* dst_argb, int dst_stride_argb,
188 int x, int y, int width, int height);
189
190 // Make a rectangle of ARGB Sepia tone.
191 LIBYUV_API
192 int ARGBSepia(uint8* dst_argb, int dst_stride_argb,
193 int x, int y, int width, int height);
194
195 // Apply a matrix rotation to each ARGB pixel.
196 // matrix_argb is 4 signed ARGB values. -128 to 127 representing -2 to 2.
197 // The first 4 coefficients apply to B, G, R, A and produce B of the output.
198 // The next 4 coefficients apply to B, G, R, A and produce G of the output.
199 // The next 4 coefficients apply to B, G, R, A and produce R of the output.
200 // The last 4 coefficients apply to B, G, R, A and produce A of the output.
201 LIBYUV_API
202 int ARGBColorMatrix(const uint8* src_argb, int src_stride_argb,
203 uint8* dst_argb, int dst_stride_argb,
204 const int8* matrix_argb,
205 int width, int height);
206
207 // Deprecated. Use ARGBColorMatrix instead.
208 // Apply a matrix rotation to each ARGB pixel.
209 // matrix_argb is 3 signed ARGB values. -128 to 127 representing -1 to 1.
210 // The first 4 coefficients apply to B, G, R, A and produce B of the output.
211 // The next 4 coefficients apply to B, G, R, A and produce G of the output.
212 // The last 4 coefficients apply to B, G, R, A and produce R of the output.
213 LIBYUV_API
214 int RGBColorMatrix(uint8* dst_argb, int dst_stride_argb,
215 const int8* matrix_rgb,
216 int x, int y, int width, int height);
217
218 // Apply a color table each ARGB pixel.
219 // Table contains 256 ARGB values.
220 LIBYUV_API
221 int ARGBColorTable(uint8* dst_argb, int dst_stride_argb,
222 const uint8* table_argb,
223 int x, int y, int width, int height);
224
225 // Apply a color table each ARGB pixel but preserve destination alpha.
226 // Table contains 256 ARGB values.
227 LIBYUV_API
228 int RGBColorTable(uint8* dst_argb, int dst_stride_argb,
229 const uint8* table_argb,
230 int x, int y, int width, int height);
231
232 // Apply a luma/color table each ARGB pixel but preserve destination alpha.
233 // Table contains 32768 values indexed by [Y][C] where 7 it 7 bit luma from
234 // RGB (YJ style) and C is an 8 bit color component (R, G or B).
235 LIBYUV_API
236 int ARGBLumaColorTable(const uint8* src_argb, int src_stride_argb,
237 uint8* dst_argb, int dst_stride_argb,
238 const uint8* luma_rgb_table,
239 int width, int height);
240
241 // Apply a 3 term polynomial to ARGB values.
242 // poly points to a 4x4 matrix. The first row is constants. The 2nd row is
243 // coefficients for b, g, r and a. The 3rd row is coefficients for b squared,
244 // g squared, r squared and a squared. The 4rd row is coefficients for b to
245 // the 3, g to the 3, r to the 3 and a to the 3. The values are summed and
246 // result clamped to 0 to 255.
247 // A polynomial approximation can be dirived using software such as 'R'.
248
249 LIBYUV_API
250 int ARGBPolynomial(const uint8* src_argb, int src_stride_argb,
251 uint8* dst_argb, int dst_stride_argb,
252 const float* poly,
253 int width, int height);
254
255 // Quantize a rectangle of ARGB. Alpha unaffected.
256 // scale is a 16 bit fractional fixed point scaler between 0 and 65535.
257 // interval_size should be a value between 1 and 255.
258 // interval_offset should be a value between 0 and 255.
259 LIBYUV_API
260 int ARGBQuantize(uint8* dst_argb, int dst_stride_argb,
261 int scale, int interval_size, int interval_offset,
262 int x, int y, int width, int height);
263
264 // Copy ARGB to ARGB.
265 LIBYUV_API
266 int ARGBCopy(const uint8* src_argb, int src_stride_argb,
267 uint8* dst_argb, int dst_stride_argb,
268 int width, int height);
269
270 // Copy ARGB to ARGB.
271 LIBYUV_API
272 int ARGBCopyAlpha(const uint8* src_argb, int src_stride_argb,
273 uint8* dst_argb, int dst_stride_argb,
274 int width, int height);
275
276 // Copy ARGB to ARGB.
277 LIBYUV_API
278 int ARGBCopyYToAlpha(const uint8* src_y, int src_stride_y,
279 uint8* dst_argb, int dst_stride_argb,
280 int width, int height);
281
282 typedef void (*ARGBBlendRow)(const uint8* src_argb0, const uint8* src_argb1,
283 uint8* dst_argb, int width);
284
285 // Get function to Alpha Blend ARGB pixels and store to destination.
286 LIBYUV_API
287 ARGBBlendRow GetARGBBlend();
288
289 // Alpha Blend ARGB images and store to destination.
290 // Alpha of destination is set to 255.
291 LIBYUV_API
292 int ARGBBlend(const uint8* src_argb0, int src_stride_argb0,
293 const uint8* src_argb1, int src_stride_argb1,
294 uint8* dst_argb, int dst_stride_argb,
295 int width, int height);
296
297 // Multiply ARGB image by ARGB image. Shifted down by 8. Saturates to 255.
298 LIBYUV_API
299 int ARGBMultiply(const uint8* src_argb0, int src_stride_argb0,
300 const uint8* src_argb1, int src_stride_argb1,
301 uint8* dst_argb, int dst_stride_argb,
302 int width, int height);
303
304 // Add ARGB image with ARGB image. Saturates to 255.
305 LIBYUV_API
306 int ARGBAdd(const uint8* src_argb0, int src_stride_argb0,
307 const uint8* src_argb1, int src_stride_argb1,
308 uint8* dst_argb, int dst_stride_argb,
309 int width, int height);
310
311 // Subtract ARGB image (argb1) from ARGB image (argb0). Saturates to 0.
312 LIBYUV_API
313 int ARGBSubtract(const uint8* src_argb0, int src_stride_argb0,
314 const uint8* src_argb1, int src_stride_argb1,
315 uint8* dst_argb, int dst_stride_argb,
316 int width, int height);
317
318 // Convert I422 to YUY2.
319 LIBYUV_API
320 int I422ToYUY2(const uint8* src_y, int src_stride_y,
321 const uint8* src_u, int src_stride_u,
322 const uint8* src_v, int src_stride_v,
323 uint8* dst_frame, int dst_stride_frame,
324 int width, int height);
325
326 // Convert I422 to UYVY.
327 LIBYUV_API
328 int I422ToUYVY(const uint8* src_y, int src_stride_y,
329 const uint8* src_u, int src_stride_u,
330 const uint8* src_v, int src_stride_v,
331 uint8* dst_frame, int dst_stride_frame,
332 int width, int height);
333
334 // Convert unattentuated ARGB to preattenuated ARGB.
335 LIBYUV_API
336 int ARGBAttenuate(const uint8* src_argb, int src_stride_argb,
337 uint8* dst_argb, int dst_stride_argb,
338 int width, int height);
339
340 // Convert preattentuated ARGB to unattenuated ARGB.
341 LIBYUV_API
342 int ARGBUnattenuate(const uint8* src_argb, int src_stride_argb,
343 uint8* dst_argb, int dst_stride_argb,
344 int width, int height);
345
346 // Convert MJPG to ARGB.
347 LIBYUV_API
348 int MJPGToARGB(const uint8* sample, size_t sample_size,
349 uint8* argb, int argb_stride,
350 int w, int h, int dw, int dh);
351
352 // Internal function - do not call directly.
353 // Computes table of cumulative sum for image where the value is the sum
354 // of all values above and to the left of the entry. Used by ARGBBlur.
355 LIBYUV_API
356 int ARGBComputeCumulativeSum(const uint8* src_argb, int src_stride_argb,
357 int32* dst_cumsum, int dst_stride32_cumsum,
358 int width, int height);
359
360 // Blur ARGB image.
361 // dst_cumsum table of width * (height + 1) * 16 bytes aligned to
362 // 16 byte boundary.
363 // dst_stride32_cumsum is number of ints in a row (width * 4).
364 // radius is number of pixels around the center. e.g. 1 = 3x3. 2=5x5.
365 // Blur is optimized for radius of 5 (11x11) or less.
366 LIBYUV_API
367 int ARGBBlur(const uint8* src_argb, int src_stride_argb,
368 uint8* dst_argb, int dst_stride_argb,
369 int32* dst_cumsum, int dst_stride32_cumsum,
370 int width, int height, int radius);
371
372 // Multiply ARGB image by ARGB value.
373 LIBYUV_API
374 int ARGBShade(const uint8* src_argb, int src_stride_argb,
375 uint8* dst_argb, int dst_stride_argb,
376 int width, int height, uint32 value);
377
378 // Interpolate between two ARGB images using specified amount of interpolation
379 // (0 to 255) and store to destination.
380 // 'interpolation' is specified as 8 bit fraction where 0 means 100% src_argb0
381 // and 255 means 1% src_argb0 and 99% src_argb1.
382 // Internally uses ARGBScale bilinear filtering.
383 // Caveat: This function will write up to 16 bytes beyond the end of dst_argb.
384 LIBYUV_API
385 int ARGBInterpolate(const uint8* src_argb0, int src_stride_argb0,
386 const uint8* src_argb1, int src_stride_argb1,
387 uint8* dst_argb, int dst_stride_argb,
388 int width, int height, int interpolation);
389
390 #if defined(__pnacl__) || defined(__CLR_VER) || defined(COVERAGE_ENABLED) || \
391 defined(TARGET_IPHONE_SIMULATOR)
392 #define LIBYUV_DISABLE_X86
393 #endif
394
395 // Row functions for copying a pixels from a source with a slope to a row
396 // of destination. Useful for scaling, rotation, mirror, texture mapping.
397 LIBYUV_API
398 void ARGBAffineRow_C(const uint8* src_argb, int src_argb_stride,
399 uint8* dst_argb, const float* uv_dudv, int width);
400 // The following are available on all x86 platforms:
401 #if !defined(LIBYUV_DISABLE_X86) && \
402 (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__))
403 LIBYUV_API
404 void ARGBAffineRow_SSE2(const uint8* src_argb, int src_argb_stride,
405 uint8* dst_argb, const float* uv_dudv, int width);
406 #define HAS_ARGBAFFINEROW_SSE2
407 #endif // LIBYUV_DISABLE_X86
408
409 // Shuffle ARGB channel order. e.g. BGRA to ARGB.
410 // shuffler is 16 bytes and must be aligned.
411 LIBYUV_API
412 int ARGBShuffle(const uint8* src_bgra, int src_stride_bgra,
413 uint8* dst_argb, int dst_stride_argb,
414 const uint8* shuffler, int width, int height);
415
416 // Sobel ARGB effect with planar output.
417 LIBYUV_API
418 int ARGBSobelToPlane(const uint8* src_argb, int src_stride_argb,
419 uint8* dst_y, int dst_stride_y,
420 int width, int height);
421
422 // Sobel ARGB effect.
423 LIBYUV_API
424 int ARGBSobel(const uint8* src_argb, int src_stride_argb,
425 uint8* dst_argb, int dst_stride_argb,
426 int width, int height);
427
428 // Sobel ARGB effect w/ Sobel X, Sobel, Sobel Y in ARGB.
429 LIBYUV_API
430 int ARGBSobelXY(const uint8* src_argb, int src_stride_argb,
431 uint8* dst_argb, int dst_stride_argb,
432 int width, int height);
433
434 #ifdef __cplusplus
435 } // extern "C"
436 } // namespace libyuv
437 #endif
438
439 #endif // INCLUDE_LIBYUV_PLANAR_FUNCTIONS_H_ NOLINT
OLDNEW
« no previous file with comments | « source/libvpx/third_party/libyuv/include/libyuv/cpu_id.h ('k') | source/libvpx/third_party/libyuv/include/libyuv/row.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698