PR #22865 opened by i-Amogh
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/22865
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/22865.patch

Added FATE test for the dv_get_audio_sample_count utility function from 
libavcodec/dvaudio.h. The test covers all 1024 valid permutations of the input 
arguments (dsf, buffer[0], and buffer[3]).

Added FATE test for libavcodec/codec2utils.h to verify the correct packing and 
unpacking of the 4 byte metadata array across all valid modes (0 to 
CODEC2_MODE_MAX). It also tests out of bounds modes (up to 15) to guarantee 
memory safety and forward compatibility with experimental wide-band modes.

Added FATE test for libavcodec/h274.c to verify parameter support validation 
via ff_h274_film_grain_params_supported, successful application of film grain 
on synthetic AVFrames, including proper rejection of unsupported modes as well 
as initialization and verification of SEI picture hashes via ff_h274_hash_init 
and ff_h274_hash_verify.

Coverage:

1. 0% -> 100% Line, 100% Function in libavcodec/dvaudio.h.
2. 0% -> 100% Line, 100% Function in libavcodec/codec2utils.h.
3. 0% -> 100% Line, 100% Function in libavcodec/h274.h.



>From c0b53683c91221888f242a0b24abd84b7ef05bf8 Mon Sep 17 00:00:00 2001
From: i-Amogh <[email protected]>
Date: Mon, 20 Apr 2026 07:32:38 +0530
Subject: [PATCH 1/3] avcodec/tests/dvaudio: Add FATE test for dvaudio.h

Addedd exhaustive FATE test for the dv_get_audio_sample_count utility function 
from libavcodec/dvaudio.h. The test covers all valid permutations of the input 
arguments to guarantee 100% line and branch coverage.

Signed-off-by: i-Amogh <[email protected]>
---
 libavcodec/Makefile        |    1 +
 libavcodec/tests/dvaudio.c |   45 ++
 tests/fate/libavcodec.mak  |    4 +
 tests/ref/fate/dvaudio     | 1024 ++++++++++++++++++++++++++++++++++++
 4 files changed, 1074 insertions(+)
 create mode 100644 libavcodec/tests/dvaudio.c
 create mode 100644 tests/ref/fate/dvaudio

diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 85d35913f3..92758e35f9 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -1368,6 +1368,7 @@ TESTPROGS = avcodec                                       
              \
             bitstream_be                                                \
             bitstream_le                                                \
             codec_desc                                                  \
+            dvaudio                                                     \
             htmlsubtitles                                               \
             jpeg2000dwt                                                 \
             mathops                                                    \
diff --git a/libavcodec/tests/dvaudio.c b/libavcodec/tests/dvaudio.c
new file mode 100644
index 0000000000..615859e6c2
--- /dev/null
+++ b/libavcodec/tests/dvaudio.c
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2026 Amogh Kumar Sinha
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+#include "libavcodec/dvaudio.h"
+
+int main(void)
+{
+    uint8_t buffer[4] = {0};
+    int dsf, buf0, buf3;
+
+    for (dsf = 0; dsf < 2; dsf++) {
+        for (buf0 = 0; buf0 < 64; buf0++) {
+            for (buf3 = 0; buf3 < 8; buf3++) {
+                int count;
+
+                buffer[0] = buf0;
+                buffer[3] = buf3 << 3;
+
+                count = dv_get_audio_sample_count(buffer, dsf);
+                printf("dsf:%d buf0:%02x buf3:%02x -> %d\n", dsf, buffer[0], 
buffer[3], count);
+            }
+        }
+    }
+
+    return 0;
+}
diff --git a/tests/fate/libavcodec.mak b/tests/fate/libavcodec.mak
index e2d616e307..cce6521587 100644
--- a/tests/fate/libavcodec.mak
+++ b/tests/fate/libavcodec.mak
@@ -38,6 +38,10 @@ fate-codec_desc: libavcodec/tests/codec_desc$(EXESUF)
 fate-codec_desc: CMD = run libavcodec/tests/codec_desc$(EXESUF)
 fate-codec_desc: CMP = null
 
+FATE_LIBAVCODEC-yes += fate-dvaudio
+fate-dvaudio: libavcodec/tests/dvaudio$(EXESUF)
+fate-dvaudio: CMD = run libavcodec/tests/dvaudio$(EXESUF)
+
 FATE_LIBAVCODEC-$(CONFIG_GOLOMB) += fate-golomb
 fate-golomb: libavcodec/tests/golomb$(EXESUF)
 fate-golomb: CMD = run libavcodec/tests/golomb$(EXESUF)
