1 /*
2  *  Copyright (c) 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_SCALE_H_
12 #define INCLUDE_LIBYUV_SCALE_H_
13 
14 #include "third_party/libyuv/include/libyuv/basic_types.h"
15 
16 #ifdef __cplusplus
17 namespace libyuv {
18 extern "C" {
19 #endif
20 
21 // Supported filtering
22 typedef enum {
23   kFilterNone = 0,  // Point sample; Fastest
24   kFilterBilinear = 1,  // Faster than box, but lower quality scaling down.
25   kFilterBox = 2  // Highest quality
26 }FilterMode;
27 
28 // Scales a YUV 4:2:0 image from the src width and height to the
29 // dst width and height.
30 // If filtering is kFilterNone, a simple nearest-neighbor algorithm is
31 // used. This produces basic (blocky) quality at the fastest speed.
32 // If filtering is kFilterBilinear, interpolation is used to produce a better
33 // quality image, at the expense of speed.
34 // If filtering is kFilterBox, averaging is used to produce ever better
35 // quality image, at further expense of speed.
36 // Returns 0 if successful.
37 
38 int I420Scale(const uint8* src_y, int src_stride_y,
39               const uint8* src_u, int src_stride_u,
40               const uint8* src_v, int src_stride_v,
41               int src_width, int src_height,
42               uint8* dst_y, int dst_stride_y,
43               uint8* dst_u, int dst_stride_u,
44               uint8* dst_v, int dst_stride_v,
45               int dst_width, int dst_height,
46               FilterMode filtering);
47 
48 // Legacy API.  Deprecated
49 int Scale(const uint8* src_y, const uint8* src_u, const uint8* src_v,
50           int src_stride_y, int src_stride_u, int src_stride_v,
51           int src_width, int src_height,
52           uint8* dst_y, uint8* dst_u, uint8* dst_v,
53           int dst_stride_y, int dst_stride_u, int dst_stride_v,
54           int dst_width, int dst_height,
55           int interpolate);
56 
57 // Legacy API.  Deprecated
58 int ScaleOffset(const uint8* src, int src_width, int src_height,
59                 uint8* dst, int dst_width, int dst_height, int dst_yoffset,
60                 int interpolate);
61 
62 // For testing, allow disabling of optimizations.
63 void SetUseReferenceImpl(int use);
64 
65 #ifdef __cplusplus
66 }  // extern "C"
67 }  // namespace libyuv
68 #endif
69 
70 #endif // INCLUDE_LIBYUV_SCALE_H_
71