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 1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "vpx_ports/config.h" 1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include <math.h> 1479f15823c34ae1e423108295e416213200bb280fAndreas Huber#include "vp8/common/loopfilter.h" 1579f15823c34ae1e423108295e416213200bb280fAndreas Huber#include "vp8/common/onyxc_int.h" 1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_loopfilter(vp8_loop_filter_horizontal_edge_armv6); 1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_loopfilter(vp8_loop_filter_vertical_edge_armv6); 1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_loopfilter(vp8_mbloop_filter_horizontal_edge_armv6); 2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_loopfilter(vp8_mbloop_filter_vertical_edge_armv6); 2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_loopfilter(vp8_loop_filter_simple_horizontal_edge_armv6); 2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_loopfilter(vp8_loop_filter_simple_vertical_edge_armv6); 2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_loopfilter(vp8_loop_filter_horizontal_edge_y_neon); 2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_loopfilter(vp8_loop_filter_vertical_edge_y_neon); 2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_loopfilter(vp8_mbloop_filter_horizontal_edge_y_neon); 2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_loopfilter(vp8_mbloop_filter_vertical_edge_y_neon); 2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_loopfilter(vp8_loop_filter_simple_horizontal_edge_neon); 2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_loopfilter(vp8_loop_filter_simple_vertical_edge_neon); 3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern loop_filter_uvfunction vp8_loop_filter_horizontal_edge_uv_neon; 3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern loop_filter_uvfunction vp8_loop_filter_vertical_edge_uv_neon; 3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern loop_filter_uvfunction vp8_mbloop_filter_horizontal_edge_uv_neon; 3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern loop_filter_uvfunction vp8_mbloop_filter_vertical_edge_uv_neon; 3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if HAVE_ARMV6 38538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/*ARMV6 loopfilter functions*/ 39538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/* Horizontal MB filtering */ 4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_loop_filter_mbh_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, 4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) 4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) simpler_lpf; 4479f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_mbloop_filter_horizontal_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2); 4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (u_ptr) 4779f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_mbloop_filter_horizontal_edge_armv6(u_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, 1); 4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (v_ptr) 5079f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_mbloop_filter_horizontal_edge_armv6(v_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, 1); 5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_loop_filter_mbhs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, 5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) 5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) u_ptr; 5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) v_ptr; 5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) uv_stride; 5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) simpler_lpf; 6079f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_loop_filter_simple_horizontal_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2); 6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 63538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/* Vertical MB Filtering */ 6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_loop_filter_mbv_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, 6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) 6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) simpler_lpf; 6879f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_mbloop_filter_vertical_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2); 6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (u_ptr) 7179f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_mbloop_filter_vertical_edge_armv6(u_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, 1); 7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (v_ptr) 7479f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_mbloop_filter_vertical_edge_armv6(v_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, 1); 7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_loop_filter_mbvs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, 7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) 7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) u_ptr; 8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) v_ptr; 8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) uv_stride; 8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) simpler_lpf; 8479f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_loop_filter_simple_vertical_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2); 8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 87538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/* Horizontal B Filtering */ 8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_loop_filter_bh_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, 8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) 9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) simpler_lpf; 9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_horizontal_edge_armv6(y_ptr + 4 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_horizontal_edge_armv6(y_ptr + 8 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_horizontal_edge_armv6(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (u_ptr) 9779f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_loop_filter_horizontal_edge_armv6(u_ptr + 4 * uv_stride, uv_stride, lfi->flim, lfi->lim, lfi->thr, 1); 9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (v_ptr) 10079f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_loop_filter_horizontal_edge_armv6(v_ptr + 4 * uv_stride, uv_stride, lfi->flim, lfi->lim, lfi->thr, 1); 10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_loop_filter_bhs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, 10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) 10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) u_ptr; 10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) v_ptr; 10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) uv_stride; 10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) simpler_lpf; 11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_simple_horizontal_edge_armv6(y_ptr + 4 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_simple_horizontal_edge_armv6(y_ptr + 8 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_simple_horizontal_edge_armv6(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 115538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/* Vertical B Filtering */ 11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_loop_filter_bv_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, 11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) 11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) simpler_lpf; 12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_vertical_edge_armv6(y_ptr + 4, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_vertical_edge_armv6(y_ptr + 8, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_vertical_edge_armv6(y_ptr + 12, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (u_ptr) 12579f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_loop_filter_vertical_edge_armv6(u_ptr + 4, uv_stride, lfi->flim, lfi->lim, lfi->thr, 1); 12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (v_ptr) 12879f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_loop_filter_vertical_edge_armv6(v_ptr + 4, uv_stride, lfi->flim, lfi->lim, lfi->thr, 1); 12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_loop_filter_bvs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, 13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) 13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) u_ptr; 13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) v_ptr; 13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) uv_stride; 13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) simpler_lpf; 13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_simple_vertical_edge_armv6(y_ptr + 4, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_simple_vertical_edge_armv6(y_ptr + 8, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_simple_vertical_edge_armv6(y_ptr + 12, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if HAVE_ARMV7 145538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/* NEON loopfilter functions */ 146538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/* Horizontal MB filtering */ 14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_loop_filter_mbh_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, 14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) 14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) simpler_lpf; 15179f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_mbloop_filter_horizontal_edge_y_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2); 15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (u_ptr) 15479f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_mbloop_filter_horizontal_edge_uv_neon(u_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, v_ptr); 15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 15690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 15790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_loop_filter_mbhs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, 15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) 15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) u_ptr; 16190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) v_ptr; 16290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) uv_stride; 16390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) simpler_lpf; 16479f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_loop_filter_simple_horizontal_edge_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2); 16590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 167538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/* Vertical MB Filtering */ 16890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_loop_filter_mbv_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, 16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) 17090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 17190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) simpler_lpf; 17279f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_mbloop_filter_vertical_edge_y_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2); 17390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 17490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (u_ptr) 17579f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_mbloop_filter_vertical_edge_uv_neon(u_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, v_ptr); 17690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 17790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 17890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_loop_filter_mbvs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, 17990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) 18090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 18190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) u_ptr; 18290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) v_ptr; 18390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) uv_stride; 18490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) simpler_lpf; 18579f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_loop_filter_simple_vertical_edge_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2); 18690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 18790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 188538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/* Horizontal B Filtering */ 18990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_loop_filter_bh_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, 19090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) 19190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 19290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) simpler_lpf; 19390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_horizontal_edge_y_neon(y_ptr + 4 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 19490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_horizontal_edge_y_neon(y_ptr + 8 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 19590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_horizontal_edge_y_neon(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 19690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 19790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (u_ptr) 19879f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_loop_filter_horizontal_edge_uv_neon(u_ptr + 4 * uv_stride, uv_stride, lfi->flim, lfi->lim, lfi->thr, v_ptr + 4 * uv_stride); 19990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 20090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 20190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_loop_filter_bhs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, 20290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) 20390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 20490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) u_ptr; 20590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) v_ptr; 20690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) uv_stride; 20790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) simpler_lpf; 20890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_simple_horizontal_edge_neon(y_ptr + 4 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 20990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_simple_horizontal_edge_neon(y_ptr + 8 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 21090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_simple_horizontal_edge_neon(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 21190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 21290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 213538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/* Vertical B Filtering */ 21490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_loop_filter_bv_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, 21590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) 21690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 21790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) simpler_lpf; 21890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_vertical_edge_y_neon(y_ptr + 4, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 21990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_vertical_edge_y_neon(y_ptr + 8, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 22090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_vertical_edge_y_neon(y_ptr + 12, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 22190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 22290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (u_ptr) 22379f15823c34ae1e423108295e416213200bb280fAndreas Huber vp8_loop_filter_vertical_edge_uv_neon(u_ptr + 4, uv_stride, lfi->flim, lfi->lim, lfi->thr, v_ptr + 4); 22490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 22590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 22690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_loop_filter_bvs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, 22790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) 22890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 22990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) u_ptr; 23090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) v_ptr; 23190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) uv_stride; 23290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber (void) simpler_lpf; 23390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_simple_vertical_edge_neon(y_ptr + 4, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 23490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_simple_vertical_edge_neon(y_ptr + 8, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 23590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_loop_filter_simple_vertical_edge_neon(y_ptr + 12, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); 23690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 23790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 238