diff --git a/tests/ref/fate/dvaudio b/tests/ref/fate/dvaudio
new file mode 100644
index 0000000000..7a7cac1cff
--- /dev/null
+++ b/tests/ref/fate/dvaudio
@@ -0,0 +1,1024 @@
+dsf:0 buf0:00 buf3:00 -> 1580
+dsf:0 buf0:00 buf3:08 -> 1452
+dsf:0 buf0:00 buf3:10 -> 1053
+dsf:0 buf0:00 buf3:18 -> 1053
+dsf:0 buf0:00 buf3:20 -> 1053
+dsf:0 buf0:00 buf3:28 -> 1053
+dsf:0 buf0:00 buf3:30 -> 1053
+dsf:0 buf0:00 buf3:38 -> 1053
+dsf:0 buf0:01 buf3:00 -> 1581
+dsf:0 buf0:01 buf3:08 -> 1453
+dsf:0 buf0:01 buf3:10 -> 1054
+dsf:0 buf0:01 buf3:18 -> 1054
+dsf:0 buf0:01 buf3:20 -> 1054
+dsf:0 buf0:01 buf3:28 -> 1054
+dsf:0 buf0:01 buf3:30 -> 1054
+dsf:0 buf0:01 buf3:38 -> 1054
+dsf:0 buf0:02 buf3:00 -> 1582
+dsf:0 buf0:02 buf3:08 -> 1454
+dsf:0 buf0:02 buf3:10 -> 1055
+dsf:0 buf0:02 buf3:18 -> 1055
+dsf:0 buf0:02 buf3:20 -> 1055
+dsf:0 buf0:02 buf3:28 -> 1055
+dsf:0 buf0:02 buf3:30 -> 1055
+dsf:0 buf0:02 buf3:38 -> 1055
+dsf:0 buf0:03 buf3:00 -> 1583
+dsf:0 buf0:03 buf3:08 -> 1455
+dsf:0 buf0:03 buf3:10 -> 1056
+dsf:0 buf0:03 buf3:18 -> 1056
+dsf:0 buf0:03 buf3:20 -> 1056
+dsf:0 buf0:03 buf3:28 -> 1056
+dsf:0 buf0:03 buf3:30 -> 1056
+dsf:0 buf0:03 buf3:38 -> 1056
+dsf:0 buf0:04 buf3:00 -> 1584
+dsf:0 buf0:04 buf3:08 -> 1456
+dsf:0 buf0:04 buf3:10 -> 1057
+dsf:0 buf0:04 buf3:18 -> 1057
+dsf:0 buf0:04 buf3:20 -> 1057
+dsf:0 buf0:04 buf3:28 -> 1057
+dsf:0 buf0:04 buf3:30 -> 1057
+dsf:0 buf0:04 buf3:38 -> 1057
+dsf:0 buf0:05 buf3:00 -> 1585
+dsf:0 buf0:05 buf3:08 -> 1457
+dsf:0 buf0:05 buf3:10 -> 1058
+dsf:0 buf0:05 buf3:18 -> 1058
+dsf:0 buf0:05 buf3:20 -> 1058
+dsf:0 buf0:05 buf3:28 -> 1058
+dsf:0 buf0:05 buf3:30 -> 1058
+dsf:0 buf0:05 buf3:38 -> 1058
+dsf:0 buf0:06 buf3:00 -> 1586
+dsf:0 buf0:06 buf3:08 -> 1458
+dsf:0 buf0:06 buf3:10 -> 1059
+dsf:0 buf0:06 buf3:18 -> 1059
+dsf:0 buf0:06 buf3:20 -> 1059
+dsf:0 buf0:06 buf3:28 -> 1059
+dsf:0 buf0:06 buf3:30 -> 1059
+dsf:0 buf0:06 buf3:38 -> 1059
+dsf:0 buf0:07 buf3:00 -> 1587
+dsf:0 buf0:07 buf3:08 -> 1459
+dsf:0 buf0:07 buf3:10 -> 1060
+dsf:0 buf0:07 buf3:18 -> 1060
+dsf:0 buf0:07 buf3:20 -> 1060
+dsf:0 buf0:07 buf3:28 -> 1060
+dsf:0 buf0:07 buf3:30 -> 1060
+dsf:0 buf0:07 buf3:38 -> 1060
+dsf:0 buf0:08 buf3:00 -> 1588
+dsf:0 buf0:08 buf3:08 -> 1460
+dsf:0 buf0:08 buf3:10 -> 1061
+dsf:0 buf0:08 buf3:18 -> 1061
+dsf:0 buf0:08 buf3:20 -> 1061
+dsf:0 buf0:08 buf3:28 -> 1061
+dsf:0 buf0:08 buf3:30 -> 1061
+dsf:0 buf0:08 buf3:38 -> 1061
+dsf:0 buf0:09 buf3:00 -> 1589
+dsf:0 buf0:09 buf3:08 -> 1461
+dsf:0 buf0:09 buf3:10 -> 1062
+dsf:0 buf0:09 buf3:18 -> 1062
+dsf:0 buf0:09 buf3:20 -> 1062
+dsf:0 buf0:09 buf3:28 -> 1062
+dsf:0 buf0:09 buf3:30 -> 1062
+dsf:0 buf0:09 buf3:38 -> 1062
+dsf:0 buf0:0a buf3:00 -> 1590
+dsf:0 buf0:0a buf3:08 -> 1462
+dsf:0 buf0:0a buf3:10 -> 1063
+dsf:0 buf0:0a buf3:18 -> 1063
+dsf:0 buf0:0a buf3:20 -> 1063
+dsf:0 buf0:0a buf3:28 -> 1063
+dsf:0 buf0:0a buf3:30 -> 1063
+dsf:0 buf0:0a buf3:38 -> 1063
+dsf:0 buf0:0b buf3:00 -> 1591
+dsf:0 buf0:0b buf3:08 -> 1463
+dsf:0 buf0:0b buf3:10 -> 1064
+dsf:0 buf0:0b buf3:18 -> 1064
+dsf:0 buf0:0b buf3:20 -> 1064
+dsf:0 buf0:0b buf3:28 -> 1064
+dsf:0 buf0:0b buf3:30 -> 1064
+dsf:0 buf0:0b buf3:38 -> 1064
+dsf:0 buf0:0c buf3:00 -> 1592
+dsf:0 buf0:0c buf3:08 -> 1464
+dsf:0 buf0:0c buf3:10 -> 1065
+dsf:0 buf0:0c buf3:18 -> 1065
+dsf:0 buf0:0c buf3:20 -> 1065
+dsf:0 buf0:0c buf3:28 -> 1065
+dsf:0 buf0:0c buf3:30 -> 1065
+dsf:0 buf0:0c buf3:38 -> 1065
+dsf:0 buf0:0d buf3:00 -> 1593
+dsf:0 buf0:0d buf3:08 -> 1465
+dsf:0 buf0:0d buf3:10 -> 1066
+dsf:0 buf0:0d buf3:18 -> 1066
+dsf:0 buf0:0d buf3:20 -> 1066
+dsf:0 buf0:0d buf3:28 -> 1066
+dsf:0 buf0:0d buf3:30 -> 1066
+dsf:0 buf0:0d buf3:38 -> 1066
+dsf:0 buf0:0e buf3:00 -> 1594
+dsf:0 buf0:0e buf3:08 -> 1466
+dsf:0 buf0:0e buf3:10 -> 1067
+dsf:0 buf0:0e buf3:18 -> 1067
+dsf:0 buf0:0e buf3:20 -> 1067
+dsf:0 buf0:0e buf3:28 -> 1067
+dsf:0 buf0:0e buf3:30 -> 1067
+dsf:0 buf0:0e buf3:38 -> 1067
+dsf:0 buf0:0f buf3:00 -> 1595
+dsf:0 buf0:0f buf3:08 -> 1467
+dsf:0 buf0:0f buf3:10 -> 1068
+dsf:0 buf0:0f buf3:18 -> 1068
+dsf:0 buf0:0f buf3:20 -> 1068
+dsf:0 buf0:0f buf3:28 -> 1068
+dsf:0 buf0:0f buf3:30 -> 1068
+dsf:0 buf0:0f buf3:38 -> 1068
+dsf:0 buf0:10 buf3:00 -> 1596
+dsf:0 buf0:10 buf3:08 -> 1468
+dsf:0 buf0:10 buf3:10 -> 1069
+dsf:0 buf0:10 buf3:18 -> 1069
+dsf:0 buf0:10 buf3:20 -> 1069
+dsf:0 buf0:10 buf3:28 -> 1069
+dsf:0 buf0:10 buf3:30 -> 1069
+dsf:0 buf0:10 buf3:38 -> 1069
+dsf:0 buf0:11 buf3:00 -> 1597
+dsf:0 buf0:11 buf3:08 -> 1469
+dsf:0 buf0:11 buf3:10 -> 1070
+dsf:0 buf0:11 buf3:18 -> 1070
+dsf:0 buf0:11 buf3:20 -> 1070
+dsf:0 buf0:11 buf3:28 -> 1070
+dsf:0 buf0:11 buf3:30 -> 1070
+dsf:0 buf0:11 buf3:38 -> 1070
+dsf:0 buf0:12 buf3:00 -> 1598
+dsf:0 buf0:12 buf3:08 -> 1470
+dsf:0 buf0:12 buf3:10 -> 1071
+dsf:0 buf0:12 buf3:18 -> 1071
+dsf:0 buf0:12 buf3:20 -> 1071
+dsf:0 buf0:12 buf3:28 -> 1071
+dsf:0 buf0:12 buf3:30 -> 1071
+dsf:0 buf0:12 buf3:38 -> 1071
+dsf:0 buf0:13 buf3:00 -> 1599
+dsf:0 buf0:13 buf3:08 -> 1471
+dsf:0 buf0:13 buf3:10 -> 1072
+dsf:0 buf0:13 buf3:18 -> 1072
+dsf:0 buf0:13 buf3:20 -> 1072
+dsf:0 buf0:13 buf3:28 -> 1072
+dsf:0 buf0:13 buf3:30 -> 1072
+dsf:0 buf0:13 buf3:38 -> 1072
+dsf:0 buf0:14 buf3:00 -> 1600
+dsf:0 buf0:14 buf3:08 -> 1472
+dsf:0 buf0:14 buf3:10 -> 1073
+dsf:0 buf0:14 buf3:18 -> 1073
+dsf:0 buf0:14 buf3:20 -> 1073
+dsf:0 buf0:14 buf3:28 -> 1073
+dsf:0 buf0:14 buf3:30 -> 1073
+dsf:0 buf0:14 buf3:38 -> 1073
+dsf:0 buf0:15 buf3:00 -> 1601
+dsf:0 buf0:15 buf3:08 -> 1473
+dsf:0 buf0:15 buf3:10 -> 1074
+dsf:0 buf0:15 buf3:18 -> 1074
+dsf:0 buf0:15 buf3:20 -> 1074
+dsf:0 buf0:15 buf3:28 -> 1074
+dsf:0 buf0:15 buf3:30 -> 1074
+dsf:0 buf0:15 buf3:38 -> 1074
+dsf:0 buf0:16 buf3:00 -> 1602
+dsf:0 buf0:16 buf3:08 -> 1474
+dsf:0 buf0:16 buf3:10 -> 1075
+dsf:0 buf0:16 buf3:18 -> 1075
+dsf:0 buf0:16 buf3:20 -> 1075
+dsf:0 buf0:16 buf3:28 -> 1075
+dsf:0 buf0:16 buf3:30 -> 1075
+dsf:0 buf0:16 buf3:38 -> 1075
+dsf:0 buf0:17 buf3:00 -> 1603
+dsf:0 buf0:17 buf3:08 -> 1475
+dsf:0 buf0:17 buf3:10 -> 1076
+dsf:0 buf0:17 buf3:18 -> 1076
+dsf:0 buf0:17 buf3:20 -> 1076
+dsf:0 buf0:17 buf3:28 -> 1076
+dsf:0 buf0:17 buf3:30 -> 1076
+dsf:0 buf0:17 buf3:38 -> 1076
+dsf:0 buf0:18 buf3:00 -> 1604
+dsf:0 buf0:18 buf3:08 -> 1476
+dsf:0 buf0:18 buf3:10 -> 1077
+dsf:0 buf0:18 buf3:18 -> 1077
+dsf:0 buf0:18 buf3:20 -> 1077
+dsf:0 buf0:18 buf3:28 -> 1077
+dsf:0 buf0:18 buf3:30 -> 1077
+dsf:0 buf0:18 buf3:38 -> 1077
+dsf:0 buf0:19 buf3:00 -> 1605
+dsf:0 buf0:19 buf3:08 -> 1477
+dsf:0 buf0:19 buf3:10 -> 1078
+dsf:0 buf0:19 buf3:18 -> 1078
+dsf:0 buf0:19 buf3:20 -> 1078
+dsf:0 buf0:19 buf3:28 -> 1078
+dsf:0 buf0:19 buf3:30 -> 1078
+dsf:0 buf0:19 buf3:38 -> 1078
+dsf:0 buf0:1a buf3:00 -> 1606
+dsf:0 buf0:1a buf3:08 -> 1478
+dsf:0 buf0:1a buf3:10 -> 1079
+dsf:0 buf0:1a buf3:18 -> 1079
+dsf:0 buf0:1a buf3:20 -> 1079
+dsf:0 buf0:1a buf3:28 -> 1079
+dsf:0 buf0:1a buf3:30 -> 1079
+dsf:0 buf0:1a buf3:38 -> 1079
+dsf:0 buf0:1b buf3:00 -> 1607
+dsf:0 buf0:1b buf3:08 -> 1479
+dsf:0 buf0:1b buf3:10 -> 1080
+dsf:0 buf0:1b buf3:18 -> 1080
+dsf:0 buf0:1b buf3:20 -> 1080
+dsf:0 buf0:1b buf3:28 -> 1080
+dsf:0 buf0:1b buf3:30 -> 1080
+dsf:0 buf0:1b buf3:38 -> 1080
+dsf:0 buf0:1c buf3:00 -> 1608
+dsf:0 buf0:1c buf3:08 -> 1480
+dsf:0 buf0:1c buf3:10 -> 1081
+dsf:0 buf0:1c buf3:18 -> 1081
+dsf:0 buf0:1c buf3:20 -> 1081
+dsf:0 buf0:1c buf3:28 -> 1081
+dsf:0 buf0:1c buf3:30 -> 1081
+dsf:0 buf0:1c buf3:38 -> 1081
+dsf:0 buf0:1d buf3:00 -> 1609
+dsf:0 buf0:1d buf3:08 -> 1481
+dsf:0 buf0:1d buf3:10 -> 1082
+dsf:0 buf0:1d buf3:18 -> 1082
+dsf:0 buf0:1d buf3:20 -> 1082
+dsf:0 buf0:1d buf3:28 -> 1082
+dsf:0 buf0:1d buf3:30 -> 1082
+dsf:0 buf0:1d buf3:38 -> 1082
+dsf:0 buf0:1e buf3:00 -> 1610
+dsf:0 buf0:1e buf3:08 -> 1482
+dsf:0 buf0:1e buf3:10 -> 1083
+dsf:0 buf0:1e buf3:18 -> 1083
+dsf:0 buf0:1e buf3:20 -> 1083
+dsf:0 buf0:1e buf3:28 -> 1083
+dsf:0 buf0:1e buf3:30 -> 1083
+dsf:0 buf0:1e buf3:38 -> 1083
+dsf:0 buf0:1f buf3:00 -> 1611
+dsf:0 buf0:1f buf3:08 -> 1483
+dsf:0 buf0:1f buf3:10 -> 1084
+dsf:0 buf0:1f buf3:18 -> 1084
+dsf:0 buf0:1f buf3:20 -> 1084
+dsf:0 buf0:1f buf3:28 -> 1084
+dsf:0 buf0:1f buf3:30 -> 1084
+dsf:0 buf0:1f buf3:38 -> 1084
+dsf:0 buf0:20 buf3:00 -> 1612
+dsf:0 buf0:20 buf3:08 -> 1484
+dsf:0 buf0:20 buf3:10 -> 1085
+dsf:0 buf0:20 buf3:18 -> 1085
+dsf:0 buf0:20 buf3:20 -> 1085
+dsf:0 buf0:20 buf3:28 -> 1085
+dsf:0 buf0:20 buf3:30 -> 1085
+dsf:0 buf0:20 buf3:38 -> 1085
+dsf:0 buf0:21 buf3:00 -> 1613
+dsf:0 buf0:21 buf3:08 -> 1485
+dsf:0 buf0:21 buf3:10 -> 1086
+dsf:0 buf0:21 buf3:18 -> 1086
+dsf:0 buf0:21 buf3:20 -> 1086
+dsf:0 buf0:21 buf3:28 -> 1086
+dsf:0 buf0:21 buf3:30 -> 1086
+dsf:0 buf0:21 buf3:38 -> 1086
+dsf:0 buf0:22 buf3:00 -> 1614
+dsf:0 buf0:22 buf3:08 -> 1486
+dsf:0 buf0:22 buf3:10 -> 1087
+dsf:0 buf0:22 buf3:18 -> 1087
+dsf:0 buf0:22 buf3:20 -> 1087
+dsf:0 buf0:22 buf3:28 -> 1087
+dsf:0 buf0:22 buf3:30 -> 1087
+dsf:0 buf0:22 buf3:38 -> 1087
+dsf:0 buf0:23 buf3:00 -> 1615
+dsf:0 buf0:23 buf3:08 -> 1487
+dsf:0 buf0:23 buf3:10 -> 1088
+dsf:0 buf0:23 buf3:18 -> 1088
+dsf:0 buf0:23 buf3:20 -> 1088
+dsf:0 buf0:23 buf3:28 -> 1088
+dsf:0 buf0:23 buf3:30 -> 1088
+dsf:0 buf0:23 buf3:38 -> 1088
+dsf:0 buf0:24 buf3:00 -> 1616
+dsf:0 buf0:24 buf3:08 -> 1488
+dsf:0 buf0:24 buf3:10 -> 1089
+dsf:0 buf0:24 buf3:18 -> 1089
+dsf:0 buf0:24 buf3:20 -> 1089
+dsf:0 buf0:24 buf3:28 -> 1089
+dsf:0 buf0:24 buf3:30 -> 1089
+dsf:0 buf0:24 buf3:38 -> 1089
+dsf:0 buf0:25 buf3:00 -> 1617
+dsf:0 buf0:25 buf3:08 -> 1489
+dsf:0 buf0:25 buf3:10 -> 1090
+dsf:0 buf0:25 buf3:18 -> 1090
+dsf:0 buf0:25 buf3:20 -> 1090
+dsf:0 buf0:25 buf3:28 -> 1090
+dsf:0 buf0:25 buf3:30 -> 1090
+dsf:0 buf0:25 buf3:38 -> 1090
+dsf:0 buf0:26 buf3:00 -> 1618
+dsf:0 buf0:26 buf3:08 -> 1490
+dsf:0 buf0:26 buf3:10 -> 1091
+dsf:0 buf0:26 buf3:18 -> 1091
+dsf:0 buf0:26 buf3:20 -> 1091
+dsf:0 buf0:26 buf3:28 -> 1091
+dsf:0 buf0:26 buf3:30 -> 1091
+dsf:0 buf0:26 buf3:38 -> 1091
+dsf:0 buf0:27 buf3:00 -> 1619
+dsf:0 buf0:27 buf3:08 -> 1491
+dsf:0 buf0:27 buf3:10 -> 1092
+dsf:0 buf0:27 buf3:18 -> 1092
+dsf:0 buf0:27 buf3:20 -> 1092
+dsf:0 buf0:27 buf3:28 -> 1092
+dsf:0 buf0:27 buf3:30 -> 1092
+dsf:0 buf0:27 buf3:38 -> 1092
+dsf:0 buf0:28 buf3:00 -> 1620
+dsf:0 buf0:28 buf3:08 -> 1492
+dsf:0 buf0:28 buf3:10 -> 1093
+dsf:0 buf0:28 buf3:18 -> 1093
+dsf:0 buf0:28 buf3:20 -> 1093
+dsf:0 buf0:28 buf3:28 -> 1093
+dsf:0 buf0:28 buf3:30 -> 1093
+dsf:0 buf0:28 buf3:38 -> 1093
+dsf:0 buf0:29 buf3:00 -> 1621
+dsf:0 buf0:29 buf3:08 -> 1493
+dsf:0 buf0:29 buf3:10 -> 1094
+dsf:0 buf0:29 buf3:18 -> 1094
+dsf:0 buf0:29 buf3:20 -> 1094
+dsf:0 buf0:29 buf3:28 -> 1094
+dsf:0 buf0:29 buf3:30 -> 1094
+dsf:0 buf0:29 buf3:38 -> 1094
+dsf:0 buf0:2a buf3:00 -> 1622
+dsf:0 buf0:2a buf3:08 -> 1494
+dsf:0 buf0:2a buf3:10 -> 1095
+dsf:0 buf0:2a buf3:18 -> 1095
+dsf:0 buf0:2a buf3:20 -> 1095
+dsf:0 buf0:2a buf3:28 -> 1095
+dsf:0 buf0:2a buf3:30 -> 1095
+dsf:0 buf0:2a buf3:38 -> 1095
+dsf:0 buf0:2b buf3:00 -> 1623
+dsf:0 buf0:2b buf3:08 -> 1495
+dsf:0 buf0:2b buf3:10 -> 1096
+dsf:0 buf0:2b buf3:18 -> 1096
+dsf:0 buf0:2b buf3:20 -> 1096
+dsf:0 buf0:2b buf3:28 -> 1096
+dsf:0 buf0:2b buf3:30 -> 1096
+dsf:0 buf0:2b buf3:38 -> 1096
+dsf:0 buf0:2c buf3:00 -> 1624
+dsf:0 buf0:2c buf3:08 -> 1496
+dsf:0 buf0:2c buf3:10 -> 1097
+dsf:0 buf0:2c buf3:18 -> 1097
+dsf:0 buf0:2c buf3:20 -> 1097
+dsf:0 buf0:2c buf3:28 -> 1097
+dsf:0 buf0:2c buf3:30 -> 1097
+dsf:0 buf0:2c buf3:38 -> 1097
+dsf:0 buf0:2d buf3:00 -> 1625
+dsf:0 buf0:2d buf3:08 -> 1497
+dsf:0 buf0:2d buf3:10 -> 1098
+dsf:0 buf0:2d buf3:18 -> 1098
+dsf:0 buf0:2d buf3:20 -> 1098
+dsf:0 buf0:2d buf3:28 -> 1098
+dsf:0 buf0:2d buf3:30 -> 1098
+dsf:0 buf0:2d buf3:38 -> 1098
+dsf:0 buf0:2e buf3:00 -> 1626
+dsf:0 buf0:2e buf3:08 -> 1498
+dsf:0 buf0:2e buf3:10 -> 1099
+dsf:0 buf0:2e buf3:18 -> 1099
+dsf:0 buf0:2e buf3:20 -> 1099
+dsf:0 buf0:2e buf3:28 -> 1099
+dsf:0 buf0:2e buf3:30 -> 1099
+dsf:0 buf0:2e buf3:38 -> 1099
+dsf:0 buf0:2f buf3:00 -> 1627
+dsf:0 buf0:2f buf3:08 -> 1499
+dsf:0 buf0:2f buf3:10 -> 1100
+dsf:0 buf0:2f buf3:18 -> 1100
+dsf:0 buf0:2f buf3:20 -> 1100
+dsf:0 buf0:2f buf3:28 -> 1100
+dsf:0 buf0:2f buf3:30 -> 1100
+dsf:0 buf0:2f buf3:38 -> 1100
+dsf:0 buf0:30 buf3:00 -> 1628
+dsf:0 buf0:30 buf3:08 -> 1500
+dsf:0 buf0:30 buf3:10 -> 1101
+dsf:0 buf0:30 buf3:18 -> 1101
+dsf:0 buf0:30 buf3:20 -> 1101
+dsf:0 buf0:30 buf3:28 -> 1101
+dsf:0 buf0:30 buf3:30 -> 1101
+dsf:0 buf0:30 buf3:38 -> 1101
+dsf:0 buf0:31 buf3:00 -> 1629
+dsf:0 buf0:31 buf3:08 -> 1501
+dsf:0 buf0:31 buf3:10 -> 1102
+dsf:0 buf0:31 buf3:18 -> 1102
+dsf:0 buf0:31 buf3:20 -> 1102
+dsf:0 buf0:31 buf3:28 -> 1102
+dsf:0 buf0:31 buf3:30 -> 1102
+dsf:0 buf0:31 buf3:38 -> 1102
+dsf:0 buf0:32 buf3:00 -> 1630
+dsf:0 buf0:32 buf3:08 -> 1502
+dsf:0 buf0:32 buf3:10 -> 1103
+dsf:0 buf0:32 buf3:18 -> 1103
+dsf:0 buf0:32 buf3:20 -> 1103
+dsf:0 buf0:32 buf3:28 -> 1103
+dsf:0 buf0:32 buf3:30 -> 1103
+dsf:0 buf0:32 buf3:38 -> 1103
+dsf:0 buf0:33 buf3:00 -> 1631
+dsf:0 buf0:33 buf3:08 -> 1503
+dsf:0 buf0:33 buf3:10 -> 1104
+dsf:0 buf0:33 buf3:18 -> 1104
+dsf:0 buf0:33 buf3:20 -> 1104
+dsf:0 buf0:33 buf3:28 -> 1104
+dsf:0 buf0:33 buf3:30 -> 1104
+dsf:0 buf0:33 buf3:38 -> 1104
+dsf:0 buf0:34 buf3:00 -> 1632
+dsf:0 buf0:34 buf3:08 -> 1504
+dsf:0 buf0:34 buf3:10 -> 1105
+dsf:0 buf0:34 buf3:18 -> 1105
+dsf:0 buf0:34 buf3:20 -> 1105
+dsf:0 buf0:34 buf3:28 -> 1105
+dsf:0 buf0:34 buf3:30 -> 1105
+dsf:0 buf0:34 buf3:38 -> 1105
+dsf:0 buf0:35 buf3:00 -> 1633
+dsf:0 buf0:35 buf3:08 -> 1505
+dsf:0 buf0:35 buf3:10 -> 1106
+dsf:0 buf0:35 buf3:18 -> 1106
+dsf:0 buf0:35 buf3:20 -> 1106
+dsf:0 buf0:35 buf3:28 -> 1106
+dsf:0 buf0:35 buf3:30 -> 1106
+dsf:0 buf0:35 buf3:38 -> 1106
+dsf:0 buf0:36 buf3:00 -> 1634
+dsf:0 buf0:36 buf3:08 -> 1506
+dsf:0 buf0:36 buf3:10 -> 1107
+dsf:0 buf0:36 buf3:18 -> 1107
+dsf:0 buf0:36 buf3:20 -> 1107
+dsf:0 buf0:36 buf3:28 -> 1107
+dsf:0 buf0:36 buf3:30 -> 1107
+dsf:0 buf0:36 buf3:38 -> 1107
+dsf:0 buf0:37 buf3:00 -> 1635
+dsf:0 buf0:37 buf3:08 -> 1507
+dsf:0 buf0:37 buf3:10 -> 1108
+dsf:0 buf0:37 buf3:18 -> 1108
+dsf:0 buf0:37 buf3:20 -> 1108
+dsf:0 buf0:37 buf3:28 -> 1108
+dsf:0 buf0:37 buf3:30 -> 1108
+dsf:0 buf0:37 buf3:38 -> 1108
+dsf:0 buf0:38 buf3:00 -> 1636
+dsf:0 buf0:38 buf3:08 -> 1508
+dsf:0 buf0:38 buf3:10 -> 1109
+dsf:0 buf0:38 buf3:18 -> 1109
+dsf:0 buf0:38 buf3:20 -> 1109
+dsf:0 buf0:38 buf3:28 -> 1109
+dsf:0 buf0:38 buf3:30 -> 1109
+dsf:0 buf0:38 buf3:38 -> 1109
+dsf:0 buf0:39 buf3:00 -> 1637
+dsf:0 buf0:39 buf3:08 -> 1509
+dsf:0 buf0:39 buf3:10 -> 1110
+dsf:0 buf0:39 buf3:18 -> 1110
+dsf:0 buf0:39 buf3:20 -> 1110
+dsf:0 buf0:39 buf3:28 -> 1110
+dsf:0 buf0:39 buf3:30 -> 1110
+dsf:0 buf0:39 buf3:38 -> 1110
+dsf:0 buf0:3a buf3:00 -> 1638
+dsf:0 buf0:3a buf3:08 -> 1510
+dsf:0 buf0:3a buf3:10 -> 1111
+dsf:0 buf0:3a buf3:18 -> 1111
+dsf:0 buf0:3a buf3:20 -> 1111
+dsf:0 buf0:3a buf3:28 -> 1111
+dsf:0 buf0:3a buf3:30 -> 1111
+dsf:0 buf0:3a buf3:38 -> 1111
+dsf:0 buf0:3b buf3:00 -> 1639
+dsf:0 buf0:3b buf3:08 -> 1511
+dsf:0 buf0:3b buf3:10 -> 1112
+dsf:0 buf0:3b buf3:18 -> 1112
+dsf:0 buf0:3b buf3:20 -> 1112
+dsf:0 buf0:3b buf3:28 -> 1112
+dsf:0 buf0:3b buf3:30 -> 1112
+dsf:0 buf0:3b buf3:38 -> 1112
+dsf:0 buf0:3c buf3:00 -> 1640
+dsf:0 buf0:3c buf3:08 -> 1512
+dsf:0 buf0:3c buf3:10 -> 1113
+dsf:0 buf0:3c buf3:18 -> 1113
+dsf:0 buf0:3c buf3:20 -> 1113
+dsf:0 buf0:3c buf3:28 -> 1113
+dsf:0 buf0:3c buf3:30 -> 1113
+dsf:0 buf0:3c buf3:38 -> 1113
+dsf:0 buf0:3d buf3:00 -> 1641
+dsf:0 buf0:3d buf3:08 -> 1513
+dsf:0 buf0:3d buf3:10 -> 1114
+dsf:0 buf0:3d buf3:18 -> 1114
+dsf:0 buf0:3d buf3:20 -> 1114
+dsf:0 buf0:3d buf3:28 -> 1114
+dsf:0 buf0:3d buf3:30 -> 1114
+dsf:0 buf0:3d buf3:38 -> 1114
+dsf:0 buf0:3e buf3:00 -> 1642
+dsf:0 buf0:3e buf3:08 -> 1514
+dsf:0 buf0:3e buf3:10 -> 1115
+dsf:0 buf0:3e buf3:18 -> 1115
+dsf:0 buf0:3e buf3:20 -> 1115
+dsf:0 buf0:3e buf3:28 -> 1115
+dsf:0 buf0:3e buf3:30 -> 1115
+dsf:0 buf0:3e buf3:38 -> 1115
+dsf:0 buf0:3f buf3:00 -> 1643
+dsf:0 buf0:3f buf3:08 -> 1515
+dsf:0 buf0:3f buf3:10 -> 1116
+dsf:0 buf0:3f buf3:18 -> 1116
+dsf:0 buf0:3f buf3:20 -> 1116
+dsf:0 buf0:3f buf3:28 -> 1116
+dsf:0 buf0:3f buf3:30 -> 1116
+dsf:0 buf0:3f buf3:38 -> 1116
+dsf:1 buf0:00 buf3:00 -> 1896
+dsf:1 buf0:00 buf3:08 -> 1742
+dsf:1 buf0:00 buf3:10 -> 1264
+dsf:1 buf0:00 buf3:18 -> 1264
+dsf:1 buf0:00 buf3:20 -> 1264
+dsf:1 buf0:00 buf3:28 -> 1264
+dsf:1 buf0:00 buf3:30 -> 1264
+dsf:1 buf0:00 buf3:38 -> 1264
+dsf:1 buf0:01 buf3:00 -> 1897
+dsf:1 buf0:01 buf3:08 -> 1743
+dsf:1 buf0:01 buf3:10 -> 1265
+dsf:1 buf0:01 buf3:18 -> 1265
+dsf:1 buf0:01 buf3:20 -> 1265
+dsf:1 buf0:01 buf3:28 -> 1265
+dsf:1 buf0:01 buf3:30 -> 1265
+dsf:1 buf0:01 buf3:38 -> 1265
+dsf:1 buf0:02 buf3:00 -> 1898
+dsf:1 buf0:02 buf3:08 -> 1744
+dsf:1 buf0:02 buf3:10 -> 1266
+dsf:1 buf0:02 buf3:18 -> 1266
+dsf:1 buf0:02 buf3:20 -> 1266
+dsf:1 buf0:02 buf3:28 -> 1266
+dsf:1 buf0:02 buf3:30 -> 1266
+dsf:1 buf0:02 buf3:38 -> 1266
+dsf:1 buf0:03 buf3:00 -> 1899
+dsf:1 buf0:03 buf3:08 -> 1745
+dsf:1 buf0:03 buf3:10 -> 1267
+dsf:1 buf0:03 buf3:18 -> 1267
+dsf:1 buf0:03 buf3:20 -> 1267
+dsf:1 buf0:03 buf3:28 -> 1267
+dsf:1 buf0:03 buf3:30 -> 1267
+dsf:1 buf0:03 buf3:38 -> 1267
+dsf:1 buf0:04 buf3:00 -> 1900
+dsf:1 buf0:04 buf3:08 -> 1746
+dsf:1 buf0:04 buf3:10 -> 1268
+dsf:1 buf0:04 buf3:18 -> 1268
+dsf:1 buf0:04 buf3:20 -> 1268
+dsf:1 buf0:04 buf3:28 -> 1268
+dsf:1 buf0:04 buf3:30 -> 1268
+dsf:1 buf0:04 buf3:38 -> 1268
+dsf:1 buf0:05 buf3:00 -> 1901
+dsf:1 buf0:05 buf3:08 -> 1747
+dsf:1 buf0:05 buf3:10 -> 1269
+dsf:1 buf0:05 buf3:18 -> 1269
+dsf:1 buf0:05 buf3:20 -> 1269
+dsf:1 buf0:05 buf3:28 -> 1269
+dsf:1 buf0:05 buf3:30 -> 1269
+dsf:1 buf0:05 buf3:38 -> 1269
+dsf:1 buf0:06 buf3:00 -> 1902
+dsf:1 buf0:06 buf3:08 -> 1748
+dsf:1 buf0:06 buf3:10 -> 1270
+dsf:1 buf0:06 buf3:18 -> 1270
+dsf:1 buf0:06 buf3:20 -> 1270
+dsf:1 buf0:06 buf3:28 -> 1270
+dsf:1 buf0:06 buf3:30 -> 1270
+dsf:1 buf0:06 buf3:38 -> 1270
+dsf:1 buf0:07 buf3:00 -> 1903
+dsf:1 buf0:07 buf3:08 -> 1749
+dsf:1 buf0:07 buf3:10 -> 1271
+dsf:1 buf0:07 buf3:18 -> 1271
+dsf:1 buf0:07 buf3:20 -> 1271
+dsf:1 buf0:07 buf3:28 -> 1271
+dsf:1 buf0:07 buf3:30 -> 1271
+dsf:1 buf0:07 buf3:38 -> 1271
+dsf:1 buf0:08 buf3:00 -> 1904
+dsf:1 buf0:08 buf3:08 -> 1750
+dsf:1 buf0:08 buf3:10 -> 1272
+dsf:1 buf0:08 buf3:18 -> 1272
+dsf:1 buf0:08 buf3:20 -> 1272
+dsf:1 buf0:08 buf3:28 -> 1272
+dsf:1 buf0:08 buf3:30 -> 1272
+dsf:1 buf0:08 buf3:38 -> 1272
+dsf:1 buf0:09 buf3:00 -> 1905
+dsf:1 buf0:09 buf3:08 -> 1751
+dsf:1 buf0:09 buf3:10 -> 1273
+dsf:1 buf0:09 buf3:18 -> 1273
+dsf:1 buf0:09 buf3:20 -> 1273
+dsf:1 buf0:09 buf3:28 -> 1273
+dsf:1 buf0:09 buf3:30 -> 1273
+dsf:1 buf0:09 buf3:38 -> 1273
+dsf:1 buf0:0a buf3:00 -> 1906
+dsf:1 buf0:0a buf3:08 -> 1752
+dsf:1 buf0:0a buf3:10 -> 1274
+dsf:1 buf0:0a buf3:18 -> 1274
+dsf:1 buf0:0a buf3:20 -> 1274
+dsf:1 buf0:0a buf3:28 -> 1274
+dsf:1 buf0:0a buf3:30 -> 1274
+dsf:1 buf0:0a buf3:38 -> 1274
+dsf:1 buf0:0b buf3:00 -> 1907
+dsf:1 buf0:0b buf3:08 -> 1753
+dsf:1 buf0:0b buf3:10 -> 1275
+dsf:1 buf0:0b buf3:18 -> 1275
+dsf:1 buf0:0b buf3:20 -> 1275
+dsf:1 buf0:0b buf3:28 -> 1275
+dsf:1 buf0:0b buf3:30 -> 1275
+dsf:1 buf0:0b buf3:38 -> 1275
+dsf:1 buf0:0c buf3:00 -> 1908
+dsf:1 buf0:0c buf3:08 -> 1754
+dsf:1 buf0:0c buf3:10 -> 1276
+dsf:1 buf0:0c buf3:18 -> 1276
+dsf:1 buf0:0c buf3:20 -> 1276
+dsf:1 buf0:0c buf3:28 -> 1276
+dsf:1 buf0:0c buf3:30 -> 1276
+dsf:1 buf0:0c buf3:38 -> 1276
+dsf:1 buf0:0d buf3:00 -> 1909
+dsf:1 buf0:0d buf3:08 -> 1755
+dsf:1 buf0:0d buf3:10 -> 1277
+dsf:1 buf0:0d buf3:18 -> 1277
+dsf:1 buf0:0d buf3:20 -> 1277
+dsf:1 buf0:0d buf3:28 -> 1277
+dsf:1 buf0:0d buf3:30 -> 1277
+dsf:1 buf0:0d buf3:38 -> 1277
+dsf:1 buf0:0e buf3:00 -> 1910
+dsf:1 buf0:0e buf3:08 -> 1756
+dsf:1 buf0:0e buf3:10 -> 1278
+dsf:1 buf0:0e buf3:18 -> 1278
+dsf:1 buf0:0e buf3:20 -> 1278
+dsf:1 buf0:0e buf3:28 -> 1278
+dsf:1 buf0:0e buf3:30 -> 1278
+dsf:1 buf0:0e buf3:38 -> 1278
+dsf:1 buf0:0f buf3:00 -> 1911
+dsf:1 buf0:0f buf3:08 -> 1757
+dsf:1 buf0:0f buf3:10 -> 1279
+dsf:1 buf0:0f buf3:18 -> 1279
+dsf:1 buf0:0f buf3:20 -> 1279
+dsf:1 buf0:0f buf3:28 -> 1279
+dsf:1 buf0:0f buf3:30 -> 1279
+dsf:1 buf0:0f buf3:38 -> 1279
+dsf:1 buf0:10 buf3:00 -> 1912
+dsf:1 buf0:10 buf3:08 -> 1758
+dsf:1 buf0:10 buf3:10 -> 1280
+dsf:1 buf0:10 buf3:18 -> 1280
+dsf:1 buf0:10 buf3:20 -> 1280
+dsf:1 buf0:10 buf3:28 -> 1280
+dsf:1 buf0:10 buf3:30 -> 1280
+dsf:1 buf0:10 buf3:38 -> 1280
+dsf:1 buf0:11 buf3:00 -> 1913
+dsf:1 buf0:11 buf3:08 -> 1759
+dsf:1 buf0:11 buf3:10 -> 1281
+dsf:1 buf0:11 buf3:18 -> 1281
+dsf:1 buf0:11 buf3:20 -> 1281
+dsf:1 buf0:11 buf3:28 -> 1281
+dsf:1 buf0:11 buf3:30 -> 1281
+dsf:1 buf0:11 buf3:38 -> 1281
+dsf:1 buf0:12 buf3:00 -> 1914
+dsf:1 buf0:12 buf3:08 -> 1760
+dsf:1 buf0:12 buf3:10 -> 1282
+dsf:1 buf0:12 buf3:18 -> 1282
+dsf:1 buf0:12 buf3:20 -> 1282
+dsf:1 buf0:12 buf3:28 -> 1282
+dsf:1 buf0:12 buf3:30 -> 1282
+dsf:1 buf0:12 buf3:38 -> 1282
+dsf:1 buf0:13 buf3:00 -> 1915
+dsf:1 buf0:13 buf3:08 -> 1761
+dsf:1 buf0:13 buf3:10 -> 1283
+dsf:1 buf0:13 buf3:18 -> 1283
+dsf:1 buf0:13 buf3:20 -> 1283
+dsf:1 buf0:13 buf3:28 -> 1283
+dsf:1 buf0:13 buf3:30 -> 1283
+dsf:1 buf0:13 buf3:38 -> 1283
+dsf:1 buf0:14 buf3:00 -> 1916
+dsf:1 buf0:14 buf3:08 -> 1762
+dsf:1 buf0:14 buf3:10 -> 1284
+dsf:1 buf0:14 buf3:18 -> 1284
+dsf:1 buf0:14 buf3:20 -> 1284
+dsf:1 buf0:14 buf3:28 -> 1284
+dsf:1 buf0:14 buf3:30 -> 1284
+dsf:1 buf0:14 buf3:38 -> 1284
+dsf:1 buf0:15 buf3:00 -> 1917
+dsf:1 buf0:15 buf3:08 -> 1763
+dsf:1 buf0:15 buf3:10 -> 1285
+dsf:1 buf0:15 buf3:18 -> 1285
+dsf:1 buf0:15 buf3:20 -> 1285
+dsf:1 buf0:15 buf3:28 -> 1285
+dsf:1 buf0:15 buf3:30 -> 1285
+dsf:1 buf0:15 buf3:38 -> 1285
+dsf:1 buf0:16 buf3:00 -> 1918
+dsf:1 buf0:16 buf3:08 -> 1764
+dsf:1 buf0:16 buf3:10 -> 1286
+dsf:1 buf0:16 buf3:18 -> 1286
+dsf:1 buf0:16 buf3:20 -> 1286
+dsf:1 buf0:16 buf3:28 -> 1286
+dsf:1 buf0:16 buf3:30 -> 1286
+dsf:1 buf0:16 buf3:38 -> 1286
+dsf:1 buf0:17 buf3:00 -> 1919
+dsf:1 buf0:17 buf3:08 -> 1765
+dsf:1 buf0:17 buf3:10 -> 1287
+dsf:1 buf0:17 buf3:18 -> 1287
+dsf:1 buf0:17 buf3:20 -> 1287
+dsf:1 buf0:17 buf3:28 -> 1287
+dsf:1 buf0:17 buf3:30 -> 1287
+dsf:1 buf0:17 buf3:38 -> 1287
+dsf:1 buf0:18 buf3:00 -> 1920
+dsf:1 buf0:18 buf3:08 -> 1766
+dsf:1 buf0:18 buf3:10 -> 1288
+dsf:1 buf0:18 buf3:18 -> 1288
+dsf:1 buf0:18 buf3:20 -> 1288
+dsf:1 buf0:18 buf3:28 -> 1288
+dsf:1 buf0:18 buf3:30 -> 1288
+dsf:1 buf0:18 buf3:38 -> 1288
+dsf:1 buf0:19 buf3:00 -> 1921
+dsf:1 buf0:19 buf3:08 -> 1767
+dsf:1 buf0:19 buf3:10 -> 1289
+dsf:1 buf0:19 buf3:18 -> 1289
+dsf:1 buf0:19 buf3:20 -> 1289
+dsf:1 buf0:19 buf3:28 -> 1289
+dsf:1 buf0:19 buf3:30 -> 1289
+dsf:1 buf0:19 buf3:38 -> 1289
+dsf:1 buf0:1a buf3:00 -> 1922
+dsf:1 buf0:1a buf3:08 -> 1768
+dsf:1 buf0:1a buf3:10 -> 1290
+dsf:1 buf0:1a buf3:18 -> 1290
+dsf:1 buf0:1a buf3:20 -> 1290
+dsf:1 buf0:1a buf3:28 -> 1290
+dsf:1 buf0:1a buf3:30 -> 1290
+dsf:1 buf0:1a buf3:38 -> 1290
+dsf:1 buf0:1b buf3:00 -> 1923
+dsf:1 buf0:1b buf3:08 -> 1769
+dsf:1 buf0:1b buf3:10 -> 1291
+dsf:1 buf0:1b buf3:18 -> 1291
+dsf:1 buf0:1b buf3:20 -> 1291
+dsf:1 buf0:1b buf3:28 -> 1291
+dsf:1 buf0:1b buf3:30 -> 1291
+dsf:1 buf0:1b buf3:38 -> 1291
+dsf:1 buf0:1c buf3:00 -> 1924
+dsf:1 buf0:1c buf3:08 -> 1770
+dsf:1 buf0:1c buf3:10 -> 1292
+dsf:1 buf0:1c buf3:18 -> 1292
+dsf:1 buf0:1c buf3:20 -> 1292
+dsf:1 buf0:1c buf3:28 -> 1292
+dsf:1 buf0:1c buf3:30 -> 1292
+dsf:1 buf0:1c buf3:38 -> 1292
+dsf:1 buf0:1d buf3:00 -> 1925
+dsf:1 buf0:1d buf3:08 -> 1771
+dsf:1 buf0:1d buf3:10 -> 1293
+dsf:1 buf0:1d buf3:18 -> 1293
+dsf:1 buf0:1d buf3:20 -> 1293
+dsf:1 buf0:1d buf3:28 -> 1293
+dsf:1 buf0:1d buf3:30 -> 1293
+dsf:1 buf0:1d buf3:38 -> 1293
+dsf:1 buf0:1e buf3:00 -> 1926
+dsf:1 buf0:1e buf3:08 -> 1772
+dsf:1 buf0:1e buf3:10 -> 1294
+dsf:1 buf0:1e buf3:18 -> 1294
+dsf:1 buf0:1e buf3:20 -> 1294
+dsf:1 buf0:1e buf3:28 -> 1294
+dsf:1 buf0:1e buf3:30 -> 1294
+dsf:1 buf0:1e buf3:38 -> 1294
+dsf:1 buf0:1f buf3:00 -> 1927
+dsf:1 buf0:1f buf3:08 -> 1773
+dsf:1 buf0:1f buf3:10 -> 1295
+dsf:1 buf0:1f buf3:18 -> 1295
+dsf:1 buf0:1f buf3:20 -> 1295
+dsf:1 buf0:1f buf3:28 -> 1295
+dsf:1 buf0:1f buf3:30 -> 1295
+dsf:1 buf0:1f buf3:38 -> 1295
+dsf:1 buf0:20 buf3:00 -> 1928
+dsf:1 buf0:20 buf3:08 -> 1774
+dsf:1 buf0:20 buf3:10 -> 1296
+dsf:1 buf0:20 buf3:18 -> 1296
+dsf:1 buf0:20 buf3:20 -> 1296
+dsf:1 buf0:20 buf3:28 -> 1296
+dsf:1 buf0:20 buf3:30 -> 1296
+dsf:1 buf0:20 buf3:38 -> 1296
+dsf:1 buf0:21 buf3:00 -> 1929
+dsf:1 buf0:21 buf3:08 -> 1775
+dsf:1 buf0:21 buf3:10 -> 1297
+dsf:1 buf0:21 buf3:18 -> 1297
+dsf:1 buf0:21 buf3:20 -> 1297
+dsf:1 buf0:21 buf3:28 -> 1297
+dsf:1 buf0:21 buf3:30 -> 1297
+dsf:1 buf0:21 buf3:38 -> 1297
+dsf:1 buf0:22 buf3:00 -> 1930
+dsf:1 buf0:22 buf3:08 -> 1776
+dsf:1 buf0:22 buf3:10 -> 1298
+dsf:1 buf0:22 buf3:18 -> 1298
+dsf:1 buf0:22 buf3:20 -> 1298
+dsf:1 buf0:22 buf3:28 -> 1298
+dsf:1 buf0:22 buf3:30 -> 1298
+dsf:1 buf0:22 buf3:38 -> 1298
+dsf:1 buf0:23 buf3:00 -> 1931
+dsf:1 buf0:23 buf3:08 -> 1777
+dsf:1 buf0:23 buf3:10 -> 1299
+dsf:1 buf0:23 buf3:18 -> 1299
+dsf:1 buf0:23 buf3:20 -> 1299
+dsf:1 buf0:23 buf3:28 -> 1299
+dsf:1 buf0:23 buf3:30 -> 1299
+dsf:1 buf0:23 buf3:38 -> 1299
+dsf:1 buf0:24 buf3:00 -> 1932
+dsf:1 buf0:24 buf3:08 -> 1778
+dsf:1 buf0:24 buf3:10 -> 1300
+dsf:1 buf0:24 buf3:18 -> 1300
+dsf:1 buf0:24 buf3:20 -> 1300
+dsf:1 buf0:24 buf3:28 -> 1300
+dsf:1 buf0:24 buf3:30 -> 1300
+dsf:1 buf0:24 buf3:38 -> 1300
+dsf:1 buf0:25 buf3:00 -> 1933
+dsf:1 buf0:25 buf3:08 -> 1779
+dsf:1 buf0:25 buf3:10 -> 1301
+dsf:1 buf0:25 buf3:18 -> 1301
+dsf:1 buf0:25 buf3:20 -> 1301
+dsf:1 buf0:25 buf3:28 -> 1301
+dsf:1 buf0:25 buf3:30 -> 1301
+dsf:1 buf0:25 buf3:38 -> 1301
+dsf:1 buf0:26 buf3:00 -> 1934
+dsf:1 buf0:26 buf3:08 -> 1780
+dsf:1 buf0:26 buf3:10 -> 1302
+dsf:1 buf0:26 buf3:18 -> 1302
+dsf:1 buf0:26 buf3:20 -> 1302
+dsf:1 buf0:26 buf3:28 -> 1302
+dsf:1 buf0:26 buf3:30 -> 1302
+dsf:1 buf0:26 buf3:38 -> 1302
+dsf:1 buf0:27 buf3:00 -> 1935
+dsf:1 buf0:27 buf3:08 -> 1781
+dsf:1 buf0:27 buf3:10 -> 1303
+dsf:1 buf0:27 buf3:18 -> 1303
+dsf:1 buf0:27 buf3:20 -> 1303
+dsf:1 buf0:27 buf3:28 -> 1303
+dsf:1 buf0:27 buf3:30 -> 1303
+dsf:1 buf0:27 buf3:38 -> 1303
+dsf:1 buf0:28 buf3:00 -> 1936
+dsf:1 buf0:28 buf3:08 -> 1782
+dsf:1 buf0:28 buf3:10 -> 1304
+dsf:1 buf0:28 buf3:18 -> 1304
+dsf:1 buf0:28 buf3:20 -> 1304
+dsf:1 buf0:28 buf3:28 -> 1304
+dsf:1 buf0:28 buf3:30 -> 1304
+dsf:1 buf0:28 buf3:38 -> 1304
+dsf:1 buf0:29 buf3:00 -> 1937
+dsf:1 buf0:29 buf3:08 -> 1783
+dsf:1 buf0:29 buf3:10 -> 1305
+dsf:1 buf0:29 buf3:18 -> 1305
+dsf:1 buf0:29 buf3:20 -> 1305
+dsf:1 buf0:29 buf3:28 -> 1305
+dsf:1 buf0:29 buf3:30 -> 1305
+dsf:1 buf0:29 buf3:38 -> 1305
+dsf:1 buf0:2a buf3:00 -> 1938
+dsf:1 buf0:2a buf3:08 -> 1784
+dsf:1 buf0:2a buf3:10 -> 1306
+dsf:1 buf0:2a buf3:18 -> 1306
+dsf:1 buf0:2a buf3:20 -> 1306
+dsf:1 buf0:2a buf3:28 -> 1306
+dsf:1 buf0:2a buf3:30 -> 1306
+dsf:1 buf0:2a buf3:38 -> 1306
+dsf:1 buf0:2b buf3:00 -> 1939
+dsf:1 buf0:2b buf3:08 -> 1785
+dsf:1 buf0:2b buf3:10 -> 1307
+dsf:1 buf0:2b buf3:18 -> 1307
+dsf:1 buf0:2b buf3:20 -> 1307
+dsf:1 buf0:2b buf3:28 -> 1307
+dsf:1 buf0:2b buf3:30 -> 1307
+dsf:1 buf0:2b buf3:38 -> 1307
+dsf:1 buf0:2c buf3:00 -> 1940
+dsf:1 buf0:2c buf3:08 -> 1786
+dsf:1 buf0:2c buf3:10 -> 1308
+dsf:1 buf0:2c buf3:18 -> 1308
+dsf:1 buf0:2c buf3:20 -> 1308
+dsf:1 buf0:2c buf3:28 -> 1308
+dsf:1 buf0:2c buf3:30 -> 1308
+dsf:1 buf0:2c buf3:38 -> 1308
+dsf:1 buf0:2d buf3:00 -> 1941
+dsf:1 buf0:2d buf3:08 -> 1787
+dsf:1 buf0:2d buf3:10 -> 1309
+dsf:1 buf0:2d buf3:18 -> 1309
+dsf:1 buf0:2d buf3:20 -> 1309
+dsf:1 buf0:2d buf3:28 -> 1309
+dsf:1 buf0:2d buf3:30 -> 1309
+dsf:1 buf0:2d buf3:38 -> 1309
+dsf:1 buf0:2e buf3:00 -> 1942
+dsf:1 buf0:2e buf3:08 -> 1788
+dsf:1 buf0:2e buf3:10 -> 1310
+dsf:1 buf0:2e buf3:18 -> 1310
+dsf:1 buf0:2e buf3:20 -> 1310
+dsf:1 buf0:2e buf3:28 -> 1310
+dsf:1 buf0:2e buf3:30 -> 1310
+dsf:1 buf0:2e buf3:38 -> 1310
+dsf:1 buf0:2f buf3:00 -> 1943
+dsf:1 buf0:2f buf3:08 -> 1789
+dsf:1 buf0:2f buf3:10 -> 1311
+dsf:1 buf0:2f buf3:18 -> 1311
+dsf:1 buf0:2f buf3:20 -> 1311
+dsf:1 buf0:2f buf3:28 -> 1311
+dsf:1 buf0:2f buf3:30 -> 1311
+dsf:1 buf0:2f buf3:38 -> 1311
+dsf:1 buf0:30 buf3:00 -> 1944
+dsf:1 buf0:30 buf3:08 -> 1790
+dsf:1 buf0:30 buf3:10 -> 1312
+dsf:1 buf0:30 buf3:18 -> 1312
+dsf:1 buf0:30 buf3:20 -> 1312
+dsf:1 buf0:30 buf3:28 -> 1312
+dsf:1 buf0:30 buf3:30 -> 1312
+dsf:1 buf0:30 buf3:38 -> 1312
+dsf:1 buf0:31 buf3:00 -> 1945
+dsf:1 buf0:31 buf3:08 -> 1791
+dsf:1 buf0:31 buf3:10 -> 1313
+dsf:1 buf0:31 buf3:18 -> 1313
+dsf:1 buf0:31 buf3:20 -> 1313
+dsf:1 buf0:31 buf3:28 -> 1313
+dsf:1 buf0:31 buf3:30 -> 1313
+dsf:1 buf0:31 buf3:38 -> 1313
+dsf:1 buf0:32 buf3:00 -> 1946
+dsf:1 buf0:32 buf3:08 -> 1792
+dsf:1 buf0:32 buf3:10 -> 1314
+dsf:1 buf0:32 buf3:18 -> 1314
+dsf:1 buf0:32 buf3:20 -> 1314
+dsf:1 buf0:32 buf3:28 -> 1314
+dsf:1 buf0:32 buf3:30 -> 1314
+dsf:1 buf0:32 buf3:38 -> 1314
+dsf:1 buf0:33 buf3:00 -> 1947
+dsf:1 buf0:33 buf3:08 -> 1793
+dsf:1 buf0:33 buf3:10 -> 1315
+dsf:1 buf0:33 buf3:18 -> 1315
+dsf:1 buf0:33 buf3:20 -> 1315
+dsf:1 buf0:33 buf3:28 -> 1315
+dsf:1 buf0:33 buf3:30 -> 1315
+dsf:1 buf0:33 buf3:38 -> 1315
+dsf:1 buf0:34 buf3:00 -> 1948
+dsf:1 buf0:34 buf3:08 -> 1794
+dsf:1 buf0:34 buf3:10 -> 1316
+dsf:1 buf0:34 buf3:18 -> 1316
+dsf:1 buf0:34 buf3:20 -> 1316
+dsf:1 buf0:34 buf3:28 -> 1316
+dsf:1 buf0:34 buf3:30 -> 1316
+dsf:1 buf0:34 buf3:38 -> 1316
+dsf:1 buf0:35 buf3:00 -> 1949
+dsf:1 buf0:35 buf3:08 -> 1795
+dsf:1 buf0:35 buf3:10 -> 1317
+dsf:1 buf0:35 buf3:18 -> 1317
+dsf:1 buf0:35 buf3:20 -> 1317
+dsf:1 buf0:35 buf3:28 -> 1317
+dsf:1 buf0:35 buf3:30 -> 1317
+dsf:1 buf0:35 buf3:38 -> 1317
+dsf:1 buf0:36 buf3:00 -> 1950
+dsf:1 buf0:36 buf3:08 -> 1796
+dsf:1 buf0:36 buf3:10 -> 1318
+dsf:1 buf0:36 buf3:18 -> 1318
+dsf:1 buf0:36 buf3:20 -> 1318
+dsf:1 buf0:36 buf3:28 -> 1318
+dsf:1 buf0:36 buf3:30 -> 1318
+dsf:1 buf0:36 buf3:38 -> 1318
+dsf:1 buf0:37 buf3:00 -> 1951
+dsf:1 buf0:37 buf3:08 -> 1797
+dsf:1 buf0:37 buf3:10 -> 1319
+dsf:1 buf0:37 buf3:18 -> 1319
+dsf:1 buf0:37 buf3:20 -> 1319
+dsf:1 buf0:37 buf3:28 -> 1319
+dsf:1 buf0:37 buf3:30 -> 1319
+dsf:1 buf0:37 buf3:38 -> 1319
+dsf:1 buf0:38 buf3:00 -> 1952
+dsf:1 buf0:38 buf3:08 -> 1798
+dsf:1 buf0:38 buf3:10 -> 1320
+dsf:1 buf0:38 buf3:18 -> 1320
+dsf:1 buf0:38 buf3:20 -> 1320
+dsf:1 buf0:38 buf3:28 -> 1320
+dsf:1 buf0:38 buf3:30 -> 1320
+dsf:1 buf0:38 buf3:38 -> 1320
+dsf:1 buf0:39 buf3:00 -> 1953
+dsf:1 buf0:39 buf3:08 -> 1799
+dsf:1 buf0:39 buf3:10 -> 1321
+dsf:1 buf0:39 buf3:18 -> 1321
+dsf:1 buf0:39 buf3:20 -> 1321
+dsf:1 buf0:39 buf3:28 -> 1321
+dsf:1 buf0:39 buf3:30 -> 1321
+dsf:1 buf0:39 buf3:38 -> 1321
+dsf:1 buf0:3a buf3:00 -> 1954
+dsf:1 buf0:3a buf3:08 -> 1800
+dsf:1 buf0:3a buf3:10 -> 1322
+dsf:1 buf0:3a buf3:18 -> 1322
+dsf:1 buf0:3a buf3:20 -> 1322
+dsf:1 buf0:3a buf3:28 -> 1322
+dsf:1 buf0:3a buf3:30 -> 1322
+dsf:1 buf0:3a buf3:38 -> 1322
+dsf:1 buf0:3b buf3:00 -> 1955
+dsf:1 buf0:3b buf3:08 -> 1801
+dsf:1 buf0:3b buf3:10 -> 1323
+dsf:1 buf0:3b buf3:18 -> 1323
+dsf:1 buf0:3b buf3:20 -> 1323
+dsf:1 buf0:3b buf3:28 -> 1323
+dsf:1 buf0:3b buf3:30 -> 1323
+dsf:1 buf0:3b buf3:38 -> 1323
+dsf:1 buf0:3c buf3:00 -> 1956
+dsf:1 buf0:3c buf3:08 -> 1802
+dsf:1 buf0:3c buf3:10 -> 1324
+dsf:1 buf0:3c buf3:18 -> 1324
+dsf:1 buf0:3c buf3:20 -> 1324
+dsf:1 buf0:3c buf3:28 -> 1324
+dsf:1 buf0:3c buf3:30 -> 1324
+dsf:1 buf0:3c buf3:38 -> 1324
+dsf:1 buf0:3d buf3:00 -> 1957
+dsf:1 buf0:3d buf3:08 -> 1803
+dsf:1 buf0:3d buf3:10 -> 1325
+dsf:1 buf0:3d buf3:18 -> 1325
+dsf:1 buf0:3d buf3:20 -> 1325
+dsf:1 buf0:3d buf3:28 -> 1325
+dsf:1 buf0:3d buf3:30 -> 1325
+dsf:1 buf0:3d buf3:38 -> 1325
+dsf:1 buf0:3e buf3:00 -> 1958
+dsf:1 buf0:3e buf3:08 -> 1804
+dsf:1 buf0:3e buf3:10 -> 1326
+dsf:1 buf0:3e buf3:18 -> 1326
+dsf:1 buf0:3e buf3:20 -> 1326
+dsf:1 buf0:3e buf3:28 -> 1326
+dsf:1 buf0:3e buf3:30 -> 1326
+dsf:1 buf0:3e buf3:38 -> 1326
+dsf:1 buf0:3f buf3:00 -> 1959
+dsf:1 buf0:3f buf3:08 -> 1805
+dsf:1 buf0:3f buf3:10 -> 1327
+dsf:1 buf0:3f buf3:18 -> 1327
+dsf:1 buf0:3f buf3:20 -> 1327
+dsf:1 buf0:3f buf3:28 -> 1327
+dsf:1 buf0:3f buf3:30 -> 1327
+dsf:1 buf0:3f buf3:38 -> 1327
-- 
2.52.0


