PageRenderTime 49ms CodeModel.GetById 9ms app.highlight 35ms RepoModel.GetById 2ms app.codeStats 0ms

/media/libvpx/vp8/decoder/arm/armv6/idct_blk_v6.c

http://github.com/zpao/v8monkey
C | 151 lines | 122 code | 20 blank | 9 comment | 16 complexity | 7b86be8714449fa35a709a89d382e8cf MD5 | raw file
  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 "vp8/common/idct.h"
 13#include "vp8/decoder/dequantize.h"
 14
 15void 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
 51void 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
 98void 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}