From patchwork Thu Jun 30 22:29:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36571 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp621301pzh; Thu, 30 Jun 2022 15:32:27 -0700 (PDT) X-Google-Smtp-Source: AGRyM1tmlgbuiBMXb0Uj4q1Cff1HPWWs0c/FkPUImYpiuTHM1vdW1GTevwR/54NM137K+x/3pYXZ X-Received: by 2002:a17:907:d17:b0:726:a3be:bba4 with SMTP id gn23-20020a1709070d1700b00726a3bebba4mr11063180ejc.584.1656628347474; Thu, 30 Jun 2022 15:32:27 -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 b15-20020a056402278f00b00435781299b4si7741866ede.357.2022.06.30.15.32.27; Thu, 30 Jun 2022 15:32:27 -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=WT8elmSW; 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 A543868B812; Fri, 1 Jul 2022 01:30:57 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-oln040092065087.outbound.protection.outlook.com [40.92.65.87]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EA75968B467 for ; Fri, 1 Jul 2022 01:30:55 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DLZ91g+8qPxKGqbMaAAhsYXEerZO/rWjOuE4GVbrbppHTaGh17sON8w2ZfYET9jYQrrRZKc9+xdoXr6zKMlzWv0ZbscqihpGtgdIcKUirHAatufemN3JOW6xRmGog1WI8hZSLuBkRpMf0VhPWDuDYcIYxvCQTqYaOdueMFTP3YJH5PPXIrfifEiu7O1dscrN61RnVQ1WObn6XLjFyszj4tBe0+7elapCIe2YxF7JrGSuGZxDouZ6N0TRuMz1dYSQvz6Fei4+6SYhebnLea8bog6kfiHShh9k3uMoFzXai93zOQ4BHVHiLJg2jENMjNWuemVSSsRMbPElo932oWrG0g== 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=PjiRXkbRjkNANyiTKJ8kXTZpJjyua1yGJ7SWalvq2ZQ=; b=LbmOastJ8vpnTjrqgg4ff+yscizwtDNxnMdJwdNJQWPX03NaWBQXFm5SKDq0dyQh4Chiwno90h7v2kO+ev6COKPBwMpbw5zPxq4OKmdO3oLZzO2qimaxDWZsdze34+wkH4f1DGIBjvxAtexTGH01dwIop1RAMkrOLdqrC86jke1pBYf/2auVJwUinJfQoC9jaF34DpA58jQAT0e6Di+VPQytlAmT4sx7cbWHzCPTOmgX8B+C7FZZNMA/1Wmi0l8gTQk5UPFY6DIJp+oqY+ez/2o0e6HgwtszYWUFLYa2In9w4sCYCVLQo4HXxL3iwg6Lbvt4TlYc/bcegSxNFVznjg== 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=PjiRXkbRjkNANyiTKJ8kXTZpJjyua1yGJ7SWalvq2ZQ=; b=WT8elmSWJV43QTwzyyggu8eFXbuoeUYZ2z4gbTQq8pRpSOPFLSq4qYt8x9QQwi2zCqRrtfT5+7gBCrEUTsZz4TbR9t/KAPCaQTm7BkB+s3Z3cdxTFIays3+wjndX/ifIdeIS3k5Uoi2a33TMa/peuL+8o25qREMp0tbWQj4J8g9pwbwSYr0fSI/bDwXlvtYne4wNHLbVJr8lqMQP3WudILzbvCgnUNBVRNe7CS6tAUscuSLhlKER5W4hXTSnD4OSkLHOG/zVn/pUBXmnpaTzQEi6A/QPUiP8JrVBhpmofoBId05OndkM/af1TtD9XXp2LnXaQd35od9VSB971tq+YQ== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by DB3PR0102MB3546.eurprd01.prod.exchangelabs.com (2603:10a6:8:d::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.15; Thu, 30 Jun 2022 22:30:54 +0000 Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::60b9:9f29:40cc:f01c]) by DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::60b9:9f29:40cc:f01c%10]) with mapi id 15.20.5373.018; Thu, 30 Jun 2022 22:30:54 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Jul 2022 00:29:45 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [Elbznm6XH05iXD9XyvKd6e8EEjWmZx6l] X-ClientProxiedBy: FR0P281CA0099.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a9::17) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <20220630222949.1758625-13-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 775d3118-30cd-44c7-e82f-08da5ae83195 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiSAA+E0K/sYrHNnfsWcYQJjFImxBqo34DvQiWT7mtkdZjF90AcbMlbVijvqDHqPK6RXxGIs1jMZNNHP4E+6ydJtqj5o6DQwvGW4N+pzguMCIKJ53QXzFtiIBCJsvC+TwBwUOvsG3u97/KrNTtaHKlvHK9ev5my30rovmltxZLGwFAS8FQyU45zV+MkqSsTC3YrRH5MwE7Mo/rXfibNUM4Ft6WIB6z3GdS1P0dJEVaCE8E/jSCczFV2GobciLqriSTApyLnMjgraThV2aFsDhbef0v/tC2yE/Eo7zsk8NkPtxFTm+D8SZGnS143mCp15atz9TKU5qiLnFw87f99knnaYU6z2zESwqqJ76GThXH3cibzW7YjVLtq8DxhAr6kF4t4y20RjiLaZzjx6+RmsaiK0iGudtpyEYEf7s0gry/6lmPgjiXI5lS/0q6QyPMjzotFMCfd9bXsUTQcrYjU7oGR3fsctSifyyMu8r4yfYn0aWmvyGVk5Gy5kSztwgugtFWIgpaWhjmBg+aA+Rc+bP7CNgI5DVIAxX0fT/r+ux8ej/sTTozDXsIf7nDDrDszMFkrgbfaZT5htDSdA+H0BPCiEu7RbxtsCxBQC1sp7MTe9U51zKCEJwBqm1JZvk23iPWVRb6wWv6NBqv7uF6z+UaxmfbPVKRFu0yjLMFkoPqiwn2BMvl0jUs8DFTmkoj3lciZjIsv1wlX/4z0jy7QZ3dYGpzJYFIHhLV30fbjRUxxijjoFJnfcBcApWvxr4vux8Ks= X-MS-TrafficTypeDiagnostic: DB3PR0102MB3546:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: j1tW5zOE7LHjmyQQirpmpCQizORVy/bL+p7ov/iROCfgtgEGTCEdaLD/l/w6uxUvqCN/K5Us4TF/vJ/sOM+XfmH6j6ZPmBborav3r091pH8BkB1HtD/5XjQ1LKAZQ+pt5vfuH1uuUCLAxy+f6+LlCx800UTIOVPaY6GF2aynrSHAzlXo6/KIqcgKMlMVYdDmyP4a6O/KJPjm6oango9h0uFPalHTfXyukj2Y5nj8wwhfbmsUxG4w2kDBwpdX/zXLeGEd039iukyrrGmq7PDZ/yFdpEXOEcPrAJs6KS3YJgFBtRkP022XAgPmUELKZv7UIvs1XwiYtK3l0RRdi55/GFslrOCA83dOPhxG56xS0cGwDd9wbKRDysOTSGqjSqTz/1Qrgro3M+/kkHC0nN2zzaqprLVoRe5xwICVIIsB4bBD+xkzVl2eCcToMKlCjmPw8i6eVm9+nlBY/hXxGWvOBrOL/eko4UvESuTOmLiSWyGQeYZaCz6kBMSmKJKdTLKPj7oSA72iQ2MuveC8WZtX/WvouqIGkIKtO9IQma2U7oImB61npT6WLslwDn/JxHuKVuIjv6jIVjj+GqkYZbbcZ5dqnS8a/v5KLyaAL6dGZ6V5HoiQXwkPgMT7gqaXN3HD3yOkozGDlq496hHBMhYzdvSLBPVuXxPlBf27EgMbTEPJ+tghQROuHQEAShrOkL8JF405wenM5iXoJvFqKi7Shg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: bVYpPh2frluGz4uPVQBzViTDIYuZmxHdE524eKxU3zvoZW49K67uN2tn96x3eLUMBVDdVvVqkWFVAg+jJRX2kBEZFEzxpRwHHR/xNznX9IqDJB9NBgLHABhUloCE3ZJ9ITziWAjElgCpiAMZzakuJ9Ydt65r1rTREmoebex5RMh/BI9vWyMuB2PnDH++dHp0WxoFxA7RzKQWKdkCljo6bQCd2A3xGceBYGGJ3cdCRWzK1aJwU0py9ZiQ1FFcnCdp4+Zd8l+wYmujOXfEUvFAvjbmhoIa64gnNT4csY3tKYndx7v/0rTYGN7zYxI3OLoCVsVCskx3SjjGj0M4sXa3ElM3330/5uzUCF4ZQP+bkr8QrH4bgx4mZTTKW2+PD0VT/GwiyQdXlIacPWm8+8fSzvY5tn3VJPBlgybRztTrPe5cyBAF0S5iL3b/z/ed5rzCALciqBKB9yiU7coKvjsdn1xD+l/DariopMOiQrQ1+vok65SaTQfhQlT6+mwLEhKGDfAMjscxwmYk39Sh5UfOP9VhUS7OiY7r8K0NIrflQZ3tibaKPaoL8vpwH4wjnDnFr98w246GB9P+uXk8ouQt44VhwHMwi65I6xlNqtMInHbakJJEwyeNwOyWTc4d6PTWWGfvBVOCRL/cRC2I0KxbJNtfctVAPv0d4GOojslhS/yKrX+DB2KISWiqCxsJf1Fv2BiVAVNVaxbK1mD1xBIldCDQfaEaIYHeHS6nrLo35IpJclJRPGXJh98FoN9maDvJ8hvBw6rE+tBzv4MjzxA1iv1HmEu8zU0cP1VRDLnfHyk2TbNPWaqLRxqSiqiDF4HQnsPNad9Cr2mc7XuGs4tVoERqEaqstwVnmotC4dS0LKwJZofiKJ+SWPIq3aPU97YT8FpvR8Z6MgbP8GEP/TdnXG1i2taPr+EmTRZOt96LG5fbJbdxBuBinteC9II71iHXu3pHdmANlwoC55FTiyO/7foSuWMhCGRjSIDFqUD1804P9UYRAs7ayiqAYb7jvFhfg7gQRQawlp3paQ2My8LhUTOhQ3qUnxW8R7GVSiOVlcTael5voENaRDoFnMSjBNTC5osED9fCNKvLnTylav7NR2EFfvqaESOLuBO7UeJNMjQ4SnYYf6cBjn1FXobHCea2ECu0BHpgBSjAq5yo4cWvtUUMyrgPBbV1jvWYRDDBpskiCrfnkBLDYSNZPPc+7K66jbt0FrnvHIvSPhqTQ0GSiJX+BMT2y+DGBnzNP0hQUlmofLY1kJj7hYwctf2gXwI4egQCkWJDPrqg06GKdlReXU+sTSudvSfItRn0NWjKcw0= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 775d3118-30cd-44c7-e82f-08da5ae83195 X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jun 2022 22:30:53.9822 (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: DB3PR0102MB3546 Subject: [FFmpeg-devel] [PATCH 14/18] avcodec/hevcdec: Don't allocate redundant HEVCContexts 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: S/SKNmjxhO0U The HEVC decoder has both HEVCContext and HEVCLocalContext structures. The latter is supposed to be the structure containing the per-slicethread state. Yet up until now that is not how it is handled in practice: Each HEVCLocalContext has a unique HEVCContext allocated for it and each of these coincides except in exactly one field: The corresponding HEVCLocalContext. This makes it possible to pass the HEVCContext everywhere where logically a HEVCLocalContext should be used. And up until recently, this is how it has been done. Yet the preceding patches changed this, making it possible to avoid allocating redundant HEVCContexts. Signed-off-by: Andreas Rheinhardt --- libavcodec/hevcdec.c | 40 ++++++++++++++++------------------------ libavcodec/hevcdec.h | 2 -- 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 9d1241f293..048fcc76b4 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -2548,13 +2548,12 @@ static int hls_decode_entry_wpp(AVCodecContext *avctxt, void *hevc_lclist, { HEVCLocalContext *lc = ((HEVCLocalContext**)hevc_lclist)[self_id]; const HEVCContext *const s = lc->parent; - HEVCContext *s1 = avctxt->priv_data; - int ctb_size = 1<< s1->ps.sps->log2_ctb_size; + int ctb_size = 1 << s->ps.sps->log2_ctb_size; int more_data = 1; int ctb_row = job; - int ctb_addr_rs = s1->sh.slice_ctb_addr_rs + ctb_row * ((s1->ps.sps->width + ctb_size - 1) >> s1->ps.sps->log2_ctb_size); - int ctb_addr_ts = s1->ps.pps->ctb_addr_rs_to_ts[ctb_addr_rs]; - int thread = ctb_row % s1->threads_number; + int ctb_addr_rs = s->sh.slice_ctb_addr_rs + ctb_row * ((s->ps.sps->width + ctb_size - 1) >> s->ps.sps->log2_ctb_size); + int ctb_addr_ts = s->ps.pps->ctb_addr_rs_to_ts[ctb_addr_rs]; + int thread = ctb_row % s->threads_number; int ret; if(ctb_row) { @@ -2572,7 +2571,7 @@ static int hls_decode_entry_wpp(AVCodecContext *avctxt, void *hevc_lclist, ff_thread_await_progress2(s->avctx, ctb_row, thread, SHIFT_CTB_WPP); - if (atomic_load(&s1->wpp_err)) { + if (atomic_load(&s->wpp_err)) { ff_thread_report_progress2(s->avctx, ctb_row , thread, SHIFT_CTB_WPP); return 0; } @@ -2595,7 +2594,8 @@ static int hls_decode_entry_wpp(AVCodecContext *avctxt, void *hevc_lclist, ff_hevc_hls_filters(lc, x_ctb, y_ctb, ctb_size); if (!more_data && (x_ctb+ctb_size) < s->ps.sps->width && ctb_row != s->sh.num_entry_point_offsets) { - atomic_store(&s1->wpp_err, 1); + /* Casting const away here is safe, because it is an atomic operation. */ + atomic_store((atomic_int*)&s->wpp_err, 1); ff_thread_report_progress2(s->avctx, ctb_row ,thread, SHIFT_CTB_WPP); return 0; } @@ -2617,7 +2617,8 @@ static int hls_decode_entry_wpp(AVCodecContext *avctxt, void *hevc_lclist, return 0; error: s->tab_slice_address[ctb_addr_rs] = -1; - atomic_store(&s1->wpp_err, 1); + /* Casting const away here is safe, because it is an atomic operation. */ + atomic_store((atomic_int*)&s->wpp_err, 1); ff_thread_report_progress2(s->avctx, ctb_row ,thread, SHIFT_CTB_WPP); return ret; } @@ -2647,18 +2648,15 @@ static int hls_slice_data_wpp(HEVCContext *s, const H2645NAL *nal) ff_alloc_entries(s->avctx, s->sh.num_entry_point_offsets + 1); for (i = 1; i < s->threads_number; i++) { - if (s->sList[i] && s->HEVClcList[i]) + if (s->HEVClcList[i]) continue; - av_freep(&s->sList[i]); - av_freep(&s->HEVClcList[i]); - s->sList[i] = av_malloc(sizeof(HEVCContext)); s->HEVClcList[i] = av_mallocz(sizeof(HEVCLocalContext)); - if (!s->sList[i] || !s->HEVClcList[i]) { + if (!s->HEVClcList[i]) { res = AVERROR(ENOMEM); goto error; } s->HEVClcList[i]->logctx = s->avctx; - s->HEVClcList[i]->parent = s->sList[i]; + s->HEVClcList[i]->parent = s; } offset = (lc->gb.index >> 3); @@ -2697,10 +2695,8 @@ static int hls_slice_data_wpp(HEVCContext *s, const H2645NAL *nal) s->data = data; for (i = 1; i < s->threads_number; i++) { - memcpy(s->sList[i], s, sizeof(HEVCContext)); - s->sList[i]->HEVClc = s->HEVClcList[i]; - s->sList[i]->HEVClc->first_qp_group = 1; - s->sList[i]->HEVClc->qp_y = s->sList[0]->HEVClc->qp_y; + s->HEVClcList[i]->first_qp_group = 1; + s->HEVClcList[i]->qp_y = s->HEVClc->qp_y; } atomic_store(&s->wpp_err, 0); @@ -3613,15 +3609,13 @@ static av_cold int hevc_decode_free(AVCodecContext *avctx) av_freep(&s->sh.offset); av_freep(&s->sh.size); - if (s->HEVClcList && s->sList) { + if (s->HEVClcList) { for (i = 1; i < s->threads_number; i++) { av_freep(&s->HEVClcList[i]); - av_freep(&s->sList[i]); } } av_freep(&s->HEVClc); av_freep(&s->HEVClcList); - av_freep(&s->sList); ff_h2645_packet_uninit(&s->pkt); @@ -3639,13 +3633,11 @@ static av_cold int hevc_init_context(AVCodecContext *avctx) s->HEVClc = av_mallocz(sizeof(HEVCLocalContext)); s->HEVClcList = av_mallocz(sizeof(HEVCLocalContext*) * s->threads_number); - s->sList = av_mallocz(sizeof(HEVCContext*) * s->threads_number); - if (!s->HEVClc || !s->HEVClcList || !s->sList) + if (!s->HEVClc || !s->HEVClcList) return AVERROR(ENOMEM); s->HEVClc->parent = s; s->HEVClc->logctx = avctx; s->HEVClcList[0] = s->HEVClc; - s->sList[0] = s; s->cabac = av_malloc(sizeof(*s->cabac)); if (!s->cabac) diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h index b33e8ae0f6..3367ee312a 100644 --- a/libavcodec/hevcdec.h +++ b/libavcodec/hevcdec.h @@ -476,8 +476,6 @@ typedef struct HEVCContext { const AVClass *c; // needed by private avoptions AVCodecContext *avctx; - struct HEVCContext **sList; - HEVCLocalContext **HEVClcList; HEVCLocalContext *HEVClc;