>From 84ca9efab78e369ab9600305e93224d8f93aafa2 Mon Sep 17 00:00:00 2001
From: i-Amogh <[email protected]>
Date: Tue, 21 Apr 2026 02:50:27 +0530
Subject: [PATCH 2/3] avcodec/tests/codec2utils: Add FATE test for
 codec2utils.h

Added a FATE test for the codec2 extradata utility functions 
(codec2_make_extradata and codec2_mode_from_extradata) defined in 
libavcodec/codec2utils.h.

The test verifies the correct packing and unpacking of the 4 byte metadata 
array across all valid modes (0 to CODEC2_MODE_MAX) . It also tests out of 
bounds modes (up to 15) to guarantee memory safety and forward compatibility 
with experimental wide band modes.

This achieves 100% coverage of the header's logic.

Signed-off-by: i-Amogh <[email protected]>
---
 libavcodec/Makefile            |  1 +
 libavcodec/tests/codec2utils.c | 37 ++++++++++++++++++++++++++++++++++
 tests/fate/libavcodec.mak      |  4 ++++
 tests/ref/fate/codec2utils     | 16 +++++++++++++++
 4 files changed, 58 insertions(+)
 create mode 100644 libavcodec/tests/codec2utils.c
 create mode 100644 tests/ref/fate/codec2utils

diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 92758e35f9..bfdbbec8b9 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -1367,6 +1367,7 @@ TESTPROGS = avcodec                                       
              \
             avpacket                                                    \
             bitstream_be                                                \
             bitstream_le                                                \
+            codec2utils                                                 \
             codec_desc                                                  \
             dvaudio                                                     \
             htmlsubtitles                                               \
diff --git a/libavcodec/tests/codec2utils.c b/libavcodec/tests/codec2utils.c
new file mode 100644
index 0000000000..7533839376
--- /dev/null
+++ b/libavcodec/tests/codec2utils.c
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2026 Amogh Kumar Sinha
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdio.h>
+#include "libavcodec/codec2utils.h"
+
+int main(void)
+{
+    int mode;
+
+    for (mode = 0; mode <= 15; mode++) {
+        uint8_t extradata[CODEC2_EXTRADATA_SIZE] = {0};
+        codec2_make_extradata(extradata, mode);
+        printf("mode: %2d -> extradata: %02x %02x %02x %02x -> 
mode_from_extradata: %2d\n",
+               mode, extradata[0], extradata[1], extradata[2], extradata[3],
+               codec2_mode_from_extradata(extradata));
+    }
+
+    return 0;
+}
diff --git a/tests/fate/libavcodec.mak b/tests/fate/libavcodec.mak
index cce6521587..ef6e07f672 100644
--- a/tests/fate/libavcodec.mak
+++ b/tests/fate/libavcodec.mak
@@ -33,6 +33,10 @@ fate-celp_math: libavcodec/tests/celp_math$(EXESUF)
 fate-celp_math: CMD = run libavcodec/tests/celp_math$(EXESUF)
 fate-celp_math: CMP = null
 
