Skip to content
GitLab
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
b9c7d04e
Commit
b9c7d04e
authored
Aug 05, 2013
by
Dmitry Kovalev
Browse files
Finally removing all old block size constants.
Change-Id: I3aae21e88b876d53ecc955260479980ffe04ad8d
parent
9f988a2e
Changes
9
Hide whitespace changes
Inline
Side-by-side
vp9/common/vp9_enums.h
View file @
b9c7d04e
...
...
@@ -22,20 +22,20 @@
#define MI_MASK (MI_BLOCK_SIZE - 1)
typedef
enum
BLOCK_SIZE_TYPE
{
BLOCK_
SIZE_AB4X4
,
BLOCK_4X4
=
BLOCK_SIZE_AB
4X4
,
BLOCK_
SIZE_SB4X8
,
BLOCK_4X8
=
BLOCK_SIZE_SB
4X8
,
BLOCK_
SIZE_SB8X4
,
BLOCK_8X4
=
BLOCK_SIZE_SB
8X4
,
BLOCK_
SIZE_SB8X8
,
BLOCK_8X8
=
BLOCK_SIZE_SB
8X8
,
BLOCK_
SIZE_SB8X16
,
BLOCK_8X16
=
BLOCK_SIZE_SB
8X16
,
BLOCK_
SIZE_SB16X8
,
BLOCK_16X8
=
BLOCK_SIZE_SB
16X8
,
BLOCK_
SIZE_MB16X16
,
BLOCK_16X16
=
BLOCK_SIZE_MB
16X16
,
BLOCK_
SIZE_SB16X32
,
BLOCK_16X32
=
BLOCK_SIZE_SB
16X32
,
BLOCK_
SIZE_SB32X16
,
BLOCK_32X16
=
BLOCK_SIZE_SB
32X16
,
BLOCK_
SIZE_SB32X32
,
BLOCK_32X32
=
BLOCK_SIZE_SB
32X32
,
BLOCK_
SIZE_SB32X64
,
BLOCK_32X64
=
BLOCK_SIZE_SB
32X64
,
BLOCK_
SIZE_SB64X32
,
BLOCK_64X32
=
BLOCK_SIZE_SB
64X32
,
BLOCK_
SIZE_SB64X64
,
BLOCK_64X64
=
BLOCK_SIZE_SB
64X64
,
BLOCK_SIZE_TYPES
,
BLOCK_MAX_SB_SEGMENTS
=
BLOCK_SIZE_TYPES
BLOCK_4X4
,
BLOCK_4X8
,
BLOCK_8X4
,
BLOCK_8X8
,
BLOCK_8X16
,
BLOCK_16X8
,
BLOCK_16X16
,
BLOCK_16X32
,
BLOCK_32X16
,
BLOCK_32X32
,
BLOCK_32X64
,
BLOCK_64X32
,
BLOCK_64X64
,
BLOCK_SIZE_TYPES
}
BLOCK_SIZE_TYPE
;
typedef
enum
PARTITION_TYPE
{
...
...
vp9/common/vp9_findnearmv.h
View file @
b9c7d04e
...
...
@@ -52,8 +52,8 @@ static MB_PREDICTION_MODE left_block_mode(const MODE_INFO *cur_mb, int b) {
if
(
is_inter_block
(
&
cur_mb
->
mbmi
))
{
return
DC_PRED
;
}
else
if
(
cur_mb
->
mbmi
.
sb_type
<
BLOCK_
SIZE_SB
8X8
)
{
return
(
(
cur_mb
->
bmi
+
1
+
b
)
->
as_mode
)
;
}
else
if
(
cur_mb
->
mbmi
.
sb_type
<
BLOCK_8X8
)
{
return
(
cur_mb
->
bmi
+
1
+
b
)
->
as_mode
;
}
else
{
return
cur_mb
->
mbmi
.
mode
;
}
...
...
@@ -70,8 +70,8 @@ static MB_PREDICTION_MODE above_block_mode(const MODE_INFO *cur_mb,
if
(
is_inter_block
(
&
cur_mb
->
mbmi
))
{
return
DC_PRED
;
}
else
if
(
cur_mb
->
mbmi
.
sb_type
<
BLOCK_
SIZE_SB
8X8
)
{
return
(
(
cur_mb
->
bmi
+
2
+
b
)
->
as_mode
)
;
}
else
if
(
cur_mb
->
mbmi
.
sb_type
<
BLOCK_8X8
)
{
return
(
cur_mb
->
bmi
+
2
+
b
)
->
as_mode
;
}
else
{
return
cur_mb
->
mbmi
.
mode
;
}
...
...
vp9/common/vp9_mvref_common.c
View file @
b9c7d04e
...
...
@@ -121,7 +121,7 @@ static void clamp_mv_ref(const MACROBLOCKD *xd, int_mv *mv) {
static
INLINE
int_mv
get_sub_block_mv
(
const
MODE_INFO
*
candidate
,
int
check_sub_blocks
,
int
which_mv
,
int
search_col
,
int
block_idx
)
{
return
(
check_sub_blocks
&&
candidate
->
mbmi
.
sb_type
<
BLOCK_
SIZE_SB
8X8
return
(
check_sub_blocks
&&
candidate
->
mbmi
.
sb_type
<
BLOCK_8X8
?
candidate
->
bmi
[
idx_n_column_to_subblock
[
block_idx
][
search_col
==
0
]]
.
as_mv
[
which_mv
]
:
candidate
->
mbmi
.
mv
[
which_mv
]);
...
...
vp9/common/vp9_onyxc_int.h
View file @
b9c7d04e
...
...
@@ -250,7 +250,7 @@ static int check_bsize_coverage(VP9_COMMON *cm, int mi_row, int mi_col,
// frame width/height are multiples of 8, hence 8x8 block should always
// pass the above check
assert
(
bsize
>
BLOCK_
SIZE_SB
8X8
);
assert
(
bsize
>
BLOCK_8X8
);
// return the node index in the prob tree for binary coding
// only allow horizontal/split partition types
...
...
vp9/common/vp9_reconinter.c
View file @
b9c7d04e
...
...
@@ -285,8 +285,8 @@ static void build_inter_predictors(int plane, int block,
assert
(
x
<
(
4
<<
bwl
));
assert
(
y
<
(
4
<<
bhl
));
assert
(
mi
->
mbmi
.
sb_type
<
BLOCK_
SIZE_SB
8X8
||
4
<<
pred_w
==
(
4
<<
bwl
));
assert
(
mi
->
mbmi
.
sb_type
<
BLOCK_
SIZE_SB
8X8
||
4
<<
pred_h
==
(
4
<<
bhl
));
assert
(
mi
->
mbmi
.
sb_type
<
BLOCK_8X8
||
4
<<
pred_w
==
(
4
<<
bwl
));
assert
(
mi
->
mbmi
.
sb_type
<
BLOCK_8X8
||
4
<<
pred_h
==
(
4
<<
bhl
));
for
(
which_mv
=
0
;
which_mv
<
1
+
use_second_ref
;
++
which_mv
)
{
// source
...
...
@@ -303,7 +303,7 @@ static void build_inter_predictors(int plane, int block,
// same MV (the average of the 4 luma MVs) but we could do something
// smarter for non-4:2:0. Just punt for now, pending the changes to get
// rid of SPLITMV mode entirely.
const
MV
mv
=
mi
->
mbmi
.
sb_type
<
BLOCK_
SIZE_SB
8X8
const
MV
mv
=
mi
->
mbmi
.
sb_type
<
BLOCK_8X8
?
(
plane
==
0
?
mi
->
bmi
[
block
].
as_mv
[
which_mv
].
as_mv
:
mi_mv_pred_q4
(
mi
,
which_mv
))
:
mi
->
mbmi
.
mv
[
which_mv
].
as_mv
;
...
...
vp9/decoder/vp9_decodemv.c
View file @
b9c7d04e
...
...
@@ -164,7 +164,7 @@ static void read_intra_frame_mode_info(VP9D_COMP *pbi, MODE_INFO *m,
mbmi
->
ref_frame
[
0
]
=
INTRA_FRAME
;
mbmi
->
ref_frame
[
1
]
=
NONE
;
if
(
bsize
>=
BLOCK_
SIZE_SB
8X8
)
{
if
(
bsize
>=
BLOCK_8X8
)
{
const
MB_PREDICTION_MODE
A
=
above_block_mode
(
m
,
0
,
mis
);
const
MB_PREDICTION_MODE
L
=
xd
->
left_available
?
left_block_mode
(
m
,
0
)
:
DC_PRED
;
...
...
@@ -386,7 +386,7 @@ static void read_intra_block_mode_info(VP9D_COMP *pbi, MODE_INFO *mi,
mbmi
->
ref_frame
[
0
]
=
INTRA_FRAME
;
mbmi
->
ref_frame
[
1
]
=
NONE
;
if
(
bsize
>=
BLOCK_
SIZE_SB
8X8
)
{
if
(
bsize
>=
BLOCK_8X8
)
{
const
int
size_group
=
size_group_lookup
[
bsize
];
mbmi
->
mode
=
read_intra_mode
(
r
,
cm
->
fc
.
y_mode_prob
[
size_group
]);
cm
->
counts
.
y_mode
[
size_group
][
mbmi
->
mode
]
++
;
...
...
@@ -459,13 +459,13 @@ static void read_inter_block_mode_info(VP9D_COMP *pbi, MODE_INFO *mi,
if
(
vp9_segfeature_active
(
&
xd
->
seg
,
mbmi
->
segment_id
,
SEG_LVL_SKIP
))
mbmi
->
mode
=
ZEROMV
;
else
if
(
bsize
>=
BLOCK_
SIZE_SB
8X8
)
else
if
(
bsize
>=
BLOCK_8X8
)
mbmi
->
mode
=
read_inter_mode
(
cm
,
r
,
inter_mode_ctx
);
mbmi
->
uv_mode
=
DC_PRED
;
// nearest, nearby
if
(
bsize
<
BLOCK_
SIZE_SB
8X8
||
mbmi
->
mode
!=
ZEROMV
)
{
if
(
bsize
<
BLOCK_8X8
||
mbmi
->
mode
!=
ZEROMV
)
{
vp9_find_best_ref_mvs
(
xd
,
mbmi
->
ref_mvs
[
ref0
],
&
nearest
,
&
nearby
);
best_mv
.
as_int
=
mbmi
->
ref_mvs
[
ref0
][
0
].
as_int
;
}
...
...
@@ -479,14 +479,14 @@ static void read_inter_block_mode_info(VP9D_COMP *pbi, MODE_INFO *mi,
ref1
,
mbmi
->
ref_mvs
[
ref1
],
cm
->
ref_frame_sign_bias
,
mi_row
,
mi_col
);
if
(
bsize
<
BLOCK_
SIZE_SB
8X8
||
mbmi
->
mode
!=
ZEROMV
)
{
if
(
bsize
<
BLOCK_8X8
||
mbmi
->
mode
!=
ZEROMV
)
{
vp9_find_best_ref_mvs
(
xd
,
mbmi
->
ref_mvs
[
ref1
],
&
nearest_second
,
&
nearby_second
);
best_mv_second
.
as_int
=
mbmi
->
ref_mvs
[
ref1
][
0
].
as_int
;
}
}
if
(
bsize
<
BLOCK_
SIZE_SB
8X8
)
{
if
(
bsize
<
BLOCK_8X8
)
{
const
int
num_4x4_w
=
num_4x4_blocks_wide_lookup
[
bsize
];
// 1 or 2
const
int
num_4x4_h
=
num_4x4_blocks_high_lookup
[
bsize
];
// 1 or 2
int
idx
,
idy
;
...
...
vp9/encoder/vp9_bitstream.c
View file @
b9c7d04e
...
...
@@ -434,7 +434,7 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, MODE_INFO *m, vp9_writer *bc) {
vp9_write
(
bc
,
rf
!=
INTRA_FRAME
,
vp9_get_pred_prob_intra_inter
(
pc
,
xd
));
if
(
bsize
>=
BLOCK_
SIZE_SB
8X8
&&
pc
->
tx_mode
==
TX_MODE_SELECT
&&
if
(
bsize
>=
BLOCK_8X8
&&
pc
->
tx_mode
==
TX_MODE_SELECT
&&
!
(
rf
!=
INTRA_FRAME
&&
(
skip_coeff
||
vp9_segfeature_active
(
seg
,
segment_id
,
SEG_LVL_SKIP
))))
{
write_selected_tx_size
(
cpi
,
mi
->
txfm_size
,
bsize
,
bc
);
...
...
@@ -445,7 +445,7 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, MODE_INFO *m, vp9_writer *bc) {
active_section
=
6
;
#endif
if
(
bsize
>=
BLOCK_
SIZE_SB
8X8
)
{
if
(
bsize
>=
BLOCK_8X8
)
{
write_intra_mode
(
bc
,
mode
,
pc
->
fc
.
y_mode_prob
[
size_group_lookup
[
bsize
]]);
}
else
{
int
idx
,
idy
;
...
...
@@ -470,7 +470,7 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, MODE_INFO *m, vp9_writer *bc) {
// If segment skip is not enabled code the mode.
if
(
!
vp9_segfeature_active
(
seg
,
segment_id
,
SEG_LVL_SKIP
))
{
if
(
bsize
>=
BLOCK_
SIZE_SB
8X8
)
{
if
(
bsize
>=
BLOCK_8X8
)
{
write_sb_mv_ref
(
bc
,
mode
,
mv_ref_p
);
++
pc
->
counts
.
inter_mode
[
mi
->
mb_mode_context
[
rf
]]
[
inter_mode_offset
(
mode
)];
...
...
@@ -486,7 +486,7 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, MODE_INFO *m, vp9_writer *bc) {
assert
(
mi
->
interp_filter
==
cpi
->
common
.
mcomp_filter_type
);
}
if
(
bsize
<
BLOCK_
SIZE_SB
8X8
)
{
if
(
bsize
<
BLOCK_8X8
)
{
int
j
;
MB_PREDICTION_MODE
blockmode
;
int_mv
blockmv
;
...
...
@@ -544,10 +544,10 @@ static void write_mb_modes_kf(const VP9_COMP *cpi, MODE_INFO *m,
write_skip_coeff
(
cpi
,
segment_id
,
m
,
bc
);
if
(
m
->
mbmi
.
sb_type
>=
BLOCK_
SIZE_SB
8X8
&&
c
->
tx_mode
==
TX_MODE_SELECT
)
if
(
m
->
mbmi
.
sb_type
>=
BLOCK_8X8
&&
c
->
tx_mode
==
TX_MODE_SELECT
)
write_selected_tx_size
(
cpi
,
m
->
mbmi
.
txfm_size
,
m
->
mbmi
.
sb_type
,
bc
);
if
(
m
->
mbmi
.
sb_type
>=
BLOCK_
SIZE_SB
8X8
)
{
if
(
m
->
mbmi
.
sb_type
>=
BLOCK_8X8
)
{
const
MB_PREDICTION_MODE
A
=
above_block_mode
(
m
,
0
,
mis
);
const
MB_PREDICTION_MODE
L
=
xd
->
left_available
?
left_block_mode
(
m
,
0
)
:
DC_PRED
;
...
...
@@ -580,7 +580,7 @@ static void write_modes_b(VP9_COMP *cpi, MODE_INFO *m, vp9_writer *bc,
VP9_COMMON
*
const
cm
=
&
cpi
->
common
;
MACROBLOCKD
*
const
xd
=
&
cpi
->
mb
.
e_mbd
;
if
(
m
->
mbmi
.
sb_type
<
BLOCK_
SIZE_SB
8X8
)
if
(
m
->
mbmi
.
sb_type
<
BLOCK_8X8
)
if
(
xd
->
ab_index
>
0
)
return
;
xd
->
mode_info_context
=
m
;
...
...
@@ -621,11 +621,11 @@ static void write_modes_sb(VP9_COMP *cpi, MODE_INFO *m, vp9_writer *bc,
partition
=
partition_lookup
[
bsl
][
m
->
mbmi
.
sb_type
];
if
(
bsize
<
BLOCK_
SIZE_SB
8X8
)
if
(
bsize
<
BLOCK_8X8
)
if
(
xd
->
ab_index
>
0
)
return
;
if
(
bsize
>=
BLOCK_
SIZE_SB
8X8
)
{
if
(
bsize
>=
BLOCK_8X8
)
{
int
pl
;
const
int
idx
=
check_bsize_coverage
(
cm
,
mi_row
,
mi_col
,
bsize
);
set_partition_seg_context
(
cm
,
xd
,
mi_row
,
mi_col
);
...
...
@@ -672,8 +672,8 @@ static void write_modes_sb(VP9_COMP *cpi, MODE_INFO *m, vp9_writer *bc,
}
// update partition context
if
(
bsize
>=
BLOCK_
SIZE_SB
8X8
&&
(
bsize
==
BLOCK_
SIZE_SB
8X8
||
partition
!=
PARTITION_SPLIT
))
{
if
(
bsize
>=
BLOCK_8X8
&&
(
bsize
==
BLOCK_8X8
||
partition
!=
PARTITION_SPLIT
))
{
set_partition_seg_context
(
cm
,
xd
,
mi_row
,
mi_col
);
update_partition_context
(
xd
,
subsize
,
bsize
);
}
...
...
vp9/encoder/vp9_encodeframe.c
View file @
b9c7d04e
...
...
@@ -412,7 +412,7 @@ static void update_state(VP9_COMP *cpi, PICK_MODE_CONTEXT *ctx,
// Note how often each mode chosen as best
cpi
->
mode_chosen_counts
[
mb_mode_index
]
++
;
if
(
is_inter_block
(
mbmi
)
&&
(
mbmi
->
sb_type
<
BLOCK_
SIZE_SB
8X8
||
mbmi
->
mode
==
NEWMV
))
{
&&
(
mbmi
->
sb_type
<
BLOCK_8X8
||
mbmi
->
mode
==
NEWMV
))
{
int_mv
best_mv
,
best_second_mv
;
const
MV_REFERENCE_FRAME
rf1
=
mbmi
->
ref_frame
[
0
];
const
MV_REFERENCE_FRAME
rf2
=
mbmi
->
ref_frame
[
1
];
...
...
@@ -427,7 +427,7 @@ static void update_state(VP9_COMP *cpi, PICK_MODE_CONTEXT *ctx,
vp9_update_nmv_count
(
cpi
,
x
,
&
best_mv
,
&
best_second_mv
);
}
if
(
bsize
>
BLOCK_
SIZE_SB
8X8
&&
mbmi
->
mode
==
NEWMV
)
{
if
(
bsize
>
BLOCK_8X8
&&
mbmi
->
mode
==
NEWMV
)
{
int
i
,
j
;
for
(
j
=
0
;
j
<
mi_height
;
++
j
)
for
(
i
=
0
;
i
<
mi_width
;
++
i
)
...
...
@@ -572,7 +572,7 @@ static void pick_sb_modes(VP9_COMP *cpi, int mi_row, int mi_col,
x
->
rd_search
=
1
;
if
(
bsize
<
BLOCK_
SIZE_SB
8X8
)
{
if
(
bsize
<
BLOCK_8X8
)
{
// When ab_index = 0 all sub-blocks are handled, so for ab_index != 0
// there is nothing to be done.
if
(
xd
->
ab_index
!=
0
)
...
...
@@ -769,7 +769,7 @@ static void encode_b(VP9_COMP *cpi, TOKENEXTRA **tp, int mi_row, int mi_col,
if
(
sub_index
!=
-
1
)
*
(
get_sb_index
(
xd
,
bsize
))
=
sub_index
;
if
(
bsize
<
BLOCK_
SIZE_SB
8X8
)
{
if
(
bsize
<
BLOCK_8X8
)
{
// When ab_index = 0 all sub-blocks are handled, so for ab_index != 0
// there is nothing to be done.
if
(
xd
->
ab_index
>
0
)
...
...
@@ -792,7 +792,7 @@ static void encode_sb(VP9_COMP *cpi, TOKENEXTRA **tp, int mi_row, int mi_col,
VP9_COMMON
*
const
cm
=
&
cpi
->
common
;
MACROBLOCK
*
const
x
=
&
cpi
->
mb
;
MACROBLOCKD
*
const
xd
=
&
x
->
e_mbd
;
BLOCK_SIZE_TYPE
c1
=
BLOCK_
SIZE_SB
8X8
;
BLOCK_SIZE_TYPE
c1
=
BLOCK_8X8
;
const
int
bsl
=
b_width_log2
(
bsize
),
bs
=
(
1
<<
bsl
)
/
4
;
int
UNINITIALIZED_IS_SAFE
(
pl
);
PARTITION_TYPE
partition
;
...
...
@@ -803,7 +803,7 @@ static void encode_sb(VP9_COMP *cpi, TOKENEXTRA **tp, int mi_row, int mi_col,
return
;
c1
=
BLOCK_4X4
;
if
(
bsize
>=
BLOCK_
SIZE_SB
8X8
)
{
if
(
bsize
>=
BLOCK_8X8
)
{
set_partition_seg_context
(
cm
,
xd
,
mi_row
,
mi_col
);
pl
=
partition_plane_context
(
xd
,
bsize
);
c1
=
*
(
get_sb_partitioning
(
x
,
bsize
));
...
...
@@ -812,7 +812,7 @@ static void encode_sb(VP9_COMP *cpi, TOKENEXTRA **tp, int mi_row, int mi_col,
switch
(
partition
)
{
case
PARTITION_NONE
:
if
(
output_enabled
&&
bsize
>=
BLOCK_
SIZE_SB
8X8
)
if
(
output_enabled
&&
bsize
>=
BLOCK_8X8
)
cpi
->
partition_count
[
pl
][
PARTITION_NONE
]
++
;
encode_b
(
cpi
,
tp
,
mi_row
,
mi_col
,
output_enabled
,
c1
,
-
1
);
break
;
...
...
@@ -847,7 +847,7 @@ static void encode_sb(VP9_COMP *cpi, TOKENEXTRA **tp, int mi_row, int mi_col,
break
;
}
if
(
partition
!=
PARTITION_SPLIT
||
bsize
==
BLOCK_
SIZE_SB
8X8
)
{
if
(
partition
!=
PARTITION_SPLIT
||
bsize
==
BLOCK_8X8
)
{
set_partition_seg_context
(
cm
,
xd
,
mi_row
,
mi_col
);
update_partition_context
(
xd
,
c1
,
bsize
);
}
...
...
@@ -1093,7 +1093,7 @@ static void choose_partitioning(VP9_COMP *cpi, MODE_INFO *m, int mi_row,
int
pixels_wide
=
64
,
pixels_high
=
64
;
vp9_zero
(
vt
);
set_offsets
(
cpi
,
mi_row
,
mi_col
,
BLOCK_
SIZE_SB
64X64
);
set_offsets
(
cpi
,
mi_row
,
mi_col
,
BLOCK_64X64
);
if
(
xd
->
mb_to_right_edge
<
0
)
pixels_wide
+=
(
xd
->
mb_to_right_edge
>>
3
);
...
...
@@ -1121,12 +1121,12 @@ static void choose_partitioning(VP9_COMP *cpi, MODE_INFO *m, int mi_row,
setup_pre_planes
(
xd
,
1
,
second_ref_fb
,
mi_row
,
mi_col
,
&
xd
->
scale_factor
[
1
]);
xd
->
mode_info_context
->
mbmi
.
ref_frame
[
0
]
=
LAST_FRAME
;
xd
->
mode_info_context
->
mbmi
.
sb_type
=
BLOCK_
SIZE_SB
64X64
;
xd
->
mode_info_context
->
mbmi
.
sb_type
=
BLOCK_64X64
;
vp9_find_best_ref_mvs
(
xd
,
m
->
mbmi
.
ref_mvs
[
m
->
mbmi
.
ref_frame
[
0
]],
&
nearest_mv
,
&
near_mv
);
xd
->
mode_info_context
->
mbmi
.
mv
[
0
]
=
nearest_mv
;
vp9_build_inter_predictors_sby
(
xd
,
mi_row
,
mi_col
,
BLOCK_
SIZE_SB
64X64
);
vp9_build_inter_predictors_sby
(
xd
,
mi_row
,
mi_col
,
BLOCK_64X64
);
d
=
xd
->
plane
[
0
].
dst
.
buf
;
dp
=
xd
->
plane
[
0
].
dst
.
stride
;
}
...
...
@@ -1228,7 +1228,7 @@ static void rd_use_partition(VP9_COMP *cpi, MODE_INFO *m, TOKENEXTRA **tp,
subsize
=
get_subsize
(
bsize
,
partition
);
if
(
bsize
<
BLOCK_
SIZE_SB
8X8
)
{
if
(
bsize
<
BLOCK_8X8
)
{
// When ab_index = 0 all sub-blocks are handled, so for ab_index != 0
// there is nothing to be done.
if
(
xd
->
ab_index
!=
0
)
{
...
...
@@ -1247,7 +1247,7 @@ static void rd_use_partition(VP9_COMP *cpi, MODE_INFO *m, TOKENEXTRA **tp,
if
(
cpi
->
sf
.
adjust_partitioning_from_last_frame
)
{
// Check if any of the sub blocks are further split.
if
(
partition
==
PARTITION_SPLIT
&&
subsize
>
BLOCK_
SIZE_SB
8X8
)
{
if
(
partition
==
PARTITION_SPLIT
&&
subsize
>
BLOCK_8X8
)
{
sub_subsize
=
get_subsize
(
subsize
,
PARTITION_SPLIT
);
splits_below
=
1
;
for
(
i
=
0
;
i
<
4
;
i
++
)
{
...
...
@@ -1287,7 +1287,7 @@ static void rd_use_partition(VP9_COMP *cpi, MODE_INFO *m, TOKENEXTRA **tp,
pick_sb_modes
(
cpi
,
mi_row
,
mi_col
,
&
last_part_rate
,
&
last_part_dist
,
subsize
,
get_block_context
(
x
,
subsize
),
INT64_MAX
);
if
(
last_part_rate
!=
INT_MAX
&&
bsize
>=
BLOCK_
SIZE_SB
8X8
&&
mi_row
+
(
mh
>>
1
)
<
cm
->
mi_rows
)
{
bsize
>=
BLOCK_8X8
&&
mi_row
+
(
mh
>>
1
)
<
cm
->
mi_rows
)
{
int
rt
=
0
;
int64_t
dt
=
0
;
update_state
(
cpi
,
get_block_context
(
x
,
subsize
),
subsize
,
0
);
...
...
@@ -1310,7 +1310,7 @@ static void rd_use_partition(VP9_COMP *cpi, MODE_INFO *m, TOKENEXTRA **tp,
pick_sb_modes
(
cpi
,
mi_row
,
mi_col
,
&
last_part_rate
,
&
last_part_dist
,
subsize
,
get_block_context
(
x
,
subsize
),
INT64_MAX
);
if
(
last_part_rate
!=
INT_MAX
&&
bsize
>=
BLOCK_
SIZE_SB
8X8
&&
mi_col
+
(
ms
>>
1
)
<
cm
->
mi_cols
)
{
bsize
>=
BLOCK_8X8
&&
mi_col
+
(
ms
>>
1
)
<
cm
->
mi_cols
)
{
int
rt
=
0
;
int64_t
dt
=
0
;
update_state
(
cpi
,
get_block_context
(
x
,
subsize
),
subsize
,
0
);
...
...
@@ -1363,7 +1363,7 @@ static void rd_use_partition(VP9_COMP *cpi, MODE_INFO *m, TOKENEXTRA **tp,
last_part_rate
+=
x
->
partition_cost
[
pl
][
partition
];
if
(
cpi
->
sf
.
adjust_partitioning_from_last_frame
&&
partition
!=
PARTITION_SPLIT
&&
bsize
>
BLOCK_
SIZE_SB
8X8
&&
partition
!=
PARTITION_SPLIT
&&
bsize
>
BLOCK_8X8
&&
(
mi_row
+
ms
<
cm
->
mi_rows
||
mi_row
+
(
ms
>>
1
)
==
cm
->
mi_rows
)
&&
(
mi_col
+
ms
<
cm
->
mi_cols
||
mi_col
+
(
ms
>>
1
)
==
cm
->
mi_cols
))
{
BLOCK_SIZE_TYPE
split_subsize
=
get_subsize
(
bsize
,
PARTITION_SPLIT
);
...
...
@@ -1426,7 +1426,7 @@ static void rd_use_partition(VP9_COMP *cpi, MODE_INFO *m, TOKENEXTRA **tp,
if
(
RDCOST
(
x
->
rdmult
,
x
->
rddiv
,
last_part_rate
,
last_part_dist
)
<
RDCOST
(
x
->
rdmult
,
x
->
rddiv
,
chosen_rate
,
chosen_dist
))
{
m
->
mbmi
.
sb_type
=
bsize
;
if
(
bsize
>=
BLOCK_
SIZE_SB
8X8
)
if
(
bsize
>=
BLOCK_8X8
)
*
(
get_sb_partitioning
(
x
,
bsize
))
=
subsize
;
chosen_rate
=
last_part_rate
;
chosen_dist
=
last_part_dist
;
...
...
@@ -1434,7 +1434,7 @@ static void rd_use_partition(VP9_COMP *cpi, MODE_INFO *m, TOKENEXTRA **tp,
// If none was better set the partitioning to that...
if
(
RDCOST
(
x
->
rdmult
,
x
->
rddiv
,
chosen_rate
,
chosen_dist
)
>
RDCOST
(
x
->
rdmult
,
x
->
rddiv
,
none_rate
,
none_dist
))
{
if
(
bsize
>=
BLOCK_
SIZE_SB
8X8
)
if
(
bsize
>=
BLOCK_8X8
)
*
(
get_sb_partitioning
(
x
,
bsize
))
=
bsize
;
chosen_rate
=
none_rate
;
chosen_dist
=
none_dist
;
...
...
@@ -1444,11 +1444,11 @@ static void rd_use_partition(VP9_COMP *cpi, MODE_INFO *m, TOKENEXTRA **tp,
// We must have chosen a partitioning and encoding or we'll fail later on.
// No other opportunities for success.
if
(
bsize
==
BLOCK_
SIZE_SB
64X64
)
if
(
bsize
==
BLOCK_64X64
)
assert
(
chosen_rate
<
INT_MAX
&&
chosen_dist
<
INT_MAX
);
if
(
do_recon
)
encode_sb
(
cpi
,
tp
,
mi_row
,
mi_col
,
bsize
==
BLOCK_
SIZE_SB
64X64
,
bsize
);
encode_sb
(
cpi
,
tp
,
mi_row
,
mi_col
,
bsize
==
BLOCK_64X64
,
bsize
);
*
rate
=
chosen_rate
;
*
dist
=
chosen_dist
;
...
...
@@ -1526,7 +1526,7 @@ static void rd_pick_partition(VP9_COMP *cpi, TOKENEXTRA **tp, int mi_row,
(
void
)
*
tp_orig
;
if
(
bsize
<
BLOCK_
SIZE_SB
8X8
)
{
if
(
bsize
<
BLOCK_8X8
)
{
// When ab_index = 0 all sub-blocks are handled, so for ab_index != 0
// there is nothing to be done.
if
(
xd
->
ab_index
!=
0
)
{
...
...
@@ -1542,7 +1542,7 @@ static void rd_pick_partition(VP9_COMP *cpi, TOKENEXTRA **tp, int mi_row,
// PARTITION_SPLIT
if
(
!
cpi
->
sf
.
auto_min_max_partition_size
||
bsize
>=
cpi
->
sf
.
min_partition_size
)
{
if
(
bsize
>
BLOCK_
SIZE_SB
8X8
)
{
if
(
bsize
>
BLOCK_8X8
)
{
int
r4
=
0
;
int64_t
d4
=
0
,
sum_rd
=
0
;
subsize
=
get_subsize
(
bsize
,
PARTITION_SPLIT
);
...
...
@@ -1608,7 +1608,7 @@ static void rd_pick_partition(VP9_COMP *cpi, TOKENEXTRA **tp, int mi_row,
block_context
=
x
->
sb8x8_context
[
xd
->
sb_index
][
xd
->
mb_index
];
}
else
if
(
bsize
==
BLOCK_32X32
)
{
block_context
=
x
->
mb_context
[
xd
->
sb_index
];
}
else
if
(
bsize
==
BLOCK_
SIZE_SB
64X64
)
{
}
else
if
(
bsize
==
BLOCK_64X64
)
{
block_context
=
x
->
sb32_context
;
}
...
...
@@ -1695,26 +1695,26 @@ static void rd_pick_partition(VP9_COMP *cpi, TOKENEXTRA **tp, int mi_row,
int64_t
d
;
pick_sb_modes
(
cpi
,
mi_row
,
mi_col
,
&
r
,
&
d
,
bsize
,
get_block_context
(
x
,
bsize
),
best_rd
);
if
(
r
!=
INT_MAX
&&
bsize
>=
BLOCK_
SIZE_SB
8X8
)
{
if
(
r
!=
INT_MAX
&&
bsize
>=
BLOCK_8X8
)
{
set_partition_seg_context
(
cm
,
xd
,
mi_row
,
mi_col
);
pl
=
partition_plane_context
(
xd
,
bsize
);
r
+=
x
->
partition_cost
[
pl
][
PARTITION_NONE
];
}
if
(
r
!=
INT_MAX
&&
(
bsize
==
BLOCK_
SIZE_SB
8X8
||
(
bsize
==
BLOCK_8X8
||
RDCOST
(
x
->
rdmult
,
x
->
rddiv
,
r
,
d
)
<
RDCOST
(
x
->
rdmult
,
x
->
rddiv
,
srate
,
sdist
)))
{
best_rd
=
MIN
(
best_rd
,
RDCOST
(
x
->
rdmult
,
x
->
rddiv
,
r
,
d
));
srate
=
r
;
sdist
=
d
;
larger_is_better
=
1
;
if
(
bsize
>=
BLOCK_
SIZE_SB
8X8
)
if
(
bsize
>=
BLOCK_8X8
)
*
(
get_sb_partitioning
(
x
,
bsize
))
=
bsize
;
}
}
if
(
bsize
==
BLOCK_
SIZE_SB
8X8
)
{
if
(
bsize
==
BLOCK_8X8
)
{
int
r4
=
0
;
int64_t
d4
=
0
,
sum_rd
=
0
;
subsize
=
get_subsize
(
bsize
,
PARTITION_SPLIT
);
...
...
@@ -1760,7 +1760,7 @@ static void rd_pick_partition(VP9_COMP *cpi, TOKENEXTRA **tp, int mi_row,
if
(
!
cpi
->
sf
.
use_square_partition_only
&&
(
!
cpi
->
sf
.
less_rectangular_check
||!
larger_is_better
))
{
// PARTITION_HORZ
if
(
bsize
>=
BLOCK_
SIZE_SB
8X8
&&
mi_col
+
(
ms
>>
1
)
<
cm
->
mi_cols
)
{
if
(
bsize
>=
BLOCK_8X8
&&
mi_col
+
(
ms
>>
1
)
<
cm
->
mi_cols
)
{
int
r2
,
r
=
0
;
int64_t
d2
,
d
=
0
,
h_rd
;
subsize
=
get_subsize
(
bsize
,
PARTITION_HORZ
);
...
...
@@ -1799,7 +1799,7 @@ static void rd_pick_partition(VP9_COMP *cpi, TOKENEXTRA **tp, int mi_row,
}
// PARTITION_VERT
if
(
bsize
>=
BLOCK_
SIZE_SB
8X8
&&
mi_row
+
(
ms
>>
1
)
<
cm
->
mi_rows
)
{
if
(
bsize
>=
BLOCK_8X8
&&
mi_row
+
(
ms
>>
1
)
<
cm
->
mi_rows
)
{
int
r2
;
int64_t
d2
,
v_rd
;
subsize
=
get_subsize
(
bsize
,
PARTITION_VERT
);
...
...
@@ -1845,9 +1845,9 @@ static void rd_pick_partition(VP9_COMP *cpi, TOKENEXTRA **tp, int mi_row,
restore_context
(
cpi
,
mi_row
,
mi_col
,
a
,
l
,
sa
,
sl
,
bsize
);
if
(
srate
<
INT_MAX
&&
sdist
<
INT_MAX
&&
do_recon
)
encode_sb
(
cpi
,
tp
,
mi_row
,
mi_col
,
bsize
==
BLOCK_
SIZE_SB
64X64
,
bsize
);
encode_sb
(
cpi
,
tp
,
mi_row
,
mi_col
,
bsize
==
BLOCK_64X64
,
bsize
);
if
(
bsize
==
BLOCK_
SIZE_SB
64X64
)
{
if
(
bsize
==
BLOCK_64X64
)
{
assert
(
tp_orig
<
*
tp
);
assert
(
srate
<
INT_MAX
);
assert
(
sdist
<
INT_MAX
);
...
...
@@ -1861,7 +1861,7 @@ static void rd_pick_reference_frame(VP9_COMP *cpi, int mi_row, int mi_col) {
VP9_COMMON
*
const
cm
=
&
cpi
->
common
;
MACROBLOCK
*
const
x
=
&
cpi
->
mb
;
MACROBLOCKD
*
const
xd
=
&
x
->
e_mbd
;
int
bsl
=
b_width_log2
(
BLOCK_
SIZE_SB
64X64
),
bs
=
1
<<
bsl
;
int
bsl
=
b_width_log2
(
BLOCK_64X64
),
bs
=
1
<<
bsl
;
int
ms
=
bs
/
2
;
ENTROPY_CONTEXT
l
[
16
*
MAX_MB_PLANE
],
a
[
16
*
MAX_MB_PLANE
];
PARTITION_CONTEXT
sl
[
8
],
sa
[
8
];
...
...
@@ -1869,7 +1869,7 @@ static void rd_pick_reference_frame(VP9_COMP *cpi, int mi_row, int mi_col) {
int
r
;
int64_t
d
;
save_context
(
cpi
,
mi_row
,
mi_col
,
a
,
l
,
sa
,
sl
,
BLOCK_
SIZE_SB
64X64
);
save_context
(
cpi
,
mi_row
,
mi_col
,
a
,
l
,
sa
,
sl
,
BLOCK_64X64
);
// Default is non mask (all reference frames allowed.
cpi
->
ref_frame_mask
=
0
;
...
...
@@ -1878,17 +1878,17 @@ static void rd_pick_reference_frame(VP9_COMP *cpi, int mi_row, int mi_col) {
if
((
mi_row
+
(
ms
>>
1
)
<
cm
->
mi_rows
)
&&
(
mi_col
+
(
ms
>>
1
)
<
cm
->
mi_cols
))
{
cpi
->
set_ref_frame_mask
=
1
;
pick_sb_modes
(
cpi
,
mi_row
,
mi_col
,
&
r
,
&
d
,
BLOCK_
SIZE_SB
64X64
,
get_block_context
(
x
,
BLOCK_
SIZE_SB
64X64
),
INT64_MAX
);
pick_sb_modes
(
cpi
,
mi_row
,
mi_col
,
&
r
,
&
d
,
BLOCK_64X64
,
get_block_context
(
x
,
BLOCK_64X64
),
INT64_MAX
);
set_partition_seg_context
(
cm
,
xd
,
mi_row
,
mi_col
);
pl
=
partition_plane_context
(
xd
,
BLOCK_
SIZE_SB
64X64
);
pl
=
partition_plane_context
(
xd
,
BLOCK_64X64
);
r
+=
x
->
partition_cost
[
pl
][
PARTITION_NONE
];
*
(
get_sb_partitioning
(
x
,
BLOCK_
SIZE_SB
64X64
))
=
BLOCK_
SIZE_SB
64X64
;
*
(
get_sb_partitioning
(
x
,
BLOCK_64X64
))
=
BLOCK_64X64
;
cpi
->
set_ref_frame_mask
=
0
;
}
restore_context
(
cpi
,
mi_row
,
mi_col
,
a
,
l
,
sa
,
sl
,
BLOCK_
SIZE_SB
64X64
);
restore_context
(
cpi
,
mi_row
,
mi_col
,
a
,
l
,
sa
,
sl
,
BLOCK_64X64
);
}
static
void
encode_sb_row
(
VP9_COMP
*
cpi
,
int
mi_row
,
TOKENEXTRA
**
tp
,
...
...
@@ -1923,13 +1923,13 @@ static void encode_sb_row(VP9_COMP *cpi, int mi_row, TOKENEXTRA **tp,
MODE_INFO
*
p
=
cm
->
prev_mi
+
idx_str
;
if
(
cpi
->
sf
.
use_one_partition_size_always
)
{
set_offsets
(
cpi
,
mi_row
,
mi_col
,
BLOCK_
SIZE_SB
64X64
);
set_offsets
(
cpi
,
mi_row
,
mi_col
,
BLOCK_64X64
);
set_partitioning
(
cpi
,
m
,
cpi
->
sf
.
always_this_block_size
);
rd_use_partition
(
cpi
,
m
,
tp
,
mi_row
,
mi_col
,
BLOCK_
SIZE_SB
64X64
,
rd_use_partition
(
cpi
,
m
,
tp
,
mi_row
,
mi_col
,
BLOCK_64X64
,
&
dummy_rate
,
&
dummy_dist
,
1
);
}
else
if
(
cpi
->
sf
.
partition_by_variance
)
{
choose_partitioning
(
cpi
,
cm
->
mi
,
mi_row
,
mi_col
);
rd_use_partition
(
cpi
,
m
,
tp
,
mi_row
,
mi_col
,
BLOCK_
SIZE_SB
64X64
,
rd_use_partition
(
cpi
,
m
,
tp
,
mi_row
,
mi_col
,
BLOCK_64X64
,
&
dummy_rate
,
&
dummy_dist
,
1
);
}
else
{
if
((
cpi
->
common
.
current_video_frame
...
...
@@ -1944,11 +1944,11 @@ static void encode_sb_row(VP9_COMP *cpi, int mi_row, TOKENEXTRA **tp,
&
cpi
->
sf
.
min_partition_size
,
&
cpi
->
sf
.
max_partition_size
);
}
rd_pick_partition
(
cpi
,
tp
,
mi_row
,
mi_col
,
BLOCK_
SIZE_SB
64X64
,
rd_pick_partition
(
cpi
,
tp
,
mi_row
,
mi_col
,
BLOCK_64X64
,
&
dummy_rate
,
&
dummy_dist
,
1
,
INT64_MAX
);
}
else
{
copy_partitioning
(
cpi
,
m
,
p
);
rd_use_partition
(
cpi
,
m
,
tp
,
mi_row
,
mi_col
,
BLOCK_
SIZE_SB
64X64
,
rd_use_partition
(
cpi
,
m
,
tp
,
mi_row
,
mi_col
,
BLOCK_64X64
,
&
dummy_rate
,
&
dummy_dist
,
1
);
}
}
...
...
@@ -1959,7 +1959,7 @@ static void encode_sb_row(VP9_COMP *cpi, int mi_row, TOKENEXTRA **tp,
&
cpi
->
sf
.
max_partition_size
);
}
rd_pick_partition
(
cpi
,
tp
,
mi_row
,
mi_col
,
BLOCK_
SIZE_SB
64X64
,
rd_pick_partition
(
cpi
,
tp
,
mi_row
,
mi_col
,
BLOCK_64X64
,
&
dummy_rate
,
&
dummy_dist
,
1
,
INT64_MAX
);
}
}
...
...
@@ -2276,10 +2276,8 @@ static void reset_skip_txfm_size(VP9_COMP *cpi, TX_SIZE txfm_max) {
for
(
mi_row
=
0
;
mi_row
<
cm
->
mi_rows
;
mi_row
+=
8
,
mi_ptr
+=
8
*
mis
)
{
mi
=
mi_ptr
;
for
(
mi_col
=
0
;
mi_col
<
cm
->
mi_cols
;
mi_col
+=
8
,
mi
+=
8
)
{
reset_skip_txfm_size_sb
(
cpi
,
mi
,
txfm_max
,
mi_row
,
mi_col
,
BLOCK_SIZE_SB64X64
);
}
for
(
mi_col
=
0
;
mi_col
<
cm
->
mi_cols
;
mi_col
+=
8
,
mi
+=
8
)
reset_skip_txfm_size_sb
(
cpi
,
mi
,
txfm_max
,
mi_row
,
mi_col
,
BLOCK_64X64
);
}
}
...
...
@@ -2498,7 +2496,7 @@ static void sum_intra_stats(VP9_COMP *cpi, MACROBLOCK *x) {
const
MB_PREDICTION_MODE
uvm
=
xd
->
mode_info_context
->
mbmi
.
uv_mode
;
++
cpi
->
y_uv_mode_count
[
m
][
uvm
];
if
(
xd
->
mode_info_context
->
mbmi
.
sb_type
>=
BLOCK_
SIZE_SB
8X8
)
{
if
(
xd
->
mode_info_context
->
mbmi
.
sb_type
>=
BLOCK_8X8
)
{
const
BLOCK_SIZE_TYPE
bsize
=
xd
->
mode_info_context
->
mbmi
.
sb_type
;
const
int
bwl
=
b_width_log2
(
bsize
),
bhl
=
b_height_log2
(
bsize
);
const
int
bsl
=
MIN
(
bwl
,
bhl
);
...
...
@@ -2579,7 +2577,7 @@ static void encode_superblock(VP9_COMP *cpi, TOKENEXTRA **t, int output_enabled,
cpi
->
zbin_mode_boost
=
GF_ZEROMV_ZBIN_BOOST
;
else
cpi
->
zbin_mode_boost
=
LF_ZEROMV_ZBIN_BOOST
;
}
else
if
(
mbmi
->
sb_type
<
BLOCK_
SIZE_SB
8X8
)
{
}
else
if
(
mbmi
->
sb_type
<
BLOCK_8X8
)
{
cpi
->
zbin_mode_boost
=
SPLIT_MV_ZBIN_BOOST
;
}
else
{
cpi
->
zbin_mode_boost
=
MV_ZBIN_BOOST
;
...
...
@@ -2593,10 +2591,8 @@ static void encode_superblock(VP9_COMP *cpi, TOKENEXTRA **t, int output_enabled,
}
if
(
mbmi
->
ref_frame
[
0
]
==
INTRA_FRAME
)
{
vp9_encode_intra_block_y
(
cm
,
x
,
(
bsize
<
BLOCK_SIZE_SB8X8
)
?
BLOCK_SIZE_SB8X8
:
bsize
);
vp9_encode_intra_block_uv
(
cm
,
x
,
(
bsize
<
BLOCK_SIZE_SB8X8
)
?
BLOCK_SIZE_SB8X8
:
bsize
);
vp9_encode_intra_block_y
(
cm
,
x
,
MAX
(
bsize
,
BLOCK_8X8
));