| Index: source/libvpx/third_party/libyuv/include/libyuv/scale_row.h
|
| ===================================================================
|
| --- source/libvpx/third_party/libyuv/include/libyuv/scale_row.h (revision 0)
|
| +++ source/libvpx/third_party/libyuv/include/libyuv/scale_row.h (revision 0)
|
| @@ -0,0 +1,341 @@
|
| +/*
|
| + * Copyright 2013 The LibYuv Project Authors. All rights reserved.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license
|
| + * that can be found in the LICENSE file in the root of the source
|
| + * tree. An additional intellectual property rights grant can be found
|
| + * in the file PATENTS. All contributing project authors may
|
| + * be found in the AUTHORS file in the root of the source tree.
|
| + */
|
| +
|
| +#ifndef INCLUDE_LIBYUV_SCALE_ROW_H_ // NOLINT
|
| +#define INCLUDE_LIBYUV_SCALE_ROW_H_
|
| +
|
| +#include "basic_types.h"
|
| +
|
| +#ifdef __cplusplus
|
| +namespace libyuv {
|
| +extern "C" {
|
| +#endif
|
| +
|
| +#if defined(__pnacl__) || defined(__CLR_VER) || defined(COVERAGE_ENABLED) || \
|
| + defined(TARGET_IPHONE_SIMULATOR)
|
| +#define LIBYUV_DISABLE_X86
|
| +#endif
|
| +
|
| +// The following are available on all x86 platforms:
|
| +#if !defined(LIBYUV_DISABLE_X86) && \
|
| + (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__))
|
| +#define HAS_SCALEROWDOWN2_SSE2
|
| +#define HAS_SCALEROWDOWN4_SSE2
|
| +#define HAS_SCALEROWDOWN34_SSSE3
|
| +#define HAS_SCALEROWDOWN38_SSSE3
|
| +#define HAS_SCALEADDROWS_SSE2
|
| +#define HAS_SCALEFILTERCOLS_SSSE3
|
| +#define HAS_SCALECOLSUP2_SSE2
|
| +#define HAS_SCALEARGBROWDOWN2_SSE2
|
| +#define HAS_SCALEARGBROWDOWNEVEN_SSE2
|
| +#define HAS_SCALEARGBCOLS_SSE2
|
| +#define HAS_SCALEARGBFILTERCOLS_SSSE3
|
| +#define HAS_SCALEARGBCOLSUP2_SSE2
|
| +#define HAS_FIXEDDIV_X86
|
| +#define HAS_FIXEDDIV1_X86
|
| +#endif
|
| +
|
| +// The following are available on Neon platforms:
|
| +#if !defined(LIBYUV_DISABLE_NEON) && !defined(__native_client__) && \
|
| + (defined(__ARM_NEON__) || defined(LIBYUV_NEON))
|
| +#define HAS_SCALEROWDOWN2_NEON
|
| +#define HAS_SCALEROWDOWN4_NEON
|
| +#define HAS_SCALEROWDOWN34_NEON
|
| +#define HAS_SCALEROWDOWN38_NEON
|
| +#define HAS_SCALEARGBROWDOWNEVEN_NEON
|
| +#define HAS_SCALEARGBROWDOWN2_NEON
|
| +#endif
|
| +
|
| +// The following are available on Mips platforms:
|
| +#if !defined(LIBYUV_DISABLE_MIPS) && !defined(__native_client__) && \
|
| + defined(__mips__) && defined(__mips_dsp) && (__mips_dsp_rev >= 2)
|
| +#define HAS_SCALEROWDOWN2_MIPS_DSPR2
|
| +#define HAS_SCALEROWDOWN4_MIPS_DSPR2
|
| +#define HAS_SCALEROWDOWN34_MIPS_DSPR2
|
| +#define HAS_SCALEROWDOWN38_MIPS_DSPR2
|
| +#endif
|
| +
|
| +// Scale ARGB vertically with bilinear interpolation.
|
| +void ScalePlaneVertical(int src_height,
|
| + int dst_width, int dst_height,
|
| + int src_stride, int dst_stride,
|
| + const uint8* src_argb, uint8* dst_argb,
|
| + int x, int y, int dy,
|
| + int bpp, enum FilterMode filtering);
|
| +
|
| +void ScalePlaneVertical_16(int src_height,
|
| + int dst_width, int dst_height,
|
| + int src_stride, int dst_stride,
|
| + const uint16* src_argb, uint16* dst_argb,
|
| + int x, int y, int dy,
|
| + int wpp, enum FilterMode filtering);
|
| +
|
| +// Simplify the filtering based on scale factors.
|
| +enum FilterMode ScaleFilterReduce(int src_width, int src_height,
|
| + int dst_width, int dst_height,
|
| + enum FilterMode filtering);
|
| +
|
| +// Divide num by div and return as 16.16 fixed point result.
|
| +int FixedDiv_C(int num, int div);
|
| +int FixedDiv_X86(int num, int div);
|
| +// Divide num - 1 by div - 1 and return as 16.16 fixed point result.
|
| +int FixedDiv1_C(int num, int div);
|
| +int FixedDiv1_X86(int num, int div);
|
| +#ifdef HAS_FIXEDDIV_X86
|
| +#define FixedDiv FixedDiv_X86
|
| +#define FixedDiv1 FixedDiv1_X86
|
| +#else
|
| +#define FixedDiv FixedDiv_C
|
| +#define FixedDiv1 FixedDiv1_C
|
| +#endif
|
| +
|
| +// Compute slope values for stepping.
|
| +void ScaleSlope(int src_width, int src_height,
|
| + int dst_width, int dst_height,
|
| + enum FilterMode filtering,
|
| + int* x, int* y, int* dx, int* dy);
|
| +
|
| +void ScaleRowDown2_C(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst, int dst_width);
|
| +void ScaleRowDown2_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
|
| + uint16* dst, int dst_width);
|
| +void ScaleRowDown2Linear_C(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst, int dst_width);
|
| +void ScaleRowDown2Linear_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
|
| + uint16* dst, int dst_width);
|
| +void ScaleRowDown2Box_C(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst, int dst_width);
|
| +void ScaleRowDown2Box_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
|
| + uint16* dst, int dst_width);
|
| +void ScaleRowDown4_C(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst, int dst_width);
|
| +void ScaleRowDown4_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
|
| + uint16* dst, int dst_width);
|
| +void ScaleRowDown4Box_C(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst, int dst_width);
|
| +void ScaleRowDown4Box_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
|
| + uint16* dst, int dst_width);
|
| +void ScaleRowDown34_C(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst, int dst_width);
|
| +void ScaleRowDown34_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
|
| + uint16* dst, int dst_width);
|
| +void ScaleRowDown34_0_Box_C(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* d, int dst_width);
|
| +void ScaleRowDown34_0_Box_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
|
| + uint16* d, int dst_width);
|
| +void ScaleRowDown34_1_Box_C(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* d, int dst_width);
|
| +void ScaleRowDown34_1_Box_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
|
| + uint16* d, int dst_width);
|
| +void ScaleCols_C(uint8* dst_ptr, const uint8* src_ptr,
|
| + int dst_width, int x, int dx);
|
| +void ScaleCols_16_C(uint16* dst_ptr, const uint16* src_ptr,
|
| + int dst_width, int x, int dx);
|
| +void ScaleColsUp2_C(uint8* dst_ptr, const uint8* src_ptr,
|
| + int dst_width, int, int);
|
| +void ScaleColsUp2_16_C(uint16* dst_ptr, const uint16* src_ptr,
|
| + int dst_width, int, int);
|
| +void ScaleFilterCols_C(uint8* dst_ptr, const uint8* src_ptr,
|
| + int dst_width, int x, int dx);
|
| +void ScaleFilterCols_16_C(uint16* dst_ptr, const uint16* src_ptr,
|
| + int dst_width, int x, int dx);
|
| +void ScaleFilterCols64_C(uint8* dst_ptr, const uint8* src_ptr,
|
| + int dst_width, int x, int dx);
|
| +void ScaleFilterCols64_16_C(uint16* dst_ptr, const uint16* src_ptr,
|
| + int dst_width, int x, int dx);
|
| +void ScaleRowDown38_C(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst, int dst_width);
|
| +void ScaleRowDown38_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
|
| + uint16* dst, int dst_width);
|
| +void ScaleRowDown38_3_Box_C(const uint8* src_ptr,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown38_3_Box_16_C(const uint16* src_ptr,
|
| + ptrdiff_t src_stride,
|
| + uint16* dst_ptr, int dst_width);
|
| +void ScaleRowDown38_2_Box_C(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown38_2_Box_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
|
| + uint16* dst_ptr, int dst_width);
|
| +void ScaleAddRows_C(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint16* dst_ptr, int src_width, int src_height);
|
| +void ScaleAddRows_16_C(const uint16* src_ptr, ptrdiff_t src_stride,
|
| + uint32* dst_ptr, int src_width, int src_height);
|
| +void ScaleARGBRowDown2_C(const uint8* src_argb,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_argb, int dst_width);
|
| +void ScaleARGBRowDown2Linear_C(const uint8* src_argb,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_argb, int dst_width);
|
| +void ScaleARGBRowDown2Box_C(const uint8* src_argb, ptrdiff_t src_stride,
|
| + uint8* dst_argb, int dst_width);
|
| +void ScaleARGBRowDownEven_C(const uint8* src_argb, ptrdiff_t src_stride,
|
| + int src_stepx,
|
| + uint8* dst_argb, int dst_width);
|
| +void ScaleARGBRowDownEvenBox_C(const uint8* src_argb,
|
| + ptrdiff_t src_stride,
|
| + int src_stepx,
|
| + uint8* dst_argb, int dst_width);
|
| +void ScaleARGBCols_C(uint8* dst_argb, const uint8* src_argb,
|
| + int dst_width, int x, int dx);
|
| +void ScaleARGBCols64_C(uint8* dst_argb, const uint8* src_argb,
|
| + int dst_width, int x, int dx);
|
| +void ScaleARGBColsUp2_C(uint8* dst_argb, const uint8* src_argb,
|
| + int dst_width, int, int);
|
| +void ScaleARGBFilterCols_C(uint8* dst_argb, const uint8* src_argb,
|
| + int dst_width, int x, int dx);
|
| +void ScaleARGBFilterCols64_C(uint8* dst_argb, const uint8* src_argb,
|
| + int dst_width, int x, int dx);
|
| +
|
| +void ScaleRowDown2_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown2Linear_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown2Box_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown2_Unaligned_SSE2(const uint8* src_ptr,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown2Linear_Unaligned_SSE2(const uint8* src_ptr,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown2Box_Unaligned_SSE2(const uint8* src_ptr,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown4_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown4Box_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown34_SSSE3(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown34_1_Box_SSSE3(const uint8* src_ptr,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown34_0_Box_SSSE3(const uint8* src_ptr,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown38_SSSE3(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown38_3_Box_SSSE3(const uint8* src_ptr,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown38_2_Box_SSSE3(const uint8* src_ptr,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleAddRows_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint16* dst_ptr, int src_width,
|
| + int src_height);
|
| +void ScaleFilterCols_SSSE3(uint8* dst_ptr, const uint8* src_ptr,
|
| + int dst_width, int x, int dx);
|
| +void ScaleColsUp2_SSE2(uint8* dst_ptr, const uint8* src_ptr,
|
| + int dst_width, int x, int dx);
|
| +void ScaleARGBRowDown2_SSE2(const uint8* src_argb,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_argb, int dst_width);
|
| +void ScaleARGBRowDown2Linear_SSE2(const uint8* src_argb,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_argb, int dst_width);
|
| +void ScaleARGBRowDown2Box_SSE2(const uint8* src_argb,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_argb, int dst_width);
|
| +void ScaleARGBRowDownEven_SSE2(const uint8* src_argb, ptrdiff_t src_stride,
|
| + int src_stepx,
|
| + uint8* dst_argb, int dst_width);
|
| +void ScaleARGBRowDownEvenBox_SSE2(const uint8* src_argb,
|
| + ptrdiff_t src_stride,
|
| + int src_stepx,
|
| + uint8* dst_argb, int dst_width);
|
| +void ScaleARGBCols_SSE2(uint8* dst_argb, const uint8* src_argb,
|
| + int dst_width, int x, int dx);
|
| +void ScaleARGBFilterCols_SSSE3(uint8* dst_argb, const uint8* src_argb,
|
| + int dst_width, int x, int dx);
|
| +void ScaleARGBColsUp2_SSE2(uint8* dst_argb, const uint8* src_argb,
|
| + int dst_width, int x, int dx);
|
| +// Row functions.
|
| +void ScaleARGBRowDownEven_NEON(const uint8* src_argb, int src_stride,
|
| + int src_stepx,
|
| + uint8* dst_argb, int dst_width);
|
| +void ScaleARGBRowDownEvenBox_NEON(const uint8* src_argb, int src_stride,
|
| + int src_stepx,
|
| + uint8* dst_argb, int dst_width);
|
| +void ScaleARGBRowDown2_NEON(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst, int dst_width);
|
| +void ScaleARGBRowDown2Box_NEON(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst, int dst_width);
|
| +
|
| +// ScaleRowDown2Box also used by planar functions
|
| +// NEON downscalers with interpolation.
|
| +
|
| +// Note - not static due to reuse in convert for 444 to 420.
|
| +void ScaleRowDown2_NEON(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst, int dst_width);
|
| +
|
| +void ScaleRowDown2Box_NEON(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst, int dst_width);
|
| +
|
| +void ScaleRowDown4_NEON(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown4Box_NEON(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +
|
| +// Down scale from 4 to 3 pixels. Use the neon multilane read/write
|
| +// to load up the every 4th pixel into a 4 different registers.
|
| +// Point samples 32 pixels to 24 pixels.
|
| +void ScaleRowDown34_NEON(const uint8* src_ptr,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown34_0_Box_NEON(const uint8* src_ptr,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown34_1_Box_NEON(const uint8* src_ptr,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +
|
| +// 32 -> 12
|
| +void ScaleRowDown38_NEON(const uint8* src_ptr,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +// 32x3 -> 12x1
|
| +void ScaleRowDown38_3_Box_NEON(const uint8* src_ptr,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +// 32x2 -> 12x1
|
| +void ScaleRowDown38_2_Box_NEON(const uint8* src_ptr,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +
|
| +void ScaleRowDown2_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst, int dst_width);
|
| +void ScaleRowDown2Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst, int dst_width);
|
| +void ScaleRowDown4_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst, int dst_width);
|
| +void ScaleRowDown4Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst, int dst_width);
|
| +void ScaleRowDown34_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst, int dst_width);
|
| +void ScaleRowDown34_0_Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* d, int dst_width);
|
| +void ScaleRowDown34_1_Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* d, int dst_width);
|
| +void ScaleRowDown38_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst, int dst_width);
|
| +void ScaleRowDown38_2_Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +void ScaleRowDown38_3_Box_MIPS_DSPR2(const uint8* src_ptr,
|
| + ptrdiff_t src_stride,
|
| + uint8* dst_ptr, int dst_width);
|
| +
|
| +#ifdef __cplusplus
|
| +} // extern "C"
|
| +} // namespace libyuv
|
| +#endif
|
| +
|
| +#endif // INCLUDE_LIBYUV_SCALE_ROW_H_ NOLINT
|
|
|