+FATE_LIBAVCODEC-yes += fate-codec2utils
+fate-codec2utils: libavcodec/tests/codec2utils$(EXESUF)
+fate-codec2utils: CMD = run libavcodec/tests/codec2utils$(EXESUF)
+
 FATE_LIBAVCODEC-yes += fate-codec_desc
 fate-codec_desc: libavcodec/tests/codec_desc$(EXESUF)
 fate-codec_desc: CMD = run libavcodec/tests/codec_desc$(EXESUF)
diff --git a/tests/ref/fate/codec2utils b/tests/ref/fate/codec2utils
new file mode 100644
index 0000000000..881e0cbf34
--- /dev/null
+++ b/tests/ref/fate/codec2utils
@@ -0,0 +1,16 @@
+mode:  0 -> extradata: 00 08 00 00 -> mode_from_extradata:  0
+mode:  1 -> extradata: 00 08 01 00 -> mode_from_extradata:  1
+mode:  2 -> extradata: 00 08 02 00 -> mode_from_extradata:  2
+mode:  3 -> extradata: 00 08 03 00 -> mode_from_extradata:  3
+mode:  4 -> extradata: 00 08 04 00 -> mode_from_extradata:  4
+mode:  5 -> extradata: 00 08 05 00 -> mode_from_extradata:  5
+mode:  6 -> extradata: 00 08 06 00 -> mode_from_extradata:  6
+mode:  7 -> extradata: 00 08 07 00 -> mode_from_extradata:  7
+mode:  8 -> extradata: 00 08 08 00 -> mode_from_extradata:  8
+mode:  9 -> extradata: 00 08 09 00 -> mode_from_extradata:  9
+mode: 10 -> extradata: 00 08 0a 00 -> mode_from_extradata: 10
+mode: 11 -> extradata: 00 08 0b 00 -> mode_from_extradata: 11
+mode: 12 -> extradata: 00 08 0c 00 -> mode_from_extradata: 12
+mode: 13 -> extradata: 00 08 0d 00 -> mode_from_extradata: 13
+mode: 14 -> extradata: 00 08 0e 00 -> mode_from_extradata: 14
+mode: 15 -> extradata: 00 08 0f 00 -> mode_from_extradata: 15
-- 
2.52.0


