| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2014 The WebM project authors. All Rights Reserved. | 2 * Copyright (c) 2014 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 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 int *out_rate_sum, int64_t *out_dist_sum, | 209 int *out_rate_sum, int64_t *out_dist_sum, |
| 210 unsigned int *var_y, unsigned int *sse_y) { | 210 unsigned int *var_y, unsigned int *sse_y) { |
| 211 // Note our transform coeffs are 8 times an orthogonal transform. | 211 // Note our transform coeffs are 8 times an orthogonal transform. |
| 212 // Hence quantizer step is also 8 times. To get effective quantizer | 212 // Hence quantizer step is also 8 times. To get effective quantizer |
| 213 // we need to divide by 8 before sending to modeling function. | 213 // we need to divide by 8 before sending to modeling function. |
| 214 unsigned int sse; | 214 unsigned int sse; |
| 215 int rate; | 215 int rate; |
| 216 int64_t dist; | 216 int64_t dist; |
| 217 struct macroblock_plane *const p = &x->plane[0]; | 217 struct macroblock_plane *const p = &x->plane[0]; |
| 218 struct macroblockd_plane *const pd = &xd->plane[0]; | 218 struct macroblockd_plane *const pd = &xd->plane[0]; |
| 219 const int64_t dc_thr = p->quant_thred[0] >> 6; |
| 220 const int64_t ac_thr = p->quant_thred[1] >> 6; |
| 219 const uint32_t dc_quant = pd->dequant[0]; | 221 const uint32_t dc_quant = pd->dequant[0]; |
| 220 const uint32_t ac_quant = pd->dequant[1]; | 222 const uint32_t ac_quant = pd->dequant[1]; |
| 221 unsigned int var = cpi->fn_ptr[bsize].vf(p->src.buf, p->src.stride, | 223 unsigned int var = cpi->fn_ptr[bsize].vf(p->src.buf, p->src.stride, |
| 222 pd->dst.buf, pd->dst.stride, &sse); | 224 pd->dst.buf, pd->dst.stride, &sse); |
| 223 *var_y = var; | 225 *var_y = var; |
| 224 *sse_y = sse; | 226 *sse_y = sse; |
| 225 | 227 |
| 226 if (sse < dc_quant * dc_quant >> 6) | 228 x->skip_txfm[0] = 0; |
| 227 x->skip_txfm[0] = 1; | 229 // Check if all ac coefficients can be quantized to zero. |
| 228 else if (var < ac_quant * ac_quant >> 6) | 230 if (var < ac_thr || var == 0) { |
| 229 x->skip_txfm[0] = 2; | 231 x->skip_txfm[0] = 2; |
| 230 else | 232 // Check if dc coefficient can be quantized to zero. |
| 231 x->skip_txfm[0] = 0; | 233 if (sse - var < dc_thr || sse == var) |
| 234 x->skip_txfm[0] = 1; |
| 235 } |
| 232 | 236 |
| 233 if (cpi->common.tx_mode == TX_MODE_SELECT) { | 237 if (cpi->common.tx_mode == TX_MODE_SELECT) { |
| 234 if (sse > (var << 2)) | 238 if (sse > (var << 2)) |
| 235 xd->mi[0].src_mi->mbmi.tx_size = | 239 xd->mi[0].src_mi->mbmi.tx_size = |
| 236 MIN(max_txsize_lookup[bsize], | 240 MIN(max_txsize_lookup[bsize], |
| 237 tx_mode_to_biggest_tx_size[cpi->common.tx_mode]); | 241 tx_mode_to_biggest_tx_size[cpi->common.tx_mode]); |
| 238 else | 242 else |
| 239 xd->mi[0].src_mi->mbmi.tx_size = TX_8X8; | 243 xd->mi[0].src_mi->mbmi.tx_size = TX_8X8; |
| 240 | 244 |
| 241 if (cpi->sf.partition_search_type == VAR_BASED_PARTITION && | 245 if (cpi->sf.partition_search_type == VAR_BASED_PARTITION) { |
| 242 xd->mi[0].src_mi->mbmi.tx_size > TX_16X16) | 246 if (cpi->oxcf.aq_mode == CYCLIC_REFRESH_AQ && |
| 243 xd->mi[0].src_mi->mbmi.tx_size = TX_16X16; | 247 xd->mi[0].src_mi->mbmi.segment_id != CR_SEGMENT_ID_BASE) |
| 248 xd->mi[0].src_mi->mbmi.tx_size = TX_8X8; |
| 249 else if (xd->mi[0].src_mi->mbmi.tx_size > TX_16X16) |
| 250 xd->mi[0].src_mi->mbmi.tx_size = TX_16X16; |
| 251 } |
| 244 } else { | 252 } else { |
| 245 xd->mi[0].src_mi->mbmi.tx_size = | 253 xd->mi[0].src_mi->mbmi.tx_size = |
| 246 MIN(max_txsize_lookup[bsize], | 254 MIN(max_txsize_lookup[bsize], |
| 247 tx_mode_to_biggest_tx_size[cpi->common.tx_mode]); | 255 tx_mode_to_biggest_tx_size[cpi->common.tx_mode]); |
| 248 } | 256 } |
| 249 | 257 |
| 250 #if CONFIG_VP9_HIGHBITDEPTH | 258 #if CONFIG_VP9_HIGHBITDEPTH |
| 251 if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) { | 259 if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) { |
| 252 vp9_model_rd_from_var_lapndz(sse - var, num_pels_log2_lookup[bsize], | 260 vp9_model_rd_from_var_lapndz(sse - var, num_pels_log2_lookup[bsize], |
| 253 dc_quant >> (xd->bd - 5), &rate, &dist); | 261 dc_quant >> (xd->bd - 5), &rate, &dist); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 276 ac_quant >> 3, &rate, &dist); | 284 ac_quant >> 3, &rate, &dist); |
| 277 #endif // CONFIG_VP9_HIGHBITDEPTH | 285 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 278 | 286 |
| 279 *out_rate_sum += rate; | 287 *out_rate_sum += rate; |
| 280 *out_dist_sum += dist << 4; | 288 *out_dist_sum += dist << 4; |
| 281 | 289 |
| 282 if (*out_rate_sum == 0) | 290 if (*out_rate_sum == 0) |
| 283 x->skip_txfm[0] = 1; | 291 x->skip_txfm[0] = 1; |
| 284 } | 292 } |
| 285 | 293 |
| 294 static void model_rd_for_sb_uv(VP9_COMP *cpi, BLOCK_SIZE bsize, |
| 295 MACROBLOCK *x, MACROBLOCKD *xd, |
| 296 int *out_rate_sum, int64_t *out_dist_sum, |
| 297 unsigned int *var_y, unsigned int *sse_y) { |
| 298 // Note our transform coeffs are 8 times an orthogonal transform. |
| 299 // Hence quantizer step is also 8 times. To get effective quantizer |
| 300 // we need to divide by 8 before sending to modeling function. |
| 301 unsigned int sse; |
| 302 int rate; |
| 303 int64_t dist; |
| 304 int i; |
| 305 |
| 306 *out_rate_sum = 0; |
| 307 *out_dist_sum = 0; |
| 308 |
| 309 for (i = 1; i <= 2; ++i) { |
| 310 struct macroblock_plane *const p = &x->plane[i]; |
| 311 struct macroblockd_plane *const pd = &xd->plane[i]; |
| 312 const uint32_t dc_quant = pd->dequant[0]; |
| 313 const uint32_t ac_quant = pd->dequant[1]; |
| 314 const BLOCK_SIZE bs = get_plane_block_size(bsize, pd); |
| 315 unsigned int var; |
| 316 |
| 317 if (!x->color_sensitivity[i - 1]) |
| 318 continue; |
| 319 |
| 320 var = cpi->fn_ptr[bs].vf(p->src.buf, p->src.stride, |
| 321 pd->dst.buf, pd->dst.stride, &sse); |
| 322 *var_y += var; |
| 323 *sse_y += sse; |
| 324 |
| 325 #if CONFIG_VP9_HIGHBITDEPTH |
| 326 if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) { |
| 327 vp9_model_rd_from_var_lapndz(sse - var, num_pels_log2_lookup[bs], |
| 328 dc_quant >> (xd->bd - 5), &rate, &dist); |
| 329 } else { |
| 330 vp9_model_rd_from_var_lapndz(sse - var, num_pels_log2_lookup[bs], |
| 331 dc_quant >> 3, &rate, &dist); |
| 332 } |
| 333 #else |
| 334 vp9_model_rd_from_var_lapndz(sse - var, num_pels_log2_lookup[bs], |
| 335 dc_quant >> 3, &rate, &dist); |
| 336 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 337 |
| 338 *out_rate_sum += rate >> 1; |
| 339 *out_dist_sum += dist << 3; |
| 340 |
| 341 #if CONFIG_VP9_HIGHBITDEPTH |
| 342 if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) { |
| 343 vp9_model_rd_from_var_lapndz(var, num_pels_log2_lookup[bs], |
| 344 ac_quant >> (xd->bd - 5), &rate, &dist); |
| 345 } else { |
| 346 vp9_model_rd_from_var_lapndz(var, num_pels_log2_lookup[bs], |
| 347 ac_quant >> 3, &rate, &dist); |
| 348 } |
| 349 #else |
| 350 vp9_model_rd_from_var_lapndz(var, num_pels_log2_lookup[bs], |
| 351 ac_quant >> 3, &rate, &dist); |
| 352 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 353 |
| 354 *out_rate_sum += rate; |
| 355 *out_dist_sum += dist << 4; |
| 356 } |
| 357 } |
| 358 |
| 286 static int get_pred_buffer(PRED_BUFFER *p, int len) { | 359 static int get_pred_buffer(PRED_BUFFER *p, int len) { |
| 287 int i; | 360 int i; |
| 288 | 361 |
| 289 for (i = 0; i < len; i++) { | 362 for (i = 0; i < len; i++) { |
| 290 if (!p[i].in_use) { | 363 if (!p[i].in_use) { |
| 291 p[i].in_use = 1; | 364 p[i].in_use = 1; |
| 292 return i; | 365 return i; |
| 293 } | 366 } |
| 294 } | 367 } |
| 295 return -1; | 368 return -1; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 318 unsigned int thresh_dc; | 391 unsigned int thresh_dc; |
| 319 if (x->encode_breakout > 0) { | 392 if (x->encode_breakout > 0) { |
| 320 // Set a maximum for threshold to avoid big PSNR loss in low bit rate | 393 // Set a maximum for threshold to avoid big PSNR loss in low bit rate |
| 321 // case. Use extreme low threshold for static frames to limit | 394 // case. Use extreme low threshold for static frames to limit |
| 322 // skipping. | 395 // skipping. |
| 323 const unsigned int max_thresh = 36000; | 396 const unsigned int max_thresh = 36000; |
| 324 // The encode_breakout input | 397 // The encode_breakout input |
| 325 const unsigned int min_thresh = | 398 const unsigned int min_thresh = |
| 326 MIN(((unsigned int)x->encode_breakout << 4), max_thresh); | 399 MIN(((unsigned int)x->encode_breakout << 4), max_thresh); |
| 327 #if CONFIG_VP9_HIGHBITDEPTH | 400 #if CONFIG_VP9_HIGHBITDEPTH |
| 328 const int shift = 2 * xd->bd - 16; | 401 const int shift = (xd->bd << 1) - 16; |
| 329 #endif | 402 #endif |
| 330 | 403 |
| 331 // Calculate threshold according to dequant value. | 404 // Calculate threshold according to dequant value. |
| 332 thresh_ac = (xd->plane[0].dequant[1] * xd->plane[0].dequant[1]) / 9; | 405 thresh_ac = (xd->plane[0].dequant[1] * xd->plane[0].dequant[1]) >> 3; |
| 333 #if CONFIG_VP9_HIGHBITDEPTH | 406 #if CONFIG_VP9_HIGHBITDEPTH |
| 334 if ((xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) && shift > 0) { | 407 if ((xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) && shift > 0) { |
| 335 thresh_ac = ROUND_POWER_OF_TWO(thresh_ac, shift); | 408 thresh_ac = ROUND_POWER_OF_TWO(thresh_ac, shift); |
| 336 } | 409 } |
| 337 #endif // CONFIG_VP9_HIGHBITDEPTH | 410 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 338 thresh_ac = clamp(thresh_ac, min_thresh, max_thresh); | 411 thresh_ac = clamp(thresh_ac, min_thresh, max_thresh); |
| 339 | 412 |
| 340 // Adjust ac threshold according to partition size. | 413 // Adjust ac threshold according to partition size. |
| 341 thresh_ac >>= | 414 thresh_ac >>= |
| 342 8 - (b_width_log2_lookup[bsize] + b_height_log2_lookup[bsize]); | 415 8 - (b_width_log2_lookup[bsize] + b_height_log2_lookup[bsize]); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 364 xd->plane[2].pre[0] = yv12_mb[ref_frame][2]; | 437 xd->plane[2].pre[0] = yv12_mb[ref_frame][2]; |
| 365 vp9_build_inter_predictors_sbuv(xd, mi_row, mi_col, bsize); | 438 vp9_build_inter_predictors_sbuv(xd, mi_row, mi_col, bsize); |
| 366 } | 439 } |
| 367 | 440 |
| 368 var_u = cpi->fn_ptr[uv_size].vf(x->plane[1].src.buf, | 441 var_u = cpi->fn_ptr[uv_size].vf(x->plane[1].src.buf, |
| 369 x->plane[1].src.stride, | 442 x->plane[1].src.stride, |
| 370 xd->plane[1].dst.buf, | 443 xd->plane[1].dst.buf, |
| 371 xd->plane[1].dst.stride, &sse_u); | 444 xd->plane[1].dst.stride, &sse_u); |
| 372 | 445 |
| 373 // U skipping condition checking | 446 // U skipping condition checking |
| 374 if ((var_u * 4 <= thresh_ac) && (sse_u - var_u <= thresh_dc)) { | 447 if (((var_u << 2) <= thresh_ac) && (sse_u - var_u <= thresh_dc)) { |
| 375 var_v = cpi->fn_ptr[uv_size].vf(x->plane[2].src.buf, | 448 var_v = cpi->fn_ptr[uv_size].vf(x->plane[2].src.buf, |
| 376 x->plane[2].src.stride, | 449 x->plane[2].src.stride, |
| 377 xd->plane[2].dst.buf, | 450 xd->plane[2].dst.buf, |
| 378 xd->plane[2].dst.stride, &sse_v); | 451 xd->plane[2].dst.stride, &sse_v); |
| 379 | 452 |
| 380 // V skipping condition checking | 453 // V skipping condition checking |
| 381 if ((var_v * 4 <= thresh_ac) && (sse_v - var_v <= thresh_dc)) { | 454 if (((var_v << 2) <= thresh_ac) && (sse_v - var_v <= thresh_dc)) { |
| 382 x->skip = 1; | 455 x->skip = 1; |
| 383 | 456 |
| 384 // The cost of skip bit needs to be added. | 457 // The cost of skip bit needs to be added. |
| 385 *rate = cpi->inter_mode_cost[mbmi->mode_context[ref_frame]] | 458 *rate = cpi->inter_mode_cost[mbmi->mode_context[ref_frame]] |
| 386 [INTER_OFFSET(this_mode)]; | 459 [INTER_OFFSET(this_mode)]; |
| 387 | 460 |
| 388 // More on this part of rate | 461 // More on this part of rate |
| 389 // rate += vp9_cost_bit(vp9_get_skip_prob(cm, xd), 1); | 462 // rate += vp9_cost_bit(vp9_get_skip_prob(cm, xd), 1); |
| 390 | 463 |
| 391 // Scaling factor for SSE from spatial domain to frequency | 464 // Scaling factor for SSE from spatial domain to frequency |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 501 | 574 |
| 502 if (this_rdc.rdcost < best_rdc.rdcost) { | 575 if (this_rdc.rdcost < best_rdc.rdcost) { |
| 503 best_rdc = this_rdc; | 576 best_rdc = this_rdc; |
| 504 mbmi->mode = this_mode; | 577 mbmi->mode = this_mode; |
| 505 } | 578 } |
| 506 } | 579 } |
| 507 | 580 |
| 508 *rd_cost = best_rdc; | 581 *rd_cost = best_rdc; |
| 509 } | 582 } |
| 510 | 583 |
| 584 static const PREDICTION_MODE inter_mode_set[INTER_MODES] = { |
| 585 ZEROMV, NEARESTMV, NEARMV, NEWMV, |
| 586 }; |
| 587 |
| 588 static const int ref_frame_cost[MAX_REF_FRAMES] = { |
| 589 1235, 229, 530, 615, |
| 590 }; |
| 511 // TODO(jingning) placeholder for inter-frame non-RD mode decision. | 591 // TODO(jingning) placeholder for inter-frame non-RD mode decision. |
| 512 // this needs various further optimizations. to be continued.. | 592 // this needs various further optimizations. to be continued.. |
| 513 void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, | 593 void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, |
| 514 TileDataEnc *tile_data, | 594 TileDataEnc *tile_data, |
| 515 int mi_row, int mi_col, RD_COST *rd_cost, | 595 int mi_row, int mi_col, RD_COST *rd_cost, |
| 516 BLOCK_SIZE bsize, PICK_MODE_CONTEXT *ctx) { | 596 BLOCK_SIZE bsize, PICK_MODE_CONTEXT *ctx) { |
| 517 VP9_COMMON *const cm = &cpi->common; | 597 VP9_COMMON *const cm = &cpi->common; |
| 518 TileInfo *const tile_info = &tile_data->tile_info; | 598 TileInfo *const tile_info = &tile_data->tile_info; |
| 519 MACROBLOCKD *const xd = &x->e_mbd; | 599 MACROBLOCKD *const xd = &x->e_mbd; |
| 520 MB_MODE_INFO *const mbmi = &xd->mi[0].src_mi->mbmi; | 600 MB_MODE_INFO *const mbmi = &xd->mi[0].src_mi->mbmi; |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 617 if (cpi->ref_frame_flags & flag_list[ref_frame]) { | 697 if (cpi->ref_frame_flags & flag_list[ref_frame]) { |
| 618 const YV12_BUFFER_CONFIG *yv12 = get_ref_frame_buffer(cpi, ref_frame); | 698 const YV12_BUFFER_CONFIG *yv12 = get_ref_frame_buffer(cpi, ref_frame); |
| 619 int_mv *const candidates = mbmi->ref_mvs[ref_frame]; | 699 int_mv *const candidates = mbmi->ref_mvs[ref_frame]; |
| 620 const struct scale_factors *const sf = &cm->frame_refs[ref_frame - 1].sf; | 700 const struct scale_factors *const sf = &cm->frame_refs[ref_frame - 1].sf; |
| 621 | 701 |
| 622 vp9_setup_pred_block(xd, yv12_mb[ref_frame], yv12, mi_row, mi_col, | 702 vp9_setup_pred_block(xd, yv12_mb[ref_frame], yv12, mi_row, mi_col, |
| 623 sf, sf); | 703 sf, sf); |
| 624 | 704 |
| 625 if (cm->use_prev_frame_mvs) | 705 if (cm->use_prev_frame_mvs) |
| 626 vp9_find_mv_refs(cm, xd, tile_info, xd->mi[0].src_mi, ref_frame, | 706 vp9_find_mv_refs(cm, xd, tile_info, xd->mi[0].src_mi, ref_frame, |
| 627 candidates, mi_row, mi_col); | 707 candidates, mi_row, mi_col, NULL, NULL); |
| 628 else | 708 else |
| 629 const_motion[ref_frame] = mv_refs_rt(cm, xd, tile_info, | 709 const_motion[ref_frame] = mv_refs_rt(cm, xd, tile_info, |
| 630 xd->mi[0].src_mi, | 710 xd->mi[0].src_mi, |
| 631 ref_frame, candidates, | 711 ref_frame, candidates, |
| 632 mi_row, mi_col); | 712 mi_row, mi_col); |
| 633 | 713 |
| 634 vp9_find_best_ref_mvs(xd, cm->allow_high_precision_mv, candidates, | 714 vp9_find_best_ref_mvs(xd, cm->allow_high_precision_mv, candidates, |
| 635 &frame_mv[NEARESTMV][ref_frame], | 715 &frame_mv[NEARESTMV][ref_frame], |
| 636 &frame_mv[NEARMV][ref_frame]); | 716 &frame_mv[NEARMV][ref_frame]); |
| 637 | 717 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 651 continue; | 731 continue; |
| 652 | 732 |
| 653 if (cpi->ref_frame_flags & flag_list[i]) | 733 if (cpi->ref_frame_flags & flag_list[i]) |
| 654 if (x->pred_mv_sad[ref_frame] > (x->pred_mv_sad[i] << 1)) | 734 if (x->pred_mv_sad[ref_frame] > (x->pred_mv_sad[i] << 1)) |
| 655 ref_frame_skip_mask |= (1 << ref_frame); | 735 ref_frame_skip_mask |= (1 << ref_frame); |
| 656 | 736 |
| 657 if (ref_frame_skip_mask & (1 << ref_frame)) | 737 if (ref_frame_skip_mask & (1 << ref_frame)) |
| 658 continue; | 738 continue; |
| 659 | 739 |
| 660 // Select prediction reference frames. | 740 // Select prediction reference frames. |
| 661 xd->plane[0].pre[0] = yv12_mb[ref_frame][0]; | 741 for (i = 0; i < MAX_MB_PLANE; i++) |
| 742 xd->plane[i].pre[0] = yv12_mb[ref_frame][i]; |
| 662 | 743 |
| 663 clamp_mv2(&frame_mv[NEARESTMV][ref_frame].as_mv, xd); | 744 clamp_mv2(&frame_mv[NEARESTMV][ref_frame].as_mv, xd); |
| 664 clamp_mv2(&frame_mv[NEARMV][ref_frame].as_mv, xd); | 745 clamp_mv2(&frame_mv[NEARMV][ref_frame].as_mv, xd); |
| 665 | 746 |
| 666 mbmi->ref_frame[0] = ref_frame; | 747 mbmi->ref_frame[0] = ref_frame; |
| 667 set_ref_ptrs(cm, xd, ref_frame, NONE); | 748 set_ref_ptrs(cm, xd, ref_frame, NONE); |
| 668 | 749 |
| 669 for (this_mode = NEARESTMV; this_mode <= NEWMV; ++this_mode) { | 750 for (i = 0; i < INTER_MODES; ++i) { |
| 670 int rate_mv = 0; | 751 int rate_mv = 0; |
| 671 int mode_rd_thresh; | 752 int mode_rd_thresh; |
| 672 int mode_index = mode_idx[ref_frame][INTER_OFFSET(this_mode)]; | 753 int mode_index; |
| 754 this_mode = inter_mode_set[i]; |
| 755 mode_index = mode_idx[ref_frame][INTER_OFFSET(this_mode)]; |
| 673 | 756 |
| 674 if (const_motion[ref_frame] && this_mode == NEARMV) | 757 if (const_motion[ref_frame] && this_mode == NEARMV) |
| 675 continue; | 758 continue; |
| 676 | 759 |
| 677 if (!(cpi->sf.inter_mode_mask[bsize] & (1 << this_mode))) | 760 if (!(cpi->sf.inter_mode_mask[bsize] & (1 << this_mode))) |
| 678 continue; | 761 continue; |
| 679 | 762 |
| 680 mode_rd_thresh = best_mode_skip_txfm ? rd_threshes[mode_index] << 1 : | 763 mode_rd_thresh = best_mode_skip_txfm ? rd_threshes[mode_index] << 1 : |
| 681 rd_threshes[mode_index]; | 764 rd_threshes[mode_index]; |
| 682 if (rd_less_than_thresh(best_rdc.rdcost, mode_rd_thresh, | 765 if (rd_less_than_thresh(best_rdc.rdcost, mode_rd_thresh, |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 728 int64_t best_cost = INT64_MAX; | 811 int64_t best_cost = INT64_MAX; |
| 729 INTERP_FILTER best_filter = SWITCHABLE, filter; | 812 INTERP_FILTER best_filter = SWITCHABLE, filter; |
| 730 PRED_BUFFER *current_pred = this_mode_pred; | 813 PRED_BUFFER *current_pred = this_mode_pred; |
| 731 | 814 |
| 732 for (filter = EIGHTTAP; filter <= EIGHTTAP_SHARP; ++filter) { | 815 for (filter = EIGHTTAP; filter <= EIGHTTAP_SHARP; ++filter) { |
| 733 int64_t cost; | 816 int64_t cost; |
| 734 mbmi->interp_filter = filter; | 817 mbmi->interp_filter = filter; |
| 735 vp9_build_inter_predictors_sby(xd, mi_row, mi_col, bsize); | 818 vp9_build_inter_predictors_sby(xd, mi_row, mi_col, bsize); |
| 736 model_rd_for_sb_y(cpi, bsize, x, xd, &pf_rate[filter], | 819 model_rd_for_sb_y(cpi, bsize, x, xd, &pf_rate[filter], |
| 737 &pf_dist[filter], &pf_var[filter], &pf_sse[filter]); | 820 &pf_dist[filter], &pf_var[filter], &pf_sse[filter]); |
| 738 cost = RDCOST(x->rdmult, x->rddiv, | 821 pf_rate[filter] += vp9_get_switchable_rate(cpi, xd); |
| 739 vp9_get_switchable_rate(cpi, xd) + pf_rate[filter], | 822 cost = RDCOST(x->rdmult, x->rddiv, pf_rate[filter], pf_dist[filter]); |
| 740 pf_dist[filter]); | |
| 741 pf_tx_size[filter] = mbmi->tx_size; | 823 pf_tx_size[filter] = mbmi->tx_size; |
| 742 if (cost < best_cost) { | 824 if (cost < best_cost) { |
| 743 best_filter = filter; | 825 best_filter = filter; |
| 744 best_cost = cost; | 826 best_cost = cost; |
| 745 skip_txfm = x->skip_txfm[0]; | 827 skip_txfm = x->skip_txfm[0]; |
| 746 | 828 |
| 747 if (reuse_inter_pred) { | 829 if (reuse_inter_pred) { |
| 748 if (this_mode_pred != current_pred) { | 830 if (this_mode_pred != current_pred) { |
| 749 free_pred_buffer(this_mode_pred); | 831 free_pred_buffer(this_mode_pred); |
| 750 this_mode_pred = current_pred; | 832 this_mode_pred = current_pred; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 767 this_rdc.rate = pf_rate[mbmi->interp_filter]; | 849 this_rdc.rate = pf_rate[mbmi->interp_filter]; |
| 768 this_rdc.dist = pf_dist[mbmi->interp_filter]; | 850 this_rdc.dist = pf_dist[mbmi->interp_filter]; |
| 769 var_y = pf_var[mbmi->interp_filter]; | 851 var_y = pf_var[mbmi->interp_filter]; |
| 770 sse_y = pf_sse[mbmi->interp_filter]; | 852 sse_y = pf_sse[mbmi->interp_filter]; |
| 771 x->skip_txfm[0] = skip_txfm; | 853 x->skip_txfm[0] = skip_txfm; |
| 772 } else { | 854 } else { |
| 773 mbmi->interp_filter = (filter_ref == SWITCHABLE) ? EIGHTTAP: filter_ref; | 855 mbmi->interp_filter = (filter_ref == SWITCHABLE) ? EIGHTTAP: filter_ref; |
| 774 vp9_build_inter_predictors_sby(xd, mi_row, mi_col, bsize); | 856 vp9_build_inter_predictors_sby(xd, mi_row, mi_col, bsize); |
| 775 model_rd_for_sb_y(cpi, bsize, x, xd, &this_rdc.rate, &this_rdc.dist, | 857 model_rd_for_sb_y(cpi, bsize, x, xd, &this_rdc.rate, &this_rdc.dist, |
| 776 &var_y, &sse_y); | 858 &var_y, &sse_y); |
| 859 this_rdc.rate += cm->interp_filter == SWITCHABLE ? |
| 860 vp9_get_switchable_rate(cpi, xd) : 0; |
| 861 } |
| 862 |
| 863 // chroma component rate-distortion cost modeling |
| 864 if (x->color_sensitivity[0] || x->color_sensitivity[1]) { |
| 865 int uv_rate = 0; |
| 866 int64_t uv_dist = 0; |
| 867 if (x->color_sensitivity[0]) |
| 868 vp9_build_inter_predictors_sbp(xd, mi_row, mi_col, bsize, 1); |
| 869 if (x->color_sensitivity[1]) |
| 870 vp9_build_inter_predictors_sbp(xd, mi_row, mi_col, bsize, 2); |
| 871 model_rd_for_sb_uv(cpi, bsize, x, xd, &uv_rate, &uv_dist, |
| 872 &var_y, &sse_y); |
| 873 this_rdc.rate += uv_rate; |
| 874 this_rdc.dist += uv_dist; |
| 777 } | 875 } |
| 778 | 876 |
| 779 this_rdc.rate += rate_mv; | 877 this_rdc.rate += rate_mv; |
| 780 this_rdc.rate += cpi->inter_mode_cost[mbmi->mode_context[ref_frame]] | 878 this_rdc.rate += cpi->inter_mode_cost[mbmi->mode_context[ref_frame]] |
| 781 [INTER_OFFSET(this_mode)]; | 879 [INTER_OFFSET(this_mode)]; |
| 880 this_rdc.rate += ref_frame_cost[ref_frame]; |
| 782 this_rdc.rdcost = RDCOST(x->rdmult, x->rddiv, | 881 this_rdc.rdcost = RDCOST(x->rdmult, x->rddiv, |
| 783 this_rdc.rate, this_rdc.dist); | 882 this_rdc.rate, this_rdc.dist); |
| 784 | 883 |
| 785 // Skipping checking: test to see if this block can be reconstructed by | 884 // Skipping checking: test to see if this block can be reconstructed by |
| 786 // prediction only. | 885 // prediction only. |
| 787 if (cpi->allow_encode_breakout) { | 886 if (cpi->allow_encode_breakout) { |
| 788 encode_breakout_test(cpi, x, bsize, mi_row, mi_col, ref_frame, | 887 encode_breakout_test(cpi, x, bsize, mi_row, mi_col, ref_frame, |
| 789 this_mode, var_y, sse_y, yv12_mb, | 888 this_mode, var_y, sse_y, yv12_mb, |
| 790 &this_rdc.rate, &this_rdc.dist); | 889 &this_rdc.rate, &this_rdc.dist); |
| 791 if (x->skip) { | 890 if (x->skip) { |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 878 continue; | 977 continue; |
| 879 args.mode = this_mode; | 978 args.mode = this_mode; |
| 880 args.rate = 0; | 979 args.rate = 0; |
| 881 args.dist = 0; | 980 args.dist = 0; |
| 882 mbmi->tx_size = intra_tx_size; | 981 mbmi->tx_size = intra_tx_size; |
| 883 vp9_foreach_transformed_block_in_plane(xd, bsize, 0, | 982 vp9_foreach_transformed_block_in_plane(xd, bsize, 0, |
| 884 estimate_block_intra, &args); | 983 estimate_block_intra, &args); |
| 885 this_rdc.rate = args.rate; | 984 this_rdc.rate = args.rate; |
| 886 this_rdc.dist = args.dist; | 985 this_rdc.dist = args.dist; |
| 887 this_rdc.rate += cpi->mbmode_cost[this_mode]; | 986 this_rdc.rate += cpi->mbmode_cost[this_mode]; |
| 987 this_rdc.rate += ref_frame_cost[INTRA_FRAME]; |
| 888 this_rdc.rate += intra_cost_penalty; | 988 this_rdc.rate += intra_cost_penalty; |
| 889 this_rdc.rdcost = RDCOST(x->rdmult, x->rddiv, | 989 this_rdc.rdcost = RDCOST(x->rdmult, x->rddiv, |
| 890 this_rdc.rate, this_rdc.dist); | 990 this_rdc.rate, this_rdc.dist); |
| 891 | 991 |
| 892 if (this_rdc.rdcost < best_rdc.rdcost) { | 992 if (this_rdc.rdcost < best_rdc.rdcost) { |
| 893 best_rdc = this_rdc; | 993 best_rdc = this_rdc; |
| 894 mbmi->mode = this_mode; | 994 mbmi->mode = this_mode; |
| 895 best_intra_tx_size = mbmi->tx_size; | 995 best_intra_tx_size = mbmi->tx_size; |
| 896 mbmi->ref_frame[0] = INTRA_FRAME; | 996 mbmi->ref_frame[0] = INTRA_FRAME; |
| 897 mbmi->uv_mode = this_mode; | 997 mbmi->uv_mode = this_mode; |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 981 x->pred_mv_sad[ref_frame] = INT_MAX; | 1081 x->pred_mv_sad[ref_frame] = INT_MAX; |
| 982 | 1082 |
| 983 if (cpi->ref_frame_flags & flag_list[ref_frame]) { | 1083 if (cpi->ref_frame_flags & flag_list[ref_frame]) { |
| 984 const YV12_BUFFER_CONFIG *yv12 = get_ref_frame_buffer(cpi, ref_frame); | 1084 const YV12_BUFFER_CONFIG *yv12 = get_ref_frame_buffer(cpi, ref_frame); |
| 985 int_mv *const candidates = mbmi->ref_mvs[ref_frame]; | 1085 int_mv *const candidates = mbmi->ref_mvs[ref_frame]; |
| 986 const struct scale_factors *const sf = | 1086 const struct scale_factors *const sf = |
| 987 &cm->frame_refs[ref_frame - 1].sf; | 1087 &cm->frame_refs[ref_frame - 1].sf; |
| 988 vp9_setup_pred_block(xd, yv12_mb[ref_frame], yv12, mi_row, mi_col, | 1088 vp9_setup_pred_block(xd, yv12_mb[ref_frame], yv12, mi_row, mi_col, |
| 989 sf, sf); | 1089 sf, sf); |
| 990 vp9_find_mv_refs(cm, xd, tile_info, xd->mi[0].src_mi, ref_frame, | 1090 vp9_find_mv_refs(cm, xd, tile_info, xd->mi[0].src_mi, ref_frame, |
| 991 candidates, mi_row, mi_col); | 1091 candidates, mi_row, mi_col, NULL, NULL); |
| 992 | 1092 |
| 993 vp9_find_best_ref_mvs(xd, cm->allow_high_precision_mv, candidates, | 1093 vp9_find_best_ref_mvs(xd, cm->allow_high_precision_mv, candidates, |
| 994 &dummy_mv[0], &dummy_mv[1]); | 1094 &dummy_mv[0], &dummy_mv[1]); |
| 995 } else { | 1095 } else { |
| 996 ref_frame_skip_mask |= (1 << ref_frame); | 1096 ref_frame_skip_mask |= (1 << ref_frame); |
| 997 } | 1097 } |
| 998 } | 1098 } |
| 999 | 1099 |
| 1000 mbmi->sb_type = bsize; | 1100 mbmi->sb_type = bsize; |
| 1001 mbmi->tx_size = TX_4X4; | 1101 mbmi->tx_size = TX_4X4; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1031 // Select prediction reference frames. | 1131 // Select prediction reference frames. |
| 1032 for (plane = 0; plane < MAX_MB_PLANE; plane++) | 1132 for (plane = 0; plane < MAX_MB_PLANE; plane++) |
| 1033 xd->plane[plane].pre[0] = yv12_mb[ref_frame][plane]; | 1133 xd->plane[plane].pre[0] = yv12_mb[ref_frame][plane]; |
| 1034 | 1134 |
| 1035 for (idy = 0; idy < 2; idy += num_4x4_blocks_high) { | 1135 for (idy = 0; idy < 2; idy += num_4x4_blocks_high) { |
| 1036 for (idx = 0; idx < 2; idx += num_4x4_blocks_wide) { | 1136 for (idx = 0; idx < 2; idx += num_4x4_blocks_wide) { |
| 1037 int_mv b_mv[MB_MODE_COUNT]; | 1137 int_mv b_mv[MB_MODE_COUNT]; |
| 1038 int64_t b_best_rd = INT64_MAX; | 1138 int64_t b_best_rd = INT64_MAX; |
| 1039 const int i = idy * 2 + idx; | 1139 const int i = idy * 2 + idx; |
| 1040 PREDICTION_MODE this_mode; | 1140 PREDICTION_MODE this_mode; |
| 1041 int b_rate = 0; | |
| 1042 int64_t b_dist = 0; | |
| 1043 RD_COST this_rdc; | 1141 RD_COST this_rdc; |
| 1044 unsigned int var_y, sse_y; | 1142 unsigned int var_y, sse_y; |
| 1045 | 1143 |
| 1046 struct macroblock_plane *p = &x->plane[0]; | 1144 struct macroblock_plane *p = &x->plane[0]; |
| 1047 struct macroblockd_plane *pd = &xd->plane[0]; | 1145 struct macroblockd_plane *pd = &xd->plane[0]; |
| 1048 | 1146 |
| 1049 const struct buf_2d orig_src = p->src; | 1147 const struct buf_2d orig_src = p->src; |
| 1050 const struct buf_2d orig_dst = pd->dst; | 1148 const struct buf_2d orig_dst = pd->dst; |
| 1051 struct buf_2d orig_pre[2]; | 1149 struct buf_2d orig_pre[2]; |
| 1052 vpx_memcpy(orig_pre, xd->plane[0].pre, sizeof(orig_pre)); | 1150 vpx_memcpy(orig_pre, xd->plane[0].pre, sizeof(orig_pre)); |
| 1053 | 1151 |
| 1054 // set buffer pointers for sub8x8 motion search. | 1152 // set buffer pointers for sub8x8 motion search. |
| 1055 p->src.buf = | 1153 p->src.buf = |
| 1056 &p->src.buf[vp9_raster_block_offset(BLOCK_8X8, i, p->src.stride)]; | 1154 &p->src.buf[vp9_raster_block_offset(BLOCK_8X8, i, p->src.stride)]; |
| 1057 pd->dst.buf = | 1155 pd->dst.buf = |
| 1058 &pd->dst.buf[vp9_raster_block_offset(BLOCK_8X8, i, pd->dst.stride)]; | 1156 &pd->dst.buf[vp9_raster_block_offset(BLOCK_8X8, i, pd->dst.stride)]; |
| 1059 pd->pre[0].buf = | 1157 pd->pre[0].buf = |
| 1060 &pd->pre[0].buf[vp9_raster_block_offset(BLOCK_8X8, | 1158 &pd->pre[0].buf[vp9_raster_block_offset(BLOCK_8X8, |
| 1061 i, pd->pre[0].stride)]; | 1159 i, pd->pre[0].stride)]; |
| 1062 | 1160 |
| 1063 b_mv[ZEROMV].as_int = 0; | 1161 b_mv[ZEROMV].as_int = 0; |
| 1064 b_mv[NEWMV].as_int = INVALID_MV; | 1162 b_mv[NEWMV].as_int = INVALID_MV; |
| 1065 vp9_append_sub8x8_mvs_for_idx(cm, xd, tile_info, i, 0, mi_row, mi_col, | 1163 vp9_append_sub8x8_mvs_for_idx(cm, xd, tile_info, i, 0, mi_row, mi_col, |
| 1066 &b_mv[NEARESTMV], | 1164 &b_mv[NEARESTMV], |
| 1067 &b_mv[NEARMV]); | 1165 &b_mv[NEARMV]); |
| 1068 | 1166 |
| 1069 for (this_mode = NEARESTMV; this_mode <= NEWMV; ++this_mode) { | 1167 for (this_mode = NEARESTMV; this_mode <= NEWMV; ++this_mode) { |
| 1168 int b_rate = 0; |
| 1070 xd->mi[0].bmi[i].as_mv[0].as_int = b_mv[this_mode].as_int; | 1169 xd->mi[0].bmi[i].as_mv[0].as_int = b_mv[this_mode].as_int; |
| 1071 | 1170 |
| 1072 if (this_mode == NEWMV) { | 1171 if (this_mode == NEWMV) { |
| 1073 const int step_param = cpi->sf.mv.fullpel_search_step_param; | 1172 const int step_param = cpi->sf.mv.fullpel_search_step_param; |
| 1074 MV mvp_full; | 1173 MV mvp_full; |
| 1075 MV tmp_mv; | 1174 MV tmp_mv; |
| 1076 int cost_list[5]; | 1175 int cost_list[5]; |
| 1077 const int tmp_col_min = x->mv_col_min; | 1176 const int tmp_col_min = x->mv_col_min; |
| 1078 const int tmp_col_max = x->mv_col_max; | 1177 const int tmp_col_max = x->mv_col_max; |
| 1079 const int tmp_row_min = x->mv_row_min; | 1178 const int tmp_row_min = x->mv_row_min; |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1121 x->errorperbit, | 1220 x->errorperbit, |
| 1122 &cpi->fn_ptr[bsize], | 1221 &cpi->fn_ptr[bsize], |
| 1123 cpi->sf.mv.subpel_force_stop, | 1222 cpi->sf.mv.subpel_force_stop, |
| 1124 cpi->sf.mv.subpel_iters_per_step, | 1223 cpi->sf.mv.subpel_iters_per_step, |
| 1125 cond_cost_list(cpi, cost_list), | 1224 cond_cost_list(cpi, cost_list), |
| 1126 x->nmvjointcost, x->mvcost, | 1225 x->nmvjointcost, x->mvcost, |
| 1127 &dummy_dist, | 1226 &dummy_dist, |
| 1128 &x->pred_sse[ref_frame], NULL, 0, 0); | 1227 &x->pred_sse[ref_frame], NULL, 0, 0); |
| 1129 | 1228 |
| 1130 xd->mi[0].bmi[i].as_mv[0].as_mv = tmp_mv; | 1229 xd->mi[0].bmi[i].as_mv[0].as_mv = tmp_mv; |
| 1230 } else { |
| 1231 b_rate += cpi->inter_mode_cost[mbmi->mode_context[ref_frame]] |
| 1232 [INTER_OFFSET(this_mode)]; |
| 1131 } | 1233 } |
| 1132 | 1234 |
| 1133 vp9_build_inter_predictor(pd->pre[0].buf, pd->pre[0].stride, | 1235 #if CONFIG_VP9_HIGHBITDEPTH |
| 1236 if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) { |
| 1237 vp9_highbd_build_inter_predictor(pd->pre[0].buf, pd->pre[0].stride, |
| 1134 pd->dst.buf, pd->dst.stride, | 1238 pd->dst.buf, pd->dst.stride, |
| 1135 &xd->mi[0].bmi[i].as_mv[0].as_mv, | 1239 &xd->mi[0].bmi[i].as_mv[0].as_mv, |
| 1136 &xd->block_refs[0]->sf, | 1240 &xd->block_refs[0]->sf, |
| 1137 4 * num_4x4_blocks_wide, | 1241 4 * num_4x4_blocks_wide, |
| 1138 4 * num_4x4_blocks_high, 0, | 1242 4 * num_4x4_blocks_high, 0, |
| 1139 vp9_get_interp_kernel(mbmi->interp_filter), | 1243 vp9_get_interp_kernel(mbmi->interp_filter), |
| 1140 MV_PRECISION_Q3, | 1244 MV_PRECISION_Q3, |
| 1141 mi_col * MI_SIZE + 4 * (i & 0x01), | 1245 mi_col * MI_SIZE + 4 * (i & 0x01), |
| 1142 mi_row * MI_SIZE + 4 * (i >> 1)); | 1246 mi_row * MI_SIZE + 4 * (i >> 1), xd->bd); |
| 1247 } else { |
| 1248 #endif |
| 1249 vp9_build_inter_predictor(pd->pre[0].buf, pd->pre[0].stride, |
| 1250 pd->dst.buf, pd->dst.stride, |
| 1251 &xd->mi[0].bmi[i].as_mv[0].as_mv, |
| 1252 &xd->block_refs[0]->sf, |
| 1253 4 * num_4x4_blocks_wide, |
| 1254 4 * num_4x4_blocks_high, 0, |
| 1255 vp9_get_interp_kernel(mbmi->interp_filter), |
| 1256 MV_PRECISION_Q3, |
| 1257 mi_col * MI_SIZE + 4 * (i & 0x01), |
| 1258 mi_row * MI_SIZE + 4 * (i >> 1)); |
| 1259 |
| 1260 #if CONFIG_VP9_HIGHBITDEPTH |
| 1261 } |
| 1262 #endif |
| 1263 |
| 1143 model_rd_for_sb_y(cpi, bsize, x, xd, &this_rdc.rate, &this_rdc.dist, | 1264 model_rd_for_sb_y(cpi, bsize, x, xd, &this_rdc.rate, &this_rdc.dist, |
| 1144 &var_y, &sse_y); | 1265 &var_y, &sse_y); |
| 1145 | 1266 |
| 1146 this_rdc.rate += b_rate; | 1267 this_rdc.rate += b_rate; |
| 1147 this_rdc.dist += b_dist; | |
| 1148 this_rdc.rdcost = RDCOST(x->rdmult, x->rddiv, | 1268 this_rdc.rdcost = RDCOST(x->rdmult, x->rddiv, |
| 1149 this_rdc.rate, this_rdc.dist); | 1269 this_rdc.rate, this_rdc.dist); |
| 1150 if (this_rdc.rdcost < b_best_rd) { | 1270 if (this_rdc.rdcost < b_best_rd) { |
| 1151 b_best_rd = this_rdc.rdcost; | 1271 b_best_rd = this_rdc.rdcost; |
| 1152 bsi[ref_frame][i].as_mode = this_mode; | 1272 bsi[ref_frame][i].as_mode = this_mode; |
| 1153 bsi[ref_frame][i].as_mv[0].as_mv = xd->mi[0].bmi[i].as_mv[0].as_mv; | 1273 bsi[ref_frame][i].as_mv[0].as_mv = xd->mi[0].bmi[i].as_mv[0].as_mv; |
| 1154 } | 1274 } |
| 1155 } // mode search | 1275 } // mode search |
| 1156 | 1276 |
| 1157 // restore source and prediction buffer pointers. | 1277 // restore source and prediction buffer pointers. |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1186 xd->mi[0].bmi[block + 2] = bsi[best_ref_frame][block]; | 1306 xd->mi[0].bmi[block + 2] = bsi[best_ref_frame][block]; |
| 1187 } | 1307 } |
| 1188 } | 1308 } |
| 1189 mbmi->mode = xd->mi[0].bmi[3].as_mode; | 1309 mbmi->mode = xd->mi[0].bmi[3].as_mode; |
| 1190 ctx->mic = *(xd->mi[0].src_mi); | 1310 ctx->mic = *(xd->mi[0].src_mi); |
| 1191 ctx->skip_txfm[0] = 0; | 1311 ctx->skip_txfm[0] = 0; |
| 1192 ctx->skip = 0; | 1312 ctx->skip = 0; |
| 1193 // Dummy assignment for speed -5. No effect in speed -6. | 1313 // Dummy assignment for speed -5. No effect in speed -6. |
| 1194 rd_cost->rdcost = best_rd; | 1314 rd_cost->rdcost = best_rd; |
| 1195 } | 1315 } |
| OLD | NEW |