Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Xiph.Org
aom-rav1e
Commits
f2be4f60
Commit
f2be4f60
authored
Apr 08, 2016
by
Geza Lore
Browse files
Refactor PC_TREE root handling.
Change-Id: Id8b16c1b18bd6f909e72aae3fd582dd3503c88c6
parent
454989ff
Changes
5
Hide whitespace changes
Inline
Side-by-side
vp10/common/enums.h
View file @
f2be4f60
...
...
@@ -20,7 +20,7 @@ extern "C" {
#undef MAX_SB_SIZE
//
Pixels per m
ax superblock size
//
M
ax superblock size
#if CONFIG_EXT_PARTITION
# define MAX_SB_SIZE_LOG2 7
#else
...
...
@@ -29,6 +29,9 @@ extern "C" {
#define MAX_SB_SIZE (1 << MAX_SB_SIZE_LOG2)
#define MAX_SB_SQUARE (MAX_SB_SIZE * MAX_SB_SIZE)
// Min superblock size
#define MIN_SB_SIZE_LOG2 6
// Pixels per Mode Info (MI) unit
#define MI_SIZE_LOG2 3
#define MI_SIZE (1 << MI_SIZE_LOG2)
...
...
@@ -37,6 +40,9 @@ extern "C" {
#define MAX_MIB_SIZE_LOG2 (MAX_SB_SIZE_LOG2 - MI_SIZE_LOG2)
#define MAX_MIB_SIZE (1 << MAX_MIB_SIZE_LOG2)
// MI-units per min superblock
#define MIN_MIB_SIZE_LOG2 (MIN_SB_SIZE_LOG2 - MI_SIZE_LOG2)
// Mask to extract MI offset within max MIB
#define MAX_MIB_MASK (MAX_MIB_SIZE - 1)
#define MAX_MIB_MASK_2 (MAX_MIB_SIZE * 2 - 1)
...
...
vp10/encoder/context_tree.c
View file @
f2be4f60
...
...
@@ -244,8 +244,16 @@ void vp10_setup_pc_tree(VP10_COMMON *cm, ThreadData *td) {
}
++
square_index
;
}
td
->
pc_root
=
&
td
->
pc_tree
[
tree_nodes
-
1
];
td
->
pc_root
[
0
].
none
.
best_mode_index
=
2
;
// Set up the root node for the largest superblock size
i
=
MAX_MIB_SIZE_LOG2
-
MIN_MIB_SIZE_LOG2
;
td
->
pc_root
[
i
]
=
&
td
->
pc_tree
[
tree_nodes
-
1
];
td
->
pc_root
[
i
]
->
none
.
best_mode_index
=
2
;
// Set up the root nodes for the rest of the possible superblock sizes
while
(
--
i
>=
0
)
{
td
->
pc_root
[
i
]
=
td
->
pc_root
[
i
+
1
]
->
split
[
0
];
td
->
pc_root
[
i
]
->
none
.
best_mode_index
=
2
;
}
}
void
vp10_free_pc_tree
(
ThreadData
*
td
)
{
...
...
vp10/encoder/encodeframe.c
View file @
f2be4f60
...
...
@@ -4235,6 +4235,7 @@ static void encode_rd_sb_row(VP10_COMP *cpi,
const
int
idx_str
=
cm
->
mi_stride
*
mi_row
+
mi_col
;
MODE_INFO
**
mi
=
cm
->
mi_grid_visible
+
idx_str
;
PC_TREE
*
const
pc_root
=
td
->
pc_root
[
cm
->
mib_size_log2
-
MIN_MIB_SIZE_LOG2
];
if
(
sf
->
adaptive_pred_interp_filter
)
{
for
(
i
=
0
;
i
<
leaf_nodes
;
++
i
)
...
...
@@ -4249,7 +4250,7 @@ static void encode_rd_sb_row(VP10_COMP *cpi,
}
vp10_zero
(
x
->
pred_mv
);
td
->
pc_root
->
index
=
0
;
pc_root
->
index
=
0
;
if
(
seg
->
enabled
)
{
const
uint8_t
*
const
map
=
seg
->
update_map
?
cpi
->
segmentation_map
...
...
@@ -4269,7 +4270,7 @@ static void encode_rd_sb_row(VP10_COMP *cpi,
#if CONFIG_SUPERTX
&
dummy_rate_nocoef
,
#endif // CONFIG_SUPERTX
1
,
td
->
pc_root
);
1
,
pc_root
);
}
else
if
(
cpi
->
partition_search_skippable_frame
)
{
BLOCK_SIZE
bsize
;
set_offsets
(
cpi
,
tile_info
,
x
,
mi_row
,
mi_col
,
cm
->
sb_size
);
...
...
@@ -4280,7 +4281,7 @@ static void encode_rd_sb_row(VP10_COMP *cpi,
#if CONFIG_SUPERTX
&
dummy_rate_nocoef
,
#endif // CONFIG_SUPERTX
1
,
td
->
pc_root
);
1
,
pc_root
);
}
else
if
(
sf
->
partition_search_type
==
VAR_BASED_PARTITION
&&
cm
->
frame_type
!=
KEY_FRAME
)
{
choose_partitioning
(
cpi
,
tile_info
,
x
,
mi_row
,
mi_col
);
...
...
@@ -4289,7 +4290,7 @@ static void encode_rd_sb_row(VP10_COMP *cpi,
#if CONFIG_SUPERTX
&
dummy_rate_nocoef
,
#endif // CONFIG_SUPERTX
1
,
td
->
pc_root
);
1
,
pc_root
);
}
else
{
// If required set upper and lower partition size limits
if
(
sf
->
auto_min_max_partition_size
)
{
...
...
@@ -4303,9 +4304,7 @@ static void encode_rd_sb_row(VP10_COMP *cpi,
#if CONFIG_SUPERTX
&
dummy_rate_nocoef
,
#endif // CONFIG_SUPERTX
INT64_MAX
,
cm
->
sb_size
==
BLOCK_LARGEST
?
td
->
pc_root
:
td
->
pc_root
->
split
[
0
]);
INT64_MAX
,
pc_root
);
}
}
#if CONFIG_ENTROPY
...
...
vp10/encoder/encoder.h
View file @
f2be4f60
...
...
@@ -266,7 +266,7 @@ typedef struct ThreadData {
PICK_MODE_CONTEXT
*
leaf_tree
;
PC_TREE
*
pc_tree
;
PC_TREE
*
pc_root
;
PC_TREE
*
pc_root
[
MAX_MIB_SIZE_LOG2
-
MIN_MIB_SIZE_LOG2
+
1
]
;
}
ThreadData
;
struct
EncWorkerData
;
...
...
vp10/encoder/firstpass.c
View file @
f2be4f60
...
...
@@ -491,7 +491,8 @@ void vp10_first_pass(VP10_COMP *cpi, const struct lookahead_entry *source) {
TileInfo
tile
;
struct
macroblock_plane
*
const
p
=
x
->
plane
;
struct
macroblockd_plane
*
const
pd
=
xd
->
plane
;
const
PICK_MODE_CONTEXT
*
ctx
=
&
cpi
->
td
.
pc_root
->
none
;
const
PICK_MODE_CONTEXT
*
ctx
=
&
cpi
->
td
.
pc_root
[
MAX_MIB_SIZE_LOG2
-
MIN_MIB_SIZE_LOG2
]
->
none
;
int
i
;
int
recon_yoffset
,
recon_uvoffset
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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