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 void vp8_idct_dequant_0_2x_sse2
15             (short *q, short *dq ,
16              unsigned char *dst, int dst_stride);
17 void vp8_idct_dequant_full_2x_sse2
18             (short *q, short *dq ,
19              unsigned char *dst, int dst_stride);
20 
vp8_dequant_idct_add_y_block_sse2(short * q,short * dq,unsigned char * dst,int stride,char * eobs)21 void vp8_dequant_idct_add_y_block_sse2
22             (short *q, short *dq,
23              unsigned char *dst, int stride, char *eobs)
24 {
25     int i;
26 
27     for (i = 0; i < 4; i++)
28     {
29         if (((short *)(eobs))[0])
30         {
31             if (((short *)(eobs))[0] & 0xfefe)
32                 vp8_idct_dequant_full_2x_sse2 (q, dq, dst, stride);
33             else
34                 vp8_idct_dequant_0_2x_sse2 (q, dq, dst, stride);
35         }
36         if (((short *)(eobs))[1])
37         {
38             if (((short *)(eobs))[1] & 0xfefe)
39                 vp8_idct_dequant_full_2x_sse2 (q+32, dq, dst+8, stride);
40             else
41                 vp8_idct_dequant_0_2x_sse2 (q+32, dq, dst+8, stride);
42         }
43         q    += 64;
44         dst  += stride*4;
45         eobs += 4;
46     }
47 }
48 
vp8_dequant_idct_add_uv_block_sse2(short * q,short * dq,unsigned char * dstu,unsigned char * dstv,int stride,char * eobs)49 void vp8_dequant_idct_add_uv_block_sse2
50             (short *q, short *dq,
51              unsigned char *dstu, unsigned char *dstv, int stride, char *eobs)
52 {
53     if (((short *)(eobs))[0])
54     {
55         if (((short *)(eobs))[0] & 0xfefe)
56             vp8_idct_dequant_full_2x_sse2 (q, dq, dstu, stride);
57         else
58             vp8_idct_dequant_0_2x_sse2 (q, dq, dstu, stride);
59     }
60     q    += 32;
61     dstu += stride*4;
62 
63     if (((short *)(eobs))[1])
64     {
65         if (((short *)(eobs))[1] & 0xfefe)
66             vp8_idct_dequant_full_2x_sse2 (q, dq, dstu, stride);
67         else
68             vp8_idct_dequant_0_2x_sse2 (q, dq, dstu, stride);
69     }
70     q    += 32;
71 
72     if (((short *)(eobs))[2])
73     {
74         if (((short *)(eobs))[2] & 0xfefe)
75             vp8_idct_dequant_full_2x_sse2 (q, dq, dstv, stride);
76         else
77             vp8_idct_dequant_0_2x_sse2 (q, dq, dstv, stride);
78     }
79     q    += 32;
80     dstv += stride*4;
81 
82     if (((short *)(eobs))[3])
83     {
84       if (((short *)(eobs))[3] & 0xfefe)
85           vp8_idct_dequant_full_2x_sse2 (q, dq, dstv, stride);
86       else
87           vp8_idct_dequant_0_2x_sse2 (q, dq, dstv, stride);
88     }
89 }
90