Skip to content
GitLab
Menu
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
ecb0afc8
Commit
ecb0afc8
authored
Sep 06, 2016
by
Sarah Parker
Browse files
Add parameter search to global motion computation
Change-Id: I66ea5a819ab54ecb5327eee20f798d7d7f0833d3
parent
1d22837f
Changes
1
Hide whitespace changes
Inline
Side-by-side
av1/encoder/encodeframe.c
View file @
ecb0afc8
...
...
@@ -4403,7 +4403,80 @@ static int input_fpmb_stats(FIRSTPASS_MB_STATS *firstpass_mb_stats,
#if CONFIG_GLOBAL_MOTION
#define MIN_TRANS_THRESH 8
#define GLOBAL_MOTION_ADVANTAGE_THRESH 0.60
#define GLOBAL_MOTION_MODEL TRANSLATION
#define GLOBAL_MOTION_MODEL ROTZOOM
static
void
refine_integerized_param
(
WarpedMotionParams
*
wm
,
#if CONFIG_AOM_HIGHBITDEPTH
int
use_hbd
,
int
bd
,
#endif // CONFIG_AOM_HIGHBITDEPTH
uint8_t
*
ref
,
int
r_width
,
int
r_height
,
int
r_stride
,
uint8_t
*
dst
,
int
d_width
,
int
d_height
,
int
d_stride
,
int
n_refinements
)
{
int
i
=
0
,
p
;
int
n_params
=
n_trans_model_params
[
wm
->
wmtype
];
int16_t
*
param_mat
=
(
int16_t
*
)
wm
->
wmmat
;
double
step_error
;
int
step
;
int16_t
*
param
;
int16_t
curr_param
;
int16_t
best_param
;
double
best_error
=
av1_warp_erroradv
(
wm
,
#if CONFIG_AOM_HIGHBITDEPTH
use_hbd
,
bd
,
#endif // CONFIG_AOM_HIGHBITDEPTH
ref
,
r_width
,
r_height
,
r_stride
,
dst
,
0
,
0
,
d_width
,
d_height
,
d_stride
,
0
,
0
,
16
,
16
);
for
(
p
=
0
;
p
<
n_params
;
++
p
)
{
param
=
param_mat
+
p
;
step
=
1
<<
(
n_refinements
+
1
);
curr_param
=
*
param
;
best_param
=
curr_param
;
for
(
i
=
0
;
i
<
n_refinements
;
i
++
)
{
// look to the left
*
param
=
curr_param
-
step
;
step_error
=
av1_warp_erroradv
(
wm
,
#if CONFIG_AOM_HIGHBITDEPTH
use_hbd
,
bd
,
#endif // CONFIG_AOM_HIGHBITDEPTH
ref
,
r_width
,
r_height
,
r_stride
,
dst
,
0
,
0
,
d_width
,
d_height
,
d_stride
,
0
,
0
,
16
,
16
);
if
(
step_error
<
best_error
)
{
step
>>=
1
;
best_error
=
step_error
;
best_param
=
*
param
;
curr_param
=
best_param
;
continue
;
}
// look to the right
*
param
=
curr_param
+
step
;
step_error
=
av1_warp_erroradv
(
wm
,
#if CONFIG_AOM_HIGHBITDEPTH
use_hbd
,
bd
,
#endif // CONFIG_AOM_HIGHBITDEPTH
ref
,
r_width
,
r_height
,
r_stride
,
dst
,
0
,
0
,
d_width
,
d_height
,
d_stride
,
0
,
0
,
16
,
16
);
if
(
step_error
<
best_error
)
{
step
>>=
1
;
best_error
=
step_error
;
best_param
=
*
param
;
curr_param
=
best_param
;
continue
;
}
// no improvement found-> means we're either already at a minimum or
// step is too wide
step
>>=
1
;
}
*
param
=
best_param
;
}
}
static
void
convert_to_params
(
double
*
H
,
TransformationType
type
,
int16_t
*
model
)
{
int
i
;
...
...
@@ -4416,6 +4489,7 @@ static void convert_to_params(double *H, TransformationType type,
model
[
1
]
=
(
int16_t
)
clamp
(
model
[
1
],
GM_TRANS_MIN
,
GM_TRANS_MAX
)
*
GM_TRANS_DECODE_FACTOR
;
// TODO(sarahparker) 1 should be subtracted here
for
(
i
=
2
;
i
<
n_params
;
++
i
)
{
model
[
i
]
=
(
int16_t
)
floor
(
H
[
i
]
*
(
1
<<
GM_ALPHA_PREC_BITS
)
+
0
.
5
);
model
[
i
]
=
(
int16_t
)
clamp
(
model
[
i
],
GM_ALPHA_MIN
,
GM_ALPHA_MAX
)
*
...
...
@@ -4476,6 +4550,14 @@ static void encode_frame_internal(AV1_COMP *cpi) {
convert_model_to_params
(
H
,
GLOBAL_MOTION_MODEL
,
&
cm
->
global_motion
[
frame
]);
if
(
get_gmtype
(
&
cm
->
global_motion
[
frame
])
>
GLOBAL_ZERO
)
{
refine_integerized_param
(
&
cm
->
global_motion
[
frame
].
motion_params
,
#if CONFIG_AOM_HIGHBITDEPTH
xd
->
cur_buf
->
flags
&
YV12_FLAG_HIGHBITDEPTH
,
xd
->
bd
,
#endif // CONFIG_AOM_HIGHBITDEPTH
ref_buf
->
y_buffer
,
ref_buf
->
y_width
,
ref_buf
->
y_height
,
ref_buf
->
y_stride
,
cpi
->
Source
->
y_buffer
,
cpi
->
Source
->
y_width
,
cpi
->
Source
->
y_height
,
cpi
->
Source
->
y_stride
,
3
);
// compute the advantage of using gm parameters over 0 motion
double
erroradvantage
=
av1_warp_erroradv
(
&
cm
->
global_motion
[
frame
].
motion_params
,
...
...
Write
Preview
Supports
Markdown
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