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