mirror of
https://github.com/RGBCube/serenity
synced 2025-07-28 20:27:46 +00:00
LibVideo/VP9: Move the above non-zero tokens context into decode_tiles
We can store this context in the stack of Parser::decode_tiles and use spans to give access to the sections of the context for each tile and subsequently each block.
This commit is contained in:
parent
4e7e9d8479
commit
2f043a0bd4
5 changed files with 27 additions and 20 deletions
|
@ -150,12 +150,12 @@ static ErrorOr<NonZeroTokens> create_non_zero_tokens(u32 size_in_sub_blocks, boo
|
|||
}
|
||||
|
||||
template<typename T>
|
||||
static Span<T> safe_slice(FixedArray<T>& array, u32 start, u32 size)
|
||||
static Span<T> safe_slice(Span<T> span, u32 start, u32 size)
|
||||
{
|
||||
return array.span().slice(start, min(size, array.size() - start));
|
||||
return span.slice(start, min(size, span.size() - start));
|
||||
}
|
||||
|
||||
static NonZeroTokensView create_non_zero_tokens_view(NonZeroTokens& non_zero_tokens, u32 start_in_sub_blocks, u32 size_in_sub_blocks, bool subsampling)
|
||||
static NonZeroTokensView create_non_zero_tokens_view(NonZeroTokensView non_zero_tokens, u32 start_in_sub_blocks, u32 size_in_sub_blocks, bool subsampling)
|
||||
{
|
||||
NonZeroTokensView result;
|
||||
// Y plane
|
||||
|
@ -168,9 +168,14 @@ static NonZeroTokensView create_non_zero_tokens_view(NonZeroTokens& non_zero_tok
|
|||
return result;
|
||||
}
|
||||
|
||||
static NonZeroTokensView create_non_zero_tokens_view(NonZeroTokens& non_zero_tokens, u32 start_in_sub_blocks, u32 size_in_sub_blocks, bool subsampling)
|
||||
{
|
||||
return create_non_zero_tokens_view({ non_zero_tokens[0].span(), non_zero_tokens[1].span(), non_zero_tokens[2].span() }, start_in_sub_blocks, size_in_sub_blocks, subsampling);
|
||||
}
|
||||
|
||||
struct TileContext {
|
||||
public:
|
||||
static ErrorOr<TileContext> try_create(FrameContext& frame_context, u32 rows_start, u32 rows_end, u32 columns_start, u32 columns_end)
|
||||
static ErrorOr<TileContext> try_create(FrameContext& frame_context, u32 rows_start, u32 rows_end, u32 columns_start, u32 columns_end, NonZeroTokensView above_non_zero_tokens)
|
||||
{
|
||||
auto context_view = frame_context.m_block_contexts.view(rows_start, columns_start, rows_end - rows_start, columns_end - columns_start);
|
||||
|
||||
|
@ -181,6 +186,7 @@ public:
|
|||
columns_start,
|
||||
columns_end,
|
||||
context_view,
|
||||
above_non_zero_tokens,
|
||||
TRY(create_non_zero_tokens(blocks_to_sub_blocks(rows_end - rows_start), frame_context.color_config.subsampling_y)),
|
||||
};
|
||||
}
|
||||
|
@ -196,6 +202,7 @@ public:
|
|||
u32 columns() const { return columns_end - columns_start; }
|
||||
Vector2DView<FrameBlockContext> block_contexts_view;
|
||||
|
||||
NonZeroTokensView above_non_zero_tokens;
|
||||
NonZeroTokens left_non_zero_tokens;
|
||||
};
|
||||
|
||||
|
@ -217,6 +224,7 @@ struct BlockContext {
|
|||
.column = column,
|
||||
.size = size,
|
||||
.contexts_view = contexts_view,
|
||||
.above_non_zero_tokens = create_non_zero_tokens_view(tile_context.above_non_zero_tokens, blocks_to_sub_blocks(column - tile_context.columns_start), size_in_sub_blocks.width(), tile_context.frame_context.color_config.subsampling_x),
|
||||
.left_non_zero_tokens = create_non_zero_tokens_view(tile_context.left_non_zero_tokens, blocks_to_sub_blocks(row - tile_context.rows_start), size_in_sub_blocks.height(), tile_context.frame_context.color_config.subsampling_y),
|
||||
};
|
||||
}
|
||||
|
@ -257,6 +265,7 @@ struct BlockContext {
|
|||
// Indexed by ReferenceFrame enum.
|
||||
Array<u8, 4> mode_context {};
|
||||
|
||||
NonZeroTokensView above_non_zero_tokens;
|
||||
NonZeroTokensView left_non_zero_tokens;
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue