| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. | 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| 11 | 11 |
| 12 #ifndef VP9_COMMON_VP9_BLOCKD_H_ | 12 #ifndef VP9_COMMON_VP9_BLOCKD_H_ |
| 13 #define VP9_COMMON_VP9_BLOCKD_H_ | 13 #define VP9_COMMON_VP9_BLOCKD_H_ |
| 14 | 14 |
| 15 void vpx_log(const char *format, ...); | 15 void vpx_log(const char *format, ...); |
| 16 | 16 |
| 17 #include "vpx_ports/config.h" | 17 #include "./vpx_config.h" |
| 18 #include "vpx_scale/yv12config.h" | 18 #include "vpx_scale/yv12config.h" |
| 19 #include "vp9/common/vp9_mv.h" | 19 #include "vp9/common/vp9_mv.h" |
| 20 #include "vp9/common/vp9_treecoder.h" | 20 #include "vp9/common/vp9_treecoder.h" |
| 21 #include "vp9/common/vp9_subpixel.h" | 21 #include "vp9/common/vp9_subpixel.h" |
| 22 #include "vpx_ports/mem.h" | 22 #include "vpx_ports/mem.h" |
| 23 #include "vp9/common/vp9_common.h" | 23 #include "vp9/common/vp9_common.h" |
| 24 | 24 |
| 25 #define TRUE 1 | 25 #define TRUE 1 |
| 26 #define FALSE 0 | 26 #define FALSE 0 |
| 27 | 27 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 38 | 38 |
| 39 #define MAX_MB_SEGMENTS 4 | 39 #define MAX_MB_SEGMENTS 4 |
| 40 | 40 |
| 41 #define MAX_REF_LF_DELTAS 4 | 41 #define MAX_REF_LF_DELTAS 4 |
| 42 #define MAX_MODE_LF_DELTAS 4 | 42 #define MAX_MODE_LF_DELTAS 4 |
| 43 | 43 |
| 44 /* Segment Feature Masks */ | 44 /* Segment Feature Masks */ |
| 45 #define SEGMENT_DELTADATA 0 | 45 #define SEGMENT_DELTADATA 0 |
| 46 #define SEGMENT_ABSDATA 1 | 46 #define SEGMENT_ABSDATA 1 |
| 47 #define MAX_MV_REFS 9 | 47 #define MAX_MV_REFS 9 |
| 48 #define MAX_MV_REF_CANDIDATES 4 |
| 49 |
| 50 #if CONFIG_DWTDCTHYBRID |
| 51 #define DWT_MAX_LENGTH 64 |
| 52 #define DWT_TYPE 26 // 26/53/97 |
| 53 #define DWT_PRECISION_BITS 2 |
| 54 #define DWT_PRECISION_RND ((1 << DWT_PRECISION_BITS) / 2) |
| 55 |
| 56 #define DWTDCT16X16 0 |
| 57 #define DWTDCT16X16_LEAN 1 |
| 58 #define DWTDCT8X8 2 |
| 59 #define DWTDCT_TYPE DWTDCT16X16_LEAN |
| 60 #endif |
| 48 | 61 |
| 49 typedef struct { | 62 typedef struct { |
| 50 int r, c; | 63 int r, c; |
| 51 } POS; | 64 } POS; |
| 52 | 65 |
| 53 typedef enum PlaneType { | 66 typedef enum PlaneType { |
| 54 PLANE_TYPE_Y_NO_DC = 0, | 67 PLANE_TYPE_Y_NO_DC = 0, |
| 55 PLANE_TYPE_Y2, | 68 PLANE_TYPE_Y2, |
| 56 PLANE_TYPE_UV, | 69 PLANE_TYPE_UV, |
| 57 PLANE_TYPE_Y_WITH_DC, | 70 PLANE_TYPE_Y_WITH_DC, |
| 58 } PLANE_TYPE; | 71 } PLANE_TYPE; |
| 59 | 72 |
| 60 typedef char ENTROPY_CONTEXT; | 73 typedef char ENTROPY_CONTEXT; |
| 61 typedef struct { | 74 typedef struct { |
| 62 ENTROPY_CONTEXT y1[4]; | 75 ENTROPY_CONTEXT y1[4]; |
| 63 ENTROPY_CONTEXT u[2]; | 76 ENTROPY_CONTEXT u[2]; |
| 64 ENTROPY_CONTEXT v[2]; | 77 ENTROPY_CONTEXT v[2]; |
| 65 ENTROPY_CONTEXT y2; | 78 ENTROPY_CONTEXT y2; |
| 66 } ENTROPY_CONTEXT_PLANES; | 79 } ENTROPY_CONTEXT_PLANES; |
| 67 | 80 |
| 68 extern const unsigned char vp9_block2left[25]; | |
| 69 extern const unsigned char vp9_block2above[25]; | |
| 70 extern const unsigned char vp9_block2left_8x8[25]; | |
| 71 extern const unsigned char vp9_block2above_8x8[25]; | |
| 72 | |
| 73 #define VP9_COMBINEENTROPYCONTEXTS( Dest, A, B) \ | 81 #define VP9_COMBINEENTROPYCONTEXTS( Dest, A, B) \ |
| 74 Dest = ((A)!=0) + ((B)!=0); | 82 Dest = ((A)!=0) + ((B)!=0); |
| 75 | 83 |
| 76 typedef enum { | 84 typedef enum { |
| 77 KEY_FRAME = 0, | 85 KEY_FRAME = 0, |
| 78 INTER_FRAME = 1 | 86 INTER_FRAME = 1 |
| 79 } FRAME_TYPE; | 87 } FRAME_TYPE; |
| 80 | 88 |
| 81 typedef enum | 89 typedef enum |
| 82 { | 90 { |
| 83 SIXTAP = 0, | 91 #if CONFIG_ENABLE_6TAP |
| 84 BILINEAR = 1, | 92 SIXTAP, |
| 85 EIGHTTAP = 2, | 93 #endif |
| 86 EIGHTTAP_SHARP = 3, | 94 EIGHTTAP_SMOOTH, |
| 95 EIGHTTAP, |
| 96 EIGHTTAP_SHARP, |
| 97 BILINEAR, |
| 87 SWITCHABLE /* should be the last one */ | 98 SWITCHABLE /* should be the last one */ |
| 88 } INTERPOLATIONFILTERTYPE; | 99 } INTERPOLATIONFILTERTYPE; |
| 89 | 100 |
| 90 typedef enum | 101 typedef enum |
| 91 { | 102 { |
| 92 DC_PRED, /* average of above and left pixels */ | 103 DC_PRED, /* average of above and left pixels */ |
| 93 V_PRED, /* vertical prediction */ | 104 V_PRED, /* vertical prediction */ |
| 94 H_PRED, /* horizontal prediction */ | 105 H_PRED, /* horizontal prediction */ |
| 95 D45_PRED, /* Directional 45 deg prediction [anti-clockwise from 0 d
eg hor] */ | 106 D45_PRED, /* Directional 45 deg prediction [anti-clockwise from 0 d
eg hor] */ |
| 96 D135_PRED, /* Directional 135 deg prediction [anti-clockwise from 0 d
eg hor] */ | 107 D135_PRED, /* Directional 135 deg prediction [anti-clockwise from 0 d
eg hor] */ |
| 97 D117_PRED, /* Directional 112 deg prediction [anti-clockwise from 0 d
eg hor] */ | 108 D117_PRED, /* Directional 112 deg prediction [anti-clockwise from 0 d
eg hor] */ |
| 98 D153_PRED, /* Directional 157 deg prediction [anti-clockwise from 0 d
eg hor] */ | 109 D153_PRED, /* Directional 157 deg prediction [anti-clockwise from 0 d
eg hor] */ |
| 99 D27_PRED, /* Directional 22 deg prediction [anti-clockwise from 0 d
eg hor] */ | 110 D27_PRED, /* Directional 22 deg prediction [anti-clockwise from 0 d
eg hor] */ |
| 100 D63_PRED, /* Directional 67 deg prediction [anti-clockwise from 0 d
eg hor] */ | 111 D63_PRED, /* Directional 67 deg prediction [anti-clockwise from 0 d
eg hor] */ |
| 101 TM_PRED, /* Truemotion prediction */ | 112 TM_PRED, /* Truemotion prediction */ |
| 102 I8X8_PRED, /* 8x8 based prediction, each 8x8 has its own prediction m
ode */ | 113 I8X8_PRED, /* 8x8 based prediction, each 8x8 has its own prediction m
ode */ |
| 103 B_PRED, /* block based prediction, each block has its own predicti
on mode */ | 114 B_PRED, /* block based prediction, each block has its own predicti
on mode */ |
| 104 | |
| 105 NEARESTMV, | 115 NEARESTMV, |
| 106 NEARMV, | 116 NEARMV, |
| 107 ZEROMV, | 117 ZEROMV, |
| 108 NEWMV, | 118 NEWMV, |
| 109 SPLITMV, | 119 SPLITMV, |
| 110 | |
| 111 MB_MODE_COUNT | 120 MB_MODE_COUNT |
| 112 } MB_PREDICTION_MODE; | 121 } MB_PREDICTION_MODE; |
| 113 | 122 |
| 114 // Segment level features. | 123 // Segment level features. |
| 115 typedef enum { | 124 typedef enum { |
| 116 SEG_LVL_ALT_Q = 0, // Use alternate Quantizer .... | 125 SEG_LVL_ALT_Q = 0, // Use alternate Quantizer .... |
| 117 SEG_LVL_ALT_LF = 1, // Use alternate loop filter value... | 126 SEG_LVL_ALT_LF = 1, // Use alternate loop filter value... |
| 118 SEG_LVL_REF_FRAME = 2, // Optional Segment reference frame | 127 SEG_LVL_REF_FRAME = 2, // Optional Segment reference frame |
| 119 SEG_LVL_MODE = 3, // Optional Segment mode | 128 SEG_LVL_MODE = 3, // Optional Segment mode |
| 120 SEG_LVL_EOB = 4, // EOB end stop marker. | 129 SEG_LVL_EOB = 4, // EOB end stop marker. |
| 121 SEG_LVL_TRANSFORM = 5, // Block transform size. | 130 SEG_LVL_TRANSFORM = 5, // Block transform size. |
| 122 SEG_LVL_MAX = 6 // Number of MB level features supported | 131 SEG_LVL_MAX = 6 // Number of MB level features supported |
| 123 | |
| 124 } SEG_LVL_FEATURES; | 132 } SEG_LVL_FEATURES; |
| 125 | 133 |
| 126 // Segment level features. | 134 // Segment level features. |
| 127 typedef enum { | 135 typedef enum { |
| 128 TX_4X4, // 4x4 dct transform | 136 TX_4X4 = 0, // 4x4 dct transform |
| 129 TX_8X8, // 8x8 dct transform | 137 TX_8X8 = 1, // 8x8 dct transform |
| 130 TX_16X16, // 16x16 dct transform | 138 TX_16X16 = 2, // 16x16 dct transform |
| 131 TX_SIZE_MAX // Number of different transforms available | 139 TX_SIZE_MAX_MB = 3, // Number of different transforms available |
| 140 TX_32X32 = TX_SIZE_MAX_MB, // 32x32 dct transform |
| 141 TX_SIZE_MAX_SB, // Number of transforms available to SBs |
| 132 } TX_SIZE; | 142 } TX_SIZE; |
| 133 | 143 |
| 134 typedef enum { | 144 typedef enum { |
| 135 DCT_DCT = 0, // DCT in both horizontal and vertical | 145 DCT_DCT = 0, // DCT in both horizontal and vertical |
| 136 ADST_DCT = 1, // ADST in vertical, DCT in horizontal | 146 ADST_DCT = 1, // ADST in vertical, DCT in horizontal |
| 137 DCT_ADST = 2, // DCT in vertical, ADST in horizontal | 147 DCT_ADST = 2, // DCT in vertical, ADST in horizontal |
| 138 ADST_ADST = 3 // ADST in both directions | 148 ADST_ADST = 3 // ADST in both directions |
| 139 } TX_TYPE; | 149 } TX_TYPE; |
| 140 | 150 |
| 141 #define VP9_YMODES (B_PRED + 1) | 151 #define VP9_YMODES (B_PRED + 1) |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 } SPLITMV_PARTITIONING_TYPE; | 208 } SPLITMV_PARTITIONING_TYPE; |
| 199 | 209 |
| 200 /* For keyframes, intra block modes are predicted by the (already decoded) | 210 /* For keyframes, intra block modes are predicted by the (already decoded) |
| 201 modes for the Y blocks to the left and above us; for interframes, there | 211 modes for the Y blocks to the left and above us; for interframes, there |
| 202 is a single probability table. */ | 212 is a single probability table. */ |
| 203 | 213 |
| 204 union b_mode_info { | 214 union b_mode_info { |
| 205 struct { | 215 struct { |
| 206 B_PREDICTION_MODE first; | 216 B_PREDICTION_MODE first; |
| 207 TX_TYPE tx_type; | 217 TX_TYPE tx_type; |
| 208 #if CONFIG_COMP_INTRA_PRED | |
| 209 B_PREDICTION_MODE second; | |
| 210 #endif | |
| 211 #if CONFIG_NEWBINTRAMODES | 218 #if CONFIG_NEWBINTRAMODES |
| 212 B_PREDICTION_MODE context; | 219 B_PREDICTION_MODE context; |
| 213 #endif | 220 #endif |
| 214 } as_mode; | 221 } as_mode; |
| 215 struct { | 222 struct { |
| 216 int_mv first; | 223 int_mv first; |
| 217 int_mv second; | 224 int_mv second; |
| 218 } as_mv; | 225 } as_mv; |
| 219 }; | 226 }; |
| 220 | 227 |
| 221 typedef enum { | 228 typedef enum { |
| 222 NONE = -1, | 229 NONE = -1, |
| 223 INTRA_FRAME = 0, | 230 INTRA_FRAME = 0, |
| 224 LAST_FRAME = 1, | 231 LAST_FRAME = 1, |
| 225 GOLDEN_FRAME = 2, | 232 GOLDEN_FRAME = 2, |
| 226 ALTREF_FRAME = 3, | 233 ALTREF_FRAME = 3, |
| 227 MAX_REF_FRAMES = 4 | 234 MAX_REF_FRAMES = 4 |
| 228 } MV_REFERENCE_FRAME; | 235 } MV_REFERENCE_FRAME; |
| 229 | 236 |
| 237 typedef enum { |
| 238 BLOCK_SIZE_MB16X16 = 0, |
| 239 BLOCK_SIZE_SB32X32 = 1, |
| 240 BLOCK_SIZE_SB64X64 = 2, |
| 241 } BLOCK_SIZE_TYPE; |
| 242 |
| 230 typedef struct { | 243 typedef struct { |
| 231 MB_PREDICTION_MODE mode, uv_mode; | 244 MB_PREDICTION_MODE mode, uv_mode; |
| 232 #if CONFIG_COMP_INTRA_PRED | |
| 233 MB_PREDICTION_MODE second_mode, second_uv_mode; | |
| 234 #endif | |
| 235 #if CONFIG_COMP_INTERINTRA_PRED | 245 #if CONFIG_COMP_INTERINTRA_PRED |
| 236 MB_PREDICTION_MODE interintra_mode, interintra_uv_mode; | 246 MB_PREDICTION_MODE interintra_mode, interintra_uv_mode; |
| 237 #endif | 247 #endif |
| 238 MV_REFERENCE_FRAME ref_frame, second_ref_frame; | 248 MV_REFERENCE_FRAME ref_frame, second_ref_frame; |
| 239 TX_SIZE txfm_size; | 249 TX_SIZE txfm_size; |
| 240 int_mv mv[2]; // for each reference frame used | 250 int_mv mv[2]; // for each reference frame used |
| 241 int_mv ref_mvs[MAX_REF_FRAMES][MAX_MV_REFS]; | 251 int_mv ref_mvs[MAX_REF_FRAMES][MAX_MV_REF_CANDIDATES]; |
| 242 int_mv best_mv, best_second_mv; | 252 int_mv best_mv, best_second_mv; |
| 243 #if CONFIG_NEW_MVREF | 253 #if CONFIG_NEW_MVREF |
| 244 int best_index, best_second_index; | 254 int best_index, best_second_index; |
| 245 #endif | 255 #endif |
| 246 | 256 |
| 247 int mb_mode_context[MAX_REF_FRAMES]; | 257 int mb_mode_context[MAX_REF_FRAMES]; |
| 248 | 258 |
| 249 SPLITMV_PARTITIONING_TYPE partitioning; | 259 SPLITMV_PARTITIONING_TYPE partitioning; |
| 250 unsigned char mb_skip_coeff; /* does this mb ha
s coefficients at all, 1=no coefficients, 0=need decode tokens */ | 260 unsigned char mb_skip_coeff; /* does this mb ha
s coefficients at all, 1=no coefficients, 0=need decode tokens */ |
| 251 unsigned char need_to_clamp_mvs; | 261 unsigned char need_to_clamp_mvs; |
| 252 unsigned char need_to_clamp_secondmv; | 262 unsigned char need_to_clamp_secondmv; |
| 253 unsigned char segment_id; /* Which set of segmentation parame
ters should be used for this MB */ | 263 unsigned char segment_id; /* Which set of segmentation parame
ters should be used for this MB */ |
| 254 | 264 |
| 255 // Flags used for prediction status of various bistream signals | 265 // Flags used for prediction status of various bistream signals |
| 256 unsigned char seg_id_predicted; | 266 unsigned char seg_id_predicted; |
| 257 unsigned char ref_predicted; | 267 unsigned char ref_predicted; |
| 258 | 268 |
| 259 // Indicates if the mb is part of the image (1) vs border (0) | 269 // Indicates if the mb is part of the image (1) vs border (0) |
| 260 // This can be useful in determining whether the MB provides | 270 // This can be useful in determining whether the MB provides |
| 261 // a valid predictor | 271 // a valid predictor |
| 262 unsigned char mb_in_image; | 272 unsigned char mb_in_image; |
| 263 | 273 |
| 264 #if CONFIG_PRED_FILTER | 274 INTERPOLATIONFILTERTYPE interp_filter; |
| 265 // Flag to turn prediction signal filter on(1)/off(0 ) at the MB level | |
| 266 unsigned int pred_filter_enabled; | |
| 267 #endif | |
| 268 INTERPOLATIONFILTERTYPE interp_filter; | |
| 269 | 275 |
| 270 #if CONFIG_SUPERBLOCKS | 276 BLOCK_SIZE_TYPE sb_type; |
| 271 // FIXME need a SB array of 4 MB_MODE_INFOs that | |
| 272 // only needs one encoded_as_sb. | |
| 273 unsigned char encoded_as_sb; | |
| 274 #endif | |
| 275 } MB_MODE_INFO; | 277 } MB_MODE_INFO; |
| 276 | 278 |
| 277 typedef struct { | 279 typedef struct { |
| 278 MB_MODE_INFO mbmi; | 280 MB_MODE_INFO mbmi; |
| 279 union b_mode_info bmi[16]; | 281 union b_mode_info bmi[16]; |
| 280 } MODE_INFO; | 282 } MODE_INFO; |
| 281 | 283 |
| 282 typedef struct blockd { | 284 typedef struct blockd { |
| 283 short *qcoeff; | 285 int16_t *qcoeff; |
| 284 short *dqcoeff; | 286 int16_t *dqcoeff; |
| 285 unsigned char *predictor; | 287 uint8_t *predictor; |
| 286 short *diff; | 288 int16_t *diff; |
| 287 short *dequant; | 289 int16_t *dequant; |
| 288 | 290 |
| 289 /* 16 Y blocks, 4 U blocks, 4 V blocks each with 16 entries */ | 291 /* 16 Y blocks, 4 U blocks, 4 V blocks each with 16 entries */ |
| 290 unsigned char **base_pre; | 292 uint8_t **base_pre; |
| 291 unsigned char **base_second_pre; | 293 uint8_t **base_second_pre; |
| 292 int pre; | 294 int pre; |
| 293 int pre_stride; | 295 int pre_stride; |
| 294 | 296 |
| 295 unsigned char **base_dst; | 297 uint8_t **base_dst; |
| 296 int dst; | 298 int dst; |
| 297 int dst_stride; | 299 int dst_stride; |
| 298 | 300 |
| 299 int eob; | 301 int eob; |
| 300 | 302 |
| 301 union b_mode_info bmi; | 303 union b_mode_info bmi; |
| 302 } BLOCKD; | 304 } BLOCKD; |
| 303 | 305 |
| 306 typedef struct superblockd { |
| 307 /* 32x32 Y and 16x16 U/V. No 2nd order transform yet. */ |
| 308 DECLARE_ALIGNED(16, int16_t, diff[32*32+16*16*2]); |
| 309 DECLARE_ALIGNED(16, int16_t, qcoeff[32*32+16*16*2]); |
| 310 DECLARE_ALIGNED(16, int16_t, dqcoeff[32*32+16*16*2]); |
| 311 } SUPERBLOCKD; |
| 312 |
| 304 typedef struct macroblockd { | 313 typedef struct macroblockd { |
| 305 DECLARE_ALIGNED(16, short, diff[400]); /* from idct diff */ | 314 DECLARE_ALIGNED(16, int16_t, diff[400]); /* from idct diff */ |
| 306 DECLARE_ALIGNED(16, unsigned char, predictor[384]); | 315 DECLARE_ALIGNED(16, uint8_t, predictor[384]); |
| 307 DECLARE_ALIGNED(16, short, qcoeff[400]); | 316 DECLARE_ALIGNED(16, int16_t, qcoeff[400]); |
| 308 DECLARE_ALIGNED(16, short, dqcoeff[400]); | 317 DECLARE_ALIGNED(16, int16_t, dqcoeff[400]); |
| 309 DECLARE_ALIGNED(16, unsigned short, eobs[25]); | 318 DECLARE_ALIGNED(16, uint16_t, eobs[25]); |
| 319 |
| 320 SUPERBLOCKD sb_coeff_data; |
| 310 | 321 |
| 311 /* 16 Y blocks, 4 U, 4 V, 1 DC 2nd order block, each with 16 entries. */ | 322 /* 16 Y blocks, 4 U, 4 V, 1 DC 2nd order block, each with 16 entries. */ |
| 312 BLOCKD block[25]; | 323 BLOCKD block[25]; |
| 313 int fullpixel_mask; | 324 int fullpixel_mask; |
| 314 | 325 |
| 315 YV12_BUFFER_CONFIG pre; /* Filtered copy of previous frame reconstruction */ | 326 YV12_BUFFER_CONFIG pre; /* Filtered copy of previous frame reconstruction */ |
| 316 struct { | 327 struct { |
| 317 uint8_t *y_buffer, *u_buffer, *v_buffer; | 328 uint8_t *y_buffer, *u_buffer, *v_buffer; |
| 318 } second_pre; | 329 } second_pre; |
| 319 YV12_BUFFER_CONFIG dst; | 330 YV12_BUFFER_CONFIG dst; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 343 /* 0 (do not update) 1 (update) the macroblock segmentation feature data. */ | 354 /* 0 (do not update) 1 (update) the macroblock segmentation feature data. */ |
| 344 unsigned char mb_segment_abs_delta; | 355 unsigned char mb_segment_abs_delta; |
| 345 | 356 |
| 346 /* Per frame flags that define which MB level features (such as quantizer or l
oop filter level) */ | 357 /* Per frame flags that define which MB level features (such as quantizer or l
oop filter level) */ |
| 347 /* are enabled and when enabled the proabilities used to decode the per MB fla
gs in MB_MODE_INFO */ | 358 /* are enabled and when enabled the proabilities used to decode the per MB fla
gs in MB_MODE_INFO */ |
| 348 | 359 |
| 349 // Probability Tree used to code Segment number | 360 // Probability Tree used to code Segment number |
| 350 vp9_prob mb_segment_tree_probs[MB_FEATURE_TREE_PROBS]; | 361 vp9_prob mb_segment_tree_probs[MB_FEATURE_TREE_PROBS]; |
| 351 | 362 |
| 352 #if CONFIG_NEW_MVREF | 363 #if CONFIG_NEW_MVREF |
| 353 vp9_prob mb_mv_ref_id_probs[MAX_REF_FRAMES][3]; | 364 vp9_prob mb_mv_ref_probs[MAX_REF_FRAMES][MAX_MV_REF_CANDIDATES-1]; |
| 354 #endif | 365 #endif |
| 355 | 366 |
| 356 // Segment features | 367 // Segment features |
| 357 signed char segment_feature_data[MAX_MB_SEGMENTS][SEG_LVL_MAX]; | 368 signed char segment_feature_data[MAX_MB_SEGMENTS][SEG_LVL_MAX]; |
| 358 unsigned int segment_feature_mask[MAX_MB_SEGMENTS]; | 369 unsigned int segment_feature_mask[MAX_MB_SEGMENTS]; |
| 359 | 370 |
| 360 /* mode_based Loop filter adjustment */ | 371 /* mode_based Loop filter adjustment */ |
| 361 unsigned char mode_ref_lf_delta_enabled; | 372 unsigned char mode_ref_lf_delta_enabled; |
| 362 unsigned char mode_ref_lf_delta_update; | 373 unsigned char mode_ref_lf_delta_update; |
| 363 | 374 |
| 364 /* Delta values have the range +/- MAX_LOOP_FILTER */ | 375 /* Delta values have the range +/- MAX_LOOP_FILTER */ |
| 365 signed char last_ref_lf_deltas[MAX_REF_LF_DELTAS]; /* 0 = Intra
, Last, GF, ARF */ | 376 signed char last_ref_lf_deltas[MAX_REF_LF_DELTAS]; /* 0 = Intra
, Last, GF, ARF */ |
| 366 signed char ref_lf_deltas[MAX_REF_LF_DELTAS]; /* 0 = Intra
, Last, GF, ARF */ | 377 signed char ref_lf_deltas[MAX_REF_LF_DELTAS]; /* 0 = Intra
, Last, GF, ARF */ |
| 367 signed char last_mode_lf_deltas[MAX_MODE_LF_DELTAS]; /* 0 = BPRED
, ZERO_MV, MV, SPLIT */ | 378 signed char last_mode_lf_deltas[MAX_MODE_LF_DELTAS]; /* 0 = BPRED
, ZERO_MV, MV, SPLIT */ |
| 368 signed char mode_lf_deltas[MAX_MODE_LF_DELTAS]; /* 0 = BPRED
, ZERO_MV, MV, SPLIT */ | 379 signed char mode_lf_deltas[MAX_MODE_LF_DELTAS]; /* 0 = BPRED
, ZERO_MV, MV, SPLIT */ |
| 369 | 380 |
| 370 /* Distance of MB away from frame edges */ | 381 /* Distance of MB away from frame edges */ |
| 371 int mb_to_left_edge; | 382 int mb_to_left_edge; |
| 372 int mb_to_right_edge; | 383 int mb_to_right_edge; |
| 373 int mb_to_top_edge; | 384 int mb_to_top_edge; |
| 374 int mb_to_bottom_edge; | 385 int mb_to_bottom_edge; |
| 375 | 386 |
| 376 unsigned int frames_since_golden; | 387 unsigned int frames_since_golden; |
| 377 unsigned int frames_till_alt_ref_frame; | 388 unsigned int frames_till_alt_ref_frame; |
| 378 | 389 |
| 379 /* Inverse transform function pointers. */ | 390 /* Inverse transform function pointers. */ |
| 380 void (*inv_xform4x4_1_x8)(short *input, short *output, int pitch); | 391 void (*inv_xform4x4_1_x8)(int16_t *input, int16_t *output, int pitch); |
| 381 void (*inv_xform4x4_x8)(short *input, short *output, int pitch); | 392 void (*inv_xform4x4_x8)(int16_t *input, int16_t *output, int pitch); |
| 382 void (*inv_walsh4x4_1)(short *in, short *out); | 393 void (*inv_walsh4x4_1)(int16_t *in, int16_t *out); |
| 383 void (*inv_walsh4x4_lossless)(short *in, short *out); | 394 void (*inv_walsh4x4_lossless)(int16_t *in, int16_t *out); |
| 384 | 395 |
| 385 | 396 |
| 386 vp9_subpix_fn_t subpixel_predict; | 397 vp9_subpix_fn_t subpixel_predict4x4; |
| 387 vp9_subpix_fn_t subpixel_predict8x4; | 398 vp9_subpix_fn_t subpixel_predict8x4; |
| 388 vp9_subpix_fn_t subpixel_predict8x8; | 399 vp9_subpix_fn_t subpixel_predict8x8; |
| 389 vp9_subpix_fn_t subpixel_predict16x16; | 400 vp9_subpix_fn_t subpixel_predict16x16; |
| 390 vp9_subpix_fn_t subpixel_predict_avg; | 401 vp9_subpix_fn_t subpixel_predict_avg4x4; |
| 391 vp9_subpix_fn_t subpixel_predict_avg8x4; | 402 vp9_subpix_fn_t subpixel_predict_avg8x4; |
| 392 vp9_subpix_fn_t subpixel_predict_avg8x8; | 403 vp9_subpix_fn_t subpixel_predict_avg8x8; |
| 393 vp9_subpix_fn_t subpixel_predict_avg16x16; | 404 vp9_subpix_fn_t subpixel_predict_avg16x16; |
| 394 int allow_high_precision_mv; | 405 int allow_high_precision_mv; |
| 395 | 406 |
| 396 int corrupted; | 407 int corrupted; |
| 397 | 408 |
| 398 #if !CONFIG_SUPERBLOCKS && (ARCH_X86 || ARCH_X86_64) | 409 int sb_index; |
| 399 /* This is an intermediate buffer currently used in sub-pixel motion search | |
| 400 * to keep a copy of the reference area. This buffer can be used for other | |
| 401 * purpose. | |
| 402 */ | |
| 403 DECLARE_ALIGNED(32, unsigned char, y_buf[22 * 32]); | |
| 404 #endif | |
| 405 | |
| 406 int mb_index; // Index of the MB in the SB (0..3) | 410 int mb_index; // Index of the MB in the SB (0..3) |
| 407 int q_index; | 411 int q_index; |
| 408 | 412 |
| 409 } MACROBLOCKD; | 413 } MACROBLOCKD; |
| 410 | 414 |
| 411 #define ACTIVE_HT 110 // quantization stepsize threshold | 415 #define ACTIVE_HT 110 // quantization stepsize threshold |
| 412 | 416 |
| 413 #define ACTIVE_HT8 300 | 417 #define ACTIVE_HT8 300 |
| 414 | 418 |
| 415 #define ACTIVE_HT16 300 | 419 #define ACTIVE_HT16 300 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 break; | 487 break; |
| 484 #endif | 488 #endif |
| 485 | 489 |
| 486 default : | 490 default : |
| 487 tx_type = DCT_DCT; | 491 tx_type = DCT_DCT; |
| 488 break; | 492 break; |
| 489 } | 493 } |
| 490 return tx_type; | 494 return tx_type; |
| 491 } | 495 } |
| 492 | 496 |
| 497 extern const uint8_t vp9_block2left[TX_SIZE_MAX_SB][25]; |
| 498 extern const uint8_t vp9_block2above[TX_SIZE_MAX_SB][25]; |
| 499 |
| 493 #define USE_ADST_FOR_I16X16_8X8 0 | 500 #define USE_ADST_FOR_I16X16_8X8 0 |
| 494 #define USE_ADST_FOR_I16X16_4X4 0 | 501 #define USE_ADST_FOR_I16X16_4X4 0 |
| 495 #define USE_ADST_FOR_I8X8_4X4 1 | 502 #define USE_ADST_FOR_I8X8_4X4 1 |
| 496 #define USE_ADST_PERIPHERY_ONLY 1 | 503 #define USE_ADST_PERIPHERY_ONLY 1 |
| 497 | 504 |
| 498 static TX_TYPE get_tx_type_4x4(const MACROBLOCKD *xd, const BLOCKD *b) { | 505 static TX_TYPE get_tx_type_4x4(const MACROBLOCKD *xd, const BLOCKD *b) { |
| 499 // TODO(debargha): explore different patterns for ADST usage when blocksize | 506 // TODO(debargha): explore different patterns for ADST usage when blocksize |
| 500 // is smaller than the prediction size | 507 // is smaller than the prediction size |
| 501 TX_TYPE tx_type = DCT_DCT; | 508 TX_TYPE tx_type = DCT_DCT; |
| 502 int ib = (int)(b - xd->block); | 509 int ib = (int)(b - xd->block); |
| 503 if (ib >= 16) | 510 if (ib >= 16) |
| 504 return tx_type; | 511 return tx_type; |
| 505 #if CONFIG_SUPERBLOCKS | |
| 506 // TODO(rbultje, debargha): Explore ADST usage for superblocks | 512 // TODO(rbultje, debargha): Explore ADST usage for superblocks |
| 507 if (xd->mode_info_context->mbmi.encoded_as_sb) | 513 if (xd->mode_info_context->mbmi.sb_type) |
| 508 return tx_type; | 514 return tx_type; |
| 509 #endif | |
| 510 if (xd->mode_info_context->mbmi.mode == B_PRED && | 515 if (xd->mode_info_context->mbmi.mode == B_PRED && |
| 511 xd->q_index < ACTIVE_HT) { | 516 xd->q_index < ACTIVE_HT) { |
| 512 tx_type = txfm_map( | 517 tx_type = txfm_map( |
| 513 #if CONFIG_NEWBINTRAMODES | 518 #if CONFIG_NEWBINTRAMODES |
| 514 b->bmi.as_mode.first == B_CONTEXT_PRED ? b->bmi.as_mode.context : | 519 b->bmi.as_mode.first == B_CONTEXT_PRED ? b->bmi.as_mode.context : |
| 515 #endif | 520 #endif |
| 516 b->bmi.as_mode.first); | 521 b->bmi.as_mode.first); |
| 517 } else if (xd->mode_info_context->mbmi.mode == I8X8_PRED && | 522 } else if (xd->mode_info_context->mbmi.mode == I8X8_PRED && |
| 518 xd->q_index < ACTIVE_HT) { | 523 xd->q_index < ACTIVE_HT) { |
| 519 #if USE_ADST_FOR_I8X8_4X4 | 524 #if USE_ADST_FOR_I8X8_4X4 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 552 return tx_type; | 557 return tx_type; |
| 553 } | 558 } |
| 554 | 559 |
| 555 static TX_TYPE get_tx_type_8x8(const MACROBLOCKD *xd, const BLOCKD *b) { | 560 static TX_TYPE get_tx_type_8x8(const MACROBLOCKD *xd, const BLOCKD *b) { |
| 556 // TODO(debargha): explore different patterns for ADST usage when blocksize | 561 // TODO(debargha): explore different patterns for ADST usage when blocksize |
| 557 // is smaller than the prediction size | 562 // is smaller than the prediction size |
| 558 TX_TYPE tx_type = DCT_DCT; | 563 TX_TYPE tx_type = DCT_DCT; |
| 559 int ib = (int)(b - xd->block); | 564 int ib = (int)(b - xd->block); |
| 560 if (ib >= 16) | 565 if (ib >= 16) |
| 561 return tx_type; | 566 return tx_type; |
| 562 #if CONFIG_SUPERBLOCKS | |
| 563 // TODO(rbultje, debargha): Explore ADST usage for superblocks | 567 // TODO(rbultje, debargha): Explore ADST usage for superblocks |
| 564 if (xd->mode_info_context->mbmi.encoded_as_sb) | 568 if (xd->mode_info_context->mbmi.sb_type) |
| 565 return tx_type; | 569 return tx_type; |
| 566 #endif | |
| 567 if (xd->mode_info_context->mbmi.mode == I8X8_PRED && | 570 if (xd->mode_info_context->mbmi.mode == I8X8_PRED && |
| 568 xd->q_index < ACTIVE_HT8) { | 571 xd->q_index < ACTIVE_HT8) { |
| 569 // TODO(rbultje): MB_PREDICTION_MODE / B_PREDICTION_MODE should be merged | 572 // TODO(rbultje): MB_PREDICTION_MODE / B_PREDICTION_MODE should be merged |
| 570 // or the relationship otherwise modified to address this type conversion. | 573 // or the relationship otherwise modified to address this type conversion. |
| 571 tx_type = txfm_map(pred_mode_conv( | 574 tx_type = txfm_map(pred_mode_conv( |
| 572 (MB_PREDICTION_MODE)b->bmi.as_mode.first)); | 575 (MB_PREDICTION_MODE)b->bmi.as_mode.first)); |
| 573 } else if (xd->mode_info_context->mbmi.mode < I8X8_PRED && | 576 } else if (xd->mode_info_context->mbmi.mode < I8X8_PRED && |
| 574 xd->q_index < ACTIVE_HT8) { | 577 xd->q_index < ACTIVE_HT8) { |
| 575 #if USE_ADST_FOR_I8X8_4X4 | 578 #if USE_ADST_FOR_I8X8_4X4 |
| 576 #if USE_ADST_PERIPHERY_ONLY | 579 #if USE_ADST_PERIPHERY_ONLY |
| (...skipping 10 matching lines...) Expand all Loading... |
| 587 #endif | 590 #endif |
| 588 } | 591 } |
| 589 return tx_type; | 592 return tx_type; |
| 590 } | 593 } |
| 591 | 594 |
| 592 static TX_TYPE get_tx_type_16x16(const MACROBLOCKD *xd, const BLOCKD *b) { | 595 static TX_TYPE get_tx_type_16x16(const MACROBLOCKD *xd, const BLOCKD *b) { |
| 593 TX_TYPE tx_type = DCT_DCT; | 596 TX_TYPE tx_type = DCT_DCT; |
| 594 int ib = (int)(b - xd->block); | 597 int ib = (int)(b - xd->block); |
| 595 if (ib >= 16) | 598 if (ib >= 16) |
| 596 return tx_type; | 599 return tx_type; |
| 597 #if CONFIG_SUPERBLOCKS | |
| 598 // TODO(rbultje, debargha): Explore ADST usage for superblocks | 600 // TODO(rbultje, debargha): Explore ADST usage for superblocks |
| 599 if (xd->mode_info_context->mbmi.encoded_as_sb) | 601 if (xd->mode_info_context->mbmi.sb_type) |
| 600 return tx_type; | 602 return tx_type; |
| 601 #endif | |
| 602 if (xd->mode_info_context->mbmi.mode < I8X8_PRED && | 603 if (xd->mode_info_context->mbmi.mode < I8X8_PRED && |
| 603 xd->q_index < ACTIVE_HT16) { | 604 xd->q_index < ACTIVE_HT16) { |
| 604 tx_type = txfm_map(pred_mode_conv(xd->mode_info_context->mbmi.mode)); | 605 tx_type = txfm_map(pred_mode_conv(xd->mode_info_context->mbmi.mode)); |
| 605 } | 606 } |
| 606 return tx_type; | 607 return tx_type; |
| 607 } | 608 } |
| 608 | 609 |
| 609 static TX_TYPE get_tx_type(const MACROBLOCKD *xd, const BLOCKD *b) { | 610 static TX_TYPE get_tx_type(const MACROBLOCKD *xd, const BLOCKD *b) { |
| 610 TX_TYPE tx_type = DCT_DCT; | 611 TX_TYPE tx_type = DCT_DCT; |
| 611 int ib = (int)(b - xd->block); | 612 int ib = (int)(b - xd->block); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 643 is_4x4 = (xd->mode_info_context->mbmi.mode == SPLITMV) || | 644 is_4x4 = (xd->mode_info_context->mbmi.mode == SPLITMV) || |
| 644 (xd->mode_info_context->mbmi.mode == I8X8_PRED) || | 645 (xd->mode_info_context->mbmi.mode == I8X8_PRED) || |
| 645 (xd->mode_info_context->mbmi.mode == B_PRED); | 646 (xd->mode_info_context->mbmi.mode == B_PRED); |
| 646 | 647 |
| 647 if (is_4x4) { | 648 if (is_4x4) { |
| 648 for (i = 0; i < 16; i++) { | 649 for (i = 0; i < 16; i++) { |
| 649 xd->block[i].bmi = xd->mode_info_context->bmi[i]; | 650 xd->block[i].bmi = xd->mode_info_context->bmi[i]; |
| 650 } | 651 } |
| 651 } | 652 } |
| 652 } | 653 } |
| 653 #endif /* __INC_BLOCKD_H */ | 654 #endif // VP9_COMMON_VP9_BLOCKD_H_ |
| OLD | NEW |