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
55d02302
Commit
55d02302
authored
Jan 16, 2014
by
Dmitry Kovalev
Browse files
Cleaning up vp9_refining_search_8p_c() function.
Change-Id: Icf3b3dd96d7e133a4ad7260cd95288f6217998a6
parent
b0526522
Changes
2
Hide whitespace changes
Inline
Side-by-side
vp9/encoder/vp9_mcomp.c
View file @
55d02302
...
...
@@ -1903,65 +1903,54 @@ int vp9_refining_search_sadx4(MACROBLOCK *x,
return
INT_MAX
;
}
/* This function is called when we do joint motion search in comp_inter_inter
* mode.
*/
int
vp9_refining_search_8p_c
(
MACROBLOCK
*
x
,
// This function is called when we do joint motion search in comp_inter_inter
// mode.
int
vp9_refining_search_8p_c
(
const
MACROBLOCK
*
x
,
MV
*
ref_mv
,
int
error_per_bit
,
int
search_range
,
vp9_variance_fn_ptr_t
*
fn_ptr
,
int
*
mvjcost
,
int
*
mvcost
[
2
],
const
MV
*
center_mv
,
const
uint8_t
*
second_pred
,
int
w
,
int
h
)
{
const
MACROBLOCKD
*
const
xd
=
&
x
->
e_mbd
;
MV
neighbors
[
8
]
=
{{
-
1
,
0
},
{
0
,
-
1
},
{
0
,
1
},
{
1
,
0
},
{
-
1
,
-
1
},
{
1
,
-
1
},
{
-
1
,
1
},
{
1
,
1
}};
const
MACROBLOCKD
*
const
xd
=
&
x
->
e_mbd
;
const
MV
neighbors
[
8
]
=
{{
-
1
,
0
},
{
0
,
-
1
},
{
0
,
1
},
{
1
,
0
},
{
-
1
,
-
1
},
{
1
,
-
1
},
{
-
1
,
1
},
{
1
,
1
}};
int
i
,
j
;
int
this_row_offset
,
this_col_offset
;
int
what_stride
=
x
->
plane
[
0
].
src
.
stride
;
int
in_what_stride
=
xd
->
plane
[
0
].
pre
[
0
].
stride
;
uint8_t
*
what
=
x
->
plane
[
0
].
src
.
buf
;
uint8_t
*
best_address
=
xd
->
plane
[
0
].
pre
[
0
].
buf
+
(
ref_mv
->
row
*
xd
->
plane
[
0
].
pre
[
0
].
stride
)
+
ref_mv
->
col
;
uint8_t
*
check_here
;
const
uint8_t
*
what
=
x
->
plane
[
0
].
src
.
buf
;
const
int
what_stride
=
x
->
plane
[
0
].
src
.
stride
;
const
uint8_t
*
in_what
=
xd
->
plane
[
0
].
pre
[
0
].
buf
;
const
int
in_what_stride
=
xd
->
plane
[
0
].
pre
[
0
].
stride
;
const
uint8_t
*
best_address
=
&
in_what
[
ref_mv
->
row
*
in_what_stride
+
ref_mv
->
col
];
unsigned
int
thissad
;
MV
this_mv
;
unsigned
int
bestsad
=
INT_MAX
;
MV
fcenter_mv
;
const
MV
fcenter_mv
=
{
center_mv
->
row
>>
3
,
center_mv
->
col
>>
3
};
int
*
mvjsadcost
=
x
->
nmvjointsadcost
;
const
int
*
mvjsadcost
=
x
->
nmvjointsadcost
;
int
*
mvsadcost
[
2
]
=
{
x
->
nmvsadcost
[
0
],
x
->
nmvsadcost
[
1
]};
fcenter_mv
.
row
=
center_mv
->
row
>>
3
;
fcenter_mv
.
col
=
center_mv
->
col
>>
3
;
/* Get compound pred by averaging two pred blocks. */
bestsad
=
fn_ptr
->
sdaf
(
what
,
what_stride
,
best_address
,
in_what_stride
,
second_pred
,
0x7fffffff
)
+
mvsad_err_cost
(
ref_mv
,
&
fcenter_mv
,
mvjsadcost
,
mvsadcost
,
error_per_bit
);
unsigned
int
bestsad
=
fn_ptr
->
sdaf
(
what
,
what_stride
,
best_address
,
in_what_stride
,
second_pred
,
0x7fffffff
)
+
mvsad_err_cost
(
ref_mv
,
&
fcenter_mv
,
mvjsadcost
,
mvsadcost
,
error_per_bit
);
for
(
i
=
0
;
i
<
search_range
;
i
++
)
{
for
(
i
=
0
;
i
<
search_range
;
++
i
)
{
int
best_site
=
-
1
;
for
(
j
=
0
;
j
<
8
;
j
++
)
{
this_row
_offset
=
ref_mv
->
row
+
neighbors
[
j
].
row
;
this_col
_offset
=
ref_mv
->
col
+
neighbors
[
j
].
col
;
this_
mv
.
row
=
ref_mv
->
row
+
neighbors
[
j
].
row
;
this_
mv
.
col
=
ref_mv
->
col
+
neighbors
[
j
].
col
;
if
((
this_col
_offset
>
x
->
mv_col_min
)
&&
(
this_col
_offset
<
x
->
mv_col_max
)
&&
(
this_row
_offset
>
x
->
mv_row_min
)
&&
(
this_row
_offset
<
x
->
mv_row_max
))
{
c
heck_here
=
(
neighbors
[
j
]
.
row
)
*
in_what_stride
+
neighbors
[
j
].
col
+
best_address
;
if
((
this_
mv
.
col
>
x
->
mv_col_min
)
&&
(
this_
mv
.
col
<
x
->
mv_col_max
)
&&
(
this_
mv
.
row
>
x
->
mv_row_min
)
&&
(
this_
mv
.
row
<
x
->
mv_row_max
))
{
c
onst
uint8_t
*
check_here
=
&
in_what
[
this_mv
.
row
*
in_what_stride
+
this_mv
.
col
]
;
/* Get compound block and use it to calculate SAD. */
thissad
=
fn_ptr
->
sdaf
(
what
,
what_stride
,
check_here
,
in_what_stride
,
second_pred
,
bestsad
);
if
(
thissad
<
bestsad
)
{
this_mv
.
row
=
this_row_offset
;
this_mv
.
col
=
this_col_offset
;
thissad
+=
mvsad_err_cost
(
&
this_mv
,
&
fcenter_mv
,
mvjsadcost
,
mvsadcost
,
error_per_bit
);
if
(
thissad
<
bestsad
)
{
...
...
@@ -1977,8 +1966,7 @@ int vp9_refining_search_8p_c(MACROBLOCK *x,
}
else
{
ref_mv
->
row
+=
neighbors
[
best_site
].
row
;
ref_mv
->
col
+=
neighbors
[
best_site
].
col
;
best_address
+=
(
neighbors
[
best_site
].
row
)
*
in_what_stride
+
neighbors
[
best_site
].
col
;
best_address
=
&
in_what
[
ref_mv
->
row
*
in_what_stride
+
ref_mv
->
col
];
}
}
...
...
vp9/encoder/vp9_mcomp.h
View file @
55d02302
...
...
@@ -123,7 +123,7 @@ typedef int (*vp9_diamond_search_fn_t)(MACROBLOCK *x,
int
*
mvjcost
,
int
*
mvcost
[
2
],
const
MV
*
center_mv
);
int
vp9_refining_search_8p_c
(
MACROBLOCK
*
x
,
int
vp9_refining_search_8p_c
(
const
MACROBLOCK
*
x
,
MV
*
ref_mv
,
int
error_per_bit
,
int
search_range
,
vp9_variance_fn_ptr_t
*
fn_ptr
,
int
*
mvjcost
,
int
*
mvcost
[
2
],
...
...
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