1ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian/*
2ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  Copyright 2013 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_SCALE_ROW_H_  // NOLINT
12ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define INCLUDE_LIBYUV_SCALE_ROW_H_
13ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
14ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#include "libyuv/basic_types.h"
15ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
16ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifdef __cplusplus
17ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniannamespace libyuv {
18ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianextern "C" {
19ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif
20ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
21ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#if defined(__pnacl__) || defined(__CLR_VER) || defined(COVERAGE_ENABLED) || \
22ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    defined(TARGET_IPHONE_SIMULATOR)
23ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define LIBYUV_DISABLE_X86
24ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif
25ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
26ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// The following are available on all x86 platforms:
27ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#if !defined(LIBYUV_DISABLE_X86) && \
28ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__))
29ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEROWDOWN2_SSE2
30ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEROWDOWN4_SSE2
31ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEROWDOWN34_SSSE3
32ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEROWDOWN38_SSSE3
33ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEADDROWS_SSE2
34ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEFILTERCOLS_SSSE3
35ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALECOLSUP2_SSE2
36ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEARGBROWDOWN2_SSE2
37ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEARGBROWDOWNEVEN_SSE2
38ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEARGBCOLS_SSE2
39ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEARGBFILTERCOLS_SSSE3
40ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEARGBCOLSUP2_SSE2
41ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_FIXEDDIV_X86
42ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_FIXEDDIV1_X86
43ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif
44ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
45ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// The following are available on Neon platforms:
46ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#if !defined(LIBYUV_DISABLE_NEON) && !defined(__native_client__) && \
47ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    (defined(__ARM_NEON__) || defined(LIBYUV_NEON))
48ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEROWDOWN2_NEON
49ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEROWDOWN4_NEON
50ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEROWDOWN34_NEON
51ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEROWDOWN38_NEON
52ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEARGBROWDOWNEVEN_NEON
53ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEARGBROWDOWN2_NEON
54ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif
55ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
56ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// The following are available on Mips platforms:
57ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#if !defined(LIBYUV_DISABLE_MIPS) && !defined(__native_client__) && \
58ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    defined(__mips__) && defined(__mips_dsp) && (__mips_dsp_rev >= 2)
59ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEROWDOWN2_MIPS_DSPR2
60ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEROWDOWN4_MIPS_DSPR2
61ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEROWDOWN34_MIPS_DSPR2
62ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define HAS_SCALEROWDOWN38_MIPS_DSPR2
63ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif
64ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
65ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Scale ARGB vertically with bilinear interpolation.
66ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScalePlaneVertical(int src_height,
67ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                        int dst_width, int dst_height,
68ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                        int src_stride, int dst_stride,
69ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                        const uint8* src_argb, uint8* dst_argb,
70ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                        int x, int y, int dy,
71ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                        int bpp, enum FilterMode filtering);
72ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
73ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScalePlaneVertical_16(int src_height,
74ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                           int dst_width, int dst_height,
75ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                           int src_stride, int dst_stride,
76ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                           const uint16* src_argb, uint16* dst_argb,
77ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                           int x, int y, int dy,
78ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                           int wpp, enum FilterMode filtering);
79ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
80ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Simplify the filtering based on scale factors.
81ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianenum FilterMode ScaleFilterReduce(int src_width, int src_height,
82ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                  int dst_width, int dst_height,
83ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                  enum FilterMode filtering);
84ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
85ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Divide num by div and return as 16.16 fixed point result.
86ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint FixedDiv_C(int num, int div);
87ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint FixedDiv_X86(int num, int div);
88ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Divide num - 1 by div - 1 and return as 16.16 fixed point result.
89ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint FixedDiv1_C(int num, int div);
90ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint FixedDiv1_X86(int num, int div);
91ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifdef HAS_FIXEDDIV_X86
92ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define FixedDiv FixedDiv_X86
93ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define FixedDiv1 FixedDiv1_X86
94ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#else
95ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define FixedDiv FixedDiv_C
96ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define FixedDiv1 FixedDiv1_C
97ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif
98ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
99ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Compute slope values for stepping.
100ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleSlope(int src_width, int src_height,
101ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                int dst_width, int dst_height,
102ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                enum FilterMode filtering,
103ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                int* x, int* y, int* dx, int* dy);
104ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
105ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown2_C(const uint8* src_ptr, ptrdiff_t src_stride,
106ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                     uint8* dst, int dst_width);
107ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown2_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
108ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                        uint16* dst, int dst_width);
109ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown2Linear_C(const uint8* src_ptr, ptrdiff_t src_stride,
110ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                           uint8* dst, int dst_width);
111ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown2Linear_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
112ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                              uint16* dst, int dst_width);
113ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown2Box_C(const uint8* src_ptr, ptrdiff_t src_stride,
114ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                        uint8* dst, int dst_width);
115ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown2Box_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
116ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                           uint16* dst, int dst_width);
117ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown4_C(const uint8* src_ptr, ptrdiff_t src_stride,
118ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                     uint8* dst, int dst_width);
119ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown4_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
120ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                        uint16* dst, int dst_width);
121ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown4Box_C(const uint8* src_ptr, ptrdiff_t src_stride,
122ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                        uint8* dst, int dst_width);
123ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown4Box_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
124ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                           uint16* dst, int dst_width);
125ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown34_C(const uint8* src_ptr, ptrdiff_t src_stride,
126ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                      uint8* dst, int dst_width);
127ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown34_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
128ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                         uint16* dst, int dst_width);
129ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown34_0_Box_C(const uint8* src_ptr, ptrdiff_t src_stride,
130ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                            uint8* d, int dst_width);
131ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown34_0_Box_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
132ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               uint16* d, int dst_width);
133ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown34_1_Box_C(const uint8* src_ptr, ptrdiff_t src_stride,
134ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                            uint8* d, int dst_width);
135ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown34_1_Box_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
136ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               uint16* d, int dst_width);
137ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleCols_C(uint8* dst_ptr, const uint8* src_ptr,
138ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                 int dst_width, int x, int dx);
139ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleCols_16_C(uint16* dst_ptr, const uint16* src_ptr,
140ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                    int dst_width, int x, int dx);
141ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleColsUp2_C(uint8* dst_ptr, const uint8* src_ptr,
142ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                    int dst_width, int, int);
143ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleColsUp2_16_C(uint16* dst_ptr, const uint16* src_ptr,
144ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                       int dst_width, int, int);
145ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleFilterCols_C(uint8* dst_ptr, const uint8* src_ptr,
146ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                       int dst_width, int x, int dx);
147ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleFilterCols_16_C(uint16* dst_ptr, const uint16* src_ptr,
148ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                          int dst_width, int x, int dx);
149ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleFilterCols64_C(uint8* dst_ptr, const uint8* src_ptr,
150ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                         int dst_width, int x, int dx);
151ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleFilterCols64_16_C(uint16* dst_ptr, const uint16* src_ptr,
152ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                            int dst_width, int x, int dx);
153ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown38_C(const uint8* src_ptr, ptrdiff_t src_stride,
154ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                      uint8* dst, int dst_width);
155ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown38_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
156ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                         uint16* dst, int dst_width);
157ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown38_3_Box_C(const uint8* src_ptr,
158ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                            ptrdiff_t src_stride,
159ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                            uint8* dst_ptr, int dst_width);
160ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown38_3_Box_16_C(const uint16* src_ptr,
161ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               ptrdiff_t src_stride,
162ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               uint16* dst_ptr, int dst_width);
163ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown38_2_Box_C(const uint8* src_ptr, ptrdiff_t src_stride,
164ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                            uint8* dst_ptr, int dst_width);
165ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown38_2_Box_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
166ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               uint16* dst_ptr, int dst_width);
167ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleAddRows_C(const uint8* src_ptr, ptrdiff_t src_stride,
168ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                    uint16* dst_ptr, int src_width, int src_height);
169ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleAddRows_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
170ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                       uint32* dst_ptr, int src_width, int src_height);
171ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBRowDown2_C(const uint8* src_argb,
172ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                         ptrdiff_t src_stride,
173ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                         uint8* dst_argb, int dst_width);
174ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBRowDown2Linear_C(const uint8* src_argb,
175ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               ptrdiff_t src_stride,
176ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               uint8* dst_argb, int dst_width);
177ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBRowDown2Box_C(const uint8* src_argb, ptrdiff_t src_stride,
178ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                            uint8* dst_argb, int dst_width);
179ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBRowDownEven_C(const uint8* src_argb, ptrdiff_t src_stride,
180ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                            int src_stepx,
181ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                            uint8* dst_argb, int dst_width);
182ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBRowDownEvenBox_C(const uint8* src_argb,
183ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               ptrdiff_t src_stride,
184ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               int src_stepx,
185ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               uint8* dst_argb, int dst_width);
186ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBCols_C(uint8* dst_argb, const uint8* src_argb,
187ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                     int dst_width, int x, int dx);
188ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBCols64_C(uint8* dst_argb, const uint8* src_argb,
189ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                       int dst_width, int x, int dx);
190ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBColsUp2_C(uint8* dst_argb, const uint8* src_argb,
191ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                        int dst_width, int, int);
192ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBFilterCols_C(uint8* dst_argb, const uint8* src_argb,
193ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                           int dst_width, int x, int dx);
194ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBFilterCols64_C(uint8* dst_argb, const uint8* src_argb,
195ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                             int dst_width, int x, int dx);
196ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
197ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown2_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,
198ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                        uint8* dst_ptr, int dst_width);
199ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown2Linear_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,
200ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                              uint8* dst_ptr, int dst_width);
201ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown2Box_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,
202ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                           uint8* dst_ptr, int dst_width);
203ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown2_Unaligned_SSE2(const uint8* src_ptr,
204ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                  ptrdiff_t src_stride,
205ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                  uint8* dst_ptr, int dst_width);
206ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown2Linear_Unaligned_SSE2(const uint8* src_ptr,
207ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                        ptrdiff_t src_stride,
208ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                        uint8* dst_ptr, int dst_width);
209ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown2Box_Unaligned_SSE2(const uint8* src_ptr,
210ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                     ptrdiff_t src_stride,
211ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                     uint8* dst_ptr, int dst_width);
212ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown4_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,
213ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                        uint8* dst_ptr, int dst_width);
214ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown4Box_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,
215ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                           uint8* dst_ptr, int dst_width);
216ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown34_SSSE3(const uint8* src_ptr, ptrdiff_t src_stride,
217ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                          uint8* dst_ptr, int dst_width);
218ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown34_1_Box_SSSE3(const uint8* src_ptr,
219ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                ptrdiff_t src_stride,
220ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                uint8* dst_ptr, int dst_width);
221ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown34_0_Box_SSSE3(const uint8* src_ptr,
222ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                ptrdiff_t src_stride,
223ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                uint8* dst_ptr, int dst_width);
224ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown38_SSSE3(const uint8* src_ptr, ptrdiff_t src_stride,
225ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                          uint8* dst_ptr, int dst_width);
226ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown38_3_Box_SSSE3(const uint8* src_ptr,
227ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                ptrdiff_t src_stride,
228ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                uint8* dst_ptr, int dst_width);
229ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown38_2_Box_SSSE3(const uint8* src_ptr,
230ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                ptrdiff_t src_stride,
231ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                uint8* dst_ptr, int dst_width);
232ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleAddRows_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,
233ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                       uint16* dst_ptr, int src_width,
234ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                       int src_height);
235ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleFilterCols_SSSE3(uint8* dst_ptr, const uint8* src_ptr,
236ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                           int dst_width, int x, int dx);
237ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleColsUp2_SSE2(uint8* dst_ptr, const uint8* src_ptr,
238ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                       int dst_width, int x, int dx);
239ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBRowDown2_SSE2(const uint8* src_argb,
240ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                            ptrdiff_t src_stride,
241ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                            uint8* dst_argb, int dst_width);
242ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBRowDown2Linear_SSE2(const uint8* src_argb,
243ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                  ptrdiff_t src_stride,
244ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                  uint8* dst_argb, int dst_width);
245ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBRowDown2Box_SSE2(const uint8* src_argb,
246ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               ptrdiff_t src_stride,
247ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               uint8* dst_argb, int dst_width);
248ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBRowDownEven_SSE2(const uint8* src_argb, ptrdiff_t src_stride,
249ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               int src_stepx,
250ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               uint8* dst_argb, int dst_width);
251ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBRowDownEvenBox_SSE2(const uint8* src_argb,
252ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                  ptrdiff_t src_stride,
253ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                  int src_stepx,
254ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                  uint8* dst_argb, int dst_width);
255ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBCols_SSE2(uint8* dst_argb, const uint8* src_argb,
256ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                        int dst_width, int x, int dx);
257ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBFilterCols_SSSE3(uint8* dst_argb, const uint8* src_argb,
258ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               int dst_width, int x, int dx);
259ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBColsUp2_SSE2(uint8* dst_argb, const uint8* src_argb,
260ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                           int dst_width, int x, int dx);
261ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Row functions.
262ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBRowDownEven_NEON(const uint8* src_argb, int src_stride,
263ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               int src_stepx,
264ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               uint8* dst_argb, int dst_width);
265ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBRowDownEvenBox_NEON(const uint8* src_argb, int src_stride,
266ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                  int src_stepx,
267ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                  uint8* dst_argb, int dst_width);
268ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBRowDown2_NEON(const uint8* src_ptr, ptrdiff_t src_stride,
269ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                            uint8* dst, int dst_width);
270ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleARGBRowDown2Box_NEON(const uint8* src_ptr, ptrdiff_t src_stride,
271ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               uint8* dst, int dst_width);
272ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
273ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// ScaleRowDown2Box also used by planar functions
274ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// NEON downscalers with interpolation.
275ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
276ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Note - not static due to reuse in convert for 444 to 420.
277ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown2_NEON(const uint8* src_ptr, ptrdiff_t src_stride,
278ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                        uint8* dst, int dst_width);
279ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
280ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown2Box_NEON(const uint8* src_ptr, ptrdiff_t src_stride,
281ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                           uint8* dst, int dst_width);
282ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
283ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown4_NEON(const uint8* src_ptr, ptrdiff_t src_stride,
284ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                        uint8* dst_ptr, int dst_width);
285ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown4Box_NEON(const uint8* src_ptr, ptrdiff_t src_stride,
286ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                           uint8* dst_ptr, int dst_width);
287ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
288ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Down scale from 4 to 3 pixels. Use the neon multilane read/write
289ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian//  to load up the every 4th pixel into a 4 different registers.
290ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Point samples 32 pixels to 24 pixels.
291ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown34_NEON(const uint8* src_ptr,
292ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                         ptrdiff_t src_stride,
293ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                         uint8* dst_ptr, int dst_width);
294ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown34_0_Box_NEON(const uint8* src_ptr,
295ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               ptrdiff_t src_stride,
296ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               uint8* dst_ptr, int dst_width);
297ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown34_1_Box_NEON(const uint8* src_ptr,
298ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               ptrdiff_t src_stride,
299ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               uint8* dst_ptr, int dst_width);
300ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
301ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// 32 -> 12
302ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown38_NEON(const uint8* src_ptr,
303ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                         ptrdiff_t src_stride,
304ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                         uint8* dst_ptr, int dst_width);
305ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// 32x3 -> 12x1
306ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown38_3_Box_NEON(const uint8* src_ptr,
307ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               ptrdiff_t src_stride,
308ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               uint8* dst_ptr, int dst_width);
309ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// 32x2 -> 12x1
310ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown38_2_Box_NEON(const uint8* src_ptr,
311ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               ptrdiff_t src_stride,
312ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               uint8* dst_ptr, int dst_width);
313ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
314ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown2_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
315ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                              uint8* dst, int dst_width);
316ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown2Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
317ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                 uint8* dst, int dst_width);
318ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown4_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
319ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                              uint8* dst, int dst_width);
320ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown4Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
321ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                 uint8* dst, int dst_width);
322ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown34_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
323ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               uint8* dst, int dst_width);
324ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown34_0_Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
325ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                     uint8* d, int dst_width);
326ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown34_1_Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
327ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                     uint8* d, int dst_width);
328ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown38_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
329ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               uint8* dst, int dst_width);
330ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown38_2_Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
331ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                     uint8* dst_ptr, int dst_width);
332ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown38_3_Box_MIPS_DSPR2(const uint8* src_ptr,
333ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                     ptrdiff_t src_stride,
334ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                     uint8* dst_ptr, int dst_width);
335ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
336ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifdef __cplusplus
337ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}  // extern "C"
338ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}  // namespace libyuv
339ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif
340ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
341ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif  // INCLUDE_LIBYUV_SCALE_ROW_H_  NOLINT
342