Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Yushin Cho
aom-rav1e
Commits
a3d2e6c9
Commit
a3d2e6c9
authored
Jul 02, 2013
by
Dmitry Kovalev
Browse files
Removing unused implicit segmentation code.
Change-Id: I8a2983fb14274a6ac53681fa4cd5d4209cbd2905
parent
f4bee75c
Changes
2
Hide whitespace changes
Inline
Side-by-side
vp9/common/vp9_implicit_segmentation.c
deleted
100644 → 0
View file @
f4bee75c
/*
* 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
"
);
}
}
vp9/vp9_common.mk
View file @
a3d2e6c9
...
...
@@ -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
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment