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
d5975b73
Commit
d5975b73
authored
Jul 14, 2015
by
Jingning Han
Committed by
Gerrit Code Review
Jul 14, 2015
Browse files
Options
Browse Files
Download
Plain Diff
Merge "Refactor intra block prediction function"
parents
e03b8b78
81452cf0
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
32 additions
and
41 deletions
+32
-41
vp9/common/vp9_reconintra.c
vp9/common/vp9_reconintra.c
+6
-7
vp9/common/vp9_reconintra.h
vp9/common/vp9_reconintra.h
+1
-1
vp9/decoder/vp9_decodeframe.c
vp9/decoder/vp9_decodeframe.c
+1
-2
vp9/encoder/vp9_encodemb.c
vp9/encoder/vp9_encodemb.c
+8
-8
vp9/encoder/vp9_mbgraph.c
vp9/encoder/vp9_mbgraph.c
+1
-1
vp9/encoder/vp9_pickmode.c
vp9/encoder/vp9_pickmode.c
+1
-2
vp9/encoder/vp9_rdopt.c
vp9/encoder/vp9_rdopt.c
+14
-20
No files found.
vp9/common/vp9_reconintra.c
View file @
d5975b73
...
...
@@ -1059,20 +1059,19 @@ static void build_intra_predictors(const MACROBLOCKD *xd, const uint8_t *ref,
}
}
void
vp9_predict_intra_block
(
const
MACROBLOCKD
*
xd
,
int
block_idx
,
int
bwl_in
,
void
vp9_predict_intra_block
(
const
MACROBLOCKD
*
xd
,
int
bwl_in
,
TX_SIZE
tx_size
,
PREDICTION_MODE
mode
,
const
uint8_t
*
ref
,
int
ref_stride
,
uint8_t
*
dst
,
int
dst_stride
,
int
aoff
,
int
loff
,
int
plane
)
{
const
int
bw
l
=
bwl_in
-
tx_size
;
const
int
wmask
=
(
1
<<
bwl
)
-
1
;
const
int
have_top
=
(
block_idx
>>
bwl
)
||
xd
->
up_available
;
const
int
have_left
=
(
block_idx
&
wmask
)
||
xd
->
left_available
;
const
int
have_right
=
(
(
block_idx
&
wmask
)
!=
wmask
)
;
const
int
bw
=
(
1
<<
bwl_in
)
;
const
int
txw
=
(
1
<<
tx_size
)
;
const
int
have_top
=
loff
||
xd
->
up_available
;
const
int
have_left
=
aoff
||
xd
->
left_available
;
const
int
have_right
=
(
aoff
+
txw
)
<
bw
;
const
int
x
=
aoff
*
4
;
const
int
y
=
loff
*
4
;
assert
(
bwl
>=
0
);
#if CONFIG_VP9_HIGHBITDEPTH
if
(
xd
->
cur_buf
->
flags
&
YV12_FLAG_HIGHBITDEPTH
)
{
build_intra_predictors_high
(
xd
,
ref
,
ref_stride
,
dst
,
dst_stride
,
mode
,
...
...
vp9/common/vp9_reconintra.h
View file @
d5975b73
...
...
@@ -20,7 +20,7 @@ extern "C" {
void
vp9_init_intra_predictors
(
void
);
void
vp9_predict_intra_block
(
const
MACROBLOCKD
*
xd
,
int
block_idx
,
int
bwl_in
,
void
vp9_predict_intra_block
(
const
MACROBLOCKD
*
xd
,
int
bwl_in
,
TX_SIZE
tx_size
,
PREDICTION_MODE
mode
,
const
uint8_t
*
ref
,
int
ref_stride
,
uint8_t
*
dst
,
int
dst_stride
,
...
...
vp9/decoder/vp9_decodeframe.c
View file @
d5975b73
...
...
@@ -391,8 +391,7 @@ static void predict_and_reconstruct_intra_block(int plane, int block,
dec_txfrm_block_to_raster_xy
(
bwl
,
tx_size
,
block
,
&
x
,
&
y
);
dst
=
&
pd
->
dst
.
buf
[
4
*
y
*
pd
->
dst
.
stride
+
4
*
x
];
vp9_predict_intra_block
(
xd
,
block
>>
(
tx_size
<<
1
),
bwl
,
tx_size
,
mode
,
vp9_predict_intra_block
(
xd
,
bwl
,
tx_size
,
mode
,
dst
,
pd
->
dst
.
stride
,
dst
,
pd
->
dst
.
stride
,
x
,
y
,
plane
);
...
...
vp9/encoder/vp9_encodemb.c
View file @
d5975b73
...
...
@@ -795,7 +795,7 @@ void vp9_encode_block_intra(int plane, int block, BLOCK_SIZE plane_bsize,
case
TX_32X32
:
scan_order
=
&
vp9_default_scan_orders
[
TX_32X32
];
mode
=
plane
==
0
?
mbmi
->
mode
:
mbmi
->
uv_mode
;
vp9_predict_intra_block
(
xd
,
block
>>
6
,
bwl
,
TX_32X32
,
mode
,
vp9_predict_intra_block
(
xd
,
bwl
,
TX_32X32
,
mode
,
x
->
skip_encode
?
src
:
dst
,
x
->
skip_encode
?
src_stride
:
dst_stride
,
dst
,
dst_stride
,
i
,
j
,
plane
);
...
...
@@ -816,7 +816,7 @@ void vp9_encode_block_intra(int plane, int block, BLOCK_SIZE plane_bsize,
tx_type
=
get_tx_type
(
pd
->
plane_type
,
xd
);
scan_order
=
&
vp9_scan_orders
[
TX_16X16
][
tx_type
];
mode
=
plane
==
0
?
mbmi
->
mode
:
mbmi
->
uv_mode
;
vp9_predict_intra_block
(
xd
,
block
>>
4
,
bwl
,
TX_16X16
,
mode
,
vp9_predict_intra_block
(
xd
,
bwl
,
TX_16X16
,
mode
,
x
->
skip_encode
?
src
:
dst
,
x
->
skip_encode
?
src_stride
:
dst_stride
,
dst
,
dst_stride
,
i
,
j
,
plane
);
...
...
@@ -838,7 +838,7 @@ void vp9_encode_block_intra(int plane, int block, BLOCK_SIZE plane_bsize,
tx_type
=
get_tx_type
(
pd
->
plane_type
,
xd
);
scan_order
=
&
vp9_scan_orders
[
TX_8X8
][
tx_type
];
mode
=
plane
==
0
?
mbmi
->
mode
:
mbmi
->
uv_mode
;
vp9_predict_intra_block
(
xd
,
block
>>
2
,
bwl
,
TX_8X8
,
mode
,
vp9_predict_intra_block
(
xd
,
bwl
,
TX_8X8
,
mode
,
x
->
skip_encode
?
src
:
dst
,
x
->
skip_encode
?
src_stride
:
dst_stride
,
dst
,
dst_stride
,
i
,
j
,
plane
);
...
...
@@ -860,7 +860,7 @@ void vp9_encode_block_intra(int plane, int block, BLOCK_SIZE plane_bsize,
tx_type
=
get_tx_type_4x4
(
pd
->
plane_type
,
xd
,
block
);
scan_order
=
&
vp9_scan_orders
[
TX_4X4
][
tx_type
];
mode
=
plane
==
0
?
get_y_mode
(
xd
->
mi
[
0
],
block
)
:
mbmi
->
uv_mode
;
vp9_predict_intra_block
(
xd
,
block
,
bwl
,
TX_4X4
,
mode
,
vp9_predict_intra_block
(
xd
,
bwl
,
TX_4X4
,
mode
,
x
->
skip_encode
?
src
:
dst
,
x
->
skip_encode
?
src_stride
:
dst_stride
,
dst
,
dst_stride
,
i
,
j
,
plane
);
...
...
@@ -903,7 +903,7 @@ void vp9_encode_block_intra(int plane, int block, BLOCK_SIZE plane_bsize,
case
TX_32X32
:
scan_order
=
&
vp9_default_scan_orders
[
TX_32X32
];
mode
=
plane
==
0
?
mbmi
->
mode
:
mbmi
->
uv_mode
;
vp9_predict_intra_block
(
xd
,
block
>>
6
,
bwl
,
TX_32X32
,
mode
,
vp9_predict_intra_block
(
xd
,
bwl
,
TX_32X32
,
mode
,
x
->
skip_encode
?
src
:
dst
,
x
->
skip_encode
?
src_stride
:
dst_stride
,
dst
,
dst_stride
,
i
,
j
,
plane
);
...
...
@@ -923,7 +923,7 @@ void vp9_encode_block_intra(int plane, int block, BLOCK_SIZE plane_bsize,
tx_type
=
get_tx_type
(
pd
->
plane_type
,
xd
);
scan_order
=
&
vp9_scan_orders
[
TX_16X16
][
tx_type
];
mode
=
plane
==
0
?
mbmi
->
mode
:
mbmi
->
uv_mode
;
vp9_predict_intra_block
(
xd
,
block
>>
4
,
bwl
,
TX_16X16
,
mode
,
vp9_predict_intra_block
(
xd
,
bwl
,
TX_16X16
,
mode
,
x
->
skip_encode
?
src
:
dst
,
x
->
skip_encode
?
src_stride
:
dst_stride
,
dst
,
dst_stride
,
i
,
j
,
plane
);
...
...
@@ -943,7 +943,7 @@ void vp9_encode_block_intra(int plane, int block, BLOCK_SIZE plane_bsize,
tx_type
=
get_tx_type
(
pd
->
plane_type
,
xd
);
scan_order
=
&
vp9_scan_orders
[
TX_8X8
][
tx_type
];
mode
=
plane
==
0
?
mbmi
->
mode
:
mbmi
->
uv_mode
;
vp9_predict_intra_block
(
xd
,
block
>>
2
,
bwl
,
TX_8X8
,
mode
,
vp9_predict_intra_block
(
xd
,
bwl
,
TX_8X8
,
mode
,
x
->
skip_encode
?
src
:
dst
,
x
->
skip_encode
?
src_stride
:
dst_stride
,
dst
,
dst_stride
,
i
,
j
,
plane
);
...
...
@@ -963,7 +963,7 @@ void vp9_encode_block_intra(int plane, int block, BLOCK_SIZE plane_bsize,
tx_type
=
get_tx_type_4x4
(
pd
->
plane_type
,
xd
,
block
);
scan_order
=
&
vp9_scan_orders
[
TX_4X4
][
tx_type
];
mode
=
plane
==
0
?
get_y_mode
(
xd
->
mi
[
0
],
block
)
:
mbmi
->
uv_mode
;
vp9_predict_intra_block
(
xd
,
block
,
bwl
,
TX_4X4
,
mode
,
vp9_predict_intra_block
(
xd
,
bwl
,
TX_4X4
,
mode
,
x
->
skip_encode
?
src
:
dst
,
x
->
skip_encode
?
src_stride
:
dst_stride
,
dst
,
dst_stride
,
i
,
j
,
plane
);
...
...
vp9/encoder/vp9_mbgraph.c
View file @
d5975b73
...
...
@@ -145,7 +145,7 @@ static int find_best_16x16_intra(VP9_COMP *cpi, PREDICTION_MODE *pbest_mode) {
unsigned
int
err
;
xd
->
mi
[
0
]
->
mbmi
.
mode
=
mode
;
vp9_predict_intra_block
(
xd
,
0
,
2
,
TX_16X16
,
mode
,
vp9_predict_intra_block
(
xd
,
2
,
TX_16X16
,
mode
,
x
->
plane
[
0
].
src
.
buf
,
x
->
plane
[
0
].
src
.
stride
,
xd
->
plane
[
0
].
dst
.
buf
,
xd
->
plane
[
0
].
dst
.
stride
,
0
,
0
,
0
);
...
...
vp9/encoder/vp9_pickmode.c
View file @
d5975b73
...
...
@@ -902,8 +902,7 @@ static void estimate_block_intra(int plane, int block, BLOCK_SIZE plane_bsize,
p
->
src
.
buf
=
&
src_buf_base
[
4
*
(
j
*
src_stride
+
i
)];
pd
->
dst
.
buf
=
&
dst_buf_base
[
4
*
(
j
*
dst_stride
+
i
)];
// Use source buffer as an approximation for the fully reconstructed buffer.
vp9_predict_intra_block
(
xd
,
block
>>
(
2
*
tx_size
),
b_width_log2_lookup
[
plane_bsize
],
vp9_predict_intra_block
(
xd
,
b_width_log2_lookup
[
plane_bsize
],
tx_size
,
args
->
mode
,
x
->
skip_encode
?
p
->
src
.
buf
:
pd
->
dst
.
buf
,
x
->
skip_encode
?
src_stride
:
dst_stride
,
...
...
vp9/encoder/vp9_rdopt.c
View file @
d5975b73
...
...
@@ -760,7 +760,8 @@ static int conditional_skipintra(PREDICTION_MODE mode,
return
0
;
}
static
int64_t
rd_pick_intra4x4block
(
VP9_COMP
*
cpi
,
MACROBLOCK
*
x
,
int
ib
,
static
int64_t
rd_pick_intra4x4block
(
VP9_COMP
*
cpi
,
MACROBLOCK
*
x
,
int
row
,
int
col
,
PREDICTION_MODE
*
best_mode
,
const
int
*
bmode_costs
,
ENTROPY_CONTEXT
*
a
,
ENTROPY_CONTEXT
*
l
,
...
...
@@ -770,18 +771,14 @@ static int64_t rd_pick_intra4x4block(VP9_COMP *cpi, MACROBLOCK *x, int ib,
PREDICTION_MODE
mode
;
MACROBLOCKD
*
const
xd
=
&
x
->
e_mbd
;
int64_t
best_rd
=
rd_thresh
;
struct
macroblock_plane
*
p
=
&
x
->
plane
[
0
];
struct
macroblockd_plane
*
pd
=
&
xd
->
plane
[
0
];
const
int
src_stride
=
p
->
src
.
stride
;
const
int
dst_stride
=
pd
->
dst
.
stride
;
const
uint8_t
*
src_init
=
&
p
->
src
.
buf
[
vp9_raster_block_offset
(
BLOCK_8X8
,
ib
,
src_stride
)];
uint8_t
*
dst_init
=
&
pd
->
dst
.
buf
[
vp9_raster_block_offset
(
BLOCK_8X8
,
ib
,
dst_stride
)];
const
uint8_t
*
src_init
=
&
p
->
src
.
buf
[
row
*
4
*
src_stride
+
col
*
4
];
uint8_t
*
dst_init
=
&
pd
->
dst
.
buf
[
row
*
4
*
src_stride
+
col
*
4
];
ENTROPY_CONTEXT
ta
[
2
],
tempa
[
2
];
ENTROPY_CONTEXT
tl
[
2
],
templ
[
2
];
const
int
num_4x4_blocks_wide
=
num_4x4_blocks_wide_lookup
[
bsize
];
const
int
num_4x4_blocks_high
=
num_4x4_blocks_high_lookup
[
bsize
];
int
idx
,
idy
;
...
...
@@ -790,8 +787,6 @@ static int64_t rd_pick_intra4x4block(VP9_COMP *cpi, MACROBLOCK *x, int ib,
uint16_t
best_dst16
[
8
*
8
];
#endif
assert
(
ib
<
4
);
memcpy
(
ta
,
a
,
sizeof
(
ta
));
memcpy
(
tl
,
l
,
sizeof
(
tl
));
xd
->
mi
[
0
]
->
mbmi
.
tx_size
=
TX_4X4
;
...
...
@@ -819,7 +814,7 @@ static int64_t rd_pick_intra4x4block(VP9_COMP *cpi, MACROBLOCK *x, int ib,
for
(
idy
=
0
;
idy
<
num_4x4_blocks_high
;
++
idy
)
{
for
(
idx
=
0
;
idx
<
num_4x4_blocks_wide
;
++
idx
)
{
const
int
block
=
ib
+
idy
*
2
+
idx
;
const
int
block
=
(
row
+
idy
)
*
2
+
(
col
+
idx
)
;
const
uint8_t
*
const
src
=
&
src_init
[
idx
*
4
+
idy
*
4
*
src_stride
];
uint8_t
*
const
dst
=
&
dst_init
[
idx
*
4
+
idy
*
4
*
dst_stride
];
int16_t
*
const
src_diff
=
vp9_raster_block_offset_int16
(
BLOCK_8X8
,
...
...
@@ -827,11 +822,11 @@ static int64_t rd_pick_intra4x4block(VP9_COMP *cpi, MACROBLOCK *x, int ib,
p
->
src_diff
);
tran_low_t
*
const
coeff
=
BLOCK_OFFSET
(
x
->
plane
[
0
].
coeff
,
block
);
xd
->
mi
[
0
]
->
bmi
[
block
].
as_mode
=
mode
;
vp9_predict_intra_block
(
xd
,
block
,
1
,
TX_4X4
,
mode
,
vp9_predict_intra_block
(
xd
,
1
,
TX_4X4
,
mode
,
x
->
skip_encode
?
src
:
dst
,
x
->
skip_encode
?
src_stride
:
dst_stride
,
dst
,
dst_stride
,
idx
,
idy
,
0
);
dst
,
dst_stride
,
col
+
idx
,
row
+
idy
,
0
);
vpx_highbd_subtract_block
(
4
,
4
,
src_diff
,
8
,
src
,
src_stride
,
dst
,
dst_stride
,
xd
->
bd
);
if
(
xd
->
lossless
)
{
...
...
@@ -920,18 +915,17 @@ static int64_t rd_pick_intra4x4block(VP9_COMP *cpi, MACROBLOCK *x, int ib,
for
(
idy
=
0
;
idy
<
num_4x4_blocks_high
;
++
idy
)
{
for
(
idx
=
0
;
idx
<
num_4x4_blocks_wide
;
++
idx
)
{
const
int
block
=
ib
+
idy
*
2
+
idx
;
const
int
block
=
(
row
+
idy
)
*
2
+
(
col
+
idx
)
;
const
uint8_t
*
const
src
=
&
src_init
[
idx
*
4
+
idy
*
4
*
src_stride
];
uint8_t
*
const
dst
=
&
dst_init
[
idx
*
4
+
idy
*
4
*
dst_stride
];
int16_t
*
const
src_diff
=
vp9_raster_block_offset_int16
(
BLOCK_8X8
,
block
,
p
->
src_diff
);
tran_low_t
*
const
coeff
=
BLOCK_OFFSET
(
x
->
plane
[
0
].
coeff
,
block
);
xd
->
mi
[
0
]
->
bmi
[
block
].
as_mode
=
mode
;
vp9_predict_intra_block
(
xd
,
block
,
1
,
TX_4X4
,
mode
,
vp9_predict_intra_block
(
xd
,
1
,
TX_4X4
,
mode
,
x
->
skip_encode
?
src
:
dst
,
x
->
skip_encode
?
src_stride
:
dst_stride
,
dst
,
dst_stride
,
idx
,
idy
,
0
);
dst
,
dst_stride
,
col
+
idx
,
row
+
idy
,
0
);
vpx_subtract_block
(
4
,
4
,
src_diff
,
8
,
src
,
src_stride
,
dst
,
dst_stride
);
if
(
xd
->
lossless
)
{
...
...
@@ -1030,9 +1024,9 @@ static int64_t rd_pick_intra_sub_8x8_y_mode(VP9_COMP *cpi, MACROBLOCK *mb,
bmode_costs
=
cpi
->
y_mode_costs
[
A
][
L
];
}
this_rd
=
rd_pick_intra4x4block
(
cpi
,
mb
,
i
,
&
best_mode
,
bmode_costs
,
t_above
+
idx
,
t_left
+
idy
,
&
r
,
&
ry
,
&
d
,
bsize
,
best_rd
-
total_rd
);
this_rd
=
rd_pick_intra4x4block
(
cpi
,
mb
,
i
dy
,
idx
,
&
best_mode
,
bmode_costs
,
t_above
+
idx
,
t_left
+
idy
,
&
r
,
&
ry
,
&
d
,
bsize
,
best_rd
-
total_rd
);
if
(
this_rd
>=
best_rd
-
total_rd
)
return
INT64_MAX
;
...
...
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