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_ports/config.h"
12 #include "idct.h"
13 #include "dequantize.h"
14
vp8_dequant_dc_idct_add_y_block_v6(short * q,short * dq,unsigned char * pre,unsigned char * dst,int stride,char * eobs,short * dc)15 void vp8_dequant_dc_idct_add_y_block_v6
16 (short *q, short *dq, unsigned char *pre,
17 unsigned char *dst, int stride, char *eobs, short *dc)
18 {
19 int i;
20
21 for (i = 0; i < 4; i++)
22 {
23 if (eobs[0] > 1)
24 vp8_dequant_dc_idct_add_v6 (q, dq, pre, dst, 16, stride, dc[0]);
25 else
26 vp8_dc_only_idct_add_v6 (dc[0], pre, dst, 16, stride);
27
28 if (eobs[1] > 1)
29 vp8_dequant_dc_idct_add_v6 (q+16, dq, pre+4, dst+4, 16, stride, dc[1]);
30 else
31 vp8_dc_only_idct_add_v6 (dc[1], pre+4, dst+4, 16, stride);
32
33 if (eobs[2] > 1)
34 vp8_dequant_dc_idct_add_v6 (q+32, dq, pre+8, dst+8, 16, stride, dc[2]);
35 else
36 vp8_dc_only_idct_add_v6 (dc[2], pre+8, dst+8, 16, stride);
37
38 if (eobs[3] > 1)
39 vp8_dequant_dc_idct_add_v6 (q+48, dq, pre+12, dst+12, 16, stride, dc[3]);
40 else
41 vp8_dc_only_idct_add_v6 (dc[3], pre+12, dst+12, 16, stride);
42
43 q += 64;
44 dc += 4;
45 pre += 64;
46 dst += 4*stride;
47 eobs += 4;
48 }
49 }
50
vp8_dequant_idct_add_y_block_v6(short * q,short * dq,unsigned char * pre,unsigned char * dst,int stride,char * eobs)51 void vp8_dequant_idct_add_y_block_v6
52 (short *q, short *dq, unsigned char *pre,
53 unsigned char *dst, int stride, char *eobs)
54 {
55 int i;
56
57 for (i = 0; i < 4; i++)
58 {
59 if (eobs[0] > 1)
60 vp8_dequant_idct_add_v6 (q, dq, pre, dst, 16, stride);
61 else
62 {
63 vp8_dc_only_idct_add_v6 (q[0]*dq[0], pre, dst, 16, stride);
64 ((int *)q)[0] = 0;
65 }
66
67 if (eobs[1] > 1)
68 vp8_dequant_idct_add_v6 (q+16, dq, pre+4, dst+4, 16, stride);
69 else
70 {
71 vp8_dc_only_idct_add_v6 (q[16]*dq[0], pre+4, dst+4, 16, stride);
72 ((int *)(q+16))[0] = 0;
73 }
74
75 if (eobs[2] > 1)
76 vp8_dequant_idct_add_v6 (q+32, dq, pre+8, dst+8, 16, stride);
77 else
78 {
79 vp8_dc_only_idct_add_v6 (q[32]*dq[0], pre+8, dst+8, 16, stride);
80 ((int *)(q+32))[0] = 0;
81 }
82
83 if (eobs[3] > 1)
84 vp8_dequant_idct_add_v6 (q+48, dq, pre+12, dst+12, 16, stride);
85 else
86 {
87 vp8_dc_only_idct_add_v6 (q[48]*dq[0], pre+12, dst+12, 16, stride);
88 ((int *)(q+48))[0] = 0;
89 }
90
91 q += 64;
92 pre += 64;
93 dst += 4*stride;
94 eobs += 4;
95 }
96 }
97
vp8_dequant_idct_add_uv_block_v6(short * q,short * dq,unsigned char * pre,unsigned char * dstu,unsigned char * dstv,int stride,char * eobs)98 void vp8_dequant_idct_add_uv_block_v6
99 (short *q, short *dq, unsigned char *pre,
100 unsigned char *dstu, unsigned char *dstv, int stride, char *eobs)
101 {
102 int i;
103
104 for (i = 0; i < 2; i++)
105 {
106 if (eobs[0] > 1)
107 vp8_dequant_idct_add_v6 (q, dq, pre, dstu, 8, stride);
108 else
109 {
110 vp8_dc_only_idct_add_v6 (q[0]*dq[0], pre, dstu, 8, stride);
111 ((int *)q)[0] = 0;
112 }
113
114 if (eobs[1] > 1)
115 vp8_dequant_idct_add_v6 (q+16, dq, pre+4, dstu+4, 8, stride);
116 else
117 {
118 vp8_dc_only_idct_add_v6 (q[16]*dq[0], pre+4, dstu+4, 8, stride);
119 ((int *)(q+16))[0] = 0;
120 }
121
122 q += 32;
123 pre += 32;
124 dstu += 4*stride;
125 eobs += 2;
126 }
127
128 for (i = 0; i < 2; i++)
129 {
130 if (eobs[0] > 1)
131 vp8_dequant_idct_add_v6 (q, dq, pre, dstv, 8, stride);
132 else
133 {
134 vp8_dc_only_idct_add_v6 (q[0]*dq[0], pre, dstv, 8, stride);
135 ((int *)q)[0] = 0;
136 }
137
138 if (eobs[1] > 1)
139 vp8_dequant_idct_add_v6 (q+16, dq, pre+4, dstv+4, 8, stride);
140 else
141 {
142 vp8_dc_only_idct_add_v6 (q[16]*dq[0], pre+4, dstv+4, 8, stride);
143 ((int *)(q+16))[0] = 0;
144 }
145
146 q += 32;
147 pre += 32;
148 dstv += 4*stride;
149 eobs += 2;
150 }
151 }
152