From patchwork Sun Apr 7 21:09:09 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 47901 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2147147pzd; Sun, 7 Apr 2024 14:10:40 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXU8OJLAPWnCh9OjQB/QSwUo/vb5ngffkCpgQQv8WDPSpvyEW4fw8RzYTL3lJGGL4o96/DngA3BPOkfWlv8ooN38SVGF60cxiVk0w== X-Google-Smtp-Source: AGHT+IGsPGnKHEjGZmV5uCTBv1h9IPLo1WCeIOIU7UoZpNi2LN7J9eURxy5wy80G4ZmcHkGFuMXe X-Received: by 2002:a50:bb05:0:b0:56e:2393:cee4 with SMTP id y5-20020a50bb05000000b0056e2393cee4mr4094167ede.9.1712524240490; Sun, 07 Apr 2024 14:10:40 -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 d38-20020a056402402600b0056e5c50cff0si399348eda.549.2024.04.07.14.10.40; Sun, 07 Apr 2024 14:10:40 -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=DVY2eNGW; 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 36B1468D260; Mon, 8 Apr 2024 00:09:55 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01olkn2083.outbound.protection.outlook.com [40.92.64.83]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3B4DB68D1FA for ; Mon, 8 Apr 2024 00:09:50 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nxsmVUHUXEpXl0oXpI0QArfKezzWCsEBqkFZEpUJdt2gXvvZ4tjda+9PrdcWjkGIuWX61X1EDzRXuNcpNNn5omMxHitJYCosbsrFOalO8YmJbLpFahsh/hoe56rK64zGFaM0fZWbkvvZIePb9+Zrl1SUnH80C6GYaasb/xI7IgP0UW/fykwpU3JgwnCzO5G8D6UG4mrLCxYgPEvPrlOmqFbD/9ixAH+MxuYDzpynxZREZCNTZpfkVBLCKP4M0j/TX8NuZIV10c3mJ5jma4ly3wrxF7atTNEfgoL28yPa2qSwCdK/T75fih7TPk5SXkOJtJdPdRxjHebiDnR0MtwIgA== 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=HikW2ws8MYHTRM2dIl2BIxWK36NAFBv72oYhI+9hO5g=; b=kSdIZiSwJ1D6AlkgXuSt3TkKFUBalvDqzBQKEnuHnUlCutu4GYSexK271FwH0dv0waGkIMNioRb3gOH7o0mTpntQTRNFlFRhE+2AFOSsHChyL3VJrRSTIHA8T57ezFLKlxzV9Wp/2XScM8i+TDLIoNTuXLOb1yKmeANi0QDiajSJHNF0yCyQzEAz8yugeUDuV0V+KCv/xnzOFQrPdcfAcxR6D+aCBE6aZcMJuB7+eJJn5FY2vTy0E60QR8ngMv3I71z2o/5MUoRmHewqTnGL6l2QT3DKJjRq/M1rrBIY/o1K6ddCexa2H7I4MbDwnuAx0O4AoCMiX1NZyThUDmXAUw== 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=HikW2ws8MYHTRM2dIl2BIxWK36NAFBv72oYhI+9hO5g=; b=DVY2eNGWAH4y785C9xTYsy99pQnbdQtkDO5utEH5cGY+pWrONRgO4C53BFZuFMKNJxOzBG5JZTRoL+3RG9L95pcappzsJih482lJVHYoVPqmMGRL/Y8n9aEY0O2BHMq8iYj8/zQRic0Y1y84hRpKpb0u6AmjE3xj6oz4gynpaELQxGBUnuRlfdKaVhHRJ8Z0xUmQQTLDyrYtqpOUNOD+xBCiImKeH6WWgr+Gs8c6Cn7BXJ8c+qOxX/vyxloIcXhIWfUThFRJ8rmdq0na+x00TMSFUz+y/UBf5a7tZQowevl0eYXpAjyT+L4GKKtHQBKIyPc8V2B38hQpnkS8nbDhcQ== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AS8P250MB0234.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:379::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.55; Sun, 7 Apr 2024 21:09:41 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d%4]) with mapi id 15.20.7409.042; Sun, 7 Apr 2024 21:09:41 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 7 Apr 2024 23:09:09 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [SLKbiZyLXG6GYN48B3d0F+KXSY6jfZeCF8mc/vzmu5I=] X-ClientProxiedBy: ZR0P278CA0038.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:1d::7) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20240407210915.895619-10-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AS8P250MB0234:EE_ X-MS-Office365-Filtering-Correlation-Id: 8fe989c5-e9ab-4d90-71a1-08dc57470a64 X-MS-Exchange-SLBlob-MailProps: 9IecXKUgicDNEbE0encsoirT0ZUrgC9m/DQLIsMWdOZIbPvW0IBb8XzLj2O0S+D/PJgRooTYCtIJAmZYcB8Jc2M5/lTURX6dMjJIbUrBFGq2te0wpmY43Gz3Q1T6tIyyROC6EAl5V1LdeOkiPR7TVP9B3vQ9YFCh30J0URzuWDoZXS6Wq7x8lQH4lzihdrLSaUbenGK1NAH5XWrCok6qbTZ9Q9Dj4uqjsbB7Ncvddv9gFIZjGwSVr1QgBi4Ivu6tetb3KWmypvYr0hOt6jtHQJpYWBMFJ5S0fFkT+6iXkFg9HmsKR3lIAEEYu9k9yU0bk3/xn6vzpBVIY7i8K5L0ytSf8NKUmeOM59EzwmYPr28tD1bj/wCOZqLXNUqThBTzjMLd4LmK0CPlABk+/IRcKW9ZBQTQRSekTJB7eVuogZHc5FwBndhHgwemyo/F0NAy8vmn4lD9mG3dclObNHTrfkU9GgWFYrxHQEo0LTyFZXG5rArsmMjjsdPuUF9Rteq3LtsRncqEccs5HuNGjl1AXa3Oa/Io/RrEsWhqgt5LVsPfUAkaGhGZWTXahmMifERN4/7NSgha89NWZRSwhxwU7YfuJqBRDBPvSxlF1WuNWaWlG5pdtXhFY2nrsuGRJ9W4iZozOQR0+BPPxKX7LUA2ffSEZ/IrTOw1zX81dXCx3nfRJKCgoIuRSt6RfbKwQ4HpgsbmCKYHrPcSdxDda6DDv/Ga2YlbjzQhLIiJWCW/N0V5kkoyCYMFUw== X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YFT45dDPJT59Ze1V5LIANq/6gxpL21/Df9LGbYZ2FDv+z3s7dubPlwuWVOyVXWyt946eJMSsSZDMIYG548V7EY5PEQfzeD4eEbSJanjdkUfIu+LUE+UZ3VF9lweo35QAyYvDZgFd5iQjRAZ9yrslb3S1x+ASLTBM+exSm8EvTwFnYLGu26Y7/NZiT9rDqCLGuzbB25M5ruq3mz7S1ZheuwMsFWkWZttVZXajKgKIkSszoCgy32gt9Tlwpq/HtuDMTqDGk/yKfmOJlsMsfCG13Z8Au2tN/7DV6uC+6RcHQliv3qlAdoxFnzdv3cOVf7ZQD3CP/MjPHtEnQGym9rdqmESwY5zjpAnF6eVvqWwmlPmuGxByh65biBwtPaH7ESBEoBHY8GkbcEvgwLJARHmaJ1pvEEBSbSyn5fy5ue2uTrs+AUEBWI/BgNMG4lEym6TDLLBapuaIt8RyN4f8mS2px3nx/UzmINhodslWrQNeAB3PlYagRh9+hqWYHXRBQqAp8oynDh2+t0heS9kyRKxqDcluMLk+Tf5pNrvxLqXs8FpUTMKTqMO+nz7P26w3b2rKdpPIr/b+he88tp1nKncXGHxpYZw9TiAoP+mwwEQGYRak/6gMPj0KbwqHCzMvi9Fh X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: R5a4Rp8GYSZw9S0TZAmuZC/cecC1AyouLrfTMzChkhvig602N1UhihYEwQocXFZi9AbqFn7oqAic6rxjmvM5OOw5h9rF/80tD2D3xa2L144YKbnCbXzs/dsKHneW+Qn/h7B1TvLzLY8A56sDA7tPF0t4bJJjJUcCpNcZg8dHwAt80sfh2d2uMlbSzCqnc5e8+n3RZ7RWae6DTF082HKzjL7nYzUAMl/JAIZyNYiJYyVWGTjoJ0Ri1+ICk0OOPNLX1p9QZ4zNSlNtkY4fKLCQXRwvba+OPHQ4dd9PV0mOJu1Htl8AgXCZ845Ztf4d+EkGOnqMCloZzMsAYtD6mWIUCddztFx50PaAgSvC08V6/sfMsps6m89vmuAuyhqf/JrRGY45nlcnRQWraQ7UERuVsmK55N9tUwgeYGCtmNtytvri9H19RL2ULgEIFqi2vp/yoelaZkitbu8e79LxHNem4Vjxt/obb4TEHc6b+/s+h6PVPh5bxQt7HPpTxH/OAiOo5fbzdSAkL1C271Rqud9N5/+ar8tmcWXyQRAwLnVPa3MgfW8yQBCBmURmrPJ0aaKWachczcXiCvNK6EFLXsWILTl0g9ksSlws+CfpvJPCxd4g67jOAtBZ2ccgtw1FNCyJeX7uJv+AfjDzvdyUJty6QYoBOISJpNtra0bpWd3v/rAyTLBBP2AcZsFh7h29XBWZxm4T4IFWFbfm50BCbxpq1VWJFeenr2sqt9Kkuvs0PF28oHwfflV7Y2JhMD6t0W/ZzEDuAFDYgLQEGTNO1J+qbt+cfnNmDZLPJi5wGwktK2N322E/ss1LplCZJVcZdrGOV/ntJsKvcXDmIwzmj30azBLRa06Crzw/6HJbF21Qdy2ZFmQUzxZSOnfyscbqAycdMuU+pY9bcytz/AR5pShjCycAZu+/s4Z62X2mM4izhibSIHpNPNmLLj1UGoKMPEkC5jhRM63i5DtFM/dOXlflmMtLpzb6pSvdIhta09mkz2HyGqtpuxqSyHaDV9uVroPsGvbn1y59t2j1RswNMRku2jiJldlJankNx60NS0I2ufmonk4BqCf2HMJmf14V+hue8l3+995HPviB+oJXNckLgXabWRoxHetXCWsw0tZosrkIqJI/b5lEOQ0GYAUPOXNwlMK18H3EY5nD2PTZEjkIcB3zeJMfMlHZ7bxK3D2IZQWsni/cN4ga5TQSy1feHphEf7i9eDPxtTtXd//tmdyZVHF5mzFcV9eq222iurR5z8tA1gEj9aI4cbDYvMAMvWyfTqCkbHoe9xCWV/Z9TpGhtw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8fe989c5-e9ab-4d90-71a1-08dc57470a64 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Apr 2024 21:09:41.0177 (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: AS8P250MB0234 Subject: [FFmpeg-devel] [PATCH 11/17] avcodec/ac3enc: Deduplicate allocating buffers 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: TLW+IyTGoZbp These allocations only depend upon sizeof(SampleType) (and this size is actually the same for both the fixed-point and the floating-point encoders for most (all supported?) systems). Signed-off-by: Andreas Rheinhardt --- libavcodec/ac3enc.c | 16 +++++++++++++++- libavcodec/ac3enc.h | 7 ++----- libavcodec/ac3enc_fixed.c | 1 - libavcodec/ac3enc_float.c | 1 - libavcodec/ac3enc_template.c | 32 +++++++------------------------- 5 files changed, 24 insertions(+), 33 deletions(-) diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c index ef1ac381c1..681b227d3d 100644 --- a/libavcodec/ac3enc.c +++ b/libavcodec/ac3enc.c @@ -52,6 +52,9 @@ #include "ac3enc.h" #include "eac3enc.h" +#define SAMPLETYPE_SIZE(ctx) (sizeof(float) == sizeof(int32_t) ? sizeof(float) : \ + (ctx)->fixed_point ? sizeof(int32_t) : sizeof(float)) + typedef struct AC3Mant { int16_t *qmant1_ptr, *qmant2_ptr, *qmant4_ptr; ///< mantissa pointers for bap=1,2,4 int mant1_cnt, mant2_cnt, mant4_cnt; ///< mantissa counts for bap=1,2,4 @@ -2429,10 +2432,21 @@ static av_cold int allocate_buffers(AC3EncodeContext *s) int channels = s->channels + 1; /* includes coupling channel */ int channel_blocks = channels * s->num_blocks; int total_coefs = AC3_MAX_COEFS * channel_blocks; + const unsigned sampletype_size = SAMPLETYPE_SIZE(s); + + if (!(s->windowed_samples = av_malloc(sampletype_size * AC3_WINDOW_SIZE))) + return AVERROR(ENOMEM); - if (s->allocate_sample_buffers(s)) + if (!FF_ALLOCZ_TYPED_ARRAY(s->planar_samples, s->channels)) return AVERROR(ENOMEM); + for (int ch = 0; ch < s->channels; ch++) { + s->planar_samples[ch] = av_mallocz((AC3_FRAME_SIZE + AC3_BLOCK_SIZE) * + sampletype_size); + if (!s->planar_samples[ch]) + return AVERROR(ENOMEM); + } + if (!FF_ALLOC_TYPED_ARRAY(s->bap_buffer, total_coefs) || !FF_ALLOC_TYPED_ARRAY(s->bap1_buffer, total_coefs) || !FF_ALLOCZ_TYPED_ARRAY(s->mdct_coef_buffer, total_coefs) || diff --git a/libavcodec/ac3enc.h b/libavcodec/ac3enc.h index 3dc8acfd91..8d6cb3b3de 100644 --- a/libavcodec/ac3enc.h +++ b/libavcodec/ac3enc.h @@ -232,8 +232,8 @@ typedef struct AC3EncodeContext { int frame_bits; ///< all frame bits except exponents and mantissas int exponent_bits; ///< number of bits used for exponents - SampleType *windowed_samples; - SampleType **planar_samples; + void *windowed_samples; + uint8_t **planar_samples; uint8_t *bap_buffer; uint8_t *bap1_buffer; CoefType *mdct_coef_buffer; @@ -260,9 +260,6 @@ typedef struct AC3EncodeContext { /* fixed vs. float function pointers */ int (*mdct_init)(struct AC3EncodeContext *s); - /* fixed vs. float templated function pointers */ - int (*allocate_sample_buffers)(struct AC3EncodeContext *s); - /* AC-3 vs. E-AC-3 function pointers */ void (*output_frame_header)(struct AC3EncodeContext *s); } AC3EncodeContext; diff --git a/libavcodec/ac3enc_fixed.c b/libavcodec/ac3enc_fixed.c index 4a24cce833..b8a4d88a42 100644 --- a/libavcodec/ac3enc_fixed.c +++ b/libavcodec/ac3enc_fixed.c @@ -104,7 +104,6 @@ static av_cold int ac3_fixed_encode_init(AVCodecContext *avctx) s->fixed_point = 1; s->encode_frame = encode_frame; s->mdct_init = ac3_fixed_mdct_init; - s->allocate_sample_buffers = allocate_sample_buffers; return ff_ac3_encode_init(avctx); } diff --git a/libavcodec/ac3enc_float.c b/libavcodec/ac3enc_float.c index e0907fed05..77a7725f31 100644 --- a/libavcodec/ac3enc_float.c +++ b/libavcodec/ac3enc_float.c @@ -107,7 +107,6 @@ av_cold int ff_ac3_float_encode_init(AVCodecContext *avctx) s->encode_frame = encode_frame; s->mdct_init = ac3_float_mdct_init; - s->allocate_sample_buffers = allocate_sample_buffers; s->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT); if (!s->fdsp) return AVERROR(ENOMEM); diff --git a/libavcodec/ac3enc_template.c b/libavcodec/ac3enc_template.c index 56ce36c012..3646e1dcaa 100644 --- a/libavcodec/ac3enc_template.c +++ b/libavcodec/ac3enc_template.c @@ -31,8 +31,6 @@ #include #include "libavutil/attributes.h" -#include "libavutil/internal.h" -#include "libavutil/mem.h" #include "libavutil/mem_internal.h" #include "audiodsp.h" @@ -40,23 +38,6 @@ #include "eac3enc.h" -static int allocate_sample_buffers(AC3EncodeContext *s) -{ - int ch; - - if (!FF_ALLOC_TYPED_ARRAY(s->windowed_samples, AC3_WINDOW_SIZE) || - !FF_ALLOCZ_TYPED_ARRAY(s->planar_samples, s->channels)) - return AVERROR(ENOMEM); - - for (ch = 0; ch < s->channels; ch++) { - if (!(s->planar_samples[ch] = av_mallocz((AC3_FRAME_SIZE + AC3_BLOCK_SIZE) * - sizeof(**s->planar_samples)))) - return AVERROR(ENOMEM); - } - return 0; -} - - /* * Copy input samples. * Channels are reordered from FFmpeg's default order to AC-3 order. @@ -68,13 +49,14 @@ static void copy_input_samples(AC3EncodeContext *s, SampleType **samples) /* copy and remap input samples */ for (ch = 0; ch < s->channels; ch++) { /* copy last 256 samples of previous frame to the start of the current frame */ - memcpy(&s->planar_samples[ch][0], &s->planar_samples[ch][AC3_BLOCK_SIZE * s->num_blocks], - AC3_BLOCK_SIZE * sizeof(s->planar_samples[0][0])); + memcpy(&s->planar_samples[ch][0], + (SampleType*)s->planar_samples[ch] + AC3_BLOCK_SIZE * s->num_blocks, + AC3_BLOCK_SIZE * sizeof(SampleType)); /* copy new samples for current frame */ - memcpy(&s->planar_samples[ch][AC3_BLOCK_SIZE], + memcpy((SampleType*)s->planar_samples[ch] + AC3_BLOCK_SIZE, samples[s->channel_map[ch]], - AC3_BLOCK_SIZE * s->num_blocks * sizeof(s->planar_samples[0][0])); + AC3_BLOCK_SIZE * s->num_blocks * sizeof(SampleType)); } } @@ -91,11 +73,11 @@ static void apply_mdct(AC3EncodeContext *s) for (ch = 0; ch < s->channels; ch++) { for (blk = 0; blk < s->num_blocks; blk++) { AC3Block *block = &s->blocks[blk]; - const SampleType *input_samples = &s->planar_samples[ch][blk * AC3_BLOCK_SIZE]; + const SampleType *input_samples = (SampleType*)s->planar_samples[ch] + blk * AC3_BLOCK_SIZE; s->fdsp->vector_fmul(s->windowed_samples, input_samples, s->mdct_window, AC3_BLOCK_SIZE); - s->fdsp->vector_fmul_reverse(s->windowed_samples + AC3_BLOCK_SIZE, + s->fdsp->vector_fmul_reverse((SampleType*)s->windowed_samples + AC3_BLOCK_SIZE, &input_samples[AC3_BLOCK_SIZE], s->mdct_window, AC3_BLOCK_SIZE);