Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
A
aom-rav1e
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Xiph.Org
aom-rav1e
Commits
50886314
Commit
50886314
authored
11 years ago
by
Dmitry Kovalev
Committed by
Gerrit Code Review
11 years ago
Browse files
Options
Downloads
Plain Diff
Merge "Cleaning up vp9_picklpf.c file."
parents
829c3530
2f4e6ee5
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
vp9/encoder/vp9_picklpf.c
+28
-53
28 additions, 53 deletions
vp9/encoder/vp9_picklpf.c
with
28 additions
and
53 deletions
vp9/encoder/vp9_picklpf.c
+
28
−
53
View file @
50886314
...
...
@@ -20,65 +20,43 @@
#include
"vp9/common/vp9_loopfilter.h"
#include
"./vpx_scale_rtcd.h"
// Enforce a minimum filter level based upon baseline Q
static
int
get_min_filter_level
(
VP9_COMP
*
cpi
,
int
base_qindex
)
{
int
min_filter_level
;
min_filter_level
=
0
;
return
min_filter_level
;
return
0
;
}
// Enforce a maximum filter level based upon baseline Q
static
int
get_max_filter_level
(
VP9_COMP
*
cpi
,
int
base_qindex
)
{
int
max_filter_level
=
MAX_LOOP_FILTER
;
(
void
)
base_qindex
;
if
(
cpi
->
twopass
.
section_intra_rating
>
8
)
max_filter_level
=
MAX_LOOP_FILTER
*
3
/
4
;
return
max_filter_level
;
return
cpi
->
twopass
.
section_intra_rating
>
8
?
MAX_LOOP_FILTER
*
3
/
4
:
MAX_LOOP_FILTER
;
}
// Stub function for now Alt LF not used
void
vp9_set_alt_lf_level
(
VP9_COMP
*
cpi
,
int
filt_val
)
{
}
void
vp9_pick_filter_level
(
YV12_BUFFER_CONFIG
*
sd
,
VP9_COMP
*
cpi
,
int
partial
)
{
MACROBLOCKD
*
const
xd
=
&
cpi
->
mb
.
e_mbd
;
VP9_COMMON
*
const
cm
=
&
cpi
->
common
;
struct
loopfilter
*
const
lf
=
&
cm
->
lf
;
int
best_err
=
0
;
int
filt_err
=
0
;
const
int
min_filter_level
=
get_min_filter_level
(
cpi
,
cm
->
base_qindex
);
const
int
max_filter_level
=
get_max_filter_level
(
cpi
,
cm
->
base_qindex
);
int
filter_step
;
int
filt_high
=
0
;
// Start search at previous frame filter level
int
filt_mid
=
lf
->
filter_level
;
int
filt_low
=
0
;
int
best_err
=
0
;
int
filt_err
=
0
;
int
filt_best
;
int
filt_direction
=
0
;
int
Bias
=
0
;
// Bias against raising loop filter in favor of lowering it.
// Make a copy of the unfiltered / processed recon buffer
vpx_yv12_copy_y
(
cm
->
frame_to_show
,
&
cpi
->
last_frame_uf
);
// Start the search at the previous frame filter level unless it is now out of
// range.
int
filt_mid
=
clamp
(
lf
->
filter_level
,
min_filter_level
,
max_filter_level
);
int
filter_step
=
filt_mid
<
16
?
4
:
filt_mid
/
4
;
lf
->
sharpness_level
=
cm
->
frame_type
==
KEY_FRAME
?
0
:
cpi
->
oxcf
.
sharpness
;
// Start the search at the previous frame filter level unless it is now out of
// range.
filt_mid
=
clamp
(
lf
->
filter_level
,
min_filter_level
,
max_filter_level
);
// Define the initial step size
filter_step
=
filt_mid
<
16
?
4
:
filt_mid
/
4
;
// Make a copy of the unfiltered / processed recon buffer
vpx_yv12_copy_y
(
cm
->
frame_to_show
,
&
cpi
->
last_frame_uf
);
// Get baseline error score
vp9_set_alt_lf_level
(
cpi
,
filt_mid
);
vp9_loop_filter_frame
(
cm
,
&
cpi
->
mb
.
e_mb
d
,
filt_mid
,
1
,
partial
);
vp9_loop_filter_frame
(
cm
,
x
d
,
filt_mid
,
1
,
partial
);
best_err
=
vp9_calc_ss_err
(
sd
,
cm
->
frame_to_show
);
filt_best
=
filt_mid
;
...
...
@@ -87,35 +65,32 @@ void vp9_pick_filter_level(YV12_BUFFER_CONFIG *sd, VP9_COMP *cpi, int partial) {
vpx_yv12_copy_y
(
&
cpi
->
last_frame_uf
,
cm
->
frame_to_show
);
while
(
filter_step
>
0
)
{
Bias
=
(
best_err
>>
(
15
-
(
filt_mid
/
8
)))
*
filter_step
;
const
int
filt_high
=
MIN
(
filt_mid
+
filter_step
,
max_filter_level
);
const
int
filt_low
=
MAX
(
filt_mid
-
filter_step
,
min_filter_level
);
// Bias against raising loop filter in favor of lowering it.
int
bias
=
(
best_err
>>
(
15
-
(
filt_mid
/
8
)))
*
filter_step
;
if
(
cpi
->
twopass
.
section_intra_rating
<
20
)
B
ias
=
B
ias
*
cpi
->
twopass
.
section_intra_rating
/
20
;
b
ias
=
b
ias
*
cpi
->
twopass
.
section_intra_rating
/
20
;
// yx, bias less for large block size
if
(
cpi
->
common
.
tx_mode
!=
ONLY_4X4
)
Bias
>>=
1
;
filt_high
=
((
filt_mid
+
filter_step
)
>
max_filter_level
)
?
max_filter_level
:
(
filt_mid
+
filter_step
);
filt_low
=
((
filt_mid
-
filter_step
)
<
min_filter_level
)
?
min_filter_level
:
(
filt_mid
-
filter_step
);
if
(
cm
->
tx_mode
!=
ONLY_4X4
)
bias
>>=
1
;
if
(
(
filt_direction
<=
0
)
&&
(
filt_low
!=
filt_mid
)
)
{
if
(
filt_direction
<=
0
&&
filt_low
!=
filt_mid
)
{
// Get Low filter error score
vp9_set_alt_lf_level
(
cpi
,
filt_low
);
vp9_loop_filter_frame
(
cm
,
&
cpi
->
mb
.
e_mb
d
,
filt_low
,
1
,
partial
);
vp9_loop_filter_frame
(
cm
,
x
d
,
filt_low
,
1
,
partial
);
filt_err
=
vp9_calc_ss_err
(
sd
,
cm
->
frame_to_show
);
//
Re-instate the unfiltered frame
// Re-instate the unfiltered frame
vpx_yv12_copy_y
(
&
cpi
->
last_frame_uf
,
cm
->
frame_to_show
);
// If value is close to the best so far then bias towards a lower loop
// filter value.
if
((
filt_err
-
B
ias
)
<
best_err
)
{
if
((
filt_err
-
b
ias
)
<
best_err
)
{
// Was it actually better than the previous best?
if
(
filt_err
<
best_err
)
best_err
=
filt_err
;
...
...
@@ -125,9 +100,9 @@ void vp9_pick_filter_level(YV12_BUFFER_CONFIG *sd, VP9_COMP *cpi, int partial) {
}
// Now look at filt_high
if
(
(
filt_direction
>=
0
)
&&
(
filt_high
!=
filt_mid
)
)
{
if
(
filt_direction
>=
0
&&
filt_high
!=
filt_mid
)
{
vp9_set_alt_lf_level
(
cpi
,
filt_high
);
vp9_loop_filter_frame
(
cm
,
&
cpi
->
mb
.
e_mb
d
,
filt_high
,
1
,
partial
);
vp9_loop_filter_frame
(
cm
,
x
d
,
filt_high
,
1
,
partial
);
filt_err
=
vp9_calc_ss_err
(
sd
,
cm
->
frame_to_show
);
...
...
@@ -135,7 +110,7 @@ void vp9_pick_filter_level(YV12_BUFFER_CONFIG *sd, VP9_COMP *cpi, int partial) {
vpx_yv12_copy_y
(
&
cpi
->
last_frame_uf
,
cm
->
frame_to_show
);
// Was it better than the previous best?
if
(
filt_err
<
(
best_err
-
B
ias
))
{
if
(
filt_err
<
(
best_err
-
b
ias
))
{
best_err
=
filt_err
;
filt_best
=
filt_high
;
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
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!
Save comment
Cancel
Please
register
or
sign in
to comment