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

Side by Side Diff: source/libvpx/vp9/decoder/vp9_decodemv.c

Issue 1124333011: libvpx: Pull from upstream (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libvpx.git@master
Patch Set: only update to last nights LKGR Created 5 years, 7 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/decoder/vp9_decodeframe.c ('k') | source/libvpx/vp9/decoder/vp9_decoder.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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 74
75 if (!cm->frame_parallel_decoding_mode) 75 if (!cm->frame_parallel_decoding_mode)
76 ++get_tx_counts(max_tx_size, ctx, &counts->tx)[tx_size]; 76 ++get_tx_counts(max_tx_size, ctx, &counts->tx)[tx_size];
77 return (TX_SIZE)tx_size; 77 return (TX_SIZE)tx_size;
78 } 78 }
79 79
80 static TX_SIZE read_tx_size(VP9_COMMON *cm, MACROBLOCKD *xd, 80 static TX_SIZE read_tx_size(VP9_COMMON *cm, MACROBLOCKD *xd,
81 FRAME_COUNTS *counts, 81 FRAME_COUNTS *counts,
82 int allow_select, vp9_reader *r) { 82 int allow_select, vp9_reader *r) {
83 TX_MODE tx_mode = cm->tx_mode; 83 TX_MODE tx_mode = cm->tx_mode;
84 BLOCK_SIZE bsize = xd->mi[0].src_mi->mbmi.sb_type; 84 BLOCK_SIZE bsize = xd->mi[0]->mbmi.sb_type;
85 const TX_SIZE max_tx_size = max_txsize_lookup[bsize]; 85 const TX_SIZE max_tx_size = max_txsize_lookup[bsize];
86 if (allow_select && tx_mode == TX_MODE_SELECT && bsize >= BLOCK_8X8) 86 if (allow_select && tx_mode == TX_MODE_SELECT && bsize >= BLOCK_8X8)
87 return read_selected_tx_size(cm, xd, counts, max_tx_size, r); 87 return read_selected_tx_size(cm, xd, counts, max_tx_size, r);
88 else 88 else
89 return MIN(max_tx_size, tx_mode_to_biggest_tx_size[tx_mode]); 89 return MIN(max_tx_size, tx_mode_to_biggest_tx_size[tx_mode]);
90 } 90 }
91 91
92 static void set_segment_id(VP9_COMMON *cm, BLOCK_SIZE bsize, 92 static void set_segment_id(VP9_COMMON *cm, BLOCK_SIZE bsize,
93 int mi_row, int mi_col, int segment_id) { 93 int mi_row, int mi_col, int segment_id) {
94 const int mi_offset = mi_row * cm->mi_cols + mi_col; 94 const int mi_offset = mi_row * cm->mi_cols + mi_col;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 } 138 }
139 139
140 segment_id = read_segment_id(r, seg); 140 segment_id = read_segment_id(r, seg);
141 set_segment_id(cm, bsize, mi_row, mi_col, segment_id); 141 set_segment_id(cm, bsize, mi_row, mi_col, segment_id);
142 return segment_id; 142 return segment_id;
143 } 143 }
144 144
145 static int read_inter_segment_id(VP9_COMMON *const cm, MACROBLOCKD *const xd, 145 static int read_inter_segment_id(VP9_COMMON *const cm, MACROBLOCKD *const xd,
146 int mi_row, int mi_col, vp9_reader *r) { 146 int mi_row, int mi_col, vp9_reader *r) {
147 struct segmentation *const seg = &cm->seg; 147 struct segmentation *const seg = &cm->seg;
148 MB_MODE_INFO *const mbmi = &xd->mi[0].src_mi->mbmi; 148 MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
149 const BLOCK_SIZE bsize = mbmi->sb_type; 149 const BLOCK_SIZE bsize = mbmi->sb_type;
150 int predicted_segment_id, segment_id; 150 int predicted_segment_id, segment_id;
151 151
152 if (!seg->enabled) 152 if (!seg->enabled)
153 return 0; // Default for disabled segmentation 153 return 0; // Default for disabled segmentation
154 154
155 predicted_segment_id = cm->last_frame_seg_map ? 155 predicted_segment_id = cm->last_frame_seg_map ?
156 vp9_get_segment_id(cm, cm->last_frame_seg_map, bsize, mi_row, mi_col) : 0; 156 vp9_get_segment_id(cm, cm->last_frame_seg_map, bsize, mi_row, mi_col) : 0;
157 157
158 if (!seg->update_map) { 158 if (!seg->update_map) {
(...skipping 25 matching lines...) Expand all
184 if (!cm->frame_parallel_decoding_mode) 184 if (!cm->frame_parallel_decoding_mode)
185 ++counts->skip[ctx][skip]; 185 ++counts->skip[ctx][skip];
186 return skip; 186 return skip;
187 } 187 }
188 } 188 }
189 189
190 static void read_intra_frame_mode_info(VP9_COMMON *const cm, 190 static void read_intra_frame_mode_info(VP9_COMMON *const cm,
191 MACROBLOCKD *const xd, 191 MACROBLOCKD *const xd,
192 FRAME_COUNTS *counts, 192 FRAME_COUNTS *counts,
193 int mi_row, int mi_col, vp9_reader *r) { 193 int mi_row, int mi_col, vp9_reader *r) {
194 MODE_INFO *const mi = xd->mi[0].src_mi; 194 MODE_INFO *const mi = xd->mi[0];
195 MB_MODE_INFO *const mbmi = &mi->mbmi; 195 MB_MODE_INFO *const mbmi = &mi->mbmi;
196 const MODE_INFO *above_mi = xd->mi[-cm->mi_stride].src_mi; 196 const MODE_INFO *above_mi = xd->above_mi;
197 const MODE_INFO *left_mi = xd->left_available ? xd->mi[-1].src_mi : NULL; 197 const MODE_INFO *left_mi = xd->left_mi;
198 const BLOCK_SIZE bsize = mbmi->sb_type; 198 const BLOCK_SIZE bsize = mbmi->sb_type;
199 int i; 199 int i;
200 200
201 mbmi->segment_id = read_intra_segment_id(cm, bsize, mi_row, mi_col, r); 201 mbmi->segment_id = read_intra_segment_id(cm, bsize, mi_row, mi_col, r);
202 mbmi->skip = read_skip(cm, xd, counts, mbmi->segment_id, r); 202 mbmi->skip = read_skip(cm, xd, counts, mbmi->segment_id, r);
203 mbmi->tx_size = read_tx_size(cm, xd, counts, 1, r); 203 mbmi->tx_size = read_tx_size(cm, xd, counts, 1, r);
204 mbmi->ref_frame[0] = INTRA_FRAME; 204 mbmi->ref_frame[0] = INTRA_FRAME;
205 mbmi->ref_frame[1] = NONE; 205 mbmi->ref_frame[1] = NONE;
206 206
207 switch (bsize) { 207 switch (bsize) {
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 nearestmv, nearmv, is_compound, allow_hp, r); 559 nearestmv, nearmv, is_compound, allow_hp, r);
560 } 560 }
561 } 561 }
562 562
563 static void read_inter_frame_mode_info(VP9Decoder *const pbi, 563 static void read_inter_frame_mode_info(VP9Decoder *const pbi,
564 MACROBLOCKD *const xd, 564 MACROBLOCKD *const xd,
565 FRAME_COUNTS *counts, 565 FRAME_COUNTS *counts,
566 const TileInfo *const tile, 566 const TileInfo *const tile,
567 int mi_row, int mi_col, vp9_reader *r) { 567 int mi_row, int mi_col, vp9_reader *r) {
568 VP9_COMMON *const cm = &pbi->common; 568 VP9_COMMON *const cm = &pbi->common;
569 MODE_INFO *const mi = xd->mi[0].src_mi; 569 MODE_INFO *const mi = xd->mi[0];
570 MB_MODE_INFO *const mbmi = &mi->mbmi; 570 MB_MODE_INFO *const mbmi = &mi->mbmi;
571 int inter_block; 571 int inter_block;
572 572
573 mbmi->mv[0].as_int = 0; 573 mbmi->mv[0].as_int = 0;
574 mbmi->mv[1].as_int = 0; 574 mbmi->mv[1].as_int = 0;
575 mbmi->segment_id = read_inter_segment_id(cm, xd, mi_row, mi_col, r); 575 mbmi->segment_id = read_inter_segment_id(cm, xd, mi_row, mi_col, r);
576 mbmi->skip = read_skip(cm, xd, counts, mbmi->segment_id, r); 576 mbmi->skip = read_skip(cm, xd, counts, mbmi->segment_id, r);
577 inter_block = read_is_inter_block(cm, xd, counts, mbmi->segment_id, r); 577 inter_block = read_is_inter_block(cm, xd, counts, mbmi->segment_id, r);
578 mbmi->tx_size = read_tx_size(cm, xd, counts, !mbmi->skip || !inter_block, r); 578 mbmi->tx_size = read_tx_size(cm, xd, counts, !mbmi->skip || !inter_block, r);
579 579
580 if (inter_block) 580 if (inter_block)
581 read_inter_block_mode_info(pbi, xd, counts, tile, mi, mi_row, mi_col, r); 581 read_inter_block_mode_info(pbi, xd, counts, tile, mi, mi_row, mi_col, r);
582 else 582 else
583 read_intra_block_mode_info(cm, counts, mi, r); 583 read_intra_block_mode_info(cm, counts, mi, r);
584 } 584 }
585 585
586 void vp9_read_mode_info(VP9Decoder *const pbi, MACROBLOCKD *xd, 586 void vp9_read_mode_info(VP9Decoder *const pbi, MACROBLOCKD *xd,
587 FRAME_COUNTS *counts, 587 FRAME_COUNTS *counts,
588 const TileInfo *const tile, 588 const TileInfo *const tile,
589 int mi_row, int mi_col, vp9_reader *r) { 589 int mi_row, int mi_col, vp9_reader *r) {
590 VP9_COMMON *const cm = &pbi->common; 590 VP9_COMMON *const cm = &pbi->common;
591 MODE_INFO *const mi = xd->mi[0].src_mi; 591 MODE_INFO *const mi = xd->mi[0];
592 const int bw = num_8x8_blocks_wide_lookup[mi->mbmi.sb_type]; 592 const int bw = num_8x8_blocks_wide_lookup[mi->mbmi.sb_type];
593 const int bh = num_8x8_blocks_high_lookup[mi->mbmi.sb_type]; 593 const int bh = num_8x8_blocks_high_lookup[mi->mbmi.sb_type];
594 const int x_mis = MIN(bw, cm->mi_cols - mi_col); 594 const int x_mis = MIN(bw, cm->mi_cols - mi_col);
595 const int y_mis = MIN(bh, cm->mi_rows - mi_row); 595 const int y_mis = MIN(bh, cm->mi_rows - mi_row);
596 MV_REF* frame_mvs = cm->cur_frame->mvs + mi_row * cm->mi_cols + mi_col; 596 MV_REF* frame_mvs = cm->cur_frame->mvs + mi_row * cm->mi_cols + mi_col;
597 int w, h; 597 int w, h;
598 598
599 if (frame_is_intra_only(cm)) 599 if (frame_is_intra_only(cm))
600 read_intra_frame_mode_info(cm, xd, counts, mi_row, mi_col, r); 600 read_intra_frame_mode_info(cm, xd, counts, mi_row, mi_col, r);
601 else 601 else
602 read_inter_frame_mode_info(pbi, xd, counts, tile, mi_row, mi_col, r); 602 read_inter_frame_mode_info(pbi, xd, counts, tile, mi_row, mi_col, r);
603 603
604 for (h = 0; h < y_mis; ++h) { 604 for (h = 0; h < y_mis; ++h) {
605 MV_REF *const frame_mv = frame_mvs + h * cm->mi_cols; 605 MV_REF *const frame_mv = frame_mvs + h * cm->mi_cols;
606 for (w = 0; w < x_mis; ++w) { 606 for (w = 0; w < x_mis; ++w) {
607 MV_REF *const mv = frame_mv + w; 607 MV_REF *const mv = frame_mv + w;
608 mv->ref_frame[0] = mi->src_mi->mbmi.ref_frame[0]; 608 mv->ref_frame[0] = mi->mbmi.ref_frame[0];
609 mv->ref_frame[1] = mi->src_mi->mbmi.ref_frame[1]; 609 mv->ref_frame[1] = mi->mbmi.ref_frame[1];
610 mv->mv[0].as_int = mi->src_mi->mbmi.mv[0].as_int; 610 mv->mv[0].as_int = mi->mbmi.mv[0].as_int;
611 mv->mv[1].as_int = mi->src_mi->mbmi.mv[1].as_int; 611 mv->mv[1].as_int = mi->mbmi.mv[1].as_int;
612 } 612 }
613 } 613 }
614 } 614 }
OLDNEW
« no previous file with comments | « source/libvpx/vp9/decoder/vp9_decodeframe.c ('k') | source/libvpx/vp9/decoder/vp9_decoder.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698