static int read_inter_segment_id(VP9_COMMON *const cm, MACROBLOCKD *const xd, int mi_row, int mi_col, vp9_reader *r) { struct segmentation *const seg = &cm->seg; MB_MODE_INFO *const mbmi = &xd->mi_8x8[0]->mbmi; const BLOCK_SIZE bsize = mbmi->sb_type; int predicted_segment_id, segment_id; if (!seg->enabled) return 0; // Default for disabled segmentation predicted_segment_id = vp9_get_segment_id(cm, cm->last_frame_seg_map, bsize, mi_row, mi_col); if (!seg->update_map) return predicted_segment_id; if (seg->temporal_update) { const vp9_prob pred_prob = vp9_get_pred_prob_seg_id(seg, xd); mbmi->seg_id_predicted = vp9_read(r, pred_prob); segment_id = mbmi->seg_id_predicted ? predicted_segment_id : read_segment_id(r, seg); } else { segment_id = read_segment_id(r, seg); } set_segment_id(cm, bsize, mi_row, mi_col, segment_id); return segment_id; }
static int read_intra_segment_id(VP10_COMMON *const cm, int mi_offset, int x_mis, int y_mis, vpx_reader *r) { struct segmentation *const seg = &cm->seg; int segment_id; if (!seg->enabled) return 0; // Default for disabled segmentation assert(seg->update_map && !seg->temporal_update); segment_id = read_segment_id(r, seg); set_segment_id(cm, mi_offset, x_mis, y_mis, segment_id); return segment_id; }
static int read_intra_segment_id(VP9_COMMON *const cm, MACROBLOCKD *const xd, int mi_row, int mi_col, vp9_reader *r) { struct segmentation *const seg = &cm->seg; const BLOCK_SIZE bsize = xd->mi_8x8[0]->mbmi.sb_type; int segment_id; if (!seg->enabled) return 0; // Default for disabled segmentation if (!seg->update_map) return 0; segment_id = read_segment_id(r, seg); set_segment_id(cm, bsize, mi_row, mi_col, segment_id); return segment_id; }
static int read_intra_segment_id(VP9_COMMON *const cm, BLOCK_SIZE bsize, int mi_row, int mi_col, vp9_reader *r) { struct segmentation *const seg = &cm->seg; int segment_id; if (!seg->enabled) return 0; // Default for disabled segmentation if (!seg->update_map) { copy_segment_id(cm, cm->last_frame_seg_map, cm->current_frame_seg_map, bsize, mi_row, mi_col); return 0; } segment_id = read_segment_id(r, seg); set_segment_id(cm, bsize, mi_row, mi_col, segment_id); return segment_id; }
static int read_intra_segment_id(VP9_COMMON *const cm, int mi_offset, int x_mis, int y_mis, vpx_reader *r) { struct segmentation *const seg = &cm->seg; int segment_id; if (!seg->enabled) return 0; // Default for disabled segmentation if (!seg->update_map) { copy_segment_id(cm, cm->last_frame_seg_map, cm->current_frame_seg_map, mi_offset, x_mis, y_mis); return 0; } segment_id = read_segment_id(r, seg); set_segment_id(cm, mi_offset, x_mis, y_mis, segment_id); return segment_id; }
static int read_inter_segment_id(VP9_COMMON *const cm, MACROBLOCKD *const xd, int mi_row, int mi_col, vpx_reader *r) { struct segmentation *const seg = &cm->seg; MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi; int predicted_segment_id, segment_id; const int mi_offset = mi_row * cm->mi_cols + mi_col; const int bw = xd->plane[0].n4_w >> 1; const int bh = xd->plane[0].n4_h >> 1; // TODO(slavarnway): move x_mis, y_mis into xd ????? const int x_mis = MIN(cm->mi_cols - mi_col, bw); const int y_mis = MIN(cm->mi_rows - mi_row, bh); if (!seg->enabled) return 0; // Default for disabled segmentation predicted_segment_id = cm->last_frame_seg_map ? dec_get_segment_id(cm, cm->last_frame_seg_map, mi_offset, x_mis, y_mis) : 0; if (!seg->update_map) { copy_segment_id(cm, cm->last_frame_seg_map, cm->current_frame_seg_map, mi_offset, x_mis, y_mis); return predicted_segment_id; } if (seg->temporal_update) { const vpx_prob pred_prob = vp9_get_pred_prob_seg_id(seg, xd); mbmi->seg_id_predicted = vpx_read(r, pred_prob); segment_id = mbmi->seg_id_predicted ? predicted_segment_id : read_segment_id(r, seg); } else { segment_id = read_segment_id(r, seg); } set_segment_id(cm, mi_offset, x_mis, y_mis, segment_id); return segment_id; }