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
Guillaume Martres
aom-rav1e
Commits
a1e20ec5
Commit
a1e20ec5
authored
Mar 20, 2015
by
Alex Converse
Browse files
Refactor fast loop filter code to handle 444.
Change-Id: I921b1ebabdf617049f8fa26fbe462c3ff115c1ce
parent
c77d4dcb
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
vp9/common/vp9_loopfilter.c
View file @
a1e20ec5
This diff is collapsed.
Click to expand it.
vp9/common/vp9_loopfilter.h
View file @
a1e20ec5
...
...
@@ -29,6 +29,12 @@ extern "C" {
#define MAX_REF_LF_DELTAS 4
#define MAX_MODE_LF_DELTAS 2
enum
lf_path
{
LF_PATH_420
,
LF_PATH_444
,
LF_PATH_SLOW
,
};
struct
loopfilter
{
int
filter_level
;
...
...
@@ -92,10 +98,15 @@ void vp9_setup_mask(struct VP9Common *const cm,
MODE_INFO
*
mi_8x8
,
const
int
mode_info_stride
,
LOOP_FILTER_MASK
*
lfm
);
void
vp9_filter_block_plane
(
struct
VP9Common
*
const
cm
,
struct
macroblockd_plane
*
const
plane
,
int
mi_row
,
LOOP_FILTER_MASK
*
lfm
);
void
vp9_filter_block_plane_ss00
(
struct
VP9Common
*
const
cm
,
struct
macroblockd_plane
*
const
plane
,
int
mi_row
,
LOOP_FILTER_MASK
*
lfm
);
void
vp9_filter_block_plane_ss11
(
struct
VP9Common
*
const
cm
,
struct
macroblockd_plane
*
const
plane
,
int
mi_row
,
LOOP_FILTER_MASK
*
lfm
);
void
vp9_filter_block_plane_non420
(
struct
VP9Common
*
cm
,
struct
macroblockd_plane
*
plane
,
...
...
vp9/common/vp9_thread_common.c
View file @
a1e20ec5
...
...
@@ -13,6 +13,7 @@
#include
"vp9/common/vp9_entropymode.h"
#include
"vp9/common/vp9_thread_common.h"
#include
"vp9/common/vp9_reconinter.h"
#include
"vp9/common/vp9_loopfilter.h"
#if CONFIG_MULTITHREAD
static
INLINE
void
mutex_lock
(
pthread_mutex_t
*
const
mutex
)
{
...
...
@@ -92,10 +93,17 @@ void thread_loop_filter_rows(const YV12_BUFFER_CONFIG *const frame_buffer,
int
start
,
int
stop
,
int
y_only
,
VP9LfSync
*
const
lf_sync
)
{
const
int
num_planes
=
y_only
?
1
:
MAX_MB_PLANE
;
const
int
use_420
=
y_only
||
(
planes
[
1
].
subsampling_y
==
1
&&
planes
[
1
].
subsampling_x
==
1
);
const
int
sb_cols
=
mi_cols_aligned_to_sb
(
cm
->
mi_cols
)
>>
MI_BLOCK_SIZE_LOG2
;
int
mi_row
,
mi_col
;
enum
lf_path
path
;
if
(
y_only
)
path
=
LF_PATH_444
;
else
if
(
planes
[
1
].
subsampling_y
==
1
&&
planes
[
1
].
subsampling_x
==
1
)
path
=
LF_PATH_420
;
else
if
(
planes
[
1
].
subsampling_y
==
0
&&
planes
[
1
].
subsampling_x
==
0
)
path
=
LF_PATH_444
;
else
path
=
LF_PATH_SLOW
;
for
(
mi_row
=
start
;
mi_row
<
stop
;
mi_row
+=
lf_sync
->
num_workers
*
MI_BLOCK_SIZE
)
{
...
...
@@ -112,16 +120,23 @@ void thread_loop_filter_rows(const YV12_BUFFER_CONFIG *const frame_buffer,
vp9_setup_dst_planes
(
planes
,
frame_buffer
,
mi_row
,
mi_col
);
// TODO(JBB): Make setup_mask work for non 420.
if
(
use_420
)
vp9_setup_mask
(
cm
,
mi_row
,
mi_col
,
mi
+
mi_col
,
cm
->
mi_stride
,
&
lfm
);
for
(
plane
=
0
;
plane
<
num_planes
;
++
plane
)
{
if
(
use_420
)
vp9_filter_block_plane
(
cm
,
&
planes
[
plane
],
mi_row
,
&
lfm
);
else
vp9_filter_block_plane_non420
(
cm
,
&
planes
[
plane
],
mi
+
mi_col
,
mi_row
,
mi_col
);
vp9_setup_mask
(
cm
,
mi_row
,
mi_col
,
mi
+
mi_col
,
cm
->
mi_stride
,
&
lfm
);
vp9_filter_block_plane_ss00
(
cm
,
&
planes
[
0
],
mi_row
,
&
lfm
);
for
(
plane
=
1
;
plane
<
num_planes
;
++
plane
)
{
switch
(
path
)
{
case
LF_PATH_420
:
vp9_filter_block_plane_ss11
(
cm
,
&
planes
[
plane
],
mi_row
,
&
lfm
);
break
;
case
LF_PATH_444
:
vp9_filter_block_plane_ss00
(
cm
,
&
planes
[
plane
],
mi_row
,
&
lfm
);
break
;
case
LF_PATH_SLOW
:
vp9_filter_block_plane_non420
(
cm
,
&
planes
[
plane
],
mi
+
mi_col
,
mi_row
,
mi_col
);
break
;
}
}
sync_write
(
lf_sync
,
r
,
c
,
sb_cols
);
...
...
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