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