From c9d5ddab5700d548f3a76ae0f60429d9bac2d2de Mon Sep 17 00:00:00 2001 From: lizzie Date: Tue, 15 Sep 2026 19:47:11 +0000 Subject: [PATCH] 2026-09-15 19:47:11 Signed-off-by: lizzie --- src/video_core/host1x/codecs/vp9.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/video_core/host1x/codecs/vp9.cpp b/src/video_core/host1x/codecs/vp9.cpp index 33e84c02fa..494ef0f132 100644 --- a/src/video_core/host1x/codecs/vp9.cpp +++ b/src/video_core/host1x/codecs/vp9.cpp @@ -892,21 +892,28 @@ void VpxRangeEncoder::Write(bool bit, s32 probability) { count += shift; if (count >= 0) { - const s32 offset = shift - count; + auto const write_byte = [&](u8 byte) { + if (stream_pos == stream_data.size()) { + stream_data.push_back(byte); + ++stream_pos; + } else { + stream_data.insert(stream_data.begin() + stream_pos, byte); + } + }; + const s32 offset = shift - count; if (((low_value << (offset - 1)) >> 31) != 0) { - auto const current_pos = s32(stream_pos); + auto const current_pos = stream_pos; --stream_pos; while (stream_data[stream_pos] == 0xff) { - stream_data.resize(stream_pos + 1); - stream_data[stream_pos++] = 0; + write_byte(0); stream_pos -= 2; } - stream_data[stream_pos]++; + write_byte(stream_data[stream_pos] + 1); stream_pos = current_pos; } - stream_data.resize(stream_pos + 1); - stream_data[stream_pos++] = u8((low_value >> (24 - offset))); + write_byte(u8((low_value >> (24 - offset)))); + ++stream_pos; low_value <<= offset; shift = count;