• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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