| 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 |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 B_MODE_COUNT | 130 B_MODE_COUNT |
| 131 } B_PREDICTION_MODE; | 131 } B_PREDICTION_MODE; |
| 132 | 132 |
| 133 #define VP8_BINTRAMODES (B_HU_PRED + 1) /* 10 */ | 133 #define VP8_BINTRAMODES (B_HU_PRED + 1) /* 10 */ |
| 134 #define VP8_SUBMVREFS (1 + NEW4X4 - LEFT4X4) | 134 #define VP8_SUBMVREFS (1 + NEW4X4 - LEFT4X4) |
| 135 | 135 |
| 136 /* For keyframes, intra block modes are predicted by the (already decoded) | 136 /* For keyframes, intra block modes are predicted by the (already decoded) |
| 137 modes for the Y blocks to the left and above us; for interframes, there | 137 modes for the Y blocks to the left and above us; for interframes, there |
| 138 is a single probability table. */ | 138 is a single probability table. */ |
| 139 | 139 |
| 140 typedef struct | 140 union b_mode_info |
| 141 { | 141 { |
| 142 B_PREDICTION_MODE mode; | 142 B_PREDICTION_MODE as_mode; |
| 143 union | 143 int_mv mv; |
| 144 { | 144 }; |
| 145 int as_int; | |
| 146 MV as_mv; | |
| 147 } mv; | |
| 148 } B_MODE_INFO; | |
| 149 | |
| 150 | 145 |
| 151 typedef enum | 146 typedef enum |
| 152 { | 147 { |
| 153 INTRA_FRAME = 0, | 148 INTRA_FRAME = 0, |
| 154 LAST_FRAME = 1, | 149 LAST_FRAME = 1, |
| 155 GOLDEN_FRAME = 2, | 150 GOLDEN_FRAME = 2, |
| 156 ALTREF_FRAME = 3, | 151 ALTREF_FRAME = 3, |
| 157 MAX_REF_FRAMES = 4 | 152 MAX_REF_FRAMES = 4 |
| 158 } MV_REFERENCE_FRAME; | 153 } MV_REFERENCE_FRAME; |
| 159 | 154 |
| 160 typedef struct | 155 typedef struct |
| 161 { | 156 { |
| 162 MB_PREDICTION_MODE mode, uv_mode; | 157 MB_PREDICTION_MODE mode, uv_mode; |
| 163 MV_REFERENCE_FRAME ref_frame; | 158 MV_REFERENCE_FRAME ref_frame; |
| 164 union | 159 int_mv mv; |
| 165 { | |
| 166 int as_int; | |
| 167 MV as_mv; | |
| 168 } mv; | |
| 169 | 160 |
| 170 unsigned char partitioning; | 161 unsigned char partitioning; |
| 171 unsigned char mb_skip_coeff; /* does this mb
has coefficients at all, 1=no coefficients, 0=need decode tokens */ | 162 unsigned char mb_skip_coeff; /* does this mb
has coefficients at all, 1=no coefficients, 0=need decode tokens */ |
| 172 unsigned char dc_diff; | |
| 173 unsigned char need_to_clamp_mvs; | 163 unsigned char need_to_clamp_mvs; |
| 174 | |
| 175 unsigned char segment_id; /* Which set of segmentation para
meters should be used for this MB */ | 164 unsigned char segment_id; /* Which set of segmentation para
meters should be used for this MB */ |
| 176 | |
| 177 unsigned char force_no_skip; /* encoder only */ | |
| 178 } MB_MODE_INFO; | 165 } MB_MODE_INFO; |
| 179 | 166 |
| 180 | |
| 181 typedef struct | 167 typedef struct |
| 182 { | 168 { |
| 183 MB_MODE_INFO mbmi; | 169 MB_MODE_INFO mbmi; |
| 184 B_MODE_INFO bmi[16]; | 170 union b_mode_info bmi[16]; |
| 185 } MODE_INFO; | 171 } MODE_INFO; |
| 186 | 172 |
| 187 | |
| 188 typedef struct | 173 typedef struct |
| 189 { | 174 { |
| 190 short *qcoeff; | 175 short *qcoeff; |
| 191 short *dqcoeff; | 176 short *dqcoeff; |
| 192 unsigned char *predictor; | 177 unsigned char *predictor; |
| 193 short *diff; | 178 short *diff; |
| 194 short *reference; | |
| 195 | |
| 196 short *dequant; | 179 short *dequant; |
| 197 | 180 |
| 198 /* 16 Y blocks, 4 U blocks, 4 V blocks each with 16 entries */ | 181 /* 16 Y blocks, 4 U blocks, 4 V blocks each with 16 entries */ |
| 199 unsigned char **base_pre; | 182 unsigned char **base_pre; |
| 200 int pre; | 183 int pre; |
| 201 int pre_stride; | 184 int pre_stride; |
| 202 | 185 |
| 203 unsigned char **base_dst; | 186 unsigned char **base_dst; |
| 204 int dst; | 187 int dst; |
| 205 int dst_stride; | 188 int dst_stride; |
| 206 | 189 |
| 207 int eob; | 190 int eob; |
| 208 | 191 |
| 209 B_MODE_INFO bmi; | 192 union b_mode_info bmi; |
| 210 | |
| 211 } BLOCKD; | 193 } BLOCKD; |
| 212 | 194 |
| 213 typedef struct | 195 typedef struct MacroBlockD |
| 214 { | 196 { |
| 215 DECLARE_ALIGNED(16, short, diff[400]); /* from idct diff */ | 197 DECLARE_ALIGNED(16, short, diff[400]); /* from idct diff */ |
| 216 DECLARE_ALIGNED(16, unsigned char, predictor[384]); | 198 DECLARE_ALIGNED(16, unsigned char, predictor[384]); |
| 217 /* not used DECLARE_ALIGNED(16, short, reference[384]); */ | |
| 218 DECLARE_ALIGNED(16, short, qcoeff[400]); | 199 DECLARE_ALIGNED(16, short, qcoeff[400]); |
| 219 DECLARE_ALIGNED(16, short, dqcoeff[400]); | 200 DECLARE_ALIGNED(16, short, dqcoeff[400]); |
| 220 DECLARE_ALIGNED(16, char, eobs[25]); | 201 DECLARE_ALIGNED(16, char, eobs[25]); |
| 221 | 202 |
| 222 /* 16 Y blocks, 4 U, 4 V, 1 DC 2nd order block, each with 16 entries. */ | 203 /* 16 Y blocks, 4 U, 4 V, 1 DC 2nd order block, each with 16 entries. */ |
| 223 BLOCKD block[25]; | 204 BLOCKD block[25]; |
| 224 | 205 |
| 225 YV12_BUFFER_CONFIG pre; /* Filtered copy of previous frame reconstruction */ | 206 YV12_BUFFER_CONFIG pre; /* Filtered copy of previous frame reconstruction */ |
| 226 YV12_BUFFER_CONFIG dst; | 207 YV12_BUFFER_CONFIG dst; |
| 227 | 208 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 signed char ref_lf_deltas[MAX_REF_LF_DELTAS]; /* 0 = Int
ra, Last, GF, ARF */ | 245 signed char ref_lf_deltas[MAX_REF_LF_DELTAS]; /* 0 = Int
ra, Last, GF, ARF */ |
| 265 signed char last_mode_lf_deltas[MAX_MODE_LF_DELTAS]; /*
0 = BPRED, ZERO_MV, MV, SPLIT */ | 246 signed char last_mode_lf_deltas[MAX_MODE_LF_DELTAS]; /*
0 = BPRED, ZERO_MV, MV, SPLIT */ |
| 266 signed char mode_lf_deltas[MAX_MODE_LF_DELTAS]; /*
0 = BPRED, ZERO_MV, MV, SPLIT */ | 247 signed char mode_lf_deltas[MAX_MODE_LF_DELTAS]; /*
0 = BPRED, ZERO_MV, MV, SPLIT */ |
| 267 | 248 |
| 268 /* Distance of MB away from frame edges */ | 249 /* Distance of MB away from frame edges */ |
| 269 int mb_to_left_edge; | 250 int mb_to_left_edge; |
| 270 int mb_to_right_edge; | 251 int mb_to_right_edge; |
| 271 int mb_to_top_edge; | 252 int mb_to_top_edge; |
| 272 int mb_to_bottom_edge; | 253 int mb_to_bottom_edge; |
| 273 | 254 |
| 255 int ref_frame_cost[MAX_REF_FRAMES]; |
| 256 |
| 257 |
| 274 unsigned int frames_since_golden; | 258 unsigned int frames_since_golden; |
| 275 unsigned int frames_till_alt_ref_frame; | 259 unsigned int frames_till_alt_ref_frame; |
| 276 vp8_subpix_fn_t subpixel_predict; | 260 vp8_subpix_fn_t subpixel_predict; |
| 277 vp8_subpix_fn_t subpixel_predict8x4; | 261 vp8_subpix_fn_t subpixel_predict8x4; |
| 278 vp8_subpix_fn_t subpixel_predict8x8; | 262 vp8_subpix_fn_t subpixel_predict8x8; |
| 279 vp8_subpix_fn_t subpixel_predict16x16; | 263 vp8_subpix_fn_t subpixel_predict16x16; |
| 280 | 264 |
| 281 void *current_bc; | 265 void *current_bc; |
| 282 | 266 |
| 283 int corrupted; | 267 int corrupted; |
| 284 | 268 |
| 269 #if ARCH_X86 || ARCH_X86_64 |
| 270 /* This is an intermediate buffer currently used in sub-pixel motion search |
| 271 * to keep a copy of the reference area. This buffer can be used for other |
| 272 * purpose. |
| 273 */ |
| 274 DECLARE_ALIGNED(32, unsigned char, y_buf[22*32]); |
| 275 #endif |
| 276 |
| 285 #if CONFIG_RUNTIME_CPU_DETECT | 277 #if CONFIG_RUNTIME_CPU_DETECT |
| 286 struct VP8_COMMON_RTCD *rtcd; | 278 struct VP8_COMMON_RTCD *rtcd; |
| 287 #endif | 279 #endif |
| 288 } MACROBLOCKD; | 280 } MACROBLOCKD; |
| 289 | 281 |
| 290 | 282 |
| 291 extern void vp8_build_block_doffsets(MACROBLOCKD *x); | 283 extern void vp8_build_block_doffsets(MACROBLOCKD *x); |
| 292 extern void vp8_setup_block_dptrs(MACROBLOCKD *x); | 284 extern void vp8_setup_block_dptrs(MACROBLOCKD *x); |
| 293 | 285 |
| 286 static void update_blockd_bmi(MACROBLOCKD *xd) |
| 287 { |
| 288 int i; |
| 289 int is_4x4; |
| 290 is_4x4 = (xd->mode_info_context->mbmi.mode == SPLITMV) || |
| 291 (xd->mode_info_context->mbmi.mode == B_PRED); |
| 292 |
| 293 if (is_4x4) |
| 294 { |
| 295 for (i = 0; i < 16; i++) |
| 296 { |
| 297 xd->block[i].bmi = xd->mode_info_context->bmi[i]; |
| 298 } |
| 299 } |
| 300 } |
| 301 |
| 294 #endif /* __INC_BLOCKD_H */ | 302 #endif /* __INC_BLOCKD_H */ |
| OLD | NEW |