avcodec/ffv1dec: clamp k in get_vlc_symbol() at 20 instead of bits

Add a FATE test with such planes.
This commit is contained in:
Michael Niedermayer authored and michaelni committed 2026-11-05 23:09:16 +00:00
1 parent bd6e6f638e
commit 60d62ca406
3 files changed
+18 -3

No files matched your search

+4 -2
View File
@@ -56,10 +56,12 @@ static inline int get_vlc_symbol(GetBitContext *gb, VlcState *const state,
k++;
i += i;
}
if (k > bits) {
/* get_ur_golomb() reads at most 32 bits, 12 of which the escape limit
* reserves for the prefix */
if (k > 20) {
ff_dlog(NULL, "k-overflow bias:%d error:%d drift:%d count:%d k:%d",
state->bias, state->error_sum, state->drift, state->count, k);
k = bits;
k = 20;
}
v = get_sr_golomb(gb, k, 12, bits);
+6 -1
View File
@@ -1,9 +1,14 @@
FATE_FFV1_FLOAT32-$(call TRANSCODE, FFV1, NUT, LAVFI_INDEV WRAPPED_AVFRAME_DECODER COLOR_FILTER FORMAT_FILTER GEQ_FILTER SCALE_FILTER) += \
fate-ffv1-golomb-float32-26bit
fate-ffv1-golomb-float32-26bit fate-ffv1-golomb-float32-1bit
fate-ffv1-golomb-float32-26bit: CMD = transcode lavfi "color=black:s=352x288:r=1:d=8,format=gbrpf32,geq=r=X+Y*W:g=X+Y*W:b=X+W*if(lt(Y\,2*(25+N+floor(N/2)+2*floor(N/7))-4)\,if(mod(Y\,2)\,290-(25+N+floor(N/2)+2*floor(N/7))+(Y-1)/2\,290-2*(25+N+floor(N/2)+2*floor(N/7))+Y/2)\,if(eq(Y\,2*(25+N+floor(N/2)+2*floor(N/7))-4)\,19\,if(lt(Y\,2*(25+N+floor(N/2)+2*floor(N/7))+16)\,Y-2*(25+N+floor(N/2)+2*floor(N/7))+3\,if(lt(Y\,286)\,Y-2*(25+N+floor(N/2)+2*floor(N/7))+4\,Y-(25+N+floor(N/2)+2*floor(N/7))+2))))" nut \
"-c:v ffv1 -strict experimental -coder 0 -remap_mode 1 -slices 1 -g 1" "-pix_fmt gbrpf32le -vf scale"
# Planes with 2 distinct values are coded with 1 bit residuals while the
# Golomb-Rice parameter k starts at 2.
fate-ffv1-golomb-float32-1bit: CMD = transcode lavfi "color=black:s=64x48:r=1:d=1,format=gbrpf32,geq=r=1+mod(floor(X*Y/7)\,2):g=1+mod(floor(X*Y/7)\,2):b=1+mod(floor(X*Y/7)\,2)" nut \
"-c:v ffv1 -strict experimental -coder 0 -remap_mode 1" "-pix_fmt gbrpf32le -vf scale"
FATE_FFMPEG += $(FATE_FFV1_FLOAT32-yes)
fate-ffv1: $(FATE_FFV1_FLOAT32-yes)
+8
View File
@@ -0,0 +1,8 @@
eb334f7a8c79e6eb915ac7440a88ddc9 *tests/data/fate/ffv1-golomb-float32-1bit.nut
1455 tests/data/fate/ffv1-golomb-float32-1bit.nut
#tb 0: 1/1
#media_type 0: video
#codec_id 0: rawvideo
#dimensions 0: 64x48
#sar 0: 1/1
0, 0, 0, 1, 36864, 0x1ad349e2