From patchwork Tue Sep 19 19:57:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43820 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a886:b0:149:dfde:5c0a with SMTP id ca6csp185795pzb; Tue, 19 Sep 2023 12:58:01 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFzLesMsvT1TLvBloLyjbMzuPko4fpWhtx1mSjaIAvu5gdBIqtrOBNDxadzsui8w6ytLZyH X-Received: by 2002:a17:906:cc5c:b0:9ad:ec25:825b with SMTP id mm28-20020a170906cc5c00b009adec25825bmr282022ejb.58.1695153481715; Tue, 19 Sep 2023 12:58:01 -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 u2-20020a1709064ac200b00991f598188csi11114807ejt.214.2023.09.19.12.58.01; Tue, 19 Sep 2023 12:58:01 -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=Ve+BK8Hx; 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 955CE68C89C; Tue, 19 Sep 2023 22:57:12 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04olkn2019.outbound.protection.outlook.com [40.92.75.19]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4F3FA68C89C for ; Tue, 19 Sep 2023 22:57:11 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EBY+lu4WFVUYlrMNrLjASkSOlLmSdawn/cSAFlasNKIy3ge2G6sndMt9sr1VRnEqCr+T05iFFYxWzAFEYoSeMQWussjDKj8OiaevHonXCZzCnFDvGztWLkeY4N0tbODfJweOGbPkRO1v4woSsMtYCfo5cr81OG0Wng+67VadmSF4MU+KcSteNLJhV6lxh3NNcTTBOn0RZBjaQ3JN9+U/Daa73axoc2t8MVHRRsXw4/emPr6E7DkA7vV8mzeu/TRGkFHb+ujIGI2muzdOFVZjArQRZiiZ41WuN5FA9cU6LReNR/ThacILgko0i9tKdYJvBxs3tgkTIcbrU7uHbx/P7g== 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=7eJ4Q7qvrrAO8NHMeO+Qe3D7WKOWGGWi4IsJdwvvxnA=; b=FrszWjBTl/brBizonIFo8I1IkBIer/AN3z6uRVTO/uxztwYrfHLuPW0xldynguktRYLOGvGFIsXvufbmHSVd5S6OY+NQehZ1yb3H6/CjWomDnNvavh6jxydFsuGVnHIqT32jQF/ng0/P8jbmkCcPPa+zQhtvS5akEydoAj7QM8x+HdVybB8Mn1sljcc9u5n+VSZMATAGCHAsnWk+CFpkargtnU3Armsm8rVd65EO1TZXM6Gxlvl4f2vX2rpsTyVSGROaWr4+b29JCxp0jevUbxa+vclv2zJF+12A4L8YhzzY52B1q05ItEaohZkd5T5WNdoXa+siMd3ZriulBpRrhA== 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=7eJ4Q7qvrrAO8NHMeO+Qe3D7WKOWGGWi4IsJdwvvxnA=; b=Ve+BK8HxWkNC0bY+ZHCMvb60QOlzOy8GjDvET6xXJh4G8faKWuMa2S+RjQlf48YzTsn7v8USXAD3al+wfzSqw2eN1c3sW57UMPAZZtWAavdcIhqwLiO8gBudN6Vs74eHb+j/bPHhOFxzFN6BEWNGg+o3Kuc/8+v0qkj8ev5jK4Mrsrsb6dwO0T83X6B96wDgYanqMDJNgdRpVUXqkbvESXRHPoBN9jCkXHBsugcjNj+zYLrMuQcbnsBdlrmVkK7ZTlvaCIRh2dsvx2JAF/1ECmHveyUnvVJFyhCkPFq9nsZqNf9z4n/E0tKvbYIklk7iKX60wvuumuFItrK2l46H5w== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AM8P250MB0215.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:326::22) 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:57:10 +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:57:10 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 19 Sep 2023 21:57:01 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [RVaSrwDEIscD8yJXQYBbasO4cvzQqwkV] 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-9-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AM8P250MB0215:EE_ X-MS-Office365-Filtering-Correlation-Id: adbbf567-469c-4280-bffe-08dbb94a9bf0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qUrB33u5KACMe1Mp1rCFCTUaBSwr3kHxONb0PbWssCmfJcfakfJgYkI1wViRrK74t2CPZ45n/X2NmZA9s/EMPMoKQCcUN+tQc41wiXa2WtyklY2MbG68BQRyWkWNJ8uIUtOw5ZVXQFSGTvKYUY92/J3y6JML9i6sBezw5sPAMAnk1allcSQcLkzRrbqQvTpxlp678cjA+jq4PeCccitPbzyqgmPPcrfVdfLK6jifXIijYjuKpoPm0+penKF7YRP/n4ntgichG/foPQCbn2QtRqDxWsSzQP+IN3tzoNtsHK+8J8Ed0MOe81NuF9bROKDTFLRMTzarfyqQPaASe40to1Wo9O/VmwjYPQmQInRtolm+wmvIf+KBL/2zh6c6mP817NaMg06Wp33KA8HrMyc2eIEDtgSLudMwmSG9poaOSskfTqGoKRdp531zjTgmblFXl4vzHWloEGmS8WhTXM1Ql1kEUtuPOmTR3UCN0JZvxVxz5oJp0fb7GypiF06xV34UiMhOGKuTCgPwH9GttgYIPqQPoTW/XqVOnTwP99knf9HMZeVh12BmR01942waEVROEgNgPTQy/Gl8Gz/ZgXVE5l6SYahhnFbj0RLyeY4iCJXxKNuh6iCMOTXf0qBPEx32 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XE7GkbtIIgas2UIMwHXT0gObswiq4Q4sDQJ3UxrR3Rkvg5mR2pv9ZqHcoU4e89Y0fImZ/g+CylHDtTuWMqWXdH5UucrVQb6GgWf296mMC2cAxnfDA8l6KEAgkUrRlDgX31dYMKSYDqZHC7VMV/JFemHWnzbBk19YrHWWEX+vWhjUyLEtmSgcSjAf9WJ1736hwgjnTxP4A24p0rWPfssaq6C0S9hhdvMeQh8T7qsWWIhQFm4b2oz0Qi85RqNshKT4SeMI8pdznHo+X2GQaZrNMp20JbMnH2VLiJVobxgLNK382X4YHMu1iHfhqQQKR69G7NBPYNlpz6z9oxqidd4I9BfEuJS1TTxgp5qHosirRIjCVYtpoVu9y8jHauI1yr68D9qLeHm8JlkHQjpBPak4Vu+A5SE9pBPvD6UQdZ57N4Vler1vuwZRlcYR+MmAMph0+8tDvpcHZMzXGRv98WC+p3pMN+d+qHxYMsXTLL4T4pUlSYuOtYlo2GWopeKqzZ3wvmmDeUt5jcJrfYk/rLef5emubbYWyKNggrOcNNmHUiPjgDoxw7YsJreoEhtHDbWWeyts1eoND3IKSJDRAATOVWmcNv66S/+UoOIfVGJ9DlxVmRkYMqk23mTa1JkLkRJMYlzqNdlJh+dQT7szVt5TeSkgAb23QzJr18+qg+5BY5pp3D8gyZfpPlKfusrBYcv2U2+twkiy/lgRT5g+y7VJqNrE1cn7DkDxElN0TxheyH0k4xqqZqtVeh13qa6Fi8Dd8THHxYU1VG56zGop5NK1ulp2TzmUuHEGRJb2QEVWzb56z4tj+SS1ejKBt0m62S9BXhYu144Bib7TmIImfzZ4DUJbN+PSKsBxNGaf2RStm6egAAG3856dU8KPe+oZcLWQqEDM1z7r1uquYCvhdyTsR04NqT+XELfgFrGio8IEsMnq2MrC8jxvr1/Zv2pF/4x14o1njFK6X1BktZDahR4VkI3c8Ay+CkVACCqJDNKicxASG4j+TjzD8CTOWUNbKDzzgFMMjOHdBq5RElFbQ+T23GzpewMksLcmgZ0UEiBizGlXA4OJTIhLn0tWH7Yr6yxBd+kHP1Ck0yxNPkA8w5K2cHaFfiFrNOAsNEYgJsYtwn+EvnvM4PQQwa5z7BxkQUS/CMfyj7w7lhtCoTiIwHz8CuwhUe8Fsyk7gel7N+0M2n9UhIp8khxZnFK/oL5/kKkCC678j0LbIuizJygEnCGZlU3x36l+X2hkbVE+2ZLlGAd11+qWKtjq/LeDSWeogzzD X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: adbbf567-469c-4280-bffe-08dbb94a9bf0 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:57:10.0419 (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: AM8P250MB0215 Subject: [FFmpeg-devel] [PATCH 09/42] avcodec/refstruct: Allow checking for exclusive ownership 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: z4Lku+VcmRip This is the analog of av_buffer_is_writable(); it will be used in the next commit. Signed-off-by: Andreas Rheinhardt --- libavcodec/refstruct.c | 14 ++++++++++++++ libavcodec/refstruct.h | 9 +++++++++ 2 files changed, 23 insertions(+) diff --git a/libavcodec/refstruct.c b/libavcodec/refstruct.c index 917cf6b7ac..604938922a 100644 --- a/libavcodec/refstruct.c +++ b/libavcodec/refstruct.c @@ -48,6 +48,11 @@ static RefCount *get_refcount(void *obj) return (RefCount*)((char*)obj - REFCOUNT_OFFSET); } +static const RefCount *cget_refcount(const void *data) +{ + return (const RefCount*)((const char*)data - REFCOUNT_OFFSET); +} + static void *get_userdata(void *buf) { return (char*)buf + REFCOUNT_OFFSET; @@ -137,3 +142,12 @@ void ff_refstruct_replace(void *dstp, const void *src) memcpy(dstp, &dst, sizeof(dst)); } } + +int ff_refstruct_exclusive(const void *data) +{ + const RefCount *ref = cget_refcount(data); + /* Casting const away here is safe, because it is a load. + * It is necessary because atomic_load_explicit() does not + * accept const atomics in C11 (see also N1807). */ + return atomic_load_explicit((atomic_uintptr_t*)&ref->refcount, memory_order_acquire) == 1; +} diff --git a/libavcodec/refstruct.h b/libavcodec/refstruct.h index 0086717c17..ee6936d77a 100644 --- a/libavcodec/refstruct.h +++ b/libavcodec/refstruct.h @@ -142,4 +142,13 @@ const void *ff_refstruct_ref_c(const void *obj); */ void ff_refstruct_replace(void *dstp, const void *src); +/** + * Check whether the reference count of an object managed + * via this API is 1. + * + * @param obj A pointer to an object managed via this API. + * @return 1 if the reference count of obj is 1; 0 otherwise. + */ +int ff_refstruct_exclusive(const void *obj); + #endif /* AVCODEC_REFSTRUCT_H */