11b362b15af34006e6a11974088a46d42b903418eJohann/*
21b362b15af34006e6a11974088a46d42b903418eJohann *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
31b362b15af34006e6a11974088a46d42b903418eJohann *
41b362b15af34006e6a11974088a46d42b903418eJohann *  Use of this source code is governed by a BSD-style license
51b362b15af34006e6a11974088a46d42b903418eJohann *  that can be found in the LICENSE file in the root of the source
61b362b15af34006e6a11974088a46d42b903418eJohann *  tree. An additional intellectual property rights grant can be found
71b362b15af34006e6a11974088a46d42b903418eJohann *  in the file PATENTS.  All contributing project authors may
81b362b15af34006e6a11974088a46d42b903418eJohann *  be found in the AUTHORS file in the root of the source tree.
91b362b15af34006e6a11974088a46d42b903418eJohann */
101b362b15af34006e6a11974088a46d42b903418eJohann
111b362b15af34006e6a11974088a46d42b903418eJohann#include "vpx_config.h"
12ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "vp8_rtcd.h"
131b362b15af34006e6a11974088a46d42b903418eJohann
141b362b15af34006e6a11974088a46d42b903418eJohann/* place these declarations here because we don't want to maintain them
151b362b15af34006e6a11974088a46d42b903418eJohann * outside of this scope
161b362b15af34006e6a11974088a46d42b903418eJohann */
171b362b15af34006e6a11974088a46d42b903418eJohannvoid idct_dequant_full_2x_neon(short *q, short *dq,
181b362b15af34006e6a11974088a46d42b903418eJohann                               unsigned char *dst, int stride);
191b362b15af34006e6a11974088a46d42b903418eJohannvoid idct_dequant_0_2x_neon(short *q, short dq,
201b362b15af34006e6a11974088a46d42b903418eJohann                            unsigned char *dst, int stride);
211b362b15af34006e6a11974088a46d42b903418eJohann
221b362b15af34006e6a11974088a46d42b903418eJohann
231b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_dequant_idct_add_y_block_neon(short *q, short *dq,
241b362b15af34006e6a11974088a46d42b903418eJohann                                       unsigned char *dst,
251b362b15af34006e6a11974088a46d42b903418eJohann                                       int stride, char *eobs)
261b362b15af34006e6a11974088a46d42b903418eJohann{
271b362b15af34006e6a11974088a46d42b903418eJohann    int i;
281b362b15af34006e6a11974088a46d42b903418eJohann
291b362b15af34006e6a11974088a46d42b903418eJohann    for (i = 0; i < 4; i++)
301b362b15af34006e6a11974088a46d42b903418eJohann    {
311b362b15af34006e6a11974088a46d42b903418eJohann        if (((short *)(eobs))[0])
321b362b15af34006e6a11974088a46d42b903418eJohann        {
331b362b15af34006e6a11974088a46d42b903418eJohann            if (((short *)eobs)[0] & 0xfefe)
341b362b15af34006e6a11974088a46d42b903418eJohann                idct_dequant_full_2x_neon (q, dq, dst, stride);
351b362b15af34006e6a11974088a46d42b903418eJohann            else
361b362b15af34006e6a11974088a46d42b903418eJohann                idct_dequant_0_2x_neon (q, dq[0], dst, stride);
371b362b15af34006e6a11974088a46d42b903418eJohann        }
381b362b15af34006e6a11974088a46d42b903418eJohann
391b362b15af34006e6a11974088a46d42b903418eJohann        if (((short *)(eobs))[1])
401b362b15af34006e6a11974088a46d42b903418eJohann        {
411b362b15af34006e6a11974088a46d42b903418eJohann            if (((short *)eobs)[1] & 0xfefe)
421b362b15af34006e6a11974088a46d42b903418eJohann                idct_dequant_full_2x_neon (q+32, dq, dst+8, stride);
431b362b15af34006e6a11974088a46d42b903418eJohann            else
441b362b15af34006e6a11974088a46d42b903418eJohann                idct_dequant_0_2x_neon (q+32, dq[0], dst+8, stride);
451b362b15af34006e6a11974088a46d42b903418eJohann        }
461b362b15af34006e6a11974088a46d42b903418eJohann        q    += 64;
471b362b15af34006e6a11974088a46d42b903418eJohann        dst  += 4*stride;
481b362b15af34006e6a11974088a46d42b903418eJohann        eobs += 4;
491b362b15af34006e6a11974088a46d42b903418eJohann    }
501b362b15af34006e6a11974088a46d42b903418eJohann}
511b362b15af34006e6a11974088a46d42b903418eJohann
521b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_dequant_idct_add_uv_block_neon(short *q, short *dq,
531b362b15af34006e6a11974088a46d42b903418eJohann                                        unsigned char *dstu,
541b362b15af34006e6a11974088a46d42b903418eJohann                                        unsigned char *dstv,
551b362b15af34006e6a11974088a46d42b903418eJohann                                        int stride, char *eobs)
561b362b15af34006e6a11974088a46d42b903418eJohann{
571b362b15af34006e6a11974088a46d42b903418eJohann    if (((short *)(eobs))[0])
581b362b15af34006e6a11974088a46d42b903418eJohann    {
591b362b15af34006e6a11974088a46d42b903418eJohann        if (((short *)eobs)[0] & 0xfefe)
601b362b15af34006e6a11974088a46d42b903418eJohann            idct_dequant_full_2x_neon (q, dq, dstu, stride);
611b362b15af34006e6a11974088a46d42b903418eJohann        else
621b362b15af34006e6a11974088a46d42b903418eJohann            idct_dequant_0_2x_neon (q, dq[0], dstu, stride);
631b362b15af34006e6a11974088a46d42b903418eJohann    }
641b362b15af34006e6a11974088a46d42b903418eJohann
651b362b15af34006e6a11974088a46d42b903418eJohann    q    += 32;
661b362b15af34006e6a11974088a46d42b903418eJohann    dstu += 4*stride;
671b362b15af34006e6a11974088a46d42b903418eJohann
681b362b15af34006e6a11974088a46d42b903418eJohann    if (((short *)(eobs))[1])
691b362b15af34006e6a11974088a46d42b903418eJohann    {
701b362b15af34006e6a11974088a46d42b903418eJohann        if (((short *)eobs)[1] & 0xfefe)
711b362b15af34006e6a11974088a46d42b903418eJohann            idct_dequant_full_2x_neon (q, dq, dstu, stride);
721b362b15af34006e6a11974088a46d42b903418eJohann        else
731b362b15af34006e6a11974088a46d42b903418eJohann            idct_dequant_0_2x_neon (q, dq[0], dstu, stride);
741b362b15af34006e6a11974088a46d42b903418eJohann    }
751b362b15af34006e6a11974088a46d42b903418eJohann
761b362b15af34006e6a11974088a46d42b903418eJohann    q += 32;
771b362b15af34006e6a11974088a46d42b903418eJohann
781b362b15af34006e6a11974088a46d42b903418eJohann    if (((short *)(eobs))[2])
791b362b15af34006e6a11974088a46d42b903418eJohann    {
801b362b15af34006e6a11974088a46d42b903418eJohann        if (((short *)eobs)[2] & 0xfefe)
811b362b15af34006e6a11974088a46d42b903418eJohann            idct_dequant_full_2x_neon (q, dq, dstv, stride);
821b362b15af34006e6a11974088a46d42b903418eJohann        else
831b362b15af34006e6a11974088a46d42b903418eJohann            idct_dequant_0_2x_neon (q, dq[0], dstv, stride);
841b362b15af34006e6a11974088a46d42b903418eJohann    }
851b362b15af34006e6a11974088a46d42b903418eJohann
861b362b15af34006e6a11974088a46d42b903418eJohann    q    += 32;
871b362b15af34006e6a11974088a46d42b903418eJohann    dstv += 4*stride;
881b362b15af34006e6a11974088a46d42b903418eJohann
891b362b15af34006e6a11974088a46d42b903418eJohann    if (((short *)(eobs))[3])
901b362b15af34006e6a11974088a46d42b903418eJohann    {
911b362b15af34006e6a11974088a46d42b903418eJohann        if (((short *)eobs)[3] & 0xfefe)
921b362b15af34006e6a11974088a46d42b903418eJohann            idct_dequant_full_2x_neon (q, dq, dstv, stride);
931b362b15af34006e6a11974088a46d42b903418eJohann        else
941b362b15af34006e6a11974088a46d42b903418eJohann            idct_dequant_0_2x_neon (q, dq[0], dstv, stride);
951b362b15af34006e6a11974088a46d42b903418eJohann    }
961b362b15af34006e6a11974088a46d42b903418eJohann}
97