From patchwork Mon Dec 13 01:38:27 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 32366 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp4815180iog; Sun, 12 Dec 2021 17:39:38 -0800 (PST) X-Google-Smtp-Source: ABdhPJxbXAGLIIx3tEbGXgL2WcCoD2vwu7dzAa5qO0MTdu4gHW911+joOWPHoHYz/4noF4b6Tc3C X-Received: by 2002:a05:6402:5156:: with SMTP id n22mr60521897edd.222.1639359578508; Sun, 12 Dec 2021 17:39:38 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id hp8si14846023ejc.359.2021.12.12.17.39.38; Sun, 12 Dec 2021 17:39:38 -0800 (PST) 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=odjFUUNi; 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 BAD3468ADB0; Mon, 13 Dec 2021 03:39:03 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2084.outbound.protection.outlook.com [40.92.91.84]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1B76B68AE51 for ; Mon, 13 Dec 2021 03:39:02 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oTPslovZdKHGQiz1u9me3RgptVhviOK/lX8Gkbk20wvvhbZiTjP8q61qEFS9XaSMa4DOejM3VFSFa95qljh1od/9HeXJWMVvcmCCpxWJe7FlHpIbw6Qj0WK6SbrOZuVS/TohslHH+cOteQRLDclXsN/apjAjMhEvXdaU5oRlvqUhxGJ7jRKCpwIeX22fNYFJA+uYH0votw6oCQYuDWDxg5yMo8UBoOE6wYGDjZzzTwwWHLLt8D3nJru1ggdtaMQJkmb0uAm5AlRWmyTqOeRldaBNExwZ7uCFMW67WV30IV8ATNJUBMhKOSbh2f5JKheAvUj8zvOkEFjnOTUXzOt9Yg== 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=m+Ww2U7vXZZalB64MpK4OUv41kn7XQscRPYWJGMIplE=; b=HSPpLCKmUqNiO/MgfhED02lKymlEvWesC7h+0qObDkH2yD/pWd+cHVmmLuhybDR+rgHe6fj7YKhHKY2sou4XVS1sIZok8BggMgpDvqQIG/mG17u5zZupgI4GF8Ju9xTj2t8k/OxG6zHBDMhBAPBjatLrPOMtaek+5v3yx9ZdmODqmZ+7ilF67NbaI3AQ02irLdsY8661/mjt8Z2jy9Bb3me1oZI8e6KAHCVnS90pWLraJtwB/o1CzL9hJRmvBac3eAlMVssqJ/hwf7s+FgJv3Mh8hvEq5F1dVlcMPqzvdVz2D3/8JqFFkpzvNm/DfGIaL8n18Os+ETslWnNzWmvG7A== 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=m+Ww2U7vXZZalB64MpK4OUv41kn7XQscRPYWJGMIplE=; b=odjFUUNiLByCEVLfm8eu+DIlwwmKt00TkOvOKXG4JcX1OQZF/Bky72pQHOYixBMi6UpYjEY33B18NHTwDzKrR/lSf1JV5OixXYI0ByVtiPoIBhincX90AZm2dTl3yf7ss3aeeVPHpUajqkAOpnY28ir+DTIMQfQ+zMOwO0qg7U0QKDgcwMFh7NIvN+Uuyce4zsCoQG+qZluvGDrdgn8UncvrseT/9M5+vn7I7Kn4S+XFFogSr2+Ziha1YYu3AnCswFYEDnjnr9IkWzdY8dpPeHPCiDyrlt6c7H+z7S7iRalpBBVBlyWzedBA5v3Ij/R/d1tjC7/45t8qRYJ8uIRfTA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB3864.eurprd03.prod.outlook.com (2603:10a6:20b:1c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.16; Mon, 13 Dec 2021 01:38:50 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::f0dc:92f5:6bc2:45ca]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::f0dc:92f5:6bc2:45ca%6]) with mapi id 15.20.4778.017; Mon, 13 Dec 2021 01:38:50 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 13 Dec 2021 02:38:27 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [SnZYJNrnmBMmJB3EluQ+DjLiKiR34Y7a] X-ClientProxiedBy: AM6P193CA0097.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:88::38) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20211213013829.1749956-4-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 949f3612-d28c-4165-6905-08d9bdd9501a X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiRhTeYa9y1Ya0aPjwWbsts1MpPMswtNhY1SMv3tkIbDh5n8hTMD/C9gI10sHFuGuYrW/g/saDeM/pOI8CI8eKpH1+AK7/e78f8tPDCHE8oOwxpF6XWsyvQSRoKe2PlKZnSz81QkJMeoeosKYl/xrK+aIpGporsdC11c5uJr8oRftJ6MmuAEG9i0r/CHRALQ0PUQb13gcUIIaYdAGNJ2iabJC2u1GRxKg2E3zfbj40NBYjKnBzLxVcTu3j03a8LnSfxenskuYBWXhWaIrZsdDgdkPFDUY415IEhx86hMD8M5a7Lh61SYRGJaUOWHr0yYTNStVCChAJIQKx7WpXKL49gVXOnohgLrM1bsipVqz3kMgo2sj3vGqav7dgG7j68K54kyquv6abQMAlXIbjArx+QELDP0cAzLH/j8gkrMWe2dgvddIENT34Bgwwoxok1FbaHigDrsyRlEwhB8t/SpdB5eDpotTIwOcKHHkHe/jgl3p4aIp4AsjKd5iSdIil9L4WNPZpcbwiMgkrX5wT8Nzq/xh+dju9rWcH5yng3jqDF/G+vRsV9wm+rUbYlmS/nIUqdl8fGGNabWtoCJeD4p6Rhl3NusDs/6e7/T1UR6joY8pa5nYFBwtJejfF/UBxGbnvHzBAm82RsVxLPCwygdsY1PPcZR7vrK+QRK0/q8MCdnWjAuYCIQ/zFkPZi2wv+m+Eqq3m3npryZyEodBVgN7Nv3gyPLy6tVDrKV1+2q23Hf4UlcGA+KkaPPJ3OFWiiLgkc= X-MS-TrafficTypeDiagnostic: AM6PR03MB3864:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8mfMFpBgJxxIAaMQf2uyM8J3PfW0bUyroBpCvLvTdCKxd/ObbsQCm2y32RZwLGXYruPKxzAlgWQGrkMcFMYc2ttFKLWNBYmxdVtCK97JtoHaUxSeOEtLdGnnM16m2efpmw5Hg790P0LcIKZ8R4NwANKGciOlsq59RYLdepsKwv+kTDjrYncrAHzUC5UsMYmVffgoqOKqkbaaZ9uhaapC28ZH6jwcqjqZUZIirSqXjBpdfbpyU8Zz/dfG8eL8ABlXiosfj8/bMG4TREpX6QNESVjibgOk+g86Ii8DSAiyqjUjY1naxJ0Jc7oVPn10TRAxOC0EM6SdK6hZBR7eEqwKx4wRzTFT0uzY8+eTzRPSl6CeUC9yRpkwtSp1mb3357+rC3KUFQ4+q+o/i1JtVEApIxA3stK+azjWv7g2taZSWON1HRSK/0rSjOaJsH/bRSMZaZkfL3T65kvvO4kQCjt0lBIdDExf7/eaJh5SYRimTEzmRBEv+IvkH5rpT02L9TkcCPVDNZXSxlgQvkSmO9RC+H8bgSG5+VtlnWpzyoWCYn3FNYFzQ5ziOfKbaE8IxlY8t2eOP8Q8aIw3nx8S6IJC6Q== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: bEB/MJmfpE0F5m0UwDTh8odWcXzcFFzEDCEO28iwAyeES3FSVQJkywY7DRP6YKTk3orRFShT7pu7pdMRkOPRE7AYBItWDA+WJbQ4jVFEapTFeuO2tGMnYOfFWCPYTEfhu0rW6ejF7Uv8AEelnhTHyJaJO5BC6IX623IAIWPSmIuqx5lvS8fDJ48F68vYsOeaJAaDcAE4/LBUa9RKM+Vwms+yceR/Lk/vpGpzfVXXYnebHDtNRpPCYDueFi6OycDQshDWfIcHQx8+mNRmODo0HntJHgbUQ8VDCfb8TPUwa0XUOsRYfM1wrhNddUJVH5ewxTTC19F4E6uV9kxrLZyzZra7y/6QLwr9I1N1ojVnvCm23a4kZtQGCMyYXBREUP9ZEFqRNBU4il8g002y/eWqRuyJnuzhuAnB2KdlzpEGtwuEtc3NzmTBwIwm+MFARJEOGWKfIvXLLhkc8O0uXNLmfuw1BFdnoqq5PG8HFjyW9EpS7LAzEvU7SyFJySN3LCY23miXpePTQP/At71wHZQdVuTm1q4gUbMokt1ANNp2XJVS0CzjIBqQHD1G+Tum7qQsMYbx22LVWrj0mriSSXPODgkQ5O+NF9KU0fTUru60W9KuBxu3ORr0j9Z0Y3j1dgAKb+SRLGM6R9GtHeiqgGawD/e+rbUkkWuS35bHTGPikbriHhSEIVpU70WJFomxe8/V5tO50Hx4D3VEbffVIHr0HRRyQo/3h/b6q373sEMzo7g28TQJIOzcowgsQwnWhZkWF3CdmVEMY25iTIj8+YBq+zIE9eNTs5Y1MpITYNYg0MNTPwMNGm8qPDLW1fZEXbmTB1FhQ1VuycOSQiaTNOmdjTU9FaOFJeSgN+/SpqxgNVmN7sESywehBQiLyqtzsGExEI96ShMChKOPMcfpG6oVC4paWQWIHZHTMkdaTstKn/MGWIZ4AbUIdBdSLHVkMQ5uF+C75DWgyCQGsN862bJomw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 949f3612-d28c-4165-6905-08d9bdd9501a X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Dec 2021 01:38:50.0970 (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: AM6PR03MB3864 Subject: [FFmpeg-devel] [PATCH 5/7] avcodec/mpegvideo: Allocate several buffers jointly 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: lpCeCYevO4Y4 Reduces the amount of allocations and frees. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.c | 46 ++++++++++++++++++++++++++---------------- libavcodec/mpegvideo.h | 8 ++++---- 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index e2cdba8bb1..be47ccb8ed 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -769,34 +769,44 @@ static int init_context_frame(MpegEncContext *s) !FF_ALLOC_TYPED_ARRAY (s->bits_tab, mb_array_size)) return AVERROR(ENOMEM); +#define ALLOCZ_ARRAYS(p, mult, numb) ((p) = av_calloc(numb, mult * sizeof(*(p)))) if (s->codec_id == AV_CODEC_ID_MPEG4 || (s->avctx->flags & AV_CODEC_FLAG_INTERLACED_ME)) { + int16_t (*tmp1)[2]; + uint8_t *tmp2; + if (!(tmp1 = ALLOCZ_ARRAYS(s->b_field_mv_table_base, 8, mv_table_size)) || + !(tmp2 = ALLOCZ_ARRAYS(s->b_field_select_table[0][0], 2 * 4, mv_table_size)) || + !ALLOCZ_ARRAYS(s->p_field_select_table[0], 2 * 2, mv_table_size)) + return AVERROR(ENOMEM); + + s->p_field_select_table[1] = s->p_field_select_table[0] + 2 * mv_table_size; + tmp1 += s->mb_stride + 1; + for (i = 0; i < 2; i++) { int j, k; for (j = 0; j < 2; j++) { for (k = 0; k < 2; k++) { - if (!FF_ALLOCZ_TYPED_ARRAY(s->b_field_mv_table_base[i][j][k], mv_table_size)) - return AVERROR(ENOMEM); - s->b_field_mv_table[i][j][k] = s->b_field_mv_table_base[i][j][k] + - s->mb_stride + 1; + s->b_field_mv_table[i][j][k] = tmp1; + tmp1 += mv_table_size; } - if (!FF_ALLOCZ_TYPED_ARRAY(s->b_field_select_table [i][j], mv_table_size * 2)) - return AVERROR(ENOMEM); + s->b_field_select_table[i][j] = tmp2; + tmp2 += 2 * mv_table_size; } - if (!FF_ALLOCZ_TYPED_ARRAY(s->p_field_select_table[i], mv_table_size * 2)) - return AVERROR(ENOMEM); } } } if (s->codec_id == AV_CODEC_ID_MPEG4 || (s->avctx->flags & AV_CODEC_FLAG_INTERLACED_ME)) { + int16_t (*tmp)[2]; /* interlaced direct mode decoding tables */ + if (!(tmp = ALLOCZ_ARRAYS(s->p_field_mv_table_base, 4, mv_table_size))) + return AVERROR(ENOMEM); + tmp += s->mb_stride + 1; for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { - if (!FF_ALLOCZ_TYPED_ARRAY(s->p_field_mv_table_base[i][j], mv_table_size)) - return AVERROR(ENOMEM); - s->p_field_mv_table[i][j] = s->p_field_mv_table_base[i][j] + s->mb_stride + 1; + s->p_field_mv_table[i][j] = tmp; + tmp += mv_table_size; } } } @@ -880,14 +890,14 @@ static void clear_context(MpegEncContext *s) s->b_bidir_forw_mv_table = NULL; s->b_bidir_back_mv_table = NULL; s->b_direct_mv_table = NULL; + s->b_field_mv_table_base = NULL; + s->p_field_mv_table_base = NULL; for (i = 0; i < 2; i++) { for (j = 0; j < 2; j++) { for (k = 0; k < 2; k++) { - s->b_field_mv_table_base[i][j][k] = NULL; s->b_field_mv_table[i][j][k] = NULL; } s->b_field_select_table[i][j] = NULL; - s->p_field_mv_table_base[i][j] = NULL; s->p_field_mv_table[i][j] = NULL; } s->p_field_select_table[i] = NULL; @@ -1026,17 +1036,19 @@ static void free_context_frame(MpegEncContext *s) s->b_bidir_forw_mv_table = NULL; s->b_bidir_back_mv_table = NULL; s->b_direct_mv_table = NULL; + av_freep(&s->b_field_mv_table_base); + av_freep(&s->b_field_select_table[0][0]); + av_freep(&s->p_field_mv_table_base); + av_freep(&s->p_field_select_table[0]); for (i = 0; i < 2; i++) { for (j = 0; j < 2; j++) { for (k = 0; k < 2; k++) { - av_freep(&s->b_field_mv_table_base[i][j][k]); s->b_field_mv_table[i][j][k] = NULL; } - av_freep(&s->b_field_select_table[i][j]); - av_freep(&s->p_field_mv_table_base[i][j]); + s->b_field_select_table[i][j] = NULL; s->p_field_mv_table[i][j] = NULL; } - av_freep(&s->p_field_select_table[i]); + s->p_field_select_table[i] = NULL; } av_freep(&s->dc_val_base); diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 85f02b1355..879b019ffc 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -232,8 +232,8 @@ typedef struct MpegEncContext { int16_t (*b_bidir_forw_mv_table_base)[2]; int16_t (*b_bidir_back_mv_table_base)[2]; int16_t (*b_direct_mv_table_base)[2]; - int16_t (*p_field_mv_table_base[2][2])[2]; - int16_t (*b_field_mv_table_base[2][2][2])[2]; + int16_t (*p_field_mv_table_base)[2]; + int16_t (*b_field_mv_table_base)[2]; int16_t (*p_mv_table)[2]; ///< MV table (1MV per MB) P-frame encoding int16_t (*b_forw_mv_table)[2]; ///< MV table (1MV per MB) forward mode B-frame encoding int16_t (*b_back_mv_table)[2]; ///< MV table (1MV per MB) backward mode B-frame encoding @@ -242,8 +242,8 @@ typedef struct MpegEncContext { int16_t (*b_direct_mv_table)[2]; ///< MV table (1MV per MB) direct mode B-frame encoding int16_t (*p_field_mv_table[2][2])[2]; ///< MV table (2MV per MB) interlaced P-frame encoding int16_t (*b_field_mv_table[2][2][2])[2];///< MV table (4MV per MB) interlaced B-frame encoding - uint8_t (*p_field_select_table[2]); - uint8_t (*b_field_select_table[2][2]); + uint8_t (*p_field_select_table[2]); ///< Only the first element is allocated + uint8_t (*b_field_select_table[2][2]); ///< Only the first element is allocated int motion_est; ///< ME algorithm int me_penalty_compensation; int me_pre; ///< prepass for motion estimation