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
141b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_idct_dequant_0_2x_sse2
151b362b15af34006e6a11974088a46d42b903418eJohann            (short *q, short *dq ,
161b362b15af34006e6a11974088a46d42b903418eJohann             unsigned char *dst, int dst_stride);
171b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_idct_dequant_full_2x_sse2
181b362b15af34006e6a11974088a46d42b903418eJohann            (short *q, short *dq ,
191b362b15af34006e6a11974088a46d42b903418eJohann             unsigned char *dst, int dst_stride);
201b362b15af34006e6a11974088a46d42b903418eJohann
211b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_dequant_idct_add_y_block_sse2
221b362b15af34006e6a11974088a46d42b903418eJohann            (short *q, short *dq,
231b362b15af34006e6a11974088a46d42b903418eJohann             unsigned char *dst, int stride, char *eobs)
241b362b15af34006e6a11974088a46d42b903418eJohann{
251b362b15af34006e6a11974088a46d42b903418eJohann    int i;
261b362b15af34006e6a11974088a46d42b903418eJohann
271b362b15af34006e6a11974088a46d42b903418eJohann    for (i = 0; i < 4; i++)
281b362b15af34006e6a11974088a46d42b903418eJohann    {
291b362b15af34006e6a11974088a46d42b903418eJohann        if (((short *)(eobs))[0])
301b362b15af34006e6a11974088a46d42b903418eJohann        {
311b362b15af34006e6a11974088a46d42b903418eJohann            if (((short *)(eobs))[0] & 0xfefe)
321b362b15af34006e6a11974088a46d42b903418eJohann                vp8_idct_dequant_full_2x_sse2 (q, dq, dst, stride);
331b362b15af34006e6a11974088a46d42b903418eJohann            else
341b362b15af34006e6a11974088a46d42b903418eJohann                vp8_idct_dequant_0_2x_sse2 (q, dq, dst, stride);
351b362b15af34006e6a11974088a46d42b903418eJohann        }
361b362b15af34006e6a11974088a46d42b903418eJohann        if (((short *)(eobs))[1])
371b362b15af34006e6a11974088a46d42b903418eJohann        {
381b362b15af34006e6a11974088a46d42b903418eJohann            if (((short *)(eobs))[1] & 0xfefe)
391b362b15af34006e6a11974088a46d42b903418eJohann                vp8_idct_dequant_full_2x_sse2 (q+32, dq, dst+8, stride);
401b362b15af34006e6a11974088a46d42b903418eJohann            else
411b362b15af34006e6a11974088a46d42b903418eJohann                vp8_idct_dequant_0_2x_sse2 (q+32, dq, dst+8, stride);
421b362b15af34006e6a11974088a46d42b903418eJohann        }
431b362b15af34006e6a11974088a46d42b903418eJohann        q    += 64;
441b362b15af34006e6a11974088a46d42b903418eJohann        dst  += stride*4;
451b362b15af34006e6a11974088a46d42b903418eJohann        eobs += 4;
461b362b15af34006e6a11974088a46d42b903418eJohann    }
471b362b15af34006e6a11974088a46d42b903418eJohann}
481b362b15af34006e6a11974088a46d42b903418eJohann
491b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_dequant_idct_add_uv_block_sse2
501b362b15af34006e6a11974088a46d42b903418eJohann            (short *q, short *dq,
511b362b15af34006e6a11974088a46d42b903418eJohann             unsigned char *dstu, unsigned char *dstv, int stride, char *eobs)
521b362b15af34006e6a11974088a46d42b903418eJohann{
531b362b15af34006e6a11974088a46d42b903418eJohann    if (((short *)(eobs))[0])
541b362b15af34006e6a11974088a46d42b903418eJohann    {
551b362b15af34006e6a11974088a46d42b903418eJohann        if (((short *)(eobs))[0] & 0xfefe)
561b362b15af34006e6a11974088a46d42b903418eJohann            vp8_idct_dequant_full_2x_sse2 (q, dq, dstu, stride);
571b362b15af34006e6a11974088a46d42b903418eJohann        else
581b362b15af34006e6a11974088a46d42b903418eJohann            vp8_idct_dequant_0_2x_sse2 (q, dq, dstu, stride);
591b362b15af34006e6a11974088a46d42b903418eJohann    }
601b362b15af34006e6a11974088a46d42b903418eJohann    q    += 32;
611b362b15af34006e6a11974088a46d42b903418eJohann    dstu += stride*4;
621b362b15af34006e6a11974088a46d42b903418eJohann
631b362b15af34006e6a11974088a46d42b903418eJohann    if (((short *)(eobs))[1])
641b362b15af34006e6a11974088a46d42b903418eJohann    {
651b362b15af34006e6a11974088a46d42b903418eJohann        if (((short *)(eobs))[1] & 0xfefe)
661b362b15af34006e6a11974088a46d42b903418eJohann            vp8_idct_dequant_full_2x_sse2 (q, dq, dstu, stride);
671b362b15af34006e6a11974088a46d42b903418eJohann        else
681b362b15af34006e6a11974088a46d42b903418eJohann            vp8_idct_dequant_0_2x_sse2 (q, dq, dstu, stride);
691b362b15af34006e6a11974088a46d42b903418eJohann    }
701b362b15af34006e6a11974088a46d42b903418eJohann    q    += 32;
711b362b15af34006e6a11974088a46d42b903418eJohann
721b362b15af34006e6a11974088a46d42b903418eJohann    if (((short *)(eobs))[2])
731b362b15af34006e6a11974088a46d42b903418eJohann    {
741b362b15af34006e6a11974088a46d42b903418eJohann        if (((short *)(eobs))[2] & 0xfefe)
751b362b15af34006e6a11974088a46d42b903418eJohann            vp8_idct_dequant_full_2x_sse2 (q, dq, dstv, stride);
761b362b15af34006e6a11974088a46d42b903418eJohann        else
771b362b15af34006e6a11974088a46d42b903418eJohann            vp8_idct_dequant_0_2x_sse2 (q, dq, dstv, stride);
781b362b15af34006e6a11974088a46d42b903418eJohann    }
791b362b15af34006e6a11974088a46d42b903418eJohann    q    += 32;
801b362b15af34006e6a11974088a46d42b903418eJohann    dstv += stride*4;
811b362b15af34006e6a11974088a46d42b903418eJohann
821b362b15af34006e6a11974088a46d42b903418eJohann    if (((short *)(eobs))[3])
831b362b15af34006e6a11974088a46d42b903418eJohann    {
841b362b15af34006e6a11974088a46d42b903418eJohann      if (((short *)(eobs))[3] & 0xfefe)
851b362b15af34006e6a11974088a46d42b903418eJohann          vp8_idct_dequant_full_2x_sse2 (q, dq, dstv, stride);
861b362b15af34006e6a11974088a46d42b903418eJohann      else
871b362b15af34006e6a11974088a46d42b903418eJohann          vp8_idct_dequant_0_2x_sse2 (q, dq, dstv, stride);
881b362b15af34006e6a11974088a46d42b903418eJohann    }
891b362b15af34006e6a11974088a46d42b903418eJohann}
90