Home | History | Annotate | Download | only in common
      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 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   for (i = 0; i < 4; ++i) {
     26     for (j = 0; j < 4; ++j) {
     27       if (*eobs++ > 1) {
     28         vp8_dequant_idct_add_c(q, dq, dst, stride);
     29       } else {
     30         vp8_dc_only_idct_add_c(q[0] * dq[0], dst, stride, dst, stride);
     31         memset(q, 0, 2 * sizeof(q[0]));
     32       }
     33 
     34       q += 16;
     35       dst += 4;
     36     }
     37 
     38     dst += 4 * stride - 16;
     39   }
     40 }
     41 
     42 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   for (i = 0; i < 2; ++i) {
     48     for (j = 0; j < 2; ++j) {
     49       if (*eobs++ > 1) {
     50         vp8_dequant_idct_add_c(q, dq, dstu, stride);
     51       } else {
     52         vp8_dc_only_idct_add_c(q[0] * dq[0], dstu, stride, dstu, stride);
     53         memset(q, 0, 2 * sizeof(q[0]));
     54       }
     55 
     56       q += 16;
     57       dstu += 4;
     58     }
     59 
     60     dstu += 4 * stride - 8;
     61   }
     62 
     63   for (i = 0; i < 2; ++i) {
     64     for (j = 0; j < 2; ++j) {
     65       if (*eobs++ > 1) {
     66         vp8_dequant_idct_add_c(q, dq, dstv, stride);
     67       } else {
     68         vp8_dc_only_idct_add_c(q[0] * dq[0], dstv, stride, dstv, stride);
     69         memset(q, 0, 2 * sizeof(q[0]));
     70       }
     71 
     72       q += 16;
     73       dstv += 4;
     74     }
     75 
     76     dstv += 4 * stride - 8;
     77   }
     78 }
     79