From f7bbcb91b77c77c0842ae3ac72309aa6625cc69a Mon Sep 17 00:00:00 2001 From: Bogdan Lisman Date: Mon, 15 Jun 2026 03:24:14 +0300 Subject: [PATCH] avcodec/snowenc: fix SIGFPE in get_dc() when a block lies outside the plane get_dc() divides the accumulated, OBMC-weighted DC by aa, the sum of the squared OBMC weights taken over the in-plane pixels. When an OBMC block falls entirely outside the plane - e.g. a tiny chroma plane after mcdeint splits a frame into fields - no pixel contributes, aa stays 0 and the ROUNDED_DIV() divides by zero (SIGFPE). ab is 0 in exactly the same case, so the result degenerates to 0; return it directly. Reproducible with the GPL mcdeint filter in slow/extra_slow mode, e.g. ffmpeg -f lavfi -i testsrc=s=128x2 -vf mcdeint=mode=slow -f null - Add a self-contained lavfi-based FATE regression test for the slow mode, which previously crashed and is therefore not covered by the existing sample-based fast/medium tests. Fixes trac ticket #7779. Signed-off-by: Bogdan Lisman (cherry picked from commit a62d99692780431aeb8cc96665434d5ec3210985) Signed-off-by: Michael Niedermayer --- libavcodec/snowenc.c | 3 +++ tests/fate/filter-video.mak | 3 +++ tests/ref/fate/filter-mcdeint-slow | 8 ++++++++ 3 files changed, 14 insertions(+) create mode 100644 tests/ref/fate/filter-mcdeint-slow diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c index 94a592f69b..e92f082579 100644 --- a/libavcodec/snowenc.c +++ b/libavcodec/snowenc.c @@ -725,6 +725,9 @@ static int get_dc(SnowEncContext *enc, int mb_x, int mb_y, int plane_index) } *b= backup; + if (!aa) + return 0; + return av_clip_uint8( ROUNDED_DIV((int64_t)ab<