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 14/* place these declarations here because we don't want to maintain them 15 * outside of this scope 16 */ 17void idct_dequant_full_2x_neon(short *q, short *dq, unsigned char *dst, 18 int stride); 19void idct_dequant_0_2x_neon(short *q, short dq, unsigned char *dst, int stride); 20 21void vp8_dequant_idct_add_y_block_neon(short *q, short *dq, unsigned char *dst, 22 int stride, char *eobs) { 23 int i; 24 25 for (i = 0; i < 4; ++i) { 26 if (((short *)(eobs))[0]) { 27 if (((short *)eobs)[0] & 0xfefe) 28 idct_dequant_full_2x_neon(q, dq, dst, stride); 29 else 30 idct_dequant_0_2x_neon(q, dq[0], dst, stride); 31 } 32 33 if (((short *)(eobs))[1]) { 34 if (((short *)eobs)[1] & 0xfefe) 35 idct_dequant_full_2x_neon(q + 32, dq, dst + 8, stride); 36 else 37 idct_dequant_0_2x_neon(q + 32, dq[0], dst + 8, stride); 38 } 39 q += 64; 40 dst += 4 * stride; 41 eobs += 4; 42 } 43} 44 45void vp8_dequant_idct_add_uv_block_neon(short *q, short *dq, 46 unsigned char *dstu, 47 unsigned char *dstv, int stride, 48 char *eobs) { 49 if (((short *)(eobs))[0]) { 50 if (((short *)eobs)[0] & 0xfefe) 51 idct_dequant_full_2x_neon(q, dq, dstu, stride); 52 else 53 idct_dequant_0_2x_neon(q, dq[0], dstu, stride); 54 } 55 56 q += 32; 57 dstu += 4 * stride; 58 59 if (((short *)(eobs))[1]) { 60 if (((short *)eobs)[1] & 0xfefe) 61 idct_dequant_full_2x_neon(q, dq, dstu, stride); 62 else 63 idct_dequant_0_2x_neon(q, dq[0], dstu, stride); 64 } 65 66 q += 32; 67 68 if (((short *)(eobs))[2]) { 69 if (((short *)eobs)[2] & 0xfefe) 70 idct_dequant_full_2x_neon(q, dq, dstv, stride); 71 else 72 idct_dequant_0_2x_neon(q, dq[0], dstv, stride); 73 } 74 75 q += 32; 76 dstv += 4 * stride; 77 78 if (((short *)(eobs))[3]) { 79 if (((short *)eobs)[3] & 0xfefe) 80 idct_dequant_full_2x_neon(q, dq, dstv, stride); 81 else 82 idct_dequant_0_2x_neon(q, dq[0], dstv, stride); 83 } 84} 85