summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibVideo/VP9
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries/LibVideo/VP9')
-rw-r--r--Userland/Libraries/LibVideo/VP9/Context.h2
-rw-r--r--Userland/Libraries/LibVideo/VP9/Decoder.cpp2
-rw-r--r--Userland/Libraries/LibVideo/VP9/Parser.cpp29
-rw-r--r--Userland/Libraries/LibVideo/VP9/Parser.h5
4 files changed, 19 insertions, 19 deletions
diff --git a/Userland/Libraries/LibVideo/VP9/Context.h b/Userland/Libraries/LibVideo/VP9/Context.h
index 9e8d10a2af..6dbf6228d3 100644
--- a/Userland/Libraries/LibVideo/VP9/Context.h
+++ b/Userland/Libraries/LibVideo/VP9/Context.h
@@ -329,6 +329,8 @@ public:
u16 header_size_in_bytes { 0 };
+ TXMode transform_mode;
+
private:
friend struct TileContext;
diff --git a/Userland/Libraries/LibVideo/VP9/Decoder.cpp b/Userland/Libraries/LibVideo/VP9/Decoder.cpp
index 4f194e21c2..790e003f4d 100644
--- a/Userland/Libraries/LibVideo/VP9/Decoder.cpp
+++ b/Userland/Libraries/LibVideo/VP9/Decoder.cpp
@@ -298,7 +298,7 @@ DecoderErrorOr<void> Decoder::adapt_non_coef_probs(FrameContext const& frame_con
if (frame_context.interpolation_filter == Switchable) {
ADAPT_TREE(interp_filter, interp_filter, interp_filter, INTERP_FILTER_CONTEXTS);
}
- if (m_parser->m_tx_mode == TXModeSelect) {
+ if (frame_context.transform_mode == TXModeSelect) {
for (size_t i = 0; i < TX_SIZE_CONTEXTS; i++) {
auto& tx_probs = probs.tx_probs();
auto& tx_counts = counter.m_counts_tx_size;
diff --git a/Userland/Libraries/LibVideo/VP9/Parser.cpp b/Userland/Libraries/LibVideo/VP9/Parser.cpp
index 34f5950a9f..fd803c93dc 100644
--- a/Userland/Libraries/LibVideo/VP9/Parser.cpp
+++ b/Userland/Libraries/LibVideo/VP9/Parser.cpp
@@ -542,10 +542,10 @@ void Parser::setup_past_independence()
DecoderErrorOr<void> Parser::compressed_header(FrameContext& frame_context)
{
- TRY(read_tx_mode(frame_context));
- if (m_tx_mode == TXModeSelect)
+ frame_context.transform_mode = TRY(read_tx_mode(frame_context));
+ if (frame_context.transform_mode == TXModeSelect)
TRY(tx_mode_probs());
- TRY(read_coef_probs());
+ TRY(read_coef_probs(frame_context.transform_mode));
TRY(read_skip_prob());
if (frame_context.is_inter_predicted()) {
TRY(read_inter_mode_probs());
@@ -561,17 +561,16 @@ DecoderErrorOr<void> Parser::compressed_header(FrameContext& frame_context)
return {};
}
-DecoderErrorOr<void> Parser::read_tx_mode(FrameContext const& frame_context)
+DecoderErrorOr<TXMode> Parser::read_tx_mode(FrameContext const& frame_context)
{
if (frame_context.is_lossless()) {
- m_tx_mode = Only_4x4;
- } else {
- auto tx_mode = TRY_READ(m_bit_stream->read_literal(2));
- if (tx_mode == Allow_32x32)
- tx_mode += TRY_READ(m_bit_stream->read_literal(1));
- m_tx_mode = static_cast<TXMode>(tx_mode);
+ return TXMode::Only_4x4;
}
- return {};
+
+ auto tx_mode = TRY_READ(m_bit_stream->read_literal(2));
+ if (tx_mode == Allow_32x32)
+ tx_mode += TRY_READ(m_bit_stream->read_literal(1));
+ return static_cast<TXMode>(tx_mode);
}
DecoderErrorOr<void> Parser::tx_mode_probs()
@@ -635,9 +634,9 @@ u8 Parser::inv_recenter_nonneg(u8 v, u8 m)
return m + (v >> 1u);
}
-DecoderErrorOr<void> Parser::read_coef_probs()
+DecoderErrorOr<void> Parser::read_coef_probs(TXMode transform_mode)
{
- auto max_tx_size = tx_mode_to_biggest_tx_size[m_tx_mode];
+ auto max_tx_size = tx_mode_to_biggest_tx_size[transform_mode];
for (u8 tx_size = 0; tx_size <= max_tx_size; tx_size++) {
auto update_probs = TRY_READ(m_bit_stream->read_literal(1));
if (update_probs == 1) {
@@ -1047,9 +1046,9 @@ bool Parser::seg_feature_active(BlockContext const& block_context, u8 feature)
DecoderErrorOr<TXSize> Parser::read_tx_size(BlockContext& block_context, FrameBlockContext above_context, FrameBlockContext left_context, bool allow_select)
{
auto max_tx_size = max_txsize_lookup[block_context.size];
- if (allow_select && m_tx_mode == TXModeSelect && block_context.size >= Block_8x8)
+ if (allow_select && block_context.frame_context.transform_mode == TXModeSelect && block_context.size >= Block_8x8)
return (TRY_READ(TreeParser::parse_tx_size(*m_bit_stream, *m_probability_tables, *m_syntax_element_counter, max_tx_size, above_context, left_context)));
- return min(max_tx_size, tx_mode_to_biggest_tx_size[m_tx_mode]);
+ return min(max_tx_size, tx_mode_to_biggest_tx_size[block_context.frame_context.transform_mode]);
}
DecoderErrorOr<void> Parser::inter_frame_mode_info(BlockContext& block_context, FrameBlockContext above_context, FrameBlockContext left_context)
diff --git a/Userland/Libraries/LibVideo/VP9/Parser.h b/Userland/Libraries/LibVideo/VP9/Parser.h
index b572508530..be6abc78eb 100644
--- a/Userland/Libraries/LibVideo/VP9/Parser.h
+++ b/Userland/Libraries/LibVideo/VP9/Parser.h
@@ -74,13 +74,13 @@ private:
/* (6.3) Compressed Header Syntax */
DecoderErrorOr<void> compressed_header(FrameContext&);
- DecoderErrorOr<void> read_tx_mode(FrameContext const&);
+ DecoderErrorOr<TXMode> read_tx_mode(FrameContext const&);
DecoderErrorOr<void> tx_mode_probs();
DecoderErrorOr<u8> diff_update_prob(u8 prob);
DecoderErrorOr<u8> decode_term_subexp();
u8 inv_remap_prob(u8 delta_prob, u8 prob);
u8 inv_recenter_nonneg(u8 v, u8 m);
- DecoderErrorOr<void> read_coef_probs();
+ DecoderErrorOr<void> read_coef_probs(TXMode);
DecoderErrorOr<void> read_skip_prob();
DecoderErrorOr<void> read_inter_mode_probs();
DecoderErrorOr<void> read_interp_filter_probs();
@@ -169,7 +169,6 @@ private:
u8 m_token_cache[1024];
i32 m_tokens[1024];
bool m_use_hp { false };
- TXMode m_tx_mode;
ReferenceMode m_reference_mode;
ReferenceFrameType m_comp_fixed_ref;
ReferenceFramePair m_comp_var_ref;