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 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 mbmi->seg_id_predicted = vp9_read(r, pred_prob); | 139 mbmi->seg_id_predicted = vp9_read(r, pred_prob); |
140 segment_id = mbmi->seg_id_predicted ? predicted_segment_id | 140 segment_id = mbmi->seg_id_predicted ? predicted_segment_id |
141 : read_segment_id(r, seg); | 141 : read_segment_id(r, seg); |
142 } else { | 142 } else { |
143 segment_id = read_segment_id(r, seg); | 143 segment_id = read_segment_id(r, seg); |
144 } | 144 } |
145 set_segment_id(cm, bsize, mi_row, mi_col, segment_id); | 145 set_segment_id(cm, bsize, mi_row, mi_col, segment_id); |
146 return segment_id; | 146 return segment_id; |
147 } | 147 } |
148 | 148 |
149 static int read_skip_coeff(VP9_COMMON *cm, const MACROBLOCKD *xd, | 149 static int read_skip(VP9_COMMON *cm, const MACROBLOCKD *xd, |
150 int segment_id, vp9_reader *r) { | 150 int segment_id, vp9_reader *r) { |
151 if (vp9_segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP)) { | 151 if (vp9_segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP)) { |
152 return 1; | 152 return 1; |
153 } else { | 153 } else { |
154 const int ctx = vp9_get_skip_context(xd); | 154 const int ctx = vp9_get_skip_context(xd); |
155 const int skip = vp9_read(r, cm->fc.mbskip_probs[ctx]); | 155 const int skip = vp9_read(r, cm->fc.skip_probs[ctx]); |
156 if (!cm->frame_parallel_decoding_mode) | 156 if (!cm->frame_parallel_decoding_mode) |
157 ++cm->counts.mbskip[ctx][skip]; | 157 ++cm->counts.skip[ctx][skip]; |
158 return skip; | 158 return skip; |
159 } | 159 } |
160 } | 160 } |
161 | 161 |
162 static void read_intra_frame_mode_info(VP9_COMMON *const cm, | 162 static void read_intra_frame_mode_info(VP9_COMMON *const cm, |
163 MACROBLOCKD *const xd, | 163 MACROBLOCKD *const xd, |
164 int mi_row, int mi_col, vp9_reader *r) { | 164 int mi_row, int mi_col, vp9_reader *r) { |
165 MODE_INFO *const mi = xd->mi_8x8[0]; | 165 MODE_INFO *const mi = xd->mi_8x8[0]; |
166 MB_MODE_INFO *const mbmi = &mi->mbmi; | 166 MB_MODE_INFO *const mbmi = &mi->mbmi; |
167 const MODE_INFO *above_mi = xd->mi_8x8[-cm->mode_info_stride]; | 167 const MODE_INFO *above_mi = xd->mi_8x8[-cm->mode_info_stride]; |
168 const MODE_INFO *left_mi = xd->left_available ? xd->mi_8x8[-1] : NULL; | 168 const MODE_INFO *left_mi = xd->left_available ? xd->mi_8x8[-1] : NULL; |
169 const BLOCK_SIZE bsize = mbmi->sb_type; | 169 const BLOCK_SIZE bsize = mbmi->sb_type; |
170 | 170 |
171 mbmi->segment_id = read_intra_segment_id(cm, xd, mi_row, mi_col, r); | 171 mbmi->segment_id = read_intra_segment_id(cm, xd, mi_row, mi_col, r); |
172 mbmi->skip_coeff = read_skip_coeff(cm, xd, mbmi->segment_id, r); | 172 mbmi->skip = read_skip(cm, xd, mbmi->segment_id, r); |
173 mbmi->tx_size = read_tx_size(cm, xd, cm->tx_mode, bsize, 1, r); | 173 mbmi->tx_size = read_tx_size(cm, xd, cm->tx_mode, bsize, 1, r); |
174 mbmi->ref_frame[0] = INTRA_FRAME; | 174 mbmi->ref_frame[0] = INTRA_FRAME; |
175 mbmi->ref_frame[1] = NONE; | 175 mbmi->ref_frame[1] = NONE; |
176 | 176 |
177 if (bsize >= BLOCK_8X8) { | 177 if (bsize >= BLOCK_8X8) { |
178 const MB_PREDICTION_MODE A = above_block_mode(mi, above_mi, 0); | 178 const MB_PREDICTION_MODE A = vp9_above_block_mode(mi, above_mi, 0); |
179 const MB_PREDICTION_MODE L = left_block_mode(mi, left_mi, 0); | 179 const MB_PREDICTION_MODE L = vp9_left_block_mode(mi, left_mi, 0); |
180 mbmi->mode = read_intra_mode(r, vp9_kf_y_mode_prob[A][L]); | 180 mbmi->mode = read_intra_mode(r, vp9_kf_y_mode_prob[A][L]); |
181 } else { | 181 } else { |
182 // Only 4x4, 4x8, 8x4 blocks | 182 // Only 4x4, 4x8, 8x4 blocks |
183 const int num_4x4_w = num_4x4_blocks_wide_lookup[bsize]; // 1 or 2 | 183 const int num_4x4_w = num_4x4_blocks_wide_lookup[bsize]; // 1 or 2 |
184 const int num_4x4_h = num_4x4_blocks_high_lookup[bsize]; // 1 or 2 | 184 const int num_4x4_h = num_4x4_blocks_high_lookup[bsize]; // 1 or 2 |
185 int idx, idy; | 185 int idx, idy; |
186 | 186 |
187 for (idy = 0; idy < 2; idy += num_4x4_h) { | 187 for (idy = 0; idy < 2; idy += num_4x4_h) { |
188 for (idx = 0; idx < 2; idx += num_4x4_w) { | 188 for (idx = 0; idx < 2; idx += num_4x4_w) { |
189 const int ib = idy * 2 + idx; | 189 const int ib = idy * 2 + idx; |
190 const MB_PREDICTION_MODE A = above_block_mode(mi, above_mi, ib); | 190 const MB_PREDICTION_MODE A = vp9_above_block_mode(mi, above_mi, ib); |
191 const MB_PREDICTION_MODE L = left_block_mode(mi, left_mi, ib); | 191 const MB_PREDICTION_MODE L = vp9_left_block_mode(mi, left_mi, ib); |
192 const MB_PREDICTION_MODE b_mode = read_intra_mode(r, | 192 const MB_PREDICTION_MODE b_mode = read_intra_mode(r, |
193 vp9_kf_y_mode_prob[A][L]); | 193 vp9_kf_y_mode_prob[A][L]); |
194 mi->bmi[ib].as_mode = b_mode; | 194 mi->bmi[ib].as_mode = b_mode; |
195 if (num_4x4_h == 2) | 195 if (num_4x4_h == 2) |
196 mi->bmi[ib + 2].as_mode = b_mode; | 196 mi->bmi[ib + 2].as_mode = b_mode; |
197 if (num_4x4_w == 2) | 197 if (num_4x4_w == 2) |
198 mi->bmi[ib + 1].as_mode = b_mode; | 198 mi->bmi[ib + 1].as_mode = b_mode; |
199 } | 199 } |
200 } | 200 } |
201 | 201 |
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 MACROBLOCKD *const xd, | 513 MACROBLOCKD *const xd, |
514 const TileInfo *const tile, | 514 const TileInfo *const tile, |
515 int mi_row, int mi_col, vp9_reader *r) { | 515 int mi_row, int mi_col, vp9_reader *r) { |
516 MODE_INFO *const mi = xd->mi_8x8[0]; | 516 MODE_INFO *const mi = xd->mi_8x8[0]; |
517 MB_MODE_INFO *const mbmi = &mi->mbmi; | 517 MB_MODE_INFO *const mbmi = &mi->mbmi; |
518 int inter_block; | 518 int inter_block; |
519 | 519 |
520 mbmi->mv[0].as_int = 0; | 520 mbmi->mv[0].as_int = 0; |
521 mbmi->mv[1].as_int = 0; | 521 mbmi->mv[1].as_int = 0; |
522 mbmi->segment_id = read_inter_segment_id(cm, xd, mi_row, mi_col, r); | 522 mbmi->segment_id = read_inter_segment_id(cm, xd, mi_row, mi_col, r); |
523 mbmi->skip_coeff = read_skip_coeff(cm, xd, mbmi->segment_id, r); | 523 mbmi->skip = read_skip(cm, xd, mbmi->segment_id, r); |
524 inter_block = read_is_inter_block(cm, xd, mbmi->segment_id, r); | 524 inter_block = read_is_inter_block(cm, xd, mbmi->segment_id, r); |
525 mbmi->tx_size = read_tx_size(cm, xd, cm->tx_mode, mbmi->sb_type, | 525 mbmi->tx_size = read_tx_size(cm, xd, cm->tx_mode, mbmi->sb_type, |
526 !mbmi->skip_coeff || !inter_block, r); | 526 !mbmi->skip || !inter_block, r); |
527 | 527 |
528 if (inter_block) | 528 if (inter_block) |
529 read_inter_block_mode_info(cm, xd, tile, mi, mi_row, mi_col, r); | 529 read_inter_block_mode_info(cm, xd, tile, mi, mi_row, mi_col, r); |
530 else | 530 else |
531 read_intra_block_mode_info(cm, mi, r); | 531 read_intra_block_mode_info(cm, mi, r); |
532 } | 532 } |
533 | 533 |
534 void vp9_read_mode_info(VP9_COMMON *cm, MACROBLOCKD *xd, | 534 void vp9_read_mode_info(VP9_COMMON *cm, MACROBLOCKD *xd, |
535 const TileInfo *const tile, | 535 const TileInfo *const tile, |
536 int mi_row, int mi_col, vp9_reader *r) { | 536 int mi_row, int mi_col, vp9_reader *r) { |
537 if (frame_is_intra_only(cm)) | 537 if (frame_is_intra_only(cm)) |
538 read_intra_frame_mode_info(cm, xd, mi_row, mi_col, r); | 538 read_intra_frame_mode_info(cm, xd, mi_row, mi_col, r); |
539 else | 539 else |
540 read_inter_frame_mode_info(cm, xd, tile, mi_row, mi_col, r); | 540 read_inter_frame_mode_info(cm, xd, tile, mi_row, mi_col, r); |
541 } | 541 } |
OLD | NEW |