Line data Source code
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 : #include "vpx_mem/vpx_mem.h"
14 :
15 : void vp8_dequant_idct_add_c(short *input, short *dq, unsigned char *dest,
16 : int stride);
17 : void vp8_dc_only_idct_add_c(short input_dc, unsigned char *pred,
18 : int pred_stride, unsigned char *dst_ptr,
19 : int dst_stride);
20 :
21 0 : void vp8_dequant_idct_add_y_block_c(short *q, short *dq, unsigned char *dst,
22 : int stride, char *eobs) {
23 : int i, j;
24 :
25 0 : for (i = 0; i < 4; ++i) {
26 0 : for (j = 0; j < 4; ++j) {
27 0 : if (*eobs++ > 1) {
28 0 : vp8_dequant_idct_add_c(q, dq, dst, stride);
29 : } else {
30 0 : vp8_dc_only_idct_add_c(q[0] * dq[0], dst, stride, dst, stride);
31 0 : memset(q, 0, 2 * sizeof(q[0]));
32 : }
33 :
34 0 : q += 16;
35 0 : dst += 4;
36 : }
37 :
38 0 : dst += 4 * stride - 16;
39 : }
40 0 : }
41 :
42 0 : void vp8_dequant_idct_add_uv_block_c(short *q, short *dq, unsigned char *dstu,
43 : unsigned char *dstv, int stride,
44 : char *eobs) {
45 : int i, j;
46 :
47 0 : for (i = 0; i < 2; ++i) {
48 0 : for (j = 0; j < 2; ++j) {
49 0 : if (*eobs++ > 1) {
50 0 : vp8_dequant_idct_add_c(q, dq, dstu, stride);
51 : } else {
52 0 : vp8_dc_only_idct_add_c(q[0] * dq[0], dstu, stride, dstu, stride);
53 0 : memset(q, 0, 2 * sizeof(q[0]));
54 : }
55 :
56 0 : q += 16;
57 0 : dstu += 4;
58 : }
59 :
60 0 : dstu += 4 * stride - 8;
61 : }
62 :
63 0 : for (i = 0; i < 2; ++i) {
64 0 : for (j = 0; j < 2; ++j) {
65 0 : if (*eobs++ > 1) {
66 0 : vp8_dequant_idct_add_c(q, dq, dstv, stride);
67 : } else {
68 0 : vp8_dc_only_idct_add_c(q[0] * dq[0], dstv, stride, dstv, stride);
69 0 : memset(q, 0, 2 * sizeof(q[0]));
70 : }
71 :
72 0 : q += 16;
73 0 : dstv += 4;
74 : }
75 :
76 0 : dstv += 4 * stride - 8;
77 : }
78 0 : }
|