From: Dmitry Kovalev Date: Tue, 2 Jul 2013 18:16:42 +0000 (-0700) Subject: Removing unused implicit segmentation code. X-Git-Tag: v1.3.0~962^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a3d2e6c98bf4345c9a505840f936a0c93fb6d4dd;p=platform%2Fupstream%2Flibvpx.git Removing unused implicit segmentation code. Change-Id: I8a2983fb14274a6ac53681fa4cd5d4209cbd2905 --- diff --git a/vp9/common/vp9_implicit_segmentation.c b/vp9/common/vp9_implicit_segmentation.c deleted file mode 100644 index 2a1d35f..0000000 --- a/vp9/common/vp9_implicit_segmentation.c +++ /dev/null @@ -1,253 +0,0 @@ -/* - * Copyright (c) 2012 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#include "vp9/common/vp9_onyxc_int.h" - -#define MAX_REGIONS 24000 -#ifndef NULL -#define NULL 0 -#endif - -#define min_mbs_in_region 3 - -// this linked list structure holds equivalences for connected -// component labeling -struct list_el { - int label; - int seg_value; - int count; - struct list_el *next; -}; -typedef struct list_el item; - -// connected colorsegments -typedef struct { - int min_x; - int min_y; - int max_x; - int max_y; - int64_t sum_x; - int64_t sum_y; - int pixels; - int seg_value; - int label; -} segment_info; - - -typedef enum { - SEGMENT_MODE, - SEGMENT_MV, - SEGMENT_REFFRAME, - SEGMENT_SKIPPED -} SEGMENT_TYPE; - - -// this merges the two equivalence lists and -// then makes sure that every label points to the same -// equivalence list -void merge(item *labels, int u, int v) { - item *a = labels[u].next; - item *b = labels[v].next; - item c; - item *it = &c; - int count; - - // check if they are already merged - if (u == v || a == b) - return; - - count = a->count + b->count; - - // merge 2 sorted linked lists. - while (a != NULL && b != NULL) { - if (a->label < b->label) { - it->next = a; - a = a->next; - } else { - it->next = b; - b = b->next; - } - - it = it->next; - } - - if (a == NULL) - it->next = b; - else - it->next = a; - - it = c.next; - - // make sure every equivalence in the linked list points to this new ll - while (it != NULL) { - labels[it->label].next = c.next; - it = it->next; - } - c.next->count = count; - -} - -void segment_via_mode_info(VP9_COMMON *oci, int how) { - MODE_INFO *mi = oci->mi; - int i, j; - int mb_index = 0; - - int label = 1; - int pitch = oci->mb_cols; - - // holds linked list equivalences - // the max should probably be allocated at a higher level in oci - item equivalences[MAX_REGIONS]; - int eq_ptr = 0; - item labels[MAX_REGIONS]; - segment_info segments[MAX_REGIONS]; - int label_count = 1; - int labeling[400 * 300]; - int *lp = labeling; - - label_count = 1; - memset(labels, 0, sizeof(labels)); - memset(segments, 0, sizeof(segments)); - - /* Go through each macroblock first pass labelling */ - for (i = 0; i < oci->mb_rows; i++, lp += pitch) { - for (j = 0; j < oci->mb_cols; j++) { - // int above seg_value, left seg_value, this seg_value... - int a = -1, l = -1, n = -1; - - // above label, left label - int al = -1, ll = -1; - if (i) { - al = lp[j - pitch]; - a = labels[al].next->seg_value; - } - if (j) { - ll = lp[j - 1]; - l = labels[ll].next->seg_value; - } - - // what setting are we going to do the implicit segmentation on - switch (how) { - case SEGMENT_MODE: - n = mi[mb_index].mbmi.mode; - break; - case SEGMENT_MV: - n = mi[mb_index].mbmi.mv[0].as_int; - if (mi[mb_index].mbmi.ref_frame[0] == INTRA_FRAME) - n = -9999999; - break; - case SEGMENT_REFFRAME: - n = mi[mb_index].mbmi.ref_frame[0]; - break; - case SEGMENT_SKIPPED: - n = mi[mb_index].mbmi.mb_skip_coeff; - break; - } - - // above and left both have the same seg_value - if (n == a && n == l) { - // pick the lowest label - lp[j] = (al < ll ? al : ll); - labels[lp[j]].next->count++; - - // merge the above and left equivalencies - merge(labels, al, ll); - } - // this matches above seg_value - else if (n == a) { - // give it the same label as above - lp[j] = al; - labels[al].next->count++; - } - // this matches left seg_value - else if (n == l) { - // give it the same label as above - lp[j] = ll; - labels[ll].next->count++; - } else { - // new label doesn't match either - item *e = &labels[label]; - item *nl = &equivalences[eq_ptr++]; - lp[j] = label; - nl->label = label; - nl->next = 0; - nl->seg_value = n; - nl->count = 1; - e->next = nl; - label++; - } - mb_index++; - } - mb_index++; - } - lp = labeling; - - // give new labels to regions - for (i = 1; i < label; i++) - if (labels[i].next->count > min_mbs_in_region && - labels[labels[i].next->label].label == 0) { - segment_info *cs = &segments[label_count]; - cs->label = label_count; - labels[labels[i].next->label].label = label_count++; - labels[labels[i].next->label].seg_value = labels[i].next->seg_value; - cs->seg_value = labels[labels[i].next->label].seg_value; - cs->min_x = oci->mb_cols; - cs->min_y = oci->mb_rows; - cs->max_x = 0; - cs->max_y = 0; - cs->sum_x = 0; - cs->sum_y = 0; - cs->pixels = 0; - } - - lp = labeling; - - // this is just to gather stats... - for (i = 0; i < oci->mb_rows; i++, lp += pitch) { - for (j = 0; j < oci->mb_cols; j++) { - const int old_lab = labels[lp[j]].next->label; - const int lab = labels[old_lab].label; - segment_info *cs = &segments[lab]; - - cs->min_x = MIN(cs->min_x, j); - cs->max_x = MAX(cs->max_x, j); - cs->min_y = MIN(cs->min_y, i); - cs->max_y = MAX(cs->max_y, i); - cs->sum_x += j; - cs->sum_y += i; - cs->pixels++; - - lp[j] = lab; - mb_index++; - } - mb_index++; - } - - { - lp = labeling; - printf("labelling \n"); - mb_index = 0; - for (i = 0; i < oci->mb_rows; i++, lp += pitch) { - for (j = 0; j < oci->mb_cols; j++) { - printf("%4d", lp[j]); - } - printf(" "); - for (j = 0; j < oci->mb_cols; j++, mb_index++) { - // printf("%3d",mi[mb_index].mbmi.mode ); - printf("%4d:%4d", mi[mb_index].mbmi.mv[0].as_mv.row, - mi[mb_index].mbmi.mv[0].as_mv.col); - } - printf("\n"); - ++mb_index; - } - printf("\n"); - } -} - diff --git a/vp9/vp9_common.mk b/vp9/vp9_common.mk index 5a86c65..df91d0e 100644 --- a/vp9/vp9_common.mk +++ b/vp9/vp9_common.mk @@ -68,7 +68,6 @@ VP9_COMMON_SRCS-yes += common/vp9_reconinter.c VP9_COMMON_SRCS-yes += common/vp9_reconintra.c VP9_COMMON_SRCS-$(CONFIG_POSTPROC_VISUALIZER) += common/vp9_textblit.c VP9_COMMON_SRCS-yes += common/vp9_treecoder.c -VP9_COMMON_SRCS-$(CONFIG_IMPLICIT_SEGMENTATION) += common/vp9_implicit_segmentation.c VP9_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp9_loopfilter_x86.h VP9_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp9_postproc_x86.h