Removing unused implicit segmentation code.
authorDmitry Kovalev <dkovalev@google.com>
Tue, 2 Jul 2013 18:16:42 +0000 (11:16 -0700)
committerDmitry Kovalev <dkovalev@google.com>
Tue, 2 Jul 2013 18:16:42 +0000 (11:16 -0700)
Change-Id: I8a2983fb14274a6ac53681fa4cd5d4209cbd2905

vp9/common/vp9_implicit_segmentation.c [deleted file]
vp9/vp9_common.mk

diff --git a/vp9/common/vp9_implicit_segmentation.c b/vp9/common/vp9_implicit_segmentation.c
deleted file mode 100644 (file)
index 2a1d35f..0000000
+++ /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");
-  }
-}
-
index 5a86c65..df91d0e 100644 (file)
@@ -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