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 __INC_BLOCK_H 13 #define __INC_BLOCK_H 14 15 #include "vp8/common/onyx.h" 16 #include "vp8/common/blockd.h" 17 #include "vp8/common/entropymv.h" 18 #include "vp8/common/entropy.h" 19 #include "vpx_ports/mem.h" 20 21 /* motion search site */ 22 typedef struct 23 { 24 MV mv; 25 int offset; 26 } search_site; 27 28 typedef struct block 29 { 30 /* 16 Y blocks, 4 U blocks, 4 V blocks each with 16 entries */ 31 short *src_diff; 32 short *coeff; 33 34 /* 16 Y blocks, 4 U blocks, 4 V blocks each with 16 entries */ 35 short *quant; 36 short *quant_fast; 37 unsigned char *quant_shift; 38 short *zbin; 39 short *zrun_zbin_boost; 40 short *round; 41 42 /* Zbin Over Quant value */ 43 short zbin_extra; 44 45 unsigned char **base_src; 46 int src; 47 int src_stride; 48 } BLOCK; 49 50 typedef struct 51 { 52 int count; 53 struct 54 { 55 B_PREDICTION_MODE mode; 56 int_mv mv; 57 } bmi[16]; 58 } PARTITION_INFO; 59 60 typedef struct macroblock 61 { 62 DECLARE_ALIGNED(16, short, src_diff[400]); /* 25 blocks Y,U,V,Y2 */ 63 DECLARE_ALIGNED(16, short, coeff[400]); /* 25 blocks Y,U,V,Y2 */ 64 DECLARE_ALIGNED(16, unsigned char, thismb[256]); 65 66 unsigned char *thismb_ptr; 67 /* 16 Y, 4 U, 4 V, 1 DC 2nd order block */ 68 BLOCK block[25]; 69 70 YV12_BUFFER_CONFIG src; 71 72 MACROBLOCKD e_mbd; 73 PARTITION_INFO *partition_info; /* work pointer */ 74 PARTITION_INFO *pi; /* Corresponds to upper left visible macroblock */ 75 PARTITION_INFO *pip; /* Base of allocated array */ 76 77 int ref_frame_cost[MAX_REF_FRAMES]; 78 79 search_site *ss; 80 int ss_count; 81 int searches_per_step; 82 83 int errorperbit; 84 int sadperbit16; 85 int sadperbit4; 86 int rddiv; 87 int rdmult; 88 unsigned int * mb_activity_ptr; 89 int * mb_norm_activity_ptr; 90 signed int act_zbin_adj; 91 signed int last_act_zbin_adj; 92 93 int *mvcost[2]; 94 int *mvsadcost[2]; 95 int (*mbmode_cost)[MB_MODE_COUNT]; 96 int (*intra_uv_mode_cost)[MB_MODE_COUNT]; 97 int (*bmode_costs)[10][10]; 98 int *inter_bmode_costs; 99 int (*token_costs)[COEF_BANDS][PREV_COEF_CONTEXTS] 100 [MAX_ENTROPY_TOKENS]; 101 102 /* These define limits to motion vector components to prevent 103 * them from extending outside the UMV borders. 104 */ 105 int mv_col_min; 106 int mv_col_max; 107 int mv_row_min; 108 int mv_row_max; 109 110 int skip; 111 112 unsigned int encode_breakout; 113 114 signed char *gf_active_ptr; 115 116 unsigned char *active_ptr; 117 MV_CONTEXT *mvc; 118 119 int optimize; 120 int q_index; 121 122 #if CONFIG_TEMPORAL_DENOISING 123 MB_PREDICTION_MODE best_sse_inter_mode; 124 int_mv best_sse_mv; 125 MV_REFERENCE_FRAME best_reference_frame; 126 MV_REFERENCE_FRAME best_zeromv_reference_frame; 127 unsigned char need_to_clamp_best_mvs; 128 #endif 129 130 int skip_true_count; 131 unsigned int coef_counts [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [MAX_ENTROPY_TOKENS]; 132 unsigned int MVcount [2] [MVvals]; /* (row,col) MV cts this frame */ 133 int ymode_count [VP8_YMODES]; /* intra MB type cts this frame */ 134 int uv_mode_count[VP8_UV_MODES]; /* intra MB type cts this frame */ 135 int64_t prediction_error; 136 int64_t intra_error; 137 138 139 void (*short_fdct4x4)(short *input, short *output, int pitch); 140 void (*short_fdct8x4)(short *input, short *output, int pitch); 141 void (*short_walsh4x4)(short *input, short *output, int pitch); 142 void (*quantize_b)(BLOCK *b, BLOCKD *d); 143 void (*quantize_b_pair)(BLOCK *b1, BLOCK *b2, BLOCKD *d0, BLOCKD *d1); 144 145 } MACROBLOCK; 146 147 148 #endif 149