>From 25131843390954ad809599d8c5b4619ad7c2b537 Mon Sep 17 00:00:00 2001
From: i-Amogh <[email protected]>
Date: Tue, 21 Apr 2026 08:29:01 +0530
Subject: [PATCH 3/3] avcodec/tests/h274: Add FATE test for h274.h

Added FATE test for the H.274 film grain synthesis and SEI picture hash utility 
functions defined in libavcodec/h274.h and implemented in libavcodec/h274.c.

The test verifies:
    - Parameter support validation via ff_h274_film_grain_params_supported.
    - Successful application of film grain via ff_h274_apply_film_grain on 
synthetic AVFrames, including proper rejection of unsupported modes.
    - Initialization and verification of SEI picture hashes via 
ff_h274_hash_init and ff_h274_hash_verify.

Signed-off-by: i-Amogh <[email protected]>
---
 libavcodec/Makefile       |   1 +
 libavcodec/tests/h274.c   | 146 ++++++++++++++++++++++++++++++++++++++
 tests/fate/libavcodec.mak |   4 ++
 tests/ref/fate/h274       |  11 +++
 4 files changed, 162 insertions(+)
 create mode 100644 libavcodec/tests/h274.c
 create mode 100644 tests/ref/fate/h274

diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index bfdbbec8b9..9af13500f8 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -1370,6 +1370,7 @@ TESTPROGS = avcodec                                       
              \
             codec2utils                                                 \
             codec_desc                                                  \
             dvaudio                                                     \
