1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/*
2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *
4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  Use of this source code is governed by a BSD-style license
5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  that can be found in the LICENSE file in the root of the source
6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  tree. An additional intellectual property rights grant can be found
7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  in the file PATENTS.  All contributing project authors may
8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  be found in the AUTHORS file in the root of the source tree.
9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org */
10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
115c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#include "vpx_config.h"
126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include "vp8_rtcd.h"
13474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include <math.h>
14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vp8/common/filter.h"
15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "bilinearfilter_arm.h"
16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_filter_block2d_bil_armv6
18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org(
19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char *src_ptr,
20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char *dst_ptr,
21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned int   src_pitch,
22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned int   dst_pitch,
23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    const short   *HFilter,
24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    const short   *VFilter,
25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int            Width,
26474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int            Height
27474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org)
28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned short FData[36*16]; /* Temp data buffer used in filtering */
30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* First filter 1-D horizontally... */
32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_filter_block2d_bil_first_pass_armv6(src_ptr, FData, src_pitch, Height + 1, Width, HFilter);
33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* then 1-D vertically... */
35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_filter_block2d_bil_second_pass_armv6(FData, dst_ptr, dst_pitch, Height, Width, VFilter);
36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_bilinear_predict4x4_armv6
40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org(
41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char  *src_ptr,
42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int   src_pixels_per_line,
43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int  xoffset,
44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int  yoffset,
45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char *dst_ptr,
46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int dst_pitch
47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org)
48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    const short  *HFilter;
50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    const short  *VFilter;
51474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    HFilter = vp8_bilinear_filters[xoffset];
53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    VFilter = vp8_bilinear_filters[yoffset];
54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 4, 4);
56474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
57474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
58474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_bilinear_predict8x8_armv6
59474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org(
60474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char  *src_ptr,
61474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int  src_pixels_per_line,
62474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int  xoffset,
63474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int  yoffset,
64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char *dst_ptr,
65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int  dst_pitch
66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org)
67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    const short  *HFilter;
69474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    const short  *VFilter;
70474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
71474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    HFilter = vp8_bilinear_filters[xoffset];
72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    VFilter = vp8_bilinear_filters[yoffset];
73474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
74474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 8);
75474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
76474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_bilinear_predict8x4_armv6
78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org(
79474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char  *src_ptr,
80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int  src_pixels_per_line,
81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int  xoffset,
82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int  yoffset,
83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char *dst_ptr,
84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int  dst_pitch
85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org)
86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
87474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    const short  *HFilter;
88474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    const short  *VFilter;
89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    HFilter = vp8_bilinear_filters[xoffset];
91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    VFilter = vp8_bilinear_filters[yoffset];
92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 4);
94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
95474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
96474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_bilinear_predict16x16_armv6
97474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org(
98474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char  *src_ptr,
99474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int  src_pixels_per_line,
100474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int  xoffset,
101474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int  yoffset,
102474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char *dst_ptr,
103474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int  dst_pitch
104474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org)
105474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
106474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    const short  *HFilter;
107474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    const short  *VFilter;
108474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
109474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    HFilter = vp8_bilinear_filters[xoffset];
110474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    VFilter = vp8_bilinear_filters[yoffset];
111474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
112474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 16, 16);
113474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
114