1 /*
2  *  Copyright (c) 2012 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 #if HAVE_DSPR2
15 
vp8_dequant_idct_add_y_block_dspr2(short * q,short * dq,unsigned char * dst,int stride,char * eobs)16 void vp8_dequant_idct_add_y_block_dspr2
17 (short *q, short *dq,
18  unsigned char *dst, int stride, char *eobs)
19 {
20     int i, j;
21 
22     for (i = 0; i < 4; i++)
23     {
24         for (j = 0; j < 4; j++)
25         {
26             if (*eobs++ > 1)
27                 vp8_dequant_idct_add_dspr2(q, dq, dst, stride);
28             else
29             {
30                 vp8_dc_only_idct_add_dspr2(q[0]*dq[0], dst, stride, dst, stride);
31                 ((int *)q)[0] = 0;
32             }
33 
34             q   += 16;
35             dst += 4;
36         }
37 
38         dst += 4 * stride - 16;
39     }
40 }
41 
vp8_dequant_idct_add_uv_block_dspr2(short * q,short * dq,unsigned char * dstu,unsigned char * dstv,int stride,char * eobs)42 void vp8_dequant_idct_add_uv_block_dspr2
43 (short *q, short *dq,
44  unsigned char *dstu, unsigned char *dstv, int stride, char *eobs)
45 {
46     int i, j;
47 
48     for (i = 0; i < 2; i++)
49     {
50         for (j = 0; j < 2; j++)
51         {
52             if (*eobs++ > 1)
53                 vp8_dequant_idct_add_dspr2(q, dq, dstu, stride);
54             else
55             {
56                 vp8_dc_only_idct_add_dspr2(q[0]*dq[0], dstu, stride, dstu, stride);
57                 ((int *)q)[0] = 0;
58             }
59 
60             q    += 16;
61             dstu += 4;
62         }
63 
64         dstu += 4 * stride - 8;
65     }
66 
67     for (i = 0; i < 2; i++)
68     {
69         for (j = 0; j < 2; j++)
70         {
71             if (*eobs++ > 1)
72                 vp8_dequant_idct_add_dspr2(q, dq, dstv, stride);
73             else
74             {
75                 vp8_dc_only_idct_add_dspr2(q[0]*dq[0], dstv, stride, dstv, stride);
76                 ((int *)q)[0] = 0;
77             }
78 
79             q    += 16;
80             dstv += 4;
81         }
82 
83         dstv += 4 * stride - 8;
84     }
85 }
86 
87 #endif
88 
89