| /* |
| * Copyright (c) 2010 The WebM project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| |
| #ifndef VP8_ENCODER_BLOCK_H_ |
| #define VP8_ENCODER_BLOCK_H_ |
| |
| #include "vp8/common/onyx.h" |
| #include "vp8/common/blockd.h" |
| #include "vp8/common/entropymv.h" |
| #include "vp8/common/entropy.h" |
| #include "vpx_ports/mem.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #define MAX_MODES 20 |
| #define MAX_ERROR_BINS 1024 |
| |
| /* motion search site */ |
| typedef struct |
| { |
| MV mv; |
| int offset; |
| } search_site; |
| |
| typedef struct block |
| { |
| /* 16 Y blocks, 4 U blocks, 4 V blocks each with 16 entries */ |
| short *src_diff; |
| short *coeff; |
| |
| /* 16 Y blocks, 4 U blocks, 4 V blocks each with 16 entries */ |
| short *quant; |
| short *quant_fast; |
| short *quant_shift; |
| short *zbin; |
| short *zrun_zbin_boost; |
| short *round; |
| |
| /* Zbin Over Quant value */ |
| short zbin_extra; |
| |
| unsigned char **base_src; |
| int src; |
| int src_stride; |
| } BLOCK; |
| |
| typedef struct |
| { |
| int count; |
| struct |
| { |
| B_PREDICTION_MODE mode; |
| int_mv mv; |
| } bmi[16]; |
| } PARTITION_INFO; |
| |
| typedef struct macroblock |
| { |
| DECLARE_ALIGNED(16, short, src_diff[400]); /* 25 blocks Y,U,V,Y2 */ |
| DECLARE_ALIGNED(16, short, coeff[400]); /* 25 blocks Y,U,V,Y2 */ |
| DECLARE_ALIGNED(16, unsigned char, thismb[256]); |
| |
| unsigned char *thismb_ptr; |
| /* 16 Y, 4 U, 4 V, 1 DC 2nd order block */ |
| BLOCK block[25]; |
| |
| YV12_BUFFER_CONFIG src; |
| |
| MACROBLOCKD e_mbd; |
| PARTITION_INFO *partition_info; /* work pointer */ |
| PARTITION_INFO *pi; /* Corresponds to upper left visible macroblock */ |
| PARTITION_INFO *pip; /* Base of allocated array */ |
| |
| int ref_frame_cost[MAX_REF_FRAMES]; |
| |
| search_site *ss; |
| int ss_count; |
| int searches_per_step; |
| |
| int errorperbit; |
| int sadperbit16; |
| int sadperbit4; |
| int rddiv; |
| int rdmult; |
| unsigned int * mb_activity_ptr; |
| int * mb_norm_activity_ptr; |
| signed int act_zbin_adj; |
| signed int last_act_zbin_adj; |
| |
| int *mvcost[2]; |
| int *mvsadcost[2]; |
| int (*mbmode_cost)[MB_MODE_COUNT]; |
| int (*intra_uv_mode_cost)[MB_MODE_COUNT]; |
| int (*bmode_costs)[10][10]; |
| int *inter_bmode_costs; |
| int (*token_costs)[COEF_BANDS][PREV_COEF_CONTEXTS] |
| [MAX_ENTROPY_TOKENS]; |
| |
| /* These define limits to motion vector components to prevent |
| * them from extending outside the UMV borders. |
| */ |
| int mv_col_min; |
| int mv_col_max; |
| int mv_row_min; |
| int mv_row_max; |
| |
| int skip; |
| |
| unsigned int encode_breakout; |
| |
| signed char *gf_active_ptr; |
| |
| unsigned char *active_ptr; |
| MV_CONTEXT *mvc; |
| |
| int optimize; |
| int q_index; |
| int is_skin; |
| int denoise_zeromv; |
| |
| #if CONFIG_TEMPORAL_DENOISING |
| int increase_denoising; |
| MB_PREDICTION_MODE best_sse_inter_mode; |
| int_mv best_sse_mv; |
| MV_REFERENCE_FRAME best_reference_frame; |
| MV_REFERENCE_FRAME best_zeromv_reference_frame; |
| unsigned char need_to_clamp_best_mvs; |
| #endif |
| |
| int skip_true_count; |
| unsigned int coef_counts [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [MAX_ENTROPY_TOKENS]; |
| unsigned int MVcount [2] [MVvals]; /* (row,col) MV cts this frame */ |
| int ymode_count [VP8_YMODES]; /* intra MB type cts this frame */ |
| int uv_mode_count[VP8_UV_MODES]; /* intra MB type cts this frame */ |
| int64_t prediction_error; |
| int64_t intra_error; |
| int count_mb_ref_frame_usage[MAX_REF_FRAMES]; |
| |
| int rd_thresh_mult[MAX_MODES]; |
| int rd_threshes[MAX_MODES]; |
| unsigned int mbs_tested_so_far; |
| unsigned int mode_test_hit_counts[MAX_MODES]; |
| int zbin_mode_boost_enabled; |
| int zbin_mode_boost; |
| int last_zbin_mode_boost; |
| |
| int last_zbin_over_quant; |
| int zbin_over_quant; |
| int error_bins[MAX_ERROR_BINS]; |
| |
| void (*short_fdct4x4)(short *input, short *output, int pitch); |
| void (*short_fdct8x4)(short *input, short *output, int pitch); |
| void (*short_walsh4x4)(short *input, short *output, int pitch); |
| void (*quantize_b)(BLOCK *b, BLOCKD *d); |
| |
| unsigned int mbs_zero_last_dot_suppress; |
| int zero_last_dot_suppress; |
| } MACROBLOCK; |
| |
| |
| #ifdef __cplusplus |
| } // extern "C" |
| #endif |
| |
| #endif // VP8_ENCODER_BLOCK_H_ |