Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Xiph.Org
aom-rav1e
Commits
c37a1e5e
Commit
c37a1e5e
authored
Jun 10, 2013
by
John Koleszar
Committed by
Gerrit Code Review
Jun 10, 2013
Browse files
Options
Browse Files
Download
Plain Diff
Merge "Loopfilter: Fix chroma edge selection" into experimental
parents
2f3cbfdd
48b7cbca
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
24 additions
and
19 deletions
+24
-19
vp9/common/vp9_loopfilter.c
vp9/common/vp9_loopfilter.c
+24
-19
No files found.
vp9/common/vp9_loopfilter.c
View file @
c37a1e5e
...
...
@@ -568,7 +568,7 @@ static void filter_selectively_vert(uint8_t *s, int pitch,
unsigned
int
mask_16x16
,
unsigned
int
mask_8x8
,
unsigned
int
mask_4x4
,
unsigned
int
mask_4x4_
1
,
unsigned
int
mask_4x4_
int
,
const
struct
loop_filter_info
*
lfi
)
{
unsigned
int
mask
;
...
...
@@ -579,7 +579,7 @@ static void filter_selectively_vert(uint8_t *s, int pitch,
lfi
->
hev_thr
,
1
);
assert
(
!
(
mask_8x8
&
1
));
assert
(
!
(
mask_4x4
&
1
));
assert
(
!
(
mask_4x4_
1
&
1
));
assert
(
!
(
mask_4x4_
int
&
1
));
}
else
if
(
mask_8x8
&
1
)
{
vp9_mbloop_filter_vertical_edge
(
s
,
pitch
,
lfi
->
mblim
,
lfi
->
lim
,
lfi
->
hev_thr
,
1
);
...
...
@@ -594,7 +594,7 @@ static void filter_selectively_vert(uint8_t *s, int pitch,
assert
(
0
);
}
if
(
mask_4x4_
1
&
1
)
if
(
mask_4x4_
int
&
1
)
vp9_loop_filter_vertical_edge
(
s
+
4
,
pitch
,
lfi
->
mblim
,
lfi
->
lim
,
lfi
->
hev_thr
,
1
);
}
...
...
@@ -603,7 +603,7 @@ static void filter_selectively_vert(uint8_t *s, int pitch,
mask_16x16
>>=
1
;
mask_8x8
>>=
1
;
mask_4x4
>>=
1
;
mask_4x4_
1
>>=
1
;
mask_4x4_
int
>>=
1
;
}
}
...
...
@@ -611,7 +611,7 @@ static void filter_selectively_horiz(uint8_t *s, int pitch,
unsigned
int
mask_16x16
,
unsigned
int
mask_8x8
,
unsigned
int
mask_4x4
,
unsigned
int
mask_4x4_
1
,
unsigned
int
mask_4x4_
int
,
int
only_4x4_1
,
const
struct
loop_filter_info
*
lfi
)
{
unsigned
int
mask
;
...
...
@@ -624,7 +624,7 @@ static void filter_selectively_horiz(uint8_t *s, int pitch,
lfi
->
hev_thr
,
1
);
assert
(
!
(
mask_8x8
&
1
));
assert
(
!
(
mask_4x4
&
1
));
assert
(
!
(
mask_4x4_
1
&
1
));
assert
(
!
(
mask_4x4_
int
&
1
));
}
else
if
(
mask_8x8
&
1
)
{
vp9_mbloop_filter_horizontal_edge
(
s
,
pitch
,
lfi
->
mblim
,
lfi
->
lim
,
lfi
->
hev_thr
,
1
);
...
...
@@ -640,7 +640,7 @@ static void filter_selectively_horiz(uint8_t *s, int pitch,
}
}
if
(
mask_4x4_
1
&
1
)
if
(
mask_4x4_
int
&
1
)
vp9_loop_filter_horizontal_edge
(
s
+
4
*
pitch
,
pitch
,
lfi
->
mblim
,
lfi
->
lim
,
lfi
->
hev_thr
,
1
);
}
...
...
@@ -649,13 +649,14 @@ static void filter_selectively_horiz(uint8_t *s, int pitch,
mask_16x16
>>=
1
;
mask_8x8
>>=
1
;
mask_4x4
>>=
1
;
mask_4x4_
1
>>=
1
;
mask_4x4_
int
>>=
1
;
}
}
static
void
filter_block_plane
(
VP9_COMMON
*
cm
,
MACROBLOCKD
*
xd
,
int
plane
,
int
mi_row
,
int
mi_col
)
{
const
int
ss_x
=
xd
->
plane
[
plane
].
subsampling_x
;
const
int
ss_y
=
xd
->
plane
[
plane
].
subsampling_y
;
const
int
row_step
=
1
<<
xd
->
plane
[
plane
].
subsampling_y
;
const
int
col_step
=
1
<<
xd
->
plane
[
plane
].
subsampling_x
;
struct
buf_2d
*
const
dst
=
&
xd
->
plane
[
plane
].
dst
;
...
...
@@ -664,7 +665,7 @@ static void filter_block_plane(VP9_COMMON *cm, MACROBLOCKD *xd,
unsigned
int
mask_16x16
[
64
/
MI_SIZE
]
=
{
0
};
unsigned
int
mask_8x8
[
64
/
MI_SIZE
]
=
{
0
};
unsigned
int
mask_4x4
[
64
/
MI_SIZE
]
=
{
0
};
unsigned
int
mask_4x4_
1
[
64
/
MI_SIZE
]
=
{
0
};
unsigned
int
mask_4x4_
int
[
64
/
MI_SIZE
]
=
{
0
};
struct
loop_filter_info
lfi
[
64
/
MI_SIZE
][
64
/
MI_SIZE
];
int
r
,
c
;
...
...
@@ -689,6 +690,7 @@ static void filter_block_plane(VP9_COMMON *cm, MACROBLOCKD *xd,
const
int
skip_this_r
=
skip_this
&&
!
block_edge_above
;
const
TX_SIZE
tx_size
=
plane
?
get_uv_tx_size
(
&
mi
[
c
].
mbmi
)
:
mi
[
c
].
mbmi
.
txfm_size
;
const
int
skip_border_4x4_c
=
ss_x
&&
mi_col
+
c
==
cm
->
mi_cols
-
1
;
// Filter level can vary per MI
if
(
!
build_lfi
(
cm
,
&
mi
[
c
].
mbmi
,
...
...
@@ -697,33 +699,33 @@ static void filter_block_plane(VP9_COMMON *cm, MACROBLOCKD *xd,
// Build masks based on the transform size of each block
if
(
tx_size
==
TX_32X32
)
{
if
(
!
skip_this_c
&&
(
c
&
3
)
==
0
)
if
(
!
skip_this_c
&&
(
(
c
>>
ss_x
)
&
3
)
==
0
)
mask_16x16_c
|=
1
<<
(
c
>>
ss_x
);
if
(
!
skip_this_r
&&
(
r
&
3
)
==
0
)
if
(
!
skip_this_r
&&
(
(
r
>>
ss_y
)
&
3
)
==
0
)
mask_16x16
[
r
]
|=
1
<<
(
c
>>
ss_x
);
}
else
if
(
tx_size
==
TX_16X16
)
{
if
(
!
skip_this_c
&&
(
c
&
1
)
==
0
)
if
(
!
skip_this_c
&&
(
(
c
>>
ss_x
)
&
1
)
==
0
)
mask_16x16_c
|=
1
<<
(
c
>>
ss_x
);
if
(
!
skip_this_r
&&
(
r
&
1
)
==
0
)
if
(
!
skip_this_r
&&
(
(
r
>>
ss_y
)
&
1
)
==
0
)
mask_16x16
[
r
]
|=
1
<<
(
c
>>
ss_x
);
}
else
{
// force 8x8 filtering on 32x32 boundaries
if
(
!
skip_this_c
)
{
if
(
tx_size
==
TX_8X8
||
(
c
&
3
)
==
0
)
if
(
tx_size
==
TX_8X8
||
(
(
c
>>
ss_x
)
&
3
)
==
0
)
mask_8x8_c
|=
1
<<
(
c
>>
ss_x
);
else
mask_4x4_c
|=
1
<<
(
c
>>
ss_x
);
}
if
(
!
skip_this_r
)
{
if
(
tx_size
==
TX_8X8
||
(
r
&
3
)
==
0
)
if
(
tx_size
==
TX_8X8
||
(
(
r
>>
ss_y
)
&
3
)
==
0
)
mask_8x8
[
r
]
|=
1
<<
(
c
>>
ss_x
);
else
mask_4x4
[
r
]
|=
1
<<
(
c
>>
ss_x
);
}
if
(
!
skip_this
&&
tx_size
<
TX_8X8
)
mask_4x4_
1
[
r
]
|=
1
<<
(
c
>>
ss_x
);
if
(
!
skip_this
&&
tx_size
<
TX_8X8
&&
!
skip_border_4x4_c
)
mask_4x4_
int
[
r
]
|=
1
<<
(
c
>>
ss_x
);
}
}
...
...
@@ -733,7 +735,7 @@ static void filter_block_plane(VP9_COMMON *cm, MACROBLOCKD *xd,
mask_16x16_c
&
border_mask
,
mask_8x8_c
&
border_mask
,
mask_4x4_c
&
border_mask
,
mask_4x4_
1
[
r
],
lfi
[
r
]);
mask_4x4_
int
[
r
],
lfi
[
r
]);
dst
->
buf
+=
8
*
dst
->
stride
;
xd
->
mode_info_context
+=
cm
->
mode_info_stride
*
row_step
;
}
...
...
@@ -742,11 +744,14 @@ static void filter_block_plane(VP9_COMMON *cm, MACROBLOCKD *xd,
dst
->
buf
=
dst0
;
xd
->
mode_info_context
=
mi0
;
for
(
r
=
0
;
r
<
64
/
MI_SIZE
&&
mi_row
+
r
<
cm
->
mi_rows
;
r
+=
row_step
)
{
const
int
skip_border_4x4_r
=
ss_y
&&
mi_row
+
r
==
cm
->
mi_rows
-
1
;
const
unsigned
int
mask_4x4_int_r
=
skip_border_4x4_r
?
0
:
mask_4x4_int
[
r
];
filter_selectively_horiz
(
dst
->
buf
,
dst
->
stride
,
mask_16x16
[
r
],
mask_8x8
[
r
],
mask_4x4
[
r
],
mask_4x4_
1
[
r
]
,
mi_row
+
r
==
0
,
lfi
[
r
]);
mask_4x4_
int_r
,
mi_row
+
r
==
0
,
lfi
[
r
]);
dst
->
buf
+=
8
*
dst
->
stride
;
xd
->
mode_info_context
+=
cm
->
mode_info_stride
*
row_step
;
}
...
...
Write
Preview
Markdown
is supported
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