From patchwork Tue Sep 19 19:56:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43817 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a886:b0:149:dfde:5c0a with SMTP id ca6csp185590pzb; Tue, 19 Sep 2023 12:57:34 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEYKfHe7H6AvRVprPoYFEwOiQHRjt6F3gugmvpos5cZcOKqaRHiXPZT2lVv29guFk4m9q97 X-Received: by 2002:a17:906:56:b0:99c:f47a:2354 with SMTP id 22-20020a170906005600b0099cf47a2354mr274731ejg.70.1695153454133; Tue, 19 Sep 2023 12:57:34 -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 l13-20020a170906078d00b0099bbcf85f18si10471943ejc.86.2023.09.19.12.57.31; Tue, 19 Sep 2023 12:57:34 -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=j8HIXaFt; 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 55E2068C943; Tue, 19 Sep 2023 22:56:58 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2072.outbound.protection.outlook.com [40.92.89.72]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 61BAD68C7DD for ; Tue, 19 Sep 2023 22:56:57 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NbRSZIreaguFVgmgtEQSS77iJ9Ld/24xG3HzEksZys77IsLJHLmu14ck+9ssqdDiNF/IrLMVSEBHNNlzoIdgWgU0mB7SgZzY83mbSICODCzOJEpo1jkT6N+VBbzlnsWFzhU5/y+f2mdqGPBSzXn6DopoPgv2JVZ6r9DfZutRXHv9MmMV3jDtER0B91eGVMhfXXSwhRzESMXIqWr0YWVT2wOdDVVoJpXrnx3tMcNwTinhHPpCcPzLKJSZvUSXOf3D8mI5FMnvOjp7E1B89WUK7/GcpqiThPoOjaKKSX4/RGb3GFTUCtGEr0baOcDXyaJwk1AvrIGpaRwUQWHddICA2g== 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=O2Mg3l/fg7m7pIZwrUsdWJOYEPpTZXfxdmshI8Iubk4=; b=Ao2FRWQy1/iAObg0ebs/YwIfs8cfSX7P1hbGXBSew/5RHgG6l5hc0/UDYGvSZKa95ybaFS68EMkRbgGeK6OiwaRckIbuqe7gQ4Vbe7V3X+UXyPIw6uCPHIFg0Jq94bPboGq07vt73N8s482jS+WcIRYvikJT8o/sp71BO/Pk7JGUmpWGrS87RtpxAD/WUEpoX3UIkZ11NN8OlNzY8lAAxyw77kGvg1C1D34QnaFiLrSv+zi37PyfAlOZVU/Si2btH+uw4EYQUYKL5f4/cnQagogJiXRTF3YIOhSBQQMJiZ4WJ6ifaf6Mbb/Eqj8Ju7ubFSZVu50q/dstNf64dE+C0g== 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=O2Mg3l/fg7m7pIZwrUsdWJOYEPpTZXfxdmshI8Iubk4=; b=j8HIXaFtMV1qDAJ88M8Z7Qfq88Mjot3x/ogloY867GEL34+IzVAJL5nUbK7QCHlOaLBd5ei73vyIfpZ6/nny2a7braWDw9JNW7wMIS1VQsst88cjg/LB7JhuNBmSR/EcbnUJ9KiyP2mlehMzpecLNlN9qqMpxo1Ajp8wDbLNuXMZGCZhue8hSgTQ03QGisiFG99VbjrA6EqAy/wDY/XdhvJC+6dcFnC50+2X1Nag9o3PxJAPkPl6aonB0s/HK3uX65rMnS9q53fK7ARTCfxQ/wvRfXlO35XrAha7giZAJjEjXsiscEme9ZwvRK32knRpczdmkpxuQ1tuaCTSi7lH+A== 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:56:55 +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:56:55 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 19 Sep 2023 21:56:58 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [RoosF64LFvWpN30ln/4Z4sgZICQvI1GL] 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-6-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: 7f487e81-3c22-4728-4196-08dbb94a934a X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3Ln7HW9/IjzLnKQXhh4KPqb6NT+ugV6TVq3XdvvUY/dXBM19Mlhd/phgpV4MjcBI96Sp5AC689c3bZqYL/4oGWFrLixnXtHK7GC1jVxb817eY26niK6iffluw9YtVemVwjDE+EBbN58phMDv9S6SWz+oKvpGJLTxJ9z0pOVV1PtrEPVaiUvrlq7OicB+rrWqsNCr3VQsTjnU5NGhWYoubac9d12PWrJ+2feZCFRBVkLyG4aIblzh/uvFTr/0BFOa4QfRbAFnzY1HlY3ApzeJLMNLhpt6Qj0hFvVa1hJ/m1GC58PVTSZM+uoeGZhIPFlCorSU4h9pDQrkf75oC7O3MGPlnReH2UBGNIpEbwblDx41cDeB4O/TZNq1eFmwU5b928DVozOlKKmpsMpiNQt/lw7+tzJnseb3y5BwkVbeBTnprmoMXkjkhu3arJnl4Tlo0mm7B7ScIbJ7vkNE4hKE9gPi2ZjZhPnHDsgWhhHxoM8TdBm3P7Jxoy0iEcXOkfZu+HjbS7Ms67DgPWA9xshUiMzJwh6aN7wyMB9u9aOex+DuEUlrVcDwlwuvTbRyfEdzHVEuQNJhZ2I8UZoMkSLkJJKHq0h+VTDySufSbt8WV0ri3cRSND1ydg/aeN5BnvQx X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Du5h+7SAigSHY5iF1ETMzu5St3srAChNW7PbdVMtUhaEVjq1pF8efHiK8EUNtanYXQtduxFY+WvUNj1HZZ8Bojkgo/PnvjM4h3S23XlC0gvYCIENIlI5FfjNIkifOH56F7qbhmthvtK3JacWJd3YECV0bvniYpGul9rEj6ApJFJPbpXDFplTKXdvOJOSjA/IwH81VzA2sULnaVWJPCrIvMNRxF+8jOqQ4fuY2lP6q/J1GZkpstAXVtQwF/GjxMLRRJCp+XUgRAlhT4N4tPsxp83ztSMJGQx+vfhiomVasYkuL+jK9KfVKzAW2zd0Gh2UNg380o6sL4nW7+L3CxUgTKhKcFyo9uEurK79i04wD6gnsbe65n4hjIR2w6foG6kDlhupn4Vl10EUbxSe5N29uBTli0K520IBbtt3Ws+XGfUKwKtRnyRztXAZKRXV0uWI/WE1sn2+RDA9QuDCQoU+N59AMxU0AS20MbFTIIWRBUFjAl3kPdGQnzFzcjUmcMNq3sbCs5HEOvILIohmjYH3TcK4pYxlIsH5sRnyGBzrxPb6AsQQmGvl+I+m7S7QTEPOYE3LHSy2KX9llGlmOEAKLskSYD2XzQG5pd7ZmzHqq1ZJbt4Oydf9BCj4Hvj/vbrex3PjcG/o7SleNCNkKvCchyn2xtX+1BzgJAMeiNnWZkSW1dqXRWOQfKbc4A8TJoOsv+xyvtDbwmEJwEsNMBCEiw1NUTQV8uku7eONRmWToJbma+iNjkUtgxHhRzPdeBkvZ7+C5MCybKl4Xj5S/rIKBNMisISif++joKFCnpPby4IhMXM1g2eoaTfxHtjyQVxrCs7b4OyaWbQIT392H9m7sWib91RQ3DcrWKNo+glLnmW0Inj6EYW9NUieFnuFaSGBQKt6Ov+Vos5P+6oChsdL12e3MIxBxWx0iublRY/m4ZQs49uOhMuKU5yAWOhEr+QOxdKX1bQ1KYrFx/dRb2GdsEnZPlUREEqCIPvJ/RaUD/PEoUePUWArbLEgCRghz+KrZGmt+cimW9HKRxbdz/D3o/WyE0wOHaO0cV6Ub2C0iHwKts5lpK6aII+qVzoY5inU3TP5ASYbuJM5MIVbcwb5zzCf2k1NJX1z6dy0hewM8Yv9itrrySRDrb5EEk/0gJ4n1EFKMN24I1XsGDswy+fA3OlQwkUcFaVFeC0++x6gI06+9yHBELoexlAdZPCE4D6DqkzEPQUi9HI3NLV6arcvOHTp5Ryg7ePpCf10ChS4JhJ22fdi64hYQoDV3x99L1Y9 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7f487e81-3c22-4728-4196-08dbb94a934a 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:56:55.5210 (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 06/42] avcodec/vp8: Use RefStruct API for seg_map 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: +DhdF7WIX1Kf Avoids allocations and error checks when syncing the buffers. Also avoids indirections. Signed-off-by: Andreas Rheinhardt --- libavcodec/vp8.c | 23 +++++++++-------------- libavcodec/vp8.h | 2 +- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c index 64b1c7f60e..db325dc90b 100644 --- a/libavcodec/vp8.c +++ b/libavcodec/vp8.c @@ -34,6 +34,7 @@ #include "hwaccel_internal.h" #include "hwconfig.h" #include "mathops.h" +#include "refstruct.h" #include "thread.h" #include "threadframe.h" #include "vp8.h" @@ -105,10 +106,8 @@ static int vp8_alloc_frame(VP8Context *s, VP8Frame *f, int ref) if ((ret = ff_thread_get_ext_buffer(s->avctx, &f->tf, ref ? AV_GET_BUFFER_FLAG_REF : 0)) < 0) return ret; - if (!(f->seg_map = av_buffer_allocz(s->mb_width * s->mb_height))) { - ret = AVERROR(ENOMEM); + if (!(f->seg_map = ff_refstruct_allocz(s->mb_width * s->mb_height))) goto fail; - } ret = ff_hwaccel_frame_priv_alloc(s->avctx, &f->hwaccel_picture_private, &f->hwaccel_priv_buf); if (ret < 0) @@ -117,14 +116,14 @@ static int vp8_alloc_frame(VP8Context *s, VP8Frame *f, int ref) return 0; fail: - av_buffer_unref(&f->seg_map); + ff_refstruct_unref(&f->seg_map); ff_thread_release_ext_buffer(s->avctx, &f->tf); return ret; } static void vp8_release_frame(VP8Context *s, VP8Frame *f) { - av_buffer_unref(&f->seg_map); + ff_refstruct_unref(&f->seg_map); av_buffer_unref(&f->hwaccel_priv_buf); f->hwaccel_picture_private = NULL; ff_thread_release_ext_buffer(s->avctx, &f->tf); @@ -139,11 +138,7 @@ static int vp8_ref_frame(VP8Context *s, VP8Frame *dst, const VP8Frame *src) if ((ret = ff_thread_ref_frame(&dst->tf, &src->tf)) < 0) return ret; - if (src->seg_map && - !(dst->seg_map = av_buffer_ref(src->seg_map))) { - vp8_release_frame(s, dst); - return AVERROR(ENOMEM); - } + ff_refstruct_replace(&dst->seg_map, src->seg_map); if (src->hwaccel_picture_private) { dst->hwaccel_priv_buf = av_buffer_ref(src->hwaccel_priv_buf); if (!dst->hwaccel_priv_buf) @@ -2334,9 +2329,9 @@ int vp78_decode_mv_mb_modes(AVCodecContext *avctx, VP8Frame *curframe, if (mb_y == 0) AV_WN32A((mb - s->mb_width - 1)->intra4x4_pred_mode_top, DC_PRED * 0x01010101); - decode_mb_mode(s, &s->mv_bounds, mb, mb_x, mb_y, curframe->seg_map->data + mb_xy, + decode_mb_mode(s, &s->mv_bounds, mb, mb_x, mb_y, curframe->seg_map + mb_xy, prev_frame && prev_frame->seg_map ? - prev_frame->seg_map->data + mb_xy : NULL, 1, is_vp7); + prev_frame->seg_map + mb_xy : NULL, 1, is_vp7); s->mv_bounds.mv_min.x -= 64; s->mv_bounds.mv_max.x -= 64; } @@ -2467,9 +2462,9 @@ static av_always_inline int decode_mb_row_no_filter(AVCodecContext *avctx, void dst[2] - dst[1], 2); if (!s->mb_layout) - decode_mb_mode(s, &td->mv_bounds, mb, mb_x, mb_y, curframe->seg_map->data + mb_xy, + decode_mb_mode(s, &td->mv_bounds, mb, mb_x, mb_y, curframe->seg_map + mb_xy, prev_frame && prev_frame->seg_map ? - prev_frame->seg_map->data + mb_xy : NULL, 0, is_vp7); + prev_frame->seg_map + mb_xy : NULL, 0, is_vp7); prefetch_motion(s, mb, mb_x, mb_y, mb_xy, VP8_FRAME_PREVIOUS); diff --git a/libavcodec/vp8.h b/libavcodec/vp8.h index 6f29156b53..cb752d4498 100644 --- a/libavcodec/vp8.h +++ b/libavcodec/vp8.h @@ -152,7 +152,7 @@ typedef struct VP8ThreadData { typedef struct VP8Frame { ThreadFrame tf; - AVBufferRef *seg_map; + uint8_t *seg_map; ///< RefStruct reference AVBufferRef *hwaccel_priv_buf; void *hwaccel_picture_private;