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