1 /*
2  *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #include "vpx_config.h"
12 #include "vp8_rtcd.h"
13 #include <math.h>
14 #include "vp8/common/filter.h"
15 #include "bilinearfilter_arm.h"
16 
vp8_filter_block2d_bil_armv6(unsigned char * src_ptr,unsigned char * dst_ptr,unsigned int src_pitch,unsigned int dst_pitch,const short * HFilter,const short * VFilter,int Width,int Height)17 void vp8_filter_block2d_bil_armv6
18 (
19     unsigned char *src_ptr,
20     unsigned char *dst_ptr,
21     unsigned int   src_pitch,
22     unsigned int   dst_pitch,
23     const short   *HFilter,
24     const short   *VFilter,
25     int            Width,
26     int            Height
27 )
28 {
29     unsigned short FData[36*16]; /* Temp data buffer used in filtering */
30 
31     /* First filter 1-D horizontally... */
32     vp8_filter_block2d_bil_first_pass_armv6(src_ptr, FData, src_pitch, Height + 1, Width, HFilter);
33 
34     /* then 1-D vertically... */
35     vp8_filter_block2d_bil_second_pass_armv6(FData, dst_ptr, dst_pitch, Height, Width, VFilter);
36 }
37 
38 
vp8_bilinear_predict4x4_armv6(unsigned char * src_ptr,int src_pixels_per_line,int xoffset,int yoffset,unsigned char * dst_ptr,int dst_pitch)39 void vp8_bilinear_predict4x4_armv6
40 (
41     unsigned char  *src_ptr,
42     int   src_pixels_per_line,
43     int  xoffset,
44     int  yoffset,
45     unsigned char *dst_ptr,
46     int dst_pitch
47 )
48 {
49     const short  *HFilter;
50     const short  *VFilter;
51 
52     HFilter = vp8_bilinear_filters[xoffset];
53     VFilter = vp8_bilinear_filters[yoffset];
54 
55     vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 4, 4);
56 }
57 
vp8_bilinear_predict8x8_armv6(unsigned char * src_ptr,int src_pixels_per_line,int xoffset,int yoffset,unsigned char * dst_ptr,int dst_pitch)58 void vp8_bilinear_predict8x8_armv6
59 (
60     unsigned char  *src_ptr,
61     int  src_pixels_per_line,
62     int  xoffset,
63     int  yoffset,
64     unsigned char *dst_ptr,
65     int  dst_pitch
66 )
67 {
68     const short  *HFilter;
69     const short  *VFilter;
70 
71     HFilter = vp8_bilinear_filters[xoffset];
72     VFilter = vp8_bilinear_filters[yoffset];
73 
74     vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 8);
75 }
76 
vp8_bilinear_predict8x4_armv6(unsigned char * src_ptr,int src_pixels_per_line,int xoffset,int yoffset,unsigned char * dst_ptr,int dst_pitch)77 void vp8_bilinear_predict8x4_armv6
78 (
79     unsigned char  *src_ptr,
80     int  src_pixels_per_line,
81     int  xoffset,
82     int  yoffset,
83     unsigned char *dst_ptr,
84     int  dst_pitch
85 )
86 {
87     const short  *HFilter;
88     const short  *VFilter;
89 
90     HFilter = vp8_bilinear_filters[xoffset];
91     VFilter = vp8_bilinear_filters[yoffset];
92 
93     vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 4);
94 }
95 
vp8_bilinear_predict16x16_armv6(unsigned char * src_ptr,int src_pixels_per_line,int xoffset,int yoffset,unsigned char * dst_ptr,int dst_pitch)96 void vp8_bilinear_predict16x16_armv6
97 (
98     unsigned char  *src_ptr,
99     int  src_pixels_per_line,
100     int  xoffset,
101     int  yoffset,
102     unsigned char *dst_ptr,
103     int  dst_pitch
104 )
105 {
106     const short  *HFilter;
107     const short  *VFilter;
108 
109     HFilter = vp8_bilinear_filters[xoffset];
110     VFilter = vp8_bilinear_filters[yoffset];
111 
112     vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 16, 16);
113 }
114