[FFmpeg-cvslog] vulkan_ffv1: slightly optimize the range decoder

Lynne git at videolan.org
Mon Apr 14 07:16:06 EEST 2025


ffmpeg | branch: master | Lynne <dev at lynne.ee> | Fri Apr  4 05:49:31 2025 +0000| [defebd74c094f72af253b776882fc07b71a7db3c] | committer: Lynne

vulkan_ffv1: slightly optimize the range decoder

GPUs have cmovs as standard.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=defebd74c094f72af253b776882fc07b71a7db3c
---

 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);



More information about the ffmpeg-cvslog mailing list