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

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

Issue 996503002: libvpx: Pull from upstream (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libvpx.git@master
Patch Set: Created 5 years, 9 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
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_bitstream.c ('k') | source/libvpx/vp9/encoder/vp9_encodemb.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) 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 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 break; 137 break;
138 } 138 }
139 return ROUND_POWER_OF_TWO(var, num_pels_log2_lookup[bs]); 139 return ROUND_POWER_OF_TWO(var, num_pels_log2_lookup[bs]);
140 } 140 }
141 #endif // CONFIG_VP9_HIGHBITDEPTH 141 #endif // CONFIG_VP9_HIGHBITDEPTH
142 142
143 static unsigned int get_sby_perpixel_diff_variance(VP9_COMP *cpi, 143 static unsigned int get_sby_perpixel_diff_variance(VP9_COMP *cpi,
144 const struct buf_2d *ref, 144 const struct buf_2d *ref,
145 int mi_row, int mi_col, 145 int mi_row, int mi_col,
146 BLOCK_SIZE bs) { 146 BLOCK_SIZE bs) {
147 unsigned int sse, var;
148 uint8_t *last_y;
147 const YV12_BUFFER_CONFIG *last = get_ref_frame_buffer(cpi, LAST_FRAME); 149 const YV12_BUFFER_CONFIG *last = get_ref_frame_buffer(cpi, LAST_FRAME);
148 const uint8_t* last_y = &last->y_buffer[mi_row * MI_SIZE * last->y_stride + 150
149 mi_col * MI_SIZE]; 151 assert(last != NULL);
150 unsigned int sse; 152 last_y =
151 const unsigned int var = cpi->fn_ptr[bs].vf(ref->buf, ref->stride, 153 &last->y_buffer[mi_row * MI_SIZE * last->y_stride + mi_col * MI_SIZE];
152 last_y, last->y_stride, &sse); 154 var = cpi->fn_ptr[bs].vf(ref->buf, ref->stride, last_y, last->y_stride, &sse);
153 return ROUND_POWER_OF_TWO(var, num_pels_log2_lookup[bs]); 155 return ROUND_POWER_OF_TWO(var, num_pels_log2_lookup[bs]);
154 } 156 }
155 157
156 static BLOCK_SIZE get_rd_var_based_fixed_partition(VP9_COMP *cpi, MACROBLOCK *x, 158 static BLOCK_SIZE get_rd_var_based_fixed_partition(VP9_COMP *cpi, MACROBLOCK *x,
157 int mi_row, 159 int mi_row,
158 int mi_col) { 160 int mi_col) {
159 unsigned int var = get_sby_perpixel_diff_variance(cpi, &x->plane[0].src, 161 unsigned int var = get_sby_perpixel_diff_variance(cpi, &x->plane[0].src,
160 mi_row, mi_col, 162 mi_row, mi_col,
161 BLOCK_64X64); 163 BLOCK_64X64);
162 if (var < 8) 164 if (var < 8)
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 cpi->vbp_bsize_min = (use_4x4_partition) ? BLOCK_8X8 : BLOCK_16X16; 513 cpi->vbp_bsize_min = (use_4x4_partition) ? BLOCK_8X8 : BLOCK_16X16;
512 } 514 }
513 } 515 }
514 516
515 #if CONFIG_VP9_HIGHBITDEPTH 517 #if CONFIG_VP9_HIGHBITDEPTH
516 #define GLOBAL_MOTION 0 518 #define GLOBAL_MOTION 0
517 #else 519 #else
518 #define GLOBAL_MOTION 1 520 #define GLOBAL_MOTION 1
519 #endif 521 #endif
520 522
521 #if GLOBAL_MOTION
522 static int vector_match(int16_t *ref, int16_t *src) {
523 int best_sad = INT_MAX;
524 int this_sad;
525 int d;
526 int center, offset = 0;
527 for (d = 0; d <= 64; d += 16) {
528 this_sad = vp9_vector_sad(&ref[d], src, 64);
529 if (this_sad < best_sad) {
530 best_sad = this_sad;
531 offset = d;
532 }
533 }
534 center = offset;
535
536 for (d = -8; d <= 8; d += 16) {
537 int this_pos = offset + d;
538 // check limit
539 if (this_pos < 0 || this_pos > 64)
540 continue;
541 this_sad = vp9_vector_sad(&ref[this_pos], src, 64);
542 if (this_sad < best_sad) {
543 best_sad = this_sad;
544 center = this_pos;
545 }
546 }
547 offset = center;
548
549 for (d = -4; d <= 4; d += 8) {
550 int this_pos = offset + d;
551 // check limit
552 if (this_pos < 0 || this_pos > 64)
553 continue;
554 this_sad = vp9_vector_sad(&ref[this_pos], src, 64);
555 if (this_sad < best_sad) {
556 best_sad = this_sad;
557 center = this_pos;
558 }
559 }
560 offset = center;
561
562 for (d = -2; d <= 2; d += 4) {
563 int this_pos = offset + d;
564 // check limit
565 if (this_pos < 0 || this_pos > 64)
566 continue;
567 this_sad = vp9_vector_sad(&ref[this_pos], src, 64);
568 if (this_sad < best_sad) {
569 best_sad = this_sad;
570 center = this_pos;
571 }
572 }
573 offset = center;
574
575 for (d = -1; d <= 1; d += 2) {
576 int this_pos = offset + d;
577 // check limit
578 if (this_pos < 0 || this_pos > 64)
579 continue;
580 this_sad = vp9_vector_sad(&ref[this_pos], src, 64);
581 if (this_sad < best_sad) {
582 best_sad = this_sad;
583 center = this_pos;
584 }
585 }
586
587 return (center - 32);
588 }
589
590 static const MV search_pos[9] = {
591 {-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 0}, {0, 1},
592 {1, -1}, {1, 0}, {1, 1},
593 };
594
595 static void motion_estimation(VP9_COMP *cpi, MACROBLOCK *x) {
596 MACROBLOCKD *xd = &x->e_mbd;
597 DECLARE_ALIGNED(16, int16_t, hbuf[128]);
598 DECLARE_ALIGNED(16, int16_t, vbuf[128]);
599 DECLARE_ALIGNED(16, int16_t, src_hbuf[64]);
600 DECLARE_ALIGNED(16, int16_t, src_vbuf[64]);
601 int idx;
602 const int stride = 64;
603 const int search_width = 128;
604 const int search_height = 128;
605 const int src_stride = x->plane[0].src.stride;
606 const int ref_stride = xd->plane[0].pre[0].stride;
607 uint8_t const *ref_buf, *src_buf;
608 MV *tmp_mv = &xd->mi[0].src_mi->mbmi.mv[0].as_mv;
609 int best_sad;
610 MV this_mv;
611
612 // Set up prediction 1-D reference set
613 ref_buf = xd->plane[0].pre[0].buf + (-32);
614 for (idx = 0; idx < search_width; idx += 16) {
615 vp9_int_pro_row(&hbuf[idx], ref_buf, ref_stride, 64);
616 ref_buf += 16;
617 }
618
619 ref_buf = xd->plane[0].pre[0].buf + (-32) * ref_stride;
620 for (idx = 0; idx < search_height; ++idx) {
621 vbuf[idx] = vp9_int_pro_col(ref_buf, 64);
622 ref_buf += ref_stride;
623 }
624
625 // Set up src 1-D reference set
626 for (idx = 0; idx < stride; idx += 16) {
627 src_buf = x->plane[0].src.buf + idx;
628 vp9_int_pro_row(&src_hbuf[idx], src_buf, src_stride, 64);
629 }
630
631 src_buf = x->plane[0].src.buf;
632 for (idx = 0; idx < stride; ++idx) {
633 src_vbuf[idx] = vp9_int_pro_col(src_buf, 64);
634 src_buf += src_stride;
635 }
636
637 // Find the best match per 1-D search
638
639 tmp_mv->col = vector_match(hbuf, src_hbuf);
640 tmp_mv->row = vector_match(vbuf, src_vbuf);
641
642 best_sad = INT_MAX;
643 this_mv = *tmp_mv;
644 for (idx = 0; idx < 9; ++idx) {
645 int this_sad;
646 src_buf = x->plane[0].src.buf;
647 ref_buf = xd->plane[0].pre[0].buf +
648 (search_pos[idx].row + this_mv.row) * ref_stride +
649 (search_pos[idx].col + this_mv.col);
650
651 this_sad = cpi->fn_ptr[BLOCK_64X64].sdf(src_buf, src_stride,
652 ref_buf, ref_stride);
653 if (this_sad < best_sad) {
654 best_sad = this_sad;
655 tmp_mv->row = search_pos[idx].row + this_mv.row;
656 tmp_mv->col = search_pos[idx].col + this_mv.col;
657 }
658 }
659
660 tmp_mv->row *= 8;
661 tmp_mv->col *= 8;
662
663 x->pred_mv[LAST_FRAME] = *tmp_mv;
664 }
665 #endif
666
667 // This function chooses partitioning based on the variance between source and 523 // This function chooses partitioning based on the variance between source and
668 // reconstructed last, where variance is computed for downs-sampled inputs. 524 // reconstructed last, where variance is computed for down-sampled inputs.
669 static void choose_partitioning(VP9_COMP *cpi, 525 static void choose_partitioning(VP9_COMP *cpi,
670 const TileInfo *const tile, 526 const TileInfo *const tile,
671 MACROBLOCK *x, 527 MACROBLOCK *x,
672 int mi_row, int mi_col) { 528 int mi_row, int mi_col) {
673 VP9_COMMON * const cm = &cpi->common; 529 VP9_COMMON * const cm = &cpi->common;
674 MACROBLOCKD *xd = &x->e_mbd; 530 MACROBLOCKD *xd = &x->e_mbd;
675 int i, j, k, m; 531 int i, j, k, m;
676 v64x64 vt; 532 v64x64 vt;
677 v16x16 vt2[16]; 533 v16x16 vt2[16];
678 uint8_t *s; 534 uint8_t *s;
679 const uint8_t *d; 535 const uint8_t *d;
680 int sp; 536 int sp;
681 int dp; 537 int dp;
682 int pixels_wide = 64, pixels_high = 64; 538 int pixels_wide = 64, pixels_high = 64;
683 const YV12_BUFFER_CONFIG *yv12 = get_ref_frame_buffer(cpi, LAST_FRAME);
684 539
685 // Always use 4x4 partition for key frame. 540 // Always use 4x4 partition for key frame.
686 const int is_key_frame = (cm->frame_type == KEY_FRAME); 541 const int is_key_frame = (cm->frame_type == KEY_FRAME);
687 const int use_4x4_partition = is_key_frame; 542 const int use_4x4_partition = is_key_frame;
688 const int low_res = (cm->width <= 352 && cm->height <= 288); 543 const int low_res = (cm->width <= 352 && cm->height <= 288);
689 int variance4x4downsample[16]; 544 int variance4x4downsample[16];
690 545
691 int segment_id = CR_SEGMENT_ID_BASE; 546 int segment_id = CR_SEGMENT_ID_BASE;
692 if (cpi->oxcf.aq_mode == CYCLIC_REFRESH_AQ && cm->seg.enabled) { 547 if (cpi->oxcf.aq_mode == CYCLIC_REFRESH_AQ && cm->seg.enabled) {
693 const uint8_t *const map = cm->seg.update_map ? cpi->segmentation_map : 548 const uint8_t *const map = cm->seg.update_map ? cpi->segmentation_map :
694 cm->last_frame_seg_map; 549 cm->last_frame_seg_map;
695 segment_id = vp9_get_segment_id(cm, map, BLOCK_64X64, mi_row, mi_col); 550 segment_id = vp9_get_segment_id(cm, map, BLOCK_64X64, mi_row, mi_col);
696 } 551 }
697 552
698 set_offsets(cpi, tile, x, mi_row, mi_col, BLOCK_64X64); 553 set_offsets(cpi, tile, x, mi_row, mi_col, BLOCK_64X64);
699 554
700 if (xd->mb_to_right_edge < 0) 555 if (xd->mb_to_right_edge < 0)
701 pixels_wide += (xd->mb_to_right_edge >> 3); 556 pixels_wide += (xd->mb_to_right_edge >> 3);
702 if (xd->mb_to_bottom_edge < 0) 557 if (xd->mb_to_bottom_edge < 0)
703 pixels_high += (xd->mb_to_bottom_edge >> 3); 558 pixels_high += (xd->mb_to_bottom_edge >> 3);
704 559
705 s = x->plane[0].src.buf; 560 s = x->plane[0].src.buf;
706 sp = x->plane[0].src.stride; 561 sp = x->plane[0].src.stride;
707 562
708 if (!is_key_frame) { 563 if (!is_key_frame) {
709 MB_MODE_INFO *mbmi = &xd->mi[0].src_mi->mbmi; 564 MB_MODE_INFO *mbmi = &xd->mi[0].src_mi->mbmi;
710 unsigned int var = 0, sse; 565 unsigned int uv_sad;
566 #if GLOBAL_MOTION
567 unsigned int y_sad;
568 BLOCK_SIZE bsize;
569 #endif
570 const YV12_BUFFER_CONFIG *yv12 = get_ref_frame_buffer(cpi, LAST_FRAME);
571 assert(yv12 != NULL);
711 vp9_setup_pre_planes(xd, 0, yv12, mi_row, mi_col, 572 vp9_setup_pre_planes(xd, 0, yv12, mi_row, mi_col,
712 &cm->frame_refs[LAST_FRAME - 1].sf); 573 &cm->frame_refs[LAST_FRAME - 1].sf);
713 mbmi->ref_frame[0] = LAST_FRAME; 574 mbmi->ref_frame[0] = LAST_FRAME;
714 mbmi->ref_frame[1] = NONE; 575 mbmi->ref_frame[1] = NONE;
715 mbmi->sb_type = BLOCK_64X64; 576 mbmi->sb_type = BLOCK_64X64;
716 mbmi->mv[0].as_int = 0; 577 mbmi->mv[0].as_int = 0;
717 mbmi->interp_filter = BILINEAR; 578 mbmi->interp_filter = BILINEAR;
718 579
719 #if GLOBAL_MOTION 580 #if GLOBAL_MOTION
720 motion_estimation(cpi, x); 581 if (mi_row + 4 < cm->mi_rows && mi_col + 4 < cm->mi_cols)
582 bsize = BLOCK_64X64;
583 else if (mi_row + 4 < cm->mi_rows && mi_col + 4 >= cm->mi_cols)
584 bsize = BLOCK_32X64;
585 else if (mi_row + 4 >= cm->mi_rows && mi_col + 4 < cm->mi_cols)
586 bsize = BLOCK_64X32;
587 else
588 bsize = BLOCK_32X32;
589
590 y_sad = vp9_int_pro_motion_estimation(cpi, x, bsize);
721 #endif 591 #endif
722 592
723 vp9_build_inter_predictors_sb(xd, mi_row, mi_col, BLOCK_64X64); 593 vp9_build_inter_predictors_sb(xd, mi_row, mi_col, BLOCK_64X64);
724 594
725 for (i = 1; i <= 2; ++i) { 595 for (i = 1; i <= 2; ++i) {
726 struct macroblock_plane *p = &x->plane[i]; 596 struct macroblock_plane *p = &x->plane[i];
727 struct macroblockd_plane *pd = &xd->plane[i]; 597 struct macroblockd_plane *pd = &xd->plane[i];
598 #if GLOBAL_MOTION
599 const BLOCK_SIZE bs = get_plane_block_size(bsize, pd);
600 #else
728 const BLOCK_SIZE bs = get_plane_block_size(BLOCK_64X64, pd); 601 const BLOCK_SIZE bs = get_plane_block_size(BLOCK_64X64, pd);
729 var += cpi->fn_ptr[bs].vf(p->src.buf, p->src.stride, 602 #endif
730 pd->dst.buf, pd->dst.stride, &sse); 603 if (bs == BLOCK_INVALID)
731 if (sse > 2048) 604 uv_sad = INT_MAX;
732 x->color_sensitivity[i - 1] = 1; 605 else
606 uv_sad = cpi->fn_ptr[bs].sdf(p->src.buf, p->src.stride,
607 pd->dst.buf, pd->dst.stride);
608
609 #if GLOBAL_MOTION
610 x->color_sensitivity[i - 1] = uv_sad * 4 > y_sad;
611 #else
612 x->color_sensitivity[i - 1] = (uv_sad > 512);
613 #endif
733 } 614 }
734 615
735 d = xd->plane[0].dst.buf; 616 d = xd->plane[0].dst.buf;
736 dp = xd->plane[0].dst.stride; 617 dp = xd->plane[0].dst.stride;
737 } else { 618 } else {
738 d = VP9_VAR_OFFS; 619 d = VP9_VAR_OFFS;
739 dp = 0; 620 dp = 0;
740 #if CONFIG_VP9_HIGHBITDEPTH 621 #if CONFIG_VP9_HIGHBITDEPTH
741 if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) { 622 if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
742 switch (xd->bd) { 623 switch (xd->bd) {
(...skipping 3145 matching lines...) Expand 10 before | Expand all | Expand 10 after
3888 vp9_initialize_me_consts(cpi, cm->base_qindex); 3769 vp9_initialize_me_consts(cpi, cm->base_qindex);
3889 init_encode_frame_mb_context(cpi); 3770 init_encode_frame_mb_context(cpi);
3890 cm->use_prev_frame_mvs = !cm->error_resilient_mode && 3771 cm->use_prev_frame_mvs = !cm->error_resilient_mode &&
3891 cm->width == cm->last_width && 3772 cm->width == cm->last_width &&
3892 cm->height == cm->last_height && 3773 cm->height == cm->last_height &&
3893 !cm->intra_only && 3774 !cm->intra_only &&
3894 cm->last_show_frame; 3775 cm->last_show_frame;
3895 // Special case: set prev_mi to NULL when the previous mode info 3776 // Special case: set prev_mi to NULL when the previous mode info
3896 // context cannot be used. 3777 // context cannot be used.
3897 cm->prev_mi = cm->use_prev_frame_mvs ? 3778 cm->prev_mi = cm->use_prev_frame_mvs ?
3898 cm->prev_mip + cm->mi_stride + 1 : NULL; 3779 cm->prev_mip + cm->mi_stride + 1 : NULL;
3899 3780
3900 x->quant_fp = cpi->sf.use_quant_fp; 3781 x->quant_fp = cpi->sf.use_quant_fp;
3901 vp9_zero(x->skip_txfm); 3782 vp9_zero(x->skip_txfm);
3902 if (sf->use_nonrd_pick_mode) { 3783 if (sf->use_nonrd_pick_mode) {
3903 // Initialize internal buffer pointers for rtc coding, where non-RD 3784 // Initialize internal buffer pointers for rtc coding, where non-RD
3904 // mode decision is used and hence no buffer pointer swap needed. 3785 // mode decision is used and hence no buffer pointer swap needed.
3905 int i; 3786 int i;
3906 struct macroblock_plane *const p = x->plane; 3787 struct macroblock_plane *const p = x->plane;
3907 struct macroblockd_plane *const pd = xd->plane; 3788 struct macroblockd_plane *const pd = xd->plane;
3908 PICK_MODE_CONTEXT *ctx = &cpi->td.pc_root->none; 3789 PICK_MODE_CONTEXT *ctx = &cpi->td.pc_root->none;
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
4160 vp9_encode_intra_block_plane(x, MAX(bsize, BLOCK_8X8), plane); 4041 vp9_encode_intra_block_plane(x, MAX(bsize, BLOCK_8X8), plane);
4161 if (output_enabled) 4042 if (output_enabled)
4162 sum_intra_stats(td->counts, mi); 4043 sum_intra_stats(td->counts, mi);
4163 vp9_tokenize_sb(cpi, td, t, !output_enabled, MAX(bsize, BLOCK_8X8)); 4044 vp9_tokenize_sb(cpi, td, t, !output_enabled, MAX(bsize, BLOCK_8X8));
4164 } else { 4045 } else {
4165 int ref; 4046 int ref;
4166 const int is_compound = has_second_ref(mbmi); 4047 const int is_compound = has_second_ref(mbmi);
4167 for (ref = 0; ref < 1 + is_compound; ++ref) { 4048 for (ref = 0; ref < 1 + is_compound; ++ref) {
4168 YV12_BUFFER_CONFIG *cfg = get_ref_frame_buffer(cpi, 4049 YV12_BUFFER_CONFIG *cfg = get_ref_frame_buffer(cpi,
4169 mbmi->ref_frame[ref]); 4050 mbmi->ref_frame[ref]);
4051 assert(cfg != NULL);
4170 vp9_setup_pre_planes(xd, ref, cfg, mi_row, mi_col, 4052 vp9_setup_pre_planes(xd, ref, cfg, mi_row, mi_col,
4171 &xd->block_refs[ref]->sf); 4053 &xd->block_refs[ref]->sf);
4172 } 4054 }
4173 if (!(cpi->sf.reuse_inter_pred_sby && ctx->pred_pixel_ready) || seg_skip) 4055 if (!(cpi->sf.reuse_inter_pred_sby && ctx->pred_pixel_ready) || seg_skip)
4174 vp9_build_inter_predictors_sby(xd, mi_row, mi_col, MAX(bsize, BLOCK_8X8)); 4056 vp9_build_inter_predictors_sby(xd, mi_row, mi_col, MAX(bsize, BLOCK_8X8));
4175 4057
4176 vp9_build_inter_predictors_sbuv(xd, mi_row, mi_col, MAX(bsize, BLOCK_8X8)); 4058 vp9_build_inter_predictors_sbuv(xd, mi_row, mi_col, MAX(bsize, BLOCK_8X8));
4177 4059
4178 vp9_encode_sb(x, MAX(bsize, BLOCK_8X8)); 4060 vp9_encode_sb(x, MAX(bsize, BLOCK_8X8));
4179 vp9_tokenize_sb(cpi, td, t, !output_enabled, MAX(bsize, BLOCK_8X8)); 4061 vp9_tokenize_sb(cpi, td, t, !output_enabled, MAX(bsize, BLOCK_8X8));
(...skipping 18 matching lines...) Expand all
4198 4080
4199 for (y = 0; y < mi_height; y++) 4081 for (y = 0; y < mi_height; y++)
4200 for (x = 0; x < mi_width; x++) 4082 for (x = 0; x < mi_width; x++)
4201 if (mi_col + x < cm->mi_cols && mi_row + y < cm->mi_rows) 4083 if (mi_col + x < cm->mi_cols && mi_row + y < cm->mi_rows)
4202 mi_8x8[mis * y + x].src_mi->mbmi.tx_size = tx_size; 4084 mi_8x8[mis * y + x].src_mi->mbmi.tx_size = tx_size;
4203 } 4085 }
4204 ++td->counts->tx.tx_totals[mbmi->tx_size]; 4086 ++td->counts->tx.tx_totals[mbmi->tx_size];
4205 ++td->counts->tx.tx_totals[get_uv_tx_size(mbmi, &xd->plane[1])]; 4087 ++td->counts->tx.tx_totals[get_uv_tx_size(mbmi, &xd->plane[1])];
4206 } 4088 }
4207 } 4089 }
OLDNEW
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_bitstream.c ('k') | source/libvpx/vp9/encoder/vp9_encodemb.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698