Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
aom-rav1e
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Xiph.Org
aom-rav1e
Commits
ccbefec3
Commit
ccbefec3
authored
Aug 23, 2016
by
Debargha Mukherjee
Committed by
Gerrit Code Review
Aug 23, 2016
Browse files
Options
Browse Files
Download
Plain Diff
Merge "Various rect-tx fixes" into nextgenv2
parents
88849e13
44026851
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
56 additions
and
35 deletions
+56
-35
vp10/common/blockd.h
vp10/common/blockd.h
+1
-1
vp10/common/entropymode.h
vp10/common/entropymode.h
+1
-0
vp10/common/loopfilter.c
vp10/common/loopfilter.c
+2
-2
vp10/decoder/decodeframe.c
vp10/decoder/decodeframe.c
+1
-1
vp10/decoder/decodemv.c
vp10/decoder/decodemv.c
+8
-1
vp10/decoder/detokenize.c
vp10/decoder/detokenize.c
+2
-2
vp10/encoder/bitstream.c
vp10/encoder/bitstream.c
+15
-10
vp10/encoder/encodeframe.c
vp10/encoder/encodeframe.c
+11
-5
vp10/encoder/encodemb.c
vp10/encoder/encodemb.c
+5
-4
vp10/encoder/rdopt.c
vp10/encoder/rdopt.c
+5
-5
vp10/encoder/tokenize.c
vp10/encoder/tokenize.c
+5
-4
No files found.
vp10/common/blockd.h
View file @
ccbefec3
...
...
@@ -670,7 +670,7 @@ static INLINE TX_SIZE get_uv_tx_size_impl(TX_SIZE y_tx_size, BLOCK_SIZE bsize,
return
TX_4X4
;
}
else
{
const
BLOCK_SIZE
plane_bsize
=
ss_size_lookup
[
bsize
][
xss
][
yss
];
return
VPXMIN
(
y_tx_size
,
max_txsize_lookup
[
plane_bsize
]);
return
VPXMIN
(
txsize_sqr_map
[
y_tx_size
]
,
max_txsize_lookup
[
plane_bsize
]);
}
}
...
...
vp10/common/entropymode.h
View file @
ccbefec3
...
...
@@ -172,6 +172,7 @@ typedef struct FRAME_COUNTS {
unsigned
int
comp_ref
[
REF_CONTEXTS
][
COMP_REFS
-
1
][
2
];
#endif // CONFIG_EXT_REFS
unsigned
int
tx_size_totals
[
TX_SIZES
];
unsigned
int
tx_size_implied
[
TX_SIZES
][
TX_SIZES
];
unsigned
int
tx_size
[
TX_SIZES
-
1
][
TX_SIZE_CONTEXTS
][
TX_SIZES
];
#if CONFIG_VAR_TX
unsigned
int
txfm_partition
[
TXFM_PARTITION_CONTEXTS
][
2
];
...
...
vp10/common/loopfilter.c
View file @
ccbefec3
...
...
@@ -710,7 +710,7 @@ static void build_masks(const loop_filter_info_n *const lfi_n,
const
BLOCK_SIZE
block_size
=
mbmi
->
sb_type
;
// TODO(debargha): Check if masks can be setup correctly when
// rectangular transfroms are used with the EXT_TX expt.
const
TX_SIZE
tx_size_y
=
txsize_sqr_map
[
mbmi
->
tx_size
];
const
TX_SIZE
tx_size_y
=
txsize_sqr_
up_
map
[
mbmi
->
tx_size
];
const
TX_SIZE
tx_size_uv
=
get_uv_tx_size_impl
(
mbmi
->
tx_size
,
block_size
,
1
,
1
);
const
int
filter_level
=
get_filter_level
(
lfi_n
,
mbmi
);
...
...
@@ -791,7 +791,7 @@ static void build_y_mask(const loop_filter_info_n *const lfi_n,
#endif // CONFIG_SUPERTX
LOOP_FILTER_MASK
*
lfm
)
{
const
MB_MODE_INFO
*
mbmi
=
&
mi
->
mbmi
;
const
TX_SIZE
tx_size_y
=
txsize_sqr_map
[
mbmi
->
tx_size
];
const
TX_SIZE
tx_size_y
=
txsize_sqr_
up_
map
[
mbmi
->
tx_size
];
#if CONFIG_SUPERTX
const
BLOCK_SIZE
block_size
=
supertx_enabled
?
(
BLOCK_SIZE
)(
3
*
tx_size_y
)
:
mbmi
->
sb_type
;
...
...
vp10/decoder/decodeframe.c
View file @
ccbefec3
...
...
@@ -389,7 +389,7 @@ static INLINE TX_SIZE dec_get_uv_tx_size(const MB_MODE_INFO *mbmi, int n4_wl,
int
n4_hl
)
{
// get minimum log2 num4x4s dimension
const
int
x
=
VPXMIN
(
n4_wl
,
n4_hl
);
return
VPXMIN
(
mbmi
->
tx_size
,
x
);
return
VPXMIN
(
txsize_sqr_map
[
mbmi
->
tx_size
]
,
x
);
}
static
INLINE
void
dec_reset_skip_context
(
MACROBLOCKD
*
xd
)
{
...
...
vp10/decoder/decodemv.c
View file @
ccbefec3
...
...
@@ -306,10 +306,17 @@ static TX_SIZE read_tx_size_inter(VP10_COMMON *cm, MACROBLOCKD *xd,
if
(
allow_select
&&
tx_mode
==
TX_MODE_SELECT
)
{
return
read_selected_tx_size
(
cm
,
xd
,
max_tx_size
,
r
);
}
else
{
return
VPXMIN
(
max_tx_size
,
tx_mode_to_biggest_tx_size
[
tx_mode
]);
TX_SIZE
tx_size
=
VPXMIN
(
max_tx_size
,
tx_mode_to_biggest_tx_size
[
tx_mode
]);
#if CONFIG_EXT_TX && CONFIG_RECT_TX
if
(
txsize_sqr_map
[
max_txsize_rect_lookup
[
bsize
]]
<=
tx_size
)
tx_size
=
max_txsize_rect_lookup
[
bsize
];
#endif // CONFIG_EXT_TX && CONFIG_RECT_TX
return
tx_size
;
}
}
else
{
#if CONFIG_EXT_TX && CONFIG_RECT_TX && !CONFIG_VAR_TX
assert
(
IMPLIES
(
tx_mode
==
ONLY_4X4
,
bsize
==
BLOCK_4X4
));
return
max_txsize_rect_lookup
[
bsize
];
#else
return
TX_4X4
;
...
...
vp10/decoder/detokenize.c
View file @
ccbefec3
...
...
@@ -186,7 +186,7 @@ static int decode_coefs(const MACROBLOCKD *xd, PLANE_TYPE type,
val
=
CAT5_MIN_VAL
+
read_coeff
(
cat5_prob
,
5
,
r
);
break
;
case
CATEGORY6_TOKEN
:
{
const
int
skip_bits
=
TX_SIZES
-
1
-
tx
_size
;
const
int
skip_bits
=
TX_SIZES
-
1
-
tx
size_sqr_up_map
[
tx_size
]
;
const
uint8_t
*
cat6p
=
cat6_prob
+
skip_bits
;
#if CONFIG_VP9_HIGHBITDEPTH
switch
(
xd
->
bd
)
{
...
...
@@ -369,7 +369,7 @@ static int decode_coefs_ans(const MACROBLOCKD *const xd, PLANE_TYPE type,
val
=
CAT5_MIN_VAL
+
read_coeff
(
cat5_prob
,
5
,
ans
);
break
;
case
CATEGORY6_TOKEN
:
{
const
int
skip_bits
=
TX_SIZES
-
1
-
tx
_size
;
const
int
skip_bits
=
TX_SIZES
-
1
-
tx
size_sqr_up_map
[
tx_size
]
;
const
uint8_t
*
cat6p
=
cat6_prob
+
skip_bits
;
#if CONFIG_VP9_HIGHBITDEPTH
switch
(
xd
->
bd
)
{
...
...
vp10/encoder/bitstream.c
View file @
ccbefec3
...
...
@@ -332,7 +332,7 @@ static int prob_diff_update_savings(const vpx_tree_index *tree,
}
#if CONFIG_VAR_TX
static
void
write_tx_size_
inter
(
const
VP10_COMMON
*
cm
,
const
MACROBLOCKD
*
xd
,
static
void
write_tx_size_
vartx
(
const
VP10_COMMON
*
cm
,
const
MACROBLOCKD
*
xd
,
const
MB_MODE_INFO
*
mbmi
,
TX_SIZE
tx_size
,
int
blk_row
,
int
blk_col
,
vp10_writer
*
w
)
{
const
int
tx_row
=
blk_row
>>
1
;
...
...
@@ -368,7 +368,7 @@ static void write_tx_size_inter(const VP10_COMMON *cm, const MACROBLOCKD *xd,
for
(
i
=
0
;
i
<
4
;
++
i
)
{
int
offsetr
=
blk_row
+
((
i
>>
1
)
<<
bsl
);
int
offsetc
=
blk_col
+
((
i
&
0x01
)
<<
bsl
);
write_tx_size_
inter
(
cm
,
xd
,
mbmi
,
tx_size
-
1
,
offsetr
,
offsetc
,
w
);
write_tx_size_
vartx
(
cm
,
xd
,
mbmi
,
tx_size
-
1
,
offsetr
,
offsetc
,
w
);
}
}
}
...
...
@@ -608,7 +608,7 @@ static void pack_mb_tokens(vp10_writer *w, const TOKENEXTRA **tp,
const
TOKENEXTRA
*
p
=
*
tp
;
#if CONFIG_VAR_TX
int
count
=
0
;
const
int
seg_eob
=
16
<<
(
tx
<<
1
);
const
int
seg_eob
=
get_tx2d_size
(
tx
);
#endif
while
(
p
<
stop
&&
p
->
token
!=
EOSB_TOKEN
)
{
...
...
@@ -652,7 +652,9 @@ static void pack_mb_tokens(vp10_writer *w, const TOKENEXTRA **tp,
if
(
b
->
base_val
)
{
const
int
e
=
p
->
extra
,
l
=
b
->
len
;
int
skip_bits
=
(
b
->
base_val
==
CAT6_MIN_VAL
)
?
TX_SIZES
-
1
-
tx
:
0
;
int
skip_bits
=
(
b
->
base_val
==
CAT6_MIN_VAL
)
?
TX_SIZES
-
1
-
txsize_sqr_up_map
[
tx
]
:
0
;
if
(
l
)
{
const
unsigned
char
*
pb
=
b
->
prob
;
...
...
@@ -725,7 +727,9 @@ static void pack_mb_tokens(struct BufAnsCoder *ans, const TOKENEXTRA **tp,
if
(
b
->
base_val
)
{
const
int
e
=
p
->
extra
,
l
=
b
->
len
;
int
skip_bits
=
(
b
->
base_val
==
CAT6_MIN_VAL
)
?
TX_SIZES
-
1
-
tx
:
0
;
int
skip_bits
=
(
b
->
base_val
==
CAT6_MIN_VAL
)
?
TX_SIZES
-
1
-
txsize_sqr_up_map
[
tx
]
:
0
;
if
(
l
)
{
const
unsigned
char
*
pb
=
b
->
prob
;
...
...
@@ -771,10 +775,7 @@ static void pack_txb_tokens(vp10_writer *w, const TOKENEXTRA **tp,
const
BLOCK_SIZE
bsize
=
txsize_to_bsize
[
tx_size
];
const
int
tx_row
=
blk_row
>>
(
1
-
pd
->
subsampling_y
);
const
int
tx_col
=
blk_col
>>
(
1
-
pd
->
subsampling_x
);
const
TX_SIZE
plane_tx_size
=
plane
?
get_uv_tx_size_impl
(
mbmi
->
inter_tx_size
[
tx_row
][
tx_col
],
bsize
,
0
,
0
)
:
mbmi
->
inter_tx_size
[
tx_row
][
tx_col
];
TX_SIZE
plane_tx_size
;
int
max_blocks_high
=
num_4x4_blocks_high_lookup
[
plane_bsize
];
int
max_blocks_wide
=
num_4x4_blocks_wide_lookup
[
plane_bsize
];
...
...
@@ -785,6 +786,10 @@ static void pack_txb_tokens(vp10_writer *w, const TOKENEXTRA **tp,
if
(
blk_row
>=
max_blocks_high
||
blk_col
>=
max_blocks_wide
)
return
;
plane_tx_size
=
plane
?
get_uv_tx_size_impl
(
mbmi
->
inter_tx_size
[
tx_row
][
tx_col
],
bsize
,
0
,
0
)
:
mbmi
->
inter_tx_size
[
tx_row
][
tx_col
];
if
(
tx_size
==
plane_tx_size
)
{
pack_mb_tokens
(
w
,
tp
,
tok_end
,
bit_depth
,
tx_size
);
}
else
{
...
...
@@ -1111,7 +1116,7 @@ static void pack_inter_mode_mvs(VP10_COMP *cpi, const MODE_INFO *mi,
int
idx
,
idy
;
for
(
idy
=
0
;
idy
<
height
;
idy
+=
bs
)
for
(
idx
=
0
;
idx
<
width
;
idx
+=
bs
)
write_tx_size_
inter
(
cm
,
xd
,
mbmi
,
max_tx_size
,
idy
,
idx
,
w
);
write_tx_size_
vartx
(
cm
,
xd
,
mbmi
,
max_tx_size
,
idy
,
idx
,
w
);
}
else
{
set_txfm_ctx
(
xd
->
left_txfm_context
,
mbmi
->
tx_size
,
xd
->
n8_h
);
set_txfm_ctx
(
xd
->
above_txfm_context
,
mbmi
->
tx_size
,
xd
->
n8_w
);
...
...
vp10/encoder/encodeframe.c
View file @
ccbefec3
...
...
@@ -5025,28 +5025,34 @@ static void encode_superblock(VP10_COMP *cpi, ThreadData *td, TOKENEXTRA **t,
if
(
output_enabled
)
{
if
(
cm
->
tx_mode
==
TX_MODE_SELECT
&&
mbmi
->
sb_type
>=
BLOCK_8X8
&&
!
(
is_inter_block
(
mbmi
)
&&
(
mbmi
->
skip
||
seg_skip
)))
{
const
int
ctx
=
get_tx_size_context
(
xd
);
const
int
tx_size_cat
=
max_txsize_lookup
[
bsize
]
-
TX_8X8
;
#if CONFIG_VAR_TX
if
(
is_inter_block
(
mbmi
))
tx_partition_count_update
(
cm
,
xd
,
bsize
,
mi_row
,
mi_col
,
td
->
counts
);
#endif
++
td
->
counts
->
tx_size
[
max_txsize_lookup
[
bsize
]
-
TX_8X8
][
get_tx_size_context
(
xd
)][
mbmi
->
tx_size
];
++
td
->
counts
->
tx_size
[
tx_size_cat
][
ctx
][
mbmi
->
tx_size
];
}
else
{
int
x
,
y
;
TX_SIZE
tx_size
;
// The new intra coding scheme requires no change of transform size
if
(
is_inter_block
(
&
mi
->
mbmi
))
if
(
is_inter_block
(
&
mi
->
mbmi
))
{
tx_size
=
VPXMIN
(
tx_mode_to_biggest_tx_size
[
cm
->
tx_mode
],
max_txsize_lookup
[
bsize
]);
else
#if CONFIG_EXT_TX && CONFIG_RECT_TX
if
(
txsize_sqr_map
[
max_txsize_rect_lookup
[
bsize
]]
<=
tx_size
)
tx_size
=
max_txsize_rect_lookup
[
bsize
];
#endif // CONFIG_EXT_TX && CONFIG_RECT_TX
}
else
{
tx_size
=
(
bsize
>=
BLOCK_8X8
)
?
mbmi
->
tx_size
:
TX_4X4
;
}
for
(
y
=
0
;
y
<
mi_height
;
y
++
)
for
(
x
=
0
;
x
<
mi_width
;
x
++
)
if
(
mi_col
+
x
<
cm
->
mi_cols
&&
mi_row
+
y
<
cm
->
mi_rows
)
mi_8x8
[
mis
*
y
+
x
]
->
mbmi
.
tx_size
=
tx_size
;
}
++
td
->
counts
->
tx_size_totals
[
mbmi
->
tx_size
];
++
td
->
counts
->
tx_size_totals
[
txsize_sqr_map
[
mbmi
->
tx_size
]
];
++
td
->
counts
->
tx_size_totals
[
get_uv_tx_size
(
mbmi
,
&
xd
->
plane
[
1
])];
#if CONFIG_EXT_TX
if
(
get_ext_tx_types
(
mbmi
->
tx_size
,
bsize
,
is_inter_block
(
mbmi
))
>
1
&&
...
...
vp10/encoder/encodemb.c
View file @
ccbefec3
...
...
@@ -863,10 +863,7 @@ static void encode_block_inter(int plane, int block, int blk_row, int blk_col,
const
struct
macroblockd_plane
*
const
pd
=
&
xd
->
plane
[
plane
];
const
int
tx_row
=
blk_row
>>
(
1
-
pd
->
subsampling_y
);
const
int
tx_col
=
blk_col
>>
(
1
-
pd
->
subsampling_x
);
const
TX_SIZE
plane_tx_size
=
plane
?
get_uv_tx_size_impl
(
mbmi
->
inter_tx_size
[
tx_row
][
tx_col
],
bsize
,
0
,
0
)
:
mbmi
->
inter_tx_size
[
tx_row
][
tx_col
];
TX_SIZE
plane_tx_size
;
int
max_blocks_high
=
num_4x4_blocks_high_lookup
[
plane_bsize
];
int
max_blocks_wide
=
num_4x4_blocks_wide_lookup
[
plane_bsize
];
...
...
@@ -878,6 +875,10 @@ static void encode_block_inter(int plane, int block, int blk_row, int blk_col,
if
(
blk_row
>=
max_blocks_high
||
blk_col
>=
max_blocks_wide
)
return
;
plane_tx_size
=
plane
?
get_uv_tx_size_impl
(
mbmi
->
inter_tx_size
[
tx_row
][
tx_col
],
bsize
,
0
,
0
)
:
mbmi
->
inter_tx_size
[
tx_row
][
tx_col
];
if
(
tx_size
==
plane_tx_size
)
{
encode_block
(
plane
,
block
,
blk_row
,
blk_col
,
plane_bsize
,
tx_size
,
arg
);
}
else
{
...
...
vp10/encoder/rdopt.c
View file @
ccbefec3
...
...
@@ -3302,11 +3302,7 @@ static void tx_block_rd(const VP10_COMP *cpi, MACROBLOCK *x, int blk_row,
BLOCK_SIZE bsize = txsize_to_bsize[tx_size];
const int tx_row = blk_row >> (1 - pd->subsampling_y);
const int tx_col = blk_col >> (1 - pd->subsampling_x);
const TX_SIZE plane_tx_size =
plane ? get_uv_tx_size_impl(mbmi->inter_tx_size[tx_row][tx_col], bsize, 0,
0)
: mbmi->inter_tx_size[tx_row][tx_col];
TX_SIZE plane_tx_size;
int max_blocks_high = num_4x4_blocks_high_lookup[plane_bsize];
int max_blocks_wide = num_4x4_blocks_wide_lookup[plane_bsize];
...
...
@@ -3321,6 +3317,10 @@ static void tx_block_rd(const VP10_COMP *cpi, MACROBLOCK *x, int blk_row,
if (blk_row >= max_blocks_high || blk_col >= max_blocks_wide) return;
plane_tx_size = plane ? get_uv_tx_size_impl(
mbmi->inter_tx_size[tx_row][tx_col], bsize, 0, 0)
: mbmi->inter_tx_size[tx_row][tx_col];
if (tx_size == plane_tx_size) {
int coeff_ctx, i;
ENTROPY_CONTEXT *ta = above_ctx + blk_col;
...
...
vp10/encoder/tokenize.c
View file @
ccbefec3
...
...
@@ -569,10 +569,7 @@ void tokenize_tx(ThreadData *td, TOKENEXTRA **t, int dry_run, TX_SIZE tx_size,
const
BLOCK_SIZE
bsize
=
txsize_to_bsize
[
tx_size
];
const
int
tx_row
=
blk_row
>>
(
1
-
pd
->
subsampling_y
);
const
int
tx_col
=
blk_col
>>
(
1
-
pd
->
subsampling_x
);
const
TX_SIZE
plane_tx_size
=
plane
?
get_uv_tx_size_impl
(
mbmi
->
inter_tx_size
[
tx_row
][
tx_col
],
bsize
,
0
,
0
)
:
mbmi
->
inter_tx_size
[
tx_row
][
tx_col
];
TX_SIZE
plane_tx_size
;
int
max_blocks_high
=
num_4x4_blocks_high_lookup
[
plane_bsize
];
int
max_blocks_wide
=
num_4x4_blocks_wide_lookup
[
plane_bsize
];
...
...
@@ -586,6 +583,10 @@ void tokenize_tx(ThreadData *td, TOKENEXTRA **t, int dry_run, TX_SIZE tx_size,
if
(
blk_row
>=
max_blocks_high
||
blk_col
>=
max_blocks_wide
)
return
;
plane_tx_size
=
plane
?
get_uv_tx_size_impl
(
mbmi
->
inter_tx_size
[
tx_row
][
tx_col
],
bsize
,
0
,
0
)
:
mbmi
->
inter_tx_size
[
tx_row
][
tx_col
];
if
(
tx_size
==
plane_tx_size
)
{
const
struct
macroblockd_plane
*
const
pd
=
&
xd
->
plane
[
plane
];
BLOCK_SIZE
plane_bsize
=
get_plane_block_size
(
mbmi
->
sb_type
,
pd
);
...
...
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