From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 399E4432F0 for ; Thu, 30 Jun 2022 22:32:24 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6D4F968B467; Fri, 1 Jul 2022 01:30:57 +0300 (EEST) 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: =?us-ascii?Q?bVYpPh2frluGz4uPVQBzViTDIYuZmxHdE524eKxU3zvoZW49K67uN2tn96x3?= =?us-ascii?Q?eLUMBVDdVvVqkWFVAg+jJRX2kBEZFEzxpRwHHR/xNznX9IqDJB9NBgLHABhU?= =?us-ascii?Q?loCE3ZJ9ITziWAjElgCpiAMZzakuJ9Ydt65r1rTREmoebex5RMh/BI9vWyMu?= =?us-ascii?Q?B2PnDH++dHp0WxoFxA7RzKQWKdkCljo6bQCd2A3xGceBYGGJ3cdCRWzK1aJw?= =?us-ascii?Q?U0py9ZiQ1FFcnCdp4+Zd8l+wYmujOXfEUvFAvjbmhoIa64gnNT4csY3tKYnd?= =?us-ascii?Q?x7v/0rTYGN7zYxI3OLoCVsVCskx3SjjGj0M4sXa3ElM3330/5uzUCF4ZQP+b?= =?us-ascii?Q?kr8QrH4bgx4mZTTKW2+PD0VT/GwiyQdXlIacPWm8+8fSzvY5tn3VJPBlgybR?= =?us-ascii?Q?ztTrPe5cyBAF0S5iL3b/z/ed5rzCALciqBKB9yiU7coKvjsdn1xD+l/Dario?= =?us-ascii?Q?pMOiQrQ1+vok65SaTQfhQlT6+mwLEhKGDfAMjscxwmYk39Sh5UfOP9VhUS7O?= =?us-ascii?Q?iY7r8K0NIrflQZ3tibaKPaoL8vpwH4wjnDnFr98w246GB9P+uXk8ouQt44Vh?= =?us-ascii?Q?wHMwi65I6xlNqtMInHbakJJEwyeNwOyWTc4d6PTWWGfvBVOCRL/cRC2I0Kxb?= =?us-ascii?Q?JNtfctVAPv0d4GOojslhS/yKrX+DB2KISWiqCxsJf1Fv2BiVAVNVaxbK1mD1?= =?us-ascii?Q?xBIldCDQfaEaIYHeHS6nrLo35IpJclJRPGXJh98FoN9maDvJ8hvBw6rE+tBz?= =?us-ascii?Q?v4MjzxA1iv1HmEu8zU0cP1VRDLnfHyk2TbNPWaqLRxqSiqiDF4HQnsPNad9C?= =?us-ascii?Q?r2mc7XuGs4tVoERqEaqstwVnmotC4dS0LKwJZofiKJ+SWPIq3aPU97YT8Fpv?= =?us-ascii?Q?R8Z6MgbP8GEP/TdnXG1i2taPr+EmTRZOt96LG5fbJbdxBuBinteC9II71iHX?= =?us-ascii?Q?u3pHdmANlwoC55FTiyO/7foSuWMhCGRjSIDFqUD1804P9UYRAs7ayiqAYb7j?= =?us-ascii?Q?vFhfg7gQRQawlp3paQ2My8LhUTOhQ3qUnxW8R7GVSiOVlcTael5voENaRDoF?= =?us-ascii?Q?nMSjBNTC5osED9fCNKvLnTylav7NR2EFfvqaESOLuBO7UeJNMjQ4SnYYf6cB?= =?us-ascii?Q?jn1FXobHCea2ECu0BHpgBSjAq5yo4cWvtUUMyrgPBbV1jvWYRDDBpskiCrfn?= =?us-ascii?Q?kBLDYSNZPPc+7K66jbt0FrnvHIvSPhqTQ0GSiJX+BMT2y+DGBnzNP0hQUlmo?= =?us-ascii?Q?fLY1kJj7hYwctf2gXwI4egQCkWJDPrqg06GKdlReXU+sTSudvSfItRn0NWjK?= =?us-ascii?Q?cw0=3D?= 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: 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; -- 2.34.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".