190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/*
2f71323e297a928af368937089d3ed71239786f86Andreas Huber *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber *
4f71323e297a928af368937089d3ed71239786f86Andreas Huber *  Use of this source code is governed by a BSD-style license
5f71323e297a928af368937089d3ed71239786f86Andreas Huber *  that can be found in the LICENSE file in the root of the source
6f71323e297a928af368937089d3ed71239786f86Andreas Huber *  tree. An additional intellectual property rights grant can be found
7f71323e297a928af368937089d3ed71239786f86Andreas Huber *  in the file PATENTS.  All contributing project authors may
8f71323e297a928af368937089d3ed71239786f86Andreas Huber *  be found in the AUTHORS file in the root of the source tree.
990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */
1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
111b362b15af34006e6a11974088a46d42b903418eJohann#include "vpx_config.h"
12ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "vp8_rtcd.h"
1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include <math.h>
1479f15823c34ae1e423108295e416213200bb280fAndreas Huber#include "vp8/common/filter.h"
1579f15823c34ae1e423108295e416213200bb280fAndreas Huber#include "bilinearfilter_arm.h"
1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_filter_block2d_bil_armv6
1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber(
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char *src_ptr,
2079f15823c34ae1e423108295e416213200bb280fAndreas Huber    unsigned char *dst_ptr,
2179f15823c34ae1e423108295e416213200bb280fAndreas Huber    unsigned int   src_pitch,
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned int   dst_pitch,
2379f15823c34ae1e423108295e416213200bb280fAndreas Huber    const short   *HFilter,
2479f15823c34ae1e423108295e416213200bb280fAndreas Huber    const short   *VFilter,
2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int            Width,
2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int            Height
2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber)
2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
2979f15823c34ae1e423108295e416213200bb280fAndreas Huber    unsigned short FData[36*16]; /* Temp data buffer used in filtering */
3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
31538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* First filter 1-D horizontally... */
3279f15823c34ae1e423108295e416213200bb280fAndreas Huber    vp8_filter_block2d_bil_first_pass_armv6(src_ptr, FData, src_pitch, Height + 1, Width, HFilter);
3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
34538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* then 1-D vertically... */
3579f15823c34ae1e423108295e416213200bb280fAndreas Huber    vp8_filter_block2d_bil_second_pass_armv6(FData, dst_ptr, dst_pitch, Height, Width, VFilter);
3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_bilinear_predict4x4_armv6
4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber(
4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char  *src_ptr,
4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int   src_pixels_per_line,
4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int  xoffset,
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int  yoffset,
4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char *dst_ptr,
4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int dst_pitch
4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber)
4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    const short  *HFilter;
5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    const short  *VFilter;
5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5279f15823c34ae1e423108295e416213200bb280fAndreas Huber    HFilter = vp8_bilinear_filters[xoffset];
5379f15823c34ae1e423108295e416213200bb280fAndreas Huber    VFilter = vp8_bilinear_filters[yoffset];
5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 4, 4);
5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_bilinear_predict8x8_armv6
5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber(
6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char  *src_ptr,
6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int  src_pixels_per_line,
6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int  xoffset,
6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int  yoffset,
6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char *dst_ptr,
6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int  dst_pitch
6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber)
6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    const short  *HFilter;
6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    const short  *VFilter;
7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7179f15823c34ae1e423108295e416213200bb280fAndreas Huber    HFilter = vp8_bilinear_filters[xoffset];
7279f15823c34ae1e423108295e416213200bb280fAndreas Huber    VFilter = vp8_bilinear_filters[yoffset];
7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 8);
7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_bilinear_predict8x4_armv6
7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber(
7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char  *src_ptr,
8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int  src_pixels_per_line,
8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int  xoffset,
8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int  yoffset,
8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char *dst_ptr,
8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int  dst_pitch
8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber)
8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    const short  *HFilter;
8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    const short  *VFilter;
8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9079f15823c34ae1e423108295e416213200bb280fAndreas Huber    HFilter = vp8_bilinear_filters[xoffset];
9179f15823c34ae1e423108295e416213200bb280fAndreas Huber    VFilter = vp8_bilinear_filters[yoffset];
9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 4);
9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_bilinear_predict16x16_armv6
9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber(
9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char  *src_ptr,
9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int  src_pixels_per_line,
10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int  xoffset,
10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int  yoffset,
10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char *dst_ptr,
10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int  dst_pitch
10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber)
10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    const short  *HFilter;
10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    const short  *VFilter;
10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10979f15823c34ae1e423108295e416213200bb280fAndreas Huber    HFilter = vp8_bilinear_filters[xoffset];
11079f15823c34ae1e423108295e416213200bb280fAndreas Huber    VFilter = vp8_bilinear_filters[yoffset];
11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 16, 16);
11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
114