1167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org/*
2167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org *
4167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org *  Use of this source code is governed by a BSD-style license
5167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org *  that can be found in the LICENSE file in the root of the source
6167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org *  tree. An additional intellectual property rights grant can be found
7167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org *  in the file PATENTS.  All contributing project authors may
8167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org *  be found in the AUTHORS file in the root of the source tree.
9167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org */
10167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
11167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#include "vpx_config.h"
126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include "vp8_rtcd.h"
13167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
14167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
15167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgvoid vp8_dequant_idct_add_y_block_v6(short *q, short *dq,
16167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org                                     unsigned char *dst,
17167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org                                     int stride, char *eobs)
18167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org{
19167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    int i;
20167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
21167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    for (i = 0; i < 4; i++)
22167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    {
23167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        if (eobs[0] > 1)
24167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            vp8_dequant_idct_add_v6 (q, dq, dst, stride);
25167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        else if (eobs[0] == 1)
26167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        {
27167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            vp8_dc_only_idct_add_v6 (q[0]*dq[0], dst, stride, dst, stride);
28167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            ((int *)q)[0] = 0;
29167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        }
30167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
31167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        if (eobs[1] > 1)
32167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            vp8_dequant_idct_add_v6 (q+16, dq, dst+4, stride);
33167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        else if (eobs[1] == 1)
34167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        {
35167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            vp8_dc_only_idct_add_v6 (q[16]*dq[0], dst+4, stride, dst+4, stride);
36167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            ((int *)(q+16))[0] = 0;
37167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        }
38167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
39167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        if (eobs[2] > 1)
40167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            vp8_dequant_idct_add_v6 (q+32, dq, dst+8, stride);
41167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        else if (eobs[2] == 1)
42167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        {
43167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            vp8_dc_only_idct_add_v6 (q[32]*dq[0], dst+8, stride, dst+8, stride);
44167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            ((int *)(q+32))[0] = 0;
45167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        }
46167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
47167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        if (eobs[3] > 1)
48167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            vp8_dequant_idct_add_v6 (q+48, dq, dst+12, stride);
49167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        else if (eobs[3] == 1)
50167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        {
51167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            vp8_dc_only_idct_add_v6 (q[48]*dq[0], dst+12, stride,dst+12,stride);
52167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            ((int *)(q+48))[0] = 0;
53167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        }
54167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
55167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        q    += 64;
56167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        dst  += 4*stride;
57167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        eobs += 4;
58167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    }
59167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org}
60167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
61167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgvoid vp8_dequant_idct_add_uv_block_v6(short *q, short *dq,
62167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org                                      unsigned char *dstu,
63167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org                                      unsigned char *dstv,
64167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org                                      int stride, char *eobs)
65167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org{
66167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    int i;
67167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
68167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    for (i = 0; i < 2; i++)
69167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    {
70167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        if (eobs[0] > 1)
71167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            vp8_dequant_idct_add_v6 (q, dq, dstu, stride);
72167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        else if (eobs[0] == 1)
73167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        {
74167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            vp8_dc_only_idct_add_v6 (q[0]*dq[0], dstu, stride, dstu, stride);
75167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            ((int *)q)[0] = 0;
76167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        }
77167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
78167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        if (eobs[1] > 1)
79167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            vp8_dequant_idct_add_v6 (q+16, dq, dstu+4, stride);
80167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        else if (eobs[1] == 1)
81167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        {
82167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            vp8_dc_only_idct_add_v6 (q[16]*dq[0], dstu+4, stride,
83167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org                                                  dstu+4, stride);
84167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            ((int *)(q+16))[0] = 0;
85167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        }
86167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
87167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        q    += 32;
88167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        dstu += 4*stride;
89167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        eobs += 2;
90167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    }
91167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
92167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    for (i = 0; i < 2; i++)
93167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    {
94167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        if (eobs[0] > 1)
95167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            vp8_dequant_idct_add_v6 (q, dq, dstv, stride);
96167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        else if (eobs[0] == 1)
97167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        {
98167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            vp8_dc_only_idct_add_v6 (q[0]*dq[0], dstv, stride, dstv, stride);
99167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            ((int *)q)[0] = 0;
100167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        }
101167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
102167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        if (eobs[1] > 1)
103167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            vp8_dequant_idct_add_v6 (q+16, dq, dstv+4, stride);
104167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        else if (eobs[1] == 1)
105167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        {
106167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            vp8_dc_only_idct_add_v6 (q[16]*dq[0], dstv+4, stride,
107167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org                                                  dstv+4, stride);
108167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            ((int *)(q+16))[0] = 0;
109167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        }
110167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
111167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        q    += 32;
112167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        dstv += 4*stride;
113167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        eobs += 2;
114167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    }
115167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org}
116