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