[FFmpeg-devel] [PATCH 04/18] vulkan_ffv1: slightly optimize the range decoder
Lynne
dev at lynne.ee
Sat Apr 12 10:22:35 EEST 2025
GPUs have cmovs as standard.
---
libavcodec/vulkan/rangecoder.comp | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/libavcodec/vulkan/rangecoder.comp b/libavcodec/vulkan/rangecoder.comp
index 4272b2a42f..ba8a6cfd9d 100644
--- a/libavcodec/vulkan/rangecoder.comp
+++ b/libavcodec/vulkan/rangecoder.comp
@@ -219,7 +219,7 @@ void refill(inout RangeCoder c)
c.range <<= 8;
c.low <<= 8;
if (c.bytestream < c.bytestream_end) {
- c.low += u8buf(c.bytestream).v;
+ c.low |= u8buf(c.bytestream).v;
c.bytestream++;
} else {
overread++;
@@ -234,11 +234,10 @@ bool get_rac(inout RangeCoder c, uint64_t state)
int ranged = c.range + range1;
bool bit = c.low >= ranged;
- int bv = bit ? 0xFFFFFFFF : 0;
- sb.v = zero_one_state[(bv & 0x100) + val];
+ sb.v = zero_one_state[val + (bit ? 256 : 0)];
- c.low = c.low - (bv & ranged);
- c.range = (ranged & ~bv) - (range1 & bv);
+ c.low = c.low - (bit ? ranged : 0);
+ c.range = (bit ? 0 : ranged) - (bit ? range1 : 0);
if (c.range < 0x100)
refill(c);
--
2.47.2
More information about the ffmpeg-devel
mailing list