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_COMMON_BLOCKD_H_ 12*fb1b10abSAndroid Build Coastguard Worker #define VPX_VP8_COMMON_BLOCKD_H_ 13*fb1b10abSAndroid Build Coastguard Worker 14*fb1b10abSAndroid Build Coastguard Worker void vpx_log(const char *format, ...); 15*fb1b10abSAndroid Build Coastguard Worker 16*fb1b10abSAndroid Build Coastguard Worker #include "vpx/internal/vpx_codec_internal.h" 17*fb1b10abSAndroid Build Coastguard Worker #include "vpx_config.h" 18*fb1b10abSAndroid Build Coastguard Worker #include "vpx_scale/yv12config.h" 19*fb1b10abSAndroid Build Coastguard Worker #include "mv.h" 20*fb1b10abSAndroid Build Coastguard Worker #include "treecoder.h" 21*fb1b10abSAndroid Build Coastguard Worker #include "vpx_ports/mem.h" 22*fb1b10abSAndroid Build Coastguard Worker 23*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 24*fb1b10abSAndroid Build Coastguard Worker extern "C" { 25*fb1b10abSAndroid Build Coastguard Worker #endif 26*fb1b10abSAndroid Build Coastguard Worker 27*fb1b10abSAndroid Build Coastguard Worker /*#define DCPRED 1*/ 28*fb1b10abSAndroid Build Coastguard Worker #define DCPREDSIMTHRESH 0 29*fb1b10abSAndroid Build Coastguard Worker #define DCPREDCNTTHRESH 3 30*fb1b10abSAndroid Build Coastguard Worker 31*fb1b10abSAndroid Build Coastguard Worker #define MB_FEATURE_TREE_PROBS 3 32*fb1b10abSAndroid Build Coastguard Worker #define MAX_MB_SEGMENTS 4 33*fb1b10abSAndroid Build Coastguard Worker 34*fb1b10abSAndroid Build Coastguard Worker #define MAX_REF_LF_DELTAS 4 35*fb1b10abSAndroid Build Coastguard Worker #define MAX_MODE_LF_DELTAS 4 36*fb1b10abSAndroid Build Coastguard Worker 37*fb1b10abSAndroid Build Coastguard Worker /* Segment Feature Masks */ 38*fb1b10abSAndroid Build Coastguard Worker #define SEGMENT_DELTADATA 0 39*fb1b10abSAndroid Build Coastguard Worker #define SEGMENT_ABSDATA 1 40*fb1b10abSAndroid Build Coastguard Worker 41*fb1b10abSAndroid Build Coastguard Worker typedef struct { 42*fb1b10abSAndroid Build Coastguard Worker int r, c; 43*fb1b10abSAndroid Build Coastguard Worker } POS; 44*fb1b10abSAndroid Build Coastguard Worker 45*fb1b10abSAndroid Build Coastguard Worker #define PLANE_TYPE_Y_NO_DC 0 46*fb1b10abSAndroid Build Coastguard Worker #define PLANE_TYPE_Y2 1 47*fb1b10abSAndroid Build Coastguard Worker #define PLANE_TYPE_UV 2 48*fb1b10abSAndroid Build Coastguard Worker #define PLANE_TYPE_Y_WITH_DC 3 49*fb1b10abSAndroid Build Coastguard Worker 50*fb1b10abSAndroid Build Coastguard Worker typedef char ENTROPY_CONTEXT; 51*fb1b10abSAndroid Build Coastguard Worker typedef struct { 52*fb1b10abSAndroid Build Coastguard Worker ENTROPY_CONTEXT y1[4]; 53*fb1b10abSAndroid Build Coastguard Worker ENTROPY_CONTEXT u[2]; 54*fb1b10abSAndroid Build Coastguard Worker ENTROPY_CONTEXT v[2]; 55*fb1b10abSAndroid Build Coastguard Worker ENTROPY_CONTEXT y2; 56*fb1b10abSAndroid Build Coastguard Worker } ENTROPY_CONTEXT_PLANES; 57*fb1b10abSAndroid Build Coastguard Worker 58*fb1b10abSAndroid Build Coastguard Worker extern const unsigned char vp8_block2left[25]; 59*fb1b10abSAndroid Build Coastguard Worker extern const unsigned char vp8_block2above[25]; 60*fb1b10abSAndroid Build Coastguard Worker 61*fb1b10abSAndroid Build Coastguard Worker #define VP8_COMBINEENTROPYCONTEXTS(Dest, A, B) Dest = (A) + (B) 62*fb1b10abSAndroid Build Coastguard Worker 63*fb1b10abSAndroid Build Coastguard Worker typedef enum { KEY_FRAME = 0, INTER_FRAME = 1 } FRAME_TYPE; 64*fb1b10abSAndroid Build Coastguard Worker 65*fb1b10abSAndroid Build Coastguard Worker typedef enum { 66*fb1b10abSAndroid Build Coastguard Worker DC_PRED, /* average of above and left pixels */ 67*fb1b10abSAndroid Build Coastguard Worker V_PRED, /* vertical prediction */ 68*fb1b10abSAndroid Build Coastguard Worker H_PRED, /* horizontal prediction */ 69*fb1b10abSAndroid Build Coastguard Worker TM_PRED, /* Truemotion prediction */ 70*fb1b10abSAndroid Build Coastguard Worker B_PRED, /* block based prediction, each block has its own prediction mode */ 71*fb1b10abSAndroid Build Coastguard Worker 72*fb1b10abSAndroid Build Coastguard Worker NEARESTMV, 73*fb1b10abSAndroid Build Coastguard Worker NEARMV, 74*fb1b10abSAndroid Build Coastguard Worker ZEROMV, 75*fb1b10abSAndroid Build Coastguard Worker NEWMV, 76*fb1b10abSAndroid Build Coastguard Worker SPLITMV, 77*fb1b10abSAndroid Build Coastguard Worker 78*fb1b10abSAndroid Build Coastguard Worker MB_MODE_COUNT 79*fb1b10abSAndroid Build Coastguard Worker } MB_PREDICTION_MODE; 80*fb1b10abSAndroid Build Coastguard Worker 81*fb1b10abSAndroid Build Coastguard Worker /* Macroblock level features */ 82*fb1b10abSAndroid Build Coastguard Worker typedef enum { 83*fb1b10abSAndroid Build Coastguard Worker MB_LVL_ALT_Q = 0, /* Use alternate Quantizer .... */ 84*fb1b10abSAndroid Build Coastguard Worker MB_LVL_ALT_LF = 1, /* Use alternate loop filter value... */ 85*fb1b10abSAndroid Build Coastguard Worker MB_LVL_MAX = 2 /* Number of MB level features supported */ 86*fb1b10abSAndroid Build Coastguard Worker 87*fb1b10abSAndroid Build Coastguard Worker } MB_LVL_FEATURES; 88*fb1b10abSAndroid Build Coastguard Worker 89*fb1b10abSAndroid Build Coastguard Worker /* Segment Feature Masks */ 90*fb1b10abSAndroid Build Coastguard Worker #define SEGMENT_ALTQ 0x01 91*fb1b10abSAndroid Build Coastguard Worker #define SEGMENT_ALT_LF 0x02 92*fb1b10abSAndroid Build Coastguard Worker 93*fb1b10abSAndroid Build Coastguard Worker #define VP8_YMODES (B_PRED + 1) 94*fb1b10abSAndroid Build Coastguard Worker #define VP8_UV_MODES (TM_PRED + 1) 95*fb1b10abSAndroid Build Coastguard Worker 96*fb1b10abSAndroid Build Coastguard Worker #define VP8_MVREFS (1 + SPLITMV - NEARESTMV) 97*fb1b10abSAndroid Build Coastguard Worker 98*fb1b10abSAndroid Build Coastguard Worker typedef enum { 99*fb1b10abSAndroid Build Coastguard Worker B_DC_PRED, /* average of above and left pixels */ 100*fb1b10abSAndroid Build Coastguard Worker B_TM_PRED, 101*fb1b10abSAndroid Build Coastguard Worker 102*fb1b10abSAndroid Build Coastguard Worker B_VE_PRED, /* vertical prediction */ 103*fb1b10abSAndroid Build Coastguard Worker B_HE_PRED, /* horizontal prediction */ 104*fb1b10abSAndroid Build Coastguard Worker 105*fb1b10abSAndroid Build Coastguard Worker B_LD_PRED, 106*fb1b10abSAndroid Build Coastguard Worker B_RD_PRED, 107*fb1b10abSAndroid Build Coastguard Worker 108*fb1b10abSAndroid Build Coastguard Worker B_VR_PRED, 109*fb1b10abSAndroid Build Coastguard Worker B_VL_PRED, 110*fb1b10abSAndroid Build Coastguard Worker B_HD_PRED, 111*fb1b10abSAndroid Build Coastguard Worker B_HU_PRED, 112*fb1b10abSAndroid Build Coastguard Worker 113*fb1b10abSAndroid Build Coastguard Worker LEFT4X4, 114*fb1b10abSAndroid Build Coastguard Worker ABOVE4X4, 115*fb1b10abSAndroid Build Coastguard Worker ZERO4X4, 116*fb1b10abSAndroid Build Coastguard Worker NEW4X4, 117*fb1b10abSAndroid Build Coastguard Worker 118*fb1b10abSAndroid Build Coastguard Worker B_MODE_COUNT 119*fb1b10abSAndroid Build Coastguard Worker } B_PREDICTION_MODE; 120*fb1b10abSAndroid Build Coastguard Worker 121*fb1b10abSAndroid Build Coastguard Worker #define VP8_BINTRAMODES (B_HU_PRED + 1) /* 10 */ 122*fb1b10abSAndroid Build Coastguard Worker #define VP8_SUBMVREFS (1 + NEW4X4 - LEFT4X4) 123*fb1b10abSAndroid Build Coastguard Worker 124*fb1b10abSAndroid Build Coastguard Worker /* For keyframes, intra block modes are predicted by the (already decoded) 125*fb1b10abSAndroid Build Coastguard Worker modes for the Y blocks to the left and above us; for interframes, there 126*fb1b10abSAndroid Build Coastguard Worker is a single probability table. */ 127*fb1b10abSAndroid Build Coastguard Worker 128*fb1b10abSAndroid Build Coastguard Worker union b_mode_info { 129*fb1b10abSAndroid Build Coastguard Worker B_PREDICTION_MODE as_mode; 130*fb1b10abSAndroid Build Coastguard Worker int_mv mv; 131*fb1b10abSAndroid Build Coastguard Worker }; 132*fb1b10abSAndroid Build Coastguard Worker 133*fb1b10abSAndroid Build Coastguard Worker typedef enum { 134*fb1b10abSAndroid Build Coastguard Worker INTRA_FRAME = 0, 135*fb1b10abSAndroid Build Coastguard Worker LAST_FRAME = 1, 136*fb1b10abSAndroid Build Coastguard Worker GOLDEN_FRAME = 2, 137*fb1b10abSAndroid Build Coastguard Worker ALTREF_FRAME = 3, 138*fb1b10abSAndroid Build Coastguard Worker MAX_REF_FRAMES = 4 139*fb1b10abSAndroid Build Coastguard Worker } MV_REFERENCE_FRAME; 140*fb1b10abSAndroid Build Coastguard Worker 141*fb1b10abSAndroid Build Coastguard Worker typedef struct { 142*fb1b10abSAndroid Build Coastguard Worker uint8_t mode, uv_mode; 143*fb1b10abSAndroid Build Coastguard Worker uint8_t ref_frame; 144*fb1b10abSAndroid Build Coastguard Worker uint8_t is_4x4; 145*fb1b10abSAndroid Build Coastguard Worker int_mv mv; 146*fb1b10abSAndroid Build Coastguard Worker 147*fb1b10abSAndroid Build Coastguard Worker uint8_t partitioning; 148*fb1b10abSAndroid Build Coastguard Worker /* does this mb has coefficients at all, 1=no coefficients, 0=need decode 149*fb1b10abSAndroid Build Coastguard Worker tokens */ 150*fb1b10abSAndroid Build Coastguard Worker uint8_t mb_skip_coeff; 151*fb1b10abSAndroid Build Coastguard Worker uint8_t need_to_clamp_mvs; 152*fb1b10abSAndroid Build Coastguard Worker /* Which set of segmentation parameters should be used for this MB */ 153*fb1b10abSAndroid Build Coastguard Worker uint8_t segment_id; 154*fb1b10abSAndroid Build Coastguard Worker } MB_MODE_INFO; 155*fb1b10abSAndroid Build Coastguard Worker 156*fb1b10abSAndroid Build Coastguard Worker typedef struct modeinfo { 157*fb1b10abSAndroid Build Coastguard Worker MB_MODE_INFO mbmi; 158*fb1b10abSAndroid Build Coastguard Worker union b_mode_info bmi[16]; 159*fb1b10abSAndroid Build Coastguard Worker } MODE_INFO; 160*fb1b10abSAndroid Build Coastguard Worker 161*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_MULTI_RES_ENCODING 162*fb1b10abSAndroid Build Coastguard Worker /* The mb-level information needed to be stored for higher-resolution encoder */ 163*fb1b10abSAndroid Build Coastguard Worker typedef struct { 164*fb1b10abSAndroid Build Coastguard Worker MB_PREDICTION_MODE mode; 165*fb1b10abSAndroid Build Coastguard Worker MV_REFERENCE_FRAME ref_frame; 166*fb1b10abSAndroid Build Coastguard Worker int_mv mv; 167*fb1b10abSAndroid Build Coastguard Worker int dissim; /* dissimilarity level of the macroblock */ 168*fb1b10abSAndroid Build Coastguard Worker } LOWER_RES_MB_INFO; 169*fb1b10abSAndroid Build Coastguard Worker 170*fb1b10abSAndroid Build Coastguard Worker /* The frame-level information needed to be stored for higher-resolution 171*fb1b10abSAndroid Build Coastguard Worker * encoder */ 172*fb1b10abSAndroid Build Coastguard Worker typedef struct { 173*fb1b10abSAndroid Build Coastguard Worker FRAME_TYPE frame_type; 174*fb1b10abSAndroid Build Coastguard Worker int is_frame_dropped; 175*fb1b10abSAndroid Build Coastguard Worker // If frame is dropped due to overshoot after encode_frame. This triggers a 176*fb1b10abSAndroid Build Coastguard Worker // drop and resets rate control with Q forced to max for following frame. 177*fb1b10abSAndroid Build Coastguard Worker // The check for this dropping due to overshoot is only done on lowest stream, 178*fb1b10abSAndroid Build Coastguard Worker // and if set will force drop on all spatial streams for that current frame. 179*fb1b10abSAndroid Build Coastguard Worker int is_frame_dropped_overshoot_maxqp; 180*fb1b10abSAndroid Build Coastguard Worker // The frame rate for the lowest resolution. 181*fb1b10abSAndroid Build Coastguard Worker double low_res_framerate; 182*fb1b10abSAndroid Build Coastguard Worker /* The frame number of each reference frames */ 183*fb1b10abSAndroid Build Coastguard Worker unsigned int low_res_ref_frames[MAX_REF_FRAMES]; 184*fb1b10abSAndroid Build Coastguard Worker // The video frame counter value for the key frame, for lowest resolution. 185*fb1b10abSAndroid Build Coastguard Worker unsigned int key_frame_counter_value; 186*fb1b10abSAndroid Build Coastguard Worker // Flags to signal skipped encoding of previous and base layer stream. 187*fb1b10abSAndroid Build Coastguard Worker unsigned int skip_encoding_prev_stream; 188*fb1b10abSAndroid Build Coastguard Worker unsigned int skip_encoding_base_stream; 189*fb1b10abSAndroid Build Coastguard Worker LOWER_RES_MB_INFO *mb_info; 190*fb1b10abSAndroid Build Coastguard Worker } LOWER_RES_FRAME_INFO; 191*fb1b10abSAndroid Build Coastguard Worker #endif 192*fb1b10abSAndroid Build Coastguard Worker 193*fb1b10abSAndroid Build Coastguard Worker typedef struct blockd { 194*fb1b10abSAndroid Build Coastguard Worker short *qcoeff; 195*fb1b10abSAndroid Build Coastguard Worker short *dqcoeff; 196*fb1b10abSAndroid Build Coastguard Worker unsigned char *predictor; 197*fb1b10abSAndroid Build Coastguard Worker short *dequant; 198*fb1b10abSAndroid Build Coastguard Worker 199*fb1b10abSAndroid Build Coastguard Worker int offset; 200*fb1b10abSAndroid Build Coastguard Worker char *eob; 201*fb1b10abSAndroid Build Coastguard Worker 202*fb1b10abSAndroid Build Coastguard Worker union b_mode_info bmi; 203*fb1b10abSAndroid Build Coastguard Worker } BLOCKD; 204*fb1b10abSAndroid Build Coastguard Worker 205*fb1b10abSAndroid Build Coastguard Worker typedef void (*vp8_subpix_fn_t)(unsigned char *src_ptr, int src_pixels_per_line, 206*fb1b10abSAndroid Build Coastguard Worker int xoffset, int yoffset, 207*fb1b10abSAndroid Build Coastguard Worker unsigned char *dst_ptr, int dst_pitch); 208*fb1b10abSAndroid Build Coastguard Worker 209*fb1b10abSAndroid Build Coastguard Worker typedef struct macroblockd { 210*fb1b10abSAndroid Build Coastguard Worker DECLARE_ALIGNED(16, unsigned char, predictor[384]); 211*fb1b10abSAndroid Build Coastguard Worker DECLARE_ALIGNED(16, short, qcoeff[400]); 212*fb1b10abSAndroid Build Coastguard Worker DECLARE_ALIGNED(16, short, dqcoeff[400]); 213*fb1b10abSAndroid Build Coastguard Worker DECLARE_ALIGNED(16, char, eobs[25]); 214*fb1b10abSAndroid Build Coastguard Worker 215*fb1b10abSAndroid Build Coastguard Worker DECLARE_ALIGNED(16, short, dequant_y1[16]); 216*fb1b10abSAndroid Build Coastguard Worker DECLARE_ALIGNED(16, short, dequant_y1_dc[16]); 217*fb1b10abSAndroid Build Coastguard Worker DECLARE_ALIGNED(16, short, dequant_y2[16]); 218*fb1b10abSAndroid Build Coastguard Worker DECLARE_ALIGNED(16, short, dequant_uv[16]); 219*fb1b10abSAndroid Build Coastguard Worker 220*fb1b10abSAndroid Build Coastguard Worker /* 16 Y blocks, 4 U, 4 V, 1 DC 2nd order block, each with 16 entries. */ 221*fb1b10abSAndroid Build Coastguard Worker BLOCKD block[25]; 222*fb1b10abSAndroid Build Coastguard Worker int fullpixel_mask; 223*fb1b10abSAndroid Build Coastguard Worker 224*fb1b10abSAndroid Build Coastguard Worker YV12_BUFFER_CONFIG pre; /* Filtered copy of previous frame reconstruction */ 225*fb1b10abSAndroid Build Coastguard Worker YV12_BUFFER_CONFIG dst; 226*fb1b10abSAndroid Build Coastguard Worker 227*fb1b10abSAndroid Build Coastguard Worker MODE_INFO *mode_info_context; 228*fb1b10abSAndroid Build Coastguard Worker int mode_info_stride; 229*fb1b10abSAndroid Build Coastguard Worker 230*fb1b10abSAndroid Build Coastguard Worker FRAME_TYPE frame_type; 231*fb1b10abSAndroid Build Coastguard Worker 232*fb1b10abSAndroid Build Coastguard Worker int up_available; 233*fb1b10abSAndroid Build Coastguard Worker int left_available; 234*fb1b10abSAndroid Build Coastguard Worker 235*fb1b10abSAndroid Build Coastguard Worker unsigned char *recon_above[3]; 236*fb1b10abSAndroid Build Coastguard Worker unsigned char *recon_left[3]; 237*fb1b10abSAndroid Build Coastguard Worker int recon_left_stride[2]; 238*fb1b10abSAndroid Build Coastguard Worker 239*fb1b10abSAndroid Build Coastguard Worker /* Y,U,V,Y2 */ 240*fb1b10abSAndroid Build Coastguard Worker ENTROPY_CONTEXT_PLANES *above_context; 241*fb1b10abSAndroid Build Coastguard Worker ENTROPY_CONTEXT_PLANES *left_context; 242*fb1b10abSAndroid Build Coastguard Worker 243*fb1b10abSAndroid Build Coastguard Worker /* 0 indicates segmentation at MB level is not enabled. Otherwise the 244*fb1b10abSAndroid Build Coastguard Worker * individual bits indicate which features are active. */ 245*fb1b10abSAndroid Build Coastguard Worker unsigned char segmentation_enabled; 246*fb1b10abSAndroid Build Coastguard Worker 247*fb1b10abSAndroid Build Coastguard Worker /* 0 (do not update) 1 (update) the macroblock segmentation map. */ 248*fb1b10abSAndroid Build Coastguard Worker unsigned char update_mb_segmentation_map; 249*fb1b10abSAndroid Build Coastguard Worker 250*fb1b10abSAndroid Build Coastguard Worker /* 0 (do not update) 1 (update) the macroblock segmentation feature data. */ 251*fb1b10abSAndroid Build Coastguard Worker unsigned char update_mb_segmentation_data; 252*fb1b10abSAndroid Build Coastguard Worker 253*fb1b10abSAndroid Build Coastguard Worker /* 0 (do not update) 1 (update) the macroblock segmentation feature data. */ 254*fb1b10abSAndroid Build Coastguard Worker unsigned char mb_segment_abs_delta; 255*fb1b10abSAndroid Build Coastguard Worker 256*fb1b10abSAndroid Build Coastguard Worker /* Per frame flags that define which MB level features (such as quantizer or 257*fb1b10abSAndroid Build Coastguard Worker * loop filter level) */ 258*fb1b10abSAndroid Build Coastguard Worker /* are enabled and when enabled the proabilities used to decode the per MB 259*fb1b10abSAndroid Build Coastguard Worker * flags in MB_MODE_INFO */ 260*fb1b10abSAndroid Build Coastguard Worker /* Probability Tree used to code Segment number */ 261*fb1b10abSAndroid Build Coastguard Worker vp8_prob mb_segment_tree_probs[MB_FEATURE_TREE_PROBS]; 262*fb1b10abSAndroid Build Coastguard Worker /* Segment parameters */ 263*fb1b10abSAndroid Build Coastguard Worker signed char segment_feature_data[MB_LVL_MAX][MAX_MB_SEGMENTS]; 264*fb1b10abSAndroid Build Coastguard Worker 265*fb1b10abSAndroid Build Coastguard Worker /* mode_based Loop filter adjustment */ 266*fb1b10abSAndroid Build Coastguard Worker unsigned char mode_ref_lf_delta_enabled; 267*fb1b10abSAndroid Build Coastguard Worker unsigned char mode_ref_lf_delta_update; 268*fb1b10abSAndroid Build Coastguard Worker 269*fb1b10abSAndroid Build Coastguard Worker /* Delta values have the range +/- MAX_LOOP_FILTER */ 270*fb1b10abSAndroid Build Coastguard Worker signed char 271*fb1b10abSAndroid Build Coastguard Worker last_ref_lf_deltas[MAX_REF_LF_DELTAS]; /* 0 = Intra, Last, GF, ARF */ 272*fb1b10abSAndroid Build Coastguard Worker signed char ref_lf_deltas[MAX_REF_LF_DELTAS]; /* 0 = Intra, Last, GF, ARF */ 273*fb1b10abSAndroid Build Coastguard Worker /* 0 = BPRED, ZERO_MV, MV, SPLIT */ 274*fb1b10abSAndroid Build Coastguard Worker signed char last_mode_lf_deltas[MAX_MODE_LF_DELTAS]; 275*fb1b10abSAndroid Build Coastguard Worker signed char 276*fb1b10abSAndroid Build Coastguard Worker mode_lf_deltas[MAX_MODE_LF_DELTAS]; /* 0 = BPRED, ZERO_MV, MV, SPLIT */ 277*fb1b10abSAndroid Build Coastguard Worker 278*fb1b10abSAndroid Build Coastguard Worker /* Distance of MB away from frame edges */ 279*fb1b10abSAndroid Build Coastguard Worker int mb_to_left_edge; 280*fb1b10abSAndroid Build Coastguard Worker int mb_to_right_edge; 281*fb1b10abSAndroid Build Coastguard Worker int mb_to_top_edge; 282*fb1b10abSAndroid Build Coastguard Worker int mb_to_bottom_edge; 283*fb1b10abSAndroid Build Coastguard Worker 284*fb1b10abSAndroid Build Coastguard Worker vp8_subpix_fn_t subpixel_predict; 285*fb1b10abSAndroid Build Coastguard Worker vp8_subpix_fn_t subpixel_predict8x4; 286*fb1b10abSAndroid Build Coastguard Worker vp8_subpix_fn_t subpixel_predict8x8; 287*fb1b10abSAndroid Build Coastguard Worker vp8_subpix_fn_t subpixel_predict16x16; 288*fb1b10abSAndroid Build Coastguard Worker 289*fb1b10abSAndroid Build Coastguard Worker void *current_bc; 290*fb1b10abSAndroid Build Coastguard Worker 291*fb1b10abSAndroid Build Coastguard Worker int corrupted; 292*fb1b10abSAndroid Build Coastguard Worker 293*fb1b10abSAndroid Build Coastguard Worker struct vpx_internal_error_info error_info; 294*fb1b10abSAndroid Build Coastguard Worker 295*fb1b10abSAndroid Build Coastguard Worker #if VPX_ARCH_X86 || VPX_ARCH_X86_64 296*fb1b10abSAndroid Build Coastguard Worker /* This is an intermediate buffer currently used in sub-pixel motion search 297*fb1b10abSAndroid Build Coastguard Worker * to keep a copy of the reference area. This buffer can be used for other 298*fb1b10abSAndroid Build Coastguard Worker * purpose. 299*fb1b10abSAndroid Build Coastguard Worker */ 300*fb1b10abSAndroid Build Coastguard Worker DECLARE_ALIGNED(32, unsigned char, y_buf[22 * 32]); 301*fb1b10abSAndroid Build Coastguard Worker #endif 302*fb1b10abSAndroid Build Coastguard Worker } MACROBLOCKD; 303*fb1b10abSAndroid Build Coastguard Worker 304*fb1b10abSAndroid Build Coastguard Worker extern void vp8_build_block_doffsets(MACROBLOCKD *x); 305*fb1b10abSAndroid Build Coastguard Worker extern void vp8_setup_block_dptrs(MACROBLOCKD *x); 306*fb1b10abSAndroid Build Coastguard Worker 307*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 308*fb1b10abSAndroid Build Coastguard Worker } // extern "C" 309*fb1b10abSAndroid Build Coastguard Worker #endif 310*fb1b10abSAndroid Build Coastguard Worker 311*fb1b10abSAndroid Build Coastguard Worker #endif // VPX_VP8_COMMON_BLOCKD_H_ 312