From patchwork Tue Sep 19 19:57:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43825 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a886:b0:149:dfde:5c0a with SMTP id ca6csp186470pzb; Tue, 19 Sep 2023 12:59:44 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHKm3SDQla8FPDeXmpouuZKgYZL17lp3Vfi5/zGFso1fPSUzr4wbY9ztgPKC6Ibqd/kqoH6 X-Received: by 2002:a05:6402:88d:b0:523:102f:3cdd with SMTP id e13-20020a056402088d00b00523102f3cddmr380409edy.19.1695153584533; Tue, 19 Sep 2023 12:59:44 -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 co17-20020a0564020c1100b00530cad389besi6283083edb.408.2023.09.19.12.59.44; Tue, 19 Sep 2023 12:59:44 -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=bacA6Yzw; 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 E54BA68C98A; Tue, 19 Sep 2023 22:57:59 +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-db8eur05olkn2057.outbound.protection.outlook.com [40.92.89.57]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CA5AB68C986 for ; Tue, 19 Sep 2023 22:57:58 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mYpVOAcglBo77YcaEq5OdyO6tdgijAIqtVzG51vFYaDZAFylwpPWtEprYWmJkBGZR+s12bgcTOSOUY6/NSnmHPFfAtyLl61iZzH4ycJcni/yTJkMSRVKzwXWSDiiAGEcfHywkL4+NH7j4b2ZcKqEQ23wV04bc0iKU/k8CEWKPSKp7ib8e2GmVSrJcuhuRZOo45P+7I5wINK40y5UZTO/F7kAp5TsWOBciGlEFJGkaS/5BRjZMucxxr79vL+18YYfo++gYf8n71tNO4vjKxSKtGYg7ROutkfotf8jNYq5nvNoaIUkf8u3wID8GPLKrzhgE7SdPDmvGtg+6vwb31Dr6Q== 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=L5eyfY14GKGLZC82WvBJv2zW51ELJun4nbzlYlO2moQ=; b=b0bltRZCCB6COd9t/9tNGAtV0yOrjDG3vFG++ST0Co1gXiyGzoMuYrOQMaa3YzIGxW0sl35ZqNiscSfXTq2mSmXIv+A4SWSwfwaoxKWNK9DIg0WtO/nRm6AGua3FKUNsEEHNRoMCBVpMluA675I80qG+ayKeYpOCsGT12GIv6A1zgEzV2MY+gF6+M7ECKGD25fBzUIZetpMaj9wHMcXKZtZ9TWrkOLaWD2nrVktGzt/DON2UKXGwPkb24f1orOgfpI2ZvQeYABUHfXoGek3tXaBAuS+AW9ZBpOZH69vmb1HQx2smRXB99vp08r9gvvbJtB2an3mKfxfRhWNf5OP4Bw== 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=L5eyfY14GKGLZC82WvBJv2zW51ELJun4nbzlYlO2moQ=; b=bacA6Yzw5zHpZVYCjbMd4o6IodEfvRtT+GZI4Wk/FSHM+GukPsgxcfC4QBwVHzrj7F9Pd2LxTiYinQ9d7j3TtSrJs4uykPQdxDZVdX73w4AHTNFxAZQboSC86sjXor1NHytbEpbk12hKbEeSAPPxAHBsHWuaU4aHp4GFN1rZjJ24fOAr0VXvnfQgdfB7OB3B5m1sC6M/r4L9z/01+y84YYoUJvqNEyPDAAFid0yqOPvijyl4FNfVOxP0XiRjcK1V0g0WY6o0zbgnFwIGDIdwbpW+4Wi0Zys9Mhpnef/kpkPXod5lUbsOZTV71rbEmUQtjzNmNxUMyMTfRFCmbDF3+w== 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:56 +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:56 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 19 Sep 2023 21:57:11 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [m3vm79vp0ksMMPwJcGkWFEBisVEPYiYM] 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-19-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: 111e0432-3850-42a1-de2a-08dbb94ab75c X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0LaVr+3PKDqB405LzoWmq5aOC86kAhkQ5zWi4oDKHDRICL7j/XXRhiZlr0GJ+Q97hwZ+La3Pi8m5Kyashmj+MUDUmziINPOLIsahGZ25Qm+byOOI2nezxevw6ksjBxniyoa7KuVfWrMVFCyfu7ePPkkUgjobd1+wwEvciJotecYHoYUXU5UbB7HREhDAeJuTTjw8EBJ0M3BqNcWyuvFBYjtQMXqr2/Q+NvKwMaJj2yW77tnb+EQ3KTVFoi5RzymnTPHxlLKb/FwfknO3yfC8E9gDU+WMBLyC0s8mYGIlYVSBNG+yo4gPVV97D/72DFvXSLgppg1j0B3bnvFi99R+SW23y2oKq8aYAfTXj1bCf2dqUKi7p3L4NgXn+hptu9r42RYo+QJZv9vWmUkPRR6lkxmM/nvqj/D8vIbHTJOf/kpgJHfUh2WdM85E0u5NXGXwqSjyQo/5+52gtJtAQjn1w9oBxQE2t70RXyTwwmfbqMox0WxS0rx4Awy7nTNPwFOCUc97DafmHOp2/PW5fk8JLX1vpGofU9IVfuTIM4WROv7/Nfcn1txaehfpouaVEu0G/UPo1tgGA0xmxeQ/UOu3S/hZRUvvq1z+u4JMOIEqYVB02Y7nYO1EsmC27z4llVXW X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2vUuZD+J2sfjyUaAI951AvbvDxgLdSuIhgswvgVvMuCLrMv66N0zQiCKGGSn5umLU6AA7VlnTZJloPyGShx+c85LfapQmbN0CZ6rt5rSFeoUyL+CpkVrJBgTHgh6nIX5wenguzd/vDn5QFZ4wg10MJ1J4Yzd8bKfDvVQKxiE9g8nuz1irjH+POuvNGTfar02jUOGZYmvQeiJOI6bnp7qQDS25bk4NUnTOYdWUb3QEBhBHqiDSG8aoksdpZGo6DvklIVaAmi4cEJL4pRrQ1FO47w0/cxRfj5D2aiM9RaX1fdDs9Zj27Br6Fdh4KhDujY0eOrSKpEbkFAsHTGnZ862jA3kMCPxfI8mIc5NUX0hhQEHOKPQe8TH9BJTK7QYsmqhxYnDb9GJNxT2m9U/uSKHYevzfSI4qbGezNgNoqs+XuIw3+K6g85bPTKIsdyRj5MKFh4E/2+bB3n78Hq0eqhqfBF3A/kteNt+v/wPj3PO3PEhrhVcJfzzgFckCaMMX4QaR4hzvb17HUTnf3Y2RgfFmO1n8caxe+/qSAxYvtNh6scFmK32XDJ08BbQeZvf7ZklHEdE98wcE3PZvq5eVGWyxFgiLC75HKnG6L13xbxL7+C3sAIJn43yZompOnFHdXpw4MtUK5m4MnCv+wYGCmydIcGW9Q93TtBJ9LR5sR6nnwfDeBmAam/EUkSAahm4eU570J4V6lMBXiDAENlA4z2eWocbT608UOf/0TIvGpoGEOWZsENoMdQvygB4zwTZRX6fnkvZBqFnlXFpFzEAaRcnuywvZFj2DP1bR9R8u8l1vufAsGeww/f8hrw+aZRIGrnaBc+fctv9zJ5yqQLoCNKDqg06ptUbjtZiOo1oq4TZJhG3DQL3zUFZjIMsfk3T0siKPbOZsMuRq80jbZeTHYZzl7JsUQFKM7V5xodnXFP3sgFmk8yaHYo/SKh7faAGB4hqfjTYxg/RSQtsqxa5rSwbCx44hrbV1UxCM0C7PPQS7vt+jfhydyG+JY2FzIsyOiP6YxzOY1Gufegu1WEwTGQToHHoXRQlC8MHuJsIjvxxXbyNY3UJO5eamSlyIy8bZmibVU875ETJMzNIZLM6K7ra3D2YAjDcSQQOy2ap4r1yLHuq30KuSiryLf+aVTzdHhIKYj/Bzye8hHGrcTCbuY1yfQltMbkRGWqZmry+gKxe7WGVeLQ/5jQDsjxrf5etuUNFamOUUiTRJ4uBe/eKJw+6nCBD4Mrc5k41fNLfB1dIqgAEL6TbabGpdgRYemE3Fg0S X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 111e0432-3850-42a1-de2a-08dbb94ab75c 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:56.0331 (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 19/42] avcodec/hevcdec: Use RefStruct-pool API instead of AVBufferPool API 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: ZoQ7exStMA53 It involves less allocations and therefore has the nice property that deriving a reference from a reference can't fail, simplifying hevc_ref_frame(). Signed-off-by: Andreas Rheinhardt --- libavcodec/hevc_refs.c | 16 ++++++---------- libavcodec/hevcdec.c | 25 ++++++------------------- libavcodec/hevcdec.h | 10 ++++------ 3 files changed, 16 insertions(+), 35 deletions(-) diff --git a/libavcodec/hevc_refs.c b/libavcodec/hevc_refs.c index ae464e8e6d..fa53b273c7 100644 --- a/libavcodec/hevc_refs.c +++ b/libavcodec/hevc_refs.c @@ -42,13 +42,11 @@ void ff_hevc_unref_frame(HEVCContext *s, HEVCFrame *frame, int flags) ff_thread_release_buffer(s->avctx, frame->frame_grain); frame->needs_fg = 0; - av_buffer_unref(&frame->tab_mvf_buf); - frame->tab_mvf = NULL; + ff_refstruct_unref(&frame->tab_mvf); ff_refstruct_unref(&frame->rpl); frame->nb_rpl_elems = 0; - av_buffer_unref(&frame->rpl_tab_buf); - frame->rpl_tab = NULL; + ff_refstruct_unref(&frame->rpl_tab); frame->refPicList = NULL; frame->collocated_ref = NULL; @@ -101,15 +99,13 @@ static HEVCFrame *alloc_frame(HEVCContext *s) goto fail; frame->nb_rpl_elems = s->pkt.nb_nals; - frame->tab_mvf_buf = av_buffer_pool_get(s->tab_mvf_pool); - if (!frame->tab_mvf_buf) + frame->tab_mvf = ff_refstruct_pool_get(s->tab_mvf_pool); + if (!frame->tab_mvf) goto fail; - frame->tab_mvf = (MvField *)frame->tab_mvf_buf->data; - frame->rpl_tab_buf = av_buffer_pool_get(s->rpl_tab_pool); - if (!frame->rpl_tab_buf) + frame->rpl_tab = ff_refstruct_pool_get(s->rpl_tab_pool); + if (!frame->rpl_tab) goto fail; - frame->rpl_tab = (RefPicListTab **)frame->rpl_tab_buf->data; frame->ctb_count = s->ps.sps->ctb_width * s->ps.sps->ctb_height; for (j = 0; j < frame->ctb_count; j++) frame->rpl_tab[j] = frame->rpl; diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 44561de821..23cc543f82 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -86,8 +86,8 @@ static void pic_arrays_free(HEVCContext *s) av_freep(&s->sh.size); av_freep(&s->sh.offset); - av_buffer_pool_uninit(&s->tab_mvf_pool); - av_buffer_pool_uninit(&s->rpl_tab_pool); + ff_refstruct_pool_uninit(&s->tab_mvf_pool); + ff_refstruct_pool_uninit(&s->rpl_tab_pool); } /* allocate arrays that depend on frame dimensions */ @@ -133,10 +133,8 @@ static int pic_arrays_init(HEVCContext *s, const HEVCSPS *sps) if (!s->horizontal_bs || !s->vertical_bs) goto fail; - s->tab_mvf_pool = av_buffer_pool_init(min_pu_size * sizeof(MvField), - av_buffer_allocz); - s->rpl_tab_pool = av_buffer_pool_init(ctb_count * sizeof(RefPicListTab), - av_buffer_allocz); + s->tab_mvf_pool = ff_refstruct_pool_alloc(min_pu_size * sizeof(MvField), 0); + s->rpl_tab_pool = ff_refstruct_pool_alloc(ctb_count * sizeof(RefPicListTab), 0); if (!s->tab_mvf_pool || !s->rpl_tab_pool) goto fail; @@ -3394,16 +3392,8 @@ static int hevc_ref_frame(HEVCContext *s, HEVCFrame *dst, HEVCFrame *src) dst->needs_fg = 1; } - dst->tab_mvf_buf = av_buffer_ref(src->tab_mvf_buf); - if (!dst->tab_mvf_buf) - goto fail; - dst->tab_mvf = src->tab_mvf; - - dst->rpl_tab_buf = av_buffer_ref(src->rpl_tab_buf); - if (!dst->rpl_tab_buf) - goto fail; - dst->rpl_tab = src->rpl_tab; - + dst->tab_mvf = ff_refstruct_ref(src->tab_mvf); + dst->rpl_tab = ff_refstruct_ref(src->rpl_tab); dst->rpl = ff_refstruct_ref(src->rpl); dst->nb_rpl_elems = src->nb_rpl_elems; @@ -3416,9 +3406,6 @@ static int hevc_ref_frame(HEVCContext *s, HEVCFrame *dst, HEVCFrame *src) src->hwaccel_picture_private); return 0; -fail: - ff_hevc_unref_frame(s, dst, ~0); - return AVERROR(ENOMEM); } static av_cold int hevc_decode_free(AVCodecContext *avctx) diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h index c13406f0a8..edf2f188cf 100644 --- a/libavcodec/hevcdec.h +++ b/libavcodec/hevcdec.h @@ -408,15 +408,13 @@ typedef struct HEVCFrame { AVFrame *frame_grain; ThreadFrame tf; int needs_fg; /* 1 if grain needs to be applied by the decoder */ - MvField *tab_mvf; + MvField *tab_mvf; ///< RefStruct reference RefPicList *refPicList; - RefPicListTab **rpl_tab; + RefPicListTab **rpl_tab; ///< RefStruct reference int ctb_count; int poc; struct HEVCFrame *collocated_ref; - AVBufferRef *tab_mvf_buf; - AVBufferRef *rpl_tab_buf; RefPicListTab *rpl; ///< RefStruct reference int nb_rpl_elems; @@ -517,8 +515,8 @@ typedef struct HEVCContext { HEVCSEI sei; struct AVMD5 *md5_ctx; - AVBufferPool *tab_mvf_pool; - AVBufferPool *rpl_tab_pool; + struct FFRefStructPool *tab_mvf_pool; + struct FFRefStructPool *rpl_tab_pool; ///< candidate references for the current frame RefPicList rps[5];