From patchwork Thu Aug 4 17:36:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 37132 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:1649:b0:8b:613a:194d with SMTP id no9csp536515pzb; Thu, 4 Aug 2022 10:37:23 -0700 (PDT) X-Google-Smtp-Source: AA6agR57u+NafBsuJu+9OHbXujXNQIm/vNQ21cVaxC9BwGJmdqRQAxPZfQrRWRM/IaER+EBn55nk X-Received: by 2002:a05:6402:26d0:b0:43d:6f63:e6b with SMTP id x16-20020a05640226d000b0043d6f630e6bmr3187196edd.61.1659634642982; Thu, 04 Aug 2022 10:37:22 -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 dc24-20020a170906c7d800b00730a1d46e98si1266724ejb.734.2022.08.04.10.37.22; Thu, 04 Aug 2022 10:37:22 -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=MF7QX1Iq; 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 C1AC168B9FF; Thu, 4 Aug 2022 20:37:19 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-oln040092073091.outbound.protection.outlook.com [40.92.73.91]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6045F68B93A for ; Thu, 4 Aug 2022 20:37:13 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=epkGc+Vwf73RcCRVTI/RMXYmxj6U+VzByqANPzj9vjYbWOZ8+lZlV3ulyuaaSNAdAJkLbRgjsvf0Q2DBJpE7jaMRwh8wX7ek95LcYth8U916EB2b3cOW8mrUFf2BdcgQMasFRKRc6LkK/V46DpvJhtMnsMUSmoSmLju1lVN0oHloIMzBmXELHiJ5Gxvz0E4t90o8Q/dVsE283uE61YSfz5YW718W/Xfx1BOOCquUKJe9oXb08LiT+mXqKwhc9DVRIrCEzoJC9eYRxioNMSqRbR053bb0WD6AyJU2J8w5/riX9aXNwsiL8lXpPR8U4W+f+k+aUXrKkJLdEX5uZKW9bw== 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=8q4ajDAC8iYkUhh6daCwPm2OPboOm84erI5kXAkc1Ag=; b=SIxwse1ZR/xtDloptfp81lfMpVsZ/dzlH31+NWTEdXggwC4dcRvERruiHV1Gyi0WqwAWAV4UxxLjExfNFLYnHSF2kNXPu/gw++PgMSn5hfk6ak13BK7EoZR6sf5fEX9wtceK4ORy8+C0VlR1kLF9eUDkZncHsFb8W4q0h7uFMiVrQfz8K5elJfZs6Bt7w2MBRpK+iKWSm0lhIiTwXH2rQ2LAf5Ux7b1z665cSUF6ckqguJefrYISi5aMJ3jkD/iK1KOhy/c+8PZz7jqmxiQvyxU/1T9oyddR9Dc2gaVw3JC4iP9Mu4Gz8akxuBB/R+X1gm7jS9nCxsw14XyGWqtjIg== 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=8q4ajDAC8iYkUhh6daCwPm2OPboOm84erI5kXAkc1Ag=; b=MF7QX1IqiwYUDPpQf9fp4dq9HplHGbJYnMbjA8576lkYwD4t9XumM1u2jQOQXlT9iISaPJ3ZuHF2tcyfC+UVb3voeJpVMqUHYQw7oY4E2aVRPyr5q8iABREjv97ZvOFK0jdq+mxAn6mrbyIdu7sqpfvNvcMvc0fjv1jRbx1ECJvYKm0OLDptL5lbThOI0ypI/y1N2sEmU74iEK8RYdB+ZcT+s0uCqjvNVAFllVkivPzCMJN5BjAF6PvkjhPkdpB6XrOeCcYdkdkUmW97HWCllPqemDU77dpnk7aH9uG4eBXMgNTjwN3AiutWdUM1tvcZsn4b/ADocl452OgWrLEe8A== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by DB8PR01MB6503.eurprd01.prod.exchangelabs.com (2603:10a6:10:154::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.14; Thu, 4 Aug 2022 17:37:11 +0000 Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::210e:b627:bcc9:8c46]) by DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::210e:b627:bcc9:8c46%11]) with mapi id 15.20.5482.016; Thu, 4 Aug 2022 17:37:11 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Aug 2022 19:36:48 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [pvV/PpSkYmVXYWGgjkp4JEUbZrIYKQNn] X-ClientProxiedBy: AM5PR0201CA0018.eurprd02.prod.outlook.com (2603:10a6:203:3d::28) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <20220804173655.1561196-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e7c571a9-af3e-4621-1102-08da763ff5f3 X-MS-Exchange-SLBlob-MailProps: q+fD6XS3/UIOfcU/WhyXx+8uuhyM+VSe6jBWeUqBmXwUDux/MB01mGcZGUSyKK8H5MkUY8YvWnFwlWqYUlI2uo7w2w3JS3/5jSW3Znc4STR+v0DzPyGEXF4Ms5Nr+t4oVF0qv/Aqq4QjHUPajoF44iFqOiRRjh2vRrtVZnu4lUpaDGUp2d3v1yE15OAUdmBDwNDyLHbyph4FsXP81vZp539G55k6zkdWEj1XTlmEkU9l7UhRyo4y9cDcQoLZ7S3qfonyPO7mTC6eWkdNUcbHXinOX253jhqClXKQUzW8bFB+cVCvHw8fB8hYODbwdomngL8n0rxy32c0si5Akrp6RYdSkJFuNyIRP1qWw1CjDgUfnaWA0DTKuRUzh3nTG0WVp3QdY4UumSQyA9qCxizXovh4aDGNuxZhLn+nAF7WUxa2UeI2bznqWdwWUAkCzFsNLMRVp1pYOvb6LWdPYV5f/GAl0ciCBxNu/rXmXprzCDorc4TcLSYKaWUMdSIYEJkP3qveuCDOoi0vRuFBnNw5x4ZMhSJgDyryNbxKc3dMT54Bh40sWPbyTYw4qbplWIoULqOWP23GTPVv2uMEUxtR5M/F31R9SfWjA+L4bAO4t1sAZQcOJpexgqKp/HCm9N4r4TsYjZl5gEjcTyyaNkQdPs7gTY1vxNnDeOx/WbSeO0T45bNYx5GnOt7XP72EYy9lkSPmF+kLG6RVUP/gN8TLzg== X-MS-TrafficTypeDiagnostic: DB8PR01MB6503:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ErzC9ZhD34YzQkqpiM/dwV9jtriF45hTurXFDJXCet1I1wkf+y9c8V+pDDEJ1CDJjHxSTHypirZMDxUobhC1jsVsgVdJiuXFQ0NZ0MdKgl06z/wYdpT03hx9AwErSS/j94biTdxrq1ekgXX899P3PvB9VfXa8k7KdjmJuUSqslo/hoEk6VXwuipMGDdBITG/6CNaf0ZgQ792Nd5THQ+MXRqGz7CrOacODKbTClnGONx2lFsBbpG4yiJ63J8AV7ty+v8gg8d6rsuKLoc719qH2FyIxbXem/6Ph5d//40Vc1zTPgxQhDfFSziORYBoMFD79Vi1Ymqp64C6sAfQXU+UDDemzlOKhlko+xDfh2Tt6JQIN9USDjyYA5Iiuyk+26up2Q6WJuJCutpVzqXIu4/7klTjHpzyKxOGiV3Atb+0p60D3a7FdH+CF49MTqSBgu6npcLXweelwqrJpEJCk8e4De7aQpZuexGMAZ90s/q3a/rFMfrSqDMg3RfpwuiqQBmCUswQ/WRT9cAfVLCCg4w46c2VfRSBezQ3f9YtHIZLybq/ybBnZL6tFGwbfz7oQaUxQZnmwDXcDB3W56VBurhi13227z9g7ZkBl2J20C9ZM7qxRw10hZMb7QrZHrjtFqBbADaQihi7fbgxq7DLEpUZFA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: FmW5fhty2bjugsqM3PKXDGS0nwVzg0Lcv6OYmfBao1yY92wnYOcXJNkSMjU2lOZvlenG/GRiaV3OpODTmys4fXnD/Kgpt85Tq0pTcn0lwsrRuw71PDa3MnYe7xBw6+J+7Ke3V25IN+v8+uUQHKwqvx9Dp7geDxCmvmvOgTjWNK+TA3gzVHVUkC7ZkBUdoOi9ihMUy4bnGRFhDjZbGnBkeiQDpGZb/CjQaRzQd9OhcgU2kWnETtJJ9NvzBOGF9e/L3OSdCfTgkWkYBjZ5unRWwQmmE29wj0DZREc96Ow5bcUbPFXvuTV/PbfWXJFd4srLK6uPyuTYLSnIlp0dXoIz14D9j0Bfhz7SkirOckQM/WI+w2oXTyHHx9txfduENaQQ3Yh5m/LECwsdJZpJHynlI7FAL5RZUVEc8QWXv6g1H79oywn1q9MTVja+8l3mlBB9k8qUHLHr70heaH6vnIrFFI+wPjOm6Wq9NQhdx1sapyzIzQbA5/xwW6iG6Ay/xT05ivdoaSzDOdU3xaEPlwMtRTwHayOPkLA61RNVRBeIRUtzN4Sw0yVDUhzT6vdPUl7dSlIpKkxDMAD+S6jvEKX+/H4qBjPeqrW6lqozSbxmUvNz6iSGiaO7/fSHU6GaaClmQdowaCAYIFSWM0uTXWtCMFUkr2J6gohY4XcMzkr1W5O+nwcNQSLTibIDArx/1f8VrMRPhIwCydQqqhHU5Zz0oDffi29KQ2vXjkJjxZWoLyjlGJzkho4maXVdvI8duV+1OLkR/AVkBAZOjGVfZpo5iwS4JsnfT1CgpYq06tRz/8ANoCibTAIbHnBWAC8d8mk5gKTxLzHdk2duOYGjmbFYpn1X76VZUDjBh+19K3lPqqX2K/1uy3Ga7IN98lb12PHA7GdzkvsPvMhgfJD6c6hYoeeVOdNF+IToR0ST9TVIzaxTs5GER0ZceLSmfqUs5OI1StWdDYwurixXwIAt1AcFXX1Hi97bJi9aLyxYgQ88/jJqrxKuwXqaJ7HD9h4rWFQN70oHBZCzb1CMIlk9l76fc/+8HbYN0mqdgmBIvNi99CKaPjjBahm+s2Hlg6dXqXEWij+nM+lJukMQtQJcFDWzLpb1QLWjrm8uSUJViqUdFWcDVaCv7Wt90jrKDFIie26CYtWBkcqVHRs13Fndwv7A4oR6j1zBIka6YMcvejTt7Z6DZUOuz5BwGIEchVCPNxq9mTw6EygGYbAfNubRUwnlm0zyqMtB/qcdANuFSBkV5qYhotPUCL58ByfoA+EZ49MYaeWeGZuHXLVb3Suo5gyrkDc2Uisbw+P8VBq2nMoAtRo= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e7c571a9-af3e-4621-1102-08da763ff5f3 X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Aug 2022 17:37:11.0367 (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: DB8PR01MB6503 Subject: [FFmpeg-devel] [PATCH 2/9] avcodec/cbs: Avoid code duplication for making unit refcounted/writable 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: cuvSridQ4M/w Signed-off-by: Andreas Rheinhardt --- libavcodec/cbs.c | 74 ++++++++++++++++-------------------------------- 1 file changed, 25 insertions(+), 49 deletions(-) diff --git a/libavcodec/cbs.c b/libavcodec/cbs.c index 8c0a5b5719..f715e463a1 100644 --- a/libavcodec/cbs.c +++ b/libavcodec/cbs.c @@ -921,9 +921,9 @@ int ff_cbs_alloc_unit_content2(CodedBitstreamContext *ctx, return 0; } -static int cbs_clone_unit_content(AVBufferRef **clone_ref, - CodedBitstreamUnit *unit, - const CodedBitstreamUnitTypeDescriptor *desc) +static int cbs_clone_internal_refs_unit_content(AVBufferRef **clone_ref, + const CodedBitstreamUnit *unit, + const CodedBitstreamUnitTypeDescriptor *desc) { uint8_t *src, *copy; uint8_t **src_ptr, **copy_ptr; @@ -987,19 +987,18 @@ fail: return err; } -int ff_cbs_make_unit_refcounted(CodedBitstreamContext *ctx, - CodedBitstreamUnit *unit) +/* + * On success, unit->content and unit->content_ref are updated with + * the new content; unit is untouched on failure. + * Any old content_ref is simply overwritten and not freed. + */ +static int cbs_clone_unit_content(CodedBitstreamContext *ctx, + CodedBitstreamUnit *unit) { const CodedBitstreamUnitTypeDescriptor *desc; AVBufferRef *ref; int err; - av_assert0(unit->content); - if (unit->content_ref) { - // Already refcounted, nothing to do. - return 0; - } - desc = cbs_find_unit_type_desc(ctx, unit); if (!desc) return AVERROR(ENOSYS); @@ -1014,7 +1013,7 @@ int ff_cbs_make_unit_refcounted(CodedBitstreamContext *ctx, break; case CBS_CONTENT_TYPE_INTERNAL_REFS: - err = cbs_clone_unit_content(&ref, unit, desc); + err = cbs_clone_internal_refs_unit_content(&ref, unit, desc); break; case CBS_CONTENT_TYPE_COMPLEX: @@ -1035,51 +1034,28 @@ int ff_cbs_make_unit_refcounted(CodedBitstreamContext *ctx, return 0; } +int ff_cbs_make_unit_refcounted(CodedBitstreamContext *ctx, + CodedBitstreamUnit *unit) +{ + av_assert0(unit->content); + if (unit->content_ref) + return 0; + return cbs_clone_unit_content(ctx, unit); +} + int ff_cbs_make_unit_writable(CodedBitstreamContext *ctx, CodedBitstreamUnit *unit) { - const CodedBitstreamUnitTypeDescriptor *desc; - AVBufferRef *ref; + AVBufferRef *ref = unit->content_ref; int err; - // This can only be applied to refcounted units. - err = ff_cbs_make_unit_refcounted(ctx, unit); - if (err < 0) - return err; - av_assert0(unit->content && unit->content_ref); - - if (av_buffer_is_writable(unit->content_ref)) + av_assert0(unit->content); + if (ref && av_buffer_is_writable(ref)) return 0; - desc = cbs_find_unit_type_desc(ctx, unit); - if (!desc) - return AVERROR(ENOSYS); - - switch (desc->content_type) { - case CBS_CONTENT_TYPE_POD: - err = av_buffer_make_writable(&unit->content_ref); - break; - - case CBS_CONTENT_TYPE_INTERNAL_REFS: - err = cbs_clone_unit_content(&ref, unit, desc); - break; - - case CBS_CONTENT_TYPE_COMPLEX: - if (!desc->content_clone) - return AVERROR_PATCHWELCOME; - err = desc->content_clone(&ref, unit); - break; - - default: - av_assert0(0 && "Invalid content type."); - } + err = cbs_clone_unit_content(ctx, unit); if (err < 0) return err; - - if (desc->content_type != CBS_CONTENT_TYPE_POD) { - av_buffer_unref(&unit->content_ref); - unit->content_ref = ref; - } - unit->content = unit->content_ref->data; + av_buffer_unref(&ref); return 0; }