[FFmpeg-devel] [PATCH] avcodec/ffv1: Support >8bit rice golomb

Michael Niedermayer michael at niedermayer.cc
Wed Oct 16 20:36:30 EEST 2024


Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
---
 libavcodec/ffv1.h    | 2 +-
 libavcodec/ffv1enc.c | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/libavcodec/ffv1.h b/libavcodec/ffv1.h
index 02bfc33f680..7e84c98235f 100644
--- a/libavcodec/ffv1.h
+++ b/libavcodec/ffv1.h
@@ -54,8 +54,8 @@
 #define AC_RANGE_DEFAULT_TAB_FORCE -2
 
 typedef struct VlcState {
+    uint32_t error_sum;
     int16_t drift;
-    uint16_t error_sum;
     int8_t bias;
     uint8_t count;
 } VlcState;
diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c
index 0548daf8c47..ae0bb0057ce 100644
--- a/libavcodec/ffv1enc.c
+++ b/libavcodec/ffv1enc.c
@@ -248,7 +248,7 @@ static inline void put_vlc_symbol(PutBitContext *pb, VlcState *const state,
         i += i;
     }
 
-    av_assert2(k <= 13);
+    av_assert2(k <= 16);
 
     code = v ^ ((2 * state->drift + state->count) >> 31);
 
@@ -711,10 +711,10 @@ static av_cold int encode_init(AVCodecContext *avctx)
     }
     av_assert0(s->bits_per_raw_sample >= 8);
 
-    if (s->bits_per_raw_sample > 8) {
+    if (s->bits_per_raw_sample > (s->version > 3 ? 16 : 8)) {
         if (s->ac == AC_GOLOMB_RICE) {
             av_log(avctx, AV_LOG_INFO,
-                    "bits_per_raw_sample > 8, forcing range coder\n");
+                    "high bits_per_raw_sample, forcing range coder\n");
             s->ac = AC_RANGE_CUSTOM_TAB;
         }
     }
-- 
2.47.0



More information about the ffmpeg-devel mailing list