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