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"
13085cab8fbb48aa8b9f7e3e6d5a2694afd0ffe2e0johannkoenig@chromium.org#include "vpx_mem/vpx_mem.h"
14167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
15167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgvoid vp8_dequant_idct_add_c(short *input, short *dq,
16167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org                            unsigned char *dest, int stride);
17167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgvoid vp8_dc_only_idct_add_c(short input_dc, unsigned char * pred,
18167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org                            int pred_stride, unsigned char *dst_ptr,
19167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org                            int dst_stride);
20167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
21167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgvoid vp8_dequant_idct_add_y_block_c
22167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            (short *q, short *dq,
23167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org             unsigned char *dst, int stride, char *eobs)
24167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org{
25167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    int i, j;
26167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
27167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    for (i = 0; i < 4; i++)
28167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    {
29167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        for (j = 0; j < 4; j++)
30167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        {
31167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            if (*eobs++ > 1)
32167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org                vp8_dequant_idct_add_c (q, dq, dst, stride);
33167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            else
34167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            {
35167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org                vp8_dc_only_idct_add_c (q[0]*dq[0], dst, stride, dst, stride);
36085cab8fbb48aa8b9f7e3e6d5a2694afd0ffe2e0johannkoenig@chromium.org                vpx_memset(q, 0, 2 * sizeof(q[0]));
37167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            }
38167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
39167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            q   += 16;
40167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            dst += 4;
41167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        }
42167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
43167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        dst += 4*stride - 16;
44167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    }
45167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org}
46167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
47167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgvoid vp8_dequant_idct_add_uv_block_c
48167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            (short *q, short *dq,
49167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org             unsigned char *dstu, unsigned char *dstv, int stride, char *eobs)
50167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org{
51167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    int i, j;
52167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
53167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    for (i = 0; i < 2; i++)
54167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    {
55167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        for (j = 0; j < 2; j++)
56167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        {
57167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            if (*eobs++ > 1)
58167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org                vp8_dequant_idct_add_c (q, dq, dstu, stride);
59167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            else
60167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            {
61167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org                vp8_dc_only_idct_add_c (q[0]*dq[0], dstu, stride, dstu, stride);
62085cab8fbb48aa8b9f7e3e6d5a2694afd0ffe2e0johannkoenig@chromium.org                vpx_memset(q, 0, 2 * sizeof(q[0]));
63167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            }
64167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
65167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            q    += 16;
66167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            dstu += 4;
67167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        }
68167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
69167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        dstu += 4*stride - 8;
70167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    }
71167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
72167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    for (i = 0; i < 2; i++)
73167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    {
74167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        for (j = 0; j < 2; j++)
75167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        {
76167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            if (*eobs++ > 1)
77167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org                vp8_dequant_idct_add_c (q, dq, dstv, stride);
78167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            else
79167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            {
80167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org                vp8_dc_only_idct_add_c (q[0]*dq[0], dstv, stride, dstv, stride);
81085cab8fbb48aa8b9f7e3e6d5a2694afd0ffe2e0johannkoenig@chromium.org                vpx_memset(q, 0, 2 * sizeof(q[0]));
82167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            }
83167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
84167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            q    += 16;
85167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org            dstv += 4;
86167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        }
87167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
88167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        dstv += 4*stride - 8;
89167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    }
90167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org}
91