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]