+            h274                                                        \
             htmlsubtitles                                               \
             jpeg2000dwt                                                 \
             mathops                                                    \
diff --git a/libavcodec/tests/h274.c b/libavcodec/tests/h274.c
new file mode 100644
index 0000000000..e056d39f9b
--- /dev/null
+++ b/libavcodec/tests/h274.c
@@ -0,0 +1,146 @@
+/*
+ * Copyright (c) 2026 Amogh Kumar Sinha
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "libavutil/frame.h"
+#include "libavutil/film_grain_params.h"
+#include "libavutil/mem.h"
+#include "libavutil/error.h"
+#include "libavutil/bswap.h"
+#include "libavcodec/h274.h"
+
+static void test_film_grain_params_supported(void)
+{
+    printf("Testing ff_h274_film_grain_params_supported:\n");
+    printf("  model_id=0, pix_fmt=AV_PIX_FMT_YUV420P -> %d\n",
+           ff_h274_film_grain_params_supported(0, AV_PIX_FMT_YUV420P));
+    printf("  model_id=1, pix_fmt=AV_PIX_FMT_YUV420P -> %d\n",
+           ff_h274_film_grain_params_supported(1, AV_PIX_FMT_YUV420P));
+    printf("  model_id=0, pix_fmt=AV_PIX_FMT_YUV422P -> %d\n",
+           ff_h274_film_grain_params_supported(0, AV_PIX_FMT_YUV422P));
+}
+
+static void test_apply_film_grain(void)
+{
+    AVFrame *in = av_frame_alloc();
+    AVFrame *out = av_frame_alloc();
+    AVFilmGrainParams *fgp = av_film_grain_params_alloc(NULL);
+    AVFilmGrainH274Params *h274 = &fgp->codec.h274;
+    int ret;
+
+    printf("Testing ff_h274_apply_film_grain:\n");
+
+    in->width = 32;
+    in->height = 32;
+    in->format = AV_PIX_FMT_YUV420P;
+    av_frame_get_buffer(in, 32);
+
+    out->width = 32;
+    out->height = 32;
+    out->format = AV_PIX_FMT_YUV420P;
+    av_frame_get_buffer(out, 32);
+
+    for (int i = 0; i < 3; i++) {
+        for (int y = 0; y < in->height / (i ? 2 : 1); y++) {
+            for (int x = 0; x < in->width / (i ? 2 : 1); x++) {
+                in->data[i][y * in->linesize[i] + x] = 128;
+            }
+        }
+    }
+
+    fgp->type = AV_FILM_GRAIN_PARAMS_H274;
+    fgp->seed = 42;
+
+    h274->model_id = 0;
+    h274->log2_scale_factor = 2;
+    h274->component_model_present[0] = 1;
+    h274->num_intensity_intervals[0] = 1;
+    h274->intensity_interval_lower_bound[0][0] = 0;
+    h274->intensity_interval_upper_bound[0][0] = 255;
+    h274->comp_model_value[0][0][0] = 10;
+    h274->comp_model_value[0][0][1] = 8;
+    h274->comp_model_value[0][0][2] = 8;
+
+    ret = ff_h274_apply_film_grain(out, in, fgp);
+    printf("  apply_film_grain (supported) -> %s\n", ret == 0 ? "Success" : 
av_err2str(ret));
+
+    h274->model_id = 1;
+    ret = ff_h274_apply_film_grain(out, in, fgp);
+    printf("  apply_film_grain (unsupported model) -> %s\n", ret == 
AVERROR_PATCHWELCOME ? "AVERROR_PATCHWELCOME" : av_err2str(ret));
+
+    av_frame_free(&in);
+    av_frame_free(&out);
+    av_freep(&fgp);
+}
+
+static void test_hash(void)
+{
+    H274HashContext *c = NULL;
+    H274SEIPictureHash hash;
+    AVFrame *frame = av_frame_alloc();
+    int ret;
+
+    printf("Testing hash functions:\n");
+
+    memset(&hash, 0, sizeof(hash));
+
+    frame->width = 16;
+    frame->height = 16;
+    frame->format = AV_PIX_FMT_YUV420P;
+    av_frame_get_buffer(frame, 16);
+
+    for (int i = 0; i < 3; i++) {
+        for (int y = 0; y < frame->height / (i ? 2 : 1); y++) {
+            for (int x = 0; x < frame->width / (i ? 2 : 1); x++) {
+                frame->data[i][y * frame->linesize[i] + x] = x + y + i;
+            }
+        }
+    }
+
+    ret = ff_h274_hash_init(&c, 2);
+    printf("  hash_init (CHECKSUM) -> %d\n", ret);
+
+    hash.hash_type = 2;
+
+    hash.checksum[0] = av_le2ne32(0xDEADBEEF);
+    ret = ff_h274_hash_verify(c, &hash, frame, 16, 16);
+    printf("  hash_verify (CHECKSUM wrong) -> %s\n", ret == 
AVERROR_INVALIDDATA ? "AVERROR_INVALIDDATA" : av_err2str(ret));
+
+    hash.checksum[0] = av_le2ne32(0x00000d00);
+    hash.checksum[1] = av_le2ne32(0x00000260);
+    hash.checksum[2] = av_le2ne32(0x00000280);
+    ret = ff_h274_hash_verify(c, &hash, frame, 16, 16);
+    printf("  hash_verify (CHECKSUM correct) -> %s\n", ret == 0 ? "Success" : 
av_err2str(ret));
+
+    ff_h274_hash_freep(&c);
+
+    av_frame_free(&frame);
+}
+
+int main(void)
+{
+    test_film_grain_params_supported();
+    test_apply_film_grain();
+    test_hash();
+    return 0;
+}
diff --git a/tests/fate/libavcodec.mak b/tests/fate/libavcodec.mak
index ef6e07f672..01994dd528 100644
--- a/tests/fate/libavcodec.mak
+++ b/tests/fate/libavcodec.mak
@@ -37,6 +37,10 @@ FATE_LIBAVCODEC-yes += fate-codec2utils
 fate-codec2utils: libavcodec/tests/codec2utils$(EXESUF)
 fate-codec2utils: CMD = run libavcodec/tests/codec2utils$(EXESUF)
 
+FATE_LIBAVCODEC-yes += fate-h274
+fate-h274: libavcodec/tests/h274$(EXESUF)
+fate-h274: CMD = run libavcodec/tests/h274$(EXESUF)
+
 FATE_LIBAVCODEC-yes += fate-codec_desc
 fate-codec_desc: libavcodec/tests/codec_desc$(EXESUF)
 fate-codec_desc: CMD = run libavcodec/tests/codec_desc$(EXESUF)
diff --git a/tests/ref/fate/h274 b/tests/ref/fate/h274
new file mode 100644
index 0000000000..bc6f72b5fb
--- /dev/null
+++ b/tests/ref/fate/h274
@@ -0,0 +1,11 @@
+Testing ff_h274_film_grain_params_supported:
+  model_id=0, pix_fmt=AV_PIX_FMT_YUV420P -> 1
+  model_id=1, pix_fmt=AV_PIX_FMT_YUV420P -> 0
+  model_id=0, pix_fmt=AV_PIX_FMT_YUV422P -> 0
+Testing ff_h274_apply_film_grain:
+  apply_film_grain (supported) -> Success
+  apply_film_grain (unsupported model) -> AVERROR_PATCHWELCOME
+Testing hash functions:
+  hash_init (CHECKSUM) -> 0
+  hash_verify (CHECKSUM wrong) -> AVERROR_INVALIDDATA
+  hash_verify (CHECKSUM correct) -> Success
-- 
2.52.0

_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to