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