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
Yushin Cho
aom-rav1e
Commits
c8d01b1e
Commit
c8d01b1e
authored
Sep 30, 2014
by
Yunqing Wang
Committed by
Gerrit Code Review
Sep 30, 2014
Browse files
Merge "Refactor encode_rd_sb_row function"
parents
58a54b20
14ee2805
Changes
1
Hide whitespace changes
Inline
Side-by-side
vp9/encoder/vp9_encodeframe.c
View file @
c8d01b1e
...
...
@@ -2543,9 +2543,15 @@ static void encode_rd_sb_row(VP9_COMP *cpi, const TileInfo *const tile,
mi_col
+=
MI_BLOCK_SIZE
)
{
int
dummy_rate
;
int64_t
dummy_dist
;
int
i
;
const
int
idx_str
=
cm
->
mi_stride
*
mi_row
+
mi_col
;
MODE_INFO
*
mi
=
cm
->
mi
+
idx_str
;
MODE_INFO
*
prev_mi
=
NULL
;
if
(
cm
->
frame_type
!=
KEY_FRAME
)
prev_mi
=
(
cm
->
prev_mip
+
cm
->
mi_stride
+
1
+
idx_str
)
->
src_mi
;
if
(
sf
->
adaptive_pred_interp_filter
)
{
for
(
i
=
0
;
i
<
64
;
++
i
)
cpi
->
leaf_tree
[
i
].
pred_interp_filter
=
SWITCHABLE
;
...
...
@@ -2564,71 +2570,44 @@ static void encode_rd_sb_row(VP9_COMP *cpi, const TileInfo *const tile,
// TODO(yunqingwang): use_lastframe_partitioning is no longer used in good-
// quality encoding. Need to evaluate it in real-time encoding later to
// decide if it can be removed too. And then, do the code cleanup.
if
((
sf
->
partition_search_type
==
SEARCH_PARTITION
&&
sf
->
use_lastframe_partitioning
)
||
sf
->
partition_search_type
==
FIXED_PARTITION
||
sf
->
partition_search_type
==
VAR_BASED_PARTITION
||
sf
->
partition_search_type
==
VAR_BASED_FIXED_PARTITION
)
{
const
int
idx_str
=
cm
->
mi_stride
*
mi_row
+
mi_col
;
MODE_INFO
*
mi
=
cm
->
mi
+
idx_str
;
MODE_INFO
*
prev_mi
=
(
cm
->
prev_mip
+
cm
->
mi_stride
+
1
+
idx_str
)
->
src_mi
;
cpi
->
mb
.
source_variance
=
UINT_MAX
;
if
(
sf
->
partition_search_type
==
FIXED_PARTITION
)
{
set_offsets
(
cpi
,
tile
,
mi_row
,
mi_col
,
BLOCK_64X64
);
set_fixed_partitioning
(
cpi
,
tile
,
mi
,
mi_row
,
mi_col
,
sf
->
always_this_block_size
);
rd_use_partition
(
cpi
,
tile
,
mi
,
tp
,
mi_row
,
mi_col
,
BLOCK_64X64
,
&
dummy_rate
,
&
dummy_dist
,
1
,
cpi
->
pc_root
);
}
else
if
(
cpi
->
skippable_frame
||
sf
->
partition_search_type
==
VAR_BASED_FIXED_PARTITION
)
{
BLOCK_SIZE
bsize
;
set_offsets
(
cpi
,
tile
,
mi_row
,
mi_col
,
BLOCK_64X64
);
bsize
=
get_rd_var_based_fixed_partition
(
cpi
,
mi_row
,
mi_col
);
set_fixed_partitioning
(
cpi
,
tile
,
mi
,
mi_row
,
mi_col
,
bsize
);
rd_use_partition
(
cpi
,
tile
,
mi
,
tp
,
mi_row
,
mi_col
,
BLOCK_64X64
,
&
dummy_rate
,
&
dummy_dist
,
1
,
cpi
->
pc_root
);
}
else
if
(
sf
->
partition_search_type
==
VAR_BASED_PARTITION
)
{
choose_partitioning
(
cpi
,
tile
,
mi_row
,
mi_col
);
cpi
->
mb
.
source_variance
=
UINT_MAX
;
if
(
sf
->
partition_search_type
==
FIXED_PARTITION
)
{
set_offsets
(
cpi
,
tile
,
mi_row
,
mi_col
,
BLOCK_64X64
);
set_fixed_partitioning
(
cpi
,
tile
,
mi
,
mi_row
,
mi_col
,
sf
->
always_this_block_size
);
rd_use_partition
(
cpi
,
tile
,
mi
,
tp
,
mi_row
,
mi_col
,
BLOCK_64X64
,
&
dummy_rate
,
&
dummy_dist
,
1
,
cpi
->
pc_root
);
}
else
if
((
sf
->
use_lastframe_partitioning
&&
cpi
->
skippable_frame
)
||
sf
->
partition_search_type
==
VAR_BASED_FIXED_PARTITION
)
{
BLOCK_SIZE
bsize
;
set_offsets
(
cpi
,
tile
,
mi_row
,
mi_col
,
BLOCK_64X64
);
bsize
=
get_rd_var_based_fixed_partition
(
cpi
,
mi_row
,
mi_col
);
set_fixed_partitioning
(
cpi
,
tile
,
mi
,
mi_row
,
mi_col
,
bsize
);
rd_use_partition
(
cpi
,
tile
,
mi
,
tp
,
mi_row
,
mi_col
,
BLOCK_64X64
,
&
dummy_rate
,
&
dummy_dist
,
1
,
cpi
->
pc_root
);
}
else
if
(
sf
->
partition_search_type
==
VAR_BASED_PARTITION
)
{
choose_partitioning
(
cpi
,
tile
,
mi_row
,
mi_col
);
rd_use_partition
(
cpi
,
tile
,
mi
,
tp
,
mi_row
,
mi_col
,
BLOCK_64X64
,
&
dummy_rate
,
&
dummy_dist
,
1
,
cpi
->
pc_root
);
}
else
if
(
sf
->
partition_search_type
==
SEARCH_PARTITION
&&
sf
->
use_lastframe_partitioning
&&
(
cpi
->
rc
.
frames_since_key
%
sf
->
last_partitioning_redo_frequency
)
&&
cm
->
prev_mi
&&
cm
->
show_frame
&&
cm
->
frame_type
!=
KEY_FRAME
&&
!
cpi
->
rc
.
is_src_frame_alt_ref
&&
((
sf
->
use_lastframe_partitioning
!=
LAST_FRAME_PARTITION_LOW_MOTION
)
||
!
sb_has_motion
(
cm
,
prev_mi
,
sf
->
lf_motion_threshold
)))
{
if
(
sf
->
constrain_copy_partition
&&
sb_has_motion
(
cm
,
prev_mi
,
sf
->
lf_motion_threshold
))
constrain_copy_partitioning
(
cpi
,
tile
,
mi
,
prev_mi
,
mi_row
,
mi_col
,
BLOCK_16X16
);
else
copy_partitioning
(
cm
,
mi
,
prev_mi
);
rd_use_partition
(
cpi
,
tile
,
mi
,
tp
,
mi_row
,
mi_col
,
BLOCK_64X64
,
&
dummy_rate
,
&
dummy_dist
,
1
,
cpi
->
pc_root
);
}
else
{
GF_GROUP
*
gf_grp
=
&
cpi
->
twopass
.
gf_group
;
int
last_was_mid_sequence_overlay
=
0
;
if
((
cpi
->
oxcf
.
pass
==
2
)
&&
(
gf_grp
->
index
))
{
if
(
gf_grp
->
update_type
[
gf_grp
->
index
-
1
]
==
OVERLAY_UPDATE
)
last_was_mid_sequence_overlay
=
1
;
}
if
((
cpi
->
rc
.
frames_since_key
%
sf
->
last_partitioning_redo_frequency
)
==
0
||
last_was_mid_sequence_overlay
||
cm
->
prev_mi
==
0
||
cm
->
show_frame
==
0
||
cm
->
frame_type
==
KEY_FRAME
||
cpi
->
rc
.
is_src_frame_alt_ref
||
((
sf
->
use_lastframe_partitioning
==
LAST_FRAME_PARTITION_LOW_MOTION
)
&&
sb_has_motion
(
cm
,
prev_mi
,
sf
->
lf_motion_threshold
)))
{
// If required set upper and lower partition size limits
if
(
sf
->
auto_min_max_partition_size
)
{
set_offsets
(
cpi
,
tile
,
mi_row
,
mi_col
,
BLOCK_64X64
);
rd_auto_partition_range
(
cpi
,
tile
,
mi_row
,
mi_col
,
&
sf
->
min_partition_size
,
&
sf
->
max_partition_size
);
}
rd_pick_partition
(
cpi
,
tile
,
tp
,
mi_row
,
mi_col
,
BLOCK_64X64
,
&
dummy_rate
,
&
dummy_dist
,
INT64_MAX
,
cpi
->
pc_root
);
}
else
{
if
(
sf
->
constrain_copy_partition
&&
sb_has_motion
(
cm
,
prev_mi
,
sf
->
lf_motion_threshold
))
constrain_copy_partitioning
(
cpi
,
tile
,
mi
,
prev_mi
,
mi_row
,
mi_col
,
BLOCK_16X16
);
else
copy_partitioning
(
cm
,
mi
,
prev_mi
);
rd_use_partition
(
cpi
,
tile
,
mi
,
tp
,
mi_row
,
mi_col
,
BLOCK_64X64
,
&
dummy_rate
,
&
dummy_dist
,
1
,
cpi
->
pc_root
);
}
}
}
else
{
// If required set upper and lower partition size limits
if
(
sf
->
auto_min_max_partition_size
)
{
...
...
@@ -2638,7 +2617,8 @@ static void encode_rd_sb_row(VP9_COMP *cpi, const TileInfo *const tile,
&
sf
->
max_partition_size
);
}
rd_pick_partition
(
cpi
,
tile
,
tp
,
mi_row
,
mi_col
,
BLOCK_64X64
,
&
dummy_rate
,
&
dummy_dist
,
INT64_MAX
,
cpi
->
pc_root
);
&
dummy_rate
,
&
dummy_dist
,
INT64_MAX
,
cpi
->
pc_root
);
}
}
}
...
...
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