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
vp8_dequant_idct_add_y_block_v6(short * q,short * dq,unsigned char * dst,int stride,char * eobs)15 void vp8_dequant_idct_add_y_block_v6(short *q, short *dq,
16 unsigned char *dst,
17 int stride, char *eobs)
18 {
19 int i;
20
21 for (i = 0; i < 4; i++)
22 {
23 if (eobs[0] > 1)
24 vp8_dequant_idct_add_v6 (q, dq, dst, stride);
25 else if (eobs[0] == 1)
26 {
27 vp8_dc_only_idct_add_v6 (q[0]*dq[0], dst, stride, dst, stride);
28 ((int *)q)[0] = 0;
29 }
30
31 if (eobs[1] > 1)
32 vp8_dequant_idct_add_v6 (q+16, dq, dst+4, stride);
33 else if (eobs[1] == 1)
34 {
35 vp8_dc_only_idct_add_v6 (q[16]*dq[0], dst+4, stride, dst+4, stride);
36 ((int *)(q+16))[0] = 0;
37 }
38
39 if (eobs[2] > 1)
40 vp8_dequant_idct_add_v6 (q+32, dq, dst+8, stride);
41 else if (eobs[2] == 1)
42 {
43 vp8_dc_only_idct_add_v6 (q[32]*dq[0], dst+8, stride, dst+8, stride);
44 ((int *)(q+32))[0] = 0;
45 }
46
47 if (eobs[3] > 1)
48 vp8_dequant_idct_add_v6 (q+48, dq, dst+12, stride);
49 else if (eobs[3] == 1)
50 {
51 vp8_dc_only_idct_add_v6 (q[48]*dq[0], dst+12, stride,dst+12,stride);
52 ((int *)(q+48))[0] = 0;
53 }
54
55 q += 64;
56 dst += 4*stride;
57 eobs += 4;
58 }
59 }
60
vp8_dequant_idct_add_uv_block_v6(short * q,short * dq,unsigned char * dstu,unsigned char * dstv,int stride,char * eobs)61 void vp8_dequant_idct_add_uv_block_v6(short *q, short *dq,
62 unsigned char *dstu,
63 unsigned char *dstv,
64 int stride, char *eobs)
65 {
66 int i;
67
68 for (i = 0; i < 2; i++)
69 {
70 if (eobs[0] > 1)
71 vp8_dequant_idct_add_v6 (q, dq, dstu, stride);
72 else if (eobs[0] == 1)
73 {
74 vp8_dc_only_idct_add_v6 (q[0]*dq[0], dstu, stride, dstu, stride);
75 ((int *)q)[0] = 0;
76 }
77
78 if (eobs[1] > 1)
79 vp8_dequant_idct_add_v6 (q+16, dq, dstu+4, stride);
80 else if (eobs[1] == 1)
81 {
82 vp8_dc_only_idct_add_v6 (q[16]*dq[0], dstu+4, stride,
83 dstu+4, stride);
84 ((int *)(q+16))[0] = 0;
85 }
86
87 q += 32;
88 dstu += 4*stride;
89 eobs += 2;
90 }
91
92 for (i = 0; i < 2; i++)
93 {
94 if (eobs[0] > 1)
95 vp8_dequant_idct_add_v6 (q, dq, dstv, stride);
96 else if (eobs[0] == 1)
97 {
98 vp8_dc_only_idct_add_v6 (q[0]*dq[0], dstv, stride, dstv, stride);
99 ((int *)q)[0] = 0;
100 }
101
102 if (eobs[1] > 1)
103 vp8_dequant_idct_add_v6 (q+16, dq, dstv+4, stride);
104 else if (eobs[1] == 1)
105 {
106 vp8_dc_only_idct_add_v6 (q[16]*dq[0], dstv+4, stride,
107 dstv+4, stride);
108 ((int *)(q+16))[0] = 0;
109 }
110
111 q += 32;
112 dstv += 4*stride;
113 eobs += 2;
114 }
115 }
116