Index: source/libvpx/vp9/encoder/vp9_segmentation.c |
=================================================================== |
--- source/libvpx/vp9/encoder/vp9_segmentation.c (revision 271012) |
+++ source/libvpx/vp9/encoder/vp9_segmentation.c (working copy) |
@@ -109,7 +109,7 @@ |
} |
static void count_segs(VP9_COMP *cpi, const TileInfo *const tile, |
- MODE_INFO **mi_8x8, |
+ MODE_INFO **mi, |
int *no_pred_segcounts, |
int (*temporal_predictor_count)[2], |
int *t_unpred_seg_counts, |
@@ -121,7 +121,7 @@ |
if (mi_row >= cm->mi_rows || mi_col >= cm->mi_cols) |
return; |
- xd->mi = mi_8x8; |
+ xd->mi = mi; |
segment_id = xd->mi[0]->mbmi.segment_id; |
set_mi_row_col(xd, tile, mi_row, bh, mi_col, bw, cm->mi_rows, cm->mi_cols); |
@@ -131,7 +131,7 @@ |
// Temporal prediction not allowed on key frames |
if (cm->frame_type != KEY_FRAME) { |
- const BLOCK_SIZE bsize = mi_8x8[0]->mbmi.sb_type; |
+ const BLOCK_SIZE bsize = xd->mi[0]->mbmi.sb_type; |
// Test to see if the segment id matches the predicted value. |
const int pred_segment_id = vp9_get_segment_id(cm, cm->last_frame_seg_map, |
bsize, mi_row, mi_col); |
@@ -143,14 +143,14 @@ |
xd->mi[0]->mbmi.seg_id_predicted = pred_flag; |
temporal_predictor_count[pred_context][pred_flag]++; |
+ // Update the "unpredicted" segment count |
if (!pred_flag) |
- // Update the "unpredicted" segment count |
t_unpred_seg_counts[segment_id]++; |
} |
} |
static void count_segs_sb(VP9_COMP *cpi, const TileInfo *const tile, |
- MODE_INFO **mi_8x8, |
+ MODE_INFO **mi, |
int *no_pred_segcounts, |
int (*temporal_predictor_count)[2], |
int *t_unpred_seg_counts, |
@@ -164,22 +164,22 @@ |
if (mi_row >= cm->mi_rows || mi_col >= cm->mi_cols) |
return; |
- bw = num_8x8_blocks_wide_lookup[mi_8x8[0]->mbmi.sb_type]; |
- bh = num_8x8_blocks_high_lookup[mi_8x8[0]->mbmi.sb_type]; |
+ bw = num_8x8_blocks_wide_lookup[mi[0]->mbmi.sb_type]; |
+ bh = num_8x8_blocks_high_lookup[mi[0]->mbmi.sb_type]; |
if (bw == bs && bh == bs) { |
- count_segs(cpi, tile, mi_8x8, no_pred_segcounts, temporal_predictor_count, |
+ count_segs(cpi, tile, mi, no_pred_segcounts, temporal_predictor_count, |
t_unpred_seg_counts, bs, bs, mi_row, mi_col); |
} else if (bw == bs && bh < bs) { |
- count_segs(cpi, tile, mi_8x8, no_pred_segcounts, temporal_predictor_count, |
+ count_segs(cpi, tile, mi, no_pred_segcounts, temporal_predictor_count, |
t_unpred_seg_counts, bs, hbs, mi_row, mi_col); |
- count_segs(cpi, tile, mi_8x8 + hbs * mis, no_pred_segcounts, |
+ count_segs(cpi, tile, mi + hbs * mis, no_pred_segcounts, |
temporal_predictor_count, t_unpred_seg_counts, bs, hbs, |
mi_row + hbs, mi_col); |
} else if (bw < bs && bh == bs) { |
- count_segs(cpi, tile, mi_8x8, no_pred_segcounts, temporal_predictor_count, |
+ count_segs(cpi, tile, mi, no_pred_segcounts, temporal_predictor_count, |
t_unpred_seg_counts, hbs, bs, mi_row, mi_col); |
- count_segs(cpi, tile, mi_8x8 + hbs, |
+ count_segs(cpi, tile, mi + hbs, |
no_pred_segcounts, temporal_predictor_count, t_unpred_seg_counts, |
hbs, bs, mi_row, mi_col + hbs); |
} else { |
@@ -192,7 +192,7 @@ |
const int mi_dc = hbs * (n & 1); |
const int mi_dr = hbs * (n >> 1); |
- count_segs_sb(cpi, tile, &mi_8x8[mi_dr * mis + mi_dc], |
+ count_segs_sb(cpi, tile, &mi[mi_dr * mis + mi_dc], |
no_pred_segcounts, temporal_predictor_count, |
t_unpred_seg_counts, |
mi_row + mi_dr, mi_col + mi_dc, subsize); |
@@ -217,9 +217,6 @@ |
vp9_prob t_pred_tree[SEG_TREE_PROBS]; |
vp9_prob t_nopred_prob[PREDICTION_PROBS]; |
- const int mis = cm->mi_stride; |
- MODE_INFO **mi_ptr, **mi; |
- |
// Set default state for the segment tree probabilities and the |
// temporal coding probabilities |
vpx_memset(seg->tree_probs, 255, sizeof(seg->tree_probs)); |
@@ -229,12 +226,13 @@ |
// predicts this one |
for (tile_col = 0; tile_col < 1 << cm->log2_tile_cols; tile_col++) { |
TileInfo tile; |
- |
+ MODE_INFO **mi_ptr; |
vp9_tile_init(&tile, cm, 0, tile_col); |
+ |
mi_ptr = cm->mi_grid_visible + tile.mi_col_start; |
for (mi_row = 0; mi_row < cm->mi_rows; |
- mi_row += 8, mi_ptr += 8 * mis) { |
- mi = mi_ptr; |
+ mi_row += 8, mi_ptr += 8 * cm->mi_stride) { |
+ MODE_INFO **mi = mi_ptr; |
for (mi_col = tile.mi_col_start; mi_col < tile.mi_col_end; |
mi_col += 8, mi += 8) |
count_segs_sb(cpi, &tile, mi, no_pred_segcounts, |