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
73eeb3be
Commit
73eeb3be
authored
Jun 26, 2014
by
Pengchong Jin
Committed by
Gerrit Code Review
Jun 26, 2014
Browse files
Merge "Skip the partition search for the frame with no motion"
parents
91ccad21
12861260
Changes
3
Hide whitespace changes
Inline
Side-by-side
vp9/encoder/vp9_encodeframe.c
View file @
73eeb3be
...
...
@@ -2256,7 +2256,8 @@ static void encode_rd_sb_row(VP9_COMP *cpi, const TileInfo *const tile,
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
->
partition_search_type
==
VAR_BASED_FIXED_PARTITION
)
{
}
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
);
...
...
vp9/encoder/vp9_encoder.c
View file @
73eeb3be
...
...
@@ -740,6 +740,8 @@ VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf) {
cpi
->
alt_is_last
=
0
;
cpi
->
gold_is_alt
=
0
;
cpi
->
skippable_frame
=
0
;
// Create the encoder segmentation map and set all entries to 0
CHECK_MEM_ERROR
(
cm
,
cpi
->
segmentation_map
,
vpx_calloc
(
cm
->
mi_rows
*
cm
->
mi_cols
,
1
));
...
...
@@ -1967,6 +1969,29 @@ YV12_BUFFER_CONFIG *vp9_scale_if_required(VP9_COMMON *cm,
}
}
static
void
configure_skippable_frame
(
VP9_COMP
*
cpi
)
{
// If the current frame does not have non-zero motion vector detected in the
// first pass, and so do its previous and forward frames, then this frame
// can be skipped for partition check, and the partition size is assigned
// according to the variance
SVC
*
const
svc
=
&
cpi
->
svc
;
const
int
is_spatial_svc
=
(
svc
->
number_spatial_layers
>
1
)
&&
(
svc
->
number_temporal_layers
==
1
);
TWO_PASS
*
const
twopass
=
is_spatial_svc
?
&
svc
->
layer_context
[
svc
->
spatial_layer_id
].
twopass
:
&
cpi
->
twopass
;
cpi
->
skippable_frame
=
(
!
frame_is_intra_only
(
&
cpi
->
common
)
&&
twopass
->
stats_in
-
2
>
twopass
->
stats_in_start
&&
twopass
->
stats_in
<
twopass
->
stats_in_end
&&
(
twopass
->
stats_in
-
1
)
->
pcnt_inter
-
(
twopass
->
stats_in
-
1
)
->
pcnt_motion
==
1
&&
(
twopass
->
stats_in
-
2
)
->
pcnt_inter
-
(
twopass
->
stats_in
-
2
)
->
pcnt_motion
==
1
&&
twopass
->
stats_in
->
pcnt_inter
-
twopass
->
stats_in
->
pcnt_motion
==
1
);
}
static
void
encode_frame_to_data_rate
(
VP9_COMP
*
cpi
,
size_t
*
size
,
uint8_t
*
dest
,
...
...
@@ -2062,6 +2087,13 @@ static void encode_frame_to_data_rate(VP9_COMP *cpi,
if
(
cpi
->
pass
==
2
&&
cpi
->
sf
.
static_segmentation
)
configure_static_seg_features
(
cpi
);
// Check if the current frame is skippable for the partition search in the
// second pass according to the first pass stats
if
(
cpi
->
pass
==
2
&&
(
!
cpi
->
use_svc
||
cpi
->
svc
.
number_temporal_layers
==
1
))
{
configure_skippable_frame
(
cpi
);
}
// For 1 pass CBR, check if we are dropping this frame.
// Never drop on key frame.
if
(
cpi
->
pass
==
0
&&
...
...
vp9/encoder/vp9_encoder.h
View file @
73eeb3be
...
...
@@ -262,6 +262,8 @@ typedef struct VP9_COMP {
int
alt_is_last
;
// Alt same as last ( short circuit altref search)
int
gold_is_alt
;
// don't do both alt and gold search ( just do gold).
int
skippable_frame
;
int
scaled_ref_idx
[
3
];
int
lst_fb_idx
;
int
gld_fb_idx
;
...
...
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