From patchwork Sun Aug 6 10:13:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43137 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:9329:b0:130:ccc6:6c4b with SMTP id r41csp991943pzh; Sun, 6 Aug 2023 03:12:52 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFcp0p7k+sow6EYT3oVbawbrJteWpRmrCyyhKgd+8g9r9mQHf7pdfOYnofK5TTC+bQLr15Y X-Received: by 2002:a17:906:1c7:b0:97e:aace:b6bc with SMTP id 7-20020a17090601c700b0097eaaceb6bcmr6933503ejj.53.1691316772591; Sun, 06 Aug 2023 03:12:52 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id k15-20020a1709065fcf00b0099cb60f1905si2317012ejv.263.2023.08.06.03.12.52; Sun, 06 Aug 2023 03:12:52 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=Y3d3+dsP; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 81C5968C6E0; Sun, 6 Aug 2023 13:12:42 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03olkn2043.outbound.protection.outlook.com [40.92.59.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 604A968C69A for ; Sun, 6 Aug 2023 13:12:39 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Rn2iYWfJWsGGzVztBiSBuFInsMo5F3lAnguSmX+Kg+tc/YNMgTXlYZazoxlbsuNdtU0WzAEz+X8TE6PRS0ugOELyd2162v+gPB70SHV8/4q2BeEwi6n+X+GGFOAP707c3BBNvGTjaqZmRGfBAh5lmF/JffKXRr+zJLKJOlsuYgkGi1SOJStZDAW3b7fmmsNmHeBUmceRdpxBtz8cvbEqfgF8mzWZ44k7Ybys6nQPNBw1kz6Ff9CueLuMnHYSUBVjtQwFRCbzencOvGjUnVbWu1xXIi3D9gXbdORcGUVZiOZHWNX4Due+WgThSs40NVuh/PhEtZBVxLnBADldG2a4oQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=XM7cxWzeFnlU+WmB785B5P/gu2I6E0TkiiyWVdoXSGg=; b=NheG7eMwPRV3+grXd4Nfb8wdJ15SADtlKVHCx6Ai59GYLnR1A2nDfeAy7xl856LWnBybGpD8I9sBTGmtVBDsUo0AcSNo6ox5M1bPPunngprnl17NrKG6+z/vcbMQmyl7yYLhneukl8IylyUWjuQMA+0fsedD+clswRayAQTV8Qu+mjCy+r2eZhWRnFCDXgRTDD8lF31hcbA95vbm/nzPvUyH7sZyzVsCIOn5YgmSYdxOHq8q+vVBFMipV+kqq8odk1ZNS5V9KQg4crSbZdwCE+gOpzFB1KjAmuEF683AFtPbYBDjiJM+QcieL+AAVffjJ2dhpC53NmluxSYBL6ojWQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XM7cxWzeFnlU+WmB785B5P/gu2I6E0TkiiyWVdoXSGg=; b=Y3d3+dsPsKLtoUS7c/fGPB/mxVvHS34bVMhMJlo7CMtk2awBgtuwHafZgIyJaTrSWuBVV/ur9Wach2uYxaCzawA2a0jKL7ZrpPmSXQovYmO+Uu34/GS+LU60fU58SN1i7mUhql1DSY8OkWBB8zrMeLDeizM6jxK9aSExNlLKwJurWecTI/+XFxU0gfFU5pBuUOH6VjZuEBvRUUzhBwt5RCNjY1gMDcZpDAy2DzH1mFBxJ32oU2WvP1VIvCbiGczCq12jrCseoPVE4b4mFheusbs/WUt10pgEFpSfGC1YlAyF7hn4Bci+1f8nEpNQ3scXfjJNiQ3LVDpkW+a3C+G7Pg== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DU2P250MB0222.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:277::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.25; Sun, 6 Aug 2023 10:12:38 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa%3]) with mapi id 15.20.6652.021; Sun, 6 Aug 2023 10:12:38 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 6 Aug 2023 12:13:20 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [/HLtn5rCigdHJk0kvObFHEQ+9wZY+qYocKPZxWTENLs=] X-ClientProxiedBy: ZR2P278CA0013.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:50::17) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20230806101323.2828419-3-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|DU2P250MB0222:EE_ X-MS-Office365-Filtering-Correlation-Id: db4793ec-24d5-4249-051e-08db9665a96d X-MS-Exchange-SLBlob-MailProps: AZnQBsB9Xmre2cOvxteVHTfiuSrHMX7oNypDEKwzdlrJFagnwC4rceWgT8Xb2Cu/PqdDkV4M/K4HHxJgpF4QgqaOIwhgqCyqgeL/eTTcUdqjd8S/LpgvzqcJ0sSqPP5ZeZe6kvNfJsLZYXySRS2LiHiJo/3b6INfBZT8Cn3rXFDS7z1sqTpvQrssdDIdQ+FS6JKi3B9nihCko7Om7PcS3y5olV4JIhn4RlTW5KgKow30xIbr7EcrrlVnG1ndDKALPJi5a07gxwH0SC7LujJLL3C957FVN36iL/EVGAR5KYu7AdLI5fax78SKpoUU806G7geBo+RUu4lp4nO5VthMXLUVYDlY6gWhB/FcdstmWUFw9zYQ53URLXx+TlXWd3e0hyYETh7wifnjudmiaM9NjB/LPVNntOsscZ2Z/gFUz09xi6e1a6TuS+DE/HEFEnx+IlirhG2G+A3N2UdiBKid6wsTLl+/iYMau5dhhgWPlonp6BA+9cndFG0DhugeFduOS3VA7s2KZ7zntYzmgH8a/pHxhnOmsWKnXguRIphiCiInMNct5O6o7NrqryEKRlcjtbgQhHnxldMDo0bq4IhZYOM2p99reoldGUFGika7znQzTiQFPBuHabbjLDuM2r2SmMsQvrKXXsituOYkKKY07yNaJ8HFt7wvuLDMcUeoUNavBOuE+weEJkTzAYReZJrTF4LNQ0zIFsX9F5GOa90r8N8KEsWPiPWjrV8IR+dG9DI/SwpPXCIm0m02rvG0HpNKo8u/9UT0XaM= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GY2JqW5FgXxdItOtDw6+GgspX61VaLK/19OfKFy/EEeLvy9wBF0YAJuDOE6O7bc6Kfpom7f9NNTgPqbFUhcZodjQXWe49+oGsb+WhBtkJV+VTlqJz8SUC8ljcgE+h7yvZtAitfFbdjd34jG58pAGQCvVKDAFaE6RvgOhZPz0Y6ICKqgcG2nIkk/zT1rYaLXHpeCvnb2ea81XM287J4f5fZsAIpIdZVu3sCBGGT/2Cyu8c/cvV64j8HY4xit7nOGZsArOTKytAiDm2KwHNGEQq1s7vnVrrHpervV/ObjHw98eya7SjWRsa2te4NB8rLF1SjkmhGx/XJUH3v0KGP5yRhZK1VqijTum6WUydUWcTFdILaaQB7qIrHYjGGnxejSPJH1niRzTNhG0GU1Mo2WPcGY+WEScr7h6fY0jRBy5anHj0wW9QXYZcdg1iWsX+copC5t8IlBPNRr4YybWdmznu5KqB14+TsNt6sPQu4hypZEMVEYU9VtRllZwWGJ57VJzW7HacXZHZyBIvwWaNCOlIGDRN0c3WLlh2SUi6fn12taqj3+D636p5IAazjNTMxLojjPAFMtlaP9xW4lnuKKevpcNBjix8a0lwkYBHqIQB1Q= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 0IvEAsZ5CL/SkEe1+f8QEJyjBWouZ7dYbUGKMHJ70pfrsEk1AG5qLDerSbpiuZWP4c/hGiW2H5iu9ZUEwRxn0fJq+xfbzaVWtCVHd73PC44caAugSJ2RXnMvLhP5iapBNLDf8jLOEJb5oyyts/g3LI65NvAbgWxEmomaqNsSg4Umi+S8GEoEWRZwtmvg+eFLv230ijUSSTgHKfn4X/8xQ7R/UTKaIR+ZVnzkNKT1TRNnXN3I/zJzQNOvSiePdfi6S1O34w0XqITfNqN0n5ozJzlXNOr2AxgDuI2+/ohutN+YWX0ycnUCQgsJOpt5oK3JYY7EVdjP66GuXeqJ388eXLR3PXWIXwJtcI6gLf1drh0cDKlyPKiJVWAD+WMZNnyF5PFZJgd1I/OZYUGETTTM57fs4A39NPxnYT8vqNmeS3jXSjluDo0UhrunjHUX3Kxh5OgW0yWgGqOKAqDOdS/edDKCQGySgM4bdXIwcL0TsduXhmMA4h6hxAjGzN+QoaHVhDyBQnUPykdvOKWtU5zeIn8yfkJjgu5DjxkewSuIvrnWUxqf8QX8lTdAe3HNUsJSkyZqC3mSoYt5IgwDYQ3/hDQ724nDUwjA//tzz1zy2Uiev+QfCNkHZR4tMm1lQb+tkz6bE2I0h/v0y/K+eZFAU56V+086wr2OY9lOpMCOZrZgdfckaLuHYioHH9V0tuiQVc6+YvyjhzjHTQ5UJlkP9LECEdM+FRIBNABgarBSmiM1RG29F6G4ZaMYE362Vqnn+LGsee6RPq21p+bCb+ifbKDO/OSUPy61UM7pcDlezEcVZ2bFHi8c24YC1e+E57ZP+jXSewNbmSq3WP3fReTpcJHL12Glv94izQNDKiu+PC94InSoTm5NHrj0u/YTxIS72RdXw0vmdOYYrX9Shl1XgYo3JAftPN8EsCSd2nOCBw9zOENVIz8QK5b7m902oh+UGAXTnYDJbkKVMIFuK0xLJK60E+j0L+nWio/a2r1BdIp12ikdurdF5rD4UT5KEutR2Xf/1kcVu6vK66tO5ev243QxEe7Zk6YFqcM9rXuYgVlBAh3BZcwIGqNtPIAejfel6vH/iIvE3fKfHP7446dgu+oWlJRsSsoCkurz1eAOGI1pNQhIm5aPakPdGu30ysQHJliNc0d6YdvYSgA+tyqCoebVP43pWG98Lb1XvNyEx/Ky2d5CHEsgX6xeGFiTrTUNc3WYApfH8e0ifntnAmat+qeFV+maGj4MXx+LGg2AxOdFYP0O42B5KukEnZIsWE+x X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: db4793ec-24d5-4249-051e-08db9665a96d X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Aug 2023 10:12:38.3544 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2P250MB0222 Subject: [FFmpeg-devel] [PATCH 4/7] avutil/tests/channel_layout: Also test non-AVBPrint variants X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Z4g1cVN4Vlko Signed-off-by: Andreas Rheinhardt --- libavutil/tests/channel_layout.c | 108 +++++++++++++++++++++++++------ 1 file changed, 90 insertions(+), 18 deletions(-) diff --git a/libavutil/tests/channel_layout.c b/libavutil/tests/channel_layout.c index 5516db0904..665ae6e277 100644 --- a/libavutil/tests/channel_layout.c +++ b/libavutil/tests/channel_layout.c @@ -19,32 +19,104 @@ */ #include "libavutil/channel_layout.c" +#include "libavutil/mem.h" + +#define BPRINT_ARGS1(bp, ...) (bp), __VA_ARGS__ +#define BPRINT_ARGS0(bp, ...) __VA_ARGS__, (bp) +#define ORD_ARGS1(str, size, ...) (str), (size), __VA_ARGS__ +#define ORD_ARGS0(str, size, ...) __VA_ARGS__, (str), (size) + +// This macro presumes the AVBPrint to have been cleared before usage. +#define CMP_BPRINT_AND_NONBPRINT(bp, func_name, ARG_ORDER, ...) do { \ + char *str; \ + int size; \ + func_name ## _bprint(BPRINT_ARGS ## ARG_ORDER((bp), __VA_ARGS__)); \ + if (strlen((bp)->str) != (bp)->len) { \ + printf("strlen of AVBPrint-string returned by "#func_name"_bprint" \ + " differs from AVBPrint.len: %"SIZE_SPECIFIER" vs. %u\n", \ + strlen((bp)->str), (bp)->len); \ + break; \ + } \ + size = func_name(ORD_ARGS ## ARG_ORDER(NULL, 0, __VA_ARGS__)); \ + if (size <= 0) { \ + printf(#func_name " returned %d\n", size); \ + break; \ + } \ + if ((bp)->len != size - 1) { \ + printf("Return value %d of " #func_name " inconsistent with length"\ + " %u obtained from corresponding bprint version\n", \ + size, (bp)->len); \ + break; \ + } \ + str = av_malloc(size); \ + if (!str) { \ + printf("string of size %d could not be allocated.\n", size); \ + break; \ + } \ + size = func_name(ORD_ARGS ## ARG_ORDER(str, size, __VA_ARGS__)); \ + if (size <= 0 || (bp)->len != size - 1) { \ + printf("Return value %d of " #func_name " inconsistent with length"\ + " %d obtained in first pass.\n", size, (bp)->len); \ + av_free(str); \ + break; \ + } \ + if (strcmp(str, (bp)->str)) { \ + printf("Ordinary and _bprint versions of "#func_name" disagree: " \ + "'%s' vs. '%s'\n", str, (bp)->str); \ + av_free(str); \ + break; \ + } \ + av_free(str); \ + } while (0) + + +static void channel_name(AVBPrint *bp, enum AVChannel channel) +{ + av_bprint_clear(bp); + CMP_BPRINT_AND_NONBPRINT(bp, av_channel_name, 1, channel); +} + +static void channel_description(AVBPrint *bp, enum AVChannel channel) +{ + av_bprint_clear(bp); + CMP_BPRINT_AND_NONBPRINT(bp, av_channel_description, 1, channel); +} + +static void channel_layout_from_mask(AVChannelLayout *layout, + AVBPrint *bp, uint64_t channel_layout) +{ + av_channel_layout_uninit(layout); + av_bprint_clear(bp); + if (!av_channel_layout_from_mask(layout, channel_layout) && + av_channel_layout_check(layout)) + CMP_BPRINT_AND_NONBPRINT(bp, av_channel_layout_describe, 0, layout); + else + av_bprintf(bp, "fail"); +} + +static void channel_layout_from_string(AVChannelLayout *layout, + AVBPrint *bp, const char *channel_layout) +{ + av_channel_layout_uninit(layout); + av_bprint_clear(bp); + if (!av_channel_layout_from_string(layout, channel_layout) && + av_channel_layout_check(layout)) + CMP_BPRINT_AND_NONBPRINT(bp, av_channel_layout_describe, 0, layout); + else + av_bprintf(bp, "fail"); +} #define CHANNEL_NAME(x) \ - av_bprint_clear(&bp); \ - av_channel_name_bprint(&bp, x); + channel_name(&bp, (x)); #define CHANNEL_DESCRIPTION(x) \ - av_bprint_clear(&bp); \ - av_channel_description_bprint(&bp, x); + channel_description(&bp, (x)); #define CHANNEL_LAYOUT_FROM_MASK(x) \ - av_channel_layout_uninit(&layout); \ - av_bprint_clear(&bp); \ - if (!av_channel_layout_from_mask(&layout, x) && \ - av_channel_layout_check(&layout)) \ - av_channel_layout_describe_bprint(&layout, &bp); \ - else \ - av_bprintf(&bp, "fail"); + channel_layout_from_mask(&layout, &bp, (x)); #define CHANNEL_LAYOUT_FROM_STRING(x) \ - av_channel_layout_uninit(&layout); \ - av_bprint_clear(&bp); \ - if (!av_channel_layout_from_string(&layout, x) && \ - av_channel_layout_check(&layout)) \ - av_channel_layout_describe_bprint(&layout, &bp); \ - else \ - av_bprintf(&bp, "fail"); + channel_layout_from_string(&layout, &bp, (x)); #define CHANNEL_LAYOUT_CHANNEL_FROM_INDEX(x) \ ret = av_channel_layout_channel_from_index(&layout, x); \