| 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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 | 53 |
| 54 mbd->mode_info_context = pc->mi + pc->mode_info_stride * (i + 1); | 54 mbd->mode_info_context = pc->mi + pc->mode_info_stride * (i + 1); |
| 55 mbd->mode_info_stride = pc->mode_info_stride; | 55 mbd->mode_info_stride = pc->mode_info_stride; |
| 56 | 56 |
| 57 mbd->frame_type = pc->frame_type; | 57 mbd->frame_type = pc->frame_type; |
| 58 mbd->pre = xd->pre; | 58 mbd->pre = xd->pre; |
| 59 mbd->dst = xd->dst; | 59 mbd->dst = xd->dst; |
| 60 | 60 |
| 61 mbd->segmentation_enabled = xd->segmentation_enabled; | 61 mbd->segmentation_enabled = xd->segmentation_enabled; |
| 62 mbd->mb_segement_abs_delta = xd->mb_segement_abs_delta; | 62 mbd->mb_segement_abs_delta = xd->mb_segement_abs_delta; |
| 63 vpx_memcpy(mbd->segment_feature_data, xd->segment_feature_data, sizeof(x
d->segment_feature_data)); | 63 memcpy(mbd->segment_feature_data, xd->segment_feature_data, sizeof(xd->s
egment_feature_data)); |
| 64 | 64 |
| 65 /*signed char ref_lf_deltas[MAX_REF_LF_DELTAS];*/ | 65 /*signed char ref_lf_deltas[MAX_REF_LF_DELTAS];*/ |
| 66 vpx_memcpy(mbd->ref_lf_deltas, xd->ref_lf_deltas, sizeof(xd->ref_lf_delt
as)); | 66 memcpy(mbd->ref_lf_deltas, xd->ref_lf_deltas, sizeof(xd->ref_lf_deltas))
; |
| 67 /*signed char mode_lf_deltas[MAX_MODE_LF_DELTAS];*/ | 67 /*signed char mode_lf_deltas[MAX_MODE_LF_DELTAS];*/ |
| 68 vpx_memcpy(mbd->mode_lf_deltas, xd->mode_lf_deltas, sizeof(xd->mode_lf_d
eltas)); | 68 memcpy(mbd->mode_lf_deltas, xd->mode_lf_deltas, sizeof(xd->mode_lf_delta
s)); |
| 69 /*unsigned char mode_ref_lf_delta_enabled; | 69 /*unsigned char mode_ref_lf_delta_enabled; |
| 70 unsigned char mode_ref_lf_delta_update;*/ | 70 unsigned char mode_ref_lf_delta_update;*/ |
| 71 mbd->mode_ref_lf_delta_enabled = xd->mode_ref_lf_delta_enabled; | 71 mbd->mode_ref_lf_delta_enabled = xd->mode_ref_lf_delta_enabled; |
| 72 mbd->mode_ref_lf_delta_update = xd->mode_ref_lf_delta_update; | 72 mbd->mode_ref_lf_delta_update = xd->mode_ref_lf_delta_update; |
| 73 | 73 |
| 74 mbd->current_bc = &pbi->mbc[0]; | 74 mbd->current_bc = &pbi->mbc[0]; |
| 75 | 75 |
| 76 vpx_memcpy(mbd->dequant_y1_dc, xd->dequant_y1_dc, sizeof(xd->dequant_y1_
dc)); | 76 memcpy(mbd->dequant_y1_dc, xd->dequant_y1_dc, sizeof(xd->dequant_y1_dc))
; |
| 77 vpx_memcpy(mbd->dequant_y1, xd->dequant_y1, sizeof(xd->dequant_y1)); | 77 memcpy(mbd->dequant_y1, xd->dequant_y1, sizeof(xd->dequant_y1)); |
| 78 vpx_memcpy(mbd->dequant_y2, xd->dequant_y2, sizeof(xd->dequant_y2)); | 78 memcpy(mbd->dequant_y2, xd->dequant_y2, sizeof(xd->dequant_y2)); |
| 79 vpx_memcpy(mbd->dequant_uv, xd->dequant_uv, sizeof(xd->dequant_uv)); | 79 memcpy(mbd->dequant_uv, xd->dequant_uv, sizeof(xd->dequant_uv)); |
| 80 | 80 |
| 81 mbd->fullpixel_mask = 0xffffffff; | 81 mbd->fullpixel_mask = 0xffffffff; |
| 82 | 82 |
| 83 if (pc->full_pixel) | 83 if (pc->full_pixel) |
| 84 mbd->fullpixel_mask = 0xfffffff8; | 84 mbd->fullpixel_mask = 0xfffffff8; |
| 85 | 85 |
| 86 } | 86 } |
| 87 | 87 |
| 88 for (i = 0; i < pc->mb_rows; i++) | 88 for (i = 0; i < pc->mb_rows; i++) |
| 89 pbi->mt_current_mb_col[i] = -1; | 89 pbi->mt_current_mb_col[i] = -1; |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 throw_residual = (!pbi->independent_partitions && | 130 throw_residual = (!pbi->independent_partitions && |
| 131 pbi->frame_corrupt_residual); | 131 pbi->frame_corrupt_residual); |
| 132 throw_residual = (throw_residual || vp8dx_bool_error(xd->current_bc)); | 132 throw_residual = (throw_residual || vp8dx_bool_error(xd->current_bc)); |
| 133 | 133 |
| 134 if ((mb_idx >= pbi->mvs_corrupt_from_mb || throw_residual)) | 134 if ((mb_idx >= pbi->mvs_corrupt_from_mb || throw_residual)) |
| 135 { | 135 { |
| 136 /* MB with corrupt residuals or corrupt mode/motion vectors. | 136 /* MB with corrupt residuals or corrupt mode/motion vectors. |
| 137 * Better to use the predictor as reconstruction. | 137 * Better to use the predictor as reconstruction. |
| 138 */ | 138 */ |
| 139 pbi->frame_corrupt_residual = 1; | 139 pbi->frame_corrupt_residual = 1; |
| 140 vpx_memset(xd->qcoeff, 0, sizeof(xd->qcoeff)); | 140 memset(xd->qcoeff, 0, sizeof(xd->qcoeff)); |
| 141 vp8_conceal_corrupt_mb(xd); | 141 vp8_conceal_corrupt_mb(xd); |
| 142 | 142 |
| 143 | 143 |
| 144 corruption_detected = 1; | 144 corruption_detected = 1; |
| 145 | 145 |
| 146 /* force idct to be skipped for B_PRED and use the | 146 /* force idct to be skipped for B_PRED and use the |
| 147 * prediction only for reconstruction | 147 * prediction only for reconstruction |
| 148 * */ | 148 * */ |
| 149 vpx_memset(xd->eobs, 0, 25); | 149 memset(xd->eobs, 0, 25); |
| 150 } | 150 } |
| 151 } | 151 } |
| 152 #endif | 152 #endif |
| 153 | 153 |
| 154 /* do prediction */ | 154 /* do prediction */ |
| 155 if (xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME) | 155 if (xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME) |
| 156 { | 156 { |
| 157 vp8_build_intra_predictors_mbuv_s(xd, | 157 vp8_build_intra_predictors_mbuv_s(xd, |
| 158 xd->recon_above[1], | 158 xd->recon_above[1], |
| 159 xd->recon_above[2], | 159 xd->recon_above[2], |
| (...skipping 12 matching lines...) Expand all Loading... |
| 172 xd->dst.y_buffer, | 172 xd->dst.y_buffer, |
| 173 xd->dst.y_stride); | 173 xd->dst.y_stride); |
| 174 } | 174 } |
| 175 else | 175 else |
| 176 { | 176 { |
| 177 short *DQC = xd->dequant_y1; | 177 short *DQC = xd->dequant_y1; |
| 178 int dst_stride = xd->dst.y_stride; | 178 int dst_stride = xd->dst.y_stride; |
| 179 | 179 |
| 180 /* clear out residual eob info */ | 180 /* clear out residual eob info */ |
| 181 if(xd->mode_info_context->mbmi.mb_skip_coeff) | 181 if(xd->mode_info_context->mbmi.mb_skip_coeff) |
| 182 vpx_memset(xd->eobs, 0, 25); | 182 memset(xd->eobs, 0, 25); |
| 183 | 183 |
| 184 intra_prediction_down_copy(xd, xd->recon_above[0] + 16); | 184 intra_prediction_down_copy(xd, xd->recon_above[0] + 16); |
| 185 | 185 |
| 186 for (i = 0; i < 16; i++) | 186 for (i = 0; i < 16; i++) |
| 187 { | 187 { |
| 188 BLOCKD *b = &xd->block[i]; | 188 BLOCKD *b = &xd->block[i]; |
| 189 unsigned char *dst = xd->dst.y_buffer + b->offset; | 189 unsigned char *dst = xd->dst.y_buffer + b->offset; |
| 190 B_PREDICTION_MODE b_mode = | 190 B_PREDICTION_MODE b_mode = |
| 191 xd->mode_info_context->bmi[i].as_mode; | 191 xd->mode_info_context->bmi[i].as_mode; |
| 192 unsigned char *Above; | 192 unsigned char *Above; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 222 if (xd->eobs[i] ) | 222 if (xd->eobs[i] ) |
| 223 { | 223 { |
| 224 if (xd->eobs[i] > 1) | 224 if (xd->eobs[i] > 1) |
| 225 { | 225 { |
| 226 vp8_dequant_idct_add(b->qcoeff, DQC, dst, dst_stride); | 226 vp8_dequant_idct_add(b->qcoeff, DQC, dst, dst_stride); |
| 227 } | 227 } |
| 228 else | 228 else |
| 229 { | 229 { |
| 230 vp8_dc_only_idct_add(b->qcoeff[0] * DQC[0], | 230 vp8_dc_only_idct_add(b->qcoeff[0] * DQC[0], |
| 231 dst, dst_stride, dst, dst_stride); | 231 dst, dst_stride, dst, dst_stride); |
| 232 vpx_memset(b->qcoeff, 0, 2 * sizeof(b->qcoeff[0])); | 232 memset(b->qcoeff, 0, 2 * sizeof(b->qcoeff[0])); |
| 233 } | 233 } |
| 234 } | 234 } |
| 235 } | 235 } |
| 236 } | 236 } |
| 237 } | 237 } |
| 238 else | 238 else |
| 239 { | 239 { |
| 240 vp8_build_inter_predictors_mb(xd); | 240 vp8_build_inter_predictors_mb(xd); |
| 241 } | 241 } |
| 242 | 242 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 259 { | 259 { |
| 260 BLOCKD *b = &xd->block[24]; | 260 BLOCKD *b = &xd->block[24]; |
| 261 | 261 |
| 262 /* do 2nd order transform on the dc block */ | 262 /* do 2nd order transform on the dc block */ |
| 263 if (xd->eobs[24] > 1) | 263 if (xd->eobs[24] > 1) |
| 264 { | 264 { |
| 265 vp8_dequantize_b(b, xd->dequant_y2); | 265 vp8_dequantize_b(b, xd->dequant_y2); |
| 266 | 266 |
| 267 vp8_short_inv_walsh4x4(&b->dqcoeff[0], | 267 vp8_short_inv_walsh4x4(&b->dqcoeff[0], |
| 268 xd->qcoeff); | 268 xd->qcoeff); |
| 269 vpx_memset(b->qcoeff, 0, 16 * sizeof(b->qcoeff[0])); | 269 memset(b->qcoeff, 0, 16 * sizeof(b->qcoeff[0])); |
| 270 } | 270 } |
| 271 else | 271 else |
| 272 { | 272 { |
| 273 b->dqcoeff[0] = b->qcoeff[0] * xd->dequant_y2[0]; | 273 b->dqcoeff[0] = b->qcoeff[0] * xd->dequant_y2[0]; |
| 274 vp8_short_inv_walsh4x4_1(&b->dqcoeff[0], | 274 vp8_short_inv_walsh4x4_1(&b->dqcoeff[0], |
| 275 xd->qcoeff); | 275 xd->qcoeff); |
| 276 vpx_memset(b->qcoeff, 0, 2 * sizeof(b->qcoeff[0])); | 276 memset(b->qcoeff, 0, 2 * sizeof(b->qcoeff[0])); |
| 277 } | 277 } |
| 278 | 278 |
| 279 /* override the dc dequant constant in order to preserve the | 279 /* override the dc dequant constant in order to preserve the |
| 280 * dc components | 280 * dc components |
| 281 */ | 281 */ |
| 282 DQC = xd->dequant_y1_dc; | 282 DQC = xd->dequant_y1_dc; |
| 283 } | 283 } |
| 284 | 284 |
| 285 vp8_dequant_idct_add_y_block | 285 vp8_dequant_idct_add_y_block |
| 286 (xd->qcoeff, DQC, | 286 (xd->qcoeff, DQC, |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 else | 353 else |
| 354 last_row_current_mb_col = &first_row_no_sync_above; | 354 last_row_current_mb_col = &first_row_no_sync_above; |
| 355 | 355 |
| 356 current_mb_col = &pbi->mt_current_mb_col[mb_row]; | 356 current_mb_col = &pbi->mt_current_mb_col[mb_row]; |
| 357 | 357 |
| 358 recon_yoffset = mb_row * recon_y_stride * 16; | 358 recon_yoffset = mb_row * recon_y_stride * 16; |
| 359 recon_uvoffset = mb_row * recon_uv_stride * 8; | 359 recon_uvoffset = mb_row * recon_uv_stride * 8; |
| 360 | 360 |
| 361 /* reset contexts */ | 361 /* reset contexts */ |
| 362 xd->above_context = pc->above_context; | 362 xd->above_context = pc->above_context; |
| 363 vpx_memset(xd->left_context, 0, sizeof(ENTROPY_CONTEXT_PLANES)); | 363 memset(xd->left_context, 0, sizeof(ENTROPY_CONTEXT_PLANES)); |
| 364 | 364 |
| 365 xd->left_available = 0; | 365 xd->left_available = 0; |
| 366 | 366 |
| 367 xd->mb_to_top_edge = -((mb_row * 16)) << 3; | 367 xd->mb_to_top_edge = -((mb_row * 16)) << 3; |
| 368 xd->mb_to_bottom_edge = ((pc->mb_rows - 1 - mb_row) * 16) << 3; | 368 xd->mb_to_bottom_edge = ((pc->mb_rows - 1 - mb_row) * 16) << 3; |
| 369 | 369 |
| 370 if (pbi->common.filter_level) | 370 if (pbi->common.filter_level) |
| 371 { | 371 { |
| 372 xd->recon_above[0] = pbi->mt_yabove_row[mb_row] + 0*16 +32; | 372 xd->recon_above[0] = pbi->mt_yabove_row[mb_row] + 0*16 +32; |
| 373 xd->recon_above[1] = pbi->mt_uabove_row[mb_row] + 0*8 +16; | 373 xd->recon_above[1] = pbi->mt_uabove_row[mb_row] + 0*8 +16; |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 492 | 492 |
| 493 const int mode_index = lfi_n->mode_lf_lut[xd->mode_info_context->
mbmi.mode]; | 493 const int mode_index = lfi_n->mode_lf_lut[xd->mode_info_context->
mbmi.mode]; |
| 494 const int seg = xd->mode_info_context->mbmi.segment_id; | 494 const int seg = xd->mode_info_context->mbmi.segment_id; |
| 495 const int ref_frame = xd->mode_info_context->mbmi.ref_frame; | 495 const int ref_frame = xd->mode_info_context->mbmi.ref_frame; |
| 496 | 496 |
| 497 filter_level = lfi_n->lvl[seg][ref_frame][mode_index]; | 497 filter_level = lfi_n->lvl[seg][ref_frame][mode_index]; |
| 498 | 498 |
| 499 if( mb_row != pc->mb_rows-1 ) | 499 if( mb_row != pc->mb_rows-1 ) |
| 500 { | 500 { |
| 501 /* Save decoded MB last row data for next-row decoding */ | 501 /* Save decoded MB last row data for next-row decoding */ |
| 502 vpx_memcpy((pbi->mt_yabove_row[mb_row + 1] + 32 + mb_col*16),
(xd->dst.y_buffer + 15 * recon_y_stride), 16); | 502 memcpy((pbi->mt_yabove_row[mb_row + 1] + 32 + mb_col*16), (xd
->dst.y_buffer + 15 * recon_y_stride), 16); |
| 503 vpx_memcpy((pbi->mt_uabove_row[mb_row + 1] + 16 + mb_col*8),
(xd->dst.u_buffer + 7 * recon_uv_stride), 8); | 503 memcpy((pbi->mt_uabove_row[mb_row + 1] + 16 + mb_col*8), (xd-
>dst.u_buffer + 7 * recon_uv_stride), 8); |
| 504 vpx_memcpy((pbi->mt_vabove_row[mb_row + 1] + 16 + mb_col*8),
(xd->dst.v_buffer + 7 * recon_uv_stride), 8); | 504 memcpy((pbi->mt_vabove_row[mb_row + 1] + 16 + mb_col*8), (xd-
>dst.v_buffer + 7 * recon_uv_stride), 8); |
| 505 } | 505 } |
| 506 | 506 |
| 507 /* save left_col for next MB decoding */ | 507 /* save left_col for next MB decoding */ |
| 508 if(mb_col != pc->mb_cols-1) | 508 if(mb_col != pc->mb_cols-1) |
| 509 { | 509 { |
| 510 MODE_INFO *next = xd->mode_info_context +1; | 510 MODE_INFO *next = xd->mode_info_context +1; |
| 511 | 511 |
| 512 if (next->mbmi.ref_frame == INTRA_FRAME) | 512 if (next->mbmi.ref_frame == INTRA_FRAME) |
| 513 { | 513 { |
| 514 for (i = 0; i < 16; i++) | 514 for (i = 0; i < 16; i++) |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 869 VP8_COMMON *pc = &pbi->common; | 869 VP8_COMMON *pc = &pbi->common; |
| 870 unsigned int i; | 870 unsigned int i; |
| 871 int j; | 871 int j; |
| 872 | 872 |
| 873 int filter_level = pc->filter_level; | 873 int filter_level = pc->filter_level; |
| 874 YV12_BUFFER_CONFIG *yv12_fb_new = pbi->dec_fb_ref[INTRA_FRAME]; | 874 YV12_BUFFER_CONFIG *yv12_fb_new = pbi->dec_fb_ref[INTRA_FRAME]; |
| 875 | 875 |
| 876 if (filter_level) | 876 if (filter_level) |
| 877 { | 877 { |
| 878 /* Set above_row buffer to 127 for decoding first MB row */ | 878 /* Set above_row buffer to 127 for decoding first MB row */ |
| 879 vpx_memset(pbi->mt_yabove_row[0] + VP8BORDERINPIXELS-1, 127, yv12_fb_new
->y_width + 5); | 879 memset(pbi->mt_yabove_row[0] + VP8BORDERINPIXELS-1, 127, yv12_fb_new->y_
width + 5); |
| 880 vpx_memset(pbi->mt_uabove_row[0] + (VP8BORDERINPIXELS>>1)-1, 127, (yv12_
fb_new->y_width>>1) +5); | 880 memset(pbi->mt_uabove_row[0] + (VP8BORDERINPIXELS>>1)-1, 127, (yv12_fb_n
ew->y_width>>1) +5); |
| 881 vpx_memset(pbi->mt_vabove_row[0] + (VP8BORDERINPIXELS>>1)-1, 127, (yv12_
fb_new->y_width>>1) +5); | 881 memset(pbi->mt_vabove_row[0] + (VP8BORDERINPIXELS>>1)-1, 127, (yv12_fb_n
ew->y_width>>1) +5); |
| 882 | 882 |
| 883 for (j=1; j<pc->mb_rows; j++) | 883 for (j=1; j<pc->mb_rows; j++) |
| 884 { | 884 { |
| 885 vpx_memset(pbi->mt_yabove_row[j] + VP8BORDERINPIXELS-1, (unsigned ch
ar)129, 1); | 885 memset(pbi->mt_yabove_row[j] + VP8BORDERINPIXELS-1, (unsigned char)1
29, 1); |
| 886 vpx_memset(pbi->mt_uabove_row[j] + (VP8BORDERINPIXELS>>1)-1, (unsign
ed char)129, 1); | 886 memset(pbi->mt_uabove_row[j] + (VP8BORDERINPIXELS>>1)-1, (unsigned c
har)129, 1); |
| 887 vpx_memset(pbi->mt_vabove_row[j] + (VP8BORDERINPIXELS>>1)-1, (unsign
ed char)129, 1); | 887 memset(pbi->mt_vabove_row[j] + (VP8BORDERINPIXELS>>1)-1, (unsigned c
har)129, 1); |
| 888 } | 888 } |
| 889 | 889 |
| 890 /* Set left_col to 129 initially */ | 890 /* Set left_col to 129 initially */ |
| 891 for (j=0; j<pc->mb_rows; j++) | 891 for (j=0; j<pc->mb_rows; j++) |
| 892 { | 892 { |
| 893 vpx_memset(pbi->mt_yleft_col[j], (unsigned char)129, 16); | 893 memset(pbi->mt_yleft_col[j], (unsigned char)129, 16); |
| 894 vpx_memset(pbi->mt_uleft_col[j], (unsigned char)129, 8); | 894 memset(pbi->mt_uleft_col[j], (unsigned char)129, 8); |
| 895 vpx_memset(pbi->mt_vleft_col[j], (unsigned char)129, 8); | 895 memset(pbi->mt_vleft_col[j], (unsigned char)129, 8); |
| 896 } | 896 } |
| 897 | 897 |
| 898 /* Initialize the loop filter for this frame. */ | 898 /* Initialize the loop filter for this frame. */ |
| 899 vp8_loop_filter_frame_init(pc, &pbi->mb, filter_level); | 899 vp8_loop_filter_frame_init(pc, &pbi->mb, filter_level); |
| 900 } | 900 } |
| 901 else | 901 else |
| 902 vp8_setup_intra_recon_top_line(yv12_fb_new); | 902 vp8_setup_intra_recon_top_line(yv12_fb_new); |
| 903 | 903 |
| 904 setup_decoding_thread_data(pbi, xd, pbi->mb_row_di, pbi->decoding_thread_cou
nt); | 904 setup_decoding_thread_data(pbi, xd, pbi->mb_row_di, pbi->decoding_thread_cou
nt); |
| 905 | 905 |
| 906 for (i = 0; i < pbi->decoding_thread_count; i++) | 906 for (i = 0; i < pbi->decoding_thread_count; i++) |
| 907 sem_post(&pbi->h_event_start_decoding[i]); | 907 sem_post(&pbi->h_event_start_decoding[i]); |
| 908 | 908 |
| 909 mt_decode_mb_rows(pbi, xd, 0); | 909 mt_decode_mb_rows(pbi, xd, 0); |
| 910 | 910 |
| 911 sem_wait(&pbi->h_event_end_decoding); /* add back for each frame */ | 911 sem_wait(&pbi->h_event_end_decoding); /* add back for each frame */ |
| 912 } | 912 } |
| OLD | NEW |