From patchwork Tue Sep 19 19:57:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43829 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a886:b0:149:dfde:5c0a with SMTP id ca6csp186726pzb; Tue, 19 Sep 2023 13:00:13 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF2XmyDp6DOCj8QooFFv2wfEZplyljAlpKzuN673U0LVpIFQlcUOvJSWwhmLe12ol1DCHaq X-Received: by 2002:a17:906:51cc:b0:99b:c86b:1d25 with SMTP id v12-20020a17090651cc00b0099bc86b1d25mr342835ejk.26.1695153612809; Tue, 19 Sep 2023 13:00:12 -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 j24-20020a170906051800b0099315476299si10142652eja.1040.2023.09.19.13.00.12; Tue, 19 Sep 2023 13:00:12 -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=blIjA8aA; 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 67FCC68C9A1; Tue, 19 Sep 2023 22:58:09 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2090.outbound.protection.outlook.com [40.92.91.90]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9A6A568C90F for ; Tue, 19 Sep 2023 22:58:07 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=c8rvYj5sBmv0Tm9JX/1umfAI5XbLO22Srfrvrdlv7AJNOu1+zDkSipZ/qfXLGXUfx0SQsa5fuqn8QPb4plOZ3Lg6CnOwORiDmUusXKRQx/ftO6jmnDDtRA+X+d8kHwlzoKMyJevNmE9/+xAC8/V06KEl/b1KvFEdYoItL+oMiRJ/BIw+fkIMqRpGmy2Bxs9g1Ub69ckphwj1Rakg0ZE5mZs1dpR5a/ZNwFEOW1VWoO1ZDCBOu5UMbn6Bm7NP2EhruGWwnl++JIilaOA0RKFPIyyab9lvEs0rnABwLVAYMGbRmddJ8glWbztQqeZ6QDDI5WlP7XVrTPTi0MiTcvykPw== 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=Zk9Uus9ZoVeoI1/Qly5ZEyjqTZcdPNTzyq+qV4F8dtw=; b=RM/YCf9gTXk5AaRkENeLNWcwyrNU01GUeGUvw8QiMuSrLBGTQDX25Sn7h64eepBvfv4JbdnvdRs1NDp6vy+/RYVPQ4t7lVvVK2RWVWMa8KOZMsU/T/fqF4QSC9fR/Y10blAg1ryCxXROCdGlGf0nCyLWt60ralbEk0WAMsZFd5TjzecSUdmU2zGZiW0kjqCZKUFfMPG0SJgThpmcCoDNhS5B7zmQ7hrpVxo5NPOVR8m7LWtYxS5tcyxMbvaw8z2a4iGwolUSLmOEHUwKtjqg0xk+LINB4i/OqwRJ3Kse/QL/FNxI7xl+iuRJau4SXXFe/8Ebe1625KNrM6u6pP5uSg== 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=Zk9Uus9ZoVeoI1/Qly5ZEyjqTZcdPNTzyq+qV4F8dtw=; b=blIjA8aAtmSJsWaBu5KCkwV8HjeoI735MuxhyId8v0bjFyxhXJZNPEybAGA2iDUk0UvM2FDHzM2lNursED1NjbqawOV+DUnAYJ6xcTLfZPVyVwvF3BYj16itYTCNhR2Wr6tFELmlr9PjZrHHhAjg5Cs2rKUEk2Om2L9/LP0JTAgkq82hdrT6iWN2/Ti7RUhb/7uHq+zGf5hPY1yGyEEP/FtqghEbzVI11FEOqDttyHCYvf6xsbWFDAPPiU3FrTSfKAgIVvKVYXW0jtTFKNkN6559WvQYpFFHx012JuziGfvXRMok7JJLrwKC2FyYbFwS9swSmC/T0ePN6Ee8uL3xXQ== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DU2P250MB0303.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:27c::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.26; Tue, 19 Sep 2023 19:58:06 +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.6792.026; Tue, 19 Sep 2023 19:58:06 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 19 Sep 2023 21:57:14 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [F/lhFaMOy7E8oBncab3ge4FK+8o3zYSO] X-ClientProxiedBy: ZR0P278CA0086.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:22::19) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20230919195734.1005750-22-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|DU2P250MB0303:EE_ X-MS-Office365-Filtering-Correlation-Id: c62f5bd9-9b4d-4995-ae89-08dbb94abd6c X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BTrapzAtd1g8ADBbBQZ+87nerBRBF92O2KZXoNEAUF3WLWsQWDdjATQnbMmYNOLVmzTpsPvM1gUQQ+XNtm0xv7WAK+4KwrktuYMFGeMdvnNybDmt0puf9eoSKaWgygzAsi4BViBjaKdOPhdF/EklCAx9gW5+++qVpedSNopc5LqFryUcH9r9nDEdNF3GEp9JmIYOOp0+fmLlyuI/wHinlxAPt/sC9vKeriLjdnM7sPaRaV+s+yI/eZxeecVgjG0KcXJpObJ/cocFmiY4xEQqLFeIXspcXYP1EQDmVWo6kX0P2MHrBLlaICFOTyNGSpp/mHs/qayU5mq9pPxmy62uB0xECvyKMAeMnU9r9ybdbzpL1Tuo235OYY5wwFx/18lPsDJl0Lisf97w/zXwZ80uRBLvY06wpSYkaYOtZWl5zRU3b2PxzozVgyzLs6ZpqcMCyLXgIBPfIuPNc+Q/o3bnrUGrzoqTJ9Z9jQPDDjm90BIyzS8GpM1HamM4QpKfNZVzRDIcYu6vumUMY4XwhKARC+Ox4mZ7qgkJoxJAlKNBA+MJnR64gXDKogo3BbaNl86iiKKRoI2Igb4FXnQ/Raj0O7GBcmKj77wrtG8IGjvbQ7ucS0A2szMdGMjzUjI/MVzf X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: U9lToHUN1TntoADZb2l5DUTGtO8OpXa9/3M9KtBb+/D23EHFY9LOY7nJoIWYi+Rby+AbvNq6XTyPUGgYEIYmOtvOscywH/zHCMbR77rydb4iwTfNMDbE3law8wgFknu3SWa+4o6+M07kWHl8wxbGxx9tFe4VMV69XEaxHyHXRdjN0fxWfQwxcZCBkxTEHZqXY3Q7BJhPWcYD4zO3fiQuR5ax7UD97Ryx67CJlQ0AXW5b5X7ajIOsuPe+Wf+LPIcc9PoNqGUlyOpGIDdyAneSSw9gXWRZQjPNmVGjokfM9ukxH4xr1MgO5tA4TAuB1fdmysPVuDmfRxoywdnbjlsYIHxTmNdVo9144GBk5CqQh+qmRac0wAF+hVr8dhxV5eQLCCfV3JsI2CIb/TPobsAuxbySqbA6ZWKpBVJa2f1koR/9I4HNjPmY63JaORbHlmuItELKF519n/MAtD9A0u15hCZQCqZkK58c0XmlRauNzF8AteUjraacsu7c6OnJ1rRJ7KcJHhtnxRSdR4QNvDqwU5tiU5us3qpAAuFbRM69NFMhcBnj26oJNa5FwmZEfitYcFs2xjQdnllkco4C7rdqL4oExoDqR6H7jC+k0oaogorEdPczd7KvP3aify7h1AOdWKqUrQqSnZbR84jSjY5fFyyjFYDb2J8KwOCX5iHJyTcvBAVEadBBCNWZMaWEV7PiJNLkyjZfO8Tt+bSOFjhS493+IhXl5tuAdObwUh/B5DhZNP1jDosqm108Wk0FKXy23ioRDU33HIAZ5RFhf1ToLjOcM+n3Ed1OEzMUxW1B5mIMMEfoQLNJzv33VH3T4QtnH1eDamD00v3JQxcH/+cYNs3Dvpa4YWX9Q5bS2BDHk96io2o3LgeGYUDNeIOpEbB+pt6CFESDuaIr+mhDamxrm9DSGopdgQ7rVjXwjuLZ4vlAZwbjP1+n/DuJqk+e05+hdX6d2LDp/Pptg73vn1KRpYcqqsQRP8RHEOrz+fYOO3onGuNIa/jLGwkX0Re4AFnM2ZmSqagt6vIqxSZ82dI3eziiLX7hY+HX0mI5YzDtIwGJ7vTfAT50IguCgVTmfgj3wjK8mOAkg3UatIorOUeiqiTNXJDP6qJJ92IzqZKZqpkPOxYQxga10syLBC4Te2piPQIGeGjHxLe2c8H1B/DjY5PW7QgMpnwl7JdJETRef3muqdyPiGRGPaZbqw8fzbKMzIpEMdcxsGM02jJdq9CrR5iVybPZvpCarU9PPngu6koxFHTocfM7OA3Kf6/HOMXA X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c62f5bd9-9b4d-4995-ae89-08dbb94abd6c X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2023 19:58:06.2089 (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: DU2P250MB0303 Subject: [FFmpeg-devel] [PATCH 22/42] avcodec/vp9: Use RefStruct-pool API for extradata 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: slOblg+GArAv It avoids allocations and corresponding error checks. Signed-off-by: Andreas Rheinhardt --- libavcodec/vp9.c | 24 +++++++++--------------- libavcodec/vp9dec.h | 3 +-- libavcodec/vp9shared.h | 2 +- 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c index c9cc81ec94..4acfca2b4f 100644 --- a/libavcodec/vp9.c +++ b/libavcodec/vp9.c @@ -100,7 +100,7 @@ static void vp9_tile_data_free(VP9TileData *td) static void vp9_frame_unref(AVCodecContext *avctx, VP9Frame *f) { ff_thread_release_ext_buffer(avctx, &f->tf); - av_buffer_unref(&f->extradata); + ff_refstruct_unref(&f->extradata); ff_refstruct_unref(&f->hwaccel_picture_private); f->segmentation_map = NULL; } @@ -116,8 +116,9 @@ static int vp9_frame_alloc(AVCodecContext *avctx, VP9Frame *f) sz = 64 * s->sb_cols * s->sb_rows; if (sz != s->frame_extradata_pool_size) { - av_buffer_pool_uninit(&s->frame_extradata_pool); - s->frame_extradata_pool = av_buffer_pool_init(sz * (1 + sizeof(VP9mvrefPair)), NULL); + ff_refstruct_pool_uninit(&s->frame_extradata_pool); + s->frame_extradata_pool = ff_refstruct_pool_alloc(sz * (1 + sizeof(VP9mvrefPair)), + FF_REFSTRUCT_POOL_FLAG_ZERO_EVERY_TIME); if (!s->frame_extradata_pool) { s->frame_extradata_pool_size = 0; ret = AVERROR(ENOMEM); @@ -125,15 +126,14 @@ static int vp9_frame_alloc(AVCodecContext *avctx, VP9Frame *f) } s->frame_extradata_pool_size = sz; } - f->extradata = av_buffer_pool_get(s->frame_extradata_pool); + f->extradata = ff_refstruct_pool_get(s->frame_extradata_pool); if (!f->extradata) { ret = AVERROR(ENOMEM); goto fail; } - memset(f->extradata->data, 0, f->extradata->size); - f->segmentation_map = f->extradata->data; - f->mv = (VP9mvrefPair *) (f->extradata->data + sz); + f->segmentation_map = f->extradata; + f->mv = (VP9mvrefPair *) ((char*)f->extradata + sz); ret = ff_hwaccel_frame_priv_alloc(avctx, &f->hwaccel_picture_private); if (ret < 0) @@ -154,9 +154,7 @@ static int vp9_frame_ref(AVCodecContext *avctx, VP9Frame *dst, VP9Frame *src) if (ret < 0) return ret; - dst->extradata = av_buffer_ref(src->extradata); - if (!dst->extradata) - goto fail; + dst->extradata = ff_refstruct_ref(src->extradata); dst->segmentation_map = src->segmentation_map; dst->mv = src->mv; @@ -166,10 +164,6 @@ static int vp9_frame_ref(AVCodecContext *avctx, VP9Frame *dst, VP9Frame *src) src->hwaccel_picture_private); return 0; - -fail: - vp9_frame_unref(avctx, dst); - return AVERROR(ENOMEM); } static int update_size(AVCodecContext *avctx, int w, int h) @@ -1245,7 +1239,7 @@ static av_cold int vp9_decode_free(AVCodecContext *avctx) vp9_frame_unref(avctx, &s->s.frames[i]); av_frame_free(&s->s.frames[i].tf.f); } - av_buffer_pool_uninit(&s->frame_extradata_pool); + ff_refstruct_pool_uninit(&s->frame_extradata_pool); for (i = 0; i < 8; i++) { ff_thread_release_ext_buffer(avctx, &s->s.refs[i]); av_frame_free(&s->s.refs[i].f); diff --git a/libavcodec/vp9dec.h b/libavcodec/vp9dec.h index de7aba0458..013aac49eb 100644 --- a/libavcodec/vp9dec.h +++ b/libavcodec/vp9dec.h @@ -28,7 +28,6 @@ #include #include -#include "libavutil/buffer.h" #include "libavutil/mem_internal.h" #include "libavutil/thread.h" #include "libavutil/internal.h" @@ -161,7 +160,7 @@ typedef struct VP9Context { uint8_t mvstep[3][2]; // frame specific buffer pools - AVBufferPool *frame_extradata_pool; + struct FFRefStructPool *frame_extradata_pool; int frame_extradata_pool_size; } VP9Context; diff --git a/libavcodec/vp9shared.h b/libavcodec/vp9shared.h index e54f23544e..b445a2a746 100644 --- a/libavcodec/vp9shared.h +++ b/libavcodec/vp9shared.h @@ -64,7 +64,7 @@ typedef struct VP9mvrefPair { typedef struct VP9Frame { ThreadFrame tf; - AVBufferRef *extradata; + void *extradata; ///< RefStruct reference uint8_t *segmentation_map; VP9mvrefPair *mv; int uses_2pass;