Renaming in MB_MODE_INFO
The macro block mode info context originally contained an entry for each 16x16 macroblock. In VP9 each entry refers to an 8x8 region not a macro block, so the naming is misleading. This first stage clean up changes the names of 3 entries in the structure to remove the mb_ prefix. TODO clean up the nomenclature more widely in respect of mbmi and bmi. Change-Id: Ia7305c6d0cb805dfe8cdc98dad21338f502e49c6
This commit is contained in:
		@@ -38,7 +38,7 @@ void vp9_update_mode_info_in_image(VP9_COMMON *cm, MODE_INFO *mi) {
 | 
				
			|||||||
  for (i = 0; i < cm->mi_rows; i++) {
 | 
					  for (i = 0; i < cm->mi_rows; i++) {
 | 
				
			||||||
    MODE_INFO *ptr = mi;
 | 
					    MODE_INFO *ptr = mi;
 | 
				
			||||||
    for (j = 0; j < cm->mi_cols; j++) {
 | 
					    for (j = 0; j < cm->mi_cols; j++) {
 | 
				
			||||||
      ptr->mbmi.mb_in_image = 1;
 | 
					      ptr->mbmi.in_image = 1;
 | 
				
			||||||
      ptr++;  // Next element in the row
 | 
					      ptr++;  // Next element in the row
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -130,26 +130,26 @@ static INLINE int mi_height_log2(BLOCK_SIZE_TYPE sb_type) {
 | 
				
			|||||||
  return mi_height_log2_lookup[sb_type];
 | 
					  return mi_height_log2_lookup[sb_type];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// This structure now relates to 8x8 block regions.
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
  MB_PREDICTION_MODE mode, uv_mode;
 | 
					  MB_PREDICTION_MODE mode, uv_mode;
 | 
				
			||||||
  MV_REFERENCE_FRAME ref_frame[2];
 | 
					  MV_REFERENCE_FRAME ref_frame[2];
 | 
				
			||||||
  TX_SIZE txfm_size;
 | 
					  TX_SIZE txfm_size;
 | 
				
			||||||
  int_mv mv[2]; // for each reference frame used
 | 
					  int_mv mv[2];                // for each reference frame used
 | 
				
			||||||
  int_mv ref_mvs[MAX_REF_FRAMES][MAX_MV_REF_CANDIDATES];
 | 
					  int_mv ref_mvs[MAX_REF_FRAMES][MAX_MV_REF_CANDIDATES];
 | 
				
			||||||
  int_mv best_mv, best_second_mv;
 | 
					  int_mv best_mv, best_second_mv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  uint8_t mb_mode_context[MAX_REF_FRAMES];
 | 
					  uint8_t mode_context[MAX_REF_FRAMES];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  unsigned char mb_skip_coeff;                                /* does this mb has coefficients at all, 1=no coefficients, 0=need decode tokens */
 | 
					  unsigned char skip_coeff;    // 0=need to decode coeffs, 1=no coefficients
 | 
				
			||||||
  unsigned char segment_id;           // Segment id for current frame
 | 
					  unsigned char segment_id;    // Segment id for this block.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Flags used for prediction status of various bit-stream signals
 | 
					  // Flags used for prediction status of various bit-stream signals
 | 
				
			||||||
  unsigned char seg_id_predicted;
 | 
					  unsigned char seg_id_predicted;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Indicates if the mb is part of the image (1) vs border (0)
 | 
					  // Indicates if the block is part of the image (1) vs border (0)
 | 
				
			||||||
  // This can be useful in determining whether the MB provides
 | 
					  // This can be useful in determining whether it provides a valid predictor
 | 
				
			||||||
  // a valid predictor
 | 
					  unsigned char in_image;
 | 
				
			||||||
  unsigned char mb_in_image;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  INTERPOLATIONFILTERTYPE interp_filter;
 | 
					  INTERPOLATIONFILTERTYPE interp_filter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,7 +57,7 @@ void vp9_print_modes_and_motion_vectors(VP9_COMMON *cm, char *file) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  print_mi_data(cm, mvs, "Partitions:", offsetof(MB_MODE_INFO, sb_type));
 | 
					  print_mi_data(cm, mvs, "Partitions:", offsetof(MB_MODE_INFO, sb_type));
 | 
				
			||||||
  print_mi_data(cm, mvs, "Modes:", offsetof(MB_MODE_INFO, mode));
 | 
					  print_mi_data(cm, mvs, "Modes:", offsetof(MB_MODE_INFO, mode));
 | 
				
			||||||
  print_mi_data(cm, mvs, "Skips:", offsetof(MB_MODE_INFO, mb_skip_coeff));
 | 
					  print_mi_data(cm, mvs, "Skips:", offsetof(MB_MODE_INFO, skip_coeff));
 | 
				
			||||||
  print_mi_data(cm, mvs, "Ref frame:", offsetof(MB_MODE_INFO, ref_frame[0]));
 | 
					  print_mi_data(cm, mvs, "Ref frame:", offsetof(MB_MODE_INFO, ref_frame[0]));
 | 
				
			||||||
  print_mi_data(cm, mvs, "Transform:", offsetof(MB_MODE_INFO, txfm_size));
 | 
					  print_mi_data(cm, mvs, "Transform:", offsetof(MB_MODE_INFO, txfm_size));
 | 
				
			||||||
  print_mi_data(cm, mvs, "UV Modes:", offsetof(MB_MODE_INFO, uv_mode));
 | 
					  print_mi_data(cm, mvs, "UV Modes:", offsetof(MB_MODE_INFO, uv_mode));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -263,7 +263,7 @@ static void filter_block_plane(VP9_COMMON *const cm,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Determine the vertical edges that need filtering
 | 
					    // Determine the vertical edges that need filtering
 | 
				
			||||||
    for (c = 0; c < MI_BLOCK_SIZE && mi_col + c < cm->mi_cols; c += col_step) {
 | 
					    for (c = 0; c < MI_BLOCK_SIZE && mi_col + c < cm->mi_cols; c += col_step) {
 | 
				
			||||||
      const int skip_this = mi[c].mbmi.mb_skip_coeff
 | 
					      const int skip_this = mi[c].mbmi.skip_coeff
 | 
				
			||||||
                            && is_inter_block(&mi[c].mbmi);
 | 
					                            && is_inter_block(&mi[c].mbmi);
 | 
				
			||||||
      // left edge of current unit is block/partition edge -> no skip
 | 
					      // left edge of current unit is block/partition edge -> no skip
 | 
				
			||||||
      const int block_edge_left = b_width_log2(mi[c].mbmi.sb_type) ?
 | 
					      const int block_edge_left = b_width_log2(mi[c].mbmi.sb_type) ?
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -281,7 +281,7 @@ void vp9_find_mv_refs_idx(VP9_COMMON *cm, MACROBLOCKD *xd, MODE_INFO *here,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 Done:
 | 
					 Done:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  mbmi->mb_mode_context[ref_frame] = counter_to_context[context_counter];
 | 
					  mbmi->mode_context[ref_frame] = counter_to_context[context_counter];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Clamp vectors
 | 
					  // Clamp vectors
 | 
				
			||||||
  for (idx = 0; idx < MAX_MV_REF_CANDIDATES; ++idx)
 | 
					  for (idx = 0; idx < MAX_MV_REF_CANDIDATES; ++idx)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -737,7 +737,7 @@ int vp9_post_proc_frame(struct VP9Common *oci,
 | 
				
			|||||||
        char zz[4];
 | 
					        char zz[4];
 | 
				
			||||||
        int dc_diff = !(mi[mb_index].mbmi.mode != I4X4_PRED &&
 | 
					        int dc_diff = !(mi[mb_index].mbmi.mode != I4X4_PRED &&
 | 
				
			||||||
                        mi[mb_index].mbmi.mode != SPLITMV &&
 | 
					                        mi[mb_index].mbmi.mode != SPLITMV &&
 | 
				
			||||||
                        mi[mb_index].mbmi.mb_skip_coeff);
 | 
					                        mi[mb_index].mbmi.skip_coeff);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (oci->frame_type == KEY_FRAME)
 | 
					        if (oci->frame_type == KEY_FRAME)
 | 
				
			||||||
          sprintf(zz, "a");
 | 
					          sprintf(zz, "a");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,8 +21,8 @@ unsigned char vp9_get_pred_context_switchable_interp(const MACROBLOCKD *xd) {
 | 
				
			|||||||
  const MODE_INFO *const mi = xd->mode_info_context;
 | 
					  const MODE_INFO *const mi = xd->mode_info_context;
 | 
				
			||||||
  const MB_MODE_INFO *const above_mbmi = &mi[-xd->mode_info_stride].mbmi;
 | 
					  const MB_MODE_INFO *const above_mbmi = &mi[-xd->mode_info_stride].mbmi;
 | 
				
			||||||
  const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
 | 
					  const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
 | 
				
			||||||
  const int left_in_image = xd->left_available && left_mbmi->mb_in_image;
 | 
					  const int left_in_image = xd->left_available && left_mbmi->in_image;
 | 
				
			||||||
  const int above_in_image = xd->up_available && above_mbmi->mb_in_image;
 | 
					  const int above_in_image = xd->up_available && above_mbmi->in_image;
 | 
				
			||||||
  // Note:
 | 
					  // Note:
 | 
				
			||||||
  // The mode info data structure has a one element border above and to the
 | 
					  // The mode info data structure has a one element border above and to the
 | 
				
			||||||
  // left of the entries correpsonding to real macroblocks.
 | 
					  // left of the entries correpsonding to real macroblocks.
 | 
				
			||||||
@@ -56,8 +56,8 @@ unsigned char vp9_get_pred_context_intra_inter(const MACROBLOCKD *xd) {
 | 
				
			|||||||
  const MODE_INFO *const mi = xd->mode_info_context;
 | 
					  const MODE_INFO *const mi = xd->mode_info_context;
 | 
				
			||||||
  const MB_MODE_INFO *const above_mbmi = &mi[-xd->mode_info_stride].mbmi;
 | 
					  const MB_MODE_INFO *const above_mbmi = &mi[-xd->mode_info_stride].mbmi;
 | 
				
			||||||
  const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
 | 
					  const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
 | 
				
			||||||
  const int left_in_image = xd->left_available && left_mbmi->mb_in_image;
 | 
					  const int left_in_image = xd->left_available && left_mbmi->in_image;
 | 
				
			||||||
  const int above_in_image = xd->up_available && above_mbmi->mb_in_image;
 | 
					  const int above_in_image = xd->up_available && above_mbmi->in_image;
 | 
				
			||||||
  const int left_intra = !is_inter_block(left_mbmi);
 | 
					  const int left_intra = !is_inter_block(left_mbmi);
 | 
				
			||||||
  const int above_intra = !is_inter_block(above_mbmi);
 | 
					  const int above_intra = !is_inter_block(above_mbmi);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -83,8 +83,8 @@ unsigned char vp9_get_pred_context_comp_inter_inter(const VP9_COMMON *cm,
 | 
				
			|||||||
  const MODE_INFO *const mi = xd->mode_info_context;
 | 
					  const MODE_INFO *const mi = xd->mode_info_context;
 | 
				
			||||||
  const MB_MODE_INFO *const above_mbmi = &mi[-cm->mode_info_stride].mbmi;
 | 
					  const MB_MODE_INFO *const above_mbmi = &mi[-cm->mode_info_stride].mbmi;
 | 
				
			||||||
  const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
 | 
					  const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
 | 
				
			||||||
  const int left_in_image = xd->left_available && left_mbmi->mb_in_image;
 | 
					  const int left_in_image = xd->left_available && left_mbmi->in_image;
 | 
				
			||||||
  const int above_in_image = xd->up_available && above_mbmi->mb_in_image;
 | 
					  const int above_in_image = xd->up_available && above_mbmi->in_image;
 | 
				
			||||||
  // Note:
 | 
					  // Note:
 | 
				
			||||||
  // The mode info data structure has a one element border above and to the
 | 
					  // The mode info data structure has a one element border above and to the
 | 
				
			||||||
  // left of the entries correpsonding to real macroblocks.
 | 
					  // left of the entries correpsonding to real macroblocks.
 | 
				
			||||||
@@ -128,8 +128,8 @@ unsigned char vp9_get_pred_context_comp_ref_p(const VP9_COMMON *cm,
 | 
				
			|||||||
  const MODE_INFO *const mi = xd->mode_info_context;
 | 
					  const MODE_INFO *const mi = xd->mode_info_context;
 | 
				
			||||||
  const MB_MODE_INFO *const above_mbmi = &mi[-cm->mode_info_stride].mbmi;
 | 
					  const MB_MODE_INFO *const above_mbmi = &mi[-cm->mode_info_stride].mbmi;
 | 
				
			||||||
  const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
 | 
					  const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
 | 
				
			||||||
  const int left_in_image = xd->left_available && left_mbmi->mb_in_image;
 | 
					  const int left_in_image = xd->left_available && left_mbmi->in_image;
 | 
				
			||||||
  const int above_in_image = xd->up_available && above_mbmi->mb_in_image;
 | 
					  const int above_in_image = xd->up_available && above_mbmi->in_image;
 | 
				
			||||||
  const int left_intra = !is_inter_block(left_mbmi);
 | 
					  const int left_intra = !is_inter_block(left_mbmi);
 | 
				
			||||||
  const int above_intra = !is_inter_block(above_mbmi);
 | 
					  const int above_intra = !is_inter_block(above_mbmi);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -206,8 +206,8 @@ unsigned char vp9_get_pred_context_single_ref_p1(const MACROBLOCKD *xd) {
 | 
				
			|||||||
  const MODE_INFO *const mi = xd->mode_info_context;
 | 
					  const MODE_INFO *const mi = xd->mode_info_context;
 | 
				
			||||||
  const MB_MODE_INFO *const above_mbmi = &mi[-xd->mode_info_stride].mbmi;
 | 
					  const MB_MODE_INFO *const above_mbmi = &mi[-xd->mode_info_stride].mbmi;
 | 
				
			||||||
  const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
 | 
					  const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
 | 
				
			||||||
  const int left_in_image = xd->left_available && left_mbmi->mb_in_image;
 | 
					  const int left_in_image = xd->left_available && left_mbmi->in_image;
 | 
				
			||||||
  const int above_in_image = xd->up_available && above_mbmi->mb_in_image;
 | 
					  const int above_in_image = xd->up_available && above_mbmi->in_image;
 | 
				
			||||||
  const int left_intra = !is_inter_block(left_mbmi);
 | 
					  const int left_intra = !is_inter_block(left_mbmi);
 | 
				
			||||||
  const int above_intra = !is_inter_block(above_mbmi);
 | 
					  const int above_intra = !is_inter_block(above_mbmi);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -271,8 +271,8 @@ unsigned char vp9_get_pred_context_single_ref_p2(const MACROBLOCKD *xd) {
 | 
				
			|||||||
  const MODE_INFO *const mi = xd->mode_info_context;
 | 
					  const MODE_INFO *const mi = xd->mode_info_context;
 | 
				
			||||||
  const MB_MODE_INFO *const above_mbmi = &mi[-xd->mode_info_stride].mbmi;
 | 
					  const MB_MODE_INFO *const above_mbmi = &mi[-xd->mode_info_stride].mbmi;
 | 
				
			||||||
  const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
 | 
					  const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
 | 
				
			||||||
  const int left_in_image = xd->left_available && left_mbmi->mb_in_image;
 | 
					  const int left_in_image = xd->left_available && left_mbmi->in_image;
 | 
				
			||||||
  const int above_in_image = xd->up_available && above_mbmi->mb_in_image;
 | 
					  const int above_in_image = xd->up_available && above_mbmi->in_image;
 | 
				
			||||||
  const int left_intra = !is_inter_block(left_mbmi);
 | 
					  const int left_intra = !is_inter_block(left_mbmi);
 | 
				
			||||||
  const int above_intra = !is_inter_block(above_mbmi);
 | 
					  const int above_intra = !is_inter_block(above_mbmi);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -361,18 +361,18 @@ unsigned char vp9_get_pred_context_tx_size(const MACROBLOCKD *xd) {
 | 
				
			|||||||
  const MODE_INFO *const mi = xd->mode_info_context;
 | 
					  const MODE_INFO *const mi = xd->mode_info_context;
 | 
				
			||||||
  const MB_MODE_INFO *const above_mbmi = &mi[-xd->mode_info_stride].mbmi;
 | 
					  const MB_MODE_INFO *const above_mbmi = &mi[-xd->mode_info_stride].mbmi;
 | 
				
			||||||
  const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
 | 
					  const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
 | 
				
			||||||
  const int left_in_image = xd->left_available && left_mbmi->mb_in_image;
 | 
					  const int left_in_image = xd->left_available && left_mbmi->in_image;
 | 
				
			||||||
  const int above_in_image = xd->up_available && above_mbmi->mb_in_image;
 | 
					  const int above_in_image = xd->up_available && above_mbmi->in_image;
 | 
				
			||||||
  const int max_tx_size = max_txsize_lookup[mi->mbmi.sb_type];
 | 
					  const int max_tx_size = max_txsize_lookup[mi->mbmi.sb_type];
 | 
				
			||||||
  int above_context = max_tx_size;
 | 
					  int above_context = max_tx_size;
 | 
				
			||||||
  int left_context = max_tx_size;
 | 
					  int left_context = max_tx_size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (above_in_image)
 | 
					  if (above_in_image)
 | 
				
			||||||
    above_context = above_mbmi->mb_skip_coeff ? max_tx_size
 | 
					    above_context = above_mbmi->skip_coeff ? max_tx_size
 | 
				
			||||||
                                              : above_mbmi->txfm_size;
 | 
					                                              : above_mbmi->txfm_size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (left_in_image)
 | 
					  if (left_in_image)
 | 
				
			||||||
    left_context = left_mbmi->mb_skip_coeff ? max_tx_size
 | 
					    left_context = left_mbmi->skip_coeff ? max_tx_size
 | 
				
			||||||
                                            : left_mbmi->txfm_size;
 | 
					                                            : left_mbmi->txfm_size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (!left_in_image)
 | 
					  if (!left_in_image)
 | 
				
			||||||
@@ -409,7 +409,7 @@ void vp9_set_pred_flag_mbskip(VP9_COMMON *cm, BLOCK_SIZE_TYPE bsize,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  for (y = 0; y < ymis; y++)
 | 
					  for (y = 0; y < ymis; y++)
 | 
				
			||||||
    for (x = 0; x < xmis; x++)
 | 
					    for (x = 0; x < xmis; x++)
 | 
				
			||||||
      mi[y * cm->mode_info_stride + x].mbmi.mb_skip_coeff = pred_flag;
 | 
					      mi[y * cm->mode_info_stride + x].mbmi.skip_coeff = pred_flag;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int vp9_get_segment_id(VP9_COMMON *cm, const uint8_t *segment_ids,
 | 
					int vp9_get_segment_id(VP9_COMMON *cm, const uint8_t *segment_ids,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,8 +39,8 @@ static INLINE int vp9_get_pred_context_mbskip(const MACROBLOCKD *xd) {
 | 
				
			|||||||
  const MB_MODE_INFO *const above_mbmi = &mi[-xd->mode_info_stride].mbmi;
 | 
					  const MB_MODE_INFO *const above_mbmi = &mi[-xd->mode_info_stride].mbmi;
 | 
				
			||||||
  const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
 | 
					  const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return above_mbmi->mb_skip_coeff +
 | 
					  return above_mbmi->skip_coeff +
 | 
				
			||||||
             (xd->left_available ? left_mbmi->mb_skip_coeff : 0);
 | 
					             (xd->left_available ? left_mbmi->skip_coeff : 0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static INLINE vp9_prob vp9_get_pred_prob_mbskip(const VP9_COMMON *cm,
 | 
					static INLINE vp9_prob vp9_get_pred_prob_mbskip(const VP9_COMMON *cm,
 | 
				
			||||||
@@ -49,7 +49,7 @@ static INLINE vp9_prob vp9_get_pred_prob_mbskip(const VP9_COMMON *cm,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static INLINE unsigned char vp9_get_pred_flag_mbskip(const MACROBLOCKD *xd) {
 | 
					static INLINE unsigned char vp9_get_pred_flag_mbskip(const MACROBLOCKD *xd) {
 | 
				
			||||||
  return xd->mode_info_context->mbmi.mb_skip_coeff;
 | 
					  return xd->mode_info_context->mbmi.skip_coeff;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void vp9_set_pred_flag_mbskip(VP9_COMMON *cm, BLOCK_SIZE_TYPE bsize,
 | 
					void vp9_set_pred_flag_mbskip(VP9_COMMON *cm, BLOCK_SIZE_TYPE bsize,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -159,7 +159,7 @@ static void read_intra_frame_mode_info(VP9D_COMP *pbi, MODE_INFO *m,
 | 
				
			|||||||
  const int mis = cm->mode_info_stride;
 | 
					  const int mis = cm->mode_info_stride;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  mbmi->segment_id = read_intra_segment_id(pbi, mi_row, mi_col, r);
 | 
					  mbmi->segment_id = read_intra_segment_id(pbi, mi_row, mi_col, r);
 | 
				
			||||||
  mbmi->mb_skip_coeff = read_skip_coeff(pbi, mbmi->segment_id, r);
 | 
					  mbmi->skip_coeff = read_skip_coeff(pbi, mbmi->segment_id, r);
 | 
				
			||||||
  mbmi->txfm_size = read_tx_size(pbi, cm->tx_mode, bsize, 1, r);
 | 
					  mbmi->txfm_size = read_tx_size(pbi, cm->tx_mode, bsize, 1, r);
 | 
				
			||||||
  mbmi->ref_frame[0] = INTRA_FRAME;
 | 
					  mbmi->ref_frame[0] = INTRA_FRAME;
 | 
				
			||||||
  mbmi->ref_frame[1] = NONE;
 | 
					  mbmi->ref_frame[1] = NONE;
 | 
				
			||||||
@@ -457,7 +457,7 @@ static void read_inter_block_mode_info(VP9D_COMP *pbi, MODE_INFO *mi,
 | 
				
			|||||||
                   ref0, mbmi->ref_mvs[ref0], cm->ref_frame_sign_bias,
 | 
					                   ref0, mbmi->ref_mvs[ref0], cm->ref_frame_sign_bias,
 | 
				
			||||||
                   mi_row, mi_col);
 | 
					                   mi_row, mi_col);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  inter_mode_ctx = mbmi->mb_mode_context[ref0];
 | 
					  inter_mode_ctx = mbmi->mode_context[ref0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (vp9_segfeature_active(&xd->seg, mbmi->segment_id, SEG_LVL_SKIP))
 | 
					  if (vp9_segfeature_active(&xd->seg, mbmi->segment_id, SEG_LVL_SKIP))
 | 
				
			||||||
    mbmi->mode = ZEROMV;
 | 
					    mbmi->mode = ZEROMV;
 | 
				
			||||||
@@ -598,10 +598,10 @@ static void read_inter_frame_mode_info(VP9D_COMP *pbi, MODE_INFO *mi,
 | 
				
			|||||||
  mbmi->mv[0].as_int = 0;
 | 
					  mbmi->mv[0].as_int = 0;
 | 
				
			||||||
  mbmi->mv[1].as_int = 0;
 | 
					  mbmi->mv[1].as_int = 0;
 | 
				
			||||||
  mbmi->segment_id = read_inter_segment_id(pbi, mi_row, mi_col, r);
 | 
					  mbmi->segment_id = read_inter_segment_id(pbi, mi_row, mi_col, r);
 | 
				
			||||||
  mbmi->mb_skip_coeff = read_skip_coeff(pbi, mbmi->segment_id, r);
 | 
					  mbmi->skip_coeff = read_skip_coeff(pbi, mbmi->segment_id, r);
 | 
				
			||||||
  inter_block = read_is_inter_block(pbi, mbmi->segment_id, r);
 | 
					  inter_block = read_is_inter_block(pbi, mbmi->segment_id, r);
 | 
				
			||||||
  mbmi->txfm_size = read_tx_size(pbi, cm->tx_mode, mbmi->sb_type,
 | 
					  mbmi->txfm_size = read_tx_size(pbi, cm->tx_mode, mbmi->sb_type,
 | 
				
			||||||
                                 !mbmi->mb_skip_coeff || !inter_block, r);
 | 
					                                 !mbmi->skip_coeff || !inter_block, r);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (inter_block)
 | 
					  if (inter_block)
 | 
				
			||||||
    read_inter_block_mode_info(pbi, mi, mi_row, mi_col, r);
 | 
					    read_inter_block_mode_info(pbi, mi, mi_row, mi_col, r);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -157,7 +157,7 @@ static void decode_block_intra(int plane, int block, BLOCK_SIZE_TYPE bsize,
 | 
				
			|||||||
                          dst, pd->dst.stride);
 | 
					                          dst, pd->dst.stride);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Early exit if there are no coefficients
 | 
					  // Early exit if there are no coefficients
 | 
				
			||||||
  if (mi->mbmi.mb_skip_coeff)
 | 
					  if (mi->mbmi.skip_coeff)
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  decode_block(plane, block, bsize, ss_txfrm_size, arg);
 | 
					  decode_block(plane, block, bsize, ss_txfrm_size, arg);
 | 
				
			||||||
@@ -166,7 +166,7 @@ static void decode_block_intra(int plane, int block, BLOCK_SIZE_TYPE bsize,
 | 
				
			|||||||
static int decode_tokens(VP9D_COMP *pbi, BLOCK_SIZE_TYPE bsize, vp9_reader *r) {
 | 
					static int decode_tokens(VP9D_COMP *pbi, BLOCK_SIZE_TYPE bsize, vp9_reader *r) {
 | 
				
			||||||
  MACROBLOCKD *const xd = &pbi->mb;
 | 
					  MACROBLOCKD *const xd = &pbi->mb;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (xd->mode_info_context->mbmi.mb_skip_coeff) {
 | 
					  if (xd->mode_info_context->mbmi.skip_coeff) {
 | 
				
			||||||
      reset_skip_context(xd, bsize);
 | 
					      reset_skip_context(xd, bsize);
 | 
				
			||||||
    return -1;
 | 
					    return -1;
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -216,7 +216,7 @@ static int write_skip_coeff(const VP9_COMP *cpi, int segment_id, MODE_INFO *m,
 | 
				
			|||||||
  if (vp9_segfeature_active(&xd->seg, segment_id, SEG_LVL_SKIP)) {
 | 
					  if (vp9_segfeature_active(&xd->seg, segment_id, SEG_LVL_SKIP)) {
 | 
				
			||||||
    return 1;
 | 
					    return 1;
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    const int skip_coeff = m->mbmi.mb_skip_coeff;
 | 
					    const int skip_coeff = m->mbmi.skip_coeff;
 | 
				
			||||||
    vp9_write(w, skip_coeff, vp9_get_pred_prob_mbskip(&cpi->common, xd));
 | 
					    vp9_write(w, skip_coeff, vp9_get_pred_prob_mbskip(&cpi->common, xd));
 | 
				
			||||||
    return skip_coeff;
 | 
					    return skip_coeff;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -462,7 +462,7 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, MODE_INFO *m, vp9_writer *bc) {
 | 
				
			|||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    vp9_prob *mv_ref_p;
 | 
					    vp9_prob *mv_ref_p;
 | 
				
			||||||
    encode_ref_frame(cpi, bc);
 | 
					    encode_ref_frame(cpi, bc);
 | 
				
			||||||
    mv_ref_p = cpi->common.fc.inter_mode_probs[mi->mb_mode_context[rf]];
 | 
					    mv_ref_p = cpi->common.fc.inter_mode_probs[mi->mode_context[rf]];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef ENTROPY_STATS
 | 
					#ifdef ENTROPY_STATS
 | 
				
			||||||
    active_section = 3;
 | 
					    active_section = 3;
 | 
				
			||||||
@@ -472,7 +472,7 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, MODE_INFO *m, vp9_writer *bc) {
 | 
				
			|||||||
    if (!vp9_segfeature_active(seg, segment_id, SEG_LVL_SKIP)) {
 | 
					    if (!vp9_segfeature_active(seg, segment_id, SEG_LVL_SKIP)) {
 | 
				
			||||||
      if (bsize >= BLOCK_8X8) {
 | 
					      if (bsize >= BLOCK_8X8) {
 | 
				
			||||||
        write_sb_mv_ref(bc, mode, mv_ref_p);
 | 
					        write_sb_mv_ref(bc, mode, mv_ref_p);
 | 
				
			||||||
        ++pc->counts.inter_mode[mi->mb_mode_context[rf]]
 | 
					        ++pc->counts.inter_mode[mi->mode_context[rf]]
 | 
				
			||||||
                               [inter_mode_offset(mode)];
 | 
					                               [inter_mode_offset(mode)];
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -499,7 +499,7 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, MODE_INFO *m, vp9_writer *bc) {
 | 
				
			|||||||
          blockmode = x->partition_info->bmi[j].mode;
 | 
					          blockmode = x->partition_info->bmi[j].mode;
 | 
				
			||||||
          blockmv = m->bmi[j].as_mv[0];
 | 
					          blockmv = m->bmi[j].as_mv[0];
 | 
				
			||||||
          write_sb_mv_ref(bc, blockmode, mv_ref_p);
 | 
					          write_sb_mv_ref(bc, blockmode, mv_ref_p);
 | 
				
			||||||
          ++pc->counts.inter_mode[mi->mb_mode_context[rf]]
 | 
					          ++pc->counts.inter_mode[mi->mode_context[rf]]
 | 
				
			||||||
                                 [inter_mode_offset(blockmode)];
 | 
					                                 [inter_mode_offset(blockmode)];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          if (blockmode == NEWMV) {
 | 
					          if (blockmode == NEWMV) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1467,8 +1467,8 @@ static void rd_auto_partition_range(VP9_COMP *cpi,
 | 
				
			|||||||
  const MODE_INFO *const mi = xd->mode_info_context;
 | 
					  const MODE_INFO *const mi = xd->mode_info_context;
 | 
				
			||||||
  const MB_MODE_INFO *const above_mbmi = &mi[-xd->mode_info_stride].mbmi;
 | 
					  const MB_MODE_INFO *const above_mbmi = &mi[-xd->mode_info_stride].mbmi;
 | 
				
			||||||
  const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
 | 
					  const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
 | 
				
			||||||
  const int left_in_image = xd->left_available && left_mbmi->mb_in_image;
 | 
					  const int left_in_image = xd->left_available && left_mbmi->in_image;
 | 
				
			||||||
  const int above_in_image = xd->up_available && above_mbmi->mb_in_image;
 | 
					  const int above_in_image = xd->up_available && above_mbmi->in_image;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Frequency check
 | 
					  // Frequency check
 | 
				
			||||||
  if (cpi->sf.auto_min_max_partition_count <= 0) {
 | 
					  if (cpi->sf.auto_min_max_partition_count <= 0) {
 | 
				
			||||||
@@ -2180,7 +2180,7 @@ static int get_skip_flag(MODE_INFO *mi, int mis, int ymbs, int xmbs) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  for (y = 0; y < ymbs; y++) {
 | 
					  for (y = 0; y < ymbs; y++) {
 | 
				
			||||||
    for (x = 0; x < xmbs; x++) {
 | 
					    for (x = 0; x < xmbs; x++) {
 | 
				
			||||||
      if (!mi[y * mis + x].mbmi.mb_skip_coeff)
 | 
					      if (!mi[y * mis + x].mbmi.skip_coeff)
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -2624,10 +2624,10 @@ static void encode_superblock(VP9_COMP *cpi, TOKENEXTRA **t, int output_enabled,
 | 
				
			|||||||
    vp9_encode_sb(cm, x, MAX(bsize, BLOCK_8X8));
 | 
					    vp9_encode_sb(cm, x, MAX(bsize, BLOCK_8X8));
 | 
				
			||||||
    vp9_tokenize_sb(cpi, t, !output_enabled, MAX(bsize, BLOCK_8X8));
 | 
					    vp9_tokenize_sb(cpi, t, !output_enabled, MAX(bsize, BLOCK_8X8));
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    int mb_skip_context = xd->left_available ? (mi - 1)->mbmi.mb_skip_coeff : 0;
 | 
					    int mb_skip_context = xd->left_available ? (mi - 1)->mbmi.skip_coeff : 0;
 | 
				
			||||||
    mb_skip_context += (mi - mis)->mbmi.mb_skip_coeff;
 | 
					    mb_skip_context += (mi - mis)->mbmi.skip_coeff;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mbmi->mb_skip_coeff = 1;
 | 
					    mbmi->skip_coeff = 1;
 | 
				
			||||||
    if (output_enabled)
 | 
					    if (output_enabled)
 | 
				
			||||||
      cm->counts.mbskip[mb_skip_context][1]++;
 | 
					      cm->counts.mbskip[mb_skip_context][1]++;
 | 
				
			||||||
    reset_skip_context(xd, MAX(bsize, BLOCK_8X8));
 | 
					    reset_skip_context(xd, MAX(bsize, BLOCK_8X8));
 | 
				
			||||||
@@ -2635,13 +2635,13 @@ static void encode_superblock(VP9_COMP *cpi, TOKENEXTRA **t, int output_enabled,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  // copy skip flag on all mb_mode_info contexts in this SB
 | 
					  // copy skip flag on all mb_mode_info contexts in this SB
 | 
				
			||||||
  // if this was a skip at this txfm size
 | 
					  // if this was a skip at this txfm size
 | 
				
			||||||
  vp9_set_pred_flag_mbskip(cm, bsize, mi_row, mi_col, mi->mbmi.mb_skip_coeff);
 | 
					  vp9_set_pred_flag_mbskip(cm, bsize, mi_row, mi_col, mi->mbmi.skip_coeff);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (output_enabled) {
 | 
					  if (output_enabled) {
 | 
				
			||||||
    if (cm->tx_mode == TX_MODE_SELECT &&
 | 
					    if (cm->tx_mode == TX_MODE_SELECT &&
 | 
				
			||||||
        mbmi->sb_type >= BLOCK_8X8  &&
 | 
					        mbmi->sb_type >= BLOCK_8X8  &&
 | 
				
			||||||
        !(is_inter_block(mbmi) &&
 | 
					        !(is_inter_block(mbmi) &&
 | 
				
			||||||
            (mbmi->mb_skip_coeff ||
 | 
					            (mbmi->skip_coeff ||
 | 
				
			||||||
             vp9_segfeature_active(&xd->seg, segment_id, SEG_LVL_SKIP)))) {
 | 
					             vp9_segfeature_active(&xd->seg, segment_id, SEG_LVL_SKIP)))) {
 | 
				
			||||||
      const uint8_t context = vp9_get_pred_context_tx_size(xd);
 | 
					      const uint8_t context = vp9_get_pred_context_tx_size(xd);
 | 
				
			||||||
      update_tx_counts(bsize, context, mbmi->txfm_size, &cm->counts.tx);
 | 
					      update_tx_counts(bsize, context, mbmi->txfm_size, &cm->counts.tx);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1558,7 +1558,7 @@ static int labels2mode(MACROBLOCK *x, int i,
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  cost = cost_mv_ref(cpi, this_mode,
 | 
					  cost = cost_mv_ref(cpi, this_mode,
 | 
				
			||||||
                     mbmi->mb_mode_context[mbmi->ref_frame[0]]);
 | 
					                     mbmi->mode_context[mbmi->ref_frame[0]]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  mic->bmi[i].as_mv[0].as_int = this_mv->as_int;
 | 
					  mic->bmi[i].as_mv[0].as_int = this_mv->as_int;
 | 
				
			||||||
  if (mbmi->ref_frame[1] > 0)
 | 
					  if (mbmi->ref_frame[1] > 0)
 | 
				
			||||||
@@ -1791,7 +1791,7 @@ static void rd_check_segment_txsize(VP9_COMP *cpi, MACROBLOCK *x,
 | 
				
			|||||||
            frame_mv[this_mode][mbmi->ref_frame[0]].as_int == 0 &&
 | 
					            frame_mv[this_mode][mbmi->ref_frame[0]].as_int == 0 &&
 | 
				
			||||||
            (mbmi->ref_frame[1] <= 0 ||
 | 
					            (mbmi->ref_frame[1] <= 0 ||
 | 
				
			||||||
             frame_mv[this_mode][mbmi->ref_frame[1]].as_int == 0)) {
 | 
					             frame_mv[this_mode][mbmi->ref_frame[1]].as_int == 0)) {
 | 
				
			||||||
          int rfc = mbmi->mb_mode_context[mbmi->ref_frame[0]];
 | 
					          int rfc = mbmi->mode_context[mbmi->ref_frame[0]];
 | 
				
			||||||
          int c1 = cost_mv_ref(cpi, NEARMV, rfc);
 | 
					          int c1 = cost_mv_ref(cpi, NEARMV, rfc);
 | 
				
			||||||
          int c2 = cost_mv_ref(cpi, NEARESTMV, rfc);
 | 
					          int c2 = cost_mv_ref(cpi, NEARESTMV, rfc);
 | 
				
			||||||
          int c3 = cost_mv_ref(cpi, ZEROMV, rfc);
 | 
					          int c3 = cost_mv_ref(cpi, ZEROMV, rfc);
 | 
				
			||||||
@@ -2747,7 +2747,7 @@ static int64_t handle_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
 | 
				
			|||||||
      frame_mv[refs[0]].as_int == 0 &&
 | 
					      frame_mv[refs[0]].as_int == 0 &&
 | 
				
			||||||
      !vp9_segfeature_active(&xd->seg, mbmi->segment_id, SEG_LVL_SKIP) &&
 | 
					      !vp9_segfeature_active(&xd->seg, mbmi->segment_id, SEG_LVL_SKIP) &&
 | 
				
			||||||
      (num_refs == 1 || frame_mv[refs[1]].as_int == 0)) {
 | 
					      (num_refs == 1 || frame_mv[refs[1]].as_int == 0)) {
 | 
				
			||||||
    int rfc = mbmi->mb_mode_context[mbmi->ref_frame[0]];
 | 
					    int rfc = mbmi->mode_context[mbmi->ref_frame[0]];
 | 
				
			||||||
    int c1 = cost_mv_ref(cpi, NEARMV, rfc);
 | 
					    int c1 = cost_mv_ref(cpi, NEARMV, rfc);
 | 
				
			||||||
    int c2 = cost_mv_ref(cpi, NEARESTMV, rfc);
 | 
					    int c2 = cost_mv_ref(cpi, NEARESTMV, rfc);
 | 
				
			||||||
    int c3 = cost_mv_ref(cpi, ZEROMV, rfc);
 | 
					    int c3 = cost_mv_ref(cpi, ZEROMV, rfc);
 | 
				
			||||||
@@ -2804,7 +2804,7 @@ static int64_t handle_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
 | 
				
			|||||||
   * words if you present them in that order, the second one is always known
 | 
					   * words if you present them in that order, the second one is always known
 | 
				
			||||||
   * if the first is known */
 | 
					   * if the first is known */
 | 
				
			||||||
  *rate2 += cost_mv_ref(cpi, this_mode,
 | 
					  *rate2 += cost_mv_ref(cpi, this_mode,
 | 
				
			||||||
                        mbmi->mb_mode_context[mbmi->ref_frame[0]]);
 | 
					                        mbmi->mode_context[mbmi->ref_frame[0]]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (!(*mode_excluded)) {
 | 
					  if (!(*mode_excluded)) {
 | 
				
			||||||
    if (is_comp_pred) {
 | 
					    if (is_comp_pred) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -278,8 +278,8 @@ void vp9_tokenize_sb(VP9_COMP *cpi, TOKENEXTRA **t, int dry_run,
 | 
				
			|||||||
                                              SEG_LVL_SKIP);
 | 
					                                              SEG_LVL_SKIP);
 | 
				
			||||||
  struct tokenize_b_args arg = {cpi, xd, t, mbmi->txfm_size};
 | 
					  struct tokenize_b_args arg = {cpi, xd, t, mbmi->txfm_size};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  mbmi->mb_skip_coeff = vp9_sb_is_skippable(xd, bsize);
 | 
					  mbmi->skip_coeff = vp9_sb_is_skippable(xd, bsize);
 | 
				
			||||||
  if (mbmi->mb_skip_coeff) {
 | 
					  if (mbmi->skip_coeff) {
 | 
				
			||||||
    if (!dry_run)
 | 
					    if (!dry_run)
 | 
				
			||||||
      cm->counts.mbskip[mb_skip_context][1] += skip_inc;
 | 
					      cm->counts.mbskip[mb_skip_context][1] += skip_inc;
 | 
				
			||||||
    reset_skip_context(xd, bsize);
 | 
					    reset_skip_context(xd, bsize);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user