diff --git a/configure b/configure index 4a97889ec5d78a575c147b92064ac9f3d9c3bb99..05e5384b51fdbd39046e9d9175032f2b6712c78c 100755 --- a/configure +++ b/configure @@ -238,8 +238,6 @@ HAVE_LIST=" unistd_h " EXPERIMENT_LIST=" - csm - implicit_segmentation oneshotq multiple_arf non420 diff --git a/vp9/common/vp9_blockd.h b/vp9/common/vp9_blockd.h index 1b6ed68d8660bfe28ea99ee7a5bc48d9bae577ad..8d155fc3d8a046ab26eafaea2b9f0d956cc8f2df 100644 --- a/vp9/common/vp9_blockd.h +++ b/vp9/common/vp9_blockd.h @@ -306,10 +306,6 @@ typedef struct macroblockd { /* 0 (do not update) 1 (update) the macroblock segmentation map. */ unsigned char update_mb_segmentation_map; -#if CONFIG_IMPLICIT_SEGMENTATION - unsigned char allow_implicit_segment_update; -#endif - /* 0 (do not update) 1 (update) the macroblock segmentation feature data. */ unsigned char update_mb_segmentation_data; diff --git a/vp9/common/vp9_seg_common.c b/vp9/common/vp9_seg_common.c index e5511a123d3208eeb7c7e9fb02453df8e5b5741f..67dfeaed652eddf74ed2c90ba76dc236a4537aa3 100644 --- a/vp9/common/vp9_seg_common.c +++ b/vp9/common/vp9_seg_common.c @@ -86,85 +86,6 @@ int vp9_check_segref(const MACROBLOCKD *xd, int segment_id, } -#if CONFIG_IMPLICIT_SEGMENTATION -// This function defines an implicit segmentation for the next frame based -// on predcition and transform decisions in the current frame. -// For test purposes at the moment it uses ref frame and prediction size -void vp9_implicit_segment_map_update(VP9_COMMON * cm) { - int row, col; - MODE_INFO *mi, *mi_ptr = cm->mi; - unsigned char * map_ptr = cm->last_frame_seg_map; - - for (row = 0; row < cm->mb_rows; row++) { - mi = mi_ptr; - - for (col = 0; col < cm->mb_cols; ++col, ++mi) { - // Inter prediction - if (mi->mbmi.ref_frame != INTRA_FRAME) { - // Zero motion and prediction block size >= 16 - if ((mi->mbmi.sb_type >= BLOCK_SIZE_MB16X16) && - (mi->mbmi.mv[0].as_int == 0)) - map_ptr[col] = 1; - else if (mi->mbmi.sb_type >= BLOCK_SIZE_SB32X32) - map_ptr[col] = 2; - else if (mi->mbmi.sb_type >= BLOCK_SIZE_MB16X16) - map_ptr[col] = 3; - else - map_ptr[col] = 6; - - // Intra prediction - } else { - if (mi->mbmi.sb_type >= BLOCK_SIZE_SB32X32) - map_ptr[col] = 4; - else if (mi->mbmi.sb_type >= BLOCK_SIZE_MB16X16) - map_ptr[col] = 5; - else - map_ptr[col] = 7; - } - } - mi_ptr += cm->mode_info_stride; - map_ptr += cm->mb_cols; - } -} - -// This function defines an implicit segmentation for the next frame based -// on predcition and transform decisions in the current frame. -// For test purposes at the moment only TX size is used. -void vp9_implicit_segment_map_update_tx(VP9_COMMON * cm) { - int row, col; - MODE_INFO *mi, *mi_ptr = cm->mi; - unsigned char * map_ptr = cm->last_frame_seg_map; - - for (row = 0; row < cm->mb_rows; row++) { - mi = mi_ptr; - for (col = 0; col < cm->mb_cols; ++col, ++mi) { - // Intra modes - if (mi->mbmi.ref_frame == INTRA_FRAME) { - if (mi->mbmi.txfm_size == TX_4X4) - map_ptr[col] = 7; - else if (mi->mbmi.txfm_size <= TX_16X16) - map_ptr[col] = 5; - else - map_ptr[col] = 4; - } else { - // Inter Modes - if (mi->mbmi.txfm_size == TX_4X4) - map_ptr[col] = 6; - else if (mi->mbmi.txfm_size == TX_8X8) - map_ptr[col] = 3; - else if (mi->mbmi.txfm_size == TX_16X16) - map_ptr[col] = 2; - else - map_ptr[col] = 1; - } - } - mi_ptr += cm->mode_info_stride; - map_ptr += cm->mb_cols; - } -} -#endif - - const vp9_tree_index vp9_segment_tree[14] = { 2, 4, 6, 8, 10, 12, 0, -1, -2, -3, -4, -5, -6, -7 diff --git a/vp9/common/vp9_seg_common.h b/vp9/common/vp9_seg_common.h index 53d22a3854aef51d60332e8699201dfb7e7d148b..c424a57f4f5aa1afd7513a3fdf29ed6086000197 100644 --- a/vp9/common/vp9_seg_common.h +++ b/vp9/common/vp9_seg_common.h @@ -55,11 +55,6 @@ int vp9_check_segref(const MACROBLOCKD *xd, int segment_id, MV_REFERENCE_FRAME ref_frame); -#if CONFIG_IMPLICIT_SEGMENTATION -void vp9_implicit_segment_map_update(VP9_COMMON * cm); -#endif - - extern const vp9_tree_index vp9_segment_tree[14]; #endif // VP9_COMMON_VP9_SEG_COMMON_H_ diff --git a/vp9/decoder/vp9_decodframe.c b/vp9/decoder/vp9_decodframe.c index a1cfba73be4f0dc21ccfa921f48b4b69f22be7e8..8e5e83c952d63812242b43e4058786838ecf9434 100644 --- a/vp9/decoder/vp9_decodframe.c +++ b/vp9/decoder/vp9_decodframe.c @@ -629,9 +629,6 @@ static void setup_segmentation(VP9_COMMON *pc, MACROBLOCKD *xd, vp9_reader *r) { xd->update_mb_segmentation_map = 0; xd->update_mb_segmentation_data = 0; -#if CONFIG_IMPLICIT_SEGMENTATION - xd->allow_implicit_segment_update = 0; -#endif xd->segmentation_enabled = vp9_read_bit(r); if (!xd->segmentation_enabled) @@ -639,9 +636,6 @@ static void setup_segmentation(VP9_COMMON *pc, MACROBLOCKD *xd, vp9_reader *r) { // Segmentation map update xd->update_mb_segmentation_map = vp9_read_bit(r); -#if CONFIG_IMPLICIT_SEGMENTATION - xd->allow_implicit_segment_update = vp9_read_bit(r); -#endif if (xd->update_mb_segmentation_map) { for (i = 0; i < MB_SEG_TREE_PROBS; i++) xd->mb_segment_tree_probs[i] = vp9_read_bit(r) ? vp9_read_prob(r) @@ -1129,13 +1123,6 @@ int vp9_decode_frame(VP9D_COMP *pbi, const uint8_t **p_data_end) { } } -#if CONFIG_IMPLICIT_SEGMENTATION - // If signalled at the frame level apply implicit updates to the segment map. - if (!pc->error_resilient_mode && xd->allow_implicit_segment_update) { - vp9_implicit_segment_map_update(pc); - } -#endif - if (pc->refresh_frame_context) pc->frame_contexts[pc->frame_context_idx] = pc->fc; diff --git a/vp9/encoder/vp9_bitstream.c b/vp9/encoder/vp9_bitstream.c index 7d250b346fbd4d067a31a1a5f394940d233c4540..a95d7eb4656d072fbc6c2a32c36a5cd52a606d0b 100644 --- a/vp9/encoder/vp9_bitstream.c +++ b/vp9/encoder/vp9_bitstream.c @@ -1364,9 +1364,6 @@ static void encode_segmentation(VP9_COMP *cpi, vp9_writer *w) { // Segmentation map vp9_write_bit(w, xd->update_mb_segmentation_map); -#if CONFIG_IMPLICIT_SEGMENTATION - vp9_write_bit(w, xd->allow_implicit_segment_update); -#endif if (xd->update_mb_segmentation_map) { // Select the coding strategy (temporal or spatial) vp9_choose_segmap_coding_method(cpi); diff --git a/vp9/encoder/vp9_onyx_if.c b/vp9/encoder/vp9_onyx_if.c index e61d212d73d9ba8474b021c6b33c0974287e7b72..f0dba737afeb6175a7254b693aa0b2c01a69cc48 100644 --- a/vp9/encoder/vp9_onyx_if.c +++ b/vp9/encoder/vp9_onyx_if.c @@ -267,9 +267,6 @@ static void setup_features(VP9_COMP *cpi) { xd->update_mb_segmentation_map = 0; xd->update_mb_segmentation_data = 0; -#if CONFIG_IMPLICIT_SEGMENTATION - xd->allow_implicit_segment_update = 0; -#endif vpx_memset(xd->mb_segment_tree_probs, 255, sizeof(xd->mb_segment_tree_probs)); vp9_clearall_segfeatures(xd); @@ -354,9 +351,6 @@ static void configure_static_seg_features(VP9_COMP *cpi) { vpx_memset(cpi->segmentation_map, 0, cm->mi_rows * cm->mi_cols); xd->update_mb_segmentation_map = 0; xd->update_mb_segmentation_data = 0; -#if CONFIG_IMPLICIT_SEGMENTATION - xd->allow_implicit_segment_update = 0; -#endif cpi->static_mb_pct = 0; // Disable segmentation @@ -370,9 +364,6 @@ static void configure_static_seg_features(VP9_COMP *cpi) { vpx_memset(cpi->segmentation_map, 0, cm->mi_rows * cm->mi_cols); xd->update_mb_segmentation_map = 0; xd->update_mb_segmentation_data = 0; -#if CONFIG_IMPLICIT_SEGMENTATION - xd->allow_implicit_segment_update = 0; -#endif cpi->static_mb_pct = 0; // Disable segmentation and individual segment features by default @@ -471,53 +462,6 @@ static void configure_static_seg_features(VP9_COMP *cpi) { } } -#if CONFIG_IMPLICIT_SEGMENTATION -static double implict_seg_q_modifiers[MAX_MB_SEGMENTS] = - {1.0, 0.95, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}; -static void configure_implicit_segmentation(VP9_COMP *cpi, int frame_qindex) { - VP9_COMMON *cm = &cpi->common; - MACROBLOCKD *xd = &cpi->mb.e_mbd; - int i; - int qi_delta; - double q_baseline = vp9_convert_qindex_to_q(frame_qindex); - - // Set the flags to allow implicit segment update but disallow explicit update - xd->segmentation_enabled = 1; - xd->allow_implicit_segment_update = 1; - xd->update_mb_segmentation_map = 0; - - // For key frames clear down the segment map to a default state. - if (cm->frame_type == KEY_FRAME) { - // Clear down the global segmentation map - vpx_memset(cpi->segmentation_map, 0, (cm->mb_rows * cm->mb_cols)); - - // Clear down the segment features. - vp9_clearall_segfeatures(xd); - - xd->update_mb_segmentation_data = 0; - - // Update the segment data if it is an arf or non overlay gf. - } else if (cpi->refresh_alt_ref_frame || - (cpi->refresh_golden_frame && !cpi->is_src_frame_alt_ref)) { - xd->update_mb_segmentation_data = 1; - - // Enable use of q deltas on segments 1 and up - // Segment 0 is treated as a neutral segment with no changes - for (i = 1; i < MAX_MB_SEGMENTS; ++i) { - qi_delta = compute_qdelta(cpi, q_baseline, - implict_seg_q_modifiers[i] * q_baseline); - vp9_set_segdata(xd, i, SEG_LVL_ALT_Q, qi_delta); - vp9_enable_segfeature(xd, i, SEG_LVL_ALT_Q); - } - - // Where relevant assume segment data is delta data - xd->mb_segment_abs_delta = SEGMENT_DELTADATA; - } else { - xd->update_mb_segmentation_data = 0; - } -} -#endif - #ifdef ENTROPY_STATS void vp9_update_mode_context_stats(VP9_COMP *cpi) { VP9_COMMON *cm = &cpi->common; @@ -798,12 +742,8 @@ void vp9_set_speed_features(VP9_COMP *cpi) { #if CONFIG_MULTIPLE_ARF // Switch segmentation off. sf->static_segmentation = 0; -#else -#if CONFIG_IMPLICIT_SEGMENTATION - sf->static_segmentation = 0; #else sf->static_segmentation = 0; -#endif #endif sf->mb16_breakout = 0; @@ -816,12 +756,8 @@ void vp9_set_speed_features(VP9_COMP *cpi) { #if CONFIG_MULTIPLE_ARF // Switch segmentation off. sf->static_segmentation = 0; -#else -#if CONFIG_IMPLICIT_SEGMENTATION - sf->static_segmentation = 0; #else sf->static_segmentation = 0; -#endif #endif sf->mb16_breakout = 0; break; @@ -2907,12 +2843,6 @@ static void encode_frame_to_data_rate(VP9_COMP *cpi, } } -#if CONFIG_IMPLICIT_SEGMENTATION - if (!cm->error_resilient_mode && !cpi->sf.static_segmentation) { - configure_implicit_segmentation(cpi, q); - } -#endif - // transform / motion compensation build reconstruction frame vp9_encode_frame(cpi); @@ -3156,15 +3086,7 @@ static void encode_frame_to_data_rate(VP9_COMP *cpi, cpi->dummy_packing = 0; vp9_pack_bitstream(cpi, dest, size); -#if CONFIG_IMPLICIT_SEGMENTATION - // Should we allow implicit update of the segment map. - if (xd->allow_implicit_segment_update && !cm->error_resilient_mode) { - vp9_implicit_segment_map_update(cm); - // or has there been an explicit update - } else if (xd->update_mb_segmentation_map) { -#else if (xd->update_mb_segmentation_map) { -#endif update_reference_segmentation_map(cpi); }