From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id E289D4E2DE for ; Wed, 18 Feb 2026 21:55:59 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'NqMrwdxDloUVBesnnKB3j4rKMwhRpqbkAlaRRhyr/Ck=', expected b'3p0A3Cz7Hpu3IxVjmjH4QwzKVBTymMaBGgiBaPV9bvk=')) header.d=twosigma.com header.a=rsa-sha256; dkim=fail (body hash mismatch (got b'NqMrwdxDloUVBesnnKB3j4rKMwhRpqbkAlaRRhyr/Ck=', expected b'+slJQC9KntvybkWS5VOczjHzjogKTEx69cIZXExMEns=')) header.d=twosigmainternal.onmicrosoft.com header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1771451745; h=to : date : message-id : references : in-reply-to : mime-version : content-type : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-transfer-encoding : from; bh=PI0PEtI9V6uol8SQC5Oy64Efz5SdR+kfHRmUa5RopKo=; b=3p6z0WEXYhk3zYlPzAKZkMk+xCyVgyNhEIlMs11DQRkP4vdac1nO3smZgApGe7eV9oEov T1X0KiapHCnHAh/w/1vyA+8sv6xzwAOkRQjjqkrA3eF6XAikQ3+JpEF4jeHn60clyHkha1A NcyzW4Pp4Tjj8k8upVepC0kzH8yVQSShMzBPIqz0/EsRN8TXAJ+Ri5I3NCK+7SG005INT5p MWpWUmanBns0+F9Cutd8oEhywTKa93LTYB8CztS+2tHRnVUTXmjP7c+V1iz35/N/++W29Dw zOmI9AMGB4LmR+ZjNJRlDV3nbjelz5NTzpzIXvoB6FOl5jviDrAlE0yXmSLQ== Received: from [172.18.0.3] (unknown [172.18.0.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 25B8969125C; Wed, 18 Feb 2026 23:55:45 +0200 (EET) ARC-Seal: i=2; cv=fail; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1771451727; b=U/q0kTPfsJJM+v52vJsS3BP3j6ZKbYoAzfspr/kQfM4aNUB7TBORKUE/ZMwMXSTtO4Afc VuwHP/KzwEC2b/GUAil5OFLhopSKQ3gjPfJQIhtSjz8gczKQR5+S+ln98bNsCEKmx3Nnvj6 WrUeR9YRphwOmAUayDAVaZNjYYkRctrIrzQnYcQFYXujRgE0mx9bOPedFatsrp/gATqJ5Dx jNb/BTA1tEHrokKh9Z2kOFzu/Fxtg7qHrIJ4mr8b0xwggsFYsB+q6LnZ6mJuXQD76ofrXaU fQJnkYOAQxDkbFI/ehSI6Lf6p0POs9i3F2o1Ydr1hekxp/s+pzyvJnwx2dsA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1771451727; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=NqMrwdxDloUVBesnnKB3j4rKMwhRpqbkAlaRRhyr/Ck=; b=BcYGMcOTedZrKDkKgYycqQqTdjj4oQDkdRscBZ2BLELPr7WsDtRNWXbluc6D63HkHpVTr A3UKdbtHh+yHuhpxVbNz9vbXRHnH5b4IQFZ9Q2+6PlzZpfiWl28PJRtiZeIebFPZvbyklhz twIFFtZUsTebLU3YHgUiNZzX10/PcW3w1kqYgl4fIo5Y0Svlcib3CT94IZPMfv6uPKUatQf PcIbkBYIWEefP7/zRDSCKTa1cA8gRC2SKBeY+CHoRdjACu8o25fNhopnMV7efRJJuQ7AJsw noZ78XR0eaBMxOHBRj4UQGQ+5lT9uqYf4QBL2+9kSCYTjzMGXLvmBIyFMCNw== ARC-Authentication-Results: i=2; ffmpeg.org; dkim=pass header.d=twosigma.com; arc=fail; dmarc=pass header.from=twosigma.com policy.dmarc=none Authentication-Results: ffmpeg.org; dkim=pass header.d=twosigma.com; arc=fail (Most recent ARC-Message-Signature did not validate); dmarc=pass (Used From Domain Record) header.from=twosigma.com policy.dmarc=none Received: from mxo2.nje.dmz.twosigma.com (mxo2.nje.dmz.twosigma.com [208.77.214.162]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id EF9676911B3 for ; Wed, 18 Feb 2026 23:55:13 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by mxo2.nje.dmz.twosigma.com (Postfix) with ESMTP id 4fGVg36Ls3z1FLs for ; Wed, 18 Feb 2026 21:55:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=twosigma.com; s=202008; t=1771451711; bh=3p0A3Cz7Hpu3IxVjmjH4QwzKVBTymMaBGgiBaPV9bvk=; h=From:To:Subject:Date:References:In-Reply-To:From; b=Rh8SDhZZsgE1xd6pqVivT2oVyIvvUDDKjyFe2UBOZJf5BBXMzF9jMb/6lhJLqe0te ZH4OSt6ED5iSeb9EEIaims2bEllXyhD9tgw27HgVvMqlDGQy3JmS1C0CzT5HxF8XVh Xr1+GOE3XqQIE/z3nxgl9rl5Z4PaCnNiZa1dflFflnLvviC6k/8QyrSNpI9PneGgz+ 7blz4eG0EFBFw6paWsraNxPrdRTOiSt1AuxlDxnkvdJrpumjBAIeGpKdtt6Jmx5LOp nUSzdNAuYQw7gef/35bhQZZ2iyN3AJe5kd7S74DLrlc3Nf21A+WVx75PlGzNBmkdK8 gDPre5Rrpm9pg== X-Virus-Scanned: Debian amavisd-new at twosigma.com Received: from mxo2.nje.dmz.twosigma.com ([127.0.0.1]) by localhost (mxo2.nje.dmz.twosigma.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id BoXHBFS9DKI9 for ; Wed, 18 Feb 2026 21:55:11 +0000 (UTC) Received: from gsnje-exhy04.ad.twosigma.com (gsnje-exhy04.ad.twosigma.com [172.20.16.88]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mxo2.nje.dmz.twosigma.com (Postfix) with ESMTPS id 4fGVg35Wwbz1F90 for ; Wed, 18 Feb 2026 21:55:11 +0000 (UTC) Received: from gsnje-exhy03.ad.twosigma.com (172.20.16.95) by gsnje-exhy04.ad.twosigma.com (172.20.16.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Wed, 18 Feb 2026 16:55:11 -0500 Received: from dsnje-exet02.nje.dmz.twosigma.com (172.20.62.9) by gsnje-exhy03.ad.twosigma.com (172.20.16.95) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29 via Frontend Transport; Wed, 18 Feb 2026 16:55:11 -0500 Received: from DM2PR0701CU001.outbound.protection.outlook.com (172.20.61.5) by edge1.twosigma.com (172.20.62.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Wed, 18 Feb 2026 16:55:11 -0500 Received: from MW4PR08MB8257.namprd08.prod.outlook.com (2603:10b6:303:1b9::11) by CH3PR08MB9338.namprd08.prod.outlook.com (2603:10b6:610:1c8::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.13; Wed, 18 Feb 2026 21:55:00 +0000 Received: from MW4PR08MB8257.namprd08.prod.outlook.com ([fe80::24e8:a9fe:1d6d:9bb5]) by MW4PR08MB8257.namprd08.prod.outlook.com ([fe80::24e8:a9fe:1d6d:9bb5%4]) with mapi id 15.20.9611.013; Wed, 18 Feb 2026 21:54:59 +0000 To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH] lavfi/mpdecimate: fix three bugs in keep_count logic Thread-Index: AdyXsDtVujoRt109SY6unJkexKUgDAJcPhHA Date: Wed, 18 Feb 2026 21:54:59 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW4PR08MB8257:EE_|CH3PR08MB9338:EE_ x-ms-office365-filtering-correlation-id: 54818ec7-789d-4eb8-7bc9-08de6f385c6c x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|1800799024|366016|376014|38070700021|8096899003|7053199007; x-microsoft-antispam-message-info: =?us-ascii?Q?z768J/h8ACpGwzfyr9cZkADIXMRpVsCfNQ/lzNKHrvSKlk8dDNfcda3CJ4Te?= =?us-ascii?Q?d8j87tAshDVP1nEuH5GKObTyNPPc5OhkeYEIej0mdQS9nSgxyvOgceXPI297?= =?us-ascii?Q?7XIPOieEr6TvvQBuiMPZ/cBzv7h5HD+wjHj0Hf2MhNFY6ggvLwd8cfdYrDkK?= =?us-ascii?Q?eEC5BP1hfOZOeOU5JYbSKvtCLMARVCkKoTW1QnHlTA+mqA0glODkvWq/n4sT?= =?us-ascii?Q?7sXKypWsGgqbcOYD66KHnS+cEERbHdeE169wl1EkM+vcXa57le7O1F52Du91?= =?us-ascii?Q?J1Z1OahyZiYKL2aOsXtD4mKn9HqXHnMSQ51Pv9SMQOlc2XFEThxc+d8Zpb02?= =?us-ascii?Q?p71g8N3UBeYWxfdJaT5rbfjPA8XON2wtlobqF5PuHiwei40UHHNorreW72O4?= =?us-ascii?Q?Kp0BBhfSVDdwFOLVQMzMixNtlUjEXB3VfSOWHQwBaV+0EPjoUEy4AjZjcbta?= =?us-ascii?Q?xSikw3CdjYO3M4ewUF/2taupkcnNB/1ogRepO0ENedfaHXF9ZxTvahMjiWiz?= =?us-ascii?Q?Q/F4jeeYRfPp0nfwk3+7997hD13sL+mEUeQDYb8qTSr62SQB8RXL89nce1C4?= =?us-ascii?Q?KiG287M7obhYIf5sHm0SaDxySQ8TcLQRJidqCU2dMdDKB7/7SunzX0PbF1c9?= =?us-ascii?Q?GqEaJdSD65L0FCea0tQw76mqsCKQ54S/q8z32AIQj7wBD1OeCtdaxoRrDJ1y?= =?us-ascii?Q?ehtuFtayu/K1JgN9iUFNTqUVJjHb1QkCFGnQBkXDpcgup+JFwnIb0hb5hzZK?= =?us-ascii?Q?BBjW/xkzatZHbwcp+mFDh5E8Xain+8J6DxACAZ35MWQKybW83yjnQsX3BJ28?= =?us-ascii?Q?9J8VStQ2okdlsLpm1ZQj+wqGQ+5ntdlNEqAF+ifERgclZJqrXmvC9Cr2LXjv?= =?us-ascii?Q?BVN18rNTAnQew/lcSHRofoybZrvZJf8avDAXrdPLViWl9+kFUYUZTzfZkgGD?= =?us-ascii?Q?/U7GYDrJKt07trz3yK3/Qt8IcovN0OBUJlabsqGpzauOF6csWGmCh7ykPC5J?= =?us-ascii?Q?Y9tgB+7rZXsuFkLa+Nu9jNJBEwCbvySVs9DC4HQ2pJF10TxJyimqGE93Pnfx?= =?us-ascii?Q?z5FXaiDyYAA4xlHE2OUuB4ePzbCRvHzLwJG/clKKiUGBwQWlVvEni4XYK9B3?= =?us-ascii?Q?M14xaueCT2AZ4BdkpqFzk3yjWQbXNK7hbnib7ngLP5XMghc4Vn6kwoIHAe3n?= =?us-ascii?Q?Png9/jYRuywkmYBgerwar8J8ervUERPzAXBz2lwbn/3mBuEHVwoOdRMQ+k22?= =?us-ascii?Q?/JK7ieYtFOv8yavsNAPDsEnd89R2fr786/tBdHjqSCqoEu5PcaJ0Ghg2HYVi?= =?us-ascii?Q?ksXYQcePspM3c2cAC0uiigwY2/TFD32suBXkScLNnxY402dg6OPT2xps5zOq?= =?us-ascii?Q?irJkEL8R1A8gHp1oUghCn9OhIhbWgvXMc/qGyJZNuUWmLjMpu3F/7nHMU0Qx?= =?us-ascii?Q?73/xUrNGH8W4VQcoYkKVwSWY1GDlKD7c/697GzODFMK73NloJbvDt8RY4CtW?= =?us-ascii?Q?KFJo3KMdRKqaNAvMRzb2OfQi9OFKPkd/iJMlIFMdk7WTeJEcd7jme3xZEKWM?= =?us-ascii?Q?EE9urrvVb69JrYxP9de8I56fm1uY8gEQcHu5Xz3CTAUqVTUfUZJJsJVWc8ey?= =?us-ascii?Q?s+0zokJhjm8e9tZWDbZsaWc=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR08MB8257.namprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(38070700021)(8096899003)(7053199007);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?Y3o2B7BC95cofu+lHA1D1bNOJoAIF/cG+szJWcdWGX6iPeNU7xIcf2hdDlr/?= =?us-ascii?Q?DQdOa8xjMcG9QUsF/ZAmdvyqmXXRXn7IDNdzbDyaiZO+RiSG64XfpQJTmNVW?= =?us-ascii?Q?Zb+HDfgoACIIkW1sxQ8KRgvDqJE4CwC3ZQ/AJf3+1WWbYUPj9irguhQNsfKs?= =?us-ascii?Q?rYpTEOG5wasx0VVNbiRsfBWtVKD8eM+q48k9KtrZ7/qHKpoIurDtFK+jgSY+?= =?us-ascii?Q?mttRaz2J/xNdeCh1onbau2nSSsdVvrdfm1jO3aZs0W6vTzkE6EQB8z7tnT/f?= =?us-ascii?Q?USgebt2rdcpjGo5GhZsx3pQTjRsAD4U4c+EDfHX0zM0o7ngn0cESLE2K71i5?= =?us-ascii?Q?18nYbnN+8LtFE16S1DvbwQ9u8sNQxvTxqMcO6ieMgcCmbIyD8O9hTSUm3nlG?= =?us-ascii?Q?GeJtW28r8bb9AExXnt7Ejg3iGM2yqksXSfuievbFng/ckaScEknqm4hE6ZRe?= =?us-ascii?Q?kRPd6LtazlOtoQivmX/XvSfZeOLHEMrUxeT9hWYyodKQvnHAu4i1kwrwhbUD?= =?us-ascii?Q?3sTfgbGv/X8L7U2YJtS5sAzuc0I8OgHMzwD5Q1Pdpw57KaC1FI+rQCFI6oYQ?= =?us-ascii?Q?i0HVo8T4cgw/+IYkm28+PAItSvAhY0omycuWAIWA8wfoCvyZPXWC1k8wGnRs?= =?us-ascii?Q?XKq+t4cptxjHDkmjVM1t32sT/DjURXcGfOYVqvegptUHWESpM9MmZbchHkeL?= =?us-ascii?Q?s7oAZ2fP6zKXAlTk0O2HYL7wIH6rqSiCasPABWHF8y1jAJkOaZiyqtI6PB21?= =?us-ascii?Q?57K+zPIPHHdYedjvocpF4OEr9QhFBd1yqhCtevy9+ucNZEucXAVpdMKGTjIr?= =?us-ascii?Q?kvjzMzd/5rvRfutwLyzt/qTvglaenrRXpwGkJGz92FhtmYpA/dvZmm3xFfza?= =?us-ascii?Q?oNKtU9dNUIbIRoJ2NaYJvbK14nR62HBRXGm+0AZrI42tLRXyTML2hbhNcLEn?= =?us-ascii?Q?+rrTI8vjdgE0G5TvALL/GbugrsPRzZ7qFNSqS4TNYbhHa+fiblDPJNBZNQA9?= =?us-ascii?Q?2UyNwgUoHyJSs6RTBP4+fjYHe6Ioai8/RVd/jQf/77YM21zmbTWacOv2D12b?= =?us-ascii?Q?pKiiifZFNtIhuRS5ROwI2EwfPtcHA+Qd4rOHNirfxXK5MZOxWKf6VH1IVmMK?= =?us-ascii?Q?I6gjop4hHasnajF8K4kaia1NxTgqWqy0wh5T2zf0RoPj/dp/Ti8adqxVMOdk?= =?us-ascii?Q?G7rUksk3z7rhTDcratHZ2FO1+tXbBHYpVGEO9ASXksrk8X0Nl8eaVX8l3MVb?= =?us-ascii?Q?/b1B7ARETVLD9PLQKn3U7rn4JPHN8DLhQWqA+5kL7F/+QCPfeB+vjWP2kfBu?= =?us-ascii?Q?FW273Ogc/C3m9IFZnSnFsyqHlwLQ5jTycb6RzK7mFH4HAvESkCQyLSauZPyj?= =?us-ascii?Q?tci8bYOFFDlNh8OQk0WwA6zIcIBFyJq1JydYyFHyjruFQ46YcdFxONwPm9Ze?= =?us-ascii?Q?Wst3dqyh/KJucq2ylHmYKKq1jpIJtLD0hFBo+rF8nisv6oacGH2V5t26tqdf?= =?us-ascii?Q?wPgRAorjwp1BZQFm9BkJ69NlwW/9ILoDQLH2m8dZt7Duh00PG22mc8QXRQmq?= =?us-ascii?Q?WhZCYA62K0vo6PIyoVIJrsmWGbh4pvvpGeALDuBdvfUf6txUxbCNtghVA2r7?= =?us-ascii?Q?31eTcyYnaU775SeZfMP3NsQga7KvQoQvnU1x/FJGhNrBjUw7qVoynjKunLf1?= =?us-ascii?Q?VOXKIiCtVcx/9XdpAXBBdMdiavYpvCAj+meiV2BMdLdoZjQAhC6+WfUwYC5/?= =?us-ascii?Q?ypn/rtTVtg=3D=3D?= arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AAV0CrODi8ra9N+p2dS69KX88FKDdsEbcR5jM/59NZRp8dDUqTPyouz4fJ7ufjdsvEUCw+nQWm7sees7Qz+tOVkSBpygoam4vwzFEhKhRuppk/ROiAMUDu4VQDpHCnQlpy80hHKTqx54bw8/cIjzM+wKBfjVy06Jqp5L3VTPJQ4CUKUFMAHN9cR3u4kqkosdvqlN8NAC1vsPwVjjop8gE22+Qw0eBJ4DZ0/NBKZBFh0lPzuK0rthd2cQ4nWsIFcXQ6LsmL6cZWH52gex6FNZuuvJ1PNRhg8ffxhEwA1jgdDAkvLc4jr2nj1RyA4nfJEgGPDc2DU6CT12JHWUDwkojQ== arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=+slJQC9KntvybkWS5VOczjHzjogKTEx69cIZXExMEns=; b=X8SULbaNqIquGo57oji7aVuamt4C8z3brO6LzbKbgaqLpPXxnJbErscrj7c4gDzi5h2kEsF2N54hIGDL/2n0f9YOcIvpZEIVtUjZJAhbK0RX27ctZWFfAVB85HH4unIFWECM2h3ipe6hSEzuKpM7ENcYpND4T/v3OsHrvxyHhGSOX6ZlA/WzGBPb5ObUWLpXjuVKLdjfZTUozSa4ZCLVnQS9GGQJJlEiETHnKHNYQbyF+TAJYKIL6Ja8h4h+fINqPDCFmfdjUdzZBfPsVeW7n96SEtUgu42kzHOSbLLws94Z1b/BONb8AvsKnst77A/ubA1jqxyxCUgxvLKRx8si9w== arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=twosigma.com; dmarc=pass action=none header.from=twosigma.com; dkim=pass header.d=twosigma.com; arc=none dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=twosigmainternal.onmicrosoft.com; s=selector1-twosigmainternal-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+slJQC9KntvybkWS5VOczjHzjogKTEx69cIZXExMEns=; b=yVx/XvEenLWUdA12LRKXJPF2SP27/2p/+Ecz20oYlE8uCjQZIIgiu9FdwgGC/ErQ99LtiqfCH5AWTtg5gZ3RjxGwNI1l1jYBWFcO9fTGEyJrkKuipdhZLU6o+5yKvICq4iHXRSyOy6f7QsWI0Urz4KuyFqYrFXvrwAKNZIXzw1Q= x-ms-exchange-crosstenant-authas: Internal x-ms-exchange-crosstenant-authsource: MW4PR08MB8257.namprd08.prod.outlook.com x-ms-exchange-crosstenant-network-message-id: 54818ec7-789d-4eb8-7bc9-08de6f385c6c x-ms-exchange-crosstenant-originalarrivaltime: 18 Feb 2026 21:54:59.2299 (UTC) x-ms-exchange-crosstenant-fromentityheader: Hosted x-ms-exchange-crosstenant-id: 43fb3c01-4eda-479a-96f3-4fb85967560f x-ms-exchange-crosstenant-mailboxtype: HOSTED x-ms-exchange-crosstenant-userprincipalname: Ly1l2pDHMh/9AGY6qi2IFcY4CNseqsnaWZEualJhpgusAXycYzL0Wj1jjvY4mZxtjmUmvf2qA1tqOrJGn6mfpw== x-ms-exchange-transport-crosstenantheadersstamped: CH3PR08MB9338 x-originatororg: twosigma.com MIME-Version: 1.0 Message-ID-Hash: HO4QNHKCNR5Y4JR4N2W2GPK5CZ3RA25K X-Message-ID-Hash: HO4QNHKCNR5Y4JR4N2W2GPK5CZ3RA25K X-MailFrom: SRS0=VnXw=AW=twosigma.com=Dana.Feng@ffmpeg.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header Content-Type: text/plain; charset="us-ascii" X-Content-Filtered-By: Mailman/MimeDel 3.3.10 X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] Re: [PATCH] lavfi/mpdecimate: fix three bugs in keep_count logic List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Dana Feng via ffmpeg-devel Cc: Dana Feng Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: Hello! Just following up on this. From: Dana Feng Sent: Friday, February 6, 2026 4:38 PM To: 'ffmpeg-devel@ffmpeg.org' Subject: [PATCH] lavfi/mpdecimate: fix three bugs in keep_count logic Fix the following issues with the keep option: 1. No similarity check during keep period: The code returned early during the keep period without checking if the frame was actually similar to the reference. 2. keep_count doesn't reset on different frames: The counter should track "consecutive similar frames," but when a different frame arrived mid-count, keep_count didn't reset to 0. It only reset after going negative (after a drop), causing the counter to accumulate across non-consecutive similar frames and drop frames earlier than expected. 3. Reference frame drift: When similar frames were kept due to keep_count, they became the new reference. Over time, tiny differences (sensor noise, compression artifacts) accumulated. Frame N got compared to frame N-1 instead of the last different frame, allowing gradual scene changes to slip through undetected. Now decimate_frame() checks similarity first, then applies keep_count logic, returning distinct values: 1 = drop (similar, over keep threshold) 0 = keep (different frame) - updates reference, resets keep_count -1 = keep (similar, under keep threshold) - preserves reference Signed-off-by: Dana Feng danaf@twosigma.com --- libavfilter/vf_mpdecimate.c | 49 +++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/libavfilter/vf_mpdecimate.c b/libavfilter/vf_mpdecimate.c index 0fc95556b7..5b1654f671 100644 --- a/libavfilter/vf_mpdecimate.c +++ b/libavfilter/vf_mpdecimate.c @@ -109,19 +109,18 @@ static int diff_planes(AVFilterContext *ctx, /** * Tell if the frame should be decimated, for example if it is no much * different with respect to the reference frame ref. + * + * @return 1 if frame should be dropped (similar, over keep threshold), + * 0 if frame should be kept (different), + * -1 if frame should be kept (similar, under keep threshold) */ static int decimate_frame(AVFilterContext *ctx, AVFrame *cur, AVFrame *ref) { DecimateContext *decimate = ctx->priv; + int is_similar; int plane; - if (decimate->max_keep_count > 0 && - decimate->keep_count > -1 && - decimate->keep_count < decimate->max_keep_count) { - decimate->keep_count++; - return 0; - } if (decimate->max_drop_count > 0 && decimate->drop_count >= decimate->max_drop_count) return 0; @@ -129,6 +128,7 @@ static int decimate_frame(AVFilterContext *ctx, (decimate->drop_count-1) > decimate->max_drop_count) return 0; + is_similar = 1; for (plane = 0; ref->data[plane] && ref->linesize[plane]; plane++) { /* use 8x8 SAD even on subsampled planes. The blocks won't match up with * luma blocks, but hopefully nobody is depending on this to catch @@ -141,8 +141,21 @@ static int decimate_frame(AVFilterContext *ctx, cur->data[plane], cur->linesize[plane], ref->data[plane], ref->linesize[plane], AV_CEIL_RSHIFT(ref->width, hsub), - AV_CEIL_RSHIFT(ref->height, vsub))) - return 0; + AV_CEIL_RSHIFT(ref->height, vsub))) { + is_similar = 0; + break; + } + } + + if (!is_similar) + return 0; /* Frame is different - keep it */ + + /* Frame is similar - apply keep_count logic */ + if (decimate->max_keep_count > 0 && + decimate->keep_count > -1 && + decimate->keep_count < decimate->max_keep_count) { + decimate->keep_count++; + return -1; /* Similar but under keep threshold - keep without updating ref */ } return 1; @@ -200,29 +213,35 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *cur) DecimateContext *decimate = inlink->dst->priv; AVFilterLink *outlink = inlink->dst->outputs[0]; int ret; + int result = decimate->ref ? decimate_frame(inlink->dst, cur, decimate->ref) : 0; - if (decimate->ref && decimate_frame(inlink->dst, cur, decimate->ref)) { + if (result == 1) { + /* Drop: similar frame, over keep threshold */ decimate->drop_count = FFMAX(1, decimate->drop_count+1); - decimate->keep_count = -1; // do not keep any more frames until non-similar frames are detected + decimate->keep_count = -1; + } else if (result == -1) { + /* Keep: similar frame, under keep threshold - don't update ref */ + decimate->drop_count = FFMIN(-1, decimate->drop_count-1); + if ((ret = ff_filter_frame(outlink, cur)) < 0) + return ret; } else { + /* Keep: different frame - update ref and reset keep_count */ av_frame_free(&decimate->ref); decimate->ref = cur; decimate->drop_count = FFMIN(-1, decimate->drop_count-1); - if (decimate->keep_count < 0) // re-enable counting similar frames to ignore before dropping - decimate->keep_count = 0; - + decimate->keep_count = 0; if ((ret = ff_filter_frame(outlink, av_frame_clone(cur))) < 0) return ret; } av_log(inlink->dst, AV_LOG_DEBUG, "%s pts:%s pts_time:%s drop_count:%d keep_count:%d\n", - decimate->drop_count > 0 ? "drop" : "keep", + result > 0 ? "drop" : "keep", av_ts2str(cur->pts), av_ts2timestr(cur->pts, &inlink->time_base), decimate->drop_count, decimate->keep_count); - if (decimate->drop_count > 0) + if (result > 0) av_frame_free(&cur); return 0; -- 2.39.5 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org