Home | History | Annotate | Download | only in decoder
      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 
     12 #ifndef DEQUANTIZE_H
     13 #define DEQUANTIZE_H
     14 #include "vp8/common/blockd.h"
     15 
     16 #define prototype_dequant_block(sym) \
     17     void sym(BLOCKD *x)
     18 
     19 #define prototype_dequant_idct_add(sym) \
     20     void sym(short *input, short *dq, \
     21              unsigned char *pred, unsigned char *output, \
     22              int pitch, int stride)
     23 
     24 #define prototype_dequant_dc_idct_add(sym) \
     25     void sym(short *input, short *dq, \
     26              unsigned char *pred, unsigned char *output, \
     27              int pitch, int stride, \
     28              int dc)
     29 
     30 #define prototype_dequant_dc_idct_add_y_block(sym) \
     31     void sym(short *q, short *dq, \
     32              unsigned char *pre, unsigned char *dst, \
     33              int stride, char *eobs, short *dc)
     34 
     35 #define prototype_dequant_idct_add_y_block(sym) \
     36     void sym(short *q, short *dq, \
     37              unsigned char *pre, unsigned char *dst, \
     38              int stride, char *eobs)
     39 
     40 #define prototype_dequant_idct_add_uv_block(sym) \
     41     void sym(short *q, short *dq, \
     42              unsigned char *pre, unsigned char *dst_u, \
     43              unsigned char *dst_v, int stride, char *eobs)
     44 
     45 #if ARCH_X86 || ARCH_X86_64
     46 #include "x86/dequantize_x86.h"
     47 #endif
     48 
     49 #if ARCH_ARM
     50 #include "arm/dequantize_arm.h"
     51 #endif
     52 
     53 #ifndef vp8_dequant_block
     54 #define vp8_dequant_block vp8_dequantize_b_c
     55 #endif
     56 extern prototype_dequant_block(vp8_dequant_block);
     57 
     58 #ifndef vp8_dequant_idct_add
     59 #define vp8_dequant_idct_add vp8_dequant_idct_add_c
     60 #endif
     61 extern prototype_dequant_idct_add(vp8_dequant_idct_add);
     62 
     63 #ifndef vp8_dequant_dc_idct_add
     64 #define vp8_dequant_dc_idct_add vp8_dequant_dc_idct_add_c
     65 #endif
     66 extern prototype_dequant_dc_idct_add(vp8_dequant_dc_idct_add);
     67 
     68 #ifndef vp8_dequant_dc_idct_add_y_block
     69 #define vp8_dequant_dc_idct_add_y_block vp8_dequant_dc_idct_add_y_block_c
     70 #endif
     71 extern prototype_dequant_dc_idct_add_y_block(vp8_dequant_dc_idct_add_y_block);
     72 
     73 #ifndef vp8_dequant_idct_add_y_block
     74 #define vp8_dequant_idct_add_y_block vp8_dequant_idct_add_y_block_c
     75 #endif
     76 extern prototype_dequant_idct_add_y_block(vp8_dequant_idct_add_y_block);
     77 
     78 #ifndef vp8_dequant_idct_add_uv_block
     79 #define vp8_dequant_idct_add_uv_block vp8_dequant_idct_add_uv_block_c
     80 #endif
     81 extern prototype_dequant_idct_add_uv_block(vp8_dequant_idct_add_uv_block);
     82 
     83 
     84 typedef prototype_dequant_block((*vp8_dequant_block_fn_t));
     85 
     86 typedef prototype_dequant_idct_add((*vp8_dequant_idct_add_fn_t));
     87 
     88 typedef prototype_dequant_dc_idct_add((*vp8_dequant_dc_idct_add_fn_t));
     89 
     90 typedef prototype_dequant_dc_idct_add_y_block((*vp8_dequant_dc_idct_add_y_block_fn_t));
     91 
     92 typedef prototype_dequant_idct_add_y_block((*vp8_dequant_idct_add_y_block_fn_t));
     93 
     94 typedef prototype_dequant_idct_add_uv_block((*vp8_dequant_idct_add_uv_block_fn_t));
     95 
     96 typedef struct
     97 {
     98     vp8_dequant_block_fn_t               block;
     99     vp8_dequant_idct_add_fn_t            idct_add;
    100     vp8_dequant_dc_idct_add_fn_t         dc_idct_add;
    101     vp8_dequant_dc_idct_add_y_block_fn_t dc_idct_add_y_block;
    102     vp8_dequant_idct_add_y_block_fn_t    idct_add_y_block;
    103     vp8_dequant_idct_add_uv_block_fn_t   idct_add_uv_block;
    104 } vp8_dequant_rtcd_vtable_t;
    105 
    106 #if CONFIG_RUNTIME_CPU_DETECT
    107 #define DEQUANT_INVOKE(ctx,fn) (ctx)->fn
    108 #else
    109 #define DEQUANT_INVOKE(ctx,fn) vp8_dequant_##fn
    110 #endif
    111 
    112 #endif
    113