mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 23:50:19 +00:00
LibVideo/VP9: Use proper indices for updating inter_mode probabilities
I previously changed it to use the absolute inter-prediction mode values instead of the ones relative to NearestMv. That caused the probability adaption to take invalid indices from the counts and broke certain videos. Now it will just convert to the PredictionMode enum when returning from parse_inter_mode, which allows us to still use it the same as before.
This commit is contained in:
parent
7b92eff4a6
commit
0f45153bbb
Notes:
sideshowbarker
2024-07-17 08:43:11 +09:00
Author: https://github.com/Zaggy1024 Commit: https://github.com/SerenityOS/serenity/commit/0f45153bbb Pull-request: https://github.com/SerenityOS/serenity/pull/17292
2 changed files with 10 additions and 6 deletions
|
@ -132,10 +132,14 @@ static constexpr int tx_size_16_tree[4] = {
|
|||
-Transform_8x8, -Transform_16x16
|
||||
};
|
||||
static constexpr int tx_size_8_tree[2] = { -Transform_4x4, -Transform_8x8 };
|
||||
inline constexpr int inter_mode(PredictionMode mode)
|
||||
{
|
||||
return to_underlying(mode) - to_underlying(PredictionMode::NearestMv);
|
||||
}
|
||||
static constexpr int inter_mode_tree[6] = {
|
||||
-to_underlying(PredictionMode::ZeroMv), 2,
|
||||
-to_underlying(PredictionMode::NearestMv), 4,
|
||||
-to_underlying(PredictionMode::NearMv), -to_underlying(PredictionMode::NewMv)
|
||||
-inter_mode(PredictionMode::ZeroMv), 2,
|
||||
-inter_mode(PredictionMode::NearestMv), 4,
|
||||
-inter_mode(PredictionMode::NearMv), -inter_mode(PredictionMode::NewMv)
|
||||
};
|
||||
static constexpr int interp_filter_tree[4] = {
|
||||
-EightTap, 2,
|
||||
|
|
|
@ -215,9 +215,9 @@ ErrorOr<PredictionMode> TreeParser::parse_inter_mode(BitStream& bit_stream, Prob
|
|||
// Probabilities
|
||||
u8 const* probabilities = probability_table.inter_mode_probs()[mode_context_for_ref_frame_0];
|
||||
|
||||
auto value = TRY(parse_tree<PredictionMode>(bit_stream, tree, [&](u8 node) { return probabilities[node]; }));
|
||||
counter.m_counts_inter_mode[mode_context_for_ref_frame_0][to_underlying(value) - to_underlying(PredictionMode::NearestMv)]++;
|
||||
return value;
|
||||
auto value = TRY(parse_tree<u8>(bit_stream, tree, [&](u8 node) { return probabilities[node]; }));
|
||||
counter.m_counts_inter_mode[mode_context_for_ref_frame_0][value]++;
|
||||
return static_cast<PredictionMode>(value + to_underlying(PredictionMode::NearestMv));
|
||||
}
|
||||
|
||||
ErrorOr<InterpolationFilter> TreeParser::parse_interpolation_filter(BitStream& bit_stream, ProbabilityTables const& probability_table, SyntaxElementCounter& counter, FrameBlockContext above, FrameBlockContext left)
|
||||
|
|
Loading…
Reference in a new issue