1167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org/* 2167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org * 4167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org * Use of this source code is governed by a BSD-style license 5167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org * that can be found in the LICENSE file in the root of the source 6167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org * tree. An additional intellectual property rights grant can be found 7167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org * in the file PATENTS. All contributing project authors may 8167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org * be found in the AUTHORS file in the root of the source tree. 9167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org */ 10167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 11167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#include "vpx_config.h" 126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include "vp8_rtcd.h" 13167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 14167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org/* place these declarations here because we don't want to maintain them 15167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org * outside of this scope 16167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org */ 17167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgvoid idct_dequant_full_2x_neon(short *q, short *dq, 18167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned char *dst, int stride); 19167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgvoid idct_dequant_0_2x_neon(short *q, short dq, 20167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned char *dst, int stride); 21167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 22167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 23167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgvoid vp8_dequant_idct_add_y_block_neon(short *q, short *dq, 24167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned char *dst, 25167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int stride, char *eobs) 26167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org{ 27167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int i; 28167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 29167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org for (i = 0; i < 4; i++) 30167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 31167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (((short *)(eobs))[0]) 32167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 33167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (((short *)eobs)[0] & 0xfefe) 34167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org idct_dequant_full_2x_neon (q, dq, dst, stride); 35167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org else 36167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org idct_dequant_0_2x_neon (q, dq[0], dst, stride); 37167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 38167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 39167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (((short *)(eobs))[1]) 40167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 41167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (((short *)eobs)[1] & 0xfefe) 42167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org idct_dequant_full_2x_neon (q+32, dq, dst+8, stride); 43167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org else 44167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org idct_dequant_0_2x_neon (q+32, dq[0], dst+8, stride); 45167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 46167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org q += 64; 47167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst += 4*stride; 48167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org eobs += 4; 49167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 50167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org} 51167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 52167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgvoid vp8_dequant_idct_add_uv_block_neon(short *q, short *dq, 53167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned char *dstu, 54167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned char *dstv, 55167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int stride, char *eobs) 56167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org{ 57167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (((short *)(eobs))[0]) 58167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 59167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (((short *)eobs)[0] & 0xfefe) 60167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org idct_dequant_full_2x_neon (q, dq, dstu, stride); 61167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org else 62167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org idct_dequant_0_2x_neon (q, dq[0], dstu, stride); 63167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 64167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 65167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org q += 32; 66167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dstu += 4*stride; 67167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 68167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (((short *)(eobs))[1]) 69167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 70167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (((short *)eobs)[1] & 0xfefe) 71167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org idct_dequant_full_2x_neon (q, dq, dstu, stride); 72167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org else 73167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org idct_dequant_0_2x_neon (q, dq[0], dstu, stride); 74167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 75167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 76167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org q += 32; 77167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 78167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (((short *)(eobs))[2]) 79167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 80167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (((short *)eobs)[2] & 0xfefe) 81167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org idct_dequant_full_2x_neon (q, dq, dstv, stride); 82167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org else 83167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org idct_dequant_0_2x_neon (q, dq[0], dstv, stride); 84167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 85167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 86167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org q += 32; 87167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dstv += 4*stride; 88167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 89167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (((short *)(eobs))[3]) 90167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 91167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (((short *)eobs)[3] & 0xfefe) 92167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org idct_dequant_full_2x_neon (q, dq, dstv, stride); 93167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org else 94167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org idct_dequant_0_2x_neon (q, dq[0], dstv, stride); 95167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 96167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org} 97