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
aa2f1c7a
Commit
aa2f1c7a
authored
Jun 19, 2017
by
Joe Young
Browse files
[intra-edge] Cosmetic changes
Change-Id: Ib28bd27d0c2b2e1eb89ef3168b4293f8aa1712bc
parent
14fc5045
Changes
1
Hide whitespace changes
Inline
Side-by-side
av1/common/reconintra.c
View file @
aa2f1c7a
...
...
@@ -41,8 +41,8 @@ enum {
#define INTRA_EDGE_TAPS 5
#if CONFIG_INTRA_EDGE_UPSAMPLE
#define MAX_UPSAMPLE_SZ 12
#endif
#endif
#endif
// CONFIG_INTRA_EDGE_UPSAMPLE
#endif
// CONFIG_INTRA_EDGE
static
const
uint8_t
extend_modes
[
INTRA_MODES
]
=
{
NEED_ABOVE
|
NEED_LEFT
,
// DC
...
...
@@ -705,7 +705,7 @@ static void dr_prediction_z1(uint8_t *dst, ptrdiff_t stride, int bw, int bh,
#endif // CONFIG_INTRA_INTERP
#if CONFIG_INTRA_EDGE_UPSAMPLE
int
upsample_above
,
#endif
#endif
// CONFIG_INTRA_EDGE_UPSAMPLE
int
dx
,
int
dy
)
{
int
r
,
c
,
x
,
base
,
shift
,
val
;
...
...
@@ -777,7 +777,7 @@ static void dr_prediction_z1(uint8_t *dst, ptrdiff_t stride, int bw, int bh,
#if !CONFIG_INTRA_EDGE_UPSAMPLE
const
int
upsample_above
=
0
;
#endif
#endif
// !CONFIG_INTRA_EDGE_UPSAMPLE
const
int
max_base_x
=
((
bw
+
bh
)
-
1
)
<<
upsample_above
;
const
int
frac_bits
=
8
-
upsample_above
;
const
int
base_inc
=
1
<<
upsample_above
;
...
...
@@ -814,7 +814,7 @@ static void dr_prediction_z2(uint8_t *dst, ptrdiff_t stride, int bw, int bh,
#endif // CONFIG_INTRA_INTERP
#if CONFIG_INTRA_EDGE_UPSAMPLE
int
upsample_above
,
int
upsample_left
,
#endif
#endif
// CONFIG_INTRA_EDGE_UPSAMPLE
int
dx
,
int
dy
)
{
int
r
,
c
,
x
,
y
,
shift1
,
shift2
,
val
,
base1
,
base2
;
...
...
@@ -824,7 +824,7 @@ static void dr_prediction_z2(uint8_t *dst, ptrdiff_t stride, int bw, int bh,
#if !CONFIG_INTRA_EDGE_UPSAMPLE
const
int
upsample_above
=
0
;
const
int
upsample_left
=
0
;
#endif
#endif
// !CONFIG_INTRA_EDGE_UPSAMPLE
const
int
min_base_x
=
-
(
1
<<
upsample_above
);
const
int
frac_bits_x
=
8
-
upsample_above
;
const
int
frac_bits_y
=
8
-
upsample_left
;
...
...
@@ -867,7 +867,7 @@ static void dr_prediction_z3(uint8_t *dst, ptrdiff_t stride, int bw, int bh,
#endif // CONFIG_INTRA_INTERP
#if CONFIG_INTRA_EDGE_UPSAMPLE
int
upsample_left
,
#endif
#endif
// CONFIG_INTRA_EDGE_UPSAMPLE
int
dx
,
int
dy
)
{
int
r
,
c
,
y
,
base
,
shift
,
val
;
...
...
@@ -950,7 +950,7 @@ static void dr_prediction_z3(uint8_t *dst, ptrdiff_t stride, int bw, int bh,
#if !CONFIG_INTRA_EDGE_UPSAMPLE
const
int
upsample_left
=
0
;
#endif
#endif
// !CONFIG_INTRA_EDGE_UPSAMPLE
const
int
max_base_y
=
(
bw
+
bh
-
1
)
<<
upsample_left
;
const
int
frac_bits
=
8
-
upsample_left
;
const
int
base_inc
=
1
<<
upsample_left
;
...
...
@@ -1009,7 +1009,7 @@ static void dr_predictor(uint8_t *dst, ptrdiff_t stride, TX_SIZE tx_size,
#endif // CONFIG_INTRA_INTERP
#if CONFIG_INTRA_EDGE_UPSAMPLE
int
upsample_above
,
int
upsample_left
,
#endif
#endif
// CONFIG_INTRA_EDGE_UPSAMPLE
int
angle
)
{
const
int
dx
=
get_dx
(
angle
);
const
int
dy
=
get_dy
(
angle
);
...
...
@@ -1024,7 +1024,7 @@ static void dr_predictor(uint8_t *dst, ptrdiff_t stride, TX_SIZE tx_size,
#endif // CONFIG_INTRA_INTERP
#if CONFIG_INTRA_EDGE_UPSAMPLE
upsample_above
,
#endif
#endif
// CONFIG_INTRA_EDGE_UPSAMPLE
dx
,
dy
);
}
else
if
(
angle
>
90
&&
angle
<
180
)
{
dr_prediction_z2
(
dst
,
stride
,
bw
,
bh
,
above
,
left
,
...
...
@@ -1033,7 +1033,7 @@ static void dr_predictor(uint8_t *dst, ptrdiff_t stride, TX_SIZE tx_size,
#endif // CONFIG_INTRA_INTERP
#if CONFIG_INTRA_EDGE_UPSAMPLE
upsample_above
,
upsample_left
,
#endif
#endif
// CONFIG_INTRA_EDGE_UPSAMPLE
dx
,
dy
);
}
else
if
(
angle
>
180
&&
angle
<
270
)
{
dr_prediction_z3
(
dst
,
stride
,
bw
,
bh
,
above
,
left
,
...
...
@@ -1042,7 +1042,7 @@ static void dr_predictor(uint8_t *dst, ptrdiff_t stride, TX_SIZE tx_size,
#endif // CONFIG_INTRA_INTERP
#if CONFIG_INTRA_EDGE_UPSAMPLE
upsample_left
,
#endif
#endif
// CONFIG_INTRA_EDGE_UPSAMPLE
dx
,
dy
);
}
else
if
(
angle
==
90
)
{
pred
[
V_PRED
][
tx_size
](
dst
,
stride
,
above
,
left
);
...
...
@@ -1092,7 +1092,7 @@ static void highbd_dr_prediction_z1(uint16_t *dst, ptrdiff_t stride, int bw,
#endif // CONFIG_INTRA_INTERP
#if CONFIG_INTRA_EDGE_UPSAMPLE
int
upsample_above
,
#endif
#endif
// CONFIG_INTRA_EDGE_UPSAMPLE
int
dx
,
int
dy
,
int
bd
)
{
int
r
,
c
,
x
,
base
,
shift
,
val
;
...
...
@@ -1103,7 +1103,7 @@ static void highbd_dr_prediction_z1(uint16_t *dst, ptrdiff_t stride, int bw,
#if !CONFIG_INTRA_EDGE_UPSAMPLE
const
int
upsample_above
=
0
;
#endif
#endif
// !CONFIG_INTRA_EDGE_UPSAMPLE
const
int
max_base_x
=
((
bw
+
bh
)
-
1
)
<<
upsample_above
;
const
int
frac_bits
=
8
-
upsample_above
;
const
int
base_inc
=
1
<<
upsample_above
;
...
...
@@ -1146,7 +1146,7 @@ static void highbd_dr_prediction_z2(uint16_t *dst, ptrdiff_t stride, int bw,
#endif // CONFIG_INTRA_INTERP
#if CONFIG_INTRA_EDGE_UPSAMPLE
int
upsample_above
,
int
upsample_left
,
#endif
#endif
// CONFIG_INTRA_EDGE_UPSAMPLE
int
dx
,
int
dy
,
int
bd
)
{
int
r
,
c
,
x
,
y
,
shift
,
val
,
base
;
...
...
@@ -1156,7 +1156,7 @@ static void highbd_dr_prediction_z2(uint16_t *dst, ptrdiff_t stride, int bw,
#if !CONFIG_INTRA_EDGE_UPSAMPLE
const
int
upsample_above
=
0
;
const
int
upsample_left
=
0
;
#endif
#endif
// !CONFIG_INTRA_EDGE_UPSAMPLE
const
int
min_base_x
=
-
(
1
<<
upsample_above
);
const
int
frac_bits_x
=
8
-
upsample_above
;
const
int
frac_bits_y
=
8
-
upsample_left
;
...
...
@@ -1202,7 +1202,7 @@ static void highbd_dr_prediction_z3(uint16_t *dst, ptrdiff_t stride, int bw,
#endif // CONFIG_INTRA_INTERP
#if CONFIG_INTRA_EDGE_UPSAMPLE
int
upsample_left
,
#endif
#endif
// CONFIG_INTRA_EDGE_UPSAMPLE
int
dx
,
int
dy
,
int
bd
)
{
int
r
,
c
,
y
,
base
,
shift
,
val
;
...
...
@@ -1213,7 +1213,7 @@ static void highbd_dr_prediction_z3(uint16_t *dst, ptrdiff_t stride, int bw,
#if !CONFIG_INTRA_EDGE_UPSAMPLE
const
int
upsample_left
=
0
;
#endif
#endif
// !CONFIG_INTRA_EDGE_UPSAMPLE
const
int
max_base_y
=
(
bw
+
bh
-
1
)
<<
upsample_left
;
const
int
frac_bits
=
8
-
upsample_left
;
const
int
base_inc
=
1
<<
upsample_left
;
...
...
@@ -1248,7 +1248,7 @@ static void highbd_dr_predictor(uint16_t *dst, ptrdiff_t stride,
#endif // CONFIG_INTRA_INTERP
#if CONFIG_INTRA_EDGE_UPSAMPLE
int
upsample_above
,
int
upsample_left
,
#endif
#endif
// CONFIG_INTRA_EDGE_UPSAMPLE
int
angle
,
int
bd
)
{
const
int
dx
=
get_dx
(
angle
);
const
int
dy
=
get_dy
(
angle
);
...
...
@@ -1263,7 +1263,7 @@ static void highbd_dr_predictor(uint16_t *dst, ptrdiff_t stride,
#endif // CONFIG_INTRA_INTERP
#if CONFIG_INTRA_EDGE_UPSAMPLE
upsample_above
,
#endif
#endif
// CONFIG_INTRA_EDGE_UPSAMPLE
dx
,
dy
,
bd
);
}
else
if
(
angle
>
90
&&
angle
<
180
)
{
highbd_dr_prediction_z2
(
dst
,
stride
,
bw
,
bh
,
above
,
left
,
...
...
@@ -1272,7 +1272,7 @@ static void highbd_dr_predictor(uint16_t *dst, ptrdiff_t stride,
#endif // CONFIG_INTRA_INTERP
#if CONFIG_INTRA_EDGE_UPSAMPLE
upsample_above
,
upsample_left
,
#endif
#endif
// CONFIG_INTRA_EDGE_UPSAMPLE
dx
,
dy
,
bd
);
}
else
if
(
angle
>
180
&&
angle
<
270
)
{
highbd_dr_prediction_z3
(
dst
,
stride
,
bw
,
bh
,
above
,
left
,
...
...
@@ -1281,7 +1281,7 @@ static void highbd_dr_predictor(uint16_t *dst, ptrdiff_t stride,
#endif // CONFIG_INTRA_INTERP
#if CONFIG_INTRA_EDGE_UPSAMPLE
upsample_left
,
#endif
#endif
// CONFIG_INTRA_EDGE_UPSAMPLE
dx
,
dy
,
bd
);
}
else
if
(
angle
==
90
)
{
pred_high
[
V_PRED
][
tx_size
](
dst
,
stride
,
above
,
left
,
bd
);
...
...
@@ -1938,34 +1938,40 @@ static int intra_edge_filter_strength(int bsz, int delta) {
const
int
d
=
abs
(
delta
);
int
strength
=
0
;
if
(
bsz
==
4
)
{
if
(
d
<
56
)
{
strength
=
0
;
}
else
if
(
d
<
90
)
{
strength
=
1
;
}
}
else
if
(
bsz
==
8
)
{
if
(
d
<
8
)
{
strength
=
0
;
}
else
if
(
d
<
32
)
{
strength
=
1
;
}
else
if
(
d
<
90
)
{
strength
=
3
;
}
}
else
if
(
bsz
==
16
)
{
if
(
d
<
4
)
{
strength
=
0
;
}
else
if
(
d
<
16
)
{
strength
=
1
;
}
else
if
(
d
<
90
)
{
strength
=
3
;
}
}
else
if
(
bsz
==
32
)
{
if
(
d
<
16
)
{
strength
=
2
;
}
else
if
(
d
<
90
)
{
strength
=
3
;
}
switch
(
bsz
)
{
case
4
:
if
(
d
<
56
)
{
strength
=
0
;
}
else
if
(
d
<
90
)
{
strength
=
1
;
}
break
;
case
8
:
if
(
d
<
8
)
{
strength
=
0
;
}
else
if
(
d
<
32
)
{
strength
=
1
;
}
else
if
(
d
<
90
)
{
strength
=
3
;
}
break
;
case
16
:
if
(
d
<
4
)
{
strength
=
0
;
}
else
if
(
d
<
16
)
{
strength
=
1
;
}
else
if
(
d
<
90
)
{
strength
=
3
;
}
break
;
case
32
:
if
(
d
<
16
)
{
strength
=
2
;
}
else
if
(
d
<
90
)
{
strength
=
3
;
}
break
;
default:
strength
=
0
;
break
;
}
return
strength
;
...
...
@@ -2022,7 +2028,7 @@ static void filter_intra_edge_high(uint16_t *p, int sz, int strength) {
#if CONFIG_INTRA_EDGE_UPSAMPLE
static
int
use_intra_edge_upsample
(
int
bsz
,
int
delta
)
{
const
int
d
=
abs
(
delta
);
return
(
bsz
==
4
&&
d
<
56
);
return
(
bsz
==
4
&&
d
>
0
&&
d
<
56
);
}
static
void
upsample_intra_edge
(
uint8_t
*
p
,
int
sz
)
{
...
...
@@ -2152,7 +2158,7 @@ static void build_intra_predictors_high(
}
#else
const
int
val
=
need_left
?
base
+
1
:
base
-
1
;
#endif
#endif
// CONFIG_INTRA_EDGE
for
(
i
=
0
;
i
<
txhpx
;
++
i
)
{
aom_memset16
(
dst
,
val
,
txwpx
);
dst
+=
dst_stride
;
...
...
@@ -2190,11 +2196,11 @@ static void build_intra_predictors_high(
if
(
n_top_px
>
0
)
{
aom_memset16
(
left_col
,
above_ref
[
0
],
num_left_pixels_needed
);
}
else
{
#endif
#endif
// CONFIG_INTRA_EDGE
aom_memset16
(
left_col
,
base
+
1
,
num_left_pixels_needed
);
#if CONFIG_INTRA_EDGE
}
#endif
#endif
// CONFIG_INTRA_EDGE
}
}
...
...
@@ -2230,11 +2236,11 @@ static void build_intra_predictors_high(
if
(
n_left_px
>
0
)
{
aom_memset16
(
above_row
,
ref
[
-
1
],
num_top_pixels_needed
);
}
else
{
#endif
#endif
// CONFIG_INTRA_EDGE
aom_memset16
(
above_row
,
base
-
1
,
num_top_pixels_needed
);
#if CONFIG_INTRA_EDGE
}
#endif
#endif
// CONFIG_INTRA_EDGE
}
}
...
...
@@ -2252,42 +2258,10 @@ static void build_intra_predictors_high(
#else
above_row
[
-
1
]
=
n_top_px
>
0
?
(
n_left_px
>
0
?
above_ref
[
-
1
]
:
base
+
1
)
:
base
-
1
;
#endif
#endif
// CONFIG_INTRA_EDGE
left_col
[
-
1
]
=
above_row
[
-
1
];
}
#if CONFIG_EXT_INTRA && CONFIG_INTRA_EDGE
#if CONFIG_INTRA_EDGE_UPSAMPLE
const
int
upsample_above
=
use_intra_edge_upsample
(
txwpx
,
p_angle
-
90
);
const
int
upsample_left
=
use_intra_edge_upsample
(
txhpx
,
p_angle
-
180
);
#endif
const
int
need_right
=
p_angle
<
90
;
const
int
need_bottom
=
p_angle
>
180
;
if
(
is_dr_mode
&&
p_angle
!=
90
&&
p_angle
!=
180
)
{
const
int
ab_le
=
need_above_left
?
1
:
0
;
if
(
need_above
&&
n_top_px
>
0
)
{
const
int
strength
=
intra_edge_filter_strength
(
txwpx
,
p_angle
-
90
);
const
int
n_px
=
n_top_px
+
ab_le
+
(
need_right
?
n_topright_px
:
0
);
filter_intra_edge_high
(
above_row
-
ab_le
,
n_px
,
strength
);
}
if
(
need_left
&&
n_left_px
>
0
)
{
const
int
strength
=
intra_edge_filter_strength
(
txhpx
,
p_angle
-
180
);
const
int
n_px
=
n_left_px
+
ab_le
+
(
need_bottom
?
n_bottomleft_px
:
0
);
filter_intra_edge_high
(
left_col
-
ab_le
,
n_px
,
strength
);
}
#if CONFIG_INTRA_EDGE_UPSAMPLE
if
(
upsample_above
)
{
const
int
n_px
=
txwpx
+
(
need_right
?
txhpx
:
0
);
upsample_intra_edge_high
(
above_row
,
n_px
,
xd
->
bd
);
}
if
(
upsample_left
)
{
const
int
n_px
=
txhpx
+
(
need_bottom
?
txwpx
:
0
);
upsample_intra_edge_high
(
left_col
,
n_px
,
xd
->
bd
);
}
#endif
}
#endif
#if CONFIG_FILTER_INTRA
if
(
filter_intra_mode_info
->
use_filter_intra_mode
[
plane
!=
0
])
{
// TODO(huisu): Make these work with rectangular blocks.
...
...
@@ -2304,13 +2278,43 @@ static void build_intra_predictors_high(
if
(
plane
==
0
&&
av1_is_intra_filter_switchable
(
p_angle
))
filter
=
xd
->
mi
[
0
]
->
mbmi
.
intra_filter
;
#endif // CONFIG_INTRA_INTERP
#if CONFIG_INTRA_EDGE
const
int
need_right
=
p_angle
<
90
;
const
int
need_bottom
=
p_angle
>
180
;
if
(
p_angle
!=
90
&&
p_angle
!=
180
)
{
const
int
ab_le
=
need_above_left
?
1
:
0
;
if
(
need_above
&&
n_top_px
>
0
)
{
const
int
strength
=
intra_edge_filter_strength
(
txwpx
,
p_angle
-
90
);
const
int
n_px
=
n_top_px
+
ab_le
+
(
need_right
?
n_topright_px
:
0
);
filter_intra_edge_high
(
above_row
-
ab_le
,
n_px
,
strength
);
}
if
(
need_left
&&
n_left_px
>
0
)
{
const
int
strength
=
intra_edge_filter_strength
(
txhpx
,
p_angle
-
180
);
const
int
n_px
=
n_left_px
+
ab_le
+
(
need_bottom
?
n_bottomleft_px
:
0
);
filter_intra_edge_high
(
left_col
-
ab_le
,
n_px
,
strength
);
}
}
#if CONFIG_INTRA_EDGE_UPSAMPLE
const
int
upsample_above
=
use_intra_edge_upsample
(
txwpx
,
p_angle
-
90
);
if
(
upsample_above
)
{
const
int
n_px
=
txwpx
+
(
need_right
?
txhpx
:
0
);
upsample_intra_edge_high
(
above_row
,
n_px
,
xd
->
bd
);
}
const
int
upsample_left
=
use_intra_edge_upsample
(
txhpx
,
p_angle
-
180
);
if
(
upsample_left
)
{
const
int
n_px
=
txhpx
+
(
need_bottom
?
txwpx
:
0
);
upsample_intra_edge_high
(
left_col
,
n_px
,
xd
->
bd
);
}
#endif // CONFIG_INTRA_EDGE_UPSAMPLE
#endif // CONFIG_INTRA_EDGE
highbd_dr_predictor
(
dst
,
dst_stride
,
tx_size
,
above_row
,
left_col
,
#if CONFIG_INTRA_INTERP
filter
,
#endif // CONFIG_INTRA_INTERP
#if CONFIG_INTRA_EDGE_UPSAMPLE
upsample_above
,
upsample_left
,
#endif
#endif
// CONFIG_INTRA_EDGE_UPSAMPLE
p_angle
,
xd
->
bd
);
return
;
}
...
...
@@ -2402,7 +2406,7 @@ static void build_intra_predictors(const MACROBLOCKD *xd, const uint8_t *ref,
}
#else
const
int
val
=
need_left
?
129
:
127
;
#endif
#endif
// CONFIG_INTRA_EDGE
for
(
i
=
0
;
i
<
txhpx
;
++
i
)
{
memset
(
dst
,
val
,
txwpx
);
dst
+=
dst_stride
;
...
...
@@ -2440,11 +2444,11 @@ static void build_intra_predictors(const MACROBLOCKD *xd, const uint8_t *ref,
if
(
n_top_px
>
0
)
{
memset
(
left_col
,
above_ref
[
0
],
num_left_pixels_needed
);
}
else
{
#endif
#endif
// CONFIG_INTRA_EDGE
memset
(
left_col
,
129
,
num_left_pixels_needed
);
#if CONFIG_INTRA_EDGE
}
#endif
#endif
// CONFIG_INTRA_EDGE
}
}
...
...
@@ -2478,11 +2482,11 @@ static void build_intra_predictors(const MACROBLOCKD *xd, const uint8_t *ref,
if
(
n_left_px
>
0
)
{
memset
(
above_row
,
ref
[
-
1
],
num_top_pixels_needed
);
}
else
{
#endif
#endif
// CONFIG_INTRA_EDGE
memset
(
above_row
,
127
,
num_top_pixels_needed
);
#if CONFIG_INTRA_EDGE
}
#endif
#endif
// CONFIG_INTRA_EDGE
}
}
...
...
@@ -2499,42 +2503,10 @@ static void build_intra_predictors(const MACROBLOCKD *xd, const uint8_t *ref,
}
#else
above_row
[
-
1
]
=
n_top_px
>
0
?
(
n_left_px
>
0
?
above_ref
[
-
1
]
:
129
)
:
127
;
#endif
#endif
// CONFIG_INTRA_EDGE
left_col
[
-
1
]
=
above_row
[
-
1
];
}
#if CONFIG_EXT_INTRA && CONFIG_INTRA_EDGE
#if CONFIG_INTRA_EDGE_UPSAMPLE
const
int
upsample_above
=
use_intra_edge_upsample
(
txwpx
,
p_angle
-
90
);
const
int
upsample_left
=
use_intra_edge_upsample
(
txhpx
,
p_angle
-
180
);
#endif
const
int
need_right
=
p_angle
<
90
;
const
int
need_bottom
=
p_angle
>
180
;
if
(
is_dr_mode
&&
p_angle
!=
90
&&
p_angle
!=
180
)
{
const
int
ab_le
=
need_above_left
?
1
:
0
;
if
(
need_above
&&
n_top_px
>
0
)
{
const
int
strength
=
intra_edge_filter_strength
(
txwpx
,
p_angle
-
90
);
const
int
n_px
=
n_top_px
+
ab_le
+
(
need_right
?
n_topright_px
:
0
);
filter_intra_edge
(
above_row
-
ab_le
,
n_px
,
strength
);
}
if
(
need_left
&&
n_left_px
>
0
)
{
const
int
strength
=
intra_edge_filter_strength
(
txhpx
,
p_angle
-
180
);
const
int
n_px
=
n_left_px
+
ab_le
+
(
need_bottom
?
n_bottomleft_px
:
0
);
filter_intra_edge
(
left_col
-
ab_le
,
n_px
,
strength
);
}
#if CONFIG_INTRA_EDGE_UPSAMPLE
if
(
upsample_above
)
{
const
int
n_px
=
txwpx
+
(
need_right
?
txhpx
:
0
);
upsample_intra_edge
(
above_row
,
n_px
);
}
if
(
upsample_left
)
{
const
int
n_px
=
txhpx
+
(
need_bottom
?
txwpx
:
0
);
upsample_intra_edge
(
left_col
,
n_px
);
}
#endif
}
#endif
#if CONFIG_FILTER_INTRA
if
(
filter_intra_mode_info
->
use_filter_intra_mode
[
plane
!=
0
])
{
// TODO(huisu): Make these work with rectangular blocks.
...
...
@@ -2543,6 +2515,7 @@ static void build_intra_predictors(const MACROBLOCKD *xd, const uint8_t *ref,
return
;
}
#endif // CONFIG_FILTER_INTRA
#if CONFIG_EXT_INTRA
if
(
is_dr_mode
)
{
#if CONFIG_INTRA_INTERP
...
...
@@ -2550,13 +2523,43 @@ static void build_intra_predictors(const MACROBLOCKD *xd, const uint8_t *ref,
if
(
plane
==
0
&&
av1_is_intra_filter_switchable
(
p_angle
))
filter
=
xd
->
mi
[
0
]
->
mbmi
.
intra_filter
;
#endif // CONFIG_INTRA_INTERP
#if CONFIG_INTRA_EDGE
const
int
need_right
=
p_angle
<
90
;
const
int
need_bottom
=
p_angle
>
180
;
if
(
p_angle
!=
90
&&
p_angle
!=
180
)
{
const
int
ab_le
=
need_above_left
?
1
:
0
;
if
(
need_above
&&
n_top_px
>
0
)
{
const
int
strength
=
intra_edge_filter_strength
(
txwpx
,
p_angle
-
90
);
const
int
n_px
=
n_top_px
+
ab_le
+
(
need_right
?
n_topright_px
:
0
);
filter_intra_edge
(
above_row
-
ab_le
,
n_px
,
strength
);
}
if
(
need_left
&&
n_left_px
>
0
)
{
const
int
strength
=
intra_edge_filter_strength
(
txhpx
,
p_angle
-
180
);
const
int
n_px
=
n_left_px
+
ab_le
+
(
need_bottom
?
n_bottomleft_px
:
0
);
filter_intra_edge
(
left_col
-
ab_le
,
n_px
,
strength
);
}
}
#if CONFIG_INTRA_EDGE_UPSAMPLE
const
int
upsample_above
=
use_intra_edge_upsample
(
txwpx
,
p_angle
-
90
);
if
(
upsample_above
)
{
const
int
n_px
=
txwpx
+
(
need_right
?
txhpx
:
0
);
upsample_intra_edge
(
above_row
,
n_px
);
}
const
int
upsample_left
=
use_intra_edge_upsample
(
txhpx
,
p_angle
-
180
);
if
(
upsample_left
)
{
const
int
n_px
=
txhpx
+
(
need_bottom
?
txwpx
:
0
);
upsample_intra_edge
(
left_col
,
n_px
);
}
#endif // CONFIG_INTRA_EDGE_UPSAMPLE
#endif // CONFIG_INTRA_EDGE
dr_predictor
(
dst
,
dst_stride
,
tx_size
,
above_row
,
left_col
,
#if CONFIG_INTRA_INTERP
filter
,
#endif // CONFIG_INTRA_INTERP
#if CONFIG_INTRA_EDGE_UPSAMPLE
upsample_above
,
upsample_left
,
#endif
#endif
// CONFIG_INTRA_EDGE_UPSAMPLE
p_angle
);
return
;
}
...
...
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