1*fb1b10abSAndroid Build Coastguard Worker /* 2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3*fb1b10abSAndroid Build Coastguard Worker * 4*fb1b10abSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*fb1b10abSAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*fb1b10abSAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*fb1b10abSAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*fb1b10abSAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*fb1b10abSAndroid Build Coastguard Worker */ 10*fb1b10abSAndroid Build Coastguard Worker 11*fb1b10abSAndroid Build Coastguard Worker #ifndef VPX_VP8_ENCODER_BLOCK_H_ 12*fb1b10abSAndroid Build Coastguard Worker #define VPX_VP8_ENCODER_BLOCK_H_ 13*fb1b10abSAndroid Build Coastguard Worker 14*fb1b10abSAndroid Build Coastguard Worker #include "vp8/common/onyx.h" 15*fb1b10abSAndroid Build Coastguard Worker #include "vp8/common/blockd.h" 16*fb1b10abSAndroid Build Coastguard Worker #include "vp8/common/entropymv.h" 17*fb1b10abSAndroid Build Coastguard Worker #include "vp8/common/entropy.h" 18*fb1b10abSAndroid Build Coastguard Worker #include "vpx_ports/mem.h" 19*fb1b10abSAndroid Build Coastguard Worker 20*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 21*fb1b10abSAndroid Build Coastguard Worker extern "C" { 22*fb1b10abSAndroid Build Coastguard Worker #endif 23*fb1b10abSAndroid Build Coastguard Worker 24*fb1b10abSAndroid Build Coastguard Worker #define MAX_MODES 20 25*fb1b10abSAndroid Build Coastguard Worker #define MAX_ERROR_BINS 1024 26*fb1b10abSAndroid Build Coastguard Worker 27*fb1b10abSAndroid Build Coastguard Worker /* motion search site */ 28*fb1b10abSAndroid Build Coastguard Worker typedef struct { 29*fb1b10abSAndroid Build Coastguard Worker MV mv; 30*fb1b10abSAndroid Build Coastguard Worker int offset; 31*fb1b10abSAndroid Build Coastguard Worker } search_site; 32*fb1b10abSAndroid Build Coastguard Worker 33*fb1b10abSAndroid Build Coastguard Worker typedef struct block { 34*fb1b10abSAndroid Build Coastguard Worker /* 16 Y blocks, 4 U blocks, 4 V blocks each with 16 entries */ 35*fb1b10abSAndroid Build Coastguard Worker short *src_diff; 36*fb1b10abSAndroid Build Coastguard Worker short *coeff; 37*fb1b10abSAndroid Build Coastguard Worker 38*fb1b10abSAndroid Build Coastguard Worker /* 16 Y blocks, 4 U blocks, 4 V blocks each with 16 entries */ 39*fb1b10abSAndroid Build Coastguard Worker short *quant; 40*fb1b10abSAndroid Build Coastguard Worker short *quant_fast; 41*fb1b10abSAndroid Build Coastguard Worker short *quant_shift; 42*fb1b10abSAndroid Build Coastguard Worker short *zbin; 43*fb1b10abSAndroid Build Coastguard Worker short *zrun_zbin_boost; 44*fb1b10abSAndroid Build Coastguard Worker short *round; 45*fb1b10abSAndroid Build Coastguard Worker 46*fb1b10abSAndroid Build Coastguard Worker /* Zbin Over Quant value */ 47*fb1b10abSAndroid Build Coastguard Worker short zbin_extra; 48*fb1b10abSAndroid Build Coastguard Worker 49*fb1b10abSAndroid Build Coastguard Worker unsigned char **base_src; 50*fb1b10abSAndroid Build Coastguard Worker int src; 51*fb1b10abSAndroid Build Coastguard Worker int src_stride; 52*fb1b10abSAndroid Build Coastguard Worker } BLOCK; 53*fb1b10abSAndroid Build Coastguard Worker 54*fb1b10abSAndroid Build Coastguard Worker typedef struct { 55*fb1b10abSAndroid Build Coastguard Worker int count; 56*fb1b10abSAndroid Build Coastguard Worker struct { 57*fb1b10abSAndroid Build Coastguard Worker B_PREDICTION_MODE mode; 58*fb1b10abSAndroid Build Coastguard Worker int_mv mv; 59*fb1b10abSAndroid Build Coastguard Worker } bmi[16]; 60*fb1b10abSAndroid Build Coastguard Worker } PARTITION_INFO; 61*fb1b10abSAndroid Build Coastguard Worker 62*fb1b10abSAndroid Build Coastguard Worker typedef struct macroblock { 63*fb1b10abSAndroid Build Coastguard Worker DECLARE_ALIGNED(16, short, src_diff[400]); /* 25 blocks Y,U,V,Y2 */ 64*fb1b10abSAndroid Build Coastguard Worker DECLARE_ALIGNED(16, short, coeff[400]); /* 25 blocks Y,U,V,Y2 */ 65*fb1b10abSAndroid Build Coastguard Worker DECLARE_ALIGNED(16, unsigned char, thismb[256]); 66*fb1b10abSAndroid Build Coastguard Worker 67*fb1b10abSAndroid Build Coastguard Worker unsigned char *thismb_ptr; 68*fb1b10abSAndroid Build Coastguard Worker /* 16 Y, 4 U, 4 V, 1 DC 2nd order block */ 69*fb1b10abSAndroid Build Coastguard Worker BLOCK block[25]; 70*fb1b10abSAndroid Build Coastguard Worker 71*fb1b10abSAndroid Build Coastguard Worker YV12_BUFFER_CONFIG src; 72*fb1b10abSAndroid Build Coastguard Worker 73*fb1b10abSAndroid Build Coastguard Worker MACROBLOCKD e_mbd; 74*fb1b10abSAndroid Build Coastguard Worker PARTITION_INFO *partition_info; /* work pointer */ 75*fb1b10abSAndroid Build Coastguard Worker PARTITION_INFO *pi; /* Corresponds to upper left visible macroblock */ 76*fb1b10abSAndroid Build Coastguard Worker PARTITION_INFO *pip; /* Base of allocated array */ 77*fb1b10abSAndroid Build Coastguard Worker 78*fb1b10abSAndroid Build Coastguard Worker int ref_frame_cost[MAX_REF_FRAMES]; 79*fb1b10abSAndroid Build Coastguard Worker 80*fb1b10abSAndroid Build Coastguard Worker search_site *ss; 81*fb1b10abSAndroid Build Coastguard Worker int ss_count; 82*fb1b10abSAndroid Build Coastguard Worker int searches_per_step; 83*fb1b10abSAndroid Build Coastguard Worker 84*fb1b10abSAndroid Build Coastguard Worker int errorperbit; 85*fb1b10abSAndroid Build Coastguard Worker int sadperbit16; 86*fb1b10abSAndroid Build Coastguard Worker int sadperbit4; 87*fb1b10abSAndroid Build Coastguard Worker int rddiv; 88*fb1b10abSAndroid Build Coastguard Worker int rdmult; 89*fb1b10abSAndroid Build Coastguard Worker unsigned int *mb_activity_ptr; 90*fb1b10abSAndroid Build Coastguard Worker int *mb_norm_activity_ptr; 91*fb1b10abSAndroid Build Coastguard Worker signed int act_zbin_adj; 92*fb1b10abSAndroid Build Coastguard Worker signed int last_act_zbin_adj; 93*fb1b10abSAndroid Build Coastguard Worker 94*fb1b10abSAndroid Build Coastguard Worker int *mvcost[2]; 95*fb1b10abSAndroid Build Coastguard Worker int *mvsadcost[2]; 96*fb1b10abSAndroid Build Coastguard Worker int (*mbmode_cost)[MB_MODE_COUNT]; 97*fb1b10abSAndroid Build Coastguard Worker int (*intra_uv_mode_cost)[MB_MODE_COUNT]; 98*fb1b10abSAndroid Build Coastguard Worker int (*bmode_costs)[10][10]; 99*fb1b10abSAndroid Build Coastguard Worker int *inter_bmode_costs; 100*fb1b10abSAndroid Build Coastguard Worker int (*token_costs)[COEF_BANDS][PREV_COEF_CONTEXTS][MAX_ENTROPY_TOKENS]; 101*fb1b10abSAndroid Build Coastguard Worker 102*fb1b10abSAndroid Build Coastguard Worker /* These define limits to motion vector components to prevent 103*fb1b10abSAndroid Build Coastguard Worker * them from extending outside the UMV borders. 104*fb1b10abSAndroid Build Coastguard Worker */ 105*fb1b10abSAndroid Build Coastguard Worker int mv_col_min; 106*fb1b10abSAndroid Build Coastguard Worker int mv_col_max; 107*fb1b10abSAndroid Build Coastguard Worker int mv_row_min; 108*fb1b10abSAndroid Build Coastguard Worker int mv_row_max; 109*fb1b10abSAndroid Build Coastguard Worker 110*fb1b10abSAndroid Build Coastguard Worker int skip; 111*fb1b10abSAndroid Build Coastguard Worker 112*fb1b10abSAndroid Build Coastguard Worker unsigned int encode_breakout; 113*fb1b10abSAndroid Build Coastguard Worker 114*fb1b10abSAndroid Build Coastguard Worker signed char *gf_active_ptr; 115*fb1b10abSAndroid Build Coastguard Worker 116*fb1b10abSAndroid Build Coastguard Worker unsigned char *active_ptr; 117*fb1b10abSAndroid Build Coastguard Worker MV_CONTEXT *mvc; 118*fb1b10abSAndroid Build Coastguard Worker 119*fb1b10abSAndroid Build Coastguard Worker int optimize; 120*fb1b10abSAndroid Build Coastguard Worker int q_index; 121*fb1b10abSAndroid Build Coastguard Worker int is_skin; 122*fb1b10abSAndroid Build Coastguard Worker int denoise_zeromv; 123*fb1b10abSAndroid Build Coastguard Worker 124*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_TEMPORAL_DENOISING 125*fb1b10abSAndroid Build Coastguard Worker int increase_denoising; 126*fb1b10abSAndroid Build Coastguard Worker MB_PREDICTION_MODE best_sse_inter_mode; 127*fb1b10abSAndroid Build Coastguard Worker int_mv best_sse_mv; 128*fb1b10abSAndroid Build Coastguard Worker MV_REFERENCE_FRAME best_reference_frame; 129*fb1b10abSAndroid Build Coastguard Worker MV_REFERENCE_FRAME best_zeromv_reference_frame; 130*fb1b10abSAndroid Build Coastguard Worker unsigned char need_to_clamp_best_mvs; 131*fb1b10abSAndroid Build Coastguard Worker #endif 132*fb1b10abSAndroid Build Coastguard Worker 133*fb1b10abSAndroid Build Coastguard Worker int skip_true_count; 134*fb1b10abSAndroid Build Coastguard Worker unsigned int coef_counts[BLOCK_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS] 135*fb1b10abSAndroid Build Coastguard Worker [MAX_ENTROPY_TOKENS]; 136*fb1b10abSAndroid Build Coastguard Worker unsigned int MVcount[2][MVvals]; /* (row,col) MV cts this frame */ 137*fb1b10abSAndroid Build Coastguard Worker int ymode_count[VP8_YMODES]; /* intra MB type cts this frame */ 138*fb1b10abSAndroid Build Coastguard Worker int uv_mode_count[VP8_UV_MODES]; /* intra MB type cts this frame */ 139*fb1b10abSAndroid Build Coastguard Worker int64_t prediction_error; 140*fb1b10abSAndroid Build Coastguard Worker int64_t intra_error; 141*fb1b10abSAndroid Build Coastguard Worker int count_mb_ref_frame_usage[MAX_REF_FRAMES]; 142*fb1b10abSAndroid Build Coastguard Worker 143*fb1b10abSAndroid Build Coastguard Worker int rd_thresh_mult[MAX_MODES]; 144*fb1b10abSAndroid Build Coastguard Worker int rd_threshes[MAX_MODES]; 145*fb1b10abSAndroid Build Coastguard Worker unsigned int mbs_tested_so_far; 146*fb1b10abSAndroid Build Coastguard Worker unsigned int mode_test_hit_counts[MAX_MODES]; 147*fb1b10abSAndroid Build Coastguard Worker int zbin_mode_boost_enabled; 148*fb1b10abSAndroid Build Coastguard Worker int zbin_mode_boost; 149*fb1b10abSAndroid Build Coastguard Worker int last_zbin_mode_boost; 150*fb1b10abSAndroid Build Coastguard Worker 151*fb1b10abSAndroid Build Coastguard Worker int last_zbin_over_quant; 152*fb1b10abSAndroid Build Coastguard Worker int zbin_over_quant; 153*fb1b10abSAndroid Build Coastguard Worker int error_bins[MAX_ERROR_BINS]; 154*fb1b10abSAndroid Build Coastguard Worker 155*fb1b10abSAndroid Build Coastguard Worker void (*short_fdct4x4)(short *input, short *output, int pitch); 156*fb1b10abSAndroid Build Coastguard Worker void (*short_fdct8x4)(short *input, short *output, int pitch); 157*fb1b10abSAndroid Build Coastguard Worker void (*short_walsh4x4)(short *input, short *output, int pitch); 158*fb1b10abSAndroid Build Coastguard Worker void (*quantize_b)(BLOCK *b, BLOCKD *d); 159*fb1b10abSAndroid Build Coastguard Worker 160*fb1b10abSAndroid Build Coastguard Worker unsigned int mbs_zero_last_dot_suppress; 161*fb1b10abSAndroid Build Coastguard Worker int zero_last_dot_suppress; 162*fb1b10abSAndroid Build Coastguard Worker } MACROBLOCK; 163*fb1b10abSAndroid Build Coastguard Worker 164*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 165*fb1b10abSAndroid Build Coastguard Worker } // extern "C" 166*fb1b10abSAndroid Build Coastguard Worker #endif 167*fb1b10abSAndroid Build Coastguard Worker 168*fb1b10abSAndroid Build Coastguard Worker #endif // VPX_VP8_ENCODER_BLOCK_H_ 169