From patchwork Mon Apr 5 01:44:31 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 26742 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id B22B444982B for ; Mon, 5 Apr 2021 04:45:06 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8EB61688126; Mon, 5 Apr 2021 04:45:06 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR06-AM7-obe.outbound.protection.outlook.com (mail-am7eur06olkn2015.outbound.protection.outlook.com [40.92.16.15]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E4F9F687EC8 for ; Mon, 5 Apr 2021 04:44:59 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=a427bDSD4pCVcpdq/3r7f4Jzj9faHpHvckS1sv9UZUE6ekaOnVxHpNHeF0xVsh7IAfU09a36Fclv4wdliM5YL+BOI/mrpPsIVhRCrunbPHX7b8IUZOgTPPa1kwiFNu0IH5sGEDLA461nrgqpDWW1fUHpbloJpDFxK0CRknRIXFrodUuqmAPSx+0DZ25XBL8WVu/GlyI3N18z+mcWdh0h+8X0JwiPt6OQT/bBPe1ZV8oEkwUyW5GZuMgp+5wsstgtF4kf8BMlcfchygNVb6EYoghwrAI8OjTisYF+qrnDS6VO6vSYSMk5/GhL8dyq0sBxsov8kahXeML7lrAa3+aZLA== 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-SenderADCheck; bh=FZX4ujOZ7fG9asu5LgYigZbzTCQvdWYJ03TgVqvJMc4=; b=ln+da5+UBqJpbVZuw9tWzUkRqySFDC+OgIYy4lvaqwehWRgAPZUoR3p9wk89X/CIiyt0f/IeOaTEJLkbVBhgMwEk1CWkL56XxmLaIYshD+R5XBtLPZywDPklVGLnUuqXM8+ejSjgyn4Gm6/qbJsaeXf2J5Uw7n8mqZ7RpEXl/EfKbjWHiUX12VV7WQbddVAZvRQY2zWyTfJOTEOOcYfcXzTim4JTptDdmZ0QiLnQ7yiJjK9VUjeC8NJsg5Pvb1eO8uwrKa68aVnIyFk9LwE7ghalu9lqGF4uWHx/nMuIEmZVMAMNGT+ptvKg0BtEPKJlCVJ0eWcUftCwWL7/2t2c6g== 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=FZX4ujOZ7fG9asu5LgYigZbzTCQvdWYJ03TgVqvJMc4=; b=J5ig+WOREf4wERE205SB665XQRvPExcI4nczffCymRpi67RsFxmtg1OysUKq6gnHLqpomRTSYuHKkegljk8MSO7Ckoa369X8NTeuSWEZI6PeEaCDsKGLWZmUQnOq4Xgi50KMRHcVbMfPNPd2v8a6L/XOBo02P1p0gdkhSjlVQSEcepK/keTUljfxrMXwM7hdIGYYBxDOIctV2aOaJrbhjOrpKNQ8tvazsBy8Wa2oxrVcLkgD7ohtPoZKtzMIRqdM2J/SM8D7ll7VgXj+gOjfAqdsuwSElmHydsXP2fL9xEVBLN+xcnFJmnN24xzKuYe2JepgXnNrnHyZHa+AHuJJGA== Received: from AM7EUR06FT063.eop-eur06.prod.protection.outlook.com (2a01:111:e400:fc36::48) by AM7EUR06HT232.eop-eur06.prod.protection.outlook.com (2a01:111:e400:fc36::345) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3999.28; Mon, 5 Apr 2021 01:44:58 +0000 Received: from HE1PR0301MB2154.eurprd03.prod.outlook.com (2a01:111:e400:fc36::52) by AM7EUR06FT063.mail.protection.outlook.com (2a01:111:e400:fc36::403) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3999.28 via Frontend Transport; Mon, 5 Apr 2021 01:44:58 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:13702BA36D4E1F768C159D71F1B986A2805AA65F4F168E49EEA41B115752A4B8; UpperCasedChecksum:B0F012CF64049DDC906369E4ED471B1C36963057888F4749AEBE8900EE10C493; SizeAsReceived:7606; Count:48 Received: from HE1PR0301MB2154.eurprd03.prod.outlook.com ([fe80::8128:5de5:4e94:9a21]) by HE1PR0301MB2154.eurprd03.prod.outlook.com ([fe80::8128:5de5:4e94:9a21%3]) with mapi id 15.20.3999.032; Mon, 5 Apr 2021 01:44:58 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 5 Apr 2021 03:44:31 +0200 Message-ID: X-Mailer: git-send-email 2.27.0 In-Reply-To: References: X-TMN: [GSsBZEZVahS26tftBYzQDDAnIvyt7KUo] X-ClientProxiedBy: AM0PR02CA0189.eurprd02.prod.outlook.com (2603:10a6:20b:28e::26) To HE1PR0301MB2154.eurprd03.prod.outlook.com (2603:10a6:3:2a::22) X-Microsoft-Original-Message-ID: <20210405014434.3973535-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sblaptop.fritz.box (188.192.137.96) by AM0PR02CA0189.eurprd02.prod.outlook.com (2603:10a6:20b:28e::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3999.28 via Frontend Transport; Mon, 5 Apr 2021 01:44:57 +0000 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 48 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 5286e57c-b382-4c5b-c0d0-08d8f7d46b9e X-MS-TrafficTypeDiagnostic: AM7EUR06HT232: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vAJ7gLvbB7kz1vdGuigh/6h4sxAr/EjBhtZS/SjR0nqA5TL0aELbgfmMngRk0dWhh4piXnnOE3IxUZ7kcHzkTv+EcnOFo+5wRjvopPEgVE0V+bnp5qqSHW1lk3ORTTxJHfXpV52O4B7SMTGhL0uqrRcqsatGqVzklCbvlClIkkV/QzY+gnU40ejI312RX5xL8hndJR+8N1DSXE5li14FvcOG4Pwucz0XSoDEh6DEFC6T2aGDNr627f16RiHbGk+1GGpI9LuTQxIh2jUOsigc3Jq/Db0vNieI46i6oAKSqDnFqy4WuZrFuSrgU2WIW/kRiAX0QPggRfMFH4QntzjtXZLZRxPoVrcvBqzTLRY6QAHRDQHX9VeC3GC15FpCX8JOjWHThNmjJkCcrUCrLHZDvw== X-MS-Exchange-AntiSpam-MessageData: ahkmqzGyfDubtWQFVzwZFwHBgXSKWBLPRG1si9MIudHlD2jXCLX+ngEa1xg0zW34fRLYgtIrbpjCh8ghRGZql+tPWbcvx/VnjRhUB0vsJ0ElpDYee+Ycay7C8uAZ2kIjvKDbP0tCtZeAK3jPKfpDSg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5286e57c-b382-4c5b-c0d0-08d8f7d46b9e X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Apr 2021 01:44:58.5238 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: AM7EUR06FT063.eop-eur06.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7EUR06HT232 Subject: [FFmpeg-devel] [PATCH 3/6] avcodec/mpegvideo: Factor common freeing code out X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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" From: Andreas Rheinhardt Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.c | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index 7327204e99..7eddbdcc37 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -457,6 +457,15 @@ static void free_duplicate_context(MpegEncContext *s) s->block = NULL; } +static void free_duplicate_contexts(MpegEncContext *s) +{ + for (int i = 1; i < s->slice_context_count; i++) { + free_duplicate_context(s->thread_context[i]); + av_freep(&s->thread_context[i]); + } + free_duplicate_context(s); +} + static void backup_duplicate_context(MpegEncContext *bak, MpegEncContext *src) { #define COPY(a) bak->a = src->a @@ -988,7 +997,8 @@ av_cold int ff_mpv_common_init(MpegEncContext *s) } /** - * Frees and resets MpegEncContext fields depending on the resolution. + * Frees and resets MpegEncContext fields depending on the resolution + * as well as the slice thread contexts. * Is used during resolution changes to avoid a full reinitialization of the * codec. */ @@ -996,6 +1006,8 @@ static void free_context_frame(MpegEncContext *s) { int i, j, k; + free_duplicate_contexts(s); + av_freep(&s->mb_type); av_freep(&s->p_mv_table_base); av_freep(&s->b_forw_mv_table_base); @@ -1048,16 +1060,6 @@ int ff_mpv_common_frame_size_change(MpegEncContext *s) if (!s->context_initialized) return AVERROR(EINVAL); - if (s->slice_context_count > 1) { - for (i = 0; i < s->slice_context_count; i++) { - free_duplicate_context(s->thread_context[i]); - } - for (i = 1; i < s->slice_context_count; i++) { - av_freep(&s->thread_context[i]); - } - } else - free_duplicate_context(s); - free_context_frame(s); if (s->picture) @@ -1112,15 +1114,9 @@ void ff_mpv_common_end(MpegEncContext *s) if (!s) return; - if (s->slice_context_count > 1) { - for (i = 0; i < s->slice_context_count; i++) { - free_duplicate_context(s->thread_context[i]); - } - for (i = 1; i < s->slice_context_count; i++) { - av_freep(&s->thread_context[i]); - } + free_context_frame(s); + if (s->slice_context_count > 1) s->slice_context_count = 1; - } else free_duplicate_context(s); av_freep(&s->parse_context.buffer); s->parse_context.buffer_size = 0; @@ -1152,8 +1148,6 @@ void ff_mpv_common_end(MpegEncContext *s) ff_mpeg_unref_picture(s->avctx, &s->new_picture); av_frame_free(&s->new_picture.f); - free_context_frame(s); - s->context_initialized = 0; s->last_picture_ptr = s->next_picture_ptr =