From a5c0ed2122a9efe06613e52f0ff3f1323bb10169 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Wed, 16 Oct 2024 18:49:31 +0200 Subject: [PATCH] avcodec/ffv1: Support >8bit rice golomb Signed-off-by: Michael Niedermayer --- 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 2af457be27..ca03fd2b10 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 0eef4cb63d..a97f9a0c3f 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); @@ -707,10 +707,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; } }