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
Xiph.Org
aom-rav1e
Commits
ba10aed8
Commit
ba10aed8
authored
Aug 27, 2013
by
Dmitry Kovalev
Committed by
Gerrit Code Review
Aug 27, 2013
Browse files
Merge "Using num_8x8_* lookup tables instead of mi_*_log2."
parents
12e5931a
b25589c6
Changes
2
Hide whitespace changes
Inline
Side-by-side
vp9/encoder/vp9_encodeframe.c
View file @
ba10aed8
...
...
@@ -2228,15 +2228,16 @@ static void set_txfm_flag(MODE_INFO *mi, int mis, int ymbs, int xmbs,
}
static
void
reset_skip_txfm_size_b
(
VP9_COMP
*
cpi
,
MODE_INFO
*
mi
,
int
mis
,
TX_SIZE
txfm_max
,
int
bw
,
int
bh
,
int
mi_row
,
int
mi_col
,
BLOCK_SIZE_TYPE
bsize
)
{
VP9_COMMON
*
const
cm
=
&
cpi
->
common
;
MB_MODE_INFO
*
const
mbmi
=
&
mi
->
mbmi
;
TX_SIZE
max_tx_size
,
int
bw
,
int
bh
,
int
mi_row
,
int
mi_col
,
BLOCK_SIZE_TYPE
bsize
)
{
VP9_COMMON
*
const
cm
=
&
cpi
->
common
;
MB_MODE_INFO
*
const
mbmi
=
&
mi
->
mbmi
;
if
(
mi_row
>=
cm
->
mi_rows
||
mi_col
>=
cm
->
mi_cols
)
return
;
if
(
mbmi
->
txfm_size
>
txfm_max
)
{
if
(
mbmi
->
txfm_size
>
max_tx_size
)
{
MACROBLOCK
*
const
x
=
&
cpi
->
mb
;
MACROBLOCKD
*
const
xd
=
&
x
->
e_mbd
;
const
int
ymbs
=
MIN
(
bh
,
cm
->
mi_rows
-
mi_row
);
...
...
@@ -2245,57 +2246,49 @@ static void reset_skip_txfm_size_b(VP9_COMP *cpi, MODE_INFO *mi, int mis,
xd
->
mode_info_context
=
mi
;
assert
(
vp9_segfeature_active
(
&
cm
->
seg
,
mbmi
->
segment_id
,
SEG_LVL_SKIP
)
||
get_skip_flag
(
mi
,
mis
,
ymbs
,
xmbs
));
set_txfm_flag
(
mi
,
mis
,
ymbs
,
xmbs
,
txfm_max
);
set_txfm_flag
(
mi
,
mis
,
ymbs
,
xmbs
,
max_tx_size
);
}
}
static
void
reset_skip_txfm_size_sb
(
VP9_COMP
*
cpi
,
MODE_INFO
*
mi
,
TX_SIZE
txfm_max
,
int
mi_row
,
int
mi_col
,
TX_SIZE
max_tx_size
,
int
mi_row
,
int
mi_col
,
BLOCK_SIZE_TYPE
bsize
)
{
VP9_COMMON
*
const
cm
=
&
cpi
->
common
;
const
VP9_COMMON
*
const
cm
=
&
cpi
->
common
;
const
int
mis
=
cm
->
mode_info_stride
;
int
bw
l
,
bh
l
;
const
int
bs
l
=
mi
_wid
th
_lo
g2
(
bsize
)
,
bs
=
1
<<
(
bsl
-
1
)
;
int
bw
,
bh
;
const
int
bs
=
num_8x8_blocks
_wid
e
_lo
okup
[
bsize
]
,
h
bs
=
bs
/
2
;
if
(
mi_row
>=
cm
->
mi_rows
||
mi_col
>=
cm
->
mi_cols
)
return
;
bw
l
=
mi
_wid
th
_lo
g2
(
mi
->
mbmi
.
sb_type
)
;
bh
l
=
mi
_h
e
igh
t
_lo
g2
(
mi
->
mbmi
.
sb_type
)
;
bw
=
num_8x8_blocks
_wid
e
_lo
okup
[
mi
->
mbmi
.
sb_type
]
;
bh
=
num_8x8_blocks
_high_lo
okup
[
mi
->
mbmi
.
sb_type
]
;
if
(
bw
l
==
bs
l
&&
bh
l
==
bs
l
)
{
reset_skip_txfm_size_b
(
cpi
,
mi
,
mis
,
txfm_max
,
1
<<
bs
l
,
1
<<
bs
l
,
mi_row
,
if
(
bw
==
bs
&&
bh
==
bs
)
{
reset_skip_txfm_size_b
(
cpi
,
mi
,
mis
,
max_tx_size
,
bs
,
bs
,
mi_row
,
mi_col
,
bsize
);
}
else
if
(
bw
l
==
bs
l
&&
bh
l
<
bs
l
)
{
reset_skip_txfm_size_b
(
cpi
,
mi
,
mis
,
txfm_max
,
1
<<
bs
l
,
bs
,
mi_row
,
mi_col
,
}
else
if
(
bw
==
bs
&&
bh
<
bs
)
{
reset_skip_txfm_size_b
(
cpi
,
mi
,
mis
,
max_tx_size
,
bs
,
h
bs
,
mi_row
,
mi_col
,
bsize
);
reset_skip_txfm_size_b
(
cpi
,
mi
+
bs
*
mis
,
mis
,
txfm_max
,
1
<<
bs
l
,
bs
,
mi_row
+
bs
,
mi_col
,
bsize
);
}
else
if
(
bw
l
<
bs
l
&&
bh
l
==
bs
l
)
{
reset_skip_txfm_size_b
(
cpi
,
mi
,
mis
,
txfm_max
,
bs
,
1
<<
bs
l
,
mi_row
,
mi_col
,
reset_skip_txfm_size_b
(
cpi
,
mi
+
h
bs
*
mis
,
mis
,
max_tx_size
,
bs
,
h
bs
,
mi_row
+
h
bs
,
mi_col
,
bsize
);
}
else
if
(
bw
<
bs
&&
bh
==
bs
)
{
reset_skip_txfm_size_b
(
cpi
,
mi
,
mis
,
max_tx_size
,
h
bs
,
bs
,
mi_row
,
mi_col
,
bsize
);
reset_skip_txfm_size_b
(
cpi
,
mi
+
bs
,
mis
,
txfm_max
,
bs
,
1
<<
bs
l
,
mi_row
,
mi_col
+
bs
,
bsize
);
reset_skip_txfm_size_b
(
cpi
,
mi
+
h
bs
,
mis
,
max_tx_size
,
h
bs
,
bs
,
mi_row
,
mi_col
+
h
bs
,
bsize
);
}
else
{
BLOCK_SIZE_TYPE
subsize
;
const
BLOCK_SIZE_TYPE
subsize
=
subsize_lookup
[
PARTITION_SPLIT
][
bsize
]
;
int
n
;
assert
(
bwl
<
bsl
&&
bhl
<
bsl
);
if
(
bsize
==
BLOCK_64X64
)
{
subsize
=
BLOCK_32X32
;
}
else
if
(
bsize
==
BLOCK_32X32
)
{
subsize
=
BLOCK_16X16
;
}
else
{
assert
(
bsize
==
BLOCK_16X16
);
subsize
=
BLOCK_8X8
;
}
assert
(
bw
<
bs
&&
bh
<
bs
);
for
(
n
=
0
;
n
<
4
;
n
++
)
{
const
int
y_idx
=
n
>>
1
,
x_idx
=
n
&
0x01
;
const
int
mi_dc
=
hbs
*
(
n
&
1
);
const
int
mi_dr
=
hbs
*
(
n
>>
1
);
reset_skip_txfm_size_sb
(
cpi
,
mi
+
y_idx
*
bs
*
mis
+
x_idx
*
bs
,
txfm_max
,
mi_row
+
y_idx
*
bs
,
mi_col
+
x_idx
*
bs
,
subsize
);
reset_skip_txfm_size_sb
(
cpi
,
&
mi
[
mi_dr
*
mis
+
mi_dc
],
max_tx_size
,
mi_row
+
mi_dr
,
mi_col
+
mi_dc
,
subsize
);
}
}
}
...
...
vp9/encoder/vp9_segmentation.c
View file @
ba10aed8
...
...
@@ -162,51 +162,44 @@ static void count_segs_sb(VP9_COMP *cpi, MODE_INFO *mi,
int
*
t_unpred_seg_counts
,
int
mi_row
,
int
mi_col
,
BLOCK_SIZE_TYPE
bsize
)
{
VP9_COMMON
*
const
cm
=
&
cpi
->
common
;
const
VP9_COMMON
*
const
cm
=
&
cpi
->
common
;
const
int
mis
=
cm
->
mode_info_stride
;
int
bw
l
,
bh
l
;
const
int
bs
l
=
mi
_wid
th
_lo
g2
(
bsize
)
,
bs
=
1
<<
(
bsl
-
1
)
;
int
bw
,
bh
;
const
int
bs
=
num_8x8_blocks
_wid
e
_lo
okup
[
bsize
]
,
h
bs
=
bs
/
2
;
if
(
mi_row
>=
cm
->
mi_rows
||
mi_col
>=
cm
->
mi_cols
)
return
;
bw
l
=
mi
_wid
th
_lo
g2
(
mi
->
mbmi
.
sb_type
)
;
bh
l
=
mi
_h
e
igh
t
_lo
g2
(
mi
->
mbmi
.
sb_type
)
;
bw
=
num_8x8_blocks
_wid
e
_lo
okup
[
mi
->
mbmi
.
sb_type
]
;
bh
=
num_8x8_blocks
_high_lo
okup
[
mi
->
mbmi
.
sb_type
]
;
if
(
bw
l
==
bs
l
&&
bh
l
==
bs
l
)
{
if
(
bw
==
bs
&&
bh
==
bs
)
{
count_segs
(
cpi
,
mi
,
no_pred_segcounts
,
temporal_predictor_count
,
t_unpred_seg_counts
,
1
<<
bs
l
,
1
<<
bs
l
,
mi_row
,
mi_col
);
}
else
if
(
bw
l
==
bs
l
&&
bh
l
<
bs
l
)
{
t_unpred_seg_counts
,
bs
,
bs
,
mi_row
,
mi_col
);
}
else
if
(
bw
==
bs
&&
bh
<
bs
)
{
count_segs
(
cpi
,
mi
,
no_pred_segcounts
,
temporal_predictor_count
,
t_unpred_seg_counts
,
1
<<
bs
l
,
bs
,
mi_row
,
mi_col
);
count_segs
(
cpi
,
mi
+
bs
*
mis
,
no_pred_segcounts
,
temporal_predictor_count
,
t_unpred_seg_counts
,
1
<<
bs
l
,
bs
,
mi_row
+
bs
,
mi_col
);
}
else
if
(
bw
l
<
bs
l
&&
bh
l
==
bs
l
)
{
t_unpred_seg_counts
,
bs
,
h
bs
,
mi_row
,
mi_col
);
count_segs
(
cpi
,
mi
+
h
bs
*
mis
,
no_pred_segcounts
,
temporal_predictor_count
,
t_unpred_seg_counts
,
bs
,
h
bs
,
mi_row
+
h
bs
,
mi_col
);
}
else
if
(
bw
<
bs
&&
bh
==
bs
)
{
count_segs
(
cpi
,
mi
,
no_pred_segcounts
,
temporal_predictor_count
,
t_unpred_seg_counts
,
bs
,
1
<<
bs
l
,
mi_row
,
mi_col
);
count_segs
(
cpi
,
mi
+
bs
,
no_pred_segcounts
,
temporal_predictor_count
,
t_unpred_seg_counts
,
bs
,
1
<<
bs
l
,
mi_row
,
mi_col
+
bs
);
t_unpred_seg_counts
,
h
bs
,
bs
,
mi_row
,
mi_col
);
count_segs
(
cpi
,
mi
+
h
bs
,
no_pred_segcounts
,
temporal_predictor_count
,
t_unpred_seg_counts
,
h
bs
,
bs
,
mi_row
,
mi_col
+
h
bs
);
}
else
{
BLOCK_SIZE_TYPE
subsize
;
const
BLOCK_SIZE_TYPE
subsize
=
subsize_lookup
[
PARTITION_SPLIT
][
bsize
]
;
int
n
;
assert
(
bwl
<
bsl
&&
bhl
<
bsl
);
if
(
bsize
==
BLOCK_64X64
)
{
subsize
=
BLOCK_32X32
;
}
else
if
(
bsize
==
BLOCK_32X32
)
{
subsize
=
BLOCK_16X16
;
}
else
{
assert
(
bsize
==
BLOCK_16X16
);
subsize
=
BLOCK_8X8
;
}
assert
(
bw
<
bs
&&
bh
<
bs
);
for
(
n
=
0
;
n
<
4
;
n
++
)
{
const
int
y_idx
=
n
>>
1
,
x_idx
=
n
&
0x01
;
const
int
mi_dc
=
hbs
*
(
n
&
1
);
const
int
mi_dr
=
hbs
*
(
n
>>
1
);
count_segs_sb
(
cpi
,
mi
+
y_idx
*
bs
*
mis
+
x_idx
*
bs
,
count_segs_sb
(
cpi
,
&
mi
[
mi_dr
*
mis
+
mi_dc
]
,
no_pred_segcounts
,
temporal_predictor_count
,
t_unpred_seg_counts
,
mi_row
+
y_idx
*
bs
,
mi_col
+
x_idx
*
bs
,
subsize
);
mi_row
+
mi_dr
,
mi_col
+
mi_dc
,
subsize
);
}
}
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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