Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: source/libvpx/vp9/encoder/vp9_pickmode.c

Issue 478033002: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_picklpf.c ('k') | source/libvpx/vp9/encoder/vp9_quantize.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 struct macroblock_plane *const p = &x->plane[0]; 205 struct macroblock_plane *const p = &x->plane[0];
206 struct macroblockd_plane *const pd = &xd->plane[0]; 206 struct macroblockd_plane *const pd = &xd->plane[0];
207 const uint32_t dc_quant = pd->dequant[0]; 207 const uint32_t dc_quant = pd->dequant[0];
208 const uint32_t ac_quant = pd->dequant[1]; 208 const uint32_t ac_quant = pd->dequant[1];
209 unsigned int var = cpi->fn_ptr[bsize].vf(p->src.buf, p->src.stride, 209 unsigned int var = cpi->fn_ptr[bsize].vf(p->src.buf, p->src.stride,
210 pd->dst.buf, pd->dst.stride, &sse); 210 pd->dst.buf, pd->dst.stride, &sse);
211 *var_y = var; 211 *var_y = var;
212 *sse_y = sse; 212 *sse_y = sse;
213 213
214 if (sse < dc_quant * dc_quant >> 6) 214 if (sse < dc_quant * dc_quant >> 6)
215 x->skip_txfm = 1; 215 x->skip_txfm[0] = 1;
216 else if (var < ac_quant * ac_quant >> 6) 216 else if (var < ac_quant * ac_quant >> 6)
217 x->skip_txfm = 2; 217 x->skip_txfm[0] = 2;
218 else 218 else
219 x->skip_txfm = 0; 219 x->skip_txfm[0] = 0;
220 220
221 if (cpi->common.tx_mode == TX_MODE_SELECT) { 221 if (cpi->common.tx_mode == TX_MODE_SELECT) {
222 if (sse > (var << 2)) 222 if (sse > (var << 2))
223 xd->mi[0]->mbmi.tx_size = MIN(max_txsize_lookup[bsize], 223 xd->mi[0]->mbmi.tx_size = MIN(max_txsize_lookup[bsize],
224 tx_mode_to_biggest_tx_size[cpi->common.tx_mode]); 224 tx_mode_to_biggest_tx_size[cpi->common.tx_mode]);
225 else 225 else
226 xd->mi[0]->mbmi.tx_size = TX_8X8; 226 xd->mi[0]->mbmi.tx_size = TX_8X8;
227 } else { 227 } else {
228 xd->mi[0]->mbmi.tx_size = MIN(max_txsize_lookup[bsize], 228 xd->mi[0]->mbmi.tx_size = MIN(max_txsize_lookup[bsize],
229 tx_mode_to_biggest_tx_size[cpi->common.tx_mode]); 229 tx_mode_to_biggest_tx_size[cpi->common.tx_mode]);
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 intra_cost_penalty, 0); 387 intra_cost_penalty, 0);
388 const int64_t intra_mode_cost = 50; 388 const int64_t intra_mode_cost = 50;
389 389
390 unsigned char segment_id = mbmi->segment_id; 390 unsigned char segment_id = mbmi->segment_id;
391 const int *const rd_threshes = cpi->rd.threshes[segment_id][bsize]; 391 const int *const rd_threshes = cpi->rd.threshes[segment_id][bsize];
392 const int *const rd_thresh_freq_fact = cpi->rd.thresh_freq_fact[bsize]; 392 const int *const rd_thresh_freq_fact = cpi->rd.thresh_freq_fact[bsize];
393 // Mode index conversion form THR_MODES to PREDICTION_MODE for a ref frame. 393 // Mode index conversion form THR_MODES to PREDICTION_MODE for a ref frame.
394 INTERP_FILTER filter_ref = cm->interp_filter; 394 INTERP_FILTER filter_ref = cm->interp_filter;
395 int bsl = mi_width_log2(bsize); 395 int bsl = mi_width_log2(bsize);
396 const int pred_filter_search = cm->interp_filter == SWITCHABLE ? 396 const int pred_filter_search = cm->interp_filter == SWITCHABLE ?
397 (((mi_row + mi_col) >> bsl) + get_chessboard_index(cm)) % 2 : 0; 397 (((mi_row + mi_col) >> bsl) +
398 get_chessboard_index(cm->current_video_frame)) & 0x1 : 0;
398 int const_motion[MAX_REF_FRAMES] = { 0 }; 399 int const_motion[MAX_REF_FRAMES] = { 0 };
399 int bh = num_4x4_blocks_high_lookup[bsize] << 2; 400 int bh = num_4x4_blocks_high_lookup[bsize] << 2;
400 int bw = num_4x4_blocks_wide_lookup[bsize] << 2; 401 int bw = num_4x4_blocks_wide_lookup[bsize] << 2;
401 int pixels_in_block = bh * bw; 402 int pixels_in_block = bh * bw;
402 // For speed 6, the result of interp filter is reused later in actual encoding 403 // For speed 6, the result of interp filter is reused later in actual encoding
403 // process. 404 // process.
404 // tmp[3] points to dst buffer, and the other 3 point to allocated buffers. 405 // tmp[3] points to dst buffer, and the other 3 point to allocated buffers.
405 PRED_BUFFER tmp[4]; 406 PRED_BUFFER tmp[4];
406 DECLARE_ALIGNED_ARRAY(16, uint8_t, pred_buf, 3 * 64 * 64); 407 DECLARE_ALIGNED_ARRAY(16, uint8_t, pred_buf, 3 * 64 * 64);
407 struct buf_2d orig_dst = pd->dst; 408 struct buf_2d orig_dst = pd->dst;
408 PRED_BUFFER *best_pred = NULL; 409 PRED_BUFFER *best_pred = NULL;
409 PRED_BUFFER *this_mode_pred = NULL; 410 PRED_BUFFER *this_mode_pred = NULL;
410 int i; 411 int i;
411 412
413 // CTX is used by the temporal denoiser which is currently being developed.
414 // TODO(jbb): when temporal denoiser is finished and in the default build
415 // remove the following line;
416 (void) ctx;
412 if (cpi->sf.reuse_inter_pred_sby) { 417 if (cpi->sf.reuse_inter_pred_sby) {
413 for (i = 0; i < 3; i++) { 418 for (i = 0; i < 3; i++) {
414 tmp[i].data = &pred_buf[pixels_in_block * i]; 419 tmp[i].data = &pred_buf[pixels_in_block * i];
415 tmp[i].stride = bw; 420 tmp[i].stride = bw;
416 tmp[i].in_use = 0; 421 tmp[i].in_use = 0;
417 } 422 }
418 tmp[3].data = pd->dst.buf; 423 tmp[3].data = pd->dst.buf;
419 tmp[3].stride = pd->dst.stride; 424 tmp[3].stride = pd->dst.stride;
420 tmp[3].in_use = 0; 425 tmp[3].in_use = 0;
421 } 426 }
(...skipping 24 matching lines...) Expand all
446 else if (xd->left_available) 451 else if (xd->left_available)
447 filter_ref = xd->mi[-1]->mbmi.interp_filter; 452 filter_ref = xd->mi[-1]->mbmi.interp_filter;
448 453
449 if (cpi->ref_frame_flags & flag_list[ref_frame]) { 454 if (cpi->ref_frame_flags & flag_list[ref_frame]) {
450 const YV12_BUFFER_CONFIG *yv12 = get_ref_frame_buffer(cpi, ref_frame); 455 const YV12_BUFFER_CONFIG *yv12 = get_ref_frame_buffer(cpi, ref_frame);
451 int_mv *const candidates = mbmi->ref_mvs[ref_frame]; 456 int_mv *const candidates = mbmi->ref_mvs[ref_frame];
452 const struct scale_factors *const sf = &cm->frame_refs[ref_frame - 1].sf; 457 const struct scale_factors *const sf = &cm->frame_refs[ref_frame - 1].sf;
453 vp9_setup_pred_block(xd, yv12_mb[ref_frame], yv12, mi_row, mi_col, 458 vp9_setup_pred_block(xd, yv12_mb[ref_frame], yv12, mi_row, mi_col,
454 sf, sf); 459 sf, sf);
455 460
456 if (cm->coding_use_prev_mi) 461 if (!cm->error_resilient_mode)
457 vp9_find_mv_refs(cm, xd, tile, xd->mi[0], ref_frame, 462 vp9_find_mv_refs(cm, xd, tile, xd->mi[0], ref_frame,
458 candidates, mi_row, mi_col); 463 candidates, mi_row, mi_col);
459 else 464 else
460 const_motion[ref_frame] = mv_refs_rt(cm, xd, tile, xd->mi[0], 465 const_motion[ref_frame] = mv_refs_rt(cm, xd, tile, xd->mi[0],
461 ref_frame, candidates, 466 ref_frame, candidates,
462 mi_row, mi_col); 467 mi_row, mi_col);
463 468
464 vp9_find_best_ref_mvs(xd, cm->allow_high_precision_mv, candidates, 469 vp9_find_best_ref_mvs(xd, cm->allow_high_precision_mv, candidates,
465 &frame_mv[NEARESTMV][ref_frame], 470 &frame_mv[NEARESTMV][ref_frame],
466 &frame_mv[NEARMV][ref_frame]); 471 &frame_mv[NEARMV][ref_frame]);
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 vp9_build_inter_predictors_sby(xd, mi_row, mi_col, bsize); 551 vp9_build_inter_predictors_sby(xd, mi_row, mi_col, bsize);
547 model_rd_for_sb_y(cpi, bsize, x, xd, &pf_rate[filter], 552 model_rd_for_sb_y(cpi, bsize, x, xd, &pf_rate[filter],
548 &pf_dist[filter], &pf_var[filter], &pf_sse[filter]); 553 &pf_dist[filter], &pf_var[filter], &pf_sse[filter]);
549 cost = RDCOST(x->rdmult, x->rddiv, 554 cost = RDCOST(x->rdmult, x->rddiv,
550 vp9_get_switchable_rate(cpi) + pf_rate[filter], 555 vp9_get_switchable_rate(cpi) + pf_rate[filter],
551 pf_dist[filter]); 556 pf_dist[filter]);
552 pf_tx_size[filter] = mbmi->tx_size; 557 pf_tx_size[filter] = mbmi->tx_size;
553 if (cost < best_cost) { 558 if (cost < best_cost) {
554 best_filter = filter; 559 best_filter = filter;
555 best_cost = cost; 560 best_cost = cost;
556 skip_txfm = x->skip_txfm; 561 skip_txfm = x->skip_txfm[0];
557 562
558 if (cpi->sf.reuse_inter_pred_sby) { 563 if (cpi->sf.reuse_inter_pred_sby) {
559 if (this_mode_pred != current_pred) { 564 if (this_mode_pred != current_pred) {
560 free_pred_buffer(this_mode_pred); 565 free_pred_buffer(this_mode_pred);
561 this_mode_pred = current_pred; 566 this_mode_pred = current_pred;
562 } 567 }
563 568
564 if (filter < EIGHTTAP_SHARP) { 569 if (filter < EIGHTTAP_SHARP) {
565 current_pred = &tmp[get_pred_buffer(tmp, 3)]; 570 current_pred = &tmp[get_pred_buffer(tmp, 3)];
566 pd->dst.buf = current_pred->data; 571 pd->dst.buf = current_pred->data;
567 pd->dst.stride = bw; 572 pd->dst.stride = bw;
568 } 573 }
569 } 574 }
570 } 575 }
571 } 576 }
572 577
573 if (cpi->sf.reuse_inter_pred_sby && this_mode_pred != current_pred) 578 if (cpi->sf.reuse_inter_pred_sby && this_mode_pred != current_pred)
574 free_pred_buffer(current_pred); 579 free_pred_buffer(current_pred);
575 580
576 mbmi->interp_filter = best_filter; 581 mbmi->interp_filter = best_filter;
577 mbmi->tx_size = pf_tx_size[mbmi->interp_filter]; 582 mbmi->tx_size = pf_tx_size[mbmi->interp_filter];
578 rate = pf_rate[mbmi->interp_filter]; 583 rate = pf_rate[mbmi->interp_filter];
579 dist = pf_dist[mbmi->interp_filter]; 584 dist = pf_dist[mbmi->interp_filter];
580 var_y = pf_var[mbmi->interp_filter]; 585 var_y = pf_var[mbmi->interp_filter];
581 sse_y = pf_sse[mbmi->interp_filter]; 586 sse_y = pf_sse[mbmi->interp_filter];
582 x->skip_txfm = skip_txfm; 587 x->skip_txfm[0] = skip_txfm;
583 } else { 588 } else {
584 mbmi->interp_filter = (filter_ref == SWITCHABLE) ? EIGHTTAP: filter_ref; 589 mbmi->interp_filter = (filter_ref == SWITCHABLE) ? EIGHTTAP: filter_ref;
585 vp9_build_inter_predictors_sby(xd, mi_row, mi_col, bsize); 590 vp9_build_inter_predictors_sby(xd, mi_row, mi_col, bsize);
586 model_rd_for_sb_y(cpi, bsize, x, xd, &rate, &dist, &var_y, &sse_y); 591 model_rd_for_sb_y(cpi, bsize, x, xd, &rate, &dist, &var_y, &sse_y);
587 } 592 }
588 593
589 rate += rate_mv; 594 rate += rate_mv;
590 rate += cpi->inter_mode_cost[mbmi->mode_context[ref_frame]] 595 rate += cpi->inter_mode_cost[mbmi->mode_context[ref_frame]]
591 [INTER_OFFSET(this_mode)]; 596 [INTER_OFFSET(this_mode)];
592 this_rd = RDCOST(x->rdmult, x->rddiv, rate, dist); 597 this_rd = RDCOST(x->rdmult, x->rddiv, rate, dist);
593 598
594 // Skipping checking: test to see if this block can be reconstructed by 599 // Skipping checking: test to see if this block can be reconstructed by
595 // prediction only. 600 // prediction only.
596 if (cpi->allow_encode_breakout) { 601 if (cpi->allow_encode_breakout) {
597 encode_breakout_test(cpi, x, bsize, mi_row, mi_col, ref_frame, 602 encode_breakout_test(cpi, x, bsize, mi_row, mi_col, ref_frame,
598 this_mode, var_y, sse_y, yv12_mb, &rate, &dist); 603 this_mode, var_y, sse_y, yv12_mb, &rate, &dist);
599 if (x->skip) { 604 if (x->skip) {
600 rate += rate_mv; 605 rate += rate_mv;
601 this_rd = RDCOST(x->rdmult, x->rddiv, rate, dist); 606 this_rd = RDCOST(x->rdmult, x->rddiv, rate, dist);
602 } 607 }
603 } 608 }
604 609
605 #if CONFIG_DENOISING 610 #if CONFIG_VP9_TEMPORAL_DENOISING
606 if (cpi->oxcf.noise_sensitivity > 0) { 611 if (cpi->oxcf.noise_sensitivity > 0) {
607 vp9_denoiser_update_frame_stats(&cpi->denoiser, mbmi, sse_y, 612 vp9_denoiser_update_frame_stats(&cpi->denoiser, mbmi, sse_y,
608 this_mode, ctx); 613 this_mode, ctx);
609 } 614 }
610 #endif 615 #endif
611 616
612 if (this_rd < best_rd || x->skip) { 617 if (this_rd < best_rd || x->skip) {
613 best_rd = this_rd; 618 best_rd = this_rd;
614 *returnrate = rate; 619 *returnrate = rate;
615 *returndistortion = dist; 620 *returndistortion = dist;
616 best_mode = this_mode; 621 best_mode = this_mode;
617 best_pred_filter = mbmi->interp_filter; 622 best_pred_filter = mbmi->interp_filter;
618 best_tx_size = mbmi->tx_size; 623 best_tx_size = mbmi->tx_size;
619 best_ref_frame = ref_frame; 624 best_ref_frame = ref_frame;
620 skip_txfm = x->skip_txfm; 625 skip_txfm = x->skip_txfm[0];
621 626
622 if (cpi->sf.reuse_inter_pred_sby) { 627 if (cpi->sf.reuse_inter_pred_sby) {
623 if (best_pred != NULL) 628 if (best_pred != NULL)
624 free_pred_buffer(best_pred); 629 free_pred_buffer(best_pred);
625 630
626 best_pred = this_mode_pred; 631 best_pred = this_mode_pred;
627 } 632 }
628 } else { 633 } else {
629 if (cpi->sf.reuse_inter_pred_sby) 634 if (cpi->sf.reuse_inter_pred_sby)
630 free_pred_buffer(this_mode_pred); 635 free_pred_buffer(this_mode_pred);
(...skipping 21 matching lines...) Expand all
652 vp9_convolve_copy(copy_from, bw, copy_to, pd->dst.stride, NULL, 0, NULL, 0, 657 vp9_convolve_copy(copy_from, bw, copy_to, pd->dst.stride, NULL, 0, NULL, 0,
653 bw, bh); 658 bw, bh);
654 } 659 }
655 660
656 mbmi->mode = best_mode; 661 mbmi->mode = best_mode;
657 mbmi->interp_filter = best_pred_filter; 662 mbmi->interp_filter = best_pred_filter;
658 mbmi->tx_size = best_tx_size; 663 mbmi->tx_size = best_tx_size;
659 mbmi->ref_frame[0] = best_ref_frame; 664 mbmi->ref_frame[0] = best_ref_frame;
660 mbmi->mv[0].as_int = frame_mv[best_mode][best_ref_frame].as_int; 665 mbmi->mv[0].as_int = frame_mv[best_mode][best_ref_frame].as_int;
661 xd->mi[0]->bmi[0].as_mv[0].as_int = mbmi->mv[0].as_int; 666 xd->mi[0]->bmi[0].as_mv[0].as_int = mbmi->mv[0].as_int;
662 x->skip_txfm = skip_txfm; 667 x->skip_txfm[0] = skip_txfm;
663 668
664 // Perform intra prediction search, if the best SAD is above a certain 669 // Perform intra prediction search, if the best SAD is above a certain
665 // threshold. 670 // threshold.
666 if (!x->skip && best_rd > inter_mode_thresh && 671 if (!x->skip && best_rd > inter_mode_thresh &&
667 bsize <= cpi->sf.max_intra_bsize) { 672 bsize <= cpi->sf.max_intra_bsize) {
668 int i, j; 673 int i, j;
669 const int width = num_4x4_blocks_wide_lookup[bsize]; 674 const int width = num_4x4_blocks_wide_lookup[bsize];
670 const int height = num_4x4_blocks_high_lookup[bsize]; 675 const int height = num_4x4_blocks_high_lookup[bsize];
671 const BLOCK_SIZE bsize_tx = txsize_to_bsize[mbmi->tx_size];
672 676
673 int rate2 = 0; 677 int rate2 = 0;
674 int64_t dist2 = 0; 678 int64_t dist2 = 0;
675 const int dst_stride = cpi->sf.reuse_inter_pred_sby ? bw : pd->dst.stride; 679 const int dst_stride = cpi->sf.reuse_inter_pred_sby ? bw : pd->dst.stride;
676 const int src_stride = p->src.stride; 680 const int src_stride = p->src.stride;
677 int block_idx = 0; 681 int block_idx = 0;
678 682
679 TX_SIZE tmp_tx_size = MIN(max_txsize_lookup[bsize], 683 TX_SIZE tmp_tx_size = MIN(max_txsize_lookup[bsize],
680 tx_mode_to_biggest_tx_size[cpi->common.tx_mode]); 684 tx_mode_to_biggest_tx_size[cpi->common.tx_mode]);
685 const BLOCK_SIZE bsize_tx = txsize_to_bsize[tmp_tx_size];
681 const int step = 1 << tmp_tx_size; 686 const int step = 1 << tmp_tx_size;
682 687
688 if (cpi->sf.reuse_inter_pred_sby) {
689 pd->dst.buf = tmp[0].data;
690 pd->dst.stride = bw;
691 }
692
683 for (this_mode = DC_PRED; this_mode <= DC_PRED; ++this_mode) { 693 for (this_mode = DC_PRED; this_mode <= DC_PRED; ++this_mode) {
684 if (cpi->sf.reuse_inter_pred_sby) { 694 uint8_t *const src_buf_base = p->src.buf;
685 pd->dst.buf = tmp[0].data; 695 uint8_t *const dst_buf_base = pd->dst.buf;
686 pd->dst.stride = bw;
687 }
688
689 for (j = 0; j < height; j += step) { 696 for (j = 0; j < height; j += step) {
690 for (i = 0; i < width; i += step) { 697 for (i = 0; i < width; i += step) {
698 p->src.buf = &src_buf_base[4 * (j * src_stride + i)];
699 pd->dst.buf = &dst_buf_base[4 * (j * dst_stride + i)];
700 // Use source buffer as an approximation for the fully reconstructed
701 // buffer
691 vp9_predict_intra_block(xd, block_idx, b_width_log2(bsize), 702 vp9_predict_intra_block(xd, block_idx, b_width_log2(bsize),
692 tmp_tx_size, this_mode, 703 tmp_tx_size, this_mode,
693 &p->src.buf[4 * (j * dst_stride + i)], 704 p->src.buf, src_stride,
694 src_stride, 705 pd->dst.buf, dst_stride,
695 &pd->dst.buf[4 * (j * dst_stride + i)], 706 i, j, 0);
696 dst_stride, i, j, 0);
697 model_rd_for_sb_y(cpi, bsize_tx, x, xd, &rate, &dist, &var_y, &sse_y); 707 model_rd_for_sb_y(cpi, bsize_tx, x, xd, &rate, &dist, &var_y, &sse_y);
698 rate2 += rate; 708 rate2 += rate;
699 dist2 += dist; 709 dist2 += dist;
700 ++block_idx; 710 ++block_idx;
701 } 711 }
702 } 712 }
713 p->src.buf = src_buf_base;
714 pd->dst.buf = dst_buf_base;
703 715
704 rate = rate2; 716 rate = rate2;
705 dist = dist2; 717 dist = dist2;
706 718
707 rate += cpi->mbmode_cost[this_mode]; 719 rate += cpi->mbmode_cost[this_mode];
708 rate += intra_cost_penalty; 720 rate += intra_cost_penalty;
709 this_rd = RDCOST(x->rdmult, x->rddiv, rate, dist); 721 this_rd = RDCOST(x->rdmult, x->rddiv, rate, dist);
710 722
711 if (cpi->sf.reuse_inter_pred_sby) 723 if (cpi->sf.reuse_inter_pred_sby)
712 pd->dst = orig_dst; 724 pd->dst = orig_dst;
713 725
714 if (this_rd + intra_mode_cost < best_rd) { 726 if (this_rd + intra_mode_cost < best_rd) {
715 best_rd = this_rd; 727 best_rd = this_rd;
716 *returnrate = rate; 728 *returnrate = rate;
717 *returndistortion = dist; 729 *returndistortion = dist;
718 mbmi->mode = this_mode; 730 mbmi->mode = this_mode;
719 mbmi->tx_size = tmp_tx_size; 731 mbmi->tx_size = tmp_tx_size;
720 mbmi->ref_frame[0] = INTRA_FRAME; 732 mbmi->ref_frame[0] = INTRA_FRAME;
721 mbmi->uv_mode = this_mode; 733 mbmi->uv_mode = this_mode;
722 mbmi->mv[0].as_int = INVALID_MV; 734 mbmi->mv[0].as_int = INVALID_MV;
723 } else { 735 } else {
724 x->skip_txfm = skip_txfm; 736 x->skip_txfm[0] = skip_txfm;
725 } 737 }
726 } 738 }
727 } 739 }
728 740
729 return INT64_MAX; 741 return INT64_MAX;
730 } 742 }
OLDNEW
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_picklpf.c ('k') | source/libvpx/vp9/encoder/vp9_quantize.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698