From patchwork Thu Jun 30 21:48:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36558 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp600377pzh; Thu, 30 Jun 2022 14:48:43 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vCYJT8oAkRenlL09ZQf6tklwt/uhwG6pI3gi4UqDq8Kt6HM/Xwcb+cNc2wtK8n5k8tLBvD X-Received: by 2002:a17:906:cd01:b0:722:fce7:7f4a with SMTP id oz1-20020a170906cd0100b00722fce77f4amr10474804ejb.536.1656625723439; Thu, 30 Jun 2022 14:48:43 -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 y5-20020a056402134500b0043580b38b6csi5546021edw.505.2022.06.30.14.48.42; Thu, 30 Jun 2022 14:48:43 -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=uldReGrI; 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 92C4A68B64B; Fri, 1 Jul 2022 00:48:38 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-oln040092066106.outbound.protection.outlook.com [40.92.66.106]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9CB2068ACBA for ; Fri, 1 Jul 2022 00:48:31 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VV1v2Z+5oSWjDm4jyQXk2NYeDX4A3/EYmoa5w+4ujApjnlv130mee40n9rW8Mut0Nr4CAs71xK5AteHj72+Ct1nOyTAtMecAyCdCtrb9v1UJI+ozdGXrChkmxSc3wjBZBJ1huGGGWvnjSXOX3CtvHaI8MJ9TJpz+kw9n8jNPzNrritNJcDwfPdnUxk6aEejfg97ncmFyJPHD7i1VLnxD0w5K/pq1MFCNg3oRPU+5Ybm3g3accWU6fQe7clDczf2iRaha8rX92JbV+Bs3nqy9z79EIw50OSKCzTIurrDzCumbWWuiq/5DTQgaRGGbl6/E/IRG95f6Ee18qGFQTuSYLQ== 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=DixF1T8ewAGu2sL2DSMvKcraNb75RNjtc6co5UaClrg=; b=YLVeStQg25/64p5ruTfYs9yJTG2OPbTUzxJvPztYXJbD0v4+AVvGcsCpaXoMh0u9BIamELngDxysj4410yBlPiwEbQECCggq14KFqcwtFym6MOYZxBDcIxKQCC7WjfurxPWy2glMlG47Yjvo/+Jdh8BuvTpgDsWwHmTtkanI3jDHsih4DzUSXWo88tGFRKn6OVxyGCFlsWvUWfFEOvieykUpEu1Epo86QzKGhcPhnyQ2b2NMZosOuHEu2qGweM7Qncu1v4uX6jxDYa5uSf7GiNL04Lqmhyuxt6CtUYHqqzIjkywoeXuKSFpkKiuRUuaH5T1pHaQHvMLqKN4ZnePL5w== 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=DixF1T8ewAGu2sL2DSMvKcraNb75RNjtc6co5UaClrg=; b=uldReGrIdGr3tXNomxn6JCvscVbWsUjE6tDTehW3r3eOkBnnm7kYbCL7tLO+HzlRoFCyUpKv3SkmvmWsT6JSh1FIQWe/cmBrQk+PBH32KZtzw0FujhfxCXkkap685ELGa+D0NlfE49VtghPg6031qSnk9MHVKmahpd20snaVpni2W/OUkCl91KQzExM7hABQn4SDg8hmljGz0R2Wp4+v5BITZLagudjFGcEDS/fUq1WHp2bQvuaCSP0yFqUK+zVMEud9BhDaq5N4yS91kLSXNdc1pw+faPxPat/lxKPqokFFcOqK6Wqzsxnef3qutv7q8UfQkLwNXVMtmApuDqbeZA== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by VI1PR01MB4333.eurprd01.prod.exchangelabs.com (2603:10a6:803:6a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.14; Thu, 30 Jun 2022 21:48:29 +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 21:48:28 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 30 Jun 2022 23:48:00 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 X-TMN: [1cS5JxpUsWRa7zX6R/eSB40bBFfEhSM5] X-ClientProxiedBy: FR3P281CA0068.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4b::15) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <20220630214817.1758325-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b0142c86-cef9-4a5f-f650-08da5ae2446f X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNXqMBxJfDcJWCkSlr5voV0aiiBKhBFLSANyrhN47j3KDJtVcEbryN1N4ceFVdVwTuhvE6SBPYKI+CT/zWf1U52BNXSf+d0BKR1zQLeTMTNvn7oMgW3fQD7JRrXcxSHx6NwNaksr249KkwV+bdpACfJmSu8MOpVnGhU1frDKM1uc8HZQEDUoMjjCIEK+1XC8JsurPXc5x/Xe4P29f1m29C5MQcQnkRak60xi73UCFZ+vZFbNPs0p3oVVOlG8iaGXO45xEguVmBWTHpgT+LUc6syQld9g3dZA3xcfBlvT8t2nBmfyM3K2Z2JFTZtFF0wWNOSjzNELuqNyLhupem/Sl24mmo7zUYwmonHslgrmsjKtcgDr1w5bIF2VD6oeAT5tEdzHpzOJsq4nnESZ1WDnGlbkWXCfjQoDtl2sv1LrtyMkVHtmBcPGGYw1lUVNLOgcz8xiyOllGnHaS6qiTssQLlmj6GHuf4U97NsSzpDqdu09E1Yg9Orq6xLDvDPJ1wkKEyFN37N+zUzD/V17OzrT6v4D884uagpyzUcYYVkrAZPQMWoLqtTADGYRZphBVSPQFFCZxS2m8ilUrLCkOA8nTCuVeT3zlDwczCCMO91LuY3++ejWPOqR5Vi+vLsQNS5+JAa5oq1lM1yYz0BUMLqtN4effnwGNqXrEppBhSCtjXXWqB42pJvDiT0DZf/9ulSOVFwXnek907d8iI7L8nptvCfdmpvcL3uydC4= X-MS-TrafficTypeDiagnostic: VI1PR01MB4333:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1/t7PnHzlVOIZfuSGCN2zO0kYhY0F8O4vddOh69uXOnUc1jcRoVXUJdbRZC9W14V+UUs6Zwh5vS83QhN4cnavl4u55h47NQvlOemDeOJKY+U/H93Ls8Ua/y3aOYzxYIwyPqkWQVmUsOzJ6wWpHM+AHHj9TPluEt6XwOuR7/zawptwQToJH2+5ZRbID+TSk2zsJx5rmpfw4MxJX7zsR6HFrJkBouyZwLkJm+2gFF3NTKx3VQBK3Nj8NlL+W3C7Hvo1oHzMiwTIOXUOP28Uv1fOFNLW3tN2n61OME1UYKZF9ww/NRtxEHM6JHIzwgMtRautIpKwJk6Tf8PQQzksTkW9xahIoRug4n8dawKmsRrjAUOHzOZ6EtCqJved1CzOEcT6Ev48qkyGkBw5NIRLO7MfpVZ58w884q9StMvn0hVRtEJw5H/uEDjxx/6j1hfpDjZvZx5fF+tZZpX86yb4gQ/U3oBxM1zvBRZAh+kwnuYRi5ffoM85hQeqPKJPsmDrlVlK8gGYNWRWULq2v1nI6rAnlLJXsx2UivOP94pIWH+qoV35EvYgGdS8TWGsDhYm09LR8DgvsqFnvE3/qqGZkBpvXngMJzPYY1Xo1vTTC8XNJWlEJYyRNZhNY0SdIuDsCcLD8aSAYYjdvdIml5BdSrQkvaMe8mNiPdPS5uM8NSuD5DftFFgl0IC8d1F4s5q2qR12cUI2/ne+15k3R7rB5cJbg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: bMzFazUvuCj9HCdqHdlPHcnwy9tXTfQ1qmOYQ7iO+KC6XPNhJbSQlPsJpkNKxB2cEQITLgYRRrK8+CV2EdGrUMn9LI7Zfm0VMpE5k209rXvaVF30XH+XAvVs/KAaYehv2huouTJM46dWo/CXs8vMpCJWvGuOyYc6owwgraItBRovIl3cQPnCVpV/YwwUodpPDrldH298hVk7kfUVBzFgLeEdJh5VnjczFIVELJZXkjIGuIfJY7V9TkfRU+9CFdyBG64Dbfr7SI7gF+CiCE5xWCLnQEOxAVOaF050kQbVzGkCDpm1bXyQPQr1k9+cKd4jRIPA68endDmNVaebGLkBXJpJsCIqrEqLrVnyZlb2anEnB4B4ilGX8JUBPjHURmj9iN4qpUJX+mmZJyXo2Q5uPEHjITMyheP8+CH3O2buDZLozXXhrE+0WPbGCzPQ+V7mIAwDM5Sbe9ZhAPhr+O+v7WQEtdL7MYuuU26s6+a9RMGKu0MbKn098NRGNH+6vmNle94sXf0Rmmyr1TEO43kzrL3s8s6CKPwQNgr1jKu3vzsyAlY1aLDwko9KjFA0n2g+rw84ljnho1ZQgq6ZOxGMsoMp/qYn8B2ajXmt/Q41KENNGM5pOhJP+lW2OolNBaD2vQPzNc6u25VlY0ALqrgyMEJaKbNRXzQ8s1OR38NOjMdbjJhDgj2JjdN8woiRbbtCYRNXu+RniE24tFNR3XDvtgw+k4bS2M+Jz9W5ZkbzfNS/FLRvyD5B7FzzIVMiMwwGq77mUWRWRjzsLUyqHB21l2Z5AGo8ajv8hNo6hg/jA1Evl6LyTRlGoVnTzwfJL44F+MGtcEOEas+nwYU55YcTWEw+OpGN2BKmiQjvvyBX+IA4ZrMW2XSWKFVATCo2x1A3pUIzhrMFHsUYtW6w/M/4/H8k4zoZf8TyfDNFmxRndgpK6q5tY0l4oINGjQ+lV7aC//QtLHq4hHlOzlF6te8D1MfzhTh7mqlYdsPI9ou9GkFeaGPemchMT3IpAZYtS6gRfrYFaeHldYTYgxQrYPH8WGd28cnVgRgvW2MKitI3qsojgMiudvGch4XetnH7WvhDS/bqqqd1dm2bVQG1pcFsFd7GcQ7YCEe5SmdlGADlAUbtuaxsCyd36PcCqepCCGjDa36KlnQcRXIryRReecKZCNDAsG8rzBbFU/nXL2S/1RoJJrvnQPS/vk0GoAFH7THAU/3MRJ7avDnEt/8YsJYtCMDHrrFx+J8QKR+C2I9hkzA8TRK3XNThh7OD11a0s92j5C2/2ATGiwUJGWfYfwDokrabtLbrSYj/4sPaNni1Rak= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b0142c86-cef9-4a5f-f650-08da5ae2446f X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jun 2022 21:48:28.6455 (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: VI1PR01MB4333 Subject: [FFmpeg-devel] [PATCH v2 01/18] avcodec/pthread_slice: Don't reinitialise initialised mutex 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: fXKstaHAsUto It results in undefined behaviour. Instead initialize the mutexes and condition variables once during init (and check these initializations). Also combine the corresponding mutex and condition variable into one structure so that one can allocate their array jointly. Signed-off-by: Andreas Rheinhardt --- Now also adding the fallback function in case threads are disabled. libavcodec/hevcdec.c | 7 +++- libavcodec/pthread_slice.c | 83 ++++++++++++++++++++++++-------------- libavcodec/thread.h | 1 + libavcodec/utils.c | 5 +++ 4 files changed, 63 insertions(+), 33 deletions(-) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 7037048d53..f222f20706 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -3803,9 +3803,12 @@ static av_cold int hevc_decode_init(AVCodecContext *avctx) HEVCContext *s = avctx->priv_data; int ret; - if(avctx->active_thread_type & FF_THREAD_SLICE) + if (avctx->active_thread_type & FF_THREAD_SLICE) { s->threads_number = avctx->thread_count; - else + ret = ff_slice_thread_init_progress(avctx); + if (ret < 0) + return ret; + } else s->threads_number = 1; if((avctx->active_thread_type & FF_THREAD_FRAME) && avctx->thread_count > 1) diff --git a/libavcodec/pthread_slice.c b/libavcodec/pthread_slice.c index 0ad1965a22..e34116116d 100644 --- a/libavcodec/pthread_slice.c +++ b/libavcodec/pthread_slice.c @@ -41,6 +41,11 @@ typedef int (action_func)(AVCodecContext *c, void *arg); typedef int (action_func2)(AVCodecContext *c, void *arg, int jobnr, int threadnr); typedef int (main_func)(AVCodecContext *c); +typedef struct Progress { + pthread_cond_t cond; + pthread_mutex_t mutex; +} Progress; + typedef struct SliceThreadContext { AVSliceThread *thread; action_func *func; @@ -53,8 +58,7 @@ typedef struct SliceThreadContext { int *entries; int entries_count; int thread_count; - pthread_cond_t *progress_cond; - pthread_mutex_t *progress_mutex; + Progress *progress; } SliceThreadContext; static void main_function(void *priv) { @@ -83,13 +87,13 @@ void ff_slice_thread_free(AVCodecContext *avctx) avpriv_slicethread_free(&c->thread); for (i = 0; i < c->thread_count; i++) { - pthread_mutex_destroy(&c->progress_mutex[i]); - pthread_cond_destroy(&c->progress_cond[i]); + Progress *const progress = &c->progress[i]; + pthread_mutex_destroy(&progress->mutex); + pthread_cond_destroy(&progress->cond); } av_freep(&c->entries); - av_freep(&c->progress_mutex); - av_freep(&c->progress_cond); + av_freep(&c->progress); av_freep(&avctx->internal->thread_ctx); } @@ -172,65 +176,82 @@ int ff_slice_thread_init(AVCodecContext *avctx) return 0; } +int av_cold ff_slice_thread_init_progress(AVCodecContext *avctx) +{ + SliceThreadContext *const p = avctx->internal->thread_ctx; + int err, i = 0, thread_count = avctx->thread_count; + + p->progress = av_calloc(thread_count, sizeof(*p->progress)); + if (!p->progress) { + err = AVERROR(ENOMEM); + goto fail; + } + + for (; i < thread_count; i++) { + Progress *const progress = &p->progress[i]; + err = pthread_mutex_init(&progress->mutex, NULL); + if (err) { + err = AVERROR(err); + goto fail; + } + err = pthread_cond_init (&progress->cond, NULL); + if (err) { + err = AVERROR(err); + pthread_mutex_destroy(&progress->mutex); + goto fail; + } + } + err = 0; +fail: + p->thread_count = i; + return err; +} + void ff_thread_report_progress2(AVCodecContext *avctx, int field, int thread, int n) { SliceThreadContext *p = avctx->internal->thread_ctx; + Progress *const progress = &p->progress[thread]; int *entries = p->entries; - pthread_mutex_lock(&p->progress_mutex[thread]); + pthread_mutex_lock(&progress->mutex); entries[field] +=n; - pthread_cond_signal(&p->progress_cond[thread]); - pthread_mutex_unlock(&p->progress_mutex[thread]); + pthread_cond_signal(&progress->cond); + pthread_mutex_unlock(&progress->mutex); } void ff_thread_await_progress2(AVCodecContext *avctx, int field, int thread, int shift) { SliceThreadContext *p = avctx->internal->thread_ctx; + Progress *progress; int *entries = p->entries; if (!entries || !field) return; thread = thread ? thread - 1 : p->thread_count - 1; + progress = &p->progress[thread]; - pthread_mutex_lock(&p->progress_mutex[thread]); + pthread_mutex_lock(&progress->mutex); while ((entries[field - 1] - entries[field]) < shift){ - pthread_cond_wait(&p->progress_cond[thread], &p->progress_mutex[thread]); + pthread_cond_wait(&progress->cond, &progress->mutex); } - pthread_mutex_unlock(&p->progress_mutex[thread]); + pthread_mutex_unlock(&progress->mutex); } int ff_alloc_entries(AVCodecContext *avctx, int count) { - int i; - if (avctx->active_thread_type & FF_THREAD_SLICE) { SliceThreadContext *p = avctx->internal->thread_ctx; if (p->entries) { - av_assert0(p->thread_count == avctx->thread_count); av_freep(&p->entries); } - p->thread_count = avctx->thread_count; p->entries = av_calloc(count, sizeof(*p->entries)); - - if (!p->progress_mutex) { - p->progress_mutex = av_malloc_array(p->thread_count, sizeof(pthread_mutex_t)); - p->progress_cond = av_malloc_array(p->thread_count, sizeof(pthread_cond_t)); - } - - if (!p->entries || !p->progress_mutex || !p->progress_cond) { - av_freep(&p->entries); - av_freep(&p->progress_mutex); - av_freep(&p->progress_cond); + if (!p->entries) { + p->entries_count = 0; return AVERROR(ENOMEM); } p->entries_count = count; - - for (i = 0; i < p->thread_count; i++) { - pthread_mutex_init(&p->progress_mutex[i], NULL); - pthread_cond_init(&p->progress_cond[i], NULL); - } } return 0; diff --git a/libavcodec/thread.h b/libavcodec/thread.h index d36dc83bd7..92cbd927f1 100644 --- a/libavcodec/thread.h +++ b/libavcodec/thread.h @@ -106,6 +106,7 @@ int ff_slice_thread_execute_with_mainfunc(AVCodecContext *avctx, void ff_thread_free(AVCodecContext *s); int ff_alloc_entries(AVCodecContext *avctx, int count); void ff_reset_entries(AVCodecContext *avctx); +int ff_slice_thread_init_progress(AVCodecContext *avctx); void ff_thread_report_progress2(AVCodecContext *avctx, int field, int thread, int n); void ff_thread_await_progress2(AVCodecContext *avctx, int field, int thread, int shift); diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 940f25fe7a..f78475d0ad 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -958,6 +958,11 @@ int ff_thread_can_start_frame(AVCodecContext *avctx) return 1; } +int ff_slice_thread_init_progress(AVCodecContext *avctx) +{ + return 0; +} + int ff_alloc_entries(AVCodecContext *avctx, int count) { return 0; From patchwork Thu Jun 30 22:29:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36559 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp620168pzh; Thu, 30 Jun 2022 15:30:14 -0700 (PDT) X-Google-Smtp-Source: AGRyM1s8q9iLJ2GQVYeiSLsu2IVu5x7BCeCYCLO9DNEvHub3vjCL6b/T00Alv8XXrHHZyTZuZGO0 X-Received: by 2002:a17:907:7ba1:b0:726:4522:d368 with SMTP id ne33-20020a1709077ba100b007264522d368mr11255272ejc.662.1656628213965; Thu, 30 Jun 2022 15:30:13 -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 gn21-20020a1709070d1500b007121bfeedb8si921405ejc.665.2022.06.30.15.30.13; Thu, 30 Jun 2022 15:30:13 -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=ZPRqrua5; 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 AE40468B66E; Fri, 1 Jul 2022 01:30:09 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2067.outbound.protection.outlook.com [40.92.91.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EB35368AFF7 for ; Fri, 1 Jul 2022 01:30:02 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cGH2OQ65bznfHly+e7J1ul+ROnBQKxOZmj0g72uhUi1lYN4YI/NhkInBaYM1sw695tK2/EDMjsJdPTdUJzrzO0RlzF1rN4yy/GJQgFo8eA0aGuxB6//FpJT9/Cl3ufGIVcSOQITIph2i4Awdur4rEYoJKMl2tOc2F8l06p4Rwc6mEQaH/SPZxis8A1alZEUP1JCfPPPrgpK7vytRgtGyEHLxS1qRSAcdzDSktnQIvwHmeryb61iEIcFu++QhhJ2j7pVB0rQ1AuEA2LFH834Wo3i2I+AUrymCvfnL+ebKD2OxmO1b8nNsXkFrjlnsEN0A1HmYl8ysvaAFqsFclcQ5vg== 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=qR+jYsw2gJw7gwMz7NEgcns5KSXaJ4bB+mD3GA4Ecjk=; b=T7eeZnWgYu+zMZ0MgtWkx6efQy+y4p8HjSbdwShSBh3Y+z/Zg8h3Ub9zzTeT+ejWoHKqhaRj0gSuVPjTn5OlhesRbW8jAM3Qm/+yNeoDSayj/6jzlk0s6QicTvYxY2/jXAnA5lqgryj5HL4OHlcpMnHFRP5GbQuzTPX9DjTMDMrp1Xm2rzqRTDDYX6PgmVb+/hTnxRCYQdEUPJLFxstN7Gk+yChX+sFYbQnOrNszFHBQ7HLeoDIwGHh4WK8fhNaAx5RuPGE4CfJUXGRGgRBK7mesEcPDBH0I13o7tmqVz3Z9FPGtPqimCSDL3aa5y78JTi9lWeAC0LbrejSPN2riTw== 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=qR+jYsw2gJw7gwMz7NEgcns5KSXaJ4bB+mD3GA4Ecjk=; b=ZPRqrua5KITrs/22MJa40DT2Bf+VXdmCgmeo5SYpbg4VjDIXHPnFeNLuceRr8zSqckdJ993oCkPpAWPwhXI3kxIvw/4PKFW7l4jw4U8+RHSjFp0aitg2E+z6XOqWx5BGl/DUATJqsPbzynVdThTu02MtE+WkA5cIxUJPVFZYMjBHwjgnsY0hlsogVgOZbXiNT9tu/KvsJL8lXzoUqXgy+sMQMZ3yhP9AL5uRUWubW8JUFjh+MqKuAYY4Xs/TYcn7EnfzPW1kumbPY9RNEYAyNulq5QeCzr/sJIB6Zh7Mql/qdPqUb+A+DvZU4n7hspa8n00Yt1zPfqj9WeIhPaawLQ== 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:01 +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:01 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Jul 2022 00:29:33 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [l1zMoCSrVi7pLwmEqqgJDM4TDk00lYCc] 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-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 83bc33cd-8d7b-4aa4-dc57-08da5ae811e9 X-MS-TrafficTypeDiagnostic: DB3PR0102MB3546:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: sE3OiHPKeaVdPWgj9wITwpIR03VfHBxlBlZWSbpw0ln9jZAzJCsLFfZJhRYS37TssCqSp/esk8jcv0ld/I3M4u5RVpHeKTG7gRKgiOyiAabpPKHX5P5PeIryr0EuYdZ8lbNqGWIYIe/DKLcX0RVzmPJgW1zZRMT3kcqR2HCKxhLOwbD20waMdjArM+W0/4n6d3HdSmvoYUdenYePziHYkwQdEVkLMI/moFbviNUuOvQhmjfpNKGZGqAZoUy5ek/+nil/20jt6D7QlbGPV4EYCU5Rfm+wqM/z4drZJ8nZjpaDWlXfOIszb2NUcLY6htxwgJSx2rJGNNIUe+tO1GyWLMWs2SVSVHHVD3XSJ8V2422HoAmSCKVXSOQiDBSNx4hfGyJWx02LkxtO2U3VoGTHszT/IROoOyfIwU1Q0tIXY3wlZA3QwlV1tHuxyipsTwd0d9g/1q+0QmH0trZ9LOykUyE5ww3rBqyyTJXHlzB9XHsffqdIjim/IjstgwMGQ729FLGFYM3viKS++EkgY5B+vUGScGQP/uy3rh8CqWOTM2nSgaJSd9Ja532blKn/G5xNJCd79Y0OyO7QSYJcufvZfDbBUi6/yCeGN/jOLLZ38yCzDCzeZ8Ja7lOQBg2LJWjE5RprzSM4RJ8WTxO+Htt5PAZCuEII4Zeiawo6bJBkpp4k7S2DBLLqkzJIM9XtinL/Pf0JI82nIpfssRMfvgteWw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: RuSYX08Th6uwlLabOogD/Y459wTJWQaaW52lTwn4ovs6pN5ACngr0le9XzA5UTmRUudoMGgpx4HeueZO3dhx3v8uKBA4HWzyEbXnHYHlEZvRVk8SfgWI3nnJBnBnqT+a90aL0IN46lFeFZ+r46ckf3AyK7vDFnqedZYyBhDTBTbyURIrRDrWeihzwaBEgUQwUi+PPeSh5y7ogytWA4UoRWi4aat1i5VnQpH/jeqJFoKctGFhDc57lTbFRUJo10qYL9/AgNI6l6GEWsjab5kdFx9V9zqGnbKQVaY+cy56EOEz00ilOMyL9nKuzyynsyOra3McdUAnA/AkoF/yfYuD0t4TzZA2X9SCAz/rHQE6Oy8XY1udVRL1OHouM42fLqR81VloKvSsFXojugt8y/R/g+qthLeUCKDiYa9KRfkFq6NerOtWDttdRvNmCrRL797OLpH1acgGzfgY6t44ZmYKpAy4tK8Biz8QsB1LLrOVAb8KtPEuwKNz4z7b2NJ6pIZkVsH5AIKQRVDHoSm9K9McUhsZxepYrxQPJpjqtpkwZkDnbDBKy7C1gTNn3XLhWChuVLH1zPa3ytVwRhoS7+WbgYHdTJs/R/UbC5+/OKK7Dc/hVh0B0kuSanof10ANyOCS86xvQZoyjIGqO+XKxAdtLYAXIawCHyMQPsdtf4jxZxwY4LmGvzFFL+ko6YQCZqKK0MC0Rwr/kU2Qm6JCfVL45zqBdqck0umRfozpKjwO75RCKMGEKljuR14D2OkLX/PUN6dWusN/LbrTfG6J8ik/5M2cqsQcXA3E4YZIHalpFu0k88O37qu1GuqWKACPZOCKzDLWgAYb4ozxuCpiy6GCJhXi72fF4XxOTbn2h3gzOy/eWT7BCBN2N7fItBHHdv8PvlwxUcDcI3dAy48tEJ3pYsbS/Cd9auy+lXE+RTrDxKHr2i4Iy5YJURK2mgKqGchNeF4J/IgEpas2INKaqt3x/ppMID1RQW5amlaOt9aUKmERxUkCpKZkXF/etE31ytoIrJ++zTNuwQaaL7/iwyJ6CzSLvVa0C4zZFGO2IYRU3HSPYM48/tWxPuELH07pYq0OBnsUAOkj47+/v0TggxpxVIluiOLo4PwjT77rSHzSHV+EN/Mk7drppwSGwbo2Y7EdKYkuFEy2z0LaKKBOEuMLWmtGgjljfHjmO+eBV/hl8LH+6SIsYhLZgznj+4l7ToPwS6vfHA9MWWO5Gq5qG7VNcPWcMEPkPw63DeCS+lBNOKJYtF2h7yHC3dNco+tYzVRJZQB6Cv5ig4RyhmzXmjn4EOKI3bYYFxITEsz2WPLnV/c= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 83bc33cd-8d7b-4aa4-dc57-08da5ae811e9 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:00.9079 (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 02/18] fate/hevc: add clip for persistent_rice_adaptation_enabled_flag 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: Xu Guangxin Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 8C1GaKmn8aK9 From: Xu Guangxin Tests the issue fixed in c8bc0f66a875bc3708d8dc11b757f2198606ffd7. Signed-off-by: Xu Guangxin --- Thanks to James for uploading the sample. There is something weird going on with this sample: If I max out my computer and concurrently run this test with slice threading, it sometimes fails (in about 1/3 of all runs). Yet for some reason #9 made this happen only very infrequently. tsan does not show any race that has anything to do with updating the cabac state (which is what #9 is about), but it shows other races (both before and after this patchset). I did not encounter this with any other sample. tests/fate/hevc.mak | 1 + .../hevc-conformance-WPP_HIGH_TP_444_8BIT_RExt_Apple_2 | 8 ++++++++ 2 files changed, 9 insertions(+) create mode 100644 tests/ref/fate/hevc-conformance-WPP_HIGH_TP_444_8BIT_RExt_Apple_2 diff --git a/tests/fate/hevc.mak b/tests/fate/hevc.mak index 2f16e3a29f..6c1e7447ad 100644 --- a/tests/fate/hevc.mak +++ b/tests/fate/hevc.mak @@ -141,6 +141,7 @@ HEVC_SAMPLES_8BIT = \ WPP_D_ericsson_MAIN_2 \ WPP_E_ericsson_MAIN_2 \ WPP_F_ericsson_MAIN_2 \ + WPP_HIGH_TP_444_8BIT_RExt_Apple_2 \ HEVC_SAMPLES_10BIT = \ DBLK_A_MAIN10_VIXS_3 \ diff --git a/tests/ref/fate/hevc-conformance-WPP_HIGH_TP_444_8BIT_RExt_Apple_2 b/tests/ref/fate/hevc-conformance-WPP_HIGH_TP_444_8BIT_RExt_Apple_2 new file mode 100644 index 0000000000..fcb1d2894a --- /dev/null +++ b/tests/ref/fate/hevc-conformance-WPP_HIGH_TP_444_8BIT_RExt_Apple_2 @@ -0,0 +1,8 @@ +#tb 0: 1/25 +#media_type 0: video +#codec_id 0: rawvideo +#dimensions 0: 1024x768 +#sar 0: 0/1 +0, 0, 0, 1, 1179648, 0x78e55a69 +0, 1, 1, 1, 1179648, 0x5babb3cb +0, 2, 2, 1, 1179648, 0x65935648 From patchwork Thu Jun 30 22:29:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36560 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp620368pzh; Thu, 30 Jun 2022 15:30:35 -0700 (PDT) X-Google-Smtp-Source: AGRyM1uq54S0eQdBF0E5gviOX3nxSPfW5XVwvA0rGyB20T1wPxC0oeJfPmYdluB7FI3VpmalziA4 X-Received: by 2002:a05:6402:2312:b0:437:69ec:adef with SMTP id l18-20020a056402231200b0043769ecadefmr14479212eda.366.1656628235397; Thu, 30 Jun 2022 15:30:35 -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 gz1-20020a170906f2c100b0070397358bcbsi12613268ejb.33.2022.06.30.15.30.35; Thu, 30 Jun 2022 15:30:35 -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=kmnE5JUv; 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 DB39668B74E; Fri, 1 Jul 2022 01:30:32 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2096.outbound.protection.outlook.com [40.92.91.96]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4428B68B737 for ; Fri, 1 Jul 2022 01:30:26 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nIhIxvjGHTGfCBAPz7THvU1nmNpkaWbpgtTNunMJWzJc8adnpnOe3FVV+qKs6VsFbwhYDjUgX8hvX1eJ41+GDBN++ej+EqydEN14BqvIWdfZyi99cafmf8zmsx6mlje6g5ErPn7awTzt1B6G0/3g6mhLa4JOfwMNqLEoMyB7/IbTUADp8JJ7h2vdL1bGs/mozheHqzntM6NBYRY+9vtrEU/W3q0IA3Ca63oXhR/zuHOct2cmo/DzAdHswIEZVlr5mu0ZgDhk2iMVYJIA1ENcTumzcUfrTCyILX/VAJiwtDSlQO/zJgH576bcxu1AZ1gFRCkGtGBhadIA+vswdFnIUQ== 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=aE37ogozsoHwp+yoYMXeKTxtDi5aLsrmfpzkT+o98J8=; b=L9ydD/Ij6HLiXggIVZcwr+o4LfGFuIetAswkaD7+P4W+WmccsUtzdNdA81gvlC1koYtWbYo2Tf8yR+5HLCoaeew2nVpkc82hGhs6C2BLRvUt3pJHXzGYxyhcAkNbXNfFT1o4wVZfib5e2r3H8QfokrN8JCr1NcGUaKDPAm4G3v7AuDVu4Qx10FmS9DjOfYdjj3TURNWPLQ13Vg3PNuxlphCvzfAAK4nZWpwp/ffhEXMyvBCJUSO0yJOIxSJvBBamJ+V3ZQ8VEVZF6h00ne50jq8tyWsjFdpByCWdSfzzoc62a28KJ9OPywbpDtRcLo7gk7V33kd3htHuqwb9j9HkdQ== 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=aE37ogozsoHwp+yoYMXeKTxtDi5aLsrmfpzkT+o98J8=; b=kmnE5JUv5M0ao/wuC16znenwILIxm34Mfhgx//Vc4wyf540hTIEYX5w7G+vZj9d9SSa7GlIR+f8U/7hQroMfq3N797yzpOyxgDWjulvOj4rww8AADbf9lDodJN9aSdjminxfrrBCubK70sc+1La8JaWpNfQCg4lGvV6z/dZhP70jECMDmeLYmim9qOVWi/rVQyGEEptuQ6uwi9vqSZHajj1MKtfqH9DppdPz8Ro1Fn7Mte6Ak+JrFBYiQGqLQy5tVx6QGa9cozqTjT5iKEwg78dqVdh19ZagU/XXukjGEwGuuB03JRLQNhSkg+eUQIgXm9/sgi++jxrJap8DpLBYNg== 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:24 +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:24 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Jul 2022 00:29:34 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [iOI3Qq6pRJqNFFC2KC0bgjCR/etbDIS1] 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-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2048fe46-5799-4136-d0e3-08da5ae81fce X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiSAA+E0K/sYrHNnfsWcYQJjY1Ii+FwxC5z9Brwicuvnj+H1xsaEFWyolATPOdlCBaHRZ9r1NyFCezYFyjFUBSd9eAYtcNQAaOuZbQZiqjysCzb5bNqTMtp7/3jFTkuNO6KWhpz3u2yav5VbLwb0UKpaZSiaZogOrir19JLVtwnP6H4Q2DWwcF9zNQCgg2z8S+YCqFLGKGwyZX4DlE7gLHTWknmNIBLSGUbiMfrkxG3rGw1Rpk06ZQXdYBkuujv+s0clKL472yeA+90nRbsXjwmuKnhkZBOa4MYGM3nHJMRM1GpF51H8v6N7ZO0BcbVDcz8KMHEYNf1UlUqLmgRfRwnJ1R6RvBr6USe/r5stDH8jrwHjwGwyyu/zYj1/mjN1XQ5MSPTWRs0ZpeXNIju1EgBKedNy83P87GAdBdsK0Pvfy+7d6PuWX9u0s51unEYa+DPTzToqafEPIb5pP/4C6EFA+/OX21j2JxLVcV+4ScDbRA/ku+2q0VJERdWPSIEzzszBem9AcvclewgmR3ateJwmAVJRtt3A6TO/J0nGOiARuqZh2gZN2pnoBiR7uDT5ZhJAn2YkDsPfYcmvCCOQ6dVyL8J1kgJF8QssPIY4pRYTdqNVfZjzuNrnNVANsyy4H1dkjIEEzFhJm5lli4iL+hZrJ3697ESpDvz2vbEo5RF7PBKU3MWi8Jbd5L5a6/QO64TPNBg3MRv7b+nDKckYdIqWkseX+hEypA107kzDXYyO7b/zYiBsZiKqK7aMxIWRE4I= X-MS-TrafficTypeDiagnostic: DB3PR0102MB3546:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: bNtTdPX4MJWBNlBWd9MiPXo3WDR0B38Ujcy27rvP4XD5AGXRTjDVI9U9xHJhFEbhUBvKrCDKmtMtgd/ehcNT2d8jYdOw4ypk6msEGg78ZB1ZuNDR9p0YJXb2bJ2NXxUlm+kVgY1+F/LSCs95jYFb/KCy4xn9mx/kQlNoptuI0lI5o5CkpvS9pncKgapRd4uk2POmaa3rl0WbqjT+CsESM8h5Q4qZlWPFEAL4jvdVi/X/+I7+kelCK+1tcFv1PWyvhcBbid+PzOgF7C8lzcAcP/pPQwHGgx0e5Ep+3U/Y/TbO9LPCFxioTTSdJgjZ4m6Ze+aJOuGUfu8b32gVHBReHVjmmvxk3r4bE/ayFjBrFlQmp0YAqeL5NiCa5OlgqrRiZe6Qh1JfYnj4mBIo4S0KhuZbPJpoW3pKyYqZti1tiTBhLs+0+YAs02RwE+qfNUoLuIHYvsC4/MpY21WnA+CDcGrdXpR4t58CetN1JUgejgbZ1VCa77ghLfWVMtOxLGpos/kDpXZ6emNYeSFrsqSe1xCqLWOtShOP2KQlf3fBJjG8NQHWv71xG/hIiKMBa++1uqHYhodrRrZBvcdofHlGwiIcLQc3O0KSKWciUGuZAusKic3MVnTIx9uSazqo9WYfTbs9vRk+zJMayknD8Mjlh6gkmgVdYKma/p8CjxRXuSZPqEldt8dkwZDOKSpi/C4p53JjlWWbsHS2DsNpdEzN4A== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: A5517k19PTntZMQHUs/cGHDS9mf6IMwq5Ksg///KcxLbP0nyY01Y6Zrp6q0f5eMBxnlRJvhKylT2G8ziGwjXMSuOfT/2vGe6MVOoxijwZbG+4n1DAEbb0458xI8wc/gHm/vjjC4Grpi3mMfCyDR0Exu2Q0NXhLWM3wtAME+iQwRtAtUKL8RimC+8TSIBF6iTqXCkQn9mibCHD6kFD7FPVGqMJBKBLi9FyA2U3nTxcopzwHuOixoWomK5eOP14ODEMS65HRQBwbJj9/o6ntgKrydfAAz5UAkCKB1aHo71STkgqArrMLC/0c/1snQFBW4yNn1CLQec6mNZoJPk+yVtz35dHuu3IfMfVgzUTVplaJ27VuC5HODi7+ZbayHCkoMOxMG2TXMt4uz17laqC2f/T4ZR9O3JLBvgb81e2qV4Rcfvi95QR5tCCJRv/j0M8+i3rjfGAkEyDYyEOgsWfIfhU/Tq59v3Qv1lKPe2I3yIqRKXYrfxCCG9BDen4S7gFv5ctxpVn2RfeRqdHmLOezOy8YPM/GdNrqqIpk8pCVvjFnaGw7/0hwmm2ghYnME/r9jfGC3t/PZnmn5N4pSv+FSxfXXabpi5aPceburujWngsY+B3T5BjLDhTj6UzWiSKmMIHIz1ApbVzzm98yOWQIARLhfpUODfBKQbr/BOTjsJDVXAfzndXMBtYLqAsgTOt6nSy4IKlSacm/U8DuYOgTYteJxWoiMhn9WcbMutamLUO4D2nmS1lTo85vtaE5hYoAp6U4PQQK1y57He2bIm+KNsjuHmP+u/+h4DuqpEcS1WpJyMpOXcHn9eHKzARlnrEK/4MhFAyDdAEjE8BB75p85TDKA/VU1McoNeDDJ/t0fk+Nm181RG3fapmy7KnS3XYrWUp3byLG+JlRwy+LTagefHD2EB7hysZjpkn3OQcC/ICYhaI2cHYsfloQ665KGYlcKT/fsFehhJDHrBQzykWRqQN1+8fgXJRl+X8ORv9HpZK2l+SgY2fTETb2I+ezWt1dXY+h5bi8B90MTSpUOSfU073sOxonhFgq2XOuj8SCTBdwDZkTXgYwhE1vslctVNnLpPBe/+i0PjUJqk3eHQUTftBs8tnUs+MneiAC8xbvmFDumLbgZE1Lv035hPyjijKVbVzJYIpVqldiVKx9xsVuOkq+xMOzCCkLfBQHYG+BnXe+yv+OrJWpNUCvjQD5Vbr//jIRBoE8jVBKmovoLJ9ooKAdXKIg5HUovlZFpvJyCfhXoAtHr0VuBtKsrcfd67stHXK9VzQUg49kLk+xWrqnm4cK2CnjIaY5V7xGVVmmoKExo= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2048fe46-5799-4136-d0e3-08da5ae81fce 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:24.1250 (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 03/18] avcodec/hevcdec: Don't initialize HEVCContexts twice 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: +2LYGPOUebF9 The slicethread contexts need to be initialized for every frame, not only the first one, so one can remove the initialization when allocating these contexts, because the ordinary per-frame initialization will initialize them again just a few lines below. Signed-off-by: Andreas Rheinhardt --- libavcodec/hevcdec.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index f222f20706..5ad02742ba 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -2661,8 +2661,6 @@ static int hls_slice_data_wpp(HEVCContext *s, const H2645NAL *nal) res = AVERROR(ENOMEM); goto error; } - memcpy(s->sList[i], s, sizeof(HEVCContext)); - s->sList[i]->HEVClc = s->HEVClcList[i]; } offset = (lc->gb.index >> 3); @@ -2701,10 +2699,10 @@ static int hls_slice_data_wpp(HEVCContext *s, const H2645NAL *nal) s->data = data; for (i = 1; i < s->threads_number; i++) { - s->sList[i]->HEVClc->first_qp_group = 1; - s->sList[i]->HEVClc->qp_y = s->sList[0]->HEVClc->qp_y; 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; } atomic_store(&s->wpp_err, 0); From patchwork Thu Jun 30 22:29:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36561 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp620455pzh; Thu, 30 Jun 2022 15:30:45 -0700 (PDT) X-Google-Smtp-Source: AGRyM1u3c1hOpCPEbemxR456R5OsCBvNtP+UPlgwGa4TEUqYDsfB7UqqinE43Bud8hRt9k31/k32 X-Received: by 2002:a17:907:16a2:b0:726:abbc:69bf with SMTP id hc34-20020a17090716a200b00726abbc69bfmr10901078ejc.363.1656628244870; Thu, 30 Jun 2022 15:30: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 bq16-20020a170906d0d000b00708423d4250si9184040ejb.228.2022.06.30.15.30.44; Thu, 30 Jun 2022 15:30: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=ZfASjjRW; 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 DBADF68B75C; Fri, 1 Jul 2022 01:30:38 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2046.outbound.protection.outlook.com [40.92.91.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8279668B75C for ; Fri, 1 Jul 2022 01:30:32 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=f4PTynvZnUOVwV9BcfmY7a4zL8YE4d30JywHQP0T1u8DQ1XtLk9sYr51LjOz8Yw1/we6RF4HX5RuYbUFt/VQVkfynuf21qBLyi6lauhYxXQxGHkrNz+hLhmy4Qt9QNH4qHkL1mtoRA/HN5nxniNA4+n3hjWIYVqFqg7n4mqAlbYe2TeiVHliD4f/MU5W2YaBUts8gBQr4J8UfcG3GSiYQv8sPH3G9/tyq3ehKtN4OIwY8f5BIybxNG/54kEr7n/xxQVw4jqOMI1ezcyLBeEQM3PjiA00RBnmnbCSbRbHQjAScCbNmT50rr3T5ktu77q3C4FwA7L+sY+tqJ3Uys2yhA== 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=PL8Zh1WNrJWkZSNNg3cSlaLlqaNfa7jH+oSZyQBPh1k=; b=PdvN14holxkf7FLWOzY6P4XAhGiIG27jTHHg9uHhwfhZsLxbo6QrjIsVj8ptQmMj+9TQjSAuoQ6VegmsZXvJW12TRgV1juwCB4eXfVPbE6I/uEr7hve/AcCvAluUNgyX2sMTipMvwVVSUhGP82OtETXdId8l5/8nRid6qP/lY3xo5sk5wKP1h1URcgcT14ogds8tQWmkFtJO0grv6FESFazd41f6ibmFZjcbzWQInIVO9Lz97NSjV09IhliR1NJXWcA6/o16HAFx+oChh1wRNXebIsIUZeM98S9egRI1utrTt5vmKh2BsNlgYZ7VwuKGNcu1wZir4fFZXPi7fTMzwQ== 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=PL8Zh1WNrJWkZSNNg3cSlaLlqaNfa7jH+oSZyQBPh1k=; b=ZfASjjRWE4zcjYM7meTGaDbkEwgggLWqDtz5y9uiq0qiopmA84ffWWqLEJ5Yas/cn4sA7HSmyaTG4ic1g4Ut6K2zZfyRCiRfJFaMc4u2pDdNAlWPAajLKMOm+YeF6agOEKLE0VmAPNXX4Oh9WuF8gWpSLvd7qhIDugGKptDz5E5NqqNYM1U0FcgZFQrgF9lVWThLFjdjUplImrJnk8ff9SS/1HGYFdh58oiwj7y4fwgDRSJYA9Cbu31HO8G+zx059fFaz3e9zcRDyrosGQ+xA/Hes8UiP4dd4UcShVU69Ud1vCkRARYwUgY+MFtI2uNSFP/vub5Lti+wq9SYas+gLQ== 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:31 +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:31 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Jul 2022 00:29:35 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [lAPfEj6l5zAIkLrAOXY2YtAZCOlI8eRG] 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-3-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0ee0dbf2-c510-4d65-b43e-08da5ae823f3 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiSAA+E0K/sYrHNnfsWcYQJjdd/B0Jkax1nBlI6ePTwF0vapESwIxI7AP7vy1yr+CshD5Mso6DVBoICPCuE9sga5eudS+ptsKN4Q8mZjptJ+LcWJHl1tIoQx1XM+FZZsuaUCxERwf3+SxETDV0ttst4bjTF9/s1ksvMh04RvPuXrkHszaZBxrFGk/dfd8kMq7h9hkjhEFTWiguz9d1RWQ66P706yAs3k7rQjLxgILBeqEhyt/3wduXEQwaS89g32/3SWP72aozQY5Zj4AuDK4OJ1Ohov1NgK+jZoxVlqUgI5JShQX96Ch5WOSqJNQCfir0L9OUI5HXfdXTB2iYFciIn9Y2p7avBmLpgdyJSlTe7XcNVAPDHzlN6psQqLMj8hGHj1qB5B+X2BawO6DTc6ePmqxbdbIR+3Fn3wEgFEqxaq0wG1scsQVZVvSsQUvAsRamipsu5ID7escXqQTRQGdDqgR0+LKWnTiY7YVenaKrlwS77oDPE8BkXdZP4LyozOIQo65q8SCRCSRZTZLGo/9bpJMezVIZY/jjmqbfFMPVrJnGOicOTO6SPlToLONIka/kC91XbxgioUgpDNDABeX7gXTe4mapq6Bx5aKnSSoo5/IdIh4vZuGpH1Hvhhab0+bWc9ReUetfbeaaae3tSH//TqlrS25FhblInMlj+6VSxFLo0zPAizuTKweCZzMnEi1HVDyfGXjcPxtnp5mp6LDXYcqdzGpu+hYVs7rr3PXjDj5ADwsiF+Q4iMnTop1Tqe1Vs= X-MS-TrafficTypeDiagnostic: DB3PR0102MB3546:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Ojc66UA7pQA+R4aISBgbN63sSWVh91f9k7qK6+u+VANPkU6WxJgxVrZ9d0UKwDNWyY+a29HzilWv4R5oQRBTyS0JY6VscIDbkJxmpT4adTaVS43me3rtfEj1yrAoc+PMomJe7vH/zyj67Udg+CrR79U7khfmvMhP94lFOlAZM5zYd/yjAHCftnnLMFhCMdM6KfScmEAH/slg2H4UukPP6xmoWxVTrP/wR/KsRqwWYIXXJx0FhSl7LJR5H1nU1g1rQg9HIHrr3btPxJqHDZAak/Bte1oQdKbkUO7CKsUYni62DZ3hV3gNpl5kaDUHLlOrhK8rBRBorboYyqhxM4bPESsGZsp+4FHP3gPKH+Bv+JnOKVSh4pdKL7t3beScfutHjBNQN+NQdwbHlrQ4JJ5Dxrx2gIjiuvw238acFTeccBCLRF4Ip1kys6xKhZcM6p2418EJoE5Zlqj5of//hPOaS2FrSwdDcUCLGQVByM9X0tFF0Hb5Q8/pwmSluErtRhq8ka0gRAxLr8NCsmsdSGQQbVEorI0bm5ErmX6yg+rE2ohZxP6kktQgsF3gXJBAxJD+5p2ujgwUZxHsguicOy9YGowFIMT6Nll6NDG49nKyevhsZ1yPIDp2640c1fsAWvJKRXXWTNoBn71W9q1VUM97q0vV5vrTJROuwDWT4i9ZlYsTS4xEP4ZCcn33JmciQIZo/8VGwQYXKj6h2Xb6za4hYg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: wxcF96wMMSt/Wom72ZbPV7TwPoKUB82jvvsRevZ6AsAUAi7IDaE3BpzacmvGqL0No18Xd38YuMgLHFn9bkZm9K8Y2OV6414b8nM24YeuiJLy+Ag27zYdn33II1EvYfjW80VA2gnlY7wGyb4SPLZHVCBtJTZgefZ9kBGy24hM/CXewc1cI1ABxv1WiuefZ7clM+Ms6HZLjRC1XojPVWPXf8LCeoko2XcPTY7UOISWcfQYgfMNz+JXSSQ0gYGiM0ZijhRv4/44LuSjsCw4261y4QDRhB2zNYBUO7Lw0qGW+R/7iri1Go2O8n1+soMKliH/Uynh6xi+pYrtEbO5xdU97i8HRvrQQEqtvQmeb8xnjuOp3/VFURHH7U8NAp/mpc3SfhBAj3GasQWWJfHlMYHyeBb0f392MSdO9U6wtGRAic8WXRmFrU2ph0SaQ4ed8hCfnLdIxDL9aWaS+GzqthkvQFpeL481p829se0BdZF3WvwhyLlgxXyPh+5d8/BjEw1FMNr1y/Zy5zys5sw4Kry5KR+7A+A2HLj0TnTzAOfOSXZsg9EQeD2gDql7vqxWPFXqNeQtRmvFK7Oc3kciNHt5XjH54GM2pGheWzSRtQAivvhz3hfedU0LxP1PpiphxnKBL1W71ohtntslplYnkDlt/HsTj/9zeDDMT92d/fUSJwodI/getdrUli0NE8BXSsS4UopbTA1UT23giSsBJQ4J7m9Ywj/VpYkyt/m4PcQ3e2nxCWDDWhQhFdYkFEoW2IRBYnsXqY1euwJWWfRzrZ/3vOqI9vOKVllGioVQPic1cSTbpWsamOdVyx//FkvoNNG33O0bd3zAYdumhc4KUN5yfYsllNGYr934DXirtD+8NA1UQAZpjhlCCnfvDrh30a8NCVA+xzl5JZr0Hz2+l6D/tGp4PXgtrB4zn0/K9Le+cebp7mhOjJnKHoUbhKNovTZ7h2elBThFrd3kFlMvA6yASvTZo13cw8uK1aGmi9l2tMqPdLHdhQOnNt75sCXI9nyrnVJmRsmOWZlyqFr6mfmxbt0riyCW0gdsjcM8KCfTku5/SDGKZDVe5bUc+iB+dBp7cH6OmaS+OuWwtUcRLRcwpWfIcXbDChwPjMXDWIS1wh0MYYam8U70nBR/XRdGahKSxonSHAm5z09mAjqGajfH0mdgUcHDMeKk+mf461VltWD5AS7AiYSm9mr6Vwwn/rEgjEbsQN59PeWyQx2o4SUXhfNVxyQrHUJOYQ4ce5fLhrgQoc/CyYVd3inZFJXEyaLhFk0AG2ZGP9r8s8F6RSb4d127XZK9w1srzNUQPNJCrU0= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0ee0dbf2-c510-4d65-b43e-08da5ae823f3 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:31.2026 (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 04/18] avcodec/hevcdec: Add pointers to logctx and parent ctx to HEVCLocalCtx 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: mKViGnW1eYHQ It is safe for a slice thread to read the main context and therefore it is safe to add a pointer to const HEVCContext (namely the parent context) to each HEVCLocalContext. It is also safe (and actually redundant) to add a pointer to a logcontext to HEVCLocalContext. Doing so allows to pass the HEVCLocalContext as context in the parts of the code that is run slice-threaded when slice-threading is in use (currently these parts of the code use ordinary HEVCContext*). This way one is not tempted to modify the main context from the slice contexts. Signed-off-by: Andreas Rheinhardt --- One could btw also cache the pointers to the current SPS and PPS; doing so would make several accesses to the parent context superfluous. libavcodec/hevcdec.c | 4 ++++ libavcodec/hevcdec.h | 3 +++ 2 files changed, 7 insertions(+) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 5ad02742ba..111da42836 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -2661,6 +2661,8 @@ static int hls_slice_data_wpp(HEVCContext *s, const H2645NAL *nal) res = AVERROR(ENOMEM); goto error; } + s->HEVClcList[i]->logctx = s->avctx; + s->HEVClcList[i]->parent = s->sList[i]; } offset = (lc->gb.index >> 3); @@ -3646,6 +3648,8 @@ static av_cold int hevc_init_context(AVCodecContext *avctx) s->sList = av_mallocz(sizeof(HEVCContext*) * s->threads_number); if (!s->HEVClc || !s->HEVClcList || !s->sList) return AVERROR(ENOMEM); + s->HEVClc->parent = s; + s->HEVClc->logctx = avctx; s->HEVClcList[0] = s->HEVClc; s->sList[0] = s; diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h index ff2199aa5a..a4cea2284d 100644 --- a/libavcodec/hevcdec.h +++ b/libavcodec/hevcdec.h @@ -428,6 +428,9 @@ typedef struct HEVCLocalContext { uint8_t first_qp_group; + void *logctx; + const struct HEVCContext *parent; + GetBitContext gb; CABACContext cc; From patchwork Thu Jun 30 22:29:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36562 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp620558pzh; Thu, 30 Jun 2022 15:30:55 -0700 (PDT) X-Google-Smtp-Source: AGRyM1uviha/M3xVaa/WZU7av3Xzy1pk7g73RZ1Kx0zUtesnx5HweDIYzH15Yjhi5GLh3W3as90f X-Received: by 2002:a17:906:c150:b0:726:b82e:ffd4 with SMTP id dp16-20020a170906c15000b00726b82effd4mr11443963ejc.19.1656628255495; Thu, 30 Jun 2022 15:30:55 -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 cs12-20020a170906dc8c00b00711d9021212si22983302ejc.566.2022.06.30.15.30.55; Thu, 30 Jun 2022 15:30:55 -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="XQ6/kJHb"; 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 C78D668B7B8; Fri, 1 Jul 2022 01:30:43 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2046.outbound.protection.outlook.com [40.92.91.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9E9FA68B77F for ; Fri, 1 Jul 2022 01:30:37 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=W6m5DbUlYfdEyqlDFUXgmEBYKiSMj/0qijp8vvFa2J88tGpMDi+dbvPc1KhbBfx3V/Rz173fJaPusO1clG5+wM/31I57U9dRO+2GzrAm+GEuAsXGu0e5w9Sm48/yKbippcCcQdD9++0Q/KCo/hJxDZiojU3TgASxJ2CbnFole8UbkpLt6CsT+bnqaX33rO3zzfk9N+zU1gwZHoPCfjZWU3AsX81NddJU46KawkugxoHOYwkEt1TFCmHgjzsGbw13YIhP0Tt2S+0PBoJYcsdy+fbdK1DQ2w43U4K4liaT2zKa6eoJ4yb7pK1n2iUIqLHhGK3HzWJYhHKUbeyOQ+8sAA== 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=ovuepMygSgjoArTjgd4auUR0pO7nNTKYQUTMzKZ1otA=; b=lch8gUFSLVz713EgOvTy1LGvCWEhLE4RsFXgZRCclQyq65Ty6elkFrbrQYMPxrl4r1O801v3jOl+OolWsHZCeJFxnbi/fzjMPSSRW9joNfPX+cwrxgHGEjvvoVV7z7jGhCZ3lN1/udXwTOdW7NZmNpgamjl2aeiS6fRKz8jOC9Kg2L5FikkqxZgCeFsPn7gOwi0k3stsw0DeWQpdA5LCE1bSWiLKba/tfrx7rqof0K5/m1iKGqH88mChNzC4c9lZKpBzdKSwbxnPC9PkxlwGIwsQDrPfPi6Uu7Mdn4NdzDX7h6h/KyO8694bLtlFuVNE5ZVJ4DAqTJru3XZzcfjTkA== 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=ovuepMygSgjoArTjgd4auUR0pO7nNTKYQUTMzKZ1otA=; b=XQ6/kJHbZ8Um/ol/MmqdzJhWw5Mh6XLbSIpoq7VK9oIpTjoHpgNMMz/CF8EJtD5TC+VKe2BVrBKeY1UAM/I1nKrObOYUfPok9r7Jy1rs0D5MKACYrX2mIxVDR5ideZgle3SONTIY9C3XEteRIy+Ey6EV3mVqEXU8nDfcJfR9qq3f8a6OPrjWhDcl5j7y2LjNzAxJHSGTaaFyG4ayTrk3MNjwUp+8cZfqdQNrArsp14sDfLDNAqadkunrNH7H5aTAdbndi2S8EgIoRgjMQsB51jJzXVEFtU9jOdYAhSbUZoYKHn/VC5ZZI+bS384isRFUJIC1rIFR+rJCZOHje/WfWg== 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:33 +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:33 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Jul 2022 00:29:36 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [sEiYgezVhSlV6B/8hv7EEhP6iBMIVVgb] 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-4-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 724ea7a2-c1a7-4dff-a05f-08da5ae82529 X-MS-Exchange-SLBlob-MailProps: q+fD6XS3/UIsx7KfB5fXwX9/lr2btQgA1S/E/O/N52vhp0/lQns23JRbmn2Q5ETIWjlKXf48qroKcETiXsVaJTa7VPXpSgDdlhvE05GnVntIDIsveJgg2oQjR5lAC7RX2FTKBL/3OxGNBA1rysAMHg9/smWo6SV2Ye+javlY9bzGaiRvxDgum82O2/CYojygF964cAzi3shOAJZgl40v8Jh2ROGeDmfD+8DH/3x7E3CIhR7XwndQzy18xs0+CtdcYB2C43icw0Dw9zjD5WyfqIvWMIkW9FBzFyY3R2pfmJeEVsElJfv6RNmLppUv8dzBq8ej5O5Bgrl/J57LnL2O1QK+gu1gTVbvY3S5pt1biIbzhqBryhy/ACzTBsLy53s6Wz/fYrfrSiAyk5gDlbkT/6vPwxfpi684NjKf+3KAg1T2sy0x/dpnniBedJiRkI/cFXcytIvLOGKAEuX7xD8l1fQp5OdgCl+z0BdPQVQbVs7g96bTw/jWRS96gA1Y8cXg2Gd1ni2uncwCPZy9W4dOrQhgySgwz5SFzGMuijiOkhe2CbTgDlqhpVjJMX1CNzRtNJFH1uXZy9ANjCLfW9Z724XlYMy9kYjgSV/FSCsoXgSA5U3X49fBcvUZLzNHpxkRdJNVHqFtw5Qwu8imbZZ/AIuJN1YzJsbYwn/RerA42ZYP7yN1RKHYawCE8X/7AYrd5RhmZKW5PB+0O7Mc6zWm7g== X-MS-TrafficTypeDiagnostic: DB3PR0102MB3546:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: POq61vfGqQEvY/itMtTX/WggbVO5I2jxF4qMVldBRiBQLcbjKYpBG0RjXQ8oGJR/AvJhPbCzZdFb82WFSFakPiNSScsW2M9quiWo8lj4txXNVomMhNSsEhIibUPAX4TtHd67R0jOEn9Vql3sMDC6GbXK74sD7R60WidciSfkmW1kF+9DE6NRqx+Id3EQd8E6t+v0YRz8YQbrRYTrM9FM0kEREOmnQC1CSJMgJtDEyou3VISXUdSFD2QQ2GRDhlp9SDe5QWKHWW8z7pGA3vf4qKP70hgllrvHxYrOs3hmJvrO7+/gxgYfbdwXs6bvaZqZf4jiraU+WES1qVlNsxxPj7vEQ/REXs+8t9xTnq9S12ysbj8eJE7kHq5sAkF9OMZ4uku4JO/gqyo5vwJJZ0UFeZ0c4UTLAn1EtmnoIbMGM1l7Ey/WrrravyK6dX1aFJHZuFw5mzSjF+3OmDrbh/7UEhUZadqg4/FnFNS/sv2ozXGbsNmPKqc420+Xticxy1WwE1s86jOzBQXfjAAECBPoaYm0uVJwU2pKOBI/vRtxCQdjWr+lhnwdTEbNzvtjt9sZwpKD87W/uop4B4UC4USNJTrU/MdJLXY7Gd2ZLw3mn3H23fF7/eZ4hjs5BBWep2fex0PCe7ONinF47DtR9q0J0i19+7vxyekfGwO5Ai4NL+7eLdTiUF/+Rm6gyYl2f4srnXxBEo2ErBvR3+eyVf5X3w== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: N5wHK/jMtjxB+0thPSubgWaD69umhV7s3a46OgrTJd0WYgJpeQWHLQYtcV3c2qVj/J7SkvCiz0sWdtX2+rrcrkvV7oN294Obx/23TcoyLut4fO5FBLqybqoEG0Kh6VCHNzOuBiyCRitiWBPIbg9vN/7MlmF+kLvvqy4MNFLMYlB2cn2+E9i7ZTOtyoLjstLF85kOIimsfUe93nB8WWafSTF1TkGBdT2HOBgK9SnSKihRAEYjhA3vNxZSGBUq411k2zUGWEFyTtArXUYWfAa8Yfljg7oHF/pjdU54w0LUkvdxCPZqhzcR5RGRycbyYMjN1tqeenEqXcirse4IqvDB/CEk00+3l23BqxNWjKT4sChRjRcSwBKkq3NPov4JeN3GczDtg80kn4oWX/Dl3eSl4czje8eDsMR+M+uhjiXZy0sIXF9sEFVROYCtc4gkQg74liVZJoA+Qh6MEWtOsQq+KlDH5bSqvbd5ltI+avK4Or+4Lu/43yZ2yWX7nAOQY8ePlafFaoypqFbvkm7h3fVWVMO/4xMXPv3puloFYDSmZrNNtNTnZa/3FOucvzck7SdPpXe1Te+KAOv13kL0wr9vok4sgfurR28H8Uwt5O1v2xklhXH/kwTvxzied+FcdNOVI48GZJW0r/RdxtEINjyARM/UcRuEFkExbAfG8fG+WbVl1nI5zrflMf6XDLZYT9tyTljm0N/evAXikK3h5HByaYBA4wU04uvZ7IYaIz85BXaAWT5J6auf75mKoF8cnJ+KctiYnSh7ir2Z1lMXbiVUscXXRmbnaplX/orukA9EQC7JHFwll5e7+JdZN3WKcxttpWGeXyXuK2LLcYnxNm+ttAxrpqlK71cwfEHfDbQnliFTKNxQd8GrPY7NqkJ7AGkdlyQo24FfpAGUAUt5kvQsH5yehOGRY91ldubXxZZVJpBI+s/ZGj8QpofMcihtTgEDSBBXSRPhs9k3IuSavPlRtnsrW2/qiPDYFs5vdQirReHJP3yICPwp7+ecQDDR1WR9g19zsW9Gkilo6BCoVqT/K8zjNZmmhrcqqDc0UbjBMvsnn5HTl0JpbzrMpA2zWjmHsKBf9pt5YsmFHdbsb5FthB6Lk4A8QPrVTj/OxAa+v8ozKD/CCo9cIxjz5gQORWtiDXV5oGW1Gt0zR6aD2f2bPm5zSzZ3sNcJG2PBP+aiYyQJZvKUbuOS435YLRlVb65b/HBR862mkLh7ufQioHDLXj2z0MlOXEnTElgSPMi7mUg4cwvMQHC1eeJrdlKDh1/bxtf0JCjOAQSyymOjKxPxo8AhA2uvH6PCiUsQNWHfA2o= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 724ea7a2-c1a7-4dff-a05f-08da5ae82529 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:33.1712 (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 05/18] avcodec/hevc_refs: Constify ff_hevc_get_ref_list() 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: +LKgt9j2HrfP Signed-off-by: Andreas Rheinhardt --- libavcodec/hevc_filter.c | 16 ++++++++-------- libavcodec/hevc_mvs.c | 10 +++++----- libavcodec/hevc_refs.c | 5 +++-- libavcodec/hevcdec.h | 4 ++-- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/libavcodec/hevc_filter.c b/libavcodec/hevc_filter.c index 1ef214b0ff..7b53c66c3b 100644 --- a/libavcodec/hevc_filter.c +++ b/libavcodec/hevc_filter.c @@ -645,8 +645,8 @@ static void deblocking_filter_CTB(HEVCContext *s, int x0, int y0) } } -static int boundary_strength(HEVCContext *s, MvField *curr, MvField *neigh, - RefPicList *neigh_refPicList) +static int boundary_strength(const HEVCContext *s, const MvField *curr, const MvField *neigh, + const RefPicList *neigh_refPicList) { if (curr->pred_flag == PF_BI && neigh->pred_flag == PF_BI) { // same L0 and L1 @@ -734,9 +734,9 @@ void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0, boundary_upper = 0; if (boundary_upper) { - RefPicList *rpl_top = (lc->boundary_flags & BOUNDARY_UPPER_SLICE) ? - ff_hevc_get_ref_list(s, s->ref, x0, y0 - 1) : - s->ref->refPicList; + const RefPicList *rpl_top = (lc->boundary_flags & BOUNDARY_UPPER_SLICE) ? + ff_hevc_get_ref_list(s, s->ref, x0, y0 - 1) : + s->ref->refPicList; int yp_pu = (y0 - 1) >> log2_min_pu_size; int yq_pu = y0 >> log2_min_pu_size; int yp_tu = (y0 - 1) >> log2_min_tu_size; @@ -772,9 +772,9 @@ void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0, boundary_left = 0; if (boundary_left) { - RefPicList *rpl_left = (lc->boundary_flags & BOUNDARY_LEFT_SLICE) ? - ff_hevc_get_ref_list(s, s->ref, x0 - 1, y0) : - s->ref->refPicList; + const RefPicList *rpl_left = (lc->boundary_flags & BOUNDARY_LEFT_SLICE) ? + ff_hevc_get_ref_list(s, s->ref, x0 - 1, y0) : + s->ref->refPicList; int xp_pu = (x0 - 1) >> log2_min_pu_size; int xq_pu = x0 >> log2_min_pu_size; int xp_tu = (x0 - 1) >> log2_min_tu_size; diff --git a/libavcodec/hevc_mvs.c b/libavcodec/hevc_mvs.c index 7477efcf52..516e4a6b7a 100644 --- a/libavcodec/hevc_mvs.c +++ b/libavcodec/hevc_mvs.c @@ -113,7 +113,7 @@ static av_always_inline int compare_mv_ref_idx(struct MvField A, struct MvField return 0; } -static av_always_inline void mv_scale(Mv *dst, Mv *src, int td, int tb) +static av_always_inline void mv_scale(Mv *dst, const Mv *src, int td, int tb) { int tx, scale_factor; @@ -127,10 +127,10 @@ static av_always_inline void mv_scale(Mv *dst, Mv *src, int td, int tb) (scale_factor * src->y < 0)) >> 8); } -static int check_mvset(Mv *mvLXCol, Mv *mvCol, +static int check_mvset(Mv *mvLXCol, const Mv *mvCol, int colPic, int poc, - RefPicList *refPicList, int X, int refIdxLx, - RefPicList *refPicList_col, int listCol, int refidxCol) + const RefPicList *refPicList, int X, int refIdxLx, + const RefPicList *refPicList_col, int listCol, int refidxCol) { int cur_lt = refPicList[X].isLongTerm[refIdxLx]; int col_lt = refPicList_col[listCol].isLongTerm[refidxCol]; @@ -163,7 +163,7 @@ static int check_mvset(Mv *mvLXCol, Mv *mvCol, // derive the motion vectors section 8.5.3.1.8 static int derive_temporal_colocated_mvs(HEVCContext *s, MvField temp_col, int refIdxLx, Mv *mvLXCol, int X, - int colPic, RefPicList *refPicList_col) + int colPic, const RefPicList *refPicList_col) { RefPicList *refPicList = s->ref->refPicList; diff --git a/libavcodec/hevc_refs.c b/libavcodec/hevc_refs.c index fe18ca2b1d..6a70c817b0 100644 --- a/libavcodec/hevc_refs.c +++ b/libavcodec/hevc_refs.c @@ -55,13 +55,14 @@ void ff_hevc_unref_frame(HEVCContext *s, HEVCFrame *frame, int flags) } } -RefPicList *ff_hevc_get_ref_list(HEVCContext *s, HEVCFrame *ref, int x0, int y0) +const RefPicList *ff_hevc_get_ref_list(const HEVCContext *s, + const HEVCFrame *ref, int x0, int y0) { int x_cb = x0 >> s->ps.sps->log2_ctb_size; int y_cb = y0 >> s->ps.sps->log2_ctb_size; int pic_width_cb = s->ps.sps->ctb_width; int ctb_addr_ts = s->ps.pps->ctb_addr_rs_to_ts[y_cb * pic_width_cb + x_cb]; - return (RefPicList *)ref->rpl_tab[ctb_addr_ts]; + return &ref->rpl_tab[ctb_addr_ts]->refPicList[0]; } void ff_hevc_clear_refs(HEVCContext *s) diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h index a4cea2284d..271a55df2f 100644 --- a/libavcodec/hevcdec.h +++ b/libavcodec/hevcdec.h @@ -587,8 +587,8 @@ void ff_hevc_clear_refs(HEVCContext *s); */ void ff_hevc_flush_dpb(HEVCContext *s); -RefPicList *ff_hevc_get_ref_list(HEVCContext *s, HEVCFrame *frame, - int x0, int y0); +const RefPicList *ff_hevc_get_ref_list(const HEVCContext *s, const HEVCFrame *frame, + int x0, int y0); /** * Construct the reference picture sets for the current frame. From patchwork Thu Jun 30 22:29:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36563 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp620652pzh; Thu, 30 Jun 2022 15:31:06 -0700 (PDT) X-Google-Smtp-Source: AGRyM1uqZB50w5P27+NYyglatQJXpxMTXahWrYF0hXgw+OeUrIEDQq/vvM+l4OwC33yISI0uJdYv X-Received: by 2002:a17:906:2001:b0:6f3:bd7f:d878 with SMTP id 1-20020a170906200100b006f3bd7fd878mr10814898ejo.133.1656628266310; Thu, 30 Jun 2022 15:31:06 -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 q20-20020a056402519400b0043762bdbbfbsi21699227edd.621.2022.06.30.15.31.06; Thu, 30 Jun 2022 15:31:06 -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=L4lZsRok; 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 D718C68B7D5; Fri, 1 Jul 2022 01:30:44 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2046.outbound.protection.outlook.com [40.92.91.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CE29668B7B5 for ; Fri, 1 Jul 2022 01:30:42 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mVsVmHk02xVH3MuGFjv7kWwI42OcXp3KoIk7I/fq4riJG7e8M7LkDNtGKr2M2u/KDFOfjkKlRGeP5h9xIEgqiTFb1hnF+g/s7a6M2yr8flfnFBO38RAQMDBS02CrO95oPCmR+wtXlMsjYQj/SokGYrCXzOnuIzxw86jAe5HSLLJFpCKcOQ+51Kx48/XDj49XA4RC8fhmIPRspLhnVrfpr8hoG4LhrBv+2spMhHZyr/3dQMNU+jCXz7Ce2JGwtx083CKMUw5JCdQMa0r+4mVViS/BKFxis2ABCHhH+9SA0khh7EAUH8eRSaq/yXF/FvMrNOzcVreZUBF++bal7Zj0Uw== 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=o0calZ9h9ub7AotYy+Bgraalk8VH85f9EiVw5BBXYDY=; b=LFXP7mDknDhJN2qGuUIOEMN4iVh+92u3JHoGynxIwW/B1m95WlYZQGdUk8sOP3v1DTKYv558Y42NLGEr3+7OI4bOaoIXKZxY0TCJVTJbq6Zrgq7UCq+hdzUGIb9ohkmCmIb9IVUk0Cfg7zsGhBqR3nED84qCTL2aMrD69kreeEMfBmWSUfTwz22Bmyc5zXHAfijAmwN3NsPcdq0skXLDb4UksYS3uR7nQxY52VdOU1xE3GiHjz6Z2SenrdIiEtkA9Nyo0qKK0w1DcIoUTz3EPN08g5EDdjcbnMYdOtsAJn7nUQLCkht3ibcEO0SHyzkI44FPg2gmUlwPZbuTRYbftw== 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=o0calZ9h9ub7AotYy+Bgraalk8VH85f9EiVw5BBXYDY=; b=L4lZsRoky85zh1xKy0PVSGYkBPSwrIgGA0yVhN/UEI8Q6xa8VH8mkl9/Ldj+8U0utHh4obEO8+a7Zzl4kv7/PW5UraCYi9V1VJaLgqvKTsGf+7PPTnE9O0V5DI3n8OG34Ff5k8xun8RKmC1cpuvW0V1Gf2CRcwjIAchYXNDhkwY6JKqQJ1Bm5WsWqg2xoHWWbRxiAy6T3E+WUze3jtj2kF47JH5ZMKS0cIfkb5+dC3a9j+qzvIyxQ4zl2tdfCEwzqwhiS4WF4OaS5nAcVnHCLfktpKXrGRXZI/HaRq8lMtJlhK4+YQaD45QDYw6hD1UG8JJhhcHaxTQytD7dyKqbng== 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:37 +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:37 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Jul 2022 00:29:37 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [e3IH7DfzmQKJ/fNtH2XxUUpquFiWhGv+] 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-5-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a6d0e641-848a-4072-891e-08da5ae827c7 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiSAA+E0K/sYrHNnfsWcYQJjxwqDAuEhyyy+JUiT3z0bVYkY9tWBBjMj1qrIwm88b9FoZRG/v7OjRpe29BMrWjNKmG0DOxvPY0+gJ4frNXw5KjxnNhGArFX/LXfFa8zA0G/rJZCyutmK+/egoFQh/Vt+eNpz4sCOLuw90IpzCv8BWZofaWEIPzMmlRUgkD23kgqvBRweLOG+2K+MYJW3Efv9tBY94OzWYXLmrPV/L8U1yPJoPyTqNzeUOLAoCxKuHcVIYMmD/JwVE0fS2MIHx3+L4dHTsg1194Ymin/5pbPihtWjg1yZ6OBCtq/Redmi9Bh0dAgp+uRPBMC8nAIkgXyYv62SG/jASMYjOHo7bbpLVIvw7oNq6bAf2qh9GtFxHNcHHkBlRdcgOwf/3epRwSBQXHeEzfnIfu+o+u+x73SCsXf9+o3AVXG3Dc82es5f7saVX4DzK+dWb/rh3jV3ym7ZUE2epev9puMLotFtSULQomk/01X1FO7J6SBoDI+kJNoEnNIrJpury3tMTpe1vlHudUaCsfQ0hkHzTo6EzGXfn8KAjBHhh+cTyli1xvhyAQt9CCz57r+/SBw4jOtkilQd7SR1aTplToww6zz0cEldQip/mxYSN151b4gkF51ehNSlvt4aBF7Ux4qHAJolAgRX+EXNqLC3fQLifsgqITf/TDa9VbiRI03WFdKYVzfWgubuoMVBR4ggRviWwzQhakd3CI0IPktvyIHz+RPYdQq282sfvVZUHWf6Hz54nu0zpoI= X-MS-TrafficTypeDiagnostic: DB3PR0102MB3546:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: p5B+lKD+ricbmWnfJJ2C8RLgP3ePqr132zOWyCXP29cEat7ckBsND0ZXwDa6XGTMlP1CuJJVDBKenuL1Y1RQTdNQEbWMLIPSF8nj5YYaGXgvlCMx1M5ffNORiCy7oWZF2cmBo0G8lDZtGN6jinaYFrOuQJgYCaKEw1fmRb1cFP2he5qrGgntb3a2XHkmwEW9b17EXs0S48x4hxscL1rU6noi4UjvLIkNDWnoeMzEEYnireVqUnmyydMDTJBLZv24ua67qIeDAOWjzoe5KmyPEdb6qqWVX1e6EcEw7oK7Z+oZolyG85bkam37lhukQTZNkFGDObbNC8Q471PR9OV62JQuJL4VkNI+Pj4B8KD1jO9opG39vu5nQ8CUSaeLW3U6rgYoKXkUNBEXsHCYugxZeN2vvGQKBBzAySz6SbyaWGYFqwnEOVCRCshRvKzqOSK6y/Xb8GUeHrcsv8nFE3pJVin13UVQmaCfpyV2SH7sra363irVlrH9d8pGkLaCxW4/Mss1CMlIsryvbckJ1J/XwYLeOKTuh/NrYUMbIDf6CAmMD7MGLRcMg7OOUZSf7Jjq7SufI1vr6zjhsg/eh8dCIUQGK++Wl4WXj/rkhQZ3qGzqN8zBXBffjXx09W77j5liAQyjKVXsQh5suOGoKHSAk4453LFqetMsHHVZP7BUxx5iW2t6ImATz/dxejHQ6EhJGfhRMshiAG1ZhvN70/XMFA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: zrSCdtuXQ1pExJzs2I7o2mGI85eHuZM/5x53IdLPNLpZoNUMeMUSU2F/x+4+ojcVhh35LzpOZQPYdHmBADvnnv0ff/7r/QNKFNaFLtEVkX5O3xIiYk8K2+BnaNR+D2aghfTOy366U9hg+Iwh0azyP3mFo6VBNnBg+v3QyR0BLp1UBSh7tDXUFs42OiL0QC4qPlCvBrHvVfw3iyCEKTqhwK3j4NDtO1pQN6VmqXArR2m38SUl7Qr6gci6ehdZChVYn2S70X9eq6Dfg0yFraL/VMq0daahTMlDsjdwegUphoWGrDxVvJGYsvhupAaE0sdusJ1SMJAeOxj74P12aBKPCEa8xv02YccP4dPy7tLmKb299TomqvimMTDY5wCxd4ncqbJIfmbAfY/nh+KZqIihUN/zX/7nOQoLNnMsKevBm+EfwyyFF1ULR02X4sO0x6X+XLjdE0IqoMBg+41gfVm0gXNWEVA5yebPDFlQmIGh/ObAb6HdhmCQmqIgSnsxcMu2Cxkehk2fEGZ1YapT5t848e6uaVatsXpbGoY55rpR8ztFZzrOfVyVCMEbQQLrtea0w4s3dD9D5YFaZkAs9c9O91JVE+t0ffVy/k9+JtGmgwQwfB0smXfAsVqgiAsjPvRIkTcwL7fNXkYe7iT0MdmYDE2OfZiY/PufBarufoYc1uXuYZs7UwdK8HpgR1l5bN93XYBvwBfGLNNtk9z+tmi29mI9Rct0N9fTsBdsT0SrZZLq/9x/1ylsvWU1t0MMXfkJIvH271JiN4O/+7ARGTFCZQIQAdGUBSgMhpJGFanBEcxXOWny7aOj5p4ky+3GN26C1n0WoJ/4+0RXNNa5jyW34N1lBUlZ0pW0fXm2iU3wfV/AEQe2Kuw7BoOBPO5GsHvyfPc2Z3vz85WfN7M9rE2hY9lEnJczqKBOwknEnmtamuYPqSqQ5zrRh3s8NY8/pH7obi2BahKg0I07YQGf4bIjUtrLeOG7VoNAi6pQviXK0irUD4GjzstTX++wfsSUAmtQwX9qTD7aENhGTybGBLAjChErUJQ5A3I9bs2u4BkxCl0IFy6VVKfEn11xZTPXHirLyEtReh7gSr/cNdZ2WiU7muA3Jy5uGkCDIXobu2eiK6VF9tNbXEpn+Tdi8Eiv74JOmbpV9YByp02QG/bWo8cIJ9SQwxq+2yNN3QqyxWeuRsLkqsRKLWabCEHKmSocqQ7Mh2h4J0KzwyCRljtfzLy+kwcniD7lGR3jJFz38GrcHABweDeEtYhmHijKIzrC2BORMJJ2P3sqHQNktQ8/3b7gpw5XqABmWqMNvod++LKNPlw= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a6d0e641-848a-4072-891e-08da5ae827c7 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:37.5147 (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 06/18] avcodec/hevc_cabac: Don't cast const away unnecessarily 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: CYBs0B5PpvBN Signed-off-by: Andreas Rheinhardt --- libavcodec/hevc_cabac.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libavcodec/hevc_cabac.c b/libavcodec/hevc_cabac.c index 9b8c8e342d..a194f8a02a 100644 --- a/libavcodec/hevc_cabac.c +++ b/libavcodec/hevc_cabac.c @@ -1282,7 +1282,7 @@ void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0, int scf_offset = 0; if (s->ps.sps->transform_skip_context_enabled_flag && (transform_skip_flag || lc->cu.cu_transquant_bypass_flag)) { - ctx_idx_map_p = (uint8_t*) &ctx_idx_map[4 * 16]; + ctx_idx_map_p = &ctx_idx_map[4 * 16]; if (c_idx == 0) { scf_offset = 40; } else { @@ -1292,9 +1292,9 @@ void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0, if (c_idx != 0) scf_offset = 27; if (log2_trafo_size == 2) { - ctx_idx_map_p = (uint8_t*) &ctx_idx_map[0]; + ctx_idx_map_p = &ctx_idx_map[0]; } else { - ctx_idx_map_p = (uint8_t*) &ctx_idx_map[(prev_sig + 1) << 4]; + ctx_idx_map_p = &ctx_idx_map[(prev_sig + 1) << 4]; if (c_idx == 0) { if ((x_cg > 0 || y_cg > 0)) scf_offset += 3; From patchwork Thu Jun 30 22:29:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36564 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp620744pzh; Thu, 30 Jun 2022 15:31:17 -0700 (PDT) X-Google-Smtp-Source: AGRyM1tnKkbbcLJ0K5jqoZ1ZXShm+zTRgVjZCQQozoYO8AGgS0/0k9/1QS98+TCiuCFLLiVhaomA X-Received: by 2002:a05:6402:201:b0:431:665f:11f1 with SMTP id t1-20020a056402020100b00431665f11f1mr14583610edv.378.1656628276783; Thu, 30 Jun 2022 15:31:16 -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 h7-20020a1709063c0700b007269d20facasi17507674ejg.478.2022.06.30.15.31.15; Thu, 30 Jun 2022 15:31:16 -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=l8Ze6Tpw; 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 9AF8568B7C2; Fri, 1 Jul 2022 01:30:46 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2046.outbound.protection.outlook.com [40.92.91.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EA4CC68B77F for ; Fri, 1 Jul 2022 01:30:42 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=B7nPAlBpX2VKn/0vKEFz6CaC+Eq6BAbGLQmSqpTxEOCCC0TO9hHA5XbGpU7UmZEd8zzZXFQj5yL/IBozu3joo3E8JS2jfQOjWd0hnaMdYWCc7LEf1TM0YYk5uYCJtnZ7cvOAWKwyZteNjxNZpDNywQLF+jioQU1DoD2ymkNEKQF1xAureDhfkHFbmo3OaXhhy1eaekmWjPo4eGHJ0UmvgFsbpheUtpM5AIdZP6eaJybROk0nJrTolJqou1V0HZajt9umhNAsk6aVGgqTe+LOPN9pzKVV3rl2pY1z6cFl7Z2c6pCHjcDXmF6pXIRt4VZIncNbJrmsklUIPAgs3T4AmQ== 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=woCqbYabYyMbVvIfpsr1Z0G21o0/3Dk+LxWCz7PnpP4=; b=AMLJdWyZvQPx8J/VBDaF6fyxMDsd3ULGZmP2ASJ7GsU54B4aDO22pHuQllfyd+sN6MVMvAeuYMOqcNcAPS8vJv3zUWyIqXUpZT/cLavxIxMBN7BuJaGUDob8/pzOyTIW8oYid8h7+UJq85LnnxM/0pDFhuh4Neoao683bOhH9M2KfvuaNwb5As9ob8a32NyT1BomTOMyNmyJ5FMtyun/uab4V1K8/W5C+B8vjOBPxM3uPq0wLTAFkxIvxICKzF2p2opwKHc0USl3I6G3q+Sd63FzJ5RxNHwMyvxcUOXAnz62q+3vZH1GNaMkVaHyl0SzoWfqo9+GVxdqRiLh9U8vmg== 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=woCqbYabYyMbVvIfpsr1Z0G21o0/3Dk+LxWCz7PnpP4=; b=l8Ze6Tpw8B8mjygSwNKoLwkld0HsZg4/KUCZ0UShKTi+2CxTrLGAZHmAfv5p4rPRDpCiyQai2BGiMaeny4G7mP2G0mIv16+SeSHjcPMWXCuUVuX/nZYGhRl03rDwEchBep+H0cE2Aa2jAUqrafPF4nOskgAzEKRy/KPeyLRf62UDq0sjZ+r0AL56Kp/ndxmoS199neZ1/JthufbGogWHT3TY1wgBvkZ9beq+UAhOz2e1FdnXdqU6JBVpE2nKKSCaMjptPU3JQNQnRDrg45mW3giXFaBvu8CKoQRI9xZThWXsXtOhi6T/nZrxkttjxLGqj7SO+4gKoMcuTXvE1oF5NA== 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:39 +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:39 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Jul 2022 00:29:38 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [G3aWbuQU0shrfkeOY5UUFu8w7LqiWi3t] 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-6-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: dfa82f8b-70cf-49fe-60ce-08da5ae82909 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiSAA+E0K/sYrHNnfsWcYQJjGKpr3ZY77P4HWwVjhpvDHGn43NCQMHKpAcDI17QQrBp3plbECrQpWUtxmK4R6TPOZQTwqe9WYrzeUdwea78RnKa0kdFGYkceU6KlJuPFQaMZCkyDq5RMojmIhjhD+h7O6TwQ55vhszh4N2UB3u2OK+xBbwFQ1XfEC5bWlxUoB+eVled39dQKeCGIvWMw7jdfvYawwT47lgCR4wNt/soBJtvxT4PyBNUD16hj3UMjxxr+qWuYRfzM4y5gWSBQl5rX8P32T60r6x2RyX7bIQnDArDxSTGwS6FVMpMbJQCvLEMjLoSFZlyNkT8rOeoip16fnIxlv7pVXDmTLOboCCjiGwNTTKmPhje+QQOoBG3DrD4QwkwCK+l0rdM4j8fBqhPdFOTZolQUVOD4ZU55YUsKjBy3IuNGDOOCeoZxS90KWSzMH7SXoF76yJzJ8qYvXjxnfSkSr7hqUa9BrsbhdXVEpS1CUz6VU6T8xIyzEw/UFY8OHKyzvdoyiOnDORHFWt5El8lx3n3jvNlw7jOSGNbDFQiofM2l+7+fqYSq/V5YjTiaI3T3KcIYJJzXo+ygerlODreDV82XjuVOI0mZy7O1yt2UuTtinHxhXw8RcTgvbwhStbPHVFjRajfzS145XP84g6BVOXxW9QUyFlmuxBhs2n/JOj38d3VoFqMA3FH/oUG1uUVB4UbKQ39qKB9PJw0iZ+70Sph7K3Kymh85iMsEixzatBA7fKsPpcc7sl8BBZY= X-MS-TrafficTypeDiagnostic: DB3PR0102MB3546:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: RYwE8S7wO6+ocHYsRmq6Ac/1rkCScEHrWpCo3Nq20a4do7yf0sxTR2sgRGC8C89BPb2hgRXzf4IT01Gq0KuQYSTesPtCmekQnNW3qjy3m4yvCHXa/Z47/9OzLM7dL3B5UfSFLwUboNaU5jS+qerCSfi9gCqGUKyMvrISbR08kEDNYy8MVhmpqJZfvDbk5dCpJpPJKVXkrjEgNAYZpJk8pO47KCZKD6w2rZPeCTYPgWBFBIVhcA2RBwMloK0VjZxotCG4JO3X/AS7zR6Qwx9YeIPkpwMje5B0RnhUPe40TP/GXvh8k7Egzq238HZvcWJHU/AodCX8hSzAqQ+qirEWCBtray0zVbKter5wbnuBEcMA2z1nmEuhsT22zqAw7xjM7Woy0UE/affV7n1Der+SdD0m1WxSf1MxmhGoTu1ShBkCbG/8wri4zZSyZTnDE0P5B+0k/9r8SeDZn1aIQN35tnO3LZ3ptI7pgnpfFLhDX1argqtkGZ6ojPSSNrBjiRn87HoAf19B4/VZYdsl+u5IhO5YXdXp9r2GFsx9FnFiSB1IDDrGJ5XWj78X7wu+kdYxzmkPGaaHwLO4Gmd0hL9mH7fPJEd+iKrGv00++ovMwqjv0uqAMWDWsch/ptwLpHxCPkGR/4SrfnC49rih8Cq6S0jzbvDf19BepvQS/4gt2hHRijwAxJhh+4sRGZa16cnAc6YCt8QrZbbwLt8tkc5lPg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: DTmkaR+tsCocfeJvUdlrH/0jSKba3WKWmtH4bqdb0RAtloFzjlNtu5kq+Z6//N+R4dkxJ7FBj0NmQvJULX78nxaKXjE5VRTbIXtIHbULMZJqnayVmzqU8zfh/MDMXsE0zZstW8Amg3gUPwz9bFCzDukMCozPNOOUvAxXSlAzhcJcFdtu6T6CU1GtE8UAlIuYNf+sUl9TRX4Thcwpfe4jL5V8qpWskNPA8GIEiGIadWD3JHpqe6+WGbypOpGwWhhI+J62nHrf3lLwUqjzWSRguV+5XMQteo2EYa4UXJMJCzPjRqanrlAZoZ6zR35FI/wQ5nb6Jk8PkiSxjoiPGv0LPgMprGxguyU/yxnmzw31V2OI286QplIqJ8oGqWQJim5d/tbFEZtNmhYOfyBGkwpJJJ/2c2x4SbyhW2JR6W+fusaOI7dw8JGGQebDiQPebql46SocH5NAPkHhjA5bitUTt8NXeibb0NgiIH1gArdz+C4O6++YQnBBt0n962sL9v53mKFy9a1bgcEgFS9LcI5r1wDkp3AloK32XrWxOoPq5EwpgMEFYGpqaEYRek/w0vZczn9faehXObDj+BsOY3t0pliL+SqchmycjcX+DKR8JraJNyUWyK6XkNe9gEERtqSF0dz/u70/Tmu49mWzwkfujwmPZh/IlP/0pFl5S/jrV2Bxda66R/7Nl57LBZgwk5q0KCp1uyUE2Elf4KOSsSUvdKJQFmx1XbNp9f+KhT6Fd8PTzf6lZDQMOcSLbBny3MGjRn+B554LLjJCezOyN3CCK02wLi7baWbUrszO7PuLdA1m6j4v3yC16PHNIVg96Y5WBRI5R1x3J4No3IkMPSOaIZjbTnNutoOMPZaxtbAtUwbiBAVeYl30TrJipjkncxzjtcnBXJR17n9zfcdYlQZkc3Addpbjjr9aOzzINTuUVuznRaXX2Uze91gYY31ErOld9CI1vUK/cWjM5CMHm4vpEkPwZI3TMafw/1r7ZnK6nw5dTY4/1yNFA7HqR5HFu2NTBNrz7YPU544Cdwse91Ju0JVNSTD3B8E2JET3Y+j+PojEncqy+gauQbcPldGQ2ybbZB8XHITH7+h662sm6tfh3bn/j+bIfBsT5LkgMtcQT9CZvnaKjQV6MS1GRPtXjlJ1Z1HgtIlS0unBowfIbs5bjJ2pJJsrV1RN84QJZTbe3ZatvrXJ/vFqmpV2TWWANcQH1M3ctteJkG/Ml8rVClmeaFu8AtN9LJXxMLwSFlN305ZCRv3/AdNRE3V+uH2xChxpuE4Zgx4fov1sUt6SRwebLfxlFXJbbFekuDI4gykKJuA= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: dfa82f8b-70cf-49fe-60ce-08da5ae82909 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:39.6551 (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 07/18] avcodec/hevc_mvs: Pass HEVCLocalContext when slice-threading 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: DAp1/5KqyHWa The HEVC decoder has both HEVCContext and HEVCLocalContext structures. The latter is supposed to be the structure containing the per-slicethread state. Yet 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. This commit stops doing this for lavc/hevc_mvs.c; it also constifies everything that is possible in order to ensure that no slice thread accidentally modifies the main HEVCContext state. Signed-off-by: Andreas Rheinhardt --- libavcodec/hevc_mvs.c | 56 +++++++++++++++++++++---------------------- libavcodec/hevcdec.c | 27 +++++++++++---------- libavcodec/hevcdec.h | 6 ++--- 3 files changed, 45 insertions(+), 44 deletions(-) diff --git a/libavcodec/hevc_mvs.c b/libavcodec/hevc_mvs.c index 516e4a6b7a..bcf6ec3abc 100644 --- a/libavcodec/hevc_mvs.c +++ b/libavcodec/hevc_mvs.c @@ -40,10 +40,10 @@ static const uint8_t l0_l1_cand_idx[12][2] = { { 3, 2, }, }; -void ff_hevc_set_neighbour_available(HEVCContext *s, int x0, int y0, +void ff_hevc_set_neighbour_available(HEVCLocalContext *lc, int x0, int y0, int nPbW, int nPbH) { - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; int x0b = av_mod_uintp2(x0, s->ps.sps->log2_ctb_size); int y0b = av_mod_uintp2(y0, s->ps.sps->log2_ctb_size); @@ -62,7 +62,7 @@ void ff_hevc_set_neighbour_available(HEVCContext *s, int x0, int y0, /* * 6.4.1 Derivation process for z-scan order block availability */ -static av_always_inline int z_scan_block_avail(HEVCContext *s, int xCurr, int yCurr, +static av_always_inline int z_scan_block_avail(const HEVCContext *s, int xCurr, int yCurr, int xN, int yN) { #define MIN_TB_ADDR_ZS(x, y) \ @@ -84,7 +84,7 @@ static av_always_inline int z_scan_block_avail(HEVCContext *s, int xCurr, int yC } //check if the two luma locations belong to the same motion estimation region -static av_always_inline int is_diff_mer(HEVCContext *s, int xN, int yN, int xP, int yP) +static av_always_inline int is_diff_mer(const HEVCContext *s, int xN, int yN, int xP, int yP) { uint8_t plevel = s->ps.pps->log2_parallel_merge_level; @@ -161,11 +161,11 @@ static int check_mvset(Mv *mvLXCol, const Mv *mvCol, refPicList_col, L ## l, temp_col.ref_idx[l]) // derive the motion vectors section 8.5.3.1.8 -static int derive_temporal_colocated_mvs(HEVCContext *s, MvField temp_col, +static int derive_temporal_colocated_mvs(const HEVCContext *s, MvField temp_col, int refIdxLx, Mv *mvLXCol, int X, int colPic, const RefPicList *refPicList_col) { - RefPicList *refPicList = s->ref->refPicList; + const RefPicList *refPicList = s->ref->refPicList; if (temp_col.pred_flag == PF_INTRA) return 0; @@ -216,11 +216,11 @@ static int derive_temporal_colocated_mvs(HEVCContext *s, MvField temp_col, /* * 8.5.3.1.7 temporal luma motion vector prediction */ -static int temporal_luma_motion_vector(HEVCContext *s, int x0, int y0, +static int temporal_luma_motion_vector(const HEVCContext *s, int x0, int y0, int nPbW, int nPbH, int refIdxLx, Mv *mvLXCol, int X) { - MvField *tab_mvf; + const MvField *tab_mvf; MvField temp_col; int x, y, x_pu, y_pu; int min_pu_width = s->ps.sps->min_pu_width; @@ -283,16 +283,16 @@ static int temporal_luma_motion_vector(HEVCContext *s, int x0, int y0, /* * 8.5.3.1.2 Derivation process for spatial merging candidates */ -static void derive_spatial_merge_candidates(HEVCContext *s, int x0, int y0, +static void derive_spatial_merge_candidates(HEVCLocalContext *lc, const HEVCContext *s, + int x0, int y0, int nPbW, int nPbH, int log2_cb_size, int singleMCLFlag, int part_idx, int merge_idx, struct MvField mergecandlist[]) { - HEVCLocalContext *lc = s->HEVClc; - RefPicList *refPicList = s->ref->refPicList; - MvField *tab_mvf = s->ref->tab_mvf; + const RefPicList *refPicList = s->ref->refPicList; + const MvField *tab_mvf = s->ref->tab_mvf; const int min_pu_width = s->ps.sps->min_pu_width; @@ -477,16 +477,16 @@ static void derive_spatial_merge_candidates(HEVCContext *s, int x0, int y0, /* * 8.5.3.1.1 Derivation process of luma Mvs for merge mode */ -void ff_hevc_luma_mv_merge_mode(HEVCContext *s, int x0, int y0, int nPbW, +void ff_hevc_luma_mv_merge_mode(HEVCLocalContext *lc, int x0, int y0, int nPbW, int nPbH, int log2_cb_size, int part_idx, int merge_idx, MvField *mv) { + const HEVCContext *const s = lc->parent; int singleMCLFlag = 0; int nCS = 1 << log2_cb_size; MvField mergecand_list[MRG_MAX_NUM_CANDS]; int nPbW2 = nPbW; int nPbH2 = nPbH; - HEVCLocalContext *lc = s->HEVClc; if (s->ps.pps->log2_parallel_merge_level > 2 && nCS == 8) { singleMCLFlag = 1; @@ -497,8 +497,8 @@ void ff_hevc_luma_mv_merge_mode(HEVCContext *s, int x0, int y0, int nPbW, part_idx = 0; } - ff_hevc_set_neighbour_available(s, x0, y0, nPbW, nPbH); - derive_spatial_merge_candidates(s, x0, y0, nPbW, nPbH, log2_cb_size, + ff_hevc_set_neighbour_available(lc, x0, y0, nPbW, nPbH); + derive_spatial_merge_candidates(lc, s, x0, y0, nPbW, nPbH, log2_cb_size, singleMCLFlag, part_idx, merge_idx, mergecand_list); @@ -510,12 +510,12 @@ void ff_hevc_luma_mv_merge_mode(HEVCContext *s, int x0, int y0, int nPbW, *mv = mergecand_list[merge_idx]; } -static av_always_inline void dist_scale(HEVCContext *s, Mv *mv, +static av_always_inline void dist_scale(const HEVCContext *s, Mv *mv, int min_pu_width, int x, int y, int elist, int ref_idx_curr, int ref_idx) { - RefPicList *refPicList = s->ref->refPicList; - MvField *tab_mvf = s->ref->tab_mvf; + const RefPicList *refPicList = s->ref->refPicList; + const MvField *tab_mvf = s->ref->tab_mvf; int ref_pic_elist = refPicList[elist].list[TAB_MVF(x, y).ref_idx[elist]]; int ref_pic_curr = refPicList[ref_idx_curr].list[ref_idx]; @@ -527,13 +527,13 @@ static av_always_inline void dist_scale(HEVCContext *s, Mv *mv, } } -static int mv_mp_mode_mx(HEVCContext *s, int x, int y, int pred_flag_index, +static int mv_mp_mode_mx(const HEVCContext *s, int x, int y, int pred_flag_index, Mv *mv, int ref_idx_curr, int ref_idx) { - MvField *tab_mvf = s->ref->tab_mvf; + const MvField *tab_mvf = s->ref->tab_mvf; int min_pu_width = s->ps.sps->min_pu_width; - RefPicList *refPicList = s->ref->refPicList; + const RefPicList *refPicList = s->ref->refPicList; if (((TAB_MVF(x, y).pred_flag) & (1 << pred_flag_index)) && refPicList[pred_flag_index].list[TAB_MVF(x, y).ref_idx[pred_flag_index]] == refPicList[ref_idx_curr].list[ref_idx]) { @@ -543,13 +543,13 @@ static int mv_mp_mode_mx(HEVCContext *s, int x, int y, int pred_flag_index, return 0; } -static int mv_mp_mode_mx_lt(HEVCContext *s, int x, int y, int pred_flag_index, +static int mv_mp_mode_mx_lt(const HEVCContext *s, int x, int y, int pred_flag_index, Mv *mv, int ref_idx_curr, int ref_idx) { - MvField *tab_mvf = s->ref->tab_mvf; + const MvField *tab_mvf = s->ref->tab_mvf; int min_pu_width = s->ps.sps->min_pu_width; - RefPicList *refPicList = s->ref->refPicList; + const RefPicList *refPicList = s->ref->refPicList; if ((TAB_MVF(x, y).pred_flag) & (1 << pred_flag_index)) { int currIsLongTerm = refPicList[ref_idx_curr].isLongTerm[ref_idx]; @@ -580,13 +580,13 @@ static int mv_mp_mode_mx_lt(HEVCContext *s, int x, int y, int pred_flag_index, (y ## v) >> s->ps.sps->log2_min_pu_size, \ pred, &mx, ref_idx_curr, ref_idx) -void ff_hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0, int nPbW, +void ff_hevc_luma_mv_mvp_mode(HEVCLocalContext *lc, int x0, int y0, int nPbW, int nPbH, int log2_cb_size, int part_idx, int merge_idx, MvField *mv, int mvp_lx_flag, int LX) { - HEVCLocalContext *lc = s->HEVClc; - MvField *tab_mvf = s->ref->tab_mvf; + const HEVCContext *const s = lc->parent; + const MvField *const tab_mvf = s->ref->tab_mvf; int isScaledFlag_L0 = 0; int availableFlagLXA0 = 1; int availableFlagLXB0 = 1; diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 111da42836..4786282669 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -1106,7 +1106,7 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, if (lc->cu.pred_mode == MODE_INTRA) { int trafo_size = 1 << log2_trafo_size; - ff_hevc_set_neighbour_available(s, x0, y0, trafo_size, trafo_size); + ff_hevc_set_neighbour_available(lc, x0, y0, trafo_size, trafo_size); s->hpc.intra_pred[log2_trafo_size - 2](s, x0, y0, 0); } @@ -1193,7 +1193,7 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, } for (i = 0; i < (s->ps.sps->chroma_format_idc == 2 ? 2 : 1); i++) { if (lc->cu.pred_mode == MODE_INTRA) { - ff_hevc_set_neighbour_available(s, x0, y0 + (i << log2_trafo_size_c), trafo_size_h, trafo_size_v); + ff_hevc_set_neighbour_available(lc, x0, y0 + (i << log2_trafo_size_c), trafo_size_h, trafo_size_v); s->hpc.intra_pred[log2_trafo_size_c - 2](s, x0, y0 + (i << log2_trafo_size_c), 1); } if (cbf_cb[i]) @@ -1222,7 +1222,8 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, } for (i = 0; i < (s->ps.sps->chroma_format_idc == 2 ? 2 : 1); i++) { if (lc->cu.pred_mode == MODE_INTRA) { - ff_hevc_set_neighbour_available(s, x0, y0 + (i << log2_trafo_size_c), trafo_size_h, trafo_size_v); + ff_hevc_set_neighbour_available(lc, x0, y0 + (i << log2_trafo_size_c), + trafo_size_h, trafo_size_v); s->hpc.intra_pred[log2_trafo_size_c - 2](s, x0, y0 + (i << log2_trafo_size_c), 2); } if (cbf_cr[i]) @@ -1250,7 +1251,7 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, int trafo_size_v = 1 << (log2_trafo_size + s->ps.sps->vshift[1]); for (i = 0; i < (s->ps.sps->chroma_format_idc == 2 ? 2 : 1); i++) { if (lc->cu.pred_mode == MODE_INTRA) { - ff_hevc_set_neighbour_available(s, xBase, yBase + (i << log2_trafo_size), + ff_hevc_set_neighbour_available(lc, xBase, yBase + (i << log2_trafo_size), trafo_size_h, trafo_size_v); s->hpc.intra_pred[log2_trafo_size - 2](s, xBase, yBase + (i << log2_trafo_size), 1); } @@ -1260,7 +1261,7 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, } for (i = 0; i < (s->ps.sps->chroma_format_idc == 2 ? 2 : 1); i++) { if (lc->cu.pred_mode == MODE_INTRA) { - ff_hevc_set_neighbour_available(s, xBase, yBase + (i << log2_trafo_size), + ff_hevc_set_neighbour_available(lc, xBase, yBase + (i << log2_trafo_size), trafo_size_h, trafo_size_v); s->hpc.intra_pred[log2_trafo_size - 2](s, xBase, yBase + (i << log2_trafo_size), 2); } @@ -1273,11 +1274,11 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, if (log2_trafo_size > 2 || s->ps.sps->chroma_format_idc == 3) { int trafo_size_h = 1 << (log2_trafo_size_c + s->ps.sps->hshift[1]); int trafo_size_v = 1 << (log2_trafo_size_c + s->ps.sps->vshift[1]); - ff_hevc_set_neighbour_available(s, x0, y0, trafo_size_h, trafo_size_v); + ff_hevc_set_neighbour_available(lc, x0, y0, trafo_size_h, trafo_size_v); s->hpc.intra_pred[log2_trafo_size_c - 2](s, x0, y0, 1); s->hpc.intra_pred[log2_trafo_size_c - 2](s, x0, y0, 2); if (s->ps.sps->chroma_format_idc == 2) { - ff_hevc_set_neighbour_available(s, x0, y0 + (1 << log2_trafo_size_c), + ff_hevc_set_neighbour_available(lc, x0, y0 + (1 << log2_trafo_size_c), trafo_size_h, trafo_size_v); s->hpc.intra_pred[log2_trafo_size_c - 2](s, x0, y0 + (1 << log2_trafo_size_c), 1); s->hpc.intra_pred[log2_trafo_size_c - 2](s, x0, y0 + (1 << log2_trafo_size_c), 2); @@ -1285,12 +1286,12 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, } else if (blk_idx == 3) { int trafo_size_h = 1 << (log2_trafo_size + 1); int trafo_size_v = 1 << (log2_trafo_size + s->ps.sps->vshift[1]); - ff_hevc_set_neighbour_available(s, xBase, yBase, + ff_hevc_set_neighbour_available(lc, xBase, yBase, trafo_size_h, trafo_size_v); s->hpc.intra_pred[log2_trafo_size - 2](s, xBase, yBase, 1); s->hpc.intra_pred[log2_trafo_size - 2](s, xBase, yBase, 2); if (s->ps.sps->chroma_format_idc == 2) { - ff_hevc_set_neighbour_available(s, xBase, yBase + (1 << (log2_trafo_size)), + ff_hevc_set_neighbour_available(lc, xBase, yBase + (1 << (log2_trafo_size)), trafo_size_h, trafo_size_v); s->hpc.intra_pred[log2_trafo_size - 2](s, xBase, yBase + (1 << (log2_trafo_size)), 1); s->hpc.intra_pred[log2_trafo_size - 2](s, xBase, yBase + (1 << (log2_trafo_size)), 2); @@ -1821,7 +1822,7 @@ static void hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0, int nPbW, enum InterPredIdc inter_pred_idc = PRED_L0; int mvp_flag; - ff_hevc_set_neighbour_available(s, x0, y0, nPbW, nPbH); + ff_hevc_set_neighbour_available(lc, x0, y0, nPbW, nPbH); mv->pred_flag = 0; if (s->sh.slice_type == HEVC_SLICE_B) inter_pred_idc = ff_hevc_inter_pred_idc_decode(s, nPbW, nPbH); @@ -1833,7 +1834,7 @@ static void hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0, int nPbW, mv->pred_flag = PF_L0; ff_hevc_hls_mvd_coding(s, x0, y0, 0); mvp_flag = ff_hevc_mvp_lx_flag_decode(s); - ff_hevc_luma_mv_mvp_mode(s, x0, y0, nPbW, nPbH, log2_cb_size, + ff_hevc_luma_mv_mvp_mode(lc, x0, y0, nPbW, nPbH, log2_cb_size, part_idx, merge_idx, mv, mvp_flag, 0); mv->mv[0].x += lc->pu.mvd.x; mv->mv[0].y += lc->pu.mvd.y; @@ -1851,7 +1852,7 @@ static void hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0, int nPbW, mv->pred_flag += PF_L1; mvp_flag = ff_hevc_mvp_lx_flag_decode(s); - ff_hevc_luma_mv_mvp_mode(s, x0, y0, nPbW, nPbH, log2_cb_size, + ff_hevc_luma_mv_mvp_mode(lc, x0, y0, nPbW, nPbH, log2_cb_size, part_idx, merge_idx, mv, mvp_flag, 1); mv->mv[1].x += lc->pu.mvd.x; mv->mv[1].y += lc->pu.mvd.y; @@ -1895,7 +1896,7 @@ static void hls_prediction_unit(HEVCContext *s, int x0, int y0, else merge_idx = 0; - ff_hevc_luma_mv_merge_mode(s, x0, y0, nPbW, nPbH, log2_cb_size, + ff_hevc_luma_mv_merge_mode(lc, x0, y0, nPbW, nPbH, log2_cb_size, partIdx, merge_idx, ¤t_mv); } else { hevc_luma_mv_mvp_mode(s, x0, y0, nPbW, nPbH, log2_cb_size, diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h index 271a55df2f..3bb3fdb90a 100644 --- a/libavcodec/hevcdec.h +++ b/libavcodec/hevcdec.h @@ -667,12 +667,12 @@ void ff_hevc_bump_frame(HEVCContext *s); void ff_hevc_unref_frame(HEVCContext *s, HEVCFrame *frame, int flags); -void ff_hevc_set_neighbour_available(HEVCContext *s, int x0, int y0, +void ff_hevc_set_neighbour_available(HEVCLocalContext *lc, int x0, int y0, int nPbW, int nPbH); -void ff_hevc_luma_mv_merge_mode(HEVCContext *s, int x0, int y0, +void ff_hevc_luma_mv_merge_mode(HEVCLocalContext *lc, int x0, int y0, int nPbW, int nPbH, int log2_cb_size, int part_idx, int merge_idx, MvField *mv); -void ff_hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0, +void ff_hevc_luma_mv_mvp_mode(HEVCLocalContext *lc, int x0, int y0, int nPbW, int nPbH, int log2_cb_size, int part_idx, int merge_idx, MvField *mv, int mvp_lx_flag, int LX); From patchwork Thu Jun 30 22:29:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36565 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp620813pzh; Thu, 30 Jun 2022 15:31:26 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vazS7+SfVHLavXBxc+4zu8XA4fSKnof9Umvh5e5HkCHjBHb/IRnf8JUoHIqqBGnLSsZ0/c X-Received: by 2002:a05:6402:18:b0:435:9a79:9a40 with SMTP id d24-20020a056402001800b004359a799a40mr14245527edu.328.1656628286250; Thu, 30 Jun 2022 15:31:26 -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 m7-20020aa7d347000000b00435c517de46si24166498edr.394.2022.06.30.15.31.25; Thu, 30 Jun 2022 15:31:26 -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=Spuvrpkl; 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 A2BA768B7E6; Fri, 1 Jul 2022 01:30:47 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2040.outbound.protection.outlook.com [40.92.91.40]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3213668B7C2 for ; Fri, 1 Jul 2022 01:30:43 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GVMW7xatd0g2F8QMrvNP52xAelzEkD8AITDcuNQnaEz+dQ9dl+KboHn1pwoqSUH6rKsuBGpIfQcg+Q3aPhp8pWB2d1rwtmiB9+3AyaK0A3PIVqHrgZqY2MF1neHdBUrQ3jspYhxj3nqtZQkMwEQ6k655mEduMo0wf+RXVCJguhig1lRh/PnFO+9m30BiSCQvpUITPC45Hum9/o7s7ugDIgmKDyjjiqWw9dMg5dUUkVBik2v5z2R5mIrw3eIuSQcF6yBm4M+ZVzxXGO/3d50NZJ+YkwSjpN4QWrE8Ip/YEiv7mFRTWMdykpnp+jZ/GG75nr6XJ3Fcf+AABUPH/EPJkg== 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=PpMnYAZCPGoDXAj5YjiqG3TIZYvrzEwKRvelH2iyZNM=; b=iEtwB7eKinDCI4m+p1s1dwtD5lMiw39DKyPmgm6EW9luH1jWNtqxikdmk+DHWlvDuL/Dj4VecpFUyLq4tMZsSHEdL8qETxP7hIqSo33QlfCpJ+XdPH6HRbyelm9njLTK8H+pYf2qpaHZCfqvmvwWUxZLi9HKgVz9XrMkqF/bdNgx3kyz6ib4+A4/g/r9X75yYrc1MLDUlig0Uk+PCQNRgc168tKOmQ2aMhFO1qBQD5zTmNC41MVJ+pbRNxyzW+PDw9m4XNXNKcUieLSXFbj/7GjihzYnfprPviZx8QR2LP2ELdpbe1k5GZXD/1Jf+/T4H75bhGHf5rUKgbNkQmReSg== 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=PpMnYAZCPGoDXAj5YjiqG3TIZYvrzEwKRvelH2iyZNM=; b=SpuvrpklB/NNyXP4uLtrlXKfF3GJYEf1BPO3zepYwChf78IFX0FsYHNvO1kvh4N16BwPNUReMJch0OhkuQgMGp11eGUgp7R2EGr81SMK5aTMPZI3T4zBeCY9g+IkYvBWCn6/pQdhTWKO/Ic/DrK9ujU/0Nytw0psztVre1k/acU0TgPpAvwr+7qye3I8cRg8ZpUNmuziGR1Ps0qLCGYOfyVF7Zo8VY1MA8L/88rZ/9l3DnuwkRDoWCnXBfUPRKytUxWt7qaHziXwxO84t/SOwlNhmrqEwZ4/PK0H7SINo70X3z5wxdf+XRxCPLT7HxSEufQ3TaG6+hegNRTH93zMdg== 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:42 +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:42 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Jul 2022 00:29:39 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [qyF0k40jhzvIOMIHVlJ2DgDMQKLtEVzb] 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-7-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 42b7a39b-d322-4f23-e0ae-08da5ae82ad7 X-MS-Exchange-SLBlob-MailProps: +LiGfBxqLEthM4Yqklomr1EC9yH/oOI+MBtpD1xQV13qLoSS3dA53v3Knrx61p0hut+SRxGu4jL5td1BiZ4C1N6uyguTsLmVbje//MBzyMAOi3HJI6Y12YTvIMfiJbS24rw9CLD2e5hlmoa1Dmfq5msDW/aMRPNhV0UnYd9XI3I/ErfoGQnjIXfAQPhX3mJ4TVBpz2WRRzmj9zrwzFFKnV6cbD/O8gxtPQMkibm0mQoZobZ0AOuIS+O+Knlz8mALNKN6RzfOgrY9wy12yZCuFrRNsjiQaMlYJ9ZqWynghCubFBCPDkBpR+8S6Ewt2IxN2or3IYTyZlBw3OZ9vl7r/A9KH2cvNScmOVSyScXKIcF3STuob7LVGOjFfpUGqFbLLOY8KEVYmB9zpY3aPilv+FT5MaXLx0/8Cdvmpun/lZd60SGY1aTUu2ff05ryDp/VhldbaF2eo5ikeT5Ypsr7csY0d+tQYy7AyFenRGA9hHZU+Ndoalphuvs7kR0zMJ9Tnmhc63j+juwgiXoWbBzpeC+ua9OnY3C2k+D8PfOSBhLIX/a2sqth34Ilu3gw+0giicS8lSavxb+lpRUQctMmEblVOR/cApXv6TyIowtvFuIH+GGkte4pjTCIafELvHoWIySc2Amt/JKCOjlCYGFmMwuRfJR4kr6rntLQ7N3Fx0HKToRElmrkv6TybFPnk2oa/pmo0YLi6hWee9pxBFZSNd4knmTJ6aDK9xHsfTvjEqadxaJCcZWQKNWJAh1q4DMvQg33upUqR685OCVZD85sPq7teyT0Pp7G X-MS-TrafficTypeDiagnostic: DB3PR0102MB3546:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WAtmK6Dx56/pOxYS4U23sr7rnroSlzDlEf+P/exuv4adwQ6MlSq5rSqRDes/32WO95wqpP30H+p0M52oIuCkoX375ZswviZslHFwy/9Y2NxTF0T5jmod68ORec5JCCBTgQjI3NTnCS2lQM0/+C1OUChPddS2lOG4NtkzMz6xmAFzpLrrO3VskOF30bxRihChn8Z8uuyVAvXPRXJDDcM0OBUKxpOiilDMkzHqu/liuSkEHWwuTpiALDOk+RYdHNmpU7rFPIZVvoZdfSfctjaMyThdmZowc3vh8q3NWLUx+g9bHXbC+2own1EN1e26dZZINQHnwzmUFL86k3zUkprkGHU67drQZxxssVashYZeb2KhdRhRR76mV8+1mj6ZzPAu9PE3jsMbUu1bGu1lBFn4sBIfv5yphMtZfCK3bwec9tLkzultF5hQuG6T0SVCYSSeGfN65PQxLn49+YgHnsnT7kXe5ssPUGLOxZ7KjySrDIwGxVF35kLSisE7nUK0GnL9TcsuJB/yEjGn6p12jK31u5ewobt9/gZxN4gvEptT1dkYmd97rQZfd4Bad8nhqGM07TS4W2B1rrsFyDlMJ6JhUmEXVDLxS+VTNItOKdZTn415H3EHJOTWDb+ZakVxu/vuIwYkBG6KbBGu3IZ/8CIG7NeXQpQ2vTmMhjiThwXkJdECzTWTQWtn+oEANoZWmofg X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: WHdUNmjZGubsg1tdxmOj7siVNBXIr6K4jCCS+UBL3P7llSSbyZ/n4oJKgvWZpdtEBqANBoGoXOBG1D6QKZB7kI9r0MIlVTXjqKAxdDVIQXJaQiaAYqE4UXsoyd2pFA7GrHTiOdowme9fbV0GORNcNoUut/YSzFrutuTpKGL4i+OELqd7Ax1rdP4a47h9oJpWu7xEJKLuvB3BtmxXCvIRglJ41OKKPCwRx4K34jygFL0WOtKP4GSw28xVrV0Oh5c8tKNJm1g3Oj19w/5uel6v6+C4A2m+lqOz8mi0KmER3C++H7WmyGhABnjwXiBdlWtlyBbmuZNvzJq01GdpP0xAV6gFWi+qBbKSyi4qWVGczQpUIGX5sW0xrdQl7ufzEqDjbke/BfsTjwukaOvevewH95y1xwpGgXRHlMJ+vU5krNYnWBSQmlLgeVwkkishsCyoUx6kkIHbxsDu0QnG7+NErX8eAHfRTDWc66GcYRwkZ23Un2nZrQ+fg/T7BIHaqkjufGbIVVVbT4LpAlT2vD2FOpJPFlX0dTK4/d6e/NU4ka73v/2zcOsoi4jk6Z0NgFr2DD0ix3EZlw8dfdjsBWdTakZ06n7HxgA8A7XdNabj820aZFKsHx49Snvt+vcmsKyihAApuCEdgJCpGs7sdlw+Q4D4/OvrNmfI6jhsizIiVGFolBZsn/poEA88hsxzVI+GG7wHLeKMhQKDq6LHvHc0HOr+qBZUxNGpKKBGwVlBD4CU3R3xm+8iexKmmup4xJTRzXJZVZUhqccSfBYIicZ4XDxApWL6zGMV4/3vBN/Y5vSnTWtcBl5/+06i3ksBdWH9WWEBclChPK9jDsftCPEMK1QLE7qpRSCr9PF0+6D/22Dlsn7nobsgX6bQEQ0Ag0KLIC7uTUOhsP1CzNQ10QEwY1CkRz/oOMtsHkLt6GPDa7h+XmzgxtpRyLXOsZcsYUQ2dmiMq/c7MGEYKyjQEzYUJA+8HLvuOKYuWOAVUtsslrjNBPTvfrWQd7ET5VMF1KMpvRku7diypAueLipOk70bRbK7fMvI9v1YiO1LUXvQjUxkqvUun2L/rjk/pW8qWs0UcmS2V+4Y4LZUVM1KOmf4CHtqTgtb0OFpJ8/AJ32qkOE4/P5NEa85CnBDvrcK0mwAqz2MFwCzL8mC74d/g7f0wOgOe7YeaRVuWDkbWaNK//TavG4rWQxDmBEwmn/Fviz4IAXrfZSIHO8uSF/EzCMOSY+psAu9Pe5yQbO6LJmX1VUnohepmyW0QHqVU2r1Q5hj2xL5EFyn6ZgsPdREHcH+eI8rf5p/MCpZwAkDrsd/AiQ= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 42b7a39b-d322-4f23-e0ae-08da5ae82ad7 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:42.6705 (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 08/18] avcodec/hevc_filter: Pass HEVCLocalContext when slice-threading 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: jSSAT1MpaQ8n The HEVC decoder has both HEVCContext and HEVCLocalContext structures. The latter is supposed to be the structure containing the per-slicethread state. Yet that is not how it is handled in practice: Each HEVCLocalContext has a unique HEVCContext allocated for it and each of these coincides with the main HEVCContext except in exactly one field: The corresponding HEVCLocalContext. This makes it possible to pass the HEVCContext everywhere where logically a HEVCLocalContext should be used. This commit stops doing this for lavc/hevc_filter.c; it also constifies everything that is possible in order to ensure that no slice thread accidentally modifies the main HEVCContext state. There are places where this was not possible, namely with the SAOParams in sao_filter_CTB() or with sao_pixels_buffer_h in copy_CTB_to_hv(). Both of these instances lead to data races, see https://fate.ffmpeg.org/report.cgi?time=20220629145651&slot=x86_64-archlinux-gcc-tsan-slices Signed-off-by: Andreas Rheinhardt --- libavcodec/hevc_filter.c | 77 ++++++++++++++++++++-------------------- libavcodec/hevcdec.c | 21 +++++------ libavcodec/hevcdec.h | 8 ++--- 3 files changed, 54 insertions(+), 52 deletions(-) diff --git a/libavcodec/hevc_filter.c b/libavcodec/hevc_filter.c index 7b53c66c3b..2fe05a2327 100644 --- a/libavcodec/hevc_filter.c +++ b/libavcodec/hevc_filter.c @@ -44,7 +44,7 @@ static const uint8_t betatable[52] = { 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64 // QP 38...51 }; -static int chroma_tc(HEVCContext *s, int qp_y, int c_idx, int tc_offset) +static int chroma_tc(const HEVCContext *s, int qp_y, int c_idx, int tc_offset) { static const int qp_c[] = { 29, 30, 31, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37 @@ -73,9 +73,9 @@ static int chroma_tc(HEVCContext *s, int qp_y, int c_idx, int tc_offset) return tctable[idxt]; } -static int get_qPy_pred(HEVCContext *s, int xBase, int yBase, int log2_cb_size) +static int get_qPy_pred(HEVCLocalContext *lc, const HEVCContext *s, + int xBase, int yBase, int log2_cb_size) { - HEVCLocalContext *lc = s->HEVClc; int ctb_size_mask = (1 << s->ps.sps->log2_ctb_size) - 1; int MinCuQpDeltaSizeMask = (1 << (s->ps.sps->log2_ctb_size - s->ps.pps->diff_cu_qp_delta_depth)) - 1; @@ -116,19 +116,20 @@ static int get_qPy_pred(HEVCContext *s, int xBase, int yBase, int log2_cb_size) return (qPy_a + qPy_b + 1) >> 1; } -void ff_hevc_set_qPy(HEVCContext *s, int xBase, int yBase, int log2_cb_size) +void ff_hevc_set_qPy(HEVCLocalContext *lc, int xBase, int yBase, int log2_cb_size) { - int qp_y = get_qPy_pred(s, xBase, yBase, log2_cb_size); + const HEVCContext *const s = lc->parent; + int qp_y = get_qPy_pred(lc, s, xBase, yBase, log2_cb_size); - if (s->HEVClc->tu.cu_qp_delta != 0) { + if (lc->tu.cu_qp_delta != 0) { int off = s->ps.sps->qp_bd_offset; - s->HEVClc->qp_y = FFUMOD(qp_y + s->HEVClc->tu.cu_qp_delta + 52 + 2 * off, + lc->qp_y = FFUMOD(qp_y + lc->tu.cu_qp_delta + 52 + 2 * off, 52 + off) - off; } else - s->HEVClc->qp_y = qp_y; + lc->qp_y = qp_y; } -static int get_qPy(HEVCContext *s, int xC, int yC) +static int get_qPy(const HEVCContext *s, int xC, int yC) { int log2_min_cb_size = s->ps.sps->log2_min_cb_size; int x = xC >> log2_min_cb_size; @@ -186,7 +187,7 @@ static void copy_vert(uint8_t *dst, const uint8_t *src, } } -static void copy_CTB_to_hv(HEVCContext *s, const uint8_t *src, +static void copy_CTB_to_hv(const HEVCContext *s, const uint8_t *src, ptrdiff_t stride_src, int x, int y, int width, int height, int c_idx, int x_ctb, int y_ctb) { @@ -206,7 +207,7 @@ static void copy_CTB_to_hv(HEVCContext *s, const uint8_t *src, copy_vert(s->sao_pixel_buffer_v[c_idx] + (((2 * x_ctb + 1) * h + y) << sh), src + ((width - 1) << sh), sh, height, 1 << sh, stride_src); } -static void restore_tqb_pixels(HEVCContext *s, +static void restore_tqb_pixels(const HEVCContext *s, uint8_t *src1, const uint8_t *dst1, ptrdiff_t stride_src, ptrdiff_t stride_dst, int x0, int y0, int width, int height, int c_idx) @@ -241,10 +242,9 @@ static void restore_tqb_pixels(HEVCContext *s, #define CTB(tab, x, y) ((tab)[(y) * s->ps.sps->ctb_width + (x)]) -static void sao_filter_CTB(HEVCContext *s, int x, int y) +static void sao_filter_CTB(HEVCLocalContext *lc, const HEVCContext *s, int x, int y) { static const uint8_t sao_tab[8] = { 0, 1, 2, 2, 3, 3, 4, 4 }; - HEVCLocalContext *lc = s->HEVClc; int c_idx; int edges[4]; // 0 left 1 top 2 right 3 bottom int x_ctb = x >> s->ps.sps->log2_ctb_size; @@ -450,7 +450,7 @@ static void sao_filter_CTB(HEVCContext *s, int x, int y) } } -static int get_pcm(HEVCContext *s, int x, int y) +static int get_pcm(const HEVCContext *s, int x, int y) { int log2_min_pu_size = s->ps.sps->log2_min_pu_size; int x_pu, y_pu; @@ -471,7 +471,7 @@ static int get_pcm(HEVCContext *s, int x, int y) (tc_offset & -2), \ 0, MAX_QP + DEFAULT_INTRA_TC_OFFSET)] -static void deblocking_filter_CTB(HEVCContext *s, int x0, int y0) +static void deblocking_filter_CTB(const HEVCContext *s, int x0, int y0) { uint8_t *src; int x, y; @@ -709,11 +709,11 @@ static int boundary_strength(const HEVCContext *s, const MvField *curr, const Mv return 1; } -void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0, +void ff_hevc_deblocking_boundary_strengths(HEVCLocalContext *lc, int x0, int y0, int log2_trafo_size) { - HEVCLocalContext *lc = s->HEVClc; - MvField *tab_mvf = s->ref->tab_mvf; + const HEVCContext *s = lc->parent; + const MvField *tab_mvf = s->ref->tab_mvf; int log2_min_pu_size = s->ps.sps->log2_min_pu_size; int log2_min_tu_size = s->ps.sps->log2_min_tb_size; int min_pu_width = s->ps.sps->min_pu_width; @@ -745,8 +745,8 @@ void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0, for (i = 0; i < (1 << log2_trafo_size); i += 4) { int x_pu = (x0 + i) >> log2_min_pu_size; int x_tu = (x0 + i) >> log2_min_tu_size; - MvField *top = &tab_mvf[yp_pu * min_pu_width + x_pu]; - MvField *curr = &tab_mvf[yq_pu * min_pu_width + x_pu]; + const MvField *top = &tab_mvf[yp_pu * min_pu_width + x_pu]; + const MvField *curr = &tab_mvf[yq_pu * min_pu_width + x_pu]; uint8_t top_cbf_luma = s->cbf_luma[yp_tu * min_tu_width + x_tu]; uint8_t curr_cbf_luma = s->cbf_luma[yq_tu * min_tu_width + x_tu]; @@ -783,8 +783,8 @@ void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0, for (i = 0; i < (1 << log2_trafo_size); i += 4) { int y_pu = (y0 + i) >> log2_min_pu_size; int y_tu = (y0 + i) >> log2_min_tu_size; - MvField *left = &tab_mvf[y_pu * min_pu_width + xp_pu]; - MvField *curr = &tab_mvf[y_pu * min_pu_width + xq_pu]; + const MvField *left = &tab_mvf[y_pu * min_pu_width + xp_pu]; + const MvField *curr = &tab_mvf[y_pu * min_pu_width + xq_pu]; uint8_t left_cbf_luma = s->cbf_luma[y_tu * min_tu_width + xp_tu]; uint8_t curr_cbf_luma = s->cbf_luma[y_tu * min_tu_width + xq_tu]; @@ -799,7 +799,7 @@ void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0, } if (log2_trafo_size > log2_min_pu_size && !is_intra) { - RefPicList *rpl = s->ref->refPicList; + const RefPicList *rpl = s->ref->refPicList; // bs for TU internal horizontal PU boundaries for (j = 8; j < (1 << log2_trafo_size); j += 8) { @@ -808,8 +808,8 @@ void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0, for (i = 0; i < (1 << log2_trafo_size); i += 4) { int x_pu = (x0 + i) >> log2_min_pu_size; - MvField *top = &tab_mvf[yp_pu * min_pu_width + x_pu]; - MvField *curr = &tab_mvf[yq_pu * min_pu_width + x_pu]; + const MvField *top = &tab_mvf[yp_pu * min_pu_width + x_pu]; + const MvField *curr = &tab_mvf[yq_pu * min_pu_width + x_pu]; bs = boundary_strength(s, curr, top, rpl); s->horizontal_bs[((x0 + i) + (y0 + j) * s->bs_width) >> 2] = bs; @@ -823,8 +823,8 @@ void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0, for (i = 8; i < (1 << log2_trafo_size); i += 8) { int xp_pu = (x0 + i - 1) >> log2_min_pu_size; int xq_pu = (x0 + i) >> log2_min_pu_size; - MvField *left = &tab_mvf[y_pu * min_pu_width + xp_pu]; - MvField *curr = &tab_mvf[y_pu * min_pu_width + xq_pu]; + const MvField *left = &tab_mvf[y_pu * min_pu_width + xp_pu]; + const MvField *curr = &tab_mvf[y_pu * min_pu_width + xq_pu]; bs = boundary_strength(s, curr, left, rpl); s->vertical_bs[((x0 + i) + (y0 + j) * s->bs_width) >> 2] = bs; @@ -837,8 +837,9 @@ void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0, #undef CB #undef CR -void ff_hevc_hls_filter(HEVCContext *s, int x, int y, int ctb_size) +void ff_hevc_hls_filter(HEVCLocalContext *lc, int x, int y, int ctb_size) { + const HEVCContext *const s = lc->parent; int x_end = x >= s->ps.sps->width - ctb_size; int skip = 0; if (s->avctx->skip_loop_filter >= AVDISCARD_ALL || @@ -856,16 +857,16 @@ void ff_hevc_hls_filter(HEVCContext *s, int x, int y, int ctb_size) if (s->ps.sps->sao_enabled && !skip) { int y_end = y >= s->ps.sps->height - ctb_size; if (y && x) - sao_filter_CTB(s, x - ctb_size, y - ctb_size); + sao_filter_CTB(lc, s, x - ctb_size, y - ctb_size); if (x && y_end) - sao_filter_CTB(s, x - ctb_size, y); + sao_filter_CTB(lc, s, x - ctb_size, y); if (y && x_end) { - sao_filter_CTB(s, x, y - ctb_size); + sao_filter_CTB(lc, s, x, y - ctb_size); if (s->threads_type & FF_THREAD_FRAME ) ff_thread_report_progress(&s->ref->tf, y, 0); } if (x_end && y_end) { - sao_filter_CTB(s, x , y); + sao_filter_CTB(lc, s, x , y); if (s->threads_type & FF_THREAD_FRAME ) ff_thread_report_progress(&s->ref->tf, y + ctb_size, 0); } @@ -873,14 +874,14 @@ void ff_hevc_hls_filter(HEVCContext *s, int x, int y, int ctb_size) ff_thread_report_progress(&s->ref->tf, y + ctb_size - 4, 0); } -void ff_hevc_hls_filters(HEVCContext *s, int x_ctb, int y_ctb, int ctb_size) +void ff_hevc_hls_filters(HEVCLocalContext *lc, int x_ctb, int y_ctb, int ctb_size) { - int x_end = x_ctb >= s->ps.sps->width - ctb_size; - int y_end = y_ctb >= s->ps.sps->height - ctb_size; + int x_end = x_ctb >= lc->parent->ps.sps->width - ctb_size; + int y_end = y_ctb >= lc->parent->ps.sps->height - ctb_size; if (y_ctb && x_ctb) - ff_hevc_hls_filter(s, x_ctb - ctb_size, y_ctb - ctb_size, ctb_size); + ff_hevc_hls_filter(lc, x_ctb - ctb_size, y_ctb - ctb_size, ctb_size); if (y_ctb && x_end) - ff_hevc_hls_filter(s, x_ctb, y_ctb - ctb_size, ctb_size); + ff_hevc_hls_filter(lc, x_ctb, y_ctb - ctb_size, ctb_size); if (x_ctb && y_end) - ff_hevc_hls_filter(s, x_ctb - ctb_size, y_ctb, ctb_size); + ff_hevc_hls_filter(lc, x_ctb - ctb_size, y_ctb, ctb_size); } diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 4786282669..33c9d74e5f 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -1137,7 +1137,7 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, return AVERROR_INVALIDDATA; } - ff_hevc_set_qPy(s, cb_xBase, cb_yBase, log2_cb_size); + ff_hevc_set_qPy(lc, cb_xBase, cb_yBase, log2_cb_size); } if (s->sh.cu_chroma_qp_offset_enabled_flag && cbf_chroma && @@ -1431,7 +1431,7 @@ do { } } if (!s->sh.disable_deblocking_filter_flag) { - ff_hevc_deblocking_boundary_strengths(s, x0, y0, log2_trafo_size); + ff_hevc_deblocking_boundary_strengths(lc, x0, y0, log2_trafo_size); if (s->ps.pps->transquant_bypass_enable_flag && lc->cu.cu_transquant_bypass_flag) set_deblocking_bypass(s, x0, y0, log2_trafo_size); @@ -1460,7 +1460,7 @@ static int hls_pcm_sample(HEVCContext *s, int x0, int y0, int log2_cb_size) int ret; if (!s->sh.disable_deblocking_filter_flag) - ff_hevc_deblocking_boundary_strengths(s, x0, y0, log2_cb_size); + ff_hevc_deblocking_boundary_strengths(lc, x0, y0, log2_cb_size); ret = init_get_bits(&gb, pcm, length); if (ret < 0) @@ -2224,7 +2224,7 @@ static int hls_coding_unit(HEVCContext *s, int x0, int y0, int log2_cb_size) intra_prediction_unit_default_value(s, x0, y0, log2_cb_size); if (!s->sh.disable_deblocking_filter_flag) - ff_hevc_deblocking_boundary_strengths(s, x0, y0, log2_cb_size); + ff_hevc_deblocking_boundary_strengths(lc, x0, y0, log2_cb_size); } else { int pcm_flag = 0; @@ -2312,13 +2312,13 @@ static int hls_coding_unit(HEVCContext *s, int x0, int y0, int log2_cb_size) return ret; } else { if (!s->sh.disable_deblocking_filter_flag) - ff_hevc_deblocking_boundary_strengths(s, x0, y0, log2_cb_size); + ff_hevc_deblocking_boundary_strengths(lc, x0, y0, log2_cb_size); } } } if (s->ps.pps->cu_qp_delta_enabled_flag && lc->tu.is_cu_qp_delta_coded == 0) - ff_hevc_set_qPy(s, x0, y0, log2_cb_size); + ff_hevc_set_qPy(lc, x0, y0, log2_cb_size); x = y_cb * min_cb_width + x_cb; for (y = 0; y < length; y++) { @@ -2473,6 +2473,7 @@ static void hls_decode_neighbour(HEVCContext *s, int x_ctb, int y_ctb, static int hls_decode_entry(AVCodecContext *avctxt, void *isFilterThread) { HEVCContext *s = avctxt->priv_data; + HEVCLocalContext *const lc = s->HEVClc; int ctb_size = 1 << s->ps.sps->log2_ctb_size; int more_data = 1; int x_ctb = 0; @@ -2521,12 +2522,12 @@ static int hls_decode_entry(AVCodecContext *avctxt, void *isFilterThread) ctb_addr_ts++; ff_hevc_save_states(s, ctb_addr_ts); - ff_hevc_hls_filters(s, x_ctb, y_ctb, ctb_size); + ff_hevc_hls_filters(lc, x_ctb, y_ctb, ctb_size); } if (x_ctb + ctb_size >= s->ps.sps->width && y_ctb + ctb_size >= s->ps.sps->height) - ff_hevc_hls_filter(s, x_ctb, y_ctb, ctb_size); + ff_hevc_hls_filter(lc, x_ctb, y_ctb, ctb_size); return ctb_addr_ts; } @@ -2593,7 +2594,7 @@ static int hls_decode_entry_wpp(AVCodecContext *avctxt, void *input_ctb_row, int ff_hevc_save_states(s, ctb_addr_ts); ff_thread_report_progress2(s->avctx, ctb_row, thread, 1); - ff_hevc_hls_filters(s, x_ctb, y_ctb, ctb_size); + 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); @@ -2602,7 +2603,7 @@ static int hls_decode_entry_wpp(AVCodecContext *avctxt, void *input_ctb_row, int } if ((x_ctb+ctb_size) >= s->ps.sps->width && (y_ctb+ctb_size) >= s->ps.sps->height ) { - ff_hevc_hls_filter(s, x_ctb, y_ctb, ctb_size); + ff_hevc_hls_filter(lc, x_ctb, y_ctb, ctb_size); ff_thread_report_progress2(s->avctx, ctb_row , thread, SHIFT_CTB_WPP); return ctb_addr_ts; } diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h index 3bb3fdb90a..e2dba54f26 100644 --- a/libavcodec/hevcdec.h +++ b/libavcodec/hevcdec.h @@ -676,16 +676,16 @@ void ff_hevc_luma_mv_mvp_mode(HEVCLocalContext *lc, int x0, int y0, int nPbW, int nPbH, int log2_cb_size, int part_idx, int merge_idx, MvField *mv, int mvp_lx_flag, int LX); -void ff_hevc_set_qPy(HEVCContext *s, int xBase, int yBase, +void ff_hevc_hls_filter(HEVCLocalContext *lc, int x, int y, int ctb_size); +void ff_hevc_hls_filters(HEVCLocalContext *lc, int x_ctb, int y_ctb, int ctb_size); +void ff_hevc_set_qPy(HEVCLocalContext *lc, int xBase, int yBase, int log2_cb_size); -void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0, +void ff_hevc_deblocking_boundary_strengths(HEVCLocalContext *lc, int x0, int y0, int log2_trafo_size); int ff_hevc_cu_qp_delta_sign_flag(HEVCContext *s); int ff_hevc_cu_qp_delta_abs(HEVCContext *s); int ff_hevc_cu_chroma_qp_offset_flag(HEVCContext *s); int ff_hevc_cu_chroma_qp_offset_idx(HEVCContext *s); -void ff_hevc_hls_filter(HEVCContext *s, int x, int y, int ctb_size); -void ff_hevc_hls_filters(HEVCContext *s, int x_ctb, int y_ctb, int ctb_size); void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0, int log2_trafo_size, enum ScanType scan_idx, int c_idx); From patchwork Thu Jun 30 22:29:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36566 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp620893pzh; Thu, 30 Jun 2022 15:31:35 -0700 (PDT) X-Google-Smtp-Source: AGRyM1v1v16ScfQVnrSqyw/wp7z5S6MyNvKb1cXZS5z4iaTGpAjYYgnhvgc2hRN8l5cxPI3mBKcr X-Received: by 2002:a17:906:7c0c:b0:6f9:1fc:ebf3 with SMTP id t12-20020a1709067c0c00b006f901fcebf3mr10931899ejo.403.1656628295480; Thu, 30 Jun 2022 15:31:35 -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 oz37-20020a1709077da500b006f508f07fa1si375379ejc.458.2022.06.30.15.31.35; Thu, 30 Jun 2022 15:31:35 -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=eZVWChU6; 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 91EB268B7D4; Fri, 1 Jul 2022 01:30:48 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2053.outbound.protection.outlook.com [40.92.91.53]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4922168B7D8 for ; Fri, 1 Jul 2022 01:30:45 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HawfdOfL5/HJiAtFsjUHPv86RDoKAQxdihUNuWizE7mfgumg0qJI90esecisKgDg1s5GFdp1R/Pzl20SHH8tQM6/gJwwyvacE188wJ9KntFD58AapKUjynYCg8arG8N9pWfBRodLQ1GKEJwuPmfn+xFo8r3D6q+hjmslLWiqSsWpReCgU8VB6DO2dpLeve2i3vE/tb0dASp8XeRlXpQ+Noi4QVT5YBiRljMkmzXo38FGbymvtLFByVuafp4SULXCEbP4MtnL7e0UN4C2prvitCciCUNirKZyqoV2IPjqjZzcYjoosY8fgXM4PoI5TEJdryQpEYpe1UTaE+3qF0vmcA== 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=9a/DuBPP82LeIRp7n6Kff0SKxUbXixh2toob7OYZhDo=; b=gbyaldJPgxwiypbgUbeHqEYIoIzO66rX25T9TYEGFNRiHmgERSdO9NmjmizTLvb42xNlWuq+WycYFNm1RT1+lSdOlMIeRz8R8DWRs5xqPp9ytZWhlLuHch6Go7WNmLQUM84YBk33glJwc+G2ddqNLe63S43ovEA3QvNu5/pFiGqf2IfEST5DO5S0ZVpo6xsY725S89sp/2gyYKbcYJRqGq6MHtYT/ztaY00sVQb+2MFz62Q9llezg/eU0ethP/5/DbrbpqECOQV5nQZ+QtstYvzNUu7cXs2hcy9mbfm8ogwUp03LLo+P/vGHcBZeLzbcf0nuXrte4f5Md94CldwEBA== 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=9a/DuBPP82LeIRp7n6Kff0SKxUbXixh2toob7OYZhDo=; b=eZVWChU6aqQmHL8Ay8aC5zm/9yge9ffc6AXiqFvZXepy2epJ3ruC13JOA41WM28yXeZ8KUzG+gPr32upS5JiZPkTLnwIU8IItKOJl50tfT879ToX2Nxw+b+h3FuMlxKRvVkFXio8d+L76GKAUX3iJXsS2CsJUZrJtVS9wofcw2ujp7//CF6o4nvfFrF+xqwt/43qRBTswDGqJJe/u0LgPSZ7LNTzDgR5Sx9YIYbJ0I2LnubxSbuIca0U01BU4A7XzGlE/Jr4F4+bK6V/pnyfeYal8PhINz9j76KNR8cWCwEcJcTHKKGvuMxvU7nYkTN89RvTkzU/Y4w9n0cMYGdtiA== 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:44 +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:44 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Jul 2022 00:29:40 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [0TYEETFuvs2serXLAZzlrIr916fMzbwc] 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-8-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a4938c51-c85e-4ded-5dff-08da5ae82b9b X-MS-Exchange-SLBlob-MailProps: ZTmCor6bjd9NOzJ3eMHB3ZNcMHEQAm90xy2vrh6YM+CcJdQOzhHXZ7JwnCXUzCj7h5weJ09823yZ/5YFvju03+qF1fq0xdq5ZK9CVDZOgkO7N58sqWCrEg+qQZArRGRzxtjlQHDunQpAyJ1AegcZFklEF8RnInrkTWWDY4tfkcRZlKqf6YLg7nbttFCzulCPjzid9VyzQumI5IRqb9FKu+xj2le8E0jBDAfkckIPF4t/rK+/ycn27+O5B9M1lWU3lxkN1pzJiRIrdkA5KxCS5Y7aYRECyMDIrPwmd+7llS6JIGGqxGyJPDRwdz/CPdgOl+EmJ0xC7V1WVAph36iWf5EF8xdZeRhmEZ2ns/wrwVeXPwuuGHvvHmdDr9J5fu7izs1aonQQQPTj77R6hNOuRgVpZSPDLhMmoyTzYbDlyVWO3r3tve/KCQq0DVfaa1PzJbr2kwS/GDpCggkE+IBAaC2ef1pnS8m5SPZhowIMOt1qQ+EGpdrI4G4qdJdDP6TEOCc/ueRzCO5lgX9BnseLz45t5Ny2cQL6AzGAfKCresaAd187RZucvI6SNc7ZGG21ssZvasdrhjzEm1XDgv3tfr8WR0b8v2F6ahIbzF7IVH3ItqvHWZQVk6L52jMHj11f/B4iJGD2QD9lHeMmAz21fshmb1RfV0q2E/oUNaGoVAiwRvewIn3jxea5F4IZJ5Qjys8Q3sAb0qkCJ2Cn+BO6IDHbF3HZz+HgiibllYfNGRUymuJY4f6cLYk+D+cuUKPrFdC76IT8rjdOcZBD5wv9Dqn6YNwVuuYbiFopG1924rKeCh482OcQ+532kZtaP0fe X-MS-TrafficTypeDiagnostic: DB3PR0102MB3546:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 7cQ4QiBx4W5UgttuUpmDGrxFwSWheBtopc1Y0OPHBGjDh/0d1o/RTKjHyD8ngUg/4dZqWjIFMyxLynRyrUhcpjvq85E3Xohbqf9V1H9wE5GwGufE4sNU9K8As92smHJ+rbC8ukEjIpbyoiWEeDrNp6EM/F+ZGnfGrD1ETO5b6QulG7MHLed4ZIetTtLPIr0A03jwQX4q+Ynrakzia0HbBiopMHdiqJDS0+C28ZEYJPY96MLK+TJhR0rjm9xoNCkZpD3Uu6x5lFRMbMLDO997mXPPRuUTtGOKb2Kw5UdTYnYiHQqrwAlMuSn30JE+fhn44eZOaam5bvWgf9/0oLgrQ+0541f00NGsy3ROfOex3dDEJpLg3VAUxISYZ1pPW0yqtSQfDFHNgPvzEhN60NZS0QtnIofBWUwamIaoG/K3dHdVpBc6hk3jIqTYQfZR4U8ZC9japUhfsdrqbjaHcQ05OfQxwK1+fUcp1R5uXqypIjRTpGnOXrQVHDzJxtgBgvUXjc1mVNUays9uUqOO49YGxa+4X+dDM3SJ8ZlbBs0A2S6ZV11R6G5uAM/4tzYR5nxstE0Wo6sMYMbZvnrYNylokEa0x0eyIurpYQfrsP3fHgQSJzOuac8s6KSEIpOAfuYAgs8xZABwbtGNaGjlxcJApIhBrhYmxReufm8j7sxoTNhLIuy2nvGLR2Yvk+CaD4cs X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: OOFU1OfC26yljXx3aP4NoG5sQ05dFYFVAFtuGO8nSaU3Q5FZNaSEFsQ8HuxzKKxClCMbM7i+p2cPLfBjZLEnQj0koGzbzgOws4ChtEyDgAOcf270s9IbI/x1JI9W6LqePDjLjMfJvm/3HApQs1vX1YYC8cSnwvyohYWyXMrUnndxgH+nw6OE3hDWB68QUxyndRtlHt4KNoEU2XCXd71pnIb9rx9VxEMMPPuhLjrPkMlM89j2RyyNP1zeieBoTtlT5qowun5otVaxjxskeB5ubUavBuHKx367X3SILwLC39754QrUCLg9UdjDyHJ6xWEFgbamf6D59nEFUCcYgnvZXofH97N0gUjzLE+DCAckVCsZaoivaF0Sthgl4doaRrGtlqc7/DWFfKC59ttBqJeqWq8CfA18Op9x6o7+0d8pr/GmVWcw3raDz5saZ4lqhP2qmU+b/rCA6G60RJwOP6ZA3Z/2Uw8fTEqSKf52jec8k+QeFvHxAHZrZA+3meZq9NgpmPgFb1wCiqhoM746AXXjz3/9lDvH6WyVpEBJdl8FIsYDOZuQzmPnHIPHYCWpy14E+UaYrRDrcjIqfrXimTLh9xrQFgSbiZnFrltQoSrP4Zn/ZEYVVPapognnPi5NG6jLNhyR2Yy6i0ZoSP9CUi+idtItSebgGPiLd26iIsl9N+A++c7zovrf/aHE1MBrisuHies760Y1eS/0Zrl8ZquiKt0IsGZppLnX272GovKjNdMvEeXRAoksDEcBYibu/IP19LKXwUA+5xd1k9qDvCcenZ0aTiPlAZ8Lt7Apa4fDzEurJzNDaZhu6J6BkXDzGVMYJwpUcUHXSctG2EiDBTnWt3sFXNzIgC91qbQT/1FUIY4qsht52QktS2ZU1qtnVsmfsE+t6XtKYuy80ftAGoXloc4CgT0TXWNNNYrzH50HHzJ0MrbAZUxBEX6DhslpzbJzSR7KAH1jKlNFSRJhU3/WAnjmocEWDspBmwqjl+2DDc4FDR8PY7Pha5BAcsdzlrFUtJ3Bm9lYWzwRfag+Ablk51G0D/blojisuryOeqOuTCvYNVEmInE/aAodPNTXM0UlfxLWnCRWmzG+i5kPPmFbGnIg0+jAsQ+snV1RJhsk4Wx5fxWbwth298jDfudmnHJErhDgE6GLMd6EKkpaToDZOHu6TU5KxTVFjbn7CsMgsMebTbf81Z6L2w5t9Kkh4LQfCenC7mWkHn0RhBk0Mi6pSVp6kqSlKOO8O28qokxA6/Hy/Y/GcOxq5XMlRZ59gPprZMDueAa6vW0kwsogd/8s9kWUSEHns8AbJXok2AOKJYM= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a4938c51-c85e-4ded-5dff-08da5ae82b9b 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:43.9673 (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 09/18] avcodec/hevcdec: Add stat_coeffs to HEVCABACState 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: hbd80EmI3jaT The HEVC decoder has both HEVCContext and HEVCLocalContext structures. The latter is supposed to be the structure containing the per-slicethread state. Yet that is not how it is handled in practice: Each HEVCLocalContext has a unique HEVCContext allocated for it and each of these coincides with the main HEVCContext except in exactly one field: The corresponding HEVCLocalContext. This makes it possible to pass the HEVCContext everywhere where logically a HEVCLocalContext should be used. This led to confusion in the first version of what eventually became commit c8bc0f66a875bc3708d8dc11b757f2198606ffd7: Before said commit, the initialization of the Rice parameter derivation state was incorrect; the fix for single-threaded as well as frame-threaded decoding was to add backup stats to HEVCContext that are used when the cabac state is updated*, see https://ffmpeg.org/pipermail/ffmpeg-devel/2020-August/268861.html Yet due to what has been said above, this does not work for slice-threading, because the each HEVCLocalContext has its own HEVCContext, so the Rice parameter state would not be transferred between threads. This is fixed in c8bc0f66a875bc3708d8dc11b757f2198606ffd7 by a hack: It rederives what the previous thread was and accesses the corresponding HEVCContext. Fix this by treating the Rice parameter state the same way the ordinary CABAC parameters are shared between threads: Make them part of the same struct that is shared between slice threads. This does not cause races, because the parts of the code that access these Rice parameters are a subset of the parts of code that access the CABAC parameters. *: And if the persistent_rice_adaptation_enabled_flag is set. Signed-off-by: Andreas Rheinhardt --- libavcodec/hevc_cabac.c | 17 ++++++++--------- libavcodec/hevcdec.c | 10 +++++----- libavcodec/hevcdec.h | 10 +++++++--- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/libavcodec/hevc_cabac.c b/libavcodec/hevc_cabac.c index a194f8a02a..985c97ef2a 100644 --- a/libavcodec/hevc_cabac.c +++ b/libavcodec/hevc_cabac.c @@ -453,19 +453,18 @@ void ff_hevc_save_states(HEVCContext *s, int ctb_addr_ts) (ctb_addr_ts % s->ps.sps->ctb_width == 2 || (s->ps.sps->ctb_width == 2 && ctb_addr_ts % s->ps.sps->ctb_width == 0))) { - memcpy(s->cabac_state, s->HEVClc->cabac_state, HEVC_CONTEXTS); + memcpy(s->cabac->state, s->HEVClc->cabac_state, HEVC_CONTEXTS); if (s->ps.sps->persistent_rice_adaptation_enabled_flag) { - memcpy(s->stat_coeff, s->HEVClc->stat_coeff, HEVC_STAT_COEFFS); + memcpy(s->cabac->stat_coeff, s->HEVClc->stat_coeff, HEVC_STAT_COEFFS); } } } -static void load_states(HEVCContext *s, int thread) +static void load_states(HEVCContext *s) { - memcpy(s->HEVClc->cabac_state, s->cabac_state, HEVC_CONTEXTS); + memcpy(s->HEVClc->cabac_state, s->cabac->state, HEVC_CONTEXTS); if (s->ps.sps->persistent_rice_adaptation_enabled_flag) { - const HEVCContext *prev = s->sList[(thread + s->threads_number - 1) % s->threads_number]; - memcpy(s->HEVClc->stat_coeff, prev->stat_coeff, HEVC_STAT_COEFFS); + memcpy(s->HEVClc->stat_coeff, s->cabac->stat_coeff, HEVC_STAT_COEFFS); } } @@ -508,7 +507,7 @@ static void cabac_init_state(HEVCContext *s) s->HEVClc->stat_coeff[i] = 0; } -int ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts, int thread) +int ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts) { if (ctb_addr_ts == s->ps.pps->ctb_addr_rs_to_ts[s->sh.slice_ctb_addr_rs]) { int ret = cabac_init_decoder(s); @@ -525,7 +524,7 @@ int ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts, int thread) if (s->ps.sps->ctb_width == 1) cabac_init_state(s); else if (s->sh.dependent_slice_segment_flag == 1) - load_states(s, thread); + load_states(s); } } } else { @@ -556,7 +555,7 @@ int ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts, int thread) if (s->ps.sps->ctb_width == 1) cabac_init_state(s); else - load_states(s, thread); + load_states(s); } } } diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 33c9d74e5f..7d4de414cd 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -2501,7 +2501,7 @@ static int hls_decode_entry(AVCodecContext *avctxt, void *isFilterThread) y_ctb = (ctb_addr_rs / ((s->ps.sps->width + ctb_size - 1) >> s->ps.sps->log2_ctb_size)) << s->ps.sps->log2_ctb_size; hls_decode_neighbour(s, x_ctb, y_ctb, ctb_addr_ts); - ret = ff_hevc_cabac_init(s, ctb_addr_ts, 0); + ret = ff_hevc_cabac_init(s, ctb_addr_ts); if (ret < 0) { s->tab_slice_address[ctb_addr_rs] = -1; return ret; @@ -2579,7 +2579,7 @@ static int hls_decode_entry_wpp(AVCodecContext *avctxt, void *input_ctb_row, int return 0; } - ret = ff_hevc_cabac_init(s, ctb_addr_ts, thread); + ret = ff_hevc_cabac_init(s, ctb_addr_ts); if (ret < 0) goto error; hls_sao_param(s, x_ctb >> s->ps.sps->log2_ctb_size, y_ctb >> s->ps.sps->log2_ctb_size); @@ -3601,7 +3601,7 @@ static av_cold int hevc_decode_free(AVCodecContext *avctx) av_freep(&s->md5_ctx); - av_freep(&s->cabac_state); + av_freep(&s->cabac); for (i = 0; i < 3; i++) { av_freep(&s->sao_pixel_buffer_h[i]); @@ -3655,8 +3655,8 @@ static av_cold int hevc_init_context(AVCodecContext *avctx) s->HEVClcList[0] = s->HEVClc; s->sList[0] = s; - s->cabac_state = av_malloc(HEVC_CONTEXTS); - if (!s->cabac_state) + s->cabac = av_malloc(sizeof(*s->cabac)); + if (!s->cabac) return AVERROR(ENOMEM); s->output_frame = av_frame_alloc(); diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h index e2dba54f26..b97b7d1354 100644 --- a/libavcodec/hevcdec.h +++ b/libavcodec/hevcdec.h @@ -226,6 +226,11 @@ enum ScanType { SCAN_VERT, }; +typedef struct HEVCCABACState { + uint8_t state[HEVC_CONTEXTS]; + uint8_t stat_coeff[HEVC_STAT_COEFFS]; +} HEVCCABACState; + typedef struct LongTermRPS { int poc[32]; uint8_t poc_msb_present[32]; @@ -482,8 +487,7 @@ typedef struct HEVCContext { int width; int height; - uint8_t *cabac_state; - uint8_t stat_coeff[HEVC_STAT_COEFFS]; + HEVCCABACState *cabac; /** 1 if the independent slice segment header was successfully parsed */ uint8_t slice_initialized; @@ -601,7 +605,7 @@ int ff_hevc_frame_rps(HEVCContext *s); int ff_hevc_slice_rpl(HEVCContext *s); void ff_hevc_save_states(HEVCContext *s, int ctb_addr_ts); -int ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts, int thread); +int ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts); int ff_hevc_sao_merge_flag_decode(HEVCContext *s); int ff_hevc_sao_type_idx_decode(HEVCContext *s); int ff_hevc_sao_band_position_decode(HEVCContext *s); From patchwork Thu Jun 30 22:29:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36567 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp620956pzh; Thu, 30 Jun 2022 15:31:46 -0700 (PDT) X-Google-Smtp-Source: AGRyM1v4S8AbjHTsJFk4ZMTjFyaBnkq8xJ7vuqEuBbnHjXqQ0h3GzYA064yIIBwkvUVeu2+S7D4A X-Received: by 2002:a05:6402:51ca:b0:437:79a9:4dd with SMTP id r10-20020a05640251ca00b0043779a904ddmr14488264edd.319.1656628305790; Thu, 30 Jun 2022 15:31:45 -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 l3-20020a170906794300b00711bc35fedfsi10304487ejo.957.2022.06.30.15.31.45; Thu, 30 Jun 2022 15:31:45 -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=VEZEtzHF; 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 7C9AC68B7F0; Fri, 1 Jul 2022 01:30:49 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2076.outbound.protection.outlook.com [40.92.91.76]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D749568B7E7 for ; Fri, 1 Jul 2022 01:30:47 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CMCitlgwKPpfhjn+giom5Hmss6p5IfdI1SqCBfLZPWatV5y0ZwlNlPWRLq/OabJ5e3SNCar/xABHyRrGvZr72fWer3PRtQzRRNl4K8Sw7CkfksB6qPOS9IrtLezLbcEWV2/F5CxTapDghzm+eE3vC9OEXFtYXOl3fvM667CrjLzuqFQzCkk+7Ls5aB/dHTqyytBgvMhNWb2e+czAMP5gS97/cOUZKA/Y4GaOmmKyI0/YTtyZCO3bZI4Aq7TckZMMIYlwq18/Q7t/2Iwe9GElNhXnK9+n4D2NXspClQmH184IFWlm4PjHJ9PG48+Mv6jJiLP4kv9PdtXQ9hc/phfCow== 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=QI1WYOLI+czAydrrD0j5mSZfs9LyvoIqvx4pOHXv11Q=; b=aol8zNXE8TN9RdB5tfI37ZINfQRdeliYMmN5jiHvozsl8g5jIQCsRxUL5O4f6ubKxpYsb97ddWeqLxcQhEOhdY4bEW4zmBjjWKVxIDHjgYJl4hCbb29WDylf9SjfJOpiVlXfppbuiLzEpShyHJRxFr2fjvwQ9Rc9+RHDjqoU3HMQpkPacHMPcHaUqg7TtfRpu0wB183lf2Ja7yuNgm64k+IkC3NCEFOzC8HsxDip5HAzkcQGBRmu6LOx0rOxPY9vzwCk3ExrD5zMWKjqONLGpeRdY85m4DjKDFeHq031pdBlHrqzUzpT9EzksEZ4Cc5oRQWHWkhZavtsTfJ6CkW4ZA== 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=QI1WYOLI+czAydrrD0j5mSZfs9LyvoIqvx4pOHXv11Q=; b=VEZEtzHFQWiosTZOcw9gx1EZqB7pN+RpeC74OBT34GBfhQ8NhIQpEWM5XWy13xax3jxknbWi3D02HBzXgL97F2DY+i5MXZSiT7UGqdvnIntrPl5+C80/XcBvKt7LiwTnqPA5Z04XCcbSxY4yX8KBaBHTVMoWKydZb13TK2KDlVNeAHcUZHhfWNwd6nmRt80xWQBUwnxgSTRd3HGr/5pa2viJiXdhMw0FyyYQ6mQQFex0qCKAjs6uzq+eRM0EalA0L/mGN6ei6tHqyQwMBTW2zWMuFWElzdHKJ3DeMUqP8gkPeVk7Zpsl0iJk1odvg93iViFhF+jSPkVE06/h5KMikw== 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:45 +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:45 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Jul 2022 00:29:41 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [HPwTAfRRD8kPZVtxJ/62nCxniH4/R6e6] 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-9-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: eeb10c6f-886e-4d32-877d-08da5ae82cad X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiSAA+E0K/sYrHNnfsWcYQJjFXfNsALll8Zgu7UyVlbg2BZ+gvrcAP20VfUbbyQEd67XmlOaRjzPTBR5kgeudZi11g+f14MDekfJS6dok9YwyCnuVYivNep/BHQL9EwkeQLJv6xQziWVzDYnTVaw1xgXY0bF2telIkf1raBfMesBYYADR0EvyhsNa2iv9tdq5d2cVjSkhRdy9zLUq9GJRsZfjaPwLqgdTaeqOgA6Es3nvxP2oCiHyBm1vPe7Ogtno2CLNwxUqMRL+4WqbQ6sVCLsXlT4IMncdRSELpMCNB1zudIomCEW8Z2ezJ4+DMzeZF17Nle6KJ0TttZJDKaBftfwTO4vFtXcfQcLC59ktYtjp2Al4GU8MjmSPUxJRgG6LVQNBujuYp8iDs6tvxwByCd0RaxpJnl5tuH+Te2MQgYy8EQ5liD+xS0CiVmBNr6RBF4c4/2Pg2wiyBNhT1W3HIFMBLLE8qaP1d4aocMDelDuLgd+jp5M1rrSYcBQB8vgkF+ozWFCUTKRm6CbGAnzRfxoQnxzcZBYe8tFr/vLMxxLfPcmEVSvj4s3UUPzP54c8XAVlJpE1viwxkYNaBdxWDgS6Vtle8jr/RxLGJCeRcoHr2JkFl4VpZdt3W63pXcvc8d0DObdeJKuDOjddwLcnqYGGY30PeB9D0jVb4GrbEJ3u6vsLIie3AVMfLasByV7dUHMBFX1yC20bFSZ2JhbE8WH+7SsOpRAA/K5V8TpXvpweZV9b2L1A6bOU+0TYFmXppw= X-MS-TrafficTypeDiagnostic: DB3PR0102MB3546:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VLeHJ4Vp4T1h3966SURPwAyZmJO4rB860tcR1qQVbsV0vWiBO99MbKBP1mVwTc1UaQR6WjDPGF22Mr9AI/DJWS6v6piqK7Bagb5PRhPvZ9ORQIJGUZQJ1p5SBGt9oxWLnZTb7lv4CXCb1fEkzYoZfW5vnxChiRnxSXPEwAea18G4ScSSB5cIrj7mw3sJS26RVpDDUWtmh9+SJC5XqDvI4iBz/9Wwm/J041e7e8qfp6IIPWQ/ml303NlsgfmgRN3ojh3O6mIhipZvBcgsMrAn0DEehL46Lu3nIswJrGd6Oyfy9ye0wJGxysY0SiKldrxP5PjF/W6k4Cc3Ql+JyupTUfEVLtf8mWYiFXLNzLswiC7OX2E+nFpTj1PPveVVYU/EZKSKZQXhvu1WRROtK1Vwqk7/VA28klS2d1sn8hmDcqjsE3YExk3SxKiEhY6vmp0NWhni/of7cQiPPjAkTYLEEZfSL7Dyk4Yqzp1UQDdwt42bSOEA1Ip2NyPJQdMEjmEz5iogaaBEcmKv9Bp0LZkC1Ffm3Hbmv7fTKWEV3b3bl+TJC3zIy5IPBFjdHKCZvyffq5IGU6+DnGD+Gt8L7sqiMeonBRv8Ui00+hoQVMWb+8a6MnuDaaYXIkb6WKehnI8UOGb46ravJ/MG50lHgwNss2+gkvjOsW0wVKbj+B7GLXZtqNCmi3UOEK51Ws5rMLPpx4gs6wq/AVxWzKIN7SDGTA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: brAPw9Eg3YcNSkhZEewW82tRGXp7y7rjMhSdptnmmXGovbWBI56P3glkPhXac0RU+lXil5z9MQJIkD1rLqi8xMx0ttC+Usi+h3NvwCMKivpUO/nlCqp9DKgX9gxU/2/6Ir/RiBGl+/o2+UGtOaKnFXI+WQ5wEEUsxp8baqw0oPgWJ6H5iKbQPvixnQJoCDlCJFmIzpf3HDA/+0tlIqVPR4A+6UhJ+QQt/EQ3uCJrYqipAemPSYLSR2BMAKkVFYWpIcFr7I99Y+g+AG2j+Sx0xZbur8pxF6redvrs27fbO5/uAYzJHjcF2trbJITEEuOmyhP/Pjh+CBp8OiuXGAFFdQlFw1xDl2r6FIKWStJAGE3lUcGULsI0lAxonuvpWuGAQyH7C75Sxxys4ppaJuuUYSafCnjFY4T946wvRygGh5iq/y60oCOlhiAi/EV1J9JXRxVMKgMsec1ds+lHBgK+UqgkxWrv71CIPUfjINGjrvEG43b4W8u3h4GaGb5tHE1lJEsJmHRd5lqfnl6bBMsqsstvr4cayr6Y6QxanCyMTmI1W+Z6ZtEd3KLpZe+kr12N3b9KzcbUafvAU9AdyY5Ip0v24yvzoUM8xdpQxwSdIR/K9hvUfc9lPOE7eWcATuIjRRnhxwiRDtETvBR6KcfSZpL5DmVpx+c1B9Tx6mN6PDuMAgGJ2vZkh9P6nIJaqQse831oZBX0zEk25iFbqYMIoAUupWZe3bfEbSQiT4ABCiLFgTnQw+DHsd4Uyi9bR/bcmIMagHsLaOCvHzyYR+l/CHa8GKcshFfp+SNsjY83noD3vE5qKSHLYkRW+QsbX6uvCHBbRy3H7Kahwq4/tXOpfBDLK/44QFloTP3IhIz/RmF8Bpx8sZUgRmWgm4IL96x13AFWas1zNgqQZStok5kqHHwlnN4xfrBHVZOd2/yepAQ1DtIyvcorDLB+KWvqrAtUp9H/4RsXQnnC5UndtriP8rHgYwsiuoS6qk/U4+A++NofvknmJztCoCmPhgNMWEncnx4VRdXlh3ATbtZj6H1CGI0SYGpNsjtskvGx/X6p5JUF3z8Di+rxQYmNFuBK1hbkpdpsv7LspNEtVp5+O2PgoWE1qVGBTny0kRFU+lsC2Ii73S6Ud5MMfeGceVLMHerfGW1d5UeRGOCXH3+dV/RMK0ppbZZ3oTrTvO/QAFKPXydD4/4jSEqKK3eKNxSPAKjHHdFvf1zZmUH4IjcrQKByJYly04mm9a67C1dRt4YyH+YYzgnhzfqLy6RpHyXYJozAqF/0xUzSJfzNN5ab7llk33iSI6CqWEiTRnFIN2h1SqM= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: eeb10c6f-886e-4d32-877d-08da5ae82cad 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:45.7953 (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 10/18] avcodec/hevc_cabac: Pass HEVCLocalContext when slice-threading 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: YhVKiVq5NZOF The HEVC decoder has both HEVCContext and HEVCLocalContext structures. The latter is supposed to be the structure containing the per-slicethread state. Yet 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. This commit stops doing this for lavc/hevc_cabac.c; it also constifies everything that is possible in order to ensure that no slice thread accidentally modifies the main HEVCContext state. Signed-off-by: Andreas Rheinhardt --- libavcodec/hevc_cabac.c | 310 +++++++++++++++++++++------------------- libavcodec/hevcdec.c | 102 ++++++------- libavcodec/hevcdec.h | 72 +++++----- 3 files changed, 246 insertions(+), 238 deletions(-) diff --git a/libavcodec/hevc_cabac.c b/libavcodec/hevc_cabac.c index 985c97ef2a..f8f349dc4c 100644 --- a/libavcodec/hevc_cabac.c +++ b/libavcodec/hevc_cabac.c @@ -447,24 +447,26 @@ static const uint8_t diag_scan8x8_inv[8][8] = { { 28, 36, 43, 49, 54, 58, 61, 63, }, }; -void ff_hevc_save_states(HEVCContext *s, int ctb_addr_ts) +void ff_hevc_save_states(HEVCLocalContext *lc, int ctb_addr_ts) { + const HEVCContext *const s = lc->parent; + if (s->ps.pps->entropy_coding_sync_enabled_flag && (ctb_addr_ts % s->ps.sps->ctb_width == 2 || (s->ps.sps->ctb_width == 2 && ctb_addr_ts % s->ps.sps->ctb_width == 0))) { - memcpy(s->cabac->state, s->HEVClc->cabac_state, HEVC_CONTEXTS); + memcpy(s->cabac->state, lc->cabac_state, HEVC_CONTEXTS); if (s->ps.sps->persistent_rice_adaptation_enabled_flag) { - memcpy(s->cabac->stat_coeff, s->HEVClc->stat_coeff, HEVC_STAT_COEFFS); + memcpy(s->cabac->stat_coeff, lc->stat_coeff, HEVC_STAT_COEFFS); } } } -static void load_states(HEVCContext *s) +static void load_states(HEVCLocalContext *lc, const HEVCContext *s) { - memcpy(s->HEVClc->cabac_state, s->cabac->state, HEVC_CONTEXTS); + memcpy(lc->cabac_state, s->cabac->state, HEVC_CONTEXTS); if (s->ps.sps->persistent_rice_adaptation_enabled_flag) { - memcpy(s->HEVClc->stat_coeff, s->cabac->stat_coeff, HEVC_STAT_COEFFS); + memcpy(lc->stat_coeff, s->cabac->stat_coeff, HEVC_STAT_COEFFS); } } @@ -473,17 +475,17 @@ static int cabac_reinit(HEVCLocalContext *lc) return skip_bytes(&lc->cc, 0) == NULL ? AVERROR_INVALIDDATA : 0; } -static int cabac_init_decoder(HEVCContext *s) +static int cabac_init_decoder(HEVCLocalContext *lc) { - GetBitContext *gb = &s->HEVClc->gb; + GetBitContext *gb = &lc->gb; skip_bits(gb, 1); align_get_bits(gb); - return ff_init_cabac_decoder(&s->HEVClc->cc, + return ff_init_cabac_decoder(&lc->cc, gb->buffer + get_bits_count(gb) / 8, (get_bits_left(gb) + 7) / 8); } -static void cabac_init_state(HEVCContext *s) +static void cabac_init_state(HEVCLocalContext *lc, const HEVCContext *s) { int init_type = 2 - s->sh.slice_type; int i; @@ -500,31 +502,33 @@ static void cabac_init_state(HEVCContext *s) pre ^= pre >> 31; if (pre > 124) pre = 124 + (pre & 1); - s->HEVClc->cabac_state[i] = pre; + lc->cabac_state[i] = pre; } for (i = 0; i < 4; i++) - s->HEVClc->stat_coeff[i] = 0; + lc->stat_coeff[i] = 0; } -int ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts) +int ff_hevc_cabac_init(HEVCLocalContext *lc, int ctb_addr_ts) { + const HEVCContext *const s = lc->parent; + if (ctb_addr_ts == s->ps.pps->ctb_addr_rs_to_ts[s->sh.slice_ctb_addr_rs]) { - int ret = cabac_init_decoder(s); + int ret = cabac_init_decoder(lc); if (ret < 0) return ret; if (s->sh.dependent_slice_segment_flag == 0 || (s->ps.pps->tiles_enabled_flag && s->ps.pps->tile_id[ctb_addr_ts] != s->ps.pps->tile_id[ctb_addr_ts - 1])) - cabac_init_state(s); + cabac_init_state(lc, s); if (!s->sh.first_slice_in_pic_flag && s->ps.pps->entropy_coding_sync_enabled_flag) { if (ctb_addr_ts % s->ps.sps->ctb_width == 0) { if (s->ps.sps->ctb_width == 1) - cabac_init_state(s); + cabac_init_state(lc, s); else if (s->sh.dependent_slice_segment_flag == 1) - load_states(s); + load_states(lc, s); } } } else { @@ -532,111 +536,112 @@ int ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts) s->ps.pps->tile_id[ctb_addr_ts] != s->ps.pps->tile_id[ctb_addr_ts - 1]) { int ret; if (s->threads_number == 1) - ret = cabac_reinit(s->HEVClc); + ret = cabac_reinit(lc); else { - ret = cabac_init_decoder(s); + ret = cabac_init_decoder(lc); } if (ret < 0) return ret; - cabac_init_state(s); + cabac_init_state(lc, s); } if (s->ps.pps->entropy_coding_sync_enabled_flag) { if (ctb_addr_ts % s->ps.sps->ctb_width == 0) { int ret; - get_cabac_terminate(&s->HEVClc->cc); + get_cabac_terminate(&lc->cc); if (s->threads_number == 1) - ret = cabac_reinit(s->HEVClc); + ret = cabac_reinit(lc); else { - ret = cabac_init_decoder(s); + ret = cabac_init_decoder(lc); } if (ret < 0) return ret; if (s->ps.sps->ctb_width == 1) - cabac_init_state(s); + cabac_init_state(lc, s); else - load_states(s); + load_states(lc, s); } } } return 0; } -#define GET_CABAC(ctx) get_cabac(&s->HEVClc->cc, &s->HEVClc->cabac_state[ctx]) +#define GET_CABAC(ctx) get_cabac(&lc->cc, &lc->cabac_state[ctx]) -int ff_hevc_sao_merge_flag_decode(HEVCContext *s) +int ff_hevc_sao_merge_flag_decode(HEVCLocalContext *lc) { return GET_CABAC(elem_offset[SAO_MERGE_FLAG]); } -int ff_hevc_sao_type_idx_decode(HEVCContext *s) +int ff_hevc_sao_type_idx_decode(HEVCLocalContext *lc) { if (!GET_CABAC(elem_offset[SAO_TYPE_IDX])) return 0; - if (!get_cabac_bypass(&s->HEVClc->cc)) + if (!get_cabac_bypass(&lc->cc)) return SAO_BAND; return SAO_EDGE; } -int ff_hevc_sao_band_position_decode(HEVCContext *s) +int ff_hevc_sao_band_position_decode(HEVCLocalContext *lc) { int i; - int value = get_cabac_bypass(&s->HEVClc->cc); + int value = get_cabac_bypass(&lc->cc); for (i = 0; i < 4; i++) - value = (value << 1) | get_cabac_bypass(&s->HEVClc->cc); + value = (value << 1) | get_cabac_bypass(&lc->cc); return value; } -int ff_hevc_sao_offset_abs_decode(HEVCContext *s) +int ff_hevc_sao_offset_abs_decode(HEVCLocalContext *lc) { int i = 0; - int length = (1 << (FFMIN(s->ps.sps->bit_depth, 10) - 5)) - 1; + int length = (1 << (FFMIN(lc->parent->ps.sps->bit_depth, 10) - 5)) - 1; - while (i < length && get_cabac_bypass(&s->HEVClc->cc)) + while (i < length && get_cabac_bypass(&lc->cc)) i++; return i; } -int ff_hevc_sao_offset_sign_decode(HEVCContext *s) +int ff_hevc_sao_offset_sign_decode(HEVCLocalContext *lc) { - return get_cabac_bypass(&s->HEVClc->cc); + return get_cabac_bypass(&lc->cc); } -int ff_hevc_sao_eo_class_decode(HEVCContext *s) +int ff_hevc_sao_eo_class_decode(HEVCLocalContext *lc) { - int ret = get_cabac_bypass(&s->HEVClc->cc) << 1; - ret |= get_cabac_bypass(&s->HEVClc->cc); + int ret = get_cabac_bypass(&lc->cc) << 1; + ret |= get_cabac_bypass(&lc->cc); return ret; } -int ff_hevc_end_of_slice_flag_decode(HEVCContext *s) +int ff_hevc_end_of_slice_flag_decode(HEVCLocalContext *lc) { - return get_cabac_terminate(&s->HEVClc->cc); + return get_cabac_terminate(&lc->cc); } -int ff_hevc_cu_transquant_bypass_flag_decode(HEVCContext *s) +int ff_hevc_cu_transquant_bypass_flag_decode(HEVCLocalContext *lc) { return GET_CABAC(elem_offset[CU_TRANSQUANT_BYPASS_FLAG]); } -int ff_hevc_skip_flag_decode(HEVCContext *s, int x0, int y0, int x_cb, int y_cb) +int ff_hevc_skip_flag_decode(HEVCLocalContext *lc, int x0, int y0, int x_cb, int y_cb) { + const HEVCContext *const s = lc->parent; int min_cb_width = s->ps.sps->min_cb_width; int inc = 0; int x0b = av_mod_uintp2(x0, s->ps.sps->log2_ctb_size); int y0b = av_mod_uintp2(y0, s->ps.sps->log2_ctb_size); - if (s->HEVClc->ctb_left_flag || x0b) + if (lc->ctb_left_flag || x0b) inc = !!SAMPLE_CTB(s->skip_flag, x_cb - 1, y_cb); - if (s->HEVClc->ctb_up_flag || y0b) + if (lc->ctb_up_flag || y0b) inc += !!SAMPLE_CTB(s->skip_flag, x_cb, y_cb - 1); return GET_CABAC(elem_offset[SKIP_FLAG] + inc); } -int ff_hevc_cu_qp_delta_abs(HEVCContext *s) +int ff_hevc_cu_qp_delta_abs(HEVCLocalContext *lc) { int prefix_val = 0; int suffix_val = 0; @@ -648,34 +653,34 @@ int ff_hevc_cu_qp_delta_abs(HEVCContext *s) } if (prefix_val >= 5) { int k = 0; - while (k < 7 && get_cabac_bypass(&s->HEVClc->cc)) { + while (k < 7 && get_cabac_bypass(&lc->cc)) { suffix_val += 1 << k; k++; } if (k == 7) { - av_log(s->avctx, AV_LOG_ERROR, "CABAC_MAX_BIN : %d\n", k); + av_log(lc->logctx, AV_LOG_ERROR, "CABAC_MAX_BIN : %d\n", k); return AVERROR_INVALIDDATA; } while (k--) - suffix_val += get_cabac_bypass(&s->HEVClc->cc) << k; + suffix_val += get_cabac_bypass(&lc->cc) << k; } return prefix_val + suffix_val; } -int ff_hevc_cu_qp_delta_sign_flag(HEVCContext *s) +int ff_hevc_cu_qp_delta_sign_flag(HEVCLocalContext *lc) { - return get_cabac_bypass(&s->HEVClc->cc); + return get_cabac_bypass(&lc->cc); } -int ff_hevc_cu_chroma_qp_offset_flag(HEVCContext *s) +int ff_hevc_cu_chroma_qp_offset_flag(HEVCLocalContext *lc) { return GET_CABAC(elem_offset[CU_CHROMA_QP_OFFSET_FLAG]); } -int ff_hevc_cu_chroma_qp_offset_idx(HEVCContext *s) +int ff_hevc_cu_chroma_qp_offset_idx(HEVCLocalContext *lc) { - int c_max= FFMAX(5, s->ps.pps->chroma_qp_offset_list_len_minus1); + int c_max= FFMAX(5, lc->parent->ps.pps->chroma_qp_offset_list_len_minus1); int i = 0; while (i < c_max && GET_CABAC(elem_offset[CU_CHROMA_QP_OFFSET_IDX])) @@ -684,23 +689,25 @@ int ff_hevc_cu_chroma_qp_offset_idx(HEVCContext *s) return i; } -int ff_hevc_pred_mode_decode(HEVCContext *s) +int ff_hevc_pred_mode_decode(HEVCLocalContext *lc) { return GET_CABAC(elem_offset[PRED_MODE_FLAG]); } -int ff_hevc_split_coding_unit_flag_decode(HEVCContext *s, int ct_depth, int x0, int y0) +int ff_hevc_split_coding_unit_flag_decode(HEVCLocalContext *lc, int ct_depth, int x0, int y0) { + const HEVCContext *const s = lc->parent; + const HEVCSPS *const sps = s->ps.sps; int inc = 0, depth_left = 0, depth_top = 0; - int x0b = av_mod_uintp2(x0, s->ps.sps->log2_ctb_size); - int y0b = av_mod_uintp2(y0, s->ps.sps->log2_ctb_size); - int x_cb = x0 >> s->ps.sps->log2_min_cb_size; - int y_cb = y0 >> s->ps.sps->log2_min_cb_size; + int x0b = av_mod_uintp2(x0, sps->log2_ctb_size); + int y0b = av_mod_uintp2(y0, sps->log2_ctb_size); + int x_cb = x0 >> sps->log2_min_cb_size; + int y_cb = y0 >> sps->log2_min_cb_size; - if (s->HEVClc->ctb_left_flag || x0b) - depth_left = s->tab_ct_depth[(y_cb) * s->ps.sps->min_cb_width + x_cb - 1]; - if (s->HEVClc->ctb_up_flag || y0b) - depth_top = s->tab_ct_depth[(y_cb - 1) * s->ps.sps->min_cb_width + x_cb]; + if (lc->ctb_left_flag || x0b) + depth_left = s->tab_ct_depth[(y_cb) * sps->min_cb_width + x_cb - 1]; + if (lc->ctb_up_flag || y0b) + depth_top = s->tab_ct_depth[(y_cb - 1) * sps->min_cb_width + x_cb]; inc += (depth_left > ct_depth); inc += (depth_top > ct_depth); @@ -708,12 +715,12 @@ int ff_hevc_split_coding_unit_flag_decode(HEVCContext *s, int ct_depth, int x0, return GET_CABAC(elem_offset[SPLIT_CODING_UNIT_FLAG] + inc); } -int ff_hevc_part_mode_decode(HEVCContext *s, int log2_cb_size) +int ff_hevc_part_mode_decode(HEVCLocalContext *lc, int log2_cb_size) { if (GET_CABAC(elem_offset[PART_MODE])) // 1 return PART_2Nx2N; - if (log2_cb_size == s->ps.sps->log2_min_cb_size) { - if (s->HEVClc->cu.pred_mode == MODE_INTRA) // 0 + if (log2_cb_size == lc->parent->ps.sps->log2_min_cb_size) { + if (lc->cu.pred_mode == MODE_INTRA) // 0 return PART_NxN; if (GET_CABAC(elem_offset[PART_MODE] + 1)) // 01 return PART_2NxN; @@ -724,7 +731,7 @@ int ff_hevc_part_mode_decode(HEVCContext *s, int log2_cb_size) return PART_NxN; // 000 } - if (!s->ps.sps->amp_enabled_flag) { + if (!lc->parent->ps.sps->amp_enabled_flag) { if (GET_CABAC(elem_offset[PART_MODE] + 1)) // 01 return PART_2NxN; return PART_Nx2N; @@ -733,84 +740,84 @@ int ff_hevc_part_mode_decode(HEVCContext *s, int log2_cb_size) if (GET_CABAC(elem_offset[PART_MODE] + 1)) { // 01X, 01XX if (GET_CABAC(elem_offset[PART_MODE] + 3)) // 011 return PART_2NxN; - if (get_cabac_bypass(&s->HEVClc->cc)) // 0101 + if (get_cabac_bypass(&lc->cc)) // 0101 return PART_2NxnD; return PART_2NxnU; // 0100 } if (GET_CABAC(elem_offset[PART_MODE] + 3)) // 001 return PART_Nx2N; - if (get_cabac_bypass(&s->HEVClc->cc)) // 0001 + if (get_cabac_bypass(&lc->cc)) // 0001 return PART_nRx2N; return PART_nLx2N; // 0000 } -int ff_hevc_pcm_flag_decode(HEVCContext *s) +int ff_hevc_pcm_flag_decode(HEVCLocalContext *lc) { - return get_cabac_terminate(&s->HEVClc->cc); + return get_cabac_terminate(&lc->cc); } -int ff_hevc_prev_intra_luma_pred_flag_decode(HEVCContext *s) +int ff_hevc_prev_intra_luma_pred_flag_decode(HEVCLocalContext *lc) { return GET_CABAC(elem_offset[PREV_INTRA_LUMA_PRED_FLAG]); } -int ff_hevc_mpm_idx_decode(HEVCContext *s) +int ff_hevc_mpm_idx_decode(HEVCLocalContext *lc) { int i = 0; - while (i < 2 && get_cabac_bypass(&s->HEVClc->cc)) + while (i < 2 && get_cabac_bypass(&lc->cc)) i++; return i; } -int ff_hevc_rem_intra_luma_pred_mode_decode(HEVCContext *s) +int ff_hevc_rem_intra_luma_pred_mode_decode(HEVCLocalContext *lc) { int i; - int value = get_cabac_bypass(&s->HEVClc->cc); + int value = get_cabac_bypass(&lc->cc); for (i = 0; i < 4; i++) - value = (value << 1) | get_cabac_bypass(&s->HEVClc->cc); + value = (value << 1) | get_cabac_bypass(&lc->cc); return value; } -int ff_hevc_intra_chroma_pred_mode_decode(HEVCContext *s) +int ff_hevc_intra_chroma_pred_mode_decode(HEVCLocalContext *lc) { int ret; if (!GET_CABAC(elem_offset[INTRA_CHROMA_PRED_MODE])) return 4; - ret = get_cabac_bypass(&s->HEVClc->cc) << 1; - ret |= get_cabac_bypass(&s->HEVClc->cc); + ret = get_cabac_bypass(&lc->cc) << 1; + ret |= get_cabac_bypass(&lc->cc); return ret; } -int ff_hevc_merge_idx_decode(HEVCContext *s) +int ff_hevc_merge_idx_decode(HEVCLocalContext *lc) { int i = GET_CABAC(elem_offset[MERGE_IDX]); if (i != 0) { - while (i < s->sh.max_num_merge_cand-1 && get_cabac_bypass(&s->HEVClc->cc)) + while (i < lc->parent->sh.max_num_merge_cand-1 && get_cabac_bypass(&lc->cc)) i++; } return i; } -int ff_hevc_merge_flag_decode(HEVCContext *s) +int ff_hevc_merge_flag_decode(HEVCLocalContext *lc) { return GET_CABAC(elem_offset[MERGE_FLAG]); } -int ff_hevc_inter_pred_idc_decode(HEVCContext *s, int nPbW, int nPbH) +int ff_hevc_inter_pred_idc_decode(HEVCLocalContext *lc, int nPbW, int nPbH) { if (nPbW + nPbH == 12) return GET_CABAC(elem_offset[INTER_PRED_IDC] + 4); - if (GET_CABAC(elem_offset[INTER_PRED_IDC] + s->HEVClc->ct_depth)) + if (GET_CABAC(elem_offset[INTER_PRED_IDC] + lc->ct_depth)) return PRED_BI; return GET_CABAC(elem_offset[INTER_PRED_IDC] + 4); } -int ff_hevc_ref_idx_lx_decode(HEVCContext *s, int num_ref_idx_lx) +int ff_hevc_ref_idx_lx_decode(HEVCLocalContext *lc, int num_ref_idx_lx) { int i = 0; int max = num_ref_idx_lx - 1; @@ -819,87 +826,88 @@ int ff_hevc_ref_idx_lx_decode(HEVCContext *s, int num_ref_idx_lx) while (i < max_ctx && GET_CABAC(elem_offset[REF_IDX_L0] + i)) i++; if (i == 2) { - while (i < max && get_cabac_bypass(&s->HEVClc->cc)) + while (i < max && get_cabac_bypass(&lc->cc)) i++; } return i; } -int ff_hevc_mvp_lx_flag_decode(HEVCContext *s) +int ff_hevc_mvp_lx_flag_decode(HEVCLocalContext *lc) { return GET_CABAC(elem_offset[MVP_LX_FLAG]); } -int ff_hevc_no_residual_syntax_flag_decode(HEVCContext *s) +int ff_hevc_no_residual_syntax_flag_decode(HEVCLocalContext *lc) { return GET_CABAC(elem_offset[NO_RESIDUAL_DATA_FLAG]); } -static av_always_inline int abs_mvd_greater0_flag_decode(HEVCContext *s) +static av_always_inline int abs_mvd_greater0_flag_decode(HEVCLocalContext *lc) { return GET_CABAC(elem_offset[ABS_MVD_GREATER0_FLAG]); } -static av_always_inline int abs_mvd_greater1_flag_decode(HEVCContext *s) +static av_always_inline int abs_mvd_greater1_flag_decode(HEVCLocalContext *lc) { return GET_CABAC(elem_offset[ABS_MVD_GREATER1_FLAG] + 1); } -static av_always_inline int mvd_decode(HEVCContext *s) +static av_always_inline int mvd_decode(HEVCLocalContext *lc) { int ret = 2; int k = 1; - while (k < CABAC_MAX_BIN && get_cabac_bypass(&s->HEVClc->cc)) { + while (k < CABAC_MAX_BIN && get_cabac_bypass(&lc->cc)) { ret += 1U << k; k++; } if (k == CABAC_MAX_BIN) { - av_log(s->avctx, AV_LOG_ERROR, "CABAC_MAX_BIN : %d\n", k); + av_log(lc->logctx, AV_LOG_ERROR, "CABAC_MAX_BIN : %d\n", k); return 0; } while (k--) - ret += get_cabac_bypass(&s->HEVClc->cc) << k; - return get_cabac_bypass_sign(&s->HEVClc->cc, -ret); + ret += get_cabac_bypass(&lc->cc) << k; + return get_cabac_bypass_sign(&lc->cc, -ret); } -static av_always_inline int mvd_sign_flag_decode(HEVCContext *s) +static av_always_inline int mvd_sign_flag_decode(HEVCLocalContext *lc) { - return get_cabac_bypass_sign(&s->HEVClc->cc, -1); + return get_cabac_bypass_sign(&lc->cc, -1); } -int ff_hevc_split_transform_flag_decode(HEVCContext *s, int log2_trafo_size) +int ff_hevc_split_transform_flag_decode(HEVCLocalContext *lc, int log2_trafo_size) { return GET_CABAC(elem_offset[SPLIT_TRANSFORM_FLAG] + 5 - log2_trafo_size); } -int ff_hevc_cbf_cb_cr_decode(HEVCContext *s, int trafo_depth) +int ff_hevc_cbf_cb_cr_decode(HEVCLocalContext *lc, int trafo_depth) { return GET_CABAC(elem_offset[CBF_CB_CR] + trafo_depth); } -int ff_hevc_cbf_luma_decode(HEVCContext *s, int trafo_depth) +int ff_hevc_cbf_luma_decode(HEVCLocalContext *lc, int trafo_depth) { return GET_CABAC(elem_offset[CBF_LUMA] + !trafo_depth); } -static int hevc_transform_skip_flag_decode(HEVCContext *s, int c_idx) +static int hevc_transform_skip_flag_decode(HEVCLocalContext *lc, int c_idx) { return GET_CABAC(elem_offset[TRANSFORM_SKIP_FLAG] + !!c_idx); } -static int explicit_rdpcm_flag_decode(HEVCContext *s, int c_idx) +static int explicit_rdpcm_flag_decode(HEVCLocalContext *lc, int c_idx) { return GET_CABAC(elem_offset[EXPLICIT_RDPCM_FLAG] + !!c_idx); } -static int explicit_rdpcm_dir_flag_decode(HEVCContext *s, int c_idx) +static int explicit_rdpcm_dir_flag_decode(HEVCLocalContext *lc, int c_idx) { return GET_CABAC(elem_offset[EXPLICIT_RDPCM_DIR_FLAG] + !!c_idx); } -int ff_hevc_log2_res_scale_abs(HEVCContext *s, int idx) { +int ff_hevc_log2_res_scale_abs(HEVCLocalContext *lc, int idx) +{ int i =0; while (i < 4 && GET_CABAC(elem_offset[LOG2_RES_SCALE_ABS] + 4 * idx + i)) @@ -908,11 +916,12 @@ int ff_hevc_log2_res_scale_abs(HEVCContext *s, int idx) { return i; } -int ff_hevc_res_scale_sign_flag(HEVCContext *s, int idx) { +int ff_hevc_res_scale_sign_flag(HEVCLocalContext *lc, int idx) +{ return GET_CABAC(elem_offset[RES_SCALE_SIGN_FLAG] + idx); } -static av_always_inline void last_significant_coeff_xy_prefix_decode(HEVCContext *s, int c_idx, +static av_always_inline void last_significant_coeff_xy_prefix_decode(HEVCLocalContext *lc, int c_idx, int log2_size, int *last_scx_prefix, int *last_scy_prefix) { int i = 0; @@ -938,19 +947,19 @@ static av_always_inline void last_significant_coeff_xy_prefix_decode(HEVCContext *last_scy_prefix = i; } -static av_always_inline int last_significant_coeff_suffix_decode(HEVCContext *s, +static av_always_inline int last_significant_coeff_suffix_decode(HEVCLocalContext *lc, int last_significant_coeff_prefix) { int i; int length = (last_significant_coeff_prefix >> 1) - 1; - int value = get_cabac_bypass(&s->HEVClc->cc); + int value = get_cabac_bypass(&lc->cc); for (i = 1; i < length; i++) - value = (value << 1) | get_cabac_bypass(&s->HEVClc->cc); + value = (value << 1) | get_cabac_bypass(&lc->cc); return value; } -static av_always_inline int significant_coeff_group_flag_decode(HEVCContext *s, int c_idx, int ctx_cg) +static av_always_inline int significant_coeff_group_flag_decode(HEVCLocalContext *lc, int c_idx, int ctx_cg) { int inc; @@ -958,19 +967,19 @@ static av_always_inline int significant_coeff_group_flag_decode(HEVCContext *s, return GET_CABAC(elem_offset[SIGNIFICANT_COEFF_GROUP_FLAG] + inc); } -static av_always_inline int significant_coeff_flag_decode(HEVCContext *s, int x_c, int y_c, +static av_always_inline int significant_coeff_flag_decode(HEVCLocalContext *lc, int x_c, int y_c, int offset, const uint8_t *ctx_idx_map) { int inc = ctx_idx_map[(y_c << 2) + x_c] + offset; return GET_CABAC(elem_offset[SIGNIFICANT_COEFF_FLAG] + inc); } -static av_always_inline int significant_coeff_flag_decode_0(HEVCContext *s, int c_idx, int offset) +static av_always_inline int significant_coeff_flag_decode_0(HEVCLocalContext *lc, int c_idx, int offset) { return GET_CABAC(elem_offset[SIGNIFICANT_COEFF_FLAG] + offset); } -static av_always_inline int coeff_abs_level_greater1_flag_decode(HEVCContext *s, int c_idx, int inc) +static av_always_inline int coeff_abs_level_greater1_flag_decode(HEVCLocalContext *lc, int c_idx, int inc) { if (c_idx > 0) @@ -979,7 +988,7 @@ static av_always_inline int coeff_abs_level_greater1_flag_decode(HEVCContext *s, return GET_CABAC(elem_offset[COEFF_ABS_LEVEL_GREATER1_FLAG] + inc); } -static av_always_inline int coeff_abs_level_greater2_flag_decode(HEVCContext *s, int c_idx, int inc) +static av_always_inline int coeff_abs_level_greater2_flag_decode(HEVCLocalContext *lc, int c_idx, int inc) { if (c_idx > 0) inc += 4; @@ -987,47 +996,47 @@ static av_always_inline int coeff_abs_level_greater2_flag_decode(HEVCContext *s, return GET_CABAC(elem_offset[COEFF_ABS_LEVEL_GREATER2_FLAG] + inc); } -static av_always_inline int coeff_abs_level_remaining_decode(HEVCContext *s, int rc_rice_param) +static av_always_inline int coeff_abs_level_remaining_decode(HEVCLocalContext *lc, int rc_rice_param) { int prefix = 0; int suffix = 0; int last_coeff_abs_level_remaining; int i; - while (prefix < CABAC_MAX_BIN && get_cabac_bypass(&s->HEVClc->cc)) + while (prefix < CABAC_MAX_BIN && get_cabac_bypass(&lc->cc)) prefix++; if (prefix < 3) { for (i = 0; i < rc_rice_param; i++) - suffix = (suffix << 1) | get_cabac_bypass(&s->HEVClc->cc); + suffix = (suffix << 1) | get_cabac_bypass(&lc->cc); last_coeff_abs_level_remaining = (prefix << rc_rice_param) + suffix; } else { int prefix_minus3 = prefix - 3; if (prefix == CABAC_MAX_BIN || prefix_minus3 + rc_rice_param > 16 + 6) { - av_log(s->avctx, AV_LOG_ERROR, "CABAC_MAX_BIN : %d\n", prefix); + av_log(lc->logctx, AV_LOG_ERROR, "CABAC_MAX_BIN : %d\n", prefix); return 0; } for (i = 0; i < prefix_minus3 + rc_rice_param; i++) - suffix = (suffix << 1) | get_cabac_bypass(&s->HEVClc->cc); + suffix = (suffix << 1) | get_cabac_bypass(&lc->cc); last_coeff_abs_level_remaining = (((1 << prefix_minus3) + 3 - 1) << rc_rice_param) + suffix; } return last_coeff_abs_level_remaining; } -static av_always_inline int coeff_sign_flag_decode(HEVCContext *s, uint8_t nb) +static av_always_inline int coeff_sign_flag_decode(HEVCLocalContext *lc, uint8_t nb) { int i; int ret = 0; for (i = 0; i < nb; i++) - ret = (ret << 1) | get_cabac_bypass(&s->HEVClc->cc); + ret = (ret << 1) | get_cabac_bypass(&lc->cc); return ret; } -void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0, +void ff_hevc_hls_residual_coding(HEVCLocalContext *lc, int x0, int y0, int log2_trafo_size, enum ScanType scan_idx, int c_idx) { @@ -1036,7 +1045,7 @@ void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0, x_c = (x_cg << 2) + scan_x_off[n]; \ y_c = (y_cg << 2) + scan_y_off[n]; \ } while (0) - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; int transform_skip_flag = 0; int last_significant_coeff_x, last_significant_coeff_y; @@ -1091,7 +1100,7 @@ void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0, if (s->ps.pps->transform_skip_enabled_flag && log2_trafo_size <= s->ps.pps->log2_max_transform_skip_block_size) { - transform_skip_flag = hevc_transform_skip_flag_decode(s, c_idx); + transform_skip_flag = hevc_transform_skip_flag_decode(lc, c_idx); } if (c_idx == 0) { @@ -1150,24 +1159,24 @@ void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0, if (lc->cu.pred_mode == MODE_INTER && s->ps.sps->explicit_rdpcm_enabled_flag && (transform_skip_flag || lc->cu.cu_transquant_bypass_flag)) { - explicit_rdpcm_flag = explicit_rdpcm_flag_decode(s, c_idx); + explicit_rdpcm_flag = explicit_rdpcm_flag_decode(lc, c_idx); if (explicit_rdpcm_flag) { - explicit_rdpcm_dir_flag = explicit_rdpcm_dir_flag_decode(s, c_idx); + explicit_rdpcm_dir_flag = explicit_rdpcm_dir_flag_decode(lc, c_idx); } } - last_significant_coeff_xy_prefix_decode(s, c_idx, log2_trafo_size, + last_significant_coeff_xy_prefix_decode(lc, c_idx, log2_trafo_size, &last_significant_coeff_x, &last_significant_coeff_y); if (last_significant_coeff_x > 3) { - int suffix = last_significant_coeff_suffix_decode(s, last_significant_coeff_x); + int suffix = last_significant_coeff_suffix_decode(lc, last_significant_coeff_x); last_significant_coeff_x = (1 << ((last_significant_coeff_x >> 1) - 1)) * (2 + (last_significant_coeff_x & 1)) + suffix; } if (last_significant_coeff_y > 3) { - int suffix = last_significant_coeff_suffix_decode(s, last_significant_coeff_y); + int suffix = last_significant_coeff_suffix_decode(lc, last_significant_coeff_y); last_significant_coeff_y = (1 << ((last_significant_coeff_y >> 1) - 1)) * (2 + (last_significant_coeff_y & 1)) + suffix; @@ -1246,7 +1255,7 @@ void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0, ctx_cg += significant_coeff_group_flag[x_cg][y_cg + 1]; significant_coeff_group_flag[x_cg][y_cg] = - significant_coeff_group_flag_decode(s, c_idx, ctx_cg); + significant_coeff_group_flag_decode(lc, c_idx, ctx_cg); implicit_non_zero_coeff = 1; } else { significant_coeff_group_flag[x_cg][y_cg] = @@ -1313,7 +1322,7 @@ void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0, for (n = n_end; n > 0; n--) { x_c = scan_x_off[n]; y_c = scan_y_off[n]; - if (significant_coeff_flag_decode(s, x_c, y_c, scf_offset, ctx_idx_map_p)) { + if (significant_coeff_flag_decode(lc, x_c, y_c, scf_offset, ctx_idx_map_p)) { significant_coeff_flag_idx[nb_significant_coeff_flag] = n; nb_significant_coeff_flag++; implicit_non_zero_coeff = 0; @@ -1337,7 +1346,7 @@ void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0, scf_offset = 2 + scf_offset; } } - if (significant_coeff_flag_decode_0(s, c_idx, scf_offset) == 1) { + if (significant_coeff_flag_decode_0(lc, c_idx, scf_offset) == 1) { significant_coeff_flag_idx[nb_significant_coeff_flag] = 0; nb_significant_coeff_flag++; } @@ -1381,7 +1390,7 @@ void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0, for (m = 0; m < (n_end > 8 ? 8 : n_end); m++) { int inc = (ctx_set << 2) + greater1_ctx; coeff_abs_level_greater1_flag[m] = - coeff_abs_level_greater1_flag_decode(s, c_idx, inc); + coeff_abs_level_greater1_flag_decode(lc, c_idx, inc); if (coeff_abs_level_greater1_flag[m]) { greater1_ctx = 0; if (first_greater1_coeff_idx == -1) @@ -1402,12 +1411,12 @@ void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0, sign_hidden = (last_nz_pos_in_cg - first_nz_pos_in_cg >= 4); if (first_greater1_coeff_idx != -1) { - coeff_abs_level_greater1_flag[first_greater1_coeff_idx] += coeff_abs_level_greater2_flag_decode(s, c_idx, ctx_set); + coeff_abs_level_greater1_flag[first_greater1_coeff_idx] += coeff_abs_level_greater2_flag_decode(lc, c_idx, ctx_set); } if (!s->ps.pps->sign_data_hiding_flag || !sign_hidden ) { - coeff_sign_flag = coeff_sign_flag_decode(s, nb_significant_coeff_flag) << (16 - nb_significant_coeff_flag); + coeff_sign_flag = coeff_sign_flag_decode(lc, nb_significant_coeff_flag) << (16 - nb_significant_coeff_flag); } else { - coeff_sign_flag = coeff_sign_flag_decode(s, nb_significant_coeff_flag - 1) << (16 - (nb_significant_coeff_flag - 1)); + coeff_sign_flag = coeff_sign_flag_decode(lc, nb_significant_coeff_flag - 1) << (16 - (nb_significant_coeff_flag - 1)); } for (m = 0; m < n_end; m++) { @@ -1416,7 +1425,7 @@ void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0, if (m < 8) { trans_coeff_level = 1 + coeff_abs_level_greater1_flag[m]; if (trans_coeff_level == ((m == first_greater1_coeff_idx) ? 3 : 2)) { - int last_coeff_abs_level_remaining = coeff_abs_level_remaining_decode(s, c_rice_param); + int last_coeff_abs_level_remaining = coeff_abs_level_remaining_decode(lc, c_rice_param); trans_coeff_level += last_coeff_abs_level_remaining; if (trans_coeff_level > (3 << c_rice_param)) @@ -1432,7 +1441,7 @@ void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0, } } } else { - int last_coeff_abs_level_remaining = coeff_abs_level_remaining_decode(s, c_rice_param); + int last_coeff_abs_level_remaining = coeff_abs_level_remaining_decode(lc, c_rice_param); trans_coeff_level = 1 + last_coeff_abs_level_remaining; if (trans_coeff_level > (3 << c_rice_param)) @@ -1537,26 +1546,25 @@ void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0, s->hevcdsp.add_residual[log2_trafo_size-2](dst, coeffs, stride); } -void ff_hevc_hls_mvd_coding(HEVCContext *s, int x0, int y0, int log2_cb_size) +void ff_hevc_hls_mvd_coding(HEVCLocalContext *lc, int x0, int y0, int log2_cb_size) { - HEVCLocalContext *lc = s->HEVClc; - int x = abs_mvd_greater0_flag_decode(s); - int y = abs_mvd_greater0_flag_decode(s); + int x = abs_mvd_greater0_flag_decode(lc); + int y = abs_mvd_greater0_flag_decode(lc); if (x) - x += abs_mvd_greater1_flag_decode(s); + x += abs_mvd_greater1_flag_decode(lc); if (y) - y += abs_mvd_greater1_flag_decode(s); + y += abs_mvd_greater1_flag_decode(lc); switch (x) { - case 2: lc->pu.mvd.x = mvd_decode(s); break; - case 1: lc->pu.mvd.x = mvd_sign_flag_decode(s); break; + case 2: lc->pu.mvd.x = mvd_decode(lc); break; + case 1: lc->pu.mvd.x = mvd_sign_flag_decode(lc); break; case 0: lc->pu.mvd.x = 0; break; } switch (y) { - case 2: lc->pu.mvd.y = mvd_decode(s); break; - case 1: lc->pu.mvd.y = mvd_sign_flag_decode(s); break; + case 2: lc->pu.mvd.y = mvd_decode(lc); break; + case 1: lc->pu.mvd.y = mvd_sign_flag_decode(lc); break; case 0: lc->pu.mvd.y = 0; break; } } diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 7d4de414cd..b3965932e9 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -1017,11 +1017,11 @@ static void hls_sao_param(HEVCContext *s, int rx, int ry) s->sh.slice_sample_adaptive_offset_flag[1]) { if (rx > 0) { if (lc->ctb_left_flag) - sao_merge_left_flag = ff_hevc_sao_merge_flag_decode(s); + sao_merge_left_flag = ff_hevc_sao_merge_flag_decode(lc); } if (ry > 0 && !sao_merge_left_flag) { if (lc->ctb_up_flag) - sao_merge_up_flag = ff_hevc_sao_merge_flag_decode(s); + sao_merge_up_flag = ff_hevc_sao_merge_flag_decode(lc); } } @@ -1038,27 +1038,27 @@ static void hls_sao_param(HEVCContext *s, int rx, int ry) sao->type_idx[2] = sao->type_idx[1]; sao->eo_class[2] = sao->eo_class[1]; } else { - SET_SAO(type_idx[c_idx], ff_hevc_sao_type_idx_decode(s)); + SET_SAO(type_idx[c_idx], ff_hevc_sao_type_idx_decode(lc)); } if (sao->type_idx[c_idx] == SAO_NOT_APPLIED) continue; for (i = 0; i < 4; i++) - SET_SAO(offset_abs[c_idx][i], ff_hevc_sao_offset_abs_decode(s)); + SET_SAO(offset_abs[c_idx][i], ff_hevc_sao_offset_abs_decode(lc)); if (sao->type_idx[c_idx] == SAO_BAND) { for (i = 0; i < 4; i++) { if (sao->offset_abs[c_idx][i]) { SET_SAO(offset_sign[c_idx][i], - ff_hevc_sao_offset_sign_decode(s)); + ff_hevc_sao_offset_sign_decode(lc)); } else { sao->offset_sign[c_idx][i] = 0; } } - SET_SAO(band_position[c_idx], ff_hevc_sao_band_position_decode(s)); + SET_SAO(band_position[c_idx], ff_hevc_sao_band_position_decode(lc)); } else if (c_idx != 2) { - SET_SAO(eo_class[c_idx], ff_hevc_sao_eo_class_decode(s)); + SET_SAO(eo_class[c_idx], ff_hevc_sao_eo_class_decode(lc)); } // Inferred parameters @@ -1081,10 +1081,10 @@ static void hls_sao_param(HEVCContext *s, int rx, int ry) static int hls_cross_component_pred(HEVCContext *s, int idx) { HEVCLocalContext *lc = s->HEVClc; - int log2_res_scale_abs_plus1 = ff_hevc_log2_res_scale_abs(s, idx); + int log2_res_scale_abs_plus1 = ff_hevc_log2_res_scale_abs(lc, idx); if (log2_res_scale_abs_plus1 != 0) { - int res_scale_sign_flag = ff_hevc_res_scale_sign_flag(s, idx); + int res_scale_sign_flag = ff_hevc_res_scale_sign_flag(lc, idx); lc->tu.res_scale_val = (1 << (log2_res_scale_abs_plus1 - 1)) * (1 - 2 * res_scale_sign_flag); } else { @@ -1120,9 +1120,9 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, (cbf_cb[1] || cbf_cr[1])); if (s->ps.pps->cu_qp_delta_enabled_flag && !lc->tu.is_cu_qp_delta_coded) { - lc->tu.cu_qp_delta = ff_hevc_cu_qp_delta_abs(s); + lc->tu.cu_qp_delta = ff_hevc_cu_qp_delta_abs(lc); if (lc->tu.cu_qp_delta != 0) - if (ff_hevc_cu_qp_delta_sign_flag(s) == 1) + if (ff_hevc_cu_qp_delta_sign_flag(lc) == 1) lc->tu.cu_qp_delta = -lc->tu.cu_qp_delta; lc->tu.is_cu_qp_delta_coded = 1; @@ -1142,11 +1142,11 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, if (s->sh.cu_chroma_qp_offset_enabled_flag && cbf_chroma && !lc->cu.cu_transquant_bypass_flag && !lc->tu.is_cu_chroma_qp_offset_coded) { - int cu_chroma_qp_offset_flag = ff_hevc_cu_chroma_qp_offset_flag(s); + int cu_chroma_qp_offset_flag = ff_hevc_cu_chroma_qp_offset_flag(lc); if (cu_chroma_qp_offset_flag) { int cu_chroma_qp_offset_idx = 0; if (s->ps.pps->chroma_qp_offset_list_len_minus1 > 0) { - cu_chroma_qp_offset_idx = ff_hevc_cu_chroma_qp_offset_idx(s); + cu_chroma_qp_offset_idx = ff_hevc_cu_chroma_qp_offset_idx(lc); av_log(s->avctx, AV_LOG_ERROR, "cu_chroma_qp_offset_idx not yet tested.\n"); } @@ -1180,7 +1180,7 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, lc->tu.cross_pf = 0; if (cbf_luma) - ff_hevc_hls_residual_coding(s, x0, y0, log2_trafo_size, scan_idx, 0); + ff_hevc_hls_residual_coding(lc, x0, y0, log2_trafo_size, scan_idx, 0); if (s->ps.sps->chroma_format_idc && (log2_trafo_size > 2 || s->ps.sps->chroma_format_idc == 3)) { int trafo_size_h = 1 << (log2_trafo_size_c + s->ps.sps->hshift[1]); int trafo_size_v = 1 << (log2_trafo_size_c + s->ps.sps->vshift[1]); @@ -1197,7 +1197,7 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, s->hpc.intra_pred[log2_trafo_size_c - 2](s, x0, y0 + (i << log2_trafo_size_c), 1); } if (cbf_cb[i]) - ff_hevc_hls_residual_coding(s, x0, y0 + (i << log2_trafo_size_c), + ff_hevc_hls_residual_coding(lc, x0, y0 + (i << log2_trafo_size_c), log2_trafo_size_c, scan_idx_c, 1); else if (lc->tu.cross_pf) { @@ -1227,7 +1227,7 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, s->hpc.intra_pred[log2_trafo_size_c - 2](s, x0, y0 + (i << log2_trafo_size_c), 2); } if (cbf_cr[i]) - ff_hevc_hls_residual_coding(s, x0, y0 + (i << log2_trafo_size_c), + ff_hevc_hls_residual_coding(lc, x0, y0 + (i << log2_trafo_size_c), log2_trafo_size_c, scan_idx_c, 2); else if (lc->tu.cross_pf) { @@ -1256,7 +1256,7 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, s->hpc.intra_pred[log2_trafo_size - 2](s, xBase, yBase + (i << log2_trafo_size), 1); } if (cbf_cb[i]) - ff_hevc_hls_residual_coding(s, xBase, yBase + (i << log2_trafo_size), + ff_hevc_hls_residual_coding(lc, xBase, yBase + (i << log2_trafo_size), log2_trafo_size, scan_idx_c, 1); } for (i = 0; i < (s->ps.sps->chroma_format_idc == 2 ? 2 : 1); i++) { @@ -1266,7 +1266,7 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, s->hpc.intra_pred[log2_trafo_size - 2](s, xBase, yBase + (i << log2_trafo_size), 2); } if (cbf_cr[i]) - ff_hevc_hls_residual_coding(s, xBase, yBase + (i << log2_trafo_size), + ff_hevc_hls_residual_coding(lc, xBase, yBase + (i << log2_trafo_size), log2_trafo_size, scan_idx_c, 2); } } @@ -1355,7 +1355,7 @@ static int hls_transform_tree(HEVCContext *s, int x0, int y0, log2_trafo_size > s->ps.sps->log2_min_tb_size && trafo_depth < lc->cu.max_trafo_depth && !(lc->cu.intra_split_flag && trafo_depth == 0)) { - split_transform_flag = ff_hevc_split_transform_flag_decode(s, log2_trafo_size); + split_transform_flag = ff_hevc_split_transform_flag_decode(lc, log2_trafo_size); } else { int inter_split = s->ps.sps->max_transform_hierarchy_depth_inter == 0 && lc->cu.pred_mode == MODE_INTER && @@ -1369,16 +1369,16 @@ static int hls_transform_tree(HEVCContext *s, int x0, int y0, if (s->ps.sps->chroma_format_idc && (log2_trafo_size > 2 || s->ps.sps->chroma_format_idc == 3)) { if (trafo_depth == 0 || cbf_cb[0]) { - cbf_cb[0] = ff_hevc_cbf_cb_cr_decode(s, trafo_depth); + cbf_cb[0] = ff_hevc_cbf_cb_cr_decode(lc, trafo_depth); if (s->ps.sps->chroma_format_idc == 2 && (!split_transform_flag || log2_trafo_size == 3)) { - cbf_cb[1] = ff_hevc_cbf_cb_cr_decode(s, trafo_depth); + cbf_cb[1] = ff_hevc_cbf_cb_cr_decode(lc, trafo_depth); } } if (trafo_depth == 0 || cbf_cr[0]) { - cbf_cr[0] = ff_hevc_cbf_cb_cr_decode(s, trafo_depth); + cbf_cr[0] = ff_hevc_cbf_cb_cr_decode(lc, trafo_depth); if (s->ps.sps->chroma_format_idc == 2 && (!split_transform_flag || log2_trafo_size == 3)) { - cbf_cr[1] = ff_hevc_cbf_cb_cr_decode(s, trafo_depth); + cbf_cr[1] = ff_hevc_cbf_cb_cr_decode(lc, trafo_depth); } } } @@ -1412,7 +1412,7 @@ do { if (lc->cu.pred_mode == MODE_INTRA || trafo_depth != 0 || cbf_cb[0] || cbf_cr[0] || (s->ps.sps->chroma_format_idc == 2 && (cbf_cb[1] || cbf_cr[1]))) { - cbf_luma = ff_hevc_cbf_luma_decode(s, trafo_depth); + cbf_luma = ff_hevc_cbf_luma_decode(lc, trafo_depth); } ret = hls_transform_unit(s, x0, y0, xBase, yBase, cb_xBase, cb_yBase, @@ -1825,15 +1825,15 @@ static void hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0, int nPbW, ff_hevc_set_neighbour_available(lc, x0, y0, nPbW, nPbH); mv->pred_flag = 0; if (s->sh.slice_type == HEVC_SLICE_B) - inter_pred_idc = ff_hevc_inter_pred_idc_decode(s, nPbW, nPbH); + inter_pred_idc = ff_hevc_inter_pred_idc_decode(lc, nPbW, nPbH); if (inter_pred_idc != PRED_L1) { if (s->sh.nb_refs[L0]) - mv->ref_idx[0]= ff_hevc_ref_idx_lx_decode(s, s->sh.nb_refs[L0]); + mv->ref_idx[0]= ff_hevc_ref_idx_lx_decode(lc, s->sh.nb_refs[L0]); mv->pred_flag = PF_L0; - ff_hevc_hls_mvd_coding(s, x0, y0, 0); - mvp_flag = ff_hevc_mvp_lx_flag_decode(s); + ff_hevc_hls_mvd_coding(lc, x0, y0, 0); + mvp_flag = ff_hevc_mvp_lx_flag_decode(lc); ff_hevc_luma_mv_mvp_mode(lc, x0, y0, nPbW, nPbH, log2_cb_size, part_idx, merge_idx, mv, mvp_flag, 0); mv->mv[0].x += lc->pu.mvd.x; @@ -1842,16 +1842,16 @@ static void hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0, int nPbW, if (inter_pred_idc != PRED_L0) { if (s->sh.nb_refs[L1]) - mv->ref_idx[1]= ff_hevc_ref_idx_lx_decode(s, s->sh.nb_refs[L1]); + mv->ref_idx[1]= ff_hevc_ref_idx_lx_decode(lc, s->sh.nb_refs[L1]); if (s->sh.mvd_l1_zero_flag == 1 && inter_pred_idc == PRED_BI) { AV_ZERO32(&lc->pu.mvd); } else { - ff_hevc_hls_mvd_coding(s, x0, y0, 1); + ff_hevc_hls_mvd_coding(lc, x0, y0, 1); } mv->pred_flag += PF_L1; - mvp_flag = ff_hevc_mvp_lx_flag_decode(s); + mvp_flag = ff_hevc_mvp_lx_flag_decode(lc); ff_hevc_luma_mv_mvp_mode(lc, x0, y0, nPbW, nPbH, log2_cb_size, part_idx, merge_idx, mv, mvp_flag, 1); mv->mv[1].x += lc->pu.mvd.x; @@ -1888,11 +1888,11 @@ static void hls_prediction_unit(HEVCContext *s, int x0, int y0, int skip_flag = SAMPLE_CTB(s->skip_flag, x_cb, y_cb); if (!skip_flag) - lc->pu.merge_flag = ff_hevc_merge_flag_decode(s); + lc->pu.merge_flag = ff_hevc_merge_flag_decode(lc); if (skip_flag || lc->pu.merge_flag) { if (s->sh.max_num_merge_cand > 1) - merge_idx = ff_hevc_merge_idx_decode(s); + merge_idx = ff_hevc_merge_idx_decode(lc); else merge_idx = 0; @@ -2096,14 +2096,14 @@ static void intra_prediction_unit(HEVCContext *s, int x0, int y0, for (i = 0; i < side; i++) for (j = 0; j < side; j++) - prev_intra_luma_pred_flag[2 * i + j] = ff_hevc_prev_intra_luma_pred_flag_decode(s); + prev_intra_luma_pred_flag[2 * i + j] = ff_hevc_prev_intra_luma_pred_flag_decode(lc); for (i = 0; i < side; i++) { for (j = 0; j < side; j++) { if (prev_intra_luma_pred_flag[2 * i + j]) - lc->pu.mpm_idx = ff_hevc_mpm_idx_decode(s); + lc->pu.mpm_idx = ff_hevc_mpm_idx_decode(lc); else - lc->pu.rem_intra_luma_pred_mode = ff_hevc_rem_intra_luma_pred_mode_decode(s); + lc->pu.rem_intra_luma_pred_mode = ff_hevc_rem_intra_luma_pred_mode_decode(lc); lc->pu.intra_pred_mode[2 * i + j] = luma_intra_pred_mode(s, x0 + pb_size * j, y0 + pb_size * i, pb_size, @@ -2114,7 +2114,7 @@ static void intra_prediction_unit(HEVCContext *s, int x0, int y0, if (s->ps.sps->chroma_format_idc == 3) { for (i = 0; i < side; i++) { for (j = 0; j < side; j++) { - lc->pu.chroma_mode_c[2 * i + j] = chroma_mode = ff_hevc_intra_chroma_pred_mode_decode(s); + lc->pu.chroma_mode_c[2 * i + j] = chroma_mode = ff_hevc_intra_chroma_pred_mode_decode(lc); if (chroma_mode != 4) { if (lc->pu.intra_pred_mode[2 * i + j] == intra_chroma_table[chroma_mode]) lc->pu.intra_pred_mode_c[2 * i + j] = 34; @@ -2127,7 +2127,7 @@ static void intra_prediction_unit(HEVCContext *s, int x0, int y0, } } else if (s->ps.sps->chroma_format_idc == 2) { int mode_idx; - lc->pu.chroma_mode_c[0] = chroma_mode = ff_hevc_intra_chroma_pred_mode_decode(s); + lc->pu.chroma_mode_c[0] = chroma_mode = ff_hevc_intra_chroma_pred_mode_decode(lc); if (chroma_mode != 4) { if (lc->pu.intra_pred_mode[0] == intra_chroma_table[chroma_mode]) mode_idx = 34; @@ -2138,7 +2138,7 @@ static void intra_prediction_unit(HEVCContext *s, int x0, int y0, } lc->pu.intra_pred_mode_c[0] = tab_mode_idx[mode_idx]; } else if (s->ps.sps->chroma_format_idc != 0) { - chroma_mode = ff_hevc_intra_chroma_pred_mode_decode(s); + chroma_mode = ff_hevc_intra_chroma_pred_mode_decode(lc); if (chroma_mode != 4) { if (lc->pu.intra_pred_mode[0] == intra_chroma_table[chroma_mode]) lc->pu.intra_pred_mode_c[0] = 34; @@ -2196,14 +2196,14 @@ static int hls_coding_unit(HEVCContext *s, int x0, int y0, int log2_cb_size) for (x = 0; x < 4; x++) lc->pu.intra_pred_mode[x] = 1; if (s->ps.pps->transquant_bypass_enable_flag) { - lc->cu.cu_transquant_bypass_flag = ff_hevc_cu_transquant_bypass_flag_decode(s); + lc->cu.cu_transquant_bypass_flag = ff_hevc_cu_transquant_bypass_flag_decode(lc); if (lc->cu.cu_transquant_bypass_flag) set_deblocking_bypass(s, x0, y0, log2_cb_size); } else lc->cu.cu_transquant_bypass_flag = 0; if (s->sh.slice_type != HEVC_SLICE_I) { - uint8_t skip_flag = ff_hevc_skip_flag_decode(s, x0, y0, x_cb, y_cb); + uint8_t skip_flag = ff_hevc_skip_flag_decode(lc, x0, y0, x_cb, y_cb); x = y_cb * min_cb_width + x_cb; for (y = 0; y < length; y++) { @@ -2229,10 +2229,10 @@ static int hls_coding_unit(HEVCContext *s, int x0, int y0, int log2_cb_size) int pcm_flag = 0; if (s->sh.slice_type != HEVC_SLICE_I) - lc->cu.pred_mode = ff_hevc_pred_mode_decode(s); + lc->cu.pred_mode = ff_hevc_pred_mode_decode(lc); if (lc->cu.pred_mode != MODE_INTRA || log2_cb_size == s->ps.sps->log2_min_cb_size) { - lc->cu.part_mode = ff_hevc_part_mode_decode(s, log2_cb_size); + lc->cu.part_mode = ff_hevc_part_mode_decode(lc, log2_cb_size); lc->cu.intra_split_flag = lc->cu.part_mode == PART_NxN && lc->cu.pred_mode == MODE_INTRA; } @@ -2241,7 +2241,7 @@ static int hls_coding_unit(HEVCContext *s, int x0, int y0, int log2_cb_size) if (lc->cu.part_mode == PART_2Nx2N && s->ps.sps->pcm_enabled_flag && log2_cb_size >= s->ps.sps->pcm.log2_min_pcm_cb_size && log2_cb_size <= s->ps.sps->pcm.log2_max_pcm_cb_size) { - pcm_flag = ff_hevc_pcm_flag_decode(s); + pcm_flag = ff_hevc_pcm_flag_decode(lc); } if (pcm_flag) { intra_prediction_unit_default_value(s, x0, y0, log2_cb_size); @@ -2298,7 +2298,7 @@ static int hls_coding_unit(HEVCContext *s, int x0, int y0, int log2_cb_size) if (lc->cu.pred_mode != MODE_INTRA && !(lc->cu.part_mode == PART_2Nx2N && lc->pu.merge_flag)) { - rqt_root_cbf = ff_hevc_no_residual_syntax_flag_decode(s); + rqt_root_cbf = ff_hevc_no_residual_syntax_flag_decode(lc); } if (rqt_root_cbf) { const static int cbf[2] = { 0 }; @@ -2348,7 +2348,7 @@ static int hls_coding_quadtree(HEVCContext *s, int x0, int y0, if (x0 + cb_size <= s->ps.sps->width && y0 + cb_size <= s->ps.sps->height && log2_cb_size > s->ps.sps->log2_min_cb_size) { - split_cu = ff_hevc_split_coding_unit_flag_decode(s, cb_depth, x0, y0); + split_cu = ff_hevc_split_coding_unit_flag_decode(lc, cb_depth, x0, y0); } else { split_cu = (log2_cb_size > s->ps.sps->log2_min_cb_size); } @@ -2411,7 +2411,7 @@ static int hls_coding_quadtree(HEVCContext *s, int x0, int y0, (!((y0 + cb_size) % (1 << (s->ps.sps->log2_ctb_size))) || (y0 + cb_size >= s->ps.sps->height))) { - int end_of_slice_flag = ff_hevc_end_of_slice_flag_decode(s); + int end_of_slice_flag = ff_hevc_end_of_slice_flag_decode(lc); return !end_of_slice_flag; } else { return 1; @@ -2501,7 +2501,7 @@ static int hls_decode_entry(AVCodecContext *avctxt, void *isFilterThread) y_ctb = (ctb_addr_rs / ((s->ps.sps->width + ctb_size - 1) >> s->ps.sps->log2_ctb_size)) << s->ps.sps->log2_ctb_size; hls_decode_neighbour(s, x_ctb, y_ctb, ctb_addr_ts); - ret = ff_hevc_cabac_init(s, ctb_addr_ts); + ret = ff_hevc_cabac_init(lc, ctb_addr_ts); if (ret < 0) { s->tab_slice_address[ctb_addr_rs] = -1; return ret; @@ -2521,7 +2521,7 @@ static int hls_decode_entry(AVCodecContext *avctxt, void *isFilterThread) ctb_addr_ts++; - ff_hevc_save_states(s, ctb_addr_ts); + ff_hevc_save_states(lc, ctb_addr_ts); ff_hevc_hls_filters(lc, x_ctb, y_ctb, ctb_size); } @@ -2579,7 +2579,7 @@ static int hls_decode_entry_wpp(AVCodecContext *avctxt, void *input_ctb_row, int return 0; } - ret = ff_hevc_cabac_init(s, ctb_addr_ts); + ret = ff_hevc_cabac_init(lc, ctb_addr_ts); if (ret < 0) goto error; hls_sao_param(s, x_ctb >> s->ps.sps->log2_ctb_size, y_ctb >> s->ps.sps->log2_ctb_size); @@ -2592,7 +2592,7 @@ static int hls_decode_entry_wpp(AVCodecContext *avctxt, void *input_ctb_row, int ctb_addr_ts++; - ff_hevc_save_states(s, ctb_addr_ts); + ff_hevc_save_states(lc, ctb_addr_ts); ff_thread_report_progress2(s->avctx, ctb_row, thread, 1); ff_hevc_hls_filters(lc, x_ctb, y_ctb, ctb_size); diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h index b97b7d1354..b33e8ae0f6 100644 --- a/libavcodec/hevcdec.h +++ b/libavcodec/hevcdec.h @@ -604,38 +604,38 @@ int ff_hevc_frame_rps(HEVCContext *s); */ int ff_hevc_slice_rpl(HEVCContext *s); -void ff_hevc_save_states(HEVCContext *s, int ctb_addr_ts); -int ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts); -int ff_hevc_sao_merge_flag_decode(HEVCContext *s); -int ff_hevc_sao_type_idx_decode(HEVCContext *s); -int ff_hevc_sao_band_position_decode(HEVCContext *s); -int ff_hevc_sao_offset_abs_decode(HEVCContext *s); -int ff_hevc_sao_offset_sign_decode(HEVCContext *s); -int ff_hevc_sao_eo_class_decode(HEVCContext *s); -int ff_hevc_end_of_slice_flag_decode(HEVCContext *s); -int ff_hevc_cu_transquant_bypass_flag_decode(HEVCContext *s); -int ff_hevc_skip_flag_decode(HEVCContext *s, int x0, int y0, +void ff_hevc_save_states(HEVCLocalContext *lc, int ctb_addr_ts); +int ff_hevc_cabac_init(HEVCLocalContext *lc, int ctb_addr_ts); +int ff_hevc_sao_merge_flag_decode(HEVCLocalContext *lc); +int ff_hevc_sao_type_idx_decode(HEVCLocalContext *lc); +int ff_hevc_sao_band_position_decode(HEVCLocalContext *lc); +int ff_hevc_sao_offset_abs_decode(HEVCLocalContext *lc); +int ff_hevc_sao_offset_sign_decode(HEVCLocalContext *lc); +int ff_hevc_sao_eo_class_decode(HEVCLocalContext *lc); +int ff_hevc_end_of_slice_flag_decode(HEVCLocalContext *lc); +int ff_hevc_cu_transquant_bypass_flag_decode(HEVCLocalContext *lc); +int ff_hevc_skip_flag_decode(HEVCLocalContext *lc, int x0, int y0, int x_cb, int y_cb); -int ff_hevc_pred_mode_decode(HEVCContext *s); -int ff_hevc_split_coding_unit_flag_decode(HEVCContext *s, int ct_depth, +int ff_hevc_pred_mode_decode(HEVCLocalContext *lc); +int ff_hevc_split_coding_unit_flag_decode(HEVCLocalContext *lc, int ct_depth, int x0, int y0); -int ff_hevc_part_mode_decode(HEVCContext *s, int log2_cb_size); -int ff_hevc_pcm_flag_decode(HEVCContext *s); -int ff_hevc_prev_intra_luma_pred_flag_decode(HEVCContext *s); -int ff_hevc_mpm_idx_decode(HEVCContext *s); -int ff_hevc_rem_intra_luma_pred_mode_decode(HEVCContext *s); -int ff_hevc_intra_chroma_pred_mode_decode(HEVCContext *s); -int ff_hevc_merge_idx_decode(HEVCContext *s); -int ff_hevc_merge_flag_decode(HEVCContext *s); -int ff_hevc_inter_pred_idc_decode(HEVCContext *s, int nPbW, int nPbH); -int ff_hevc_ref_idx_lx_decode(HEVCContext *s, int num_ref_idx_lx); -int ff_hevc_mvp_lx_flag_decode(HEVCContext *s); -int ff_hevc_no_residual_syntax_flag_decode(HEVCContext *s); -int ff_hevc_split_transform_flag_decode(HEVCContext *s, int log2_trafo_size); -int ff_hevc_cbf_cb_cr_decode(HEVCContext *s, int trafo_depth); -int ff_hevc_cbf_luma_decode(HEVCContext *s, int trafo_depth); -int ff_hevc_log2_res_scale_abs(HEVCContext *s, int idx); -int ff_hevc_res_scale_sign_flag(HEVCContext *s, int idx); +int ff_hevc_part_mode_decode(HEVCLocalContext *lc, int log2_cb_size); +int ff_hevc_pcm_flag_decode(HEVCLocalContext *lc); +int ff_hevc_prev_intra_luma_pred_flag_decode(HEVCLocalContext *lc); +int ff_hevc_mpm_idx_decode(HEVCLocalContext *lc); +int ff_hevc_rem_intra_luma_pred_mode_decode(HEVCLocalContext *lc); +int ff_hevc_intra_chroma_pred_mode_decode(HEVCLocalContext *lc); +int ff_hevc_merge_idx_decode(HEVCLocalContext *lc); +int ff_hevc_merge_flag_decode(HEVCLocalContext *lc); +int ff_hevc_inter_pred_idc_decode(HEVCLocalContext *lc, int nPbW, int nPbH); +int ff_hevc_ref_idx_lx_decode(HEVCLocalContext *lc, int num_ref_idx_lx); +int ff_hevc_mvp_lx_flag_decode(HEVCLocalContext *lc); +int ff_hevc_no_residual_syntax_flag_decode(HEVCLocalContext *lc); +int ff_hevc_split_transform_flag_decode(HEVCLocalContext *lc, int log2_trafo_size); +int ff_hevc_cbf_cb_cr_decode(HEVCLocalContext *lc, int trafo_depth); +int ff_hevc_cbf_luma_decode(HEVCLocalContext *lc, int trafo_depth); +int ff_hevc_log2_res_scale_abs(HEVCLocalContext *lc, int idx); +int ff_hevc_res_scale_sign_flag(HEVCLocalContext *lc, int idx); /** * Get the number of candidate references for the current frame. @@ -686,15 +686,15 @@ void ff_hevc_set_qPy(HEVCLocalContext *lc, int xBase, int yBase, int log2_cb_size); void ff_hevc_deblocking_boundary_strengths(HEVCLocalContext *lc, int x0, int y0, int log2_trafo_size); -int ff_hevc_cu_qp_delta_sign_flag(HEVCContext *s); -int ff_hevc_cu_qp_delta_abs(HEVCContext *s); -int ff_hevc_cu_chroma_qp_offset_flag(HEVCContext *s); -int ff_hevc_cu_chroma_qp_offset_idx(HEVCContext *s); -void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0, +int ff_hevc_cu_qp_delta_sign_flag(HEVCLocalContext *lc); +int ff_hevc_cu_qp_delta_abs(HEVCLocalContext *lc); +int ff_hevc_cu_chroma_qp_offset_flag(HEVCLocalContext *lc); +int ff_hevc_cu_chroma_qp_offset_idx(HEVCLocalContext *lc); +void ff_hevc_hls_residual_coding(HEVCLocalContext *lc, int x0, int y0, int log2_trafo_size, enum ScanType scan_idx, int c_idx); -void ff_hevc_hls_mvd_coding(HEVCContext *s, int x0, int y0, int log2_cb_size); +void ff_hevc_hls_mvd_coding(HEVCLocalContext *lc, int x0, int y0, int log2_cb_size); extern const uint8_t ff_hevc_qpel_extra_before[4]; extern const uint8_t ff_hevc_qpel_extra_after[4]; From patchwork Thu Jun 30 22:29:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36568 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp621052pzh; Thu, 30 Jun 2022 15:31:56 -0700 (PDT) X-Google-Smtp-Source: AGRyM1t/lGGJUEWled+BkPGyhtyluvHkKn2f6rIwahH+xRdd+Dw2uuOzXGb9sLFqaNL6Uswlhbtt X-Received: by 2002:a17:906:7288:b0:722:da04:da51 with SMTP id b8-20020a170906728800b00722da04da51mr11152649ejl.316.1656628316343; Thu, 30 Jun 2022 15:31:56 -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 f14-20020a0564021e8e00b00435de52eeafsi8385002edf.608.2022.06.30.15.31.55; Thu, 30 Jun 2022 15:31:56 -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=Mn5+Y7J1; 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 7D6C668B800; Fri, 1 Jul 2022 01:30:50 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2078.outbound.protection.outlook.com [40.92.91.78]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1251668B7F1 for ; Fri, 1 Jul 2022 01:30:48 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kelPoB9oscntz0E9ZoRBpXlzkadk6VrLWUqjRklCEIdypJxQ6QUpjrB+1LBI0JxIoPXwuFLdAjJLLSZlxx176hjxhqeyCfzP/lN3SRfqC7FQLDMXsnMJyNgTkTbMTZNex0tuLwJKYaLTDk3xmA9utTZblUtjKyqPsoxYRmRy3u88RjzAHxr+LWOnmG1RMOUSw/NSrwsPfEvGyOQCJvJwSSge5RjgPcQInFqD//XmhKzY2K7jwWbh+n1CjTgHBibkXOwUhwkLI14YlIocsH0H8dLAJCAkwm0ZlPeZMkQ7p6It4mzh0CcKPk5qd3vj89DDpn6B88sauhDXVe787TuTEg== 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=+Rjpr1mDUvcYHaN86J7zq6osirVHHOilLJtXwBtgevA=; b=YjhQCAjY2EjAqa76FEYtNmAcxJrsifpoPN9xtHoiN0Ru96AXYXf9Le8cAnEWWtriPaxL1l82LkVl+NRVMasdmb5KKcp3zp7bcrPNbZl45yZeBpsHFrdsCb/w9aKiYvDoEXRTt33TFL86i3d0XgRh7f9OTDqtdJVgI7SlPJAA/APm4kAdeLNsrNd5smIyeQoAjZejBBmX9iSxixAMt6zO91WbpRwZnUA3aBSZ808cJNH3ymUHq5fbUKld4jGVpHu2LfZlus12VwKXwHzAu00hl8DEj+WoHDOgkZDxXADWBRZF/oa75PFzxTiLcypxLlWb3zq0z7vNQtrWruoiRqLZ9g== 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=+Rjpr1mDUvcYHaN86J7zq6osirVHHOilLJtXwBtgevA=; b=Mn5+Y7J1myhMwbE2amH1iMVBpq3GUbyPEBn0M2zjxDnMOZxmB9pxOt5wWGH64fuqrAmAh41BEFVkS7kHHyMrZgK2UjGSPK+WSvJOGMczhoCphIZKsEl8l3+Jyp+r4OXc6tP8r8v6VdaDK5dzrcNE5vkWn/G4oRyy5+OZiz7w7MvJ6m9B+gwAIORJ5AHXdy0+JFoG/Vh6FR9m7PC3W/K3zNQefYCteo5UVfD07ZtfR0W/9u9pDpSmkrvytYbMUCRiU15SIvpYIXHArCKwrOGcofqPrQ3Fu+m5BkvvG26t5GKM4xndwAcPQt1o9RNK3TqMgGU0TbWU2QhLdw9oXOQy6A== 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:47 +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:47 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Jul 2022 00:29:42 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [bZvidms720nrxXgzyfHsDqkLAmfpvIP4] 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-10-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 60e32e4c-5147-408b-d7ee-08da5ae82dc6 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiSAA+E0K/sYrHNnfsWcYQJjF+vdVM8rQryunVS5OFB7MWMT1Xi3FjEHSK1lTqr9/Bg6H0+K62+PIX4xg4AwI7vRYxEY5xvjBQ31AaOz7ikkJBg0ZcqqKD2Sv2jhxfEpzsMUETRgaLTV0QelEV73DnVtPIi8SHqZalLOEA0KjGzS9Bpa1uqGp8qNjoHX738glqVmXb9C2w9Kn1ovsYqy9p8CPn3MHL6E1r4Az8OT0vKlV19725+0P88ZZU7LJXo2PaIubnV5DZxl7rhVUepyvkUwJ3Qyw/7vULoDhXHOjRO5DJT3ERWdi2Ku+vqGNRMIYyz1dtrl+wK4yfyk1RnWOvltvfOOGtyzMHzYgXJn2q1x/fKfS/qlcsJslGVedUiLFaU4e6erZ71DrPYinpL8/PCcHMWi/Kr1Ko+kEuvq2QNf3FJwq/q10DrvV4lgIxTRazXMtSEvSXC6J9CCQm2ZltXZL40iJ1SrXK1srSaRF/X67NCpSMHuFMakWsGzDx4Jeuhb5EFBGjOxW16seeDtwLaTJ+3zaCfe5iMPszMpguEtYwWJQpSTwJ8BEGuIxQDFEOuPOnqsRLMl9v7eizjTzLy0UDN5U2TEnKMrHXiG7CM8aISrA0TdM1TImiPDvvJtEnOJnzFw01WvuY8518sxkqpPiYwXL15aA9DmAxJmHavRkf1VLXLAsLyYwk1LwTbMH2zwdsa6QmAvdoFWqzxi+OQOpvr/5ii0bW1yhZUEVeHalwmBzoufEwwG8Aolzu1ztq0= X-MS-TrafficTypeDiagnostic: DB3PR0102MB3546:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: bCpHoRFIq/HYEPiOxUqSBF0siMRI9Nik4dNOL6WUKtDhan58SGKnwm+8qjhZgUCizg0Fd0AX8pqZqzDTSXM/Bv/51bjoV5hlNXK9QcjnPxP83g2ltoVS+KB71O8yHvCHJ6yD5RAVwgPkqQPSjGc3SyWO5n04azbyG76Ajm0Q8H9pKScJplcuE5T4TIb0jM61C/HqHFaXXEB5IaHPLMghNg4DKmKR1eaYSyjdHQz2hJ+/7GZDih+ITLYjJ57SmhRgNPsE/1Q90MSIpmYyMxkogNEed7aF7s0+jK4D2kU5Y+bDMK2eIPoEw/tK9QyLrg6ZUI6WwM9ujpHIOfMNkTz75+x6Y+d3BgPQlhoyHF/iGKB2DJNu0hZ3ODUqqk6mhQ9ya19xoI2pb6eYYo1eYaBW+/pHowUfL69N1P6Z0Ajnl0NQQoV4IS6v4Zs5luo4a5y5ftzL899J3wTg1x0hFpw/KjKJT7UyJRD0FiPC2TpkjVcbME/FgWQNUZptCjFgT6MMSceXj64TSUpYR8rr9OvBHa9Skc9gjlt6oDLk73aWvB84Cm+gw9VzNKpa0qCZkVQsMj9szALURZhihD3dxy7s/XDyFuStwFN5zKgmX/OcbLrQv21hyJnEDtckS/Xuuf8AQMXsY0QOFVbW6zptWXNqIWxLUsm3hVAmGPCWZKZQM0B1Zbe8DcXsC+A5jc1xTOERz84k9SGs/EYsFfz5l2j05Q== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: PK+LLXBX9IQ7fgQY8sAUmsfyVwAo2XicKaMA7P4BRrUJD5u1BJJ/T7kH/GsR3mPTOE5E/GL/pILJ53pTdXnTcPqh3+d1sKON77k6VO7NqktBYRJl8bKJOuejHX15iUsZH76M5uqcrVAvXSuShVZdV4Q0tv+LYyie7AeTxIZ9qKBMMgpS6QADSox0GDjDdwBRpH1BtclR9+6Q14BUwTQHvjw+ASBPJnTRsAIE7zIuW0EHbmICI58gj+EYeNIEIELCbCj5kc4NdmZEa5vj2YGqIj6rUmJDaRy8iPtxYzvjdceaKZbSDxbB40JcT8n38kRfLjG+ob0cxCcPVd6zvQieoCtYxvpuHVEghVe1KuJ2wChIIwP4tagTRiYXu0LfwZiX86ApNadxrW2etmRfd6SqttiEf1+T0xbUBmOtAaq3ikSe/H7ES9e7PDnezCeG3s+aI1nitJAyG+U4dTkkiUF7POXrxG3DMfparmhqbBJZfOWqHZj2SSYgt3HBUBnucOwUcOrSfJwS3ku522HVhEBwUET+IhyragtJ8VCOnwPlLN7z5OsnXZTXEiH3xvOuXLVcOicSXDotEjLNtwDEXb3SyWd6nuYts9lrzMPpsLnxERQDmwGn2UyM9y09zIcz4cLKL6P2evxVMLMpfvILkCMwCFq623DOldn1sULnQSiRYGbpAGVt4RMFTqn4c25C552UQnF4yoO0EHL86kfvvzI6V5ubCV2m8HfPl95SAoQhYPUGpFVKswSv/iWC8T5sBSJmuVndGCO9nCdAaQSFHQHzY0V25KstvnuAH1u8cVRfGmMLGbFkmbb0sqQH0k6KH9QvYKHd3Nm0MYJzPM25r4r/+JyB/qSgpmUUNoGDc/DZiROJw56rJpZq7CAvOFAZQmsr2K+5A3dnAYfkzalIieQ1bh3ZfnukKc7NTgCt2Qqp9LJI24+TDFSGTohvF8dRnaDYcM3CIDxkUuz7QweZ1AIodD1h0hqY+VUzeTcLIal1qOiHhAUoSW6/R9YQKZZjIKCzFAWyMlFyXPJCkBcLpY2wxfGg82HzFwLF0gCR0Uawk3gxXwroC9kTlmVo4Id7nHHELMeeImyuEpplkepJQ0RH/rsU66yGeYH18EpCFEaJxmZrNa858F263yYAYInrJMbvnhiQTL+mzOJvaSZD8G0CCr5m9dNGtlyIrMpGH2tSepebge64CCkvdhSyywtlkXJR+8XBMKhUddjKCun8fwXdtJegiqu8FC1zg+FtW8mJ/p0tgbgG0LL6CwJ7aA/XV/WdyAg5P8tYBCiQb8RtV9ow5dUJWMIxtdnKXMz+dQkTipw= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 60e32e4c-5147-408b-d7ee-08da5ae82dc6 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:47.6077 (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 11/18] avcodec/hevcpred: Pass HEVCLocalContext when slice-threading 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: hRRpRDqyKOHd The HEVC decoder has both HEVCContext and HEVCLocalContext structures. The latter is supposed to be the structure containing the per-slicethread state. Yet 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. This commit stops doing this for lavc/hevcpred as well as the corresponding mips code; the latter is untested. Signed-off-by: Andreas Rheinhardt --- libavcodec/hevcdec.c | 28 ++++++++++++++-------------- libavcodec/hevcpred.h | 4 ++-- libavcodec/hevcpred_template.c | 8 ++++---- libavcodec/mips/hevcpred_mips.h | 4 ++-- libavcodec/mips/hevcpred_msa.c | 8 ++++---- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index b3965932e9..2fd0f3acd3 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -1108,7 +1108,7 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, int trafo_size = 1 << log2_trafo_size; ff_hevc_set_neighbour_available(lc, x0, y0, trafo_size, trafo_size); - s->hpc.intra_pred[log2_trafo_size - 2](s, x0, y0, 0); + s->hpc.intra_pred[log2_trafo_size - 2](lc, x0, y0, 0); } if (cbf_luma || cbf_cb[0] || cbf_cr[0] || @@ -1194,7 +1194,7 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, for (i = 0; i < (s->ps.sps->chroma_format_idc == 2 ? 2 : 1); i++) { if (lc->cu.pred_mode == MODE_INTRA) { ff_hevc_set_neighbour_available(lc, x0, y0 + (i << log2_trafo_size_c), trafo_size_h, trafo_size_v); - s->hpc.intra_pred[log2_trafo_size_c - 2](s, x0, y0 + (i << log2_trafo_size_c), 1); + s->hpc.intra_pred[log2_trafo_size_c - 2](lc, x0, y0 + (i << log2_trafo_size_c), 1); } if (cbf_cb[i]) ff_hevc_hls_residual_coding(lc, x0, y0 + (i << log2_trafo_size_c), @@ -1224,7 +1224,7 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, if (lc->cu.pred_mode == MODE_INTRA) { ff_hevc_set_neighbour_available(lc, x0, y0 + (i << log2_trafo_size_c), trafo_size_h, trafo_size_v); - s->hpc.intra_pred[log2_trafo_size_c - 2](s, x0, y0 + (i << log2_trafo_size_c), 2); + s->hpc.intra_pred[log2_trafo_size_c - 2](lc, x0, y0 + (i << log2_trafo_size_c), 2); } if (cbf_cr[i]) ff_hevc_hls_residual_coding(lc, x0, y0 + (i << log2_trafo_size_c), @@ -1253,7 +1253,7 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, if (lc->cu.pred_mode == MODE_INTRA) { ff_hevc_set_neighbour_available(lc, xBase, yBase + (i << log2_trafo_size), trafo_size_h, trafo_size_v); - s->hpc.intra_pred[log2_trafo_size - 2](s, xBase, yBase + (i << log2_trafo_size), 1); + s->hpc.intra_pred[log2_trafo_size - 2](lc, xBase, yBase + (i << log2_trafo_size), 1); } if (cbf_cb[i]) ff_hevc_hls_residual_coding(lc, xBase, yBase + (i << log2_trafo_size), @@ -1263,7 +1263,7 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, if (lc->cu.pred_mode == MODE_INTRA) { ff_hevc_set_neighbour_available(lc, xBase, yBase + (i << log2_trafo_size), trafo_size_h, trafo_size_v); - s->hpc.intra_pred[log2_trafo_size - 2](s, xBase, yBase + (i << log2_trafo_size), 2); + s->hpc.intra_pred[log2_trafo_size - 2](lc, xBase, yBase + (i << log2_trafo_size), 2); } if (cbf_cr[i]) ff_hevc_hls_residual_coding(lc, xBase, yBase + (i << log2_trafo_size), @@ -1275,26 +1275,26 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, int trafo_size_h = 1 << (log2_trafo_size_c + s->ps.sps->hshift[1]); int trafo_size_v = 1 << (log2_trafo_size_c + s->ps.sps->vshift[1]); ff_hevc_set_neighbour_available(lc, x0, y0, trafo_size_h, trafo_size_v); - s->hpc.intra_pred[log2_trafo_size_c - 2](s, x0, y0, 1); - s->hpc.intra_pred[log2_trafo_size_c - 2](s, x0, y0, 2); + s->hpc.intra_pred[log2_trafo_size_c - 2](lc, x0, y0, 1); + s->hpc.intra_pred[log2_trafo_size_c - 2](lc, x0, y0, 2); if (s->ps.sps->chroma_format_idc == 2) { ff_hevc_set_neighbour_available(lc, x0, y0 + (1 << log2_trafo_size_c), trafo_size_h, trafo_size_v); - s->hpc.intra_pred[log2_trafo_size_c - 2](s, x0, y0 + (1 << log2_trafo_size_c), 1); - s->hpc.intra_pred[log2_trafo_size_c - 2](s, x0, y0 + (1 << log2_trafo_size_c), 2); + s->hpc.intra_pred[log2_trafo_size_c - 2](lc, x0, y0 + (1 << log2_trafo_size_c), 1); + s->hpc.intra_pred[log2_trafo_size_c - 2](lc, x0, y0 + (1 << log2_trafo_size_c), 2); } } else if (blk_idx == 3) { int trafo_size_h = 1 << (log2_trafo_size + 1); int trafo_size_v = 1 << (log2_trafo_size + s->ps.sps->vshift[1]); ff_hevc_set_neighbour_available(lc, xBase, yBase, trafo_size_h, trafo_size_v); - s->hpc.intra_pred[log2_trafo_size - 2](s, xBase, yBase, 1); - s->hpc.intra_pred[log2_trafo_size - 2](s, xBase, yBase, 2); + s->hpc.intra_pred[log2_trafo_size - 2](lc, xBase, yBase, 1); + s->hpc.intra_pred[log2_trafo_size - 2](lc, xBase, yBase, 2); if (s->ps.sps->chroma_format_idc == 2) { - ff_hevc_set_neighbour_available(lc, xBase, yBase + (1 << (log2_trafo_size)), + ff_hevc_set_neighbour_available(lc, xBase, yBase + (1 << log2_trafo_size), trafo_size_h, trafo_size_v); - s->hpc.intra_pred[log2_trafo_size - 2](s, xBase, yBase + (1 << (log2_trafo_size)), 1); - s->hpc.intra_pred[log2_trafo_size - 2](s, xBase, yBase + (1 << (log2_trafo_size)), 2); + s->hpc.intra_pred[log2_trafo_size - 2](lc, xBase, yBase + (1 << log2_trafo_size), 1); + s->hpc.intra_pred[log2_trafo_size - 2](lc, xBase, yBase + (1 << log2_trafo_size), 2); } } } diff --git a/libavcodec/hevcpred.h b/libavcodec/hevcpred.h index eb17663683..b1b1dc4f3a 100644 --- a/libavcodec/hevcpred.h +++ b/libavcodec/hevcpred.h @@ -26,10 +26,10 @@ #include #include -struct HEVCContext; +struct HEVCLocalContext; typedef struct HEVCPredContext { - void (*intra_pred[4])(struct HEVCContext *s, int x0, int y0, int c_idx); + void (*intra_pred[4])(struct HEVCLocalContext *lc, int x0, int y0, int c_idx); void (*pred_planar[4])(uint8_t *src, const uint8_t *top, const uint8_t *left, ptrdiff_t stride); diff --git a/libavcodec/hevcpred_template.c b/libavcodec/hevcpred_template.c index ca75ec1128..16d1c7f35f 100644 --- a/libavcodec/hevcpred_template.c +++ b/libavcodec/hevcpred_template.c @@ -27,7 +27,7 @@ #define POS(x, y) src[(x) + stride * (y)] -static av_always_inline void FUNC(intra_pred)(HEVCContext *s, int x0, int y0, +static av_always_inline void FUNC(intra_pred)(HEVCLocalContext *lc, int x0, int y0, int log2_size, int c_idx) { #define PU(x) \ @@ -70,7 +70,7 @@ do { \ else \ a = PIXEL_SPLAT_X4(ptr[i + 3]) - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; int i; int hshift = s->ps.sps->hshift[c_idx]; int vshift = s->ps.sps->vshift[c_idx]; @@ -346,9 +346,9 @@ do { \ } #define INTRA_PRED(size) \ -static void FUNC(intra_pred_ ## size)(HEVCContext *s, int x0, int y0, int c_idx) \ +static void FUNC(intra_pred_ ## size)(HEVCLocalContext *lc, int x0, int y0, int c_idx) \ { \ - FUNC(intra_pred)(s, x0, y0, size, c_idx); \ + FUNC(intra_pred)(lc, x0, y0, size, c_idx); \ } INTRA_PRED(2) diff --git a/libavcodec/mips/hevcpred_mips.h b/libavcodec/mips/hevcpred_mips.h index f22feff85e..6848700010 100644 --- a/libavcodec/mips/hevcpred_mips.h +++ b/libavcodec/mips/hevcpred_mips.h @@ -67,7 +67,7 @@ void ff_pred_intra_pred_angular_3_msa(uint8_t *dst, const uint8_t *src_left, ptrdiff_t stride, int c_idx, int mode); -void ff_intra_pred_8_16x16_msa(struct HEVCContext *s, int x0, int y0, int c_idx); -void ff_intra_pred_8_32x32_msa(struct HEVCContext *s, int x0, int y0, int c_idx); +void ff_intra_pred_8_16x16_msa(struct HEVCLocalContext *s, int x0, int y0, int c_idx); +void ff_intra_pred_8_32x32_msa(struct HEVCLocalContext *s, int x0, int y0, int c_idx); #endif // #ifndef AVCODEC_MIPS_HEVCPRED_MIPS_H diff --git a/libavcodec/mips/hevcpred_msa.c b/libavcodec/mips/hevcpred_msa.c index f53276d34e..b056ee986b 100644 --- a/libavcodec/mips/hevcpred_msa.c +++ b/libavcodec/mips/hevcpred_msa.c @@ -1903,10 +1903,10 @@ void ff_pred_intra_pred_angular_3_msa(uint8_t *dst, } } -void ff_intra_pred_8_16x16_msa(HEVCContext *s, int x0, int y0, int c_idx) +void ff_intra_pred_8_16x16_msa(HEVCLocalContext *lc, int x0, int y0, int c_idx) { v16u8 vec0; - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; int i; int hshift = s->ps.sps->hshift[c_idx]; int vshift = s->ps.sps->vshift[c_idx]; @@ -2416,14 +2416,14 @@ void ff_intra_pred_8_16x16_msa(HEVCContext *s, int x0, int y0, int c_idx) } } -void ff_intra_pred_8_32x32_msa(HEVCContext *s, int x0, int y0, int c_idx) +void ff_intra_pred_8_32x32_msa(HEVCLocalContext *lc, int x0, int y0, int c_idx) { v16u8 vec0, vec1; v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; v8i16 res0, res1, res2, res3; v8i16 mul_val0 = { 63, 62, 61, 60, 59, 58, 57, 56 }; v8i16 mul_val1 = { 1, 2, 3, 4, 5, 6, 7, 8 }; - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; int i; int hshift = s->ps.sps->hshift[c_idx]; int vshift = s->ps.sps->vshift[c_idx]; From patchwork Thu Jun 30 22:29:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36569 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp621140pzh; Thu, 30 Jun 2022 15:32:07 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sv67bVnmMI8ySOtycamtXS9PTgZMxYc55TX7Tncm0NwqaBTi1+eVf84eAa2zOU9Qzr/Vxk X-Received: by 2002:a05:6402:4411:b0:437:b723:72 with SMTP id y17-20020a056402441100b00437b7230072mr14673071eda.38.1656628327389; Thu, 30 Jun 2022 15:32:07 -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 d26-20020a50fb1a000000b0043574d16cfbsi478092edq.200.2022.06.30.15.32.06; Thu, 30 Jun 2022 15:32:07 -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=Ux+ZNknb; 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 B54BF68B7FF; Fri, 1 Jul 2022 01:30:53 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2107.outbound.protection.outlook.com [40.92.91.107]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A8B8C68B5D7 for ; Fri, 1 Jul 2022 01:30:51 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z+Pj8pBWSrHYH9Dv/sWspjiiNq74ExIjwnHOeo93RYXXacGwc2+aBbJO0nAoudlMf8sDwEULEVXszcn0bBF0jeKfwv1r72+6VIeBItJzsmo7jzlGPX0RB/I3CzpcRDLA/CSJw1BOZhW3ZSP5PUky46BpvegfPtv6dkvrgDMnyryWC+hO+JdNDssBZGCLln00B+FzKry/UAL7l0mzLm3vbWzekeQ2gC0APQvZOEW4+eMuk9gwzkDAQPIyn01jDOCpJg4LjmpxY/hhvpd7kyU8CNW+v6HEUWcDL4MUwUfRJ7z3K8TabmpO1RQ/xBStwU5JidmnSD20chW3/FkYYJdKqA== 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=H49ovzMDXcgHQqWDbHJW7Q6t/v3RS/gekRRng+l83/Y=; b=BP8LGS4SMT+3m2fthcfIiZYamgYoRMDJYG4jZ93CYq1B70o0W7hSOe8qajr6xNhZvV0Uz0wa/dBX2r4rue7NyZV9EWgViukb/8OC8crRUGKyKi8KtmHc5RolZLbNIKpR3+zit1/mw1l4qQIsA78o335oE1leNyrHpkuaSRvgi6NGuxPa0T1oK6LBNlwhJiQkrOvl6u2BDFDf6jBuFPEsRxe3MO36gA6zw4gLut4Zlhe/dFaD/7h+z6K4m5fJbxwWRJQ0XJTnnom6Foo7F6rdo00RPYWo3FBPCEhHBfgTI67pvZe8Lg9QH16dlUXxTrA8UezFsqEgV/xUNrO/Cp7OZw== 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=H49ovzMDXcgHQqWDbHJW7Q6t/v3RS/gekRRng+l83/Y=; b=Ux+ZNknbon3yfSgmBW5eOcKhr84rUpkbj2snF4TCvhHnPtOCEt74IdEL1hZCGRWw1wJaq58XZ/ZwBWFztK0gz3lCtcb998FJhn8FREwzCY8IqA2CYsix/95uN5OnG7zQiTKyaTfVJwIsWZTfthq6Ouv9eyTgKLXmQRqsiJavyxwggAb1DZkSXts4CPKCupjwsdyWfb8oN6RipTNGrxtqI+ev5yqfP+ediveWhpMg8r0HPFspt0Ez0MYkoj3Z+ChLk77Yqh+4JyUZkqBI7eTh1FinHOxfKq4GuPB1qcpp/+9IqWIH0M77bAkmkvlspBPZ8vukoBbTp7urriqKB3i2Jw== 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:50 +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:50 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Jul 2022 00:29:43 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [lR4C5ciq4+yfvas8j4w08QHxA8ulXJtz] 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-11-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 97c859ff-3ba2-4f4b-36d8-08da5ae82f31 X-MS-Exchange-SLBlob-MailProps: /mB5ds43bCHf6fPyxtsjc7j8cf61C9oo5mZHxM18n+KS9EqFqPTFIDC6EMFDMMZUInvO47lfZMxQ5ubsq52rAYrh3oZPzfwvPzS8/RSBwnCXD37qI9WvyqpwLy9MwlDUYrR+cx1Bwj1Nx442nhjdHmVTNddZuPIo2zhPai3j5k/KzGoLCrADtcyMmwTZUL5G5cO3NhaAkdFh9V94p0eHXk4e1lAh/D5L7wtsQZDEBW5svmOpN5dmIlKkcJ6Z7hm7qTFukEc8BPw57LbMvjXVVCikOGdAe5wRS9PsM0Hi2W+9IgrpcZMT2v6G8zeRMbihopzral8mRN+kPK0HsF0CqZ0Kt9jM7/LuIi7dElqdDDUgzvmFSCdeVIgEn8LmzWrZ30/P5rDj11MPHTc96Z6DZhUMx4l1VZTt/jxFiwNkTfuLQHCeyBPCqb57ABPc3spox6cALwL9HlPNkvZFs05Cvgci941vyJ9ZtX+QcQUlWz3hrdRfLpQ1mqbzx53jEAezKEFQQ4liK4iQymQvqE0qpf81h3tbNtXhXPd2r2kU3jpo3bWQjC66sarz/Bd1YqAUaVlBL9Dw9UvXUaRKtxBWBIDs4UTGQMaw5G023TeaTG11xoIaiT71pxJzclgFbImzRSJoXjoXdQkwATAItih6vXk6Po5/HNrxkUZP5cYGSEcA0sOb02sBys6FH6ChF4+0cTc/4cfpUWENOk3/m8ClWKQylvb3PBnCKbl+hoXR+EMzAhM6rnrnqJ4lT6oAXwHIFOEtjObLgjNLHSPHkaH8RRQDiP/Je1BW+pslS7bV8aDfgpuhGcC7C0O1c6AalRzmnEY1ZJUFVZXuCJ8jkcYisVpIPD4TO6YwZtGnEXaGozekNfr+t8ac9/BluM/5ujW91lcMIgVXVUy/uzL4mJwZL+BZ3l9ZCKro6/x0yiS3ZA4= X-MS-TrafficTypeDiagnostic: DB3PR0102MB3546:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: X3QygmSkZQ4Owebe2n0Y+v7zgKU2gIRfO7jyKMK6TM/7JJRbfkV4QRzYEarDCmTy67gC9VkFkQFNdMWhxskUx+SLsNZrVT0eAAFNOkwcj0+GGH3XR/NqHIiuY+9wKGDW/uOXOJu05XO+KIHezAv8Fom/f5KteiqQVkUjgBJd2Tx3FD88euZZUhz7OvaVloPIIcZblICkFlKf+53Ve6QXRMz+a1BvI1kBHJDiKCgtCwFNeRA9PhRm2ScvPTbVIwsbfEFJ84DT7JxWXn5ShsJqHCxJZFJrYTUBtZr7d/WXJjYJH2CXdXPfIId8nBznOFePl7H0GuQCRN/uGmSqmLwfIS/Zsmx3KFPvCQX0MN1tjs+Qlhrs6psUTNicFXjuGBaiAbYGLDMComB41JlReO6iG4Hej0AlUfz3LobmLGdEaNpcx4hPB07epUrUid2h7SwW7Od4WN9iZxCtQ3phRu9GyG/X9YxoKZfakeiinV3yQ7RKWawZPpxONXgBK7FIPzA+LQOv8dV8I80fzOK7C2O8MPP7zeLj4jChs5OUXs27vaONxBO5tzbZ3+pSVAV55nL7TYdj4KK9qPIWQtvw1MsiaHpm4Bda5+NpDbCBtxqiOCOSkgL6xQOh5w6AGWb/M2CWcJZECU8+T+LcYy/b3WhvDvrK4PjxkSezaU3GYQ/rhb7Qg/XQ6Fge6jXfeyzDZf/a00dX1Yj1wRngx0d+Ql2UAw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: /g2iabP9pvSbr96GFNTFE6wIbDzCvqh6oxcrVsyy/VvE4A7O00Fj67Ztj+dlIM091hcWYC7gACqKldrDR1O6+mpLM/EgnL+KFfeG9TT9WkTWbfSrcOdIdl/V39BE1lMme/qUoLnGocUfQaPqkt6SiOxmGcPNnlob92wLR1RSL3wTKgOpdiPdxNYo5NmnTShuOyilo2gKX33tJsrA3JDy9f+W1RPi261bT5BovvBS5EWAQfI27lVSFb8e2xhaAwlp3r0k14QDQw4n8VPLVBWmdH7Nuvr9kg9XBvJ8Kf8dFgiA3GYS0U6O6OlmH3Gs8i+ijqSUNx1p5VjXhdJjAGcLLaRj7en7QRWhdO3nye5BnHfS2XsDtheb9keq5SPG1fgJyTobwmXqDA1FwWgKVLoe2uaToyoDAJFiFS3tIDM6cSWmEYvFmNZosIlwIgsIaJQgqTPd+UAs3+BigDQYPqF1HXj0DuItVpUxLxp97GnEc/+b5FDNBVtWW54CaTyhaDFj40V4zSoFS+fiGlJ2FCVq6P+zk75n9Sr6ZRKSr1zwdfQLokwPuF/IXklBbiC91b++PwxVCXK22KnXzN+W8WHSKIFuix10BVlwf+5F9sq4VEinCl3uSirvjD1cS25euPe0oOh8k3o5B9ZkZf7tc936FvUNCymRMm6tlBFIRUjMR81DXCg9U3y8LeNkzz5uDUsyF8xVJhmUyGwavExqyBTs9u/Oyh0RYk8k028XCLstZ1rHaqkgxm4q9EtLZ0OZwiFiGZz7231m65aBFAsfjOu13dk/OtDUv4orCznYVP834iqcLbKTTjaRUhdkqwFERKzT62qhet54DpPl0R/kFtRy2l+yVStimE71jNCoF2e32kcxhvb+HS2ZrMyTPQyKYDwklkt0ki/Sa8Gd7QO1xxoEHkAWvjkpMuh1svDsueYd3mCSQYCwdtBrrgDf1ggPRLmW74T5dVE8v5yCtGIjlbd3Tx7V1IBLlfTuSsMi9pybGhfo8C5CwRcmWfh16xKkr+dXBsEIt8OEf8NnOm5xcU4gZKub1F3JpmEdK7bHm4h2dscJjdgli4LFsHiu3XO0fEp+dcWG1ytDj/AQnM09MDP8QmfyG5eq6ZdU76uz1pvKVGodbsGDcZp0BxwnPwJEE/cHHkBGeifvyehZn8NTWIfI2WA8dCxTSOnAZd3z07odMkMNpmqE9oKjPluYox3jX08CQtt7yeif4R5qU516IWksxcMAboVkjO3VVMsDRoqyBWbHqmCNTMYlVnZF/yG1u5Ueg+QCFUYVZc+QjCVimdOxKtwlOyMMtNVh20cMWsVbips= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 97c859ff-3ba2-4f4b-36d8-08da5ae82f31 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:49.9825 (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 12/18] avcodec/hevcdec: Pass HEVCLocalContext when slice-threading 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: hLYPkXOfe0O+ The HEVC decoder has both HEVCContext and HEVCLocalContext structures. The latter is supposed to be the structure containing the per-slicethread state. Yet 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. This commit stops doing this for lavc/hevcdec.c itself. It also constifies what can be constified in order to make the nonconst stuff stand out more. Signed-off-by: Andreas Rheinhardt --- libavcodec/hevcdec.c | 184 +++++++++++++++++++++---------------------- 1 file changed, 92 insertions(+), 92 deletions(-) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 2fd0f3acd3..1d0b80ea48 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -1005,9 +1005,9 @@ do { \ sao->elem = 0; \ } while (0) -static void hls_sao_param(HEVCContext *s, int rx, int ry) +static void hls_sao_param(HEVCLocalContext *lc, int rx, int ry) { - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; int sao_merge_left_flag = 0; int sao_merge_up_flag = 0; SAOParams *sao = &CTB(s->sao, rx, ry); @@ -1079,8 +1079,8 @@ static void hls_sao_param(HEVCContext *s, int rx, int ry) #undef SET_SAO #undef CTB -static int hls_cross_component_pred(HEVCContext *s, int idx) { - HEVCLocalContext *lc = s->HEVClc; +static int hls_cross_component_pred(HEVCLocalContext *lc, int idx) +{ int log2_res_scale_abs_plus1 = ff_hevc_log2_res_scale_abs(lc, idx); if (log2_res_scale_abs_plus1 != 0) { @@ -1095,12 +1095,12 @@ static int hls_cross_component_pred(HEVCContext *s, int idx) { return 0; } -static int hls_transform_unit(HEVCContext *s, int x0, int y0, +static int hls_transform_unit(HEVCLocalContext *lc, int x0, int y0, int xBase, int yBase, int cb_xBase, int cb_yBase, int log2_cb_size, int log2_trafo_size, int blk_idx, int cbf_luma, int *cbf_cb, int *cbf_cr) { - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; const int log2_trafo_size_c = log2_trafo_size - s->ps.sps->hshift[1]; int i; @@ -1189,7 +1189,7 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, (lc->tu.chroma_mode_c == 4))); if (lc->tu.cross_pf) { - hls_cross_component_pred(s, 0); + hls_cross_component_pred(lc, 0); } for (i = 0; i < (s->ps.sps->chroma_format_idc == 2 ? 2 : 1); i++) { if (lc->cu.pred_mode == MODE_INTRA) { @@ -1218,7 +1218,7 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, } if (lc->tu.cross_pf) { - hls_cross_component_pred(s, 1); + hls_cross_component_pred(lc, 1); } for (i = 0; i < (s->ps.sps->chroma_format_idc == 2 ? 2 : 1); i++) { if (lc->cu.pred_mode == MODE_INTRA) { @@ -1302,7 +1302,7 @@ static int hls_transform_unit(HEVCContext *s, int x0, int y0, return 0; } -static void set_deblocking_bypass(HEVCContext *s, int x0, int y0, int log2_cb_size) +static void set_deblocking_bypass(const HEVCContext *s, int x0, int y0, int log2_cb_size) { int cb_size = 1 << log2_cb_size; int log2_min_pu_size = s->ps.sps->log2_min_pu_size; @@ -1317,13 +1317,13 @@ static void set_deblocking_bypass(HEVCContext *s, int x0, int y0, int log2_cb_si s->is_pcm[i + j * min_pu_width] = 2; } -static int hls_transform_tree(HEVCContext *s, int x0, int y0, +static int hls_transform_tree(HEVCLocalContext *lc, int x0, int y0, int xBase, int yBase, int cb_xBase, int cb_yBase, int log2_cb_size, int log2_trafo_size, int trafo_depth, int blk_idx, const int *base_cbf_cb, const int *base_cbf_cr) { - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; uint8_t split_transform_flag; int cbf_cb[2]; int cbf_cr[2]; @@ -1390,7 +1390,7 @@ static int hls_transform_tree(HEVCContext *s, int x0, int y0, #define SUBDIVIDE(x, y, idx) \ do { \ - ret = hls_transform_tree(s, x, y, x0, y0, cb_xBase, cb_yBase, log2_cb_size, \ + ret = hls_transform_tree(lc, x, y, x0, y0, cb_xBase, cb_yBase, log2_cb_size,\ log2_trafo_size - 1, trafo_depth + 1, idx, \ cbf_cb, cbf_cr); \ if (ret < 0) \ @@ -1415,7 +1415,7 @@ do { cbf_luma = ff_hevc_cbf_luma_decode(lc, trafo_depth); } - ret = hls_transform_unit(s, x0, y0, xBase, yBase, cb_xBase, cb_yBase, + ret = hls_transform_unit(lc, x0, y0, xBase, yBase, cb_xBase, cb_yBase, log2_cb_size, log2_trafo_size, blk_idx, cbf_luma, cbf_cb, cbf_cr); if (ret < 0) @@ -1440,9 +1440,9 @@ do { return 0; } -static int hls_pcm_sample(HEVCContext *s, int x0, int y0, int log2_cb_size) +static int hls_pcm_sample(HEVCLocalContext *lc, int x0, int y0, int log2_cb_size) { - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; GetBitContext gb; int cb_size = 1 << log2_cb_size; ptrdiff_t stride0 = s->frame->linesize[0]; @@ -1497,11 +1497,11 @@ static int hls_pcm_sample(HEVCContext *s, int x0, int y0, int log2_cb_size) * @param luma_offset additive offset applied to the luma prediction value */ -static void luma_mc_uni(HEVCContext *s, uint8_t *dst, ptrdiff_t dststride, +static void luma_mc_uni(HEVCLocalContext *lc, uint8_t *dst, ptrdiff_t dststride, AVFrame *ref, const Mv *mv, int x_off, int y_off, int block_w, int block_h, int luma_weight, int luma_offset) { - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; uint8_t *src = ref->data[0]; ptrdiff_t srcstride = ref->linesize[0]; int pic_width = s->ps.sps->width; @@ -1558,11 +1558,11 @@ static void luma_mc_uni(HEVCContext *s, uint8_t *dst, ptrdiff_t dststride, * @param mv1 motion vector1 (relative to block position) to get pixel data from * @param current_mv current motion vector structure */ - static void luma_mc_bi(HEVCContext *s, uint8_t *dst, ptrdiff_t dststride, + static void luma_mc_bi(HEVCLocalContext *lc, uint8_t *dst, ptrdiff_t dststride, AVFrame *ref0, const Mv *mv0, int x_off, int y_off, int block_w, int block_h, AVFrame *ref1, const Mv *mv1, struct MvField *current_mv) { - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; ptrdiff_t src0stride = ref0->linesize[0]; ptrdiff_t src1stride = ref1->linesize[0]; int pic_width = s->ps.sps->width; @@ -1649,11 +1649,12 @@ static void luma_mc_uni(HEVCContext *s, uint8_t *dst, ptrdiff_t dststride, * @param chroma_offset additive offset applied to the chroma prediction value */ -static void chroma_mc_uni(HEVCContext *s, uint8_t *dst0, +static void chroma_mc_uni(HEVCLocalContext *lc, uint8_t *dst0, ptrdiff_t dststride, uint8_t *src0, ptrdiff_t srcstride, int reflist, - int x_off, int y_off, int block_w, int block_h, struct MvField *current_mv, int chroma_weight, int chroma_offset) + int x_off, int y_off, int block_w, int block_h, + const struct MvField *current_mv, int chroma_weight, int chroma_offset) { - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; int pic_width = s->ps.sps->width >> s->ps.sps->hshift[1]; int pic_height = s->ps.sps->height >> s->ps.sps->vshift[1]; const Mv *mv = ¤t_mv->mv[reflist]; @@ -1714,10 +1715,10 @@ static void chroma_mc_uni(HEVCContext *s, uint8_t *dst0, * @param current_mv current motion vector structure * @param cidx chroma component(cb, cr) */ -static void chroma_mc_bi(HEVCContext *s, uint8_t *dst0, ptrdiff_t dststride, AVFrame *ref0, AVFrame *ref1, - int x_off, int y_off, int block_w, int block_h, struct MvField *current_mv, int cidx) +static void chroma_mc_bi(HEVCLocalContext *lc, uint8_t *dst0, ptrdiff_t dststride, AVFrame *ref0, AVFrame *ref1, + int x_off, int y_off, int block_w, int block_h, const MvField *current_mv, int cidx) { - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; uint8_t *src1 = ref0->data[cidx+1]; uint8_t *src2 = ref1->data[cidx+1]; ptrdiff_t src1stride = ref0->linesize[cidx+1]; @@ -1726,8 +1727,8 @@ static void chroma_mc_bi(HEVCContext *s, uint8_t *dst0, ptrdiff_t dststride, AVF (s->sh.slice_type == HEVC_SLICE_B && s->ps.pps->weighted_bipred_flag); int pic_width = s->ps.sps->width >> s->ps.sps->hshift[1]; int pic_height = s->ps.sps->height >> s->ps.sps->vshift[1]; - Mv *mv0 = ¤t_mv->mv[0]; - Mv *mv1 = ¤t_mv->mv[1]; + const Mv *const mv0 = ¤t_mv->mv[0]; + const Mv *const mv1 = ¤t_mv->mv[1]; int hshift = s->ps.sps->hshift[1]; int vshift = s->ps.sps->vshift[1]; @@ -1804,7 +1805,7 @@ static void chroma_mc_bi(HEVCContext *s, uint8_t *dst0, ptrdiff_t dststride, AVF _mx1, _my1, block_w); } -static void hevc_await_progress(HEVCContext *s, HEVCFrame *ref, +static void hevc_await_progress(const HEVCContext *s, HEVCFrame *ref, const Mv *mv, int y0, int height) { if (s->threads_type == FF_THREAD_FRAME ) { @@ -1814,11 +1815,11 @@ static void hevc_await_progress(HEVCContext *s, HEVCFrame *ref, } } -static void hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0, int nPbW, +static void hevc_luma_mv_mvp_mode(HEVCLocalContext *lc, int x0, int y0, int nPbW, int nPbH, int log2_cb_size, int part_idx, int merge_idx, MvField *mv) { - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; enum InterPredIdc inter_pred_idc = PRED_L0; int mvp_flag; @@ -1859,21 +1860,21 @@ static void hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0, int nPbW, } } -static void hls_prediction_unit(HEVCContext *s, int x0, int y0, +static void hls_prediction_unit(HEVCLocalContext *lc, int x0, int y0, int nPbW, int nPbH, int log2_cb_size, int partIdx, int idx) { #define POS(c_idx, x, y) \ &s->frame->data[c_idx][((y) >> s->ps.sps->vshift[c_idx]) * s->frame->linesize[c_idx] + \ (((x) >> s->ps.sps->hshift[c_idx]) << s->ps.sps->pixel_shift)] - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; int merge_idx = 0; struct MvField current_mv = {{{ 0 }}}; int min_pu_width = s->ps.sps->min_pu_width; MvField *tab_mvf = s->ref->tab_mvf; - RefPicList *refPicList = s->ref->refPicList; + const RefPicList *refPicList = s->ref->refPicList; HEVCFrame *ref0 = NULL, *ref1 = NULL; uint8_t *dst0 = POS(0, x0, y0); uint8_t *dst1 = POS(1, x0, y0); @@ -1899,7 +1900,7 @@ static void hls_prediction_unit(HEVCContext *s, int x0, int y0, ff_hevc_luma_mv_merge_mode(lc, x0, y0, nPbW, nPbH, log2_cb_size, partIdx, merge_idx, ¤t_mv); } else { - hevc_luma_mv_mvp_mode(s, x0, y0, nPbW, nPbH, log2_cb_size, + hevc_luma_mv_mvp_mode(lc, x0, y0, nPbW, nPbH, log2_cb_size, partIdx, merge_idx, ¤t_mv); } @@ -1929,16 +1930,16 @@ static void hls_prediction_unit(HEVCContext *s, int x0, int y0, int nPbW_c = nPbW >> s->ps.sps->hshift[1]; int nPbH_c = nPbH >> s->ps.sps->vshift[1]; - luma_mc_uni(s, dst0, s->frame->linesize[0], ref0->frame, + luma_mc_uni(lc, dst0, s->frame->linesize[0], ref0->frame, ¤t_mv.mv[0], x0, y0, nPbW, nPbH, s->sh.luma_weight_l0[current_mv.ref_idx[0]], s->sh.luma_offset_l0[current_mv.ref_idx[0]]); if (s->ps.sps->chroma_format_idc) { - chroma_mc_uni(s, dst1, s->frame->linesize[1], ref0->frame->data[1], ref0->frame->linesize[1], + chroma_mc_uni(lc, dst1, s->frame->linesize[1], ref0->frame->data[1], ref0->frame->linesize[1], 0, x0_c, y0_c, nPbW_c, nPbH_c, ¤t_mv, s->sh.chroma_weight_l0[current_mv.ref_idx[0]][0], s->sh.chroma_offset_l0[current_mv.ref_idx[0]][0]); - chroma_mc_uni(s, dst2, s->frame->linesize[2], ref0->frame->data[2], ref0->frame->linesize[2], + chroma_mc_uni(lc, dst2, s->frame->linesize[2], ref0->frame->data[2], ref0->frame->linesize[2], 0, x0_c, y0_c, nPbW_c, nPbH_c, ¤t_mv, s->sh.chroma_weight_l0[current_mv.ref_idx[0]][1], s->sh.chroma_offset_l0[current_mv.ref_idx[0]][1]); } @@ -1948,17 +1949,17 @@ static void hls_prediction_unit(HEVCContext *s, int x0, int y0, int nPbW_c = nPbW >> s->ps.sps->hshift[1]; int nPbH_c = nPbH >> s->ps.sps->vshift[1]; - luma_mc_uni(s, dst0, s->frame->linesize[0], ref1->frame, + luma_mc_uni(lc, dst0, s->frame->linesize[0], ref1->frame, ¤t_mv.mv[1], x0, y0, nPbW, nPbH, s->sh.luma_weight_l1[current_mv.ref_idx[1]], s->sh.luma_offset_l1[current_mv.ref_idx[1]]); if (s->ps.sps->chroma_format_idc) { - chroma_mc_uni(s, dst1, s->frame->linesize[1], ref1->frame->data[1], ref1->frame->linesize[1], + chroma_mc_uni(lc, dst1, s->frame->linesize[1], ref1->frame->data[1], ref1->frame->linesize[1], 1, x0_c, y0_c, nPbW_c, nPbH_c, ¤t_mv, s->sh.chroma_weight_l1[current_mv.ref_idx[1]][0], s->sh.chroma_offset_l1[current_mv.ref_idx[1]][0]); - chroma_mc_uni(s, dst2, s->frame->linesize[2], ref1->frame->data[2], ref1->frame->linesize[2], + chroma_mc_uni(lc, dst2, s->frame->linesize[2], ref1->frame->data[2], ref1->frame->linesize[2], 1, x0_c, y0_c, nPbW_c, nPbH_c, ¤t_mv, s->sh.chroma_weight_l1[current_mv.ref_idx[1]][1], s->sh.chroma_offset_l1[current_mv.ref_idx[1]][1]); } @@ -1968,15 +1969,15 @@ static void hls_prediction_unit(HEVCContext *s, int x0, int y0, int nPbW_c = nPbW >> s->ps.sps->hshift[1]; int nPbH_c = nPbH >> s->ps.sps->vshift[1]; - luma_mc_bi(s, dst0, s->frame->linesize[0], ref0->frame, + luma_mc_bi(lc, dst0, s->frame->linesize[0], ref0->frame, ¤t_mv.mv[0], x0, y0, nPbW, nPbH, ref1->frame, ¤t_mv.mv[1], ¤t_mv); if (s->ps.sps->chroma_format_idc) { - chroma_mc_bi(s, dst1, s->frame->linesize[1], ref0->frame, ref1->frame, + chroma_mc_bi(lc, dst1, s->frame->linesize[1], ref0->frame, ref1->frame, x0_c, y0_c, nPbW_c, nPbH_c, ¤t_mv, 0); - chroma_mc_bi(s, dst2, s->frame->linesize[2], ref0->frame, ref1->frame, + chroma_mc_bi(lc, dst2, s->frame->linesize[2], ref0->frame, ref1->frame, x0_c, y0_c, nPbW_c, nPbH_c, ¤t_mv, 1); } } @@ -1985,10 +1986,10 @@ static void hls_prediction_unit(HEVCContext *s, int x0, int y0, /** * 8.4.1 */ -static int luma_intra_pred_mode(HEVCContext *s, int x0, int y0, int pu_size, +static int luma_intra_pred_mode(HEVCLocalContext *lc, int x0, int y0, int pu_size, int prev_intra_luma_pred_flag) { - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; int x_pu = x0 >> s->ps.sps->log2_min_pu_size; int y_pu = y0 >> s->ps.sps->log2_min_pu_size; int min_pu_width = s->ps.sps->min_pu_width; @@ -2065,7 +2066,7 @@ static int luma_intra_pred_mode(HEVCContext *s, int x0, int y0, int pu_size, return intra_pred_mode; } -static av_always_inline void set_ct_depth(HEVCContext *s, int x0, int y0, +static av_always_inline void set_ct_depth(const HEVCContext *s, int x0, int y0, int log2_cb_size, int ct_depth) { int length = (1 << log2_cb_size) >> s->ps.sps->log2_min_cb_size; @@ -2082,10 +2083,10 @@ static const uint8_t tab_mode_idx[] = { 0, 1, 2, 2, 2, 2, 3, 5, 7, 8, 10, 12, 13, 15, 17, 18, 19, 20, 21, 22, 23, 23, 24, 24, 25, 25, 26, 27, 27, 28, 28, 29, 29, 30, 31}; -static void intra_prediction_unit(HEVCContext *s, int x0, int y0, +static void intra_prediction_unit(HEVCLocalContext *lc, int x0, int y0, int log2_cb_size) { - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; static const uint8_t intra_chroma_table[4] = { 0, 26, 10, 1 }; uint8_t prev_intra_luma_pred_flag[4]; int split = lc->cu.part_mode == PART_NxN; @@ -2106,7 +2107,7 @@ static void intra_prediction_unit(HEVCContext *s, int x0, int y0, lc->pu.rem_intra_luma_pred_mode = ff_hevc_rem_intra_luma_pred_mode_decode(lc); lc->pu.intra_pred_mode[2 * i + j] = - luma_intra_pred_mode(s, x0 + pb_size * j, y0 + pb_size * i, pb_size, + luma_intra_pred_mode(lc, x0 + pb_size * j, y0 + pb_size * i, pb_size, prev_intra_luma_pred_flag[2 * i + j]); } } @@ -2150,11 +2151,11 @@ static void intra_prediction_unit(HEVCContext *s, int x0, int y0, } } -static void intra_prediction_unit_default_value(HEVCContext *s, +static void intra_prediction_unit_default_value(HEVCLocalContext *lc, int x0, int y0, int log2_cb_size) { - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; int pb_size = 1 << log2_cb_size; int size_in_pus = pb_size >> s->ps.sps->log2_min_pu_size; int min_pu_width = s->ps.sps->min_pu_width; @@ -2173,10 +2174,9 @@ static void intra_prediction_unit_default_value(HEVCContext *s, tab_mvf[(y_pu + j) * min_pu_width + x_pu + k].pred_flag = PF_INTRA; } -static int hls_coding_unit(HEVCContext *s, int x0, int y0, int log2_cb_size) +static int hls_coding_unit(HEVCLocalContext *lc, const HEVCContext *s, int x0, int y0, int log2_cb_size) { int cb_size = 1 << log2_cb_size; - HEVCLocalContext *lc = s->HEVClc; int log2_min_cb_size = s->ps.sps->log2_min_cb_size; int length = cb_size >> log2_min_cb_size; int min_cb_width = s->ps.sps->min_cb_width; @@ -2220,8 +2220,8 @@ static int hls_coding_unit(HEVCContext *s, int x0, int y0, int log2_cb_size) } if (SAMPLE_CTB(s->skip_flag, x_cb, y_cb)) { - hls_prediction_unit(s, x0, y0, cb_size, cb_size, log2_cb_size, 0, idx); - intra_prediction_unit_default_value(s, x0, y0, log2_cb_size); + hls_prediction_unit(lc, x0, y0, cb_size, cb_size, log2_cb_size, 0, idx); + intra_prediction_unit_default_value(lc, x0, y0, log2_cb_size); if (!s->sh.disable_deblocking_filter_flag) ff_hevc_deblocking_boundary_strengths(lc, x0, y0, log2_cb_size); @@ -2244,51 +2244,51 @@ static int hls_coding_unit(HEVCContext *s, int x0, int y0, int log2_cb_size) pcm_flag = ff_hevc_pcm_flag_decode(lc); } if (pcm_flag) { - intra_prediction_unit_default_value(s, x0, y0, log2_cb_size); - ret = hls_pcm_sample(s, x0, y0, log2_cb_size); + intra_prediction_unit_default_value(lc, x0, y0, log2_cb_size); + ret = hls_pcm_sample(lc, x0, y0, log2_cb_size); if (s->ps.sps->pcm.loop_filter_disable_flag) set_deblocking_bypass(s, x0, y0, log2_cb_size); if (ret < 0) return ret; } else { - intra_prediction_unit(s, x0, y0, log2_cb_size); + intra_prediction_unit(lc, x0, y0, log2_cb_size); } } else { - intra_prediction_unit_default_value(s, x0, y0, log2_cb_size); + intra_prediction_unit_default_value(lc, x0, y0, log2_cb_size); switch (lc->cu.part_mode) { case PART_2Nx2N: - hls_prediction_unit(s, x0, y0, cb_size, cb_size, log2_cb_size, 0, idx); + hls_prediction_unit(lc, x0, y0, cb_size, cb_size, log2_cb_size, 0, idx); break; case PART_2NxN: - hls_prediction_unit(s, x0, y0, cb_size, cb_size / 2, log2_cb_size, 0, idx); - hls_prediction_unit(s, x0, y0 + cb_size / 2, cb_size, cb_size / 2, log2_cb_size, 1, idx); + hls_prediction_unit(lc, x0, y0, cb_size, cb_size / 2, log2_cb_size, 0, idx); + hls_prediction_unit(lc, x0, y0 + cb_size / 2, cb_size, cb_size / 2, log2_cb_size, 1, idx); break; case PART_Nx2N: - hls_prediction_unit(s, x0, y0, cb_size / 2, cb_size, log2_cb_size, 0, idx - 1); - hls_prediction_unit(s, x0 + cb_size / 2, y0, cb_size / 2, cb_size, log2_cb_size, 1, idx - 1); + hls_prediction_unit(lc, x0, y0, cb_size / 2, cb_size, log2_cb_size, 0, idx - 1); + hls_prediction_unit(lc, x0 + cb_size / 2, y0, cb_size / 2, cb_size, log2_cb_size, 1, idx - 1); break; case PART_2NxnU: - hls_prediction_unit(s, x0, y0, cb_size, cb_size / 4, log2_cb_size, 0, idx); - hls_prediction_unit(s, x0, y0 + cb_size / 4, cb_size, cb_size * 3 / 4, log2_cb_size, 1, idx); + hls_prediction_unit(lc, x0, y0, cb_size, cb_size / 4, log2_cb_size, 0, idx); + hls_prediction_unit(lc, x0, y0 + cb_size / 4, cb_size, cb_size * 3 / 4, log2_cb_size, 1, idx); break; case PART_2NxnD: - hls_prediction_unit(s, x0, y0, cb_size, cb_size * 3 / 4, log2_cb_size, 0, idx); - hls_prediction_unit(s, x0, y0 + cb_size * 3 / 4, cb_size, cb_size / 4, log2_cb_size, 1, idx); + hls_prediction_unit(lc, x0, y0, cb_size, cb_size * 3 / 4, log2_cb_size, 0, idx); + hls_prediction_unit(lc, x0, y0 + cb_size * 3 / 4, cb_size, cb_size / 4, log2_cb_size, 1, idx); break; case PART_nLx2N: - hls_prediction_unit(s, x0, y0, cb_size / 4, cb_size, log2_cb_size, 0, idx - 2); - hls_prediction_unit(s, x0 + cb_size / 4, y0, cb_size * 3 / 4, cb_size, log2_cb_size, 1, idx - 2); + hls_prediction_unit(lc, x0, y0, cb_size / 4, cb_size, log2_cb_size, 0, idx - 2); + hls_prediction_unit(lc, x0 + cb_size / 4, y0, cb_size * 3 / 4, cb_size, log2_cb_size, 1, idx - 2); break; case PART_nRx2N: - hls_prediction_unit(s, x0, y0, cb_size * 3 / 4, cb_size, log2_cb_size, 0, idx - 2); - hls_prediction_unit(s, x0 + cb_size * 3 / 4, y0, cb_size / 4, cb_size, log2_cb_size, 1, idx - 2); + hls_prediction_unit(lc, x0, y0, cb_size * 3 / 4, cb_size, log2_cb_size, 0, idx - 2); + hls_prediction_unit(lc, x0 + cb_size * 3 / 4, y0, cb_size / 4, cb_size, log2_cb_size, 1, idx - 2); break; case PART_NxN: - hls_prediction_unit(s, x0, y0, cb_size / 2, cb_size / 2, log2_cb_size, 0, idx - 1); - hls_prediction_unit(s, x0 + cb_size / 2, y0, cb_size / 2, cb_size / 2, log2_cb_size, 1, idx - 1); - hls_prediction_unit(s, x0, y0 + cb_size / 2, cb_size / 2, cb_size / 2, log2_cb_size, 2, idx - 1); - hls_prediction_unit(s, x0 + cb_size / 2, y0 + cb_size / 2, cb_size / 2, cb_size / 2, log2_cb_size, 3, idx - 1); + hls_prediction_unit(lc, x0, y0, cb_size / 2, cb_size / 2, log2_cb_size, 0, idx - 1); + hls_prediction_unit(lc, x0 + cb_size / 2, y0, cb_size / 2, cb_size / 2, log2_cb_size, 1, idx - 1); + hls_prediction_unit(lc, x0, y0 + cb_size / 2, cb_size / 2, cb_size / 2, log2_cb_size, 2, idx - 1); + hls_prediction_unit(lc, x0 + cb_size / 2, y0 + cb_size / 2, cb_size / 2, cb_size / 2, log2_cb_size, 3, idx - 1); break; } } @@ -2305,7 +2305,7 @@ static int hls_coding_unit(HEVCContext *s, int x0, int y0, int log2_cb_size) lc->cu.max_trafo_depth = lc->cu.pred_mode == MODE_INTRA ? s->ps.sps->max_transform_hierarchy_depth_intra + lc->cu.intra_split_flag : s->ps.sps->max_transform_hierarchy_depth_inter; - ret = hls_transform_tree(s, x0, y0, x0, y0, x0, y0, + ret = hls_transform_tree(lc, x0, y0, x0, y0, x0, y0, log2_cb_size, log2_cb_size, 0, 0, cbf, cbf); if (ret < 0) @@ -2336,10 +2336,10 @@ static int hls_coding_unit(HEVCContext *s, int x0, int y0, int log2_cb_size) return 0; } -static int hls_coding_quadtree(HEVCContext *s, int x0, int y0, +static int hls_coding_quadtree(HEVCLocalContext *lc, int x0, int y0, int log2_cb_size, int cb_depth) { - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; const int cb_size = 1 << log2_cb_size; int ret; int split_cu; @@ -2371,23 +2371,23 @@ static int hls_coding_quadtree(HEVCContext *s, int x0, int y0, int more_data = 0; - more_data = hls_coding_quadtree(s, x0, y0, log2_cb_size - 1, cb_depth + 1); + more_data = hls_coding_quadtree(lc, x0, y0, log2_cb_size - 1, cb_depth + 1); if (more_data < 0) return more_data; if (more_data && x1 < s->ps.sps->width) { - more_data = hls_coding_quadtree(s, x1, y0, log2_cb_size - 1, cb_depth + 1); + more_data = hls_coding_quadtree(lc, x1, y0, log2_cb_size - 1, cb_depth + 1); if (more_data < 0) return more_data; } if (more_data && y1 < s->ps.sps->height) { - more_data = hls_coding_quadtree(s, x0, y1, log2_cb_size - 1, cb_depth + 1); + more_data = hls_coding_quadtree(lc, x0, y1, log2_cb_size - 1, cb_depth + 1); if (more_data < 0) return more_data; } if (more_data && x1 < s->ps.sps->width && y1 < s->ps.sps->height) { - more_data = hls_coding_quadtree(s, x1, y1, log2_cb_size - 1, cb_depth + 1); + more_data = hls_coding_quadtree(lc, x1, y1, log2_cb_size - 1, cb_depth + 1); if (more_data < 0) return more_data; } @@ -2402,7 +2402,7 @@ static int hls_coding_quadtree(HEVCContext *s, int x0, int y0, else return 0; } else { - ret = hls_coding_unit(s, x0, y0, log2_cb_size); + ret = hls_coding_unit(lc, s, x0, y0, log2_cb_size); if (ret < 0) return ret; if ((!((x0 + cb_size) % @@ -2421,10 +2421,10 @@ static int hls_coding_quadtree(HEVCContext *s, int x0, int y0, return 0; } -static void hls_decode_neighbour(HEVCContext *s, int x_ctb, int y_ctb, +static void hls_decode_neighbour(HEVCLocalContext *lc, int x_ctb, int y_ctb, int ctb_addr_ts) { - HEVCLocalContext *lc = s->HEVClc; + const HEVCContext *const s = lc->parent; int ctb_size = 1 << s->ps.sps->log2_ctb_size; int ctb_addr_rs = s->ps.pps->ctb_addr_ts_to_rs[ctb_addr_ts]; int ctb_addr_in_slice = ctb_addr_rs - s->sh.slice_addr; @@ -2499,7 +2499,7 @@ static int hls_decode_entry(AVCodecContext *avctxt, void *isFilterThread) x_ctb = (ctb_addr_rs % ((s->ps.sps->width + ctb_size - 1) >> s->ps.sps->log2_ctb_size)) << s->ps.sps->log2_ctb_size; y_ctb = (ctb_addr_rs / ((s->ps.sps->width + ctb_size - 1) >> s->ps.sps->log2_ctb_size)) << s->ps.sps->log2_ctb_size; - hls_decode_neighbour(s, x_ctb, y_ctb, ctb_addr_ts); + hls_decode_neighbour(lc, x_ctb, y_ctb, ctb_addr_ts); ret = ff_hevc_cabac_init(lc, ctb_addr_ts); if (ret < 0) { @@ -2507,13 +2507,13 @@ static int hls_decode_entry(AVCodecContext *avctxt, void *isFilterThread) return ret; } - hls_sao_param(s, x_ctb >> s->ps.sps->log2_ctb_size, y_ctb >> s->ps.sps->log2_ctb_size); + hls_sao_param(lc, x_ctb >> s->ps.sps->log2_ctb_size, y_ctb >> s->ps.sps->log2_ctb_size); s->deblock[ctb_addr_rs].beta_offset = s->sh.beta_offset; s->deblock[ctb_addr_rs].tc_offset = s->sh.tc_offset; s->filter_slice_edges[ctb_addr_rs] = s->sh.slice_loop_filter_across_slices_enabled_flag; - more_data = hls_coding_quadtree(s, x_ctb, y_ctb, s->ps.sps->log2_ctb_size, 0); + more_data = hls_coding_quadtree(lc, x_ctb, y_ctb, s->ps.sps->log2_ctb_size, 0); if (more_data < 0) { s->tab_slice_address[ctb_addr_rs] = -1; return more_data; @@ -2570,7 +2570,7 @@ static int hls_decode_entry_wpp(AVCodecContext *avctxt, void *input_ctb_row, int int x_ctb = (ctb_addr_rs % s->ps.sps->ctb_width) << s->ps.sps->log2_ctb_size; int y_ctb = (ctb_addr_rs / s->ps.sps->ctb_width) << s->ps.sps->log2_ctb_size; - hls_decode_neighbour(s, x_ctb, y_ctb, ctb_addr_ts); + hls_decode_neighbour(lc, x_ctb, y_ctb, ctb_addr_ts); ff_thread_await_progress2(s->avctx, ctb_row, thread, SHIFT_CTB_WPP); @@ -2582,8 +2582,8 @@ static int hls_decode_entry_wpp(AVCodecContext *avctxt, void *input_ctb_row, int ret = ff_hevc_cabac_init(lc, ctb_addr_ts); if (ret < 0) goto error; - hls_sao_param(s, x_ctb >> s->ps.sps->log2_ctb_size, y_ctb >> s->ps.sps->log2_ctb_size); - more_data = hls_coding_quadtree(s, x_ctb, y_ctb, s->ps.sps->log2_ctb_size, 0); + hls_sao_param(lc, x_ctb >> s->ps.sps->log2_ctb_size, y_ctb >> s->ps.sps->log2_ctb_size); + more_data = hls_coding_quadtree(lc, x_ctb, y_ctb, s->ps.sps->log2_ctb_size, 0); if (more_data < 0) { ret = more_data; From patchwork Thu Jun 30 22:29:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36570 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp621210pzh; Thu, 30 Jun 2022 15:32:17 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sYEf9Ltil1devWJ6yVEb3KJqgJ6xWNl0maIfjGQPW7D+B2PHFTYaPmHIAa1Vl0zFOz9+Nc X-Received: by 2002:a05:6402:5256:b0:435:9017:e5d3 with SMTP id t22-20020a056402525600b004359017e5d3mr14695343edd.258.1656628337592; Thu, 30 Jun 2022 15:32:17 -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 ds8-20020a170907724800b006ff1a60c3ebsi2180550ejc.821.2022.06.30.15.32.16; Thu, 30 Jun 2022 15:32:17 -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=MShbKFdk; 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 9B94C68B815; Fri, 1 Jul 2022 01:30:54 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2107.outbound.protection.outlook.com [40.92.91.107]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CD8D968B7FA for ; Fri, 1 Jul 2022 01:30:51 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=k1xxSdk4VxVmRrQuY7sNompMjjo9IrWi+7LycgphkYM9GQHCyanSwhf5TPH9Ic+qlF9INS4VEp6lY+WbgZ22kebP2WZ1NBBm8YZZli6PD5M14/BYQEKtcOfQK+LBGoqzvtJLaD1xAKmUV2yNp0gmXdS43bW7yISbznvUQpfaFSRMxQfBAk4MV/9ys5hkK2SfHDRrFujakg+kzZ+yEyu52XiHEkNZSrzIbYDXYc/9PD3W4rRMm2pTe5ng1a1ihTKyqJYdebodMFytLOoM8F9+m17pZqXAvg7OLg4QYpRHa8XAa77ik8nVCtta+qsQS5ErmJwHfr8LEdKF6+aS/Cx+iA== 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=zYL3xMo5VjFMSPazmZaFEM4L7HkpO571iPfhdxUdfdA=; b=L6vc2AogkgHAsEKc0kiD8q+tTd8mHooUln/x7YRi1JB3JPgo9nFLspw2z3pjBGeXP3AOPs6/cBXkm+7bEWfcETaOnt5Gcsz/IV3Fp+C4/Ym93kZThCA/SaKzaC1VEvwSs/o1XgORuD96ogxRHFKjxIGlwKA7dgIHxPX1nsvin4L2JdVXxovj28a/njv+DS0p9iJ/6zsehqSczdsJjhoAHV+yobP1gFlLR2jzxcg9vCG4E3KxgtBTbcL6GVbimYuQvWOsiuAry+2ZCbFbgwlyNlNw96AogEtotumGOMi9LmeO/xZMATATpd+37O0SuB+LTP9SqeSyQ5QlcMZV/EzdBA== 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=zYL3xMo5VjFMSPazmZaFEM4L7HkpO571iPfhdxUdfdA=; b=MShbKFdkN38UKbVTAIXao52HpuyBVtq4Yiw1LuJOLT52oDlzoRol3YUk4ZtJ9A1f7lzXFhDCsYCyrYeN5vgJte0KUs9iQ/YRXiV6JyCfcKV8F6T7Ay2maT4B7YxDeCCoSQkUWol3RqpVsTrs9tH6koni/x3DGrbABB4B5CDP+c+od/E1C57jBiqEo2cteXc3jJn0kY3Sj/oAELo8IY9v/hN9US5DZcOnFCQsrvaVJ1JG9TW6ZAdfpGO+Sk4CgXI4JKcu/e444/WFl/51KFHGZLTR/D7zS803YlD632IIl4z6vJnyBcB+mDQxrQl7bTPsUrYdOJcPlQI9qYjxYIufqA== 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:51 +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:51 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Jul 2022 00:29:44 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [FGX07jlW54WEpajW4t+djmJ9fgOdwt3g] 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-12-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3b482463-922c-48fa-c8a3-08da5ae82fe8 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiSAA+E0K/sYrHNnfsWcYQJj1q+j8wZayWMzpYLKrOqPZOaWEyRwSAlwnez6PVeTRXzTn7IVpWgrheebfjOqGpKbH7bwIbPnZiCo1P343x4RiNFvDkj718MM6DSwZrC/v53ZdamtHLpB8n98mse8mBCq62trUoAjTMr2salUdrSacoxAorCCQ6JwXhjFBUgn+uTZJEq3Tduyt2K5Nc8G16NrWsOMC6U71CvDZJzaS/HQ59sWUZyswMOODvuO16UNIUMrSz9MoBZTvUCMPhTJD15JZWMPjv2ti4QtIUF5GWeGR7hR7a6nRCkIFyym+dboGEIAuoXfuxVSNWTIlMA3cfx+3proZb2Er2FqZtjgcvITRU99HOD3nHa5LiMtCSWZZcjEooEG5oYZfuOPLyPWfQRwmEjbdkog29fdSP3/S4IIWcSTwxzW0+vLfNAVO+gDL9uwFJUc9itPx1k1/+vsKQBoACvTSca9+/kbuqD6diHkQtSFnJ5PC/I8sYmifopeWR0NRbCm4Ne0nDwMXqWmGaoZNQM5ydOySpDnk0mlm0didU5KnJgpV8eAwY0yWC9C9d1s/KJW7RP6UffS9I/McqGxFRBbJHlbR0msxE9s/vYphzZ+EG20QusUncIZFcKuu068cXtPkHULOsLwNIZLNxVPu8t9CvLucxqZ6O/pEMCBPrKh/pAU0tB0+eh+YKbKWW8e0NgQOAPxpi+WlaxRh3Us7nT2UQam3pi9NtKpXAeOlB+F/d4zX+qojLLWc2i/fuY= X-MS-TrafficTypeDiagnostic: DB3PR0102MB3546:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wuQmirxSimM0sVFKIlJE5qKdGOCv6YWRj0SZT1SGWuFCpeKs49ezGgMPrpbPQbouxT2i5swT9IBU/9ETgd9d0jma2Jxmku3CQcTh6WRM2K9L4LnGSlNk04ZH3ntxBBLIXoROXJTdqYedPC7Q4pdGznI89/ZjYqDMY3IsP/U+3mkctuVUwB72l9iPBCgZljLa0MQYRpLJegnqOpwj6kEv6N39UuCbLMPPKthmYsPj5XObQ7lgIOsj6k6dJBsyQJZJWHubrrgUFcepi+d3RaZR4nOW4eq0BvYwI9bhqmP/5Ftrg8ErIhVsntp0ZMh+e1W/h7efNAVsYr/7D+hMUObEeO6P8Oq+pNivqqoc4UFazLMEJDJI3piqW0ENSG5nSEk0HUWrUIj0U3j7n57P7ppA9S1k14rjub7WCGLbh2y/ADZaH7V+8PdfNjTz3q58ghOrHFFVhOieZ82ZqTGsFNa5kzzjgnIWzUZCZQ7EwSjoN/Br6oq8fD1FsnnogWnfI3Lp1G5+0RcI8c/wZLGjamoYmjOOcTQkjiGB8PB5I55QU6W8eP1+YtUtTC4ZIwqaMze9EhIoZiX4icM541GX6qb6QHBGuD01yi4RrsN7Mqozujtw0XmNSgPEBIfOQiFWRZZq1k1+eyLbr5MAT495XUewEBzVMPR6Z3w1fHQ8owxz7WVwRQ239PHAL86+EZLQVHSvcVoQEO/mgzvhzHpqqrlSjg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: R6z2mikNCZq/bMEnbiZsywvDzkt7q4q5Ey1kM1Sh5BwMvdCRgV3PIoG76gSqa3m0i/ts1DLFvZOqWjFs2lnQ0FuiHo/lADyzFaSU1nYsXOQkM2KSFV7LbnKADLh3XdbSJsQLz4cgadWyl/yEaHxfA55d0YVyppXN5UxMpfPDhTw3NFKoN9eY5x/PTkM1oGUiS45XeN6JyBctfsZENVhdVNcXlRSaThwTaickAk3AydhSyVzSsrtChmcOxfpLmUrsUk/NFTm2/7vcZCnmZ+Ll5nIbMRefPcQL4CTxk6eDT5jRusQercfucOX1f0LXr3ZATPtIxgApWy2APEKEnDwrpy6ERS4eEVaCsEWv7FYj2MY/wh2NDGv//g6GRstyg8rBNvqCwyQkFmIp4UqXP2z/J2uJo1/QQC5rNYkfFrJzEDywMKFFcq8LuDqp20a0v4RF7+NFDAxQkGEVdkqDoQkwQeZ/rDxW5kP/w5ZvHBM1jJypoYca4aPvxYxlti+5oT5m+kUE8UbYBP0fhcVYQ9TR7BG7eriWW+2JTYUWzF+xlGyr4opsXqFmzKfClbg/Ic3k2/sZros4lYIw0LTUL05Eg3+SegUJv1dX7kbU52WiSx4W03HP1NaStJ3oIYYKl2YQRnqtMkCHJT2DEcFfkZuLDJXdMblRRgZRHAdPY1nqCxi8/JdOuxBX8c9EChjLKLifllxoLwBGY0/CY/chG1IbPqobKeRowsQ1wj0j8QL0EILwRTV+wfQMoB/Kvz3MrZ3iyBtUViLHEevNhqfdBpz+a0k1UKta87Ril8gOEmKCMdr8vjbae7vw/ySjEvLFpsqfV8Ztl6Nn7Cv0bFv/d/CLkttr9n4XrCAcnle0eOhgH3BhrPSQQPraX+qFzTaZpNjAtJBQiZNEioi2JysDJ5biQHGI5iFgiwBbEJdJ2IAIlKkEJk8Mdffw+7u/qV5BXLRtv9B0rK5qnhk+Pe8czJaKTll1HiU/diEuyYjyzJJFacJO5mT6Vt30yMG+8TEgCGmdIP+rVvitUzwVvZFiopNh7OSREMRDalF/ANsHkU97MKX+21+M8jBimtLcT6+H3XGprB3jHiguY/2ULz4agUCMnNnZJB3uRBH/6PZw2UUFr5i1M6512GfdxfyJdLDI2vhmMfaAqzS1YAfdDin1NSMkYujK3vL/NgDPSSCQo5JONQcmHXhqWH8bbnNXuZQCMZkaEFJG8ZZOfMx8NV2O6736y20SWQuvcRMO/0WCP2oaYX3rmrf2NXoWOx0mP01kLlLw2Qdi6hYu6lCVSCmSqlmkbslgY/uG13nyM2k1vJxmRFc= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3b482463-922c-48fa-c8a3-08da5ae82fe8 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:51.1387 (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 13/18] avcodec/hevcdec: Pass HEVCLocalContext** via execute2 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: Oni5HaIHen0v Right now the code passes a list of ints whose entry #i is just i as opaque parameter to hls_decode_entry_wpp via execute2; said list is even constantly allocated and freed. This commit stops doing so and instead passes the list of HEVCLocalContext* instead, so that the main HEVCContext can be avoided in accessing the HEVCLocalContext. Signed-off-by: Andreas Rheinhardt --- libavcodec/hevcdec.c | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 1d0b80ea48..9d1241f293 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -2543,22 +2543,20 @@ static int hls_slice_data(HEVCContext *s) s->avctx->execute(s->avctx, hls_decode_entry, arg, ret , 1, sizeof(int)); return ret[0]; } -static int hls_decode_entry_wpp(AVCodecContext *avctxt, void *input_ctb_row, int job, int self_id) +static int hls_decode_entry_wpp(AVCodecContext *avctxt, void *hevc_lclist, + int job, int self_id) { - HEVCContext *s1 = avctxt->priv_data, *s; - HEVCLocalContext *lc; + 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 more_data = 1; - int *ctb_row_p = input_ctb_row; - int ctb_row = ctb_row_p[job]; + 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 ret; - s = s1->sList[self_id]; - lc = s->HEVClc; - if(ctb_row) { ret = init_get_bits8(&lc->gb, s->data + s->sh.offset[ctb_row - 1], s->sh.size[ctb_row - 1]); if (ret < 0) @@ -2630,16 +2628,12 @@ static int hls_slice_data_wpp(HEVCContext *s, const H2645NAL *nal) int length = nal->size; HEVCLocalContext *lc = s->HEVClc; int *ret = av_malloc_array(s->sh.num_entry_point_offsets + 1, sizeof(int)); - int *arg = av_malloc_array(s->sh.num_entry_point_offsets + 1, sizeof(int)); int64_t offset; int64_t startheader, cmpt = 0; int i, j, res = 0; - if (!ret || !arg) { - av_free(ret); - av_free(arg); + if (!ret) return AVERROR(ENOMEM); - } if (s->sh.slice_ctb_addr_rs + s->sh.num_entry_point_offsets * s->ps.sps->ctb_width >= s->ps.sps->ctb_width * s->ps.sps->ctb_height) { av_log(s->avctx, AV_LOG_ERROR, "WPP ctb addresses are wrong (%d %d %d %d)\n", @@ -2713,18 +2707,16 @@ static int hls_slice_data_wpp(HEVCContext *s, const H2645NAL *nal) ff_reset_entries(s->avctx); for (i = 0; i <= s->sh.num_entry_point_offsets; i++) { - arg[i] = i; ret[i] = 0; } if (s->ps.pps->entropy_coding_sync_enabled_flag) - s->avctx->execute2(s->avctx, hls_decode_entry_wpp, arg, ret, s->sh.num_entry_point_offsets + 1); + s->avctx->execute2(s->avctx, hls_decode_entry_wpp, s->HEVClcList, ret, s->sh.num_entry_point_offsets + 1); for (i = 0; i <= s->sh.num_entry_point_offsets; i++) res += ret[i]; error: av_free(ret); - av_free(arg); return res; } 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; From patchwork Thu Jun 30 22:29:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36572 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp621429pzh; Thu, 30 Jun 2022 15:32:39 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sxI5HkUPbvmRx2SXdP0DGWc+QTq76fw24xyRMrYcicVNWaA8xrILVRbEmAaqOGBpAmxWwV X-Received: by 2002:a17:907:7603:b0:72a:4271:5cef with SMTP id jx3-20020a170907760300b0072a42715cefmr9115496ejc.454.1656628359109; Thu, 30 Jun 2022 15:32:39 -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 hz3-20020a1709072ce300b00718cd33f793si26863186ejc.158.2022.06.30.15.32.38; Thu, 30 Jun 2022 15:32:39 -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=RVL9cKVE; 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 9E4BA68B825; Fri, 1 Jul 2022 01:30:58 +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 3CDCE68B467 for ; Fri, 1 Jul 2022 01:30:56 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=d1gJXXvJllRIcfAYzlYTNQSilB+34dQRcSQknbShn8k29iLkOxi2jFNWYXl5LNYWdl+Zs4eh9cTooKzuEGJ2V5oA1bb3GDm2R9rfRjf95v4dA8GpWm1yGQ9hmBLpbEg9T52nR+vhEk6oxl4D01qC3fPbdbMuR5oeFdY3o+RWnuagZaCwln0lJn+IOU2CQTiGSMtON+gBqEwgMHLYVtoR0lu/28APMCs+W6bD6tg7qUp+kLzr6PVUQp4Ps8JdOP7TG5NeoeXlEbqelbGLi7X9kI77S5IAKPeUAul7PlFpRz1EEi8/yfxN7g4IRpYlNeK0qKrRo+bc/MOAZS74n23fgA== 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=4mLo/Ikt134FfNLq/gb/WZRTqNdiss0O9EocMKcKUso=; b=NrTqXEFqt5qBlHpzXJeL3oWGqTWuZhvCVRUIyx8Z+r2PZK6cHkQwVWNHOS+2p52jnFEoP/ywWCBfseQqsGE2J8Fe5tFuGIL4X81I41hx9UVcP4rvpPKgXBy0jqZAsKYwmKd3TFydAwXU9VdIiMlPXqU4CsMjNC+UpG4xqCsNY8DVtjePAWxPNCBPn46TghyJFJAwGI1CBlWa6Fs5JMKCD8O1W3a7FkjRcwzD0exvBykiGHqgf2MkAmZrtqJjH3hox1ThQDH7gP5NUznOTmRSO8sTNAmeB/Xjq7W/5GEoW8A9ZJXIu4Q/5OlxEGVRxZ7u/H09ru8BYoil0AV6u4khVg== 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=4mLo/Ikt134FfNLq/gb/WZRTqNdiss0O9EocMKcKUso=; b=RVL9cKVEC+UXHy2JhqeiqcpxJSPMKPpNUk0LDFOLieGI21ylxpunFqWV8K7Q0F7K7K21avCDssNJsr/QagvvHNLoKCzxWIecvku8AUXMZAsUAKp2OzbrgPIA3JqRAfrkZMmKfsj9WyZxLuI/jk3viIJfLsVmtR8t1fw6/9P+QQ9K4KRiB8MgPYZqPO4OjdEbppB7rMEq1gfe4nq8NGXYzsUB4HHn2sokewVSeD7iEwpmKDDrYkaT7V1/ziineuBJnb4fOK9sXOj5mU1ubLSd9kO7aiI5YGHjKtaNvHNdZiVcQe3Nr+drK/JiYBSZh+81Da1oJZp6NrQa6jjfhbFunQ== 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:55 +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:55 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Jul 2022 00:29:46 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [o2Oq7D5RD9xu0EV73huPQUt/rVQykKxK] 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-14-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b55111c0-d769-4761-2a1e-08da5ae8325e X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNXqMBxJfDcJWCkSlr5voV0a48K7zJ339QLXAxc5N5CdRQYGLw43t0VPidPHGoKNAjRwAsb60HuICh2/hBmNKG153J9yxI8lpuWsxqld5Kz1Va6dbaLTDqrb7RZHJpqDlJ9WvZh/BSu0v8EiBCLrsAim1ejxlNWMRvv6uJrubAYMG6VdI7420RJKi6+MMzZc4dyCJ1/KxaLYYMEicJrmpPMn7Eo4AqsZQXlflXeul4wbSSyqVCRc6ySAX/ydy45LJYSENeqcLPcnW95Gle/VQULtnA+jn8xmoKBd37UG4OCKAMv5qSlL7TWaWfVKVX7QCEh7TeevOEANIYmozAx2WOUXzEi6hi+U7yIyzCYacZkEOL4dknv4n9i/gMaoMUHr4mU6Pf1Y/EWfHIOU5g705XT91IjlaQ1ewXreBnR/PbPj3AxVXALzcc5lrCjeh4uWtgIkOjv1HF9KV29Nc7qi4FpbOMwhejci1cYqnPdc2woudEMzURmpVVffTpxGGjvzRHJoz54aLk370axAyIDX+fCkEtHx/ojVYxzjNYHxO/8e9wfXFtQcDBZc4a370qLX/IrfnNDAwRo/FqNzqmvUIhct+mVz7K1g9DYFWxpeD8ktM/UdbIyc5HWASgdAm23yDSxqgFKRcAyTpHPR7ayHpqpuPA6hfgYOj5Qj4GT5pxhkBkwYV4C6bz0N1SLyPB0kf3dkgEEeB6V8OEE4lm7fRl19U7ogPUpT2+M= X-MS-TrafficTypeDiagnostic: DB3PR0102MB3546:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: M8ySRRva8XokwrWCiyaQwNhHS1iq5YrQg4RMTVNYW0CA47Wy7xyY5pTuQfSktSbFei9o6PtAyjVIyMe3MRlOMEiz6T2MabWfIaE3o3b44y22MlccpEiDOmWqF9M3q245WNlBNIhpEWns8OP3uEDbYCVRqBANfToUanF5c7imJr+qZEaVS+JI/+J2fvvz4Na2upplQRf50o8dwSVrimfVBkqnjmlCc/2vtrmISV2HYbRf63q6qCDds73MdaBsBn5DJK5mfcbpFRJHUwU1ybVW7EtszxaFaqmixWA7t9pmfnlM1/o/DEIB3zYxIa1cTorQA8SuVMEdFB7XjHo3nQcIPnsNUdaxQ7+GEFGaa9hGNMp9zJE6lEpyCRxSECaf4NDsvhIAB7Ow3vLoUvWQy38Ytsq4hvIoqkzNrYbyq8aGFj5Z4XLvda9YfcwbIdVqKYQ0+RlsafTsWfEmGLWXpPbvEcNy0vAbXNUVCkJPb0STxx3zSmRxniOFoa8oxWJY4XzxkNTrV/XsxASeYIi1/EUIS4sqTj/1rEA/K2YcR0C7rGaN4zLO24NxQ2clnDE+gC3dbD5jD3ZxdS/MgoE2LnubwJmJMzaQB8qZMV7kGv6/3GV5kdFopwgaS6x8GOy4ymJbZ0mUegIDTtb8qV1t3pzy0AW7WumkM8Ex7ENAV22GLqnxzYWdEBMy9NdYQwl8DcnPROR+LTirBbLkM0IF12dFCA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: d3ef5SjZbRNqGyA7E9rNLzxh+lmO+P8mffsq/z2i/3rNfYrOyaTOt6yUyLFHGy9ff2tDVO70et3GhRd64EarXuBR34m+1Q2yJbGRFWIU+r6Lu/uTQCrUBkfbREivYGf3kHbwtYPqcY5fYrQLmnEqZxxGHB5aCCm0fTl/tR/EvQ37cFoEyHy0Sz5LK6+3wuv8R/qVb00Lb2M+T0uqnTo7ucddqF628Zkpzh2KohvNgryxa8qN6Daa24C10c7GuepbqHCmO6l8kafs6HNv0BZAzREgid+ArT3dZecuIFNVX76wpWqf6JFySE95De0ZzSbAEYw7jxOcgNzJVhe4hOD/TF/yAngDzYyzQmlCna2MWJz5kY2J4eostsmm0WJ6FHW9GeC8L5oPHv4xBO74L8HcxElty/wYCoTAOD2k5JJsnGaMNLT0AmO3EB4/X2Q7eTavvSYKXNxOKL5EMsl1XspDSXaPfJlWJjMG2rcIzB+3EQwcUbjVAhewEnWPiWbxqB8Wh2ybwB/d9GNshIzL5AStMzm26LNJAxSjJ1AuP7bl4qX35iPHEs2FyDg04FIPkrhxb1vHftC2xR7JAjbCQlMquvkgWoJ3kRZprcIokoYtdyCd0+y7N2osvTQ02HLiSSHDSh0644oR+1z8SxFX4I9Y+eCewMrZx/B7G7do3yZ92XBK7vkoSjwmO9AavqMl/9pTe2+v2GsBMlY8/jFNjPXwsIXkI3m2yHDtwoMrrMtWqIanYkXzuRZKv7PqEcaQjnpjyp6VojrMnRwcIeHzIeCZTVNBzk/dZt+4z7D68sbGqyWHq/7jh9CrmHL7+c/FZ1SNL6r3doyjoPJ0AEuB5X+Bdgrr+iweyTkC2mKIfaoL2SZpwLFXMpbVNW5wQWdNE9ybzqWDRg29l5lFyGkmb2ym3tYtdYy3eI8qwn/ZhmltGSclaV46zlKIoOCMvhanoR+H3lALy0CtvsaCqiEkIcv7luZhp4BTEm0Eab2mckpyth4pj4PimL/JCbBRVszJ8m4QPDPWC07/lztfrJGFigMc+4hxfMHmkXFWYaHgrT4TYblH59pq5xaxOBavuf9T870FHeMltRbm3AsfwDu+CkQEV346BUjYNDVlp8a7530SQQLa3E0BesyUERQneXPqWhI/O7JyUKs4AJMeEULBp76qSa+q99/E8cAgbVaXCh/BIL8aPlL88Ky5nPK1i2tEZlRZoALSVj3rJi/5cHA8sx+K2emfwwGaHZrpHFBV4tCe1K4byO6VQPUq4G2YCfRyuNeaTRSleYhI3SID7wqoBc2Yl6WNDvOgK8lWKG/JertTx4Y= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b55111c0-d769-4761-2a1e-08da5ae8325e 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:55.3415 (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 15/18] avcodec/hevcdec: Check allocation 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: NuZqEHG6tJaM Also postpone it after the checks for invalid input. Signed-off-by: Andreas Rheinhardt --- libavcodec/hevcdec.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 048fcc76b4..5215f06e31 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -2645,8 +2645,6 @@ static int hls_slice_data_wpp(HEVCContext *s, const H2645NAL *nal) goto error; } - ff_alloc_entries(s->avctx, s->sh.num_entry_point_offsets + 1); - for (i = 1; i < s->threads_number; i++) { if (s->HEVClcList[i]) continue; @@ -2700,6 +2698,9 @@ static int hls_slice_data_wpp(HEVCContext *s, const H2645NAL *nal) } atomic_store(&s->wpp_err, 0); + res = ff_alloc_entries(s->avctx, s->sh.num_entry_point_offsets + 1); + if (res < 0) + goto error; ff_reset_entries(s->avctx); for (i = 0; i <= s->sh.num_entry_point_offsets; i++) { From patchwork Thu Jun 30 22:29:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36573 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp621528pzh; Thu, 30 Jun 2022 15:32:48 -0700 (PDT) X-Google-Smtp-Source: AGRyM1trsSEjGLXhTGCxt4XdGkApj0ymZsaMwlc37cILrz0EyN4QZxrsZa90YQiLIn1GwwQWQV6q X-Received: by 2002:a05:6402:400a:b0:437:7686:647d with SMTP id d10-20020a056402400a00b004377686647dmr14610760eda.422.1656628368819; Thu, 30 Jun 2022 15:32:48 -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 j10-20020a05640211ca00b0043583429934si3402694edw.565.2022.06.30.15.32.48; Thu, 30 Jun 2022 15:32:48 -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=m8DYzr+0; 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 9631F68B7C7; Fri, 1 Jul 2022 01:31:00 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2075.outbound.protection.outlook.com [40.92.91.75]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C343868B668 for ; Fri, 1 Jul 2022 01:30:58 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OeickTcJMCOzicNE8KjkyJXa1nDvIssPmojZCN9xjJKfaiUPEdOsCpREUB5ZuaGcfepjzu/ZDUVLfsNT3gjlW6Zq/2D2eFZpwEVz0OffZ6gUt1vj5hapxKkDxRTK+r3bcUC8dCIL4lXQxfcoNT2YW5NyWiGoH+M8G0NQ5JkcxXAT59DjBo32GIFyN2Kpvdj8ijfjj8VAjpuRKG3uHN/nD8UwOlXm+abhCKyJrgpPJoBjsAoSW0X+MvRVilbjquA2u4IVoQK1JeMDXDbTSl4sWPe+IBz3i3NQxQZMCaeSYTQ9kvHfXsPLdh0TUXin3eWEl2KomOyL7qUwmwH6mkJ/fA== 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=cu2/wz3TLTmbjhLl6RyqCIRy+sIxnQ0iag4FmtHHowY=; b=JU89D1j4+Ki0rQHXhCdkPNSsIszZ+p/dIiPjlS1E02b66OEiJrzEhYjv3UHOgLxh9aoal73ukRZ/ox1zZbOLjrv9aE0Ezzb6UvyapVxhnFliZLGEx9v723vg9Nd8DY9keGgWRnqC/nB0sPVQFsNd5YOtmtJg0kORNue+QmTslXVzmOmV01RxPTAq8M8bHEGHLm2csu+UfBaukmyDHJ10Sp+iMaf0NKPuLFulv8lhB2SEgfqJz/N34JpfQ7wfQhsd41QHWYKHlAxSOBNR41mGNKCtHCMQGXT6yOBLHEKYyDTGeke4eM9P/cc5VVwX7itsDFOD5gAVbP1Te5Xz/3Hjlw== 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=cu2/wz3TLTmbjhLl6RyqCIRy+sIxnQ0iag4FmtHHowY=; b=m8DYzr+0DjqtD0JUgqI5f8eWq3ghT+cfb3MpEDHk8wHsOqK4vJz96LNmm+GtkF+YGZ1eeEPEwovtxNyGCOXIOS9Yp54WIkvAMz3u5NcDgFuMO8iGHPUdNAuUwnBS+Ft7ezfnQgRbsfDceBGskC/ETDgfZadymzgCBd/zl9qj5yn1zsHX/8sJZHGWEu1WgUQkgqTIjmng63a24kDkE0eJG/ZPIqwb8+FUARz9b0cv/4sAmqwZFaPzdLqniOFmw1ap//ZNkJfjisysbE1xYDDLXF+GestvObZxWjF3uWwXQSd1t2Ed8d0pZXCy8jddCFbiVbw8sSQIgVXsFA09EgG4kQ== 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:57 +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:56 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Jul 2022 00:29:47 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [yk/lxnGqgj/VeygWuFZWRgtQp3F5d/DD] 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-15-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3cb96371-a204-40e2-b9df-08da5ae83334 X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNXqMBxJfDcJWCkSlr5voV0aFL5m7pVkIuCUel2RDxeMLPUcvjqNSf6/oes+n79Sg9nB/TLbWC5oVC7jm58SJJHjIYm3UhsBgp2+9DKDvD1dCEdZosNdvpBiF0P0dbGJEoYfYTb5IYlsM97EI21eNJXgVvFqnkuOlJ6YP1sI1e26wES4jpQCmr3O5C/Y+2kDT/pPwKEujz6fk7jP0L4tHpbUF+a/fRFKqX5GN85EO1lm5rXntbJJaiI/Mo1hj4jnim20YnnZWh2ttYix1BGAJ7NysW/zyHwb3NQv2xRbl6AlMzZedd8f9hvw8a6UeuxopCjqntBHcupX3JTySACzQaBaIvJ1378UfTn28JP5Hn0rj+/FMH/BBgpoeffhgcPqY1XDNx0c26JFx/IHJ3qWSvysZ2lpzdJKIsDpBZ9owvnIyMNLfvqrwijr4rEAwUrLvdIFrVZmC6SDG/+5f1Fs9IQCYpO0sSrcXvwJjwa6/irVd4kN3E48zk0J+b9yg29imzN8/6ri4sPBgFfvrCXZUupzTvX6Zbq91rDBuwkFVOYdd3pgBI//5PjIl5xHJmvgoNA9vsHixFblilKZZ3ik/QcbjaqXayMlGl6h7km+RqmYtm5twYd7O4SPWP8eSEIG8LcgHFNLz+N2klv3KOoDgCWaOa4sRq1CB/7Bt5064UKdna7DvWaEK5aOwyYEqwVHDwQ4LG9JkUdQ5Z0SFnBmI5KbA9PamWrkN/A= X-MS-TrafficTypeDiagnostic: DB3PR0102MB3546:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NIYfrwiB2YqxjJFm+ZnmiffRuMI7IGiAhDn+GsaUb0QgJE3LrV0j64WrkNYTc8Ps8PSQ1iCPxxuqRl2FZ7Cz7cHZG/db1KJaRVlvMw2k6rZrj28jXym+4NozdCfiBFCVvB0jX2BBoAyY/ra4I38/VnLozK6wZXrobnTLHxIHDzxegm1CONBn5eOP0KgwbDzo4ExKUO7riTjEKgYXDXokxa+YxCQu1O3eCaxj171R8pY6BaAnyWGgr9mjjj9jAX8DZH7Ta6QpFGuFgj27p363KiyIPWcZTKChiIql0+FAsehcsnDlPLytttdFMIGinreMa5AlbLT9euvG/CgqVKcRGiQK31lBOJNtzqVn49dz5gd513OOZCQgLm8Fp6Ql332toVenWBmh0TBsSBIedT0ks+jCNVWLSfj2XUHd3OKr8xNvqKwMqphcJyzBLL+qCRAz/m3ja6rkm9PNcEi1Q+C+xPWjNpe8yOTettKpeUXOJjw2OZAwMR4TiE3+ujA4gabfqNX7DumRExeyJcbtJ6mocmeNJVXYTAbVN5aWrzhzepzr6mErX0+9TpwJ0p6Q6ckkuabx4oMsTbDkH+zw7nofE19e2Guyc1uCz8K0VCr4Gqk+mTNAEhVpzYDqc6FKmsF6K5gLvgpIDoGreUAN6nbp7QwDVuxIT4vpLtC74dJdQA9sdqGXewzkxhLzFKpGTnx3FP0VbFupSCM0/xh0Rr04Lg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 8raNQB8GlD6/rNOsPRehqOAtwPTE4Ss+B0PdmR83TE2nbYXe32f6qI/5eKxp7s2JPq4Y700E8jnMnOZtxEHjTxR1GMMDMjOMysmnXWwu1wqkgcdgVDfV8Cu5q2y33ebbRXxaNwyHqM+KZQ62IWBGgw2u5SgOY7RSnzI0oyTSjv/arri/KGvazSpBSmI+fr8WJAUn5iLs75REot8Nxdq8rMhlT2wfkfP1fqKqdkKZuyTDqjsL/PqIcx1MYfRjg9iRcB1zomgSCjh+6YrSTW3gf1NQLDWUeBuq7z3m5LcG8akm+N8zt9W4gYDH8e7YcZVgfH9eKjdmm+TNbfv9+ehqFlqMywVSaba4Qnq6HUyTZ67jUSa0vTXK88brAwYZxKZOCFZiZ5H2y2Q1+ddc0XEV3l32a0UOeySqyKRzLjU0wFWIWtuJOS+i9qFlmPqoOCpAF9xvA0Xd7Win1n1ZnTyu2POJFkmDRxIJc6qZo+mN56ibyqbqdYie2nLctQUAbQnH7BNdP4uOyHsQqd42myK0oEEfFUy0etOrylPWmPePFXk07QC9eIC1ShWajLzS9Y4EZ4Sfd/WMxvaxMbLAWqX2DevCzj713Ln2jI6F3AQwX3x/f0P6MBSja1nZnluJvBq/QQzUpqDGtmEZ/yXWzBdBNJGClg0h0655pyYRz+KkCYP6H4hK5zy3dXCe2qpfLCjkAlLx2lgnKhgkMRjSy2fkTnYfucfejvPCHvHeaaPITcfDbn9E2ajGbSTkeNZG+UbijQAmCgVBMMEcNE8MYERfqYglPhgcxAgcfiT2pAHvOS0btVNUyVCk1Q1DnG/wLe9dDh3eNAWV2Vq3EyGaj2BBoOb6pvNk4bk0sEahj55aoqXcdbtC+ySSyOwCdUroBiToe5fkGpHan44uOiaxY6Zqb2+6N/tkiuDUTyipnzbEJVV8gOu04bE4Nw2NAwIHR58zZ5UER50vVFsKzKisuVHQDM/cb1Rtiilo/9g82S6bHWSiRiwkEmC6TlOF+joQkRecjeix+gDjf0z3QNRzTVVnJmHjEkAR3r+m/fhMMqiKq+9r1ZWmd6FlTegTofZQXsdmLJaUybteGBewHGPeJes9EhS0ORMPk44rj2tzzFGwXdQ9aNiy+NH+101HYHcKV4jsPz73MUokFhnFUC4Wi5Wes/8KLO7L0fw3QGNOnHoik2svgC1puh1T34hn5bNkhb58LOCucSbc8LBct3rJRIF4mCH2hmwi2VQ26ceZif/0X16hFhB07oMXt6arjbUIyiczaN/I/RmHIRQYpvNnowRyaDHTvnI/XH0tZGsjWsHcQew= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3cb96371-a204-40e2-b9df-08da5ae83334 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:56.6696 (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 16/18] avcodec/pthread_slice: Combine allocating and zeroing entries 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: /awFYccQIYTK Actually, ff_slice_thread_allocz_entries() always already allocates zeroed entries, so ff_reset_entries() was already unnecessary. Make this more clear by renaming it to ff_slice_thread_allocz_entries(). Signed-off-by: Andreas Rheinhardt --- libavcodec/hevcdec.c | 3 +-- libavcodec/pthread_slice.c | 8 +------- libavcodec/thread.h | 3 +-- libavcodec/utils.c | 6 +----- 4 files changed, 4 insertions(+), 16 deletions(-) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 5215f06e31..e2568c04c0 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -2698,10 +2698,9 @@ static int hls_slice_data_wpp(HEVCContext *s, const H2645NAL *nal) } atomic_store(&s->wpp_err, 0); - res = ff_alloc_entries(s->avctx, s->sh.num_entry_point_offsets + 1); + res = ff_slice_thread_allocz_entries(s->avctx, s->sh.num_entry_point_offsets + 1); if (res < 0) goto error; - ff_reset_entries(s->avctx); for (i = 0; i <= s->sh.num_entry_point_offsets; i++) { ret[i] = 0; diff --git a/libavcodec/pthread_slice.c b/libavcodec/pthread_slice.c index e34116116d..756cc59dbf 100644 --- a/libavcodec/pthread_slice.c +++ b/libavcodec/pthread_slice.c @@ -237,7 +237,7 @@ void ff_thread_await_progress2(AVCodecContext *avctx, int field, int thread, int pthread_mutex_unlock(&progress->mutex); } -int ff_alloc_entries(AVCodecContext *avctx, int count) +int ff_slice_thread_allocz_entries(AVCodecContext *avctx, int count) { if (avctx->active_thread_type & FF_THREAD_SLICE) { SliceThreadContext *p = avctx->internal->thread_ctx; @@ -256,9 +256,3 @@ int ff_alloc_entries(AVCodecContext *avctx, int count) return 0; } - -void ff_reset_entries(AVCodecContext *avctx) -{ - SliceThreadContext *p = avctx->internal->thread_ctx; - memset(p->entries, 0, p->entries_count * sizeof(int)); -} diff --git a/libavcodec/thread.h b/libavcodec/thread.h index 92cbd927f1..d5673f25ea 100644 --- a/libavcodec/thread.h +++ b/libavcodec/thread.h @@ -104,8 +104,7 @@ int ff_slice_thread_execute_with_mainfunc(AVCodecContext *avctx, int (*action_func2)(AVCodecContext *c, void *arg, int jobnr, int threadnr), int (*main_func)(AVCodecContext *c), void *arg, int *ret, int job_count); void ff_thread_free(AVCodecContext *s); -int ff_alloc_entries(AVCodecContext *avctx, int count); -void ff_reset_entries(AVCodecContext *avctx); +int ff_slice_thread_allocz_entries(AVCodecContext *avctx, int count); int ff_slice_thread_init_progress(AVCodecContext *avctx); void ff_thread_report_progress2(AVCodecContext *avctx, int field, int thread, int n); void ff_thread_await_progress2(AVCodecContext *avctx, int field, int thread, int shift); diff --git a/libavcodec/utils.c b/libavcodec/utils.c index f78475d0ad..cae61d80ff 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -963,15 +963,11 @@ int ff_slice_thread_init_progress(AVCodecContext *avctx) return 0; } -int ff_alloc_entries(AVCodecContext *avctx, int count) +int ff_slice_thread_allocz_entries(AVCodecContext *avctx, int count) { return 0; } -void ff_reset_entries(AVCodecContext *avctx) -{ -} - void ff_thread_await_progress2(AVCodecContext *avctx, int field, int thread, int shift) { } From patchwork Thu Jun 30 22:29: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: 36574 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp621626pzh; Thu, 30 Jun 2022 15:32:59 -0700 (PDT) X-Google-Smtp-Source: AGRyM1srzG3mN7mkFcxSqey3ZOc6LARsC8wBL1rOci2ohllDnfGjY5HhhmaHe66wr/des7QK3Grs X-Received: by 2002:a05:6402:524c:b0:437:8bb6:7e89 with SMTP id t12-20020a056402524c00b004378bb67e89mr14331162edd.153.1656628378958; Thu, 30 Jun 2022 15:32:58 -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 i5-20020a170906a28500b0070ed13d358fsi22706558ejz.194.2022.06.30.15.32.58; Thu, 30 Jun 2022 15:32:58 -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=RNs3Nz53; 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 8E43168B845; Fri, 1 Jul 2022 01:31:01 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2075.outbound.protection.outlook.com [40.92.91.75]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DF4D968B82B for ; Fri, 1 Jul 2022 01:30:58 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FAIfs19/Rc1612kEERzFgsFS7cZuVsx3rhL4pGrFPJausX1f5qU/h8pugScnzxP9KaJY8zNua9LQ8uxDVN8q5ritxekfu8PtQqqf5Er9M9k5wxjK0gpB3WPeGgWOawFMpWODbuUYbI3uETeDY81Vk9BhgzHDYlWDR8X1PDN62t62m5WIIszDVQ75C3P9YGTreIZndrydCt+YB3AQ6CuQSVRhoQnf2y15vOpbXB/9OsksJvfrEUvcU7fRfVzwOe75Z58OyXJGEPJnEghkq8IafhF3CMjsn8b6JLCFKg34RH3ikLi++I9nFsalOiHtskJB0XD2OJhCRaRcxAzQyQB9Pw== 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=poV7Evy/Pmbrbx51dpVyKhi120lY/zK8eJCMLUjmB6E=; b=LSMYWWsn5uoC7RyYZs6IYXNh7l4ipkM4+r9iKIIjWaoaVaqYJVo5tnSAv4Cknxszag4Hskf1ANMZ8I8sGRMH5d1ghlYwDs6vNnd36iDR2yoZtF/QY+hAWqsptcUOsX0IfaUo9p5+nQwC8wNCXImIkRTaN+6yNveMDcffHBruBWhSQWVdOWHJtKYYJA6MgNb5NBiObON0yKBNFIyD7jLRpFH9to+pbGVo/bSPTeRUNaj9GAD4/Nrl3cj3SXCeKMPfPhuMmVhmonl5oRcJV0gBTjfEQRWvj0G9KJD1JHIfI0cbQtnTzvq4cGeVQgYcio2bX3UE7fXNlXtl0O+cDu2aJw== 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=poV7Evy/Pmbrbx51dpVyKhi120lY/zK8eJCMLUjmB6E=; b=RNs3Nz53YX1x5Eik2ZTZz5DVCrqw5Bh7EMD5rW0stxDky+76NFetz2olaonSOv/p/p6p8xxv2nERnDiw++zWNsBLbX1IUaUlkdyEw4JKctWXj65gMIrt9aHfAXtnwVmF/jgRi6jcfWhismnhFQFAibMIOzb4+4L5+HOoc3i8T89fqzbs69VbcjGQcZAlJttIkWIXZKZOpVl5TzCaST2LG2zLb7rqxOKyClQWmrssBhitJRssHUhKIbIOLx7kQB7Sn6AksWaD34LKSS5vZgL9bZJldSv2boslP1uxlVswd86VGDGujZfBB5abBE1dUc7sSX+PNI6KDCs+13CJoFe8pg== 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:58 +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:58 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Jul 2022 00:29:48 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [v1Rr19vl74sYJfQ9glkk3Lx7gpy8iNRd] 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-16-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 80356c7d-0560-4d59-7090-08da5ae83412 X-MS-Exchange-SLBlob-MailProps: q+fD6XS3/UIsx7KfB5fXwX9/lr2btQgADgUguqSA1wEqv3ON8tZfQHIur5ljSx78ydjhE5n/65LJT0FfpI4CsPPMzFrmGAMqSnnKZR6esVY+6U69AhPpQP1/AUmTt2Mpfa5O5oNIytCW9af9cGS094i1jUuk4KTUI+rPYi/qYYNhrVnUt8voAGdsKD55t4dlAwTZEgNQ6PHMzA8wpAb0PslusYFp96U92u/sx+oJlWSOcjXU7a2sHlyRtfeayE7f4QhWjPr2mNYHw3mmQufa+Lr2CW0+kbHWWUbgmYVGnc6R1FqJRX8XO0TgxC/4dY/KtPsn78oDWYggTc1h9TrsgVMOgtZRxLCTk8K8QztSv/vNzx6IswRDNP1mEd/t/cC4I8dhX17KV40GuPxrGOZtMsfetJ8ltBItmxA4TzhT10NjPTWpFdC8023uwflziVMloW+Gs5C+yP6d75SwB12NawnHea6IY5yTU6/1YOduJugKBQKkakd1T2spq3zzYJDamDrPgCD2YdXLF/pTbS7+pnc3H93oEuOwOgPS3fwxfwrE0ZTV9Br3TPKr51bKULNBmDy3bZ8Hi+5ZvCUJq+d1RqEpbgoCfaAzKjdX4e3QteTaO1Kt90vIoPLM+nVCbzr5rhdV/dvaN1Usf6YT6lXPNBgal476z164SutHpDS8jUtnGFsjspAEyLZGSDhMVa1x080x15HYfeBel02+mFcVPw== X-MS-TrafficTypeDiagnostic: DB3PR0102MB3546:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: O/Y92kKGVYe9Y1Tk+IeWKpE2hmH0BxsUqw8FEshWb1+bWSTnDit+6m+hpcVCFMQHpsy+S/DnRdtlFs+4WpMtMcubQntxjRL2r7bTPqr+0z5bkjqaH22rD4QNhjekl4JKB+PZhTZjxlWL3MVeTi/yTptV2YAkfWcefWA4dLHu0gRqjyFCHpKzxZ7Fryb1bCtY0/l+oMSmDuXXtAMdvXmvMK7C35HiHmVsiKDFse5MM7BsTbSMghw5Cxc9f3bmFbXZ6Q61tkf/+aoRRXP7ryRJkWMkmg61wqlAFikHlmKwUqQcBSnYYnG40+sxTOCnL8WtpIuQ8GnTeZabz8cYNjUKBllD6Nr30RlA1EtifRsGe9sqYopvOWMesy76iWWenNTjBptUjRxw+nlJpIwE09uYROVxPPI4G56BtbjiO+UIY6b61bRGoM8OlUOZWAbU0/DxgUY7y8BsqgLKe/kRSq19S9NB8DHEUO/3CqiC6fofLngWs3pDXLqoCkx3p7gog576O+ajBLXnuB5G4jXRtM2aayXgJ4+KkMmAXuB9DPyjzW4AbQ8LK3nUxruZQ1vyT7EPG4Y1Y5BqXLORSHJ2CiMUQ4EKmxROvRPU6A7Er4I1DOnfIZu0TQjTIRRVacfVstzGbzhQVtSFyoyHsHi7ElTGA/i6cwH9ihLiwUEAUfTYm+Zs4TITOWH0E521QLtwADz2sgAT67QJ3AkJysJU/4qAXQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: aHh2vrXVQWXJxjEwhiO190GwOeqCh2jTEQP6nYy2fpsGWQW67iT6fQhGtKzgf3U64aTNOMd06zecrO9OM05CFLrnOJL4Zpn6V9jfil9vLgRaBN8DeXmOOAWa5w+mVn29hvwrclgXcYyfba0UNXz4MxAhPCT03djxxnrdyLZabh9PBU5F/kWnWb/03/qg4KIsS3/8dEAhLgumRrNK49PFt0fgsESb+JNjHTaoTBkyaEMcMa2bzhIMeJc7chb/nOHnSCIgZQxzQK+kcPe+RgllN+tGB2uYB3G4p4oquEpY02/E5Q4L5DD6AlzhjXEWAfCqA0TahNSuBRsNeS+htzNhQTdNLutwVmqg9SwGnIMp+BigDkmoOwFEk65wfYyyB/kCZbQG8pEkCuOTmvOslUIjoR3dMv4NDgNMR3VxCqYC8Lre1e4r/E2I2NPhgyLLfWh8nah9TpQ4JNjM3V4+D9uCD6Nj5/Xjf0BjEjMQjy0nlEeZFXdapz8PSgDjItH/nsrzwgwJWYnfzhgAPv5Hl9LfHoW90riL4Dn46CjraxfczigueGyXvuNXuxUNZRu3R1skvyp4C2u9jb8Kb5lMoH2FFM0+voLPhCLd4tKvCJqu/QqAyRA2BcG2A+qkQKCeKarHHIEbs8Ph0b4sKpAvZNVoTPBKQrEgi/1SZHQfRupbdK2Lw+LTgF0z7zAvXvHUoAmDv0Hnvb92ThC1DLR9lnBVFtVSC31p6LwTnKojO3ntDxelSfXCbQwAxpiL3/5Q2HNwMS2Xzgt0yCnwOMZzUmK6/PLsGlnmtAyIkSRPoxPnVX8tdbyxwQVbBjYPNiSPUXJsqKA/8NnRJJvLOq7IrW0pVicOc9m+IB95+1RcWWzKuH6AErNIdKqjaOny2UQnV9G/s600XnMNW6qZ09Gctc6U7iCXW9kvCca0xJwhH1pUPMNXwiYKtP7+uK3cEhOE2BxoFRKZuDSYcuL1LBxHWAvHxUneMo39NsZa+4W9o9GIaATSKuR0XKK2HZDb/y8cyOabVhUwmm2PjwoMqzFatJYQ/2Fkk778u2Ix8EhJ0KjS+t+ChFZ14r7L26O6ob73mT8cppr7DNX1trBwEvmlnZNsGJuUQ8o3AmETdlQoHWnPks6SIuqFoOphMryMq79O1Z4FWRlWlsgIZk3bk7W8OpW+9m1xbVJ4Sw+NIqslLCzLCRrpjGw7W5IHsW/TkCuqNf84dI1b+RxRXPB7CX1MBncorzpSWQdBGbrMP+WamYIa3MgogAiTBVaf71g6rkdCYJAqrtz0qaVInwceKonbXpqsfOZJXhQ5Nv/tQ3U1oDHgaQI= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 80356c7d-0560-4d59-7090-08da5ae83412 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:58.1851 (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 17/18] avcodec/pthread_slice: Reuse buffer if possible 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: QjGOLTmETneS Signed-off-by: Andreas Rheinhardt --- libavcodec/pthread_slice.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libavcodec/pthread_slice.c b/libavcodec/pthread_slice.c index 756cc59dbf..a4d31c6f4d 100644 --- a/libavcodec/pthread_slice.c +++ b/libavcodec/pthread_slice.c @@ -242,9 +242,11 @@ int ff_slice_thread_allocz_entries(AVCodecContext *avctx, int count) if (avctx->active_thread_type & FF_THREAD_SLICE) { SliceThreadContext *p = avctx->internal->thread_ctx; - if (p->entries) { - av_freep(&p->entries); + if (p->entries_count == count) { + memset(p->entries, 0, p->entries_count * sizeof(*p->entries)); + return 0; } + av_freep(&p->entries); p->entries = av_calloc(count, sizeof(*p->entries)); if (!p->entries) { From patchwork Thu Jun 30 22:29:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36575 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp621734pzh; Thu, 30 Jun 2022 15:33:08 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vkaKeD068uWmN7MndnYvALB9nYKgFNHCG3sN1vVwV5MnTw/CYk96ajq+zmkLsE2r5BrFKD X-Received: by 2002:a05:6402:3808:b0:435:5a6c:9dd9 with SMTP id es8-20020a056402380800b004355a6c9dd9mr14710942edb.368.1656628388814; Thu, 30 Jun 2022 15:33:08 -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 fy12-20020a1709069f0c00b0072641df5423si5093590ejc.868.2022.06.30.15.33.08; Thu, 30 Jun 2022 15:33:08 -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=SXpcBEwo; 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 9C4F968B840; Fri, 1 Jul 2022 01:31:03 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2023.outbound.protection.outlook.com [40.92.91.23]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 85D7968B844 for ; Fri, 1 Jul 2022 01:31:01 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=a3RY/Q1JPcXU0Zq6rfIZqFk+HkpLLKk5opaSNrw+HAVg6swBRakEPjxhL+N79k7FbN9BqmfSXKc9jR9H6SlaHR89C1fHpQhxnSo9OTymyvJzIv3IOFnOEjy6NdIs+Om8s+B0535Ht6KVxBsTLX6HnPHyx6bTmn3e8uzdJy8RTBJu461pUBf+AnkZkvw1XMQELqh25vQpRgjH2opyan7yMd3Hy+DeG9b7nCiVvCpf6T4yqRj0G6WK/a+Vgk63YUseWAVHGstd96tWAjn0uCA/owvUZZ4Wbujwj3usMWaTbkqFQtfxJKnoUUirb2xLOCCWUKTlFpRa+owzJ63XO9AM3Q== 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=RisBzPndG6un2Vv8SYCDf3Tf7Xy571WxYGLTy05+dKw=; b=bCAVDmrg2qj4yquULxTRwj1p7BNtDE1+Pin3wYk5wOscHqTPn6WxNYXX5HtwyNifmyNLpxv3pakn8sNZRWSRI7PPONCeoH1LqCJC1V6VgyHa9dF1gxi9IwKZIoialBFClH4R4FGCOY7LAUyFEbRWrT+bzg1kgLBU3epV6Ilr6TqhjtCa0356Wz0RE5aoCsOmUMPQ1BC4jxk/KOVwd0y2EPD4Mqy3NELGN9+nB0sQl1R0si3PPfRQW7PdT8hgZZklL4ZPHIapOdkuu0IsOsSkGUt0sGs7/a+7YVonAZLMfH/NUxpcXdhCUFgxPad8upOdLaEIZrYKPMMsAKw8j18trA== 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=RisBzPndG6un2Vv8SYCDf3Tf7Xy571WxYGLTy05+dKw=; b=SXpcBEwos9xeJdg9h0kQmkrjyLe+K5tuFNifjrPAPNfNRkItcH7sHe76/D03GLYurlNlUYFFpvAPTGWC4Ma6w/AUFou2370NCXF0BlYt83A+Vvfh+KIFwV9Zy5ZIg8+Cb7ufZ2i24vfx9jLKgwdcxuXUsN0UzMoTQ6qz8xCyDORn+88koXRD+lIBa9/3URkkpF/k67oSzt+gwf16ZEQeF8u3YroUrgQCsD2at+B+SBNKh3mxUcikpIlfJn3io5iK40/N1UvE4zV6SVCmMweJVgJG1WcbOWyn4VZi637elPI+7R24lt79w4QYwZv7RpzI8uHLCOr4+D2xG8w0pIxaag== 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:31:00 +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:31:00 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Jul 2022 00:29:49 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [Fx29LO3Sz4zNjSbc3Iq2u7xVwveQ6ABh] 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-17-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 50590405-b4b4-407e-0cdd-08da5ae83559 X-MS-Exchange-SLBlob-MailProps: q+fD6XS3/UIsx7KfB5fXwX9/lr2btQgAGxVon1TX1GDB4a8MdTSSaG1BX7QHykUn0Eb7cFcEETYFGB637R2HqgABhzlN6bgldgSJvcAbNRkrXEWCuvMk3YIoQOPkEVwyyMRma6vdoG0tM/FblHsgIpNniSIxM6f3C2xGjgDSoxO3wVcBEh0fdLPpVW8fVtl3DQYtGCDvDRnKKG0xX4iKSzOFR0cpLvgPde/TuHT7UShOZ0KtknULPTyuY5TlZFE61+4Ck85JYaUPNhCJq2WYhEOC7PzWJUl7ty9LVKqWdi5m3u2HhQOTxIqErxO/ypz8femb4rTG7UHsU44CI9eGfcFxRp5lVdTBvw/oQ62PqPhlv1hUCbIE5vwWM5Ej2NOgOvWu0gTBVeTA9UxDYxYFS9eKDUz954eKcLsZrFqda6JXgDCMmfAMyZqr9ExoD8zMw6U5KxioekyZVTEemP98NFDCH4W7+A5ObYYbtPo+FXtvBP8jJruOV5PgkccWN1agBIudq0kFaVvPc11lFWjy7stvSvJxXF113q0Ifzma/IUZVaQXvJtlVjYQm6L2towgWcGKYUK4O5XygSeCRYXYQPIH0y4AjF4HtVIzKluUQ6nLIjstS4ZkpoZrszoFJY+IbPhp73VMXYk/ZwwQt2YPqh4fovJGNwZI7tSf+LhKlUJxQfoqy0UG+vSlFybOkro6fRuAN2ir/y7/jI+mBjBuBQ== X-MS-TrafficTypeDiagnostic: DB3PR0102MB3546:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: iBb+kmmR7yPhHjh+OI0hp06wn35AKe7FxnkSMefHzCYmGvqrlg4AxnUnlCdlYZH+mC//iHc26KWd4k7uEv8bJfeRvK2/GyngWLElcS3T3WkEUgqH3K1BfnLS5KcsX8pCTTo3WpkwmBIqrayRwGdhxS/ecxm3Bae+lmbqCtoR/GKSJEcZDMBNL1obQfT+hSL/7iS6zVfPtzTFc7Z6WeEDzMVZe/2nbKUa8MzENDxhCJhoIU3mLIEywxRWSKGeAN6gnu91BCSB4Vf+NwYW2CXheuB7Be9rwUHasdJ7ULKWxdGYpjO8lsgsWJy+re12eo9YUcQ/M6csFtY91ihKnn+UyQQpIR8D//CmHeZXtyNsjOFl5ajM/6EuyxMnjLuiWDHIAkPp3xMj0x6nbEIFxjYK1KAfTKJjRN7ISPHxwaHkcfi8xeVD31WvRLhb4WV/bNwvcLUkY5YZMPbc7aKgD2yiADj99FLdilILUcwqxAIVB+UOOlcMeoHbDnUkSF9m01eB+AdatVEk+aJMUdrRE2WFtOCVNUGJjhER3WzYIlxv9rjKkWdo2YjACbgpHYCDXJN2Y8nuw3zYKL1ttU8Zgt7AeMyXK67cYYCCW5U1+H6WmhTYD9Q4ic8dhTk/LkuEyfVOF60K0sICh8eHn2QZkMPvS9k7uR4IM3plm//lJz0PiiED7+Fmp9Y9a3AkQu4u57Y1JR5Dex3rEdXEFoYvSMwqfw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: AiUepQmsfPsXJQwpa7L1CiWPvxdUW2qhlgf9gRjlQQt7SQwreDrl5wJ408R1RofbIhFlIuVIP0Ufk1Pb8NdQr3rBM3Czc4QMUy536bxxL3zZpRLaeLvbJLacYFwh4JXAdVqcvN0+QU6kp54b3LrhMQSkMEsPI3WCd0kysRo/msVmO4Hh4jZgKaLUPlwWLcNPmaSQRWJlBR2Ee1u54lNK0m+k5YSOj6cbC3nO5xwc8RtRW9ANiBwFAXZhlcQjbuHcUxmuAGteZy0y0TX80UoxoFZ1VOmdAV8hu6181fD6BR1+cOXDu/ZYWSi2dbAxxxgX7G1fvgoQxyZAjgCaKjyb44Rbj0t0CPBrx6T1keGNkZeVjgHN+7Fs3IrNp0iGrxWE0okMe9uhwyRlLlO42qzVryjA/TJfGkxK89PWuR/QV3jN8AF9mZxN8YAatwVxfQ0DZNrdEM7RJHVHWHn4w1Ke8IdZjay705DRwgKFVV0ZQYzknRrg/MQ1KGMkQsiDxiwbN1CJreFgsCRdVg7g3eSC74tfu2I6atEdYKz4azNgghaGqr07pFB8WbIXcJnH7l2TfMHYpGXbpwhbSrRLpJ2Jg2a92Z99GwNxYl6e6nUebG0G98YuD5R8dpT2Ohk1QNbI367KF5yXcMdRs+AF9fRV9ntjZuLvenqkZGnLD0PlnjoYWH01n7tkc5rLH1VeIGFnMBMSbLCenYjdbTMwzbNqf9EByIMwOfiSMnpXRwVT2hT6o7OgePaS2rkdxlArMosHs1IOtXuT2dWt6ChfLNVidVjlHGauXEyZ5TNUpfZWvSB+tMbln18dEZUeEXtHrwoElyxJWty7eRDq4tBhaDIMxGHF2zTjV8STS7Ia8eFVswl5FPtJO+yxwdR70J6r3hcchstOmsr0zbqVXE4IiWXzY4/eoL6QL7ym+g/xVCHltJKJ2nMxsLYIxKkI+JkF91n2ED7/2LftKivakv6zC5fziwfjUUsoblaDcxZngePCEKJM7OekI3GiF1ZTZ+VguE/V/vWGBB/CF4+n+xBmiifg7pEQWuj2lvqjk7ncqkH9o3a3W25ftxuEk7GMT/L9r398qSKz+28cERUU4ICixEwhm1kmQJRv38Xwf6jWS8y/rklsMs2o3QGZDPms9EkqpB757Sb5gx5iqZ6d2zt+Ca9213TM86yevdIb/cc3IW47wATbwCliIZKNajNnmR9nQBKfdDKgnMplDDKhg7vwLNUqGedWbA5fU8KFC3hLjHyi2lMXJiJNjJCsqEbOcPcrUWX1r+PsbVGbCMpeX7vN+ZFMYh8PzR58I5OqgMJ/lHw3Mm8= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 50590405-b4b4-407e-0cdd-08da5ae83559 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:31:00.2943 (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 18/18] avcodec/hevcdec: Move allocation after error checks 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: t1qqphWghoJc While just at it, also use av_calloc() instead of zeroing the array ourselves in a loop. Signed-off-by: Andreas Rheinhardt --- libavcodec/hevcdec.c | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index e2568c04c0..c61ae49be1 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -2628,31 +2628,25 @@ static int hls_slice_data_wpp(HEVCContext *s, const H2645NAL *nal) const uint8_t *data = nal->data; int length = nal->size; HEVCLocalContext *lc = s->HEVClc; - int *ret = av_malloc_array(s->sh.num_entry_point_offsets + 1, sizeof(int)); + int *ret; int64_t offset; int64_t startheader, cmpt = 0; int i, j, res = 0; - if (!ret) - return AVERROR(ENOMEM); - if (s->sh.slice_ctb_addr_rs + s->sh.num_entry_point_offsets * s->ps.sps->ctb_width >= s->ps.sps->ctb_width * s->ps.sps->ctb_height) { av_log(s->avctx, AV_LOG_ERROR, "WPP ctb addresses are wrong (%d %d %d %d)\n", s->sh.slice_ctb_addr_rs, s->sh.num_entry_point_offsets, s->ps.sps->ctb_width, s->ps.sps->ctb_height ); - res = AVERROR_INVALIDDATA; - goto error; + return AVERROR_INVALIDDATA; } for (i = 1; i < s->threads_number; i++) { if (s->HEVClcList[i]) continue; s->HEVClcList[i] = av_mallocz(sizeof(HEVCLocalContext)); - if (!s->HEVClcList[i]) { - res = AVERROR(ENOMEM); - goto error; - } + if (!s->HEVClcList[i]) + return AVERROR(ENOMEM); s->HEVClcList[i]->logctx = s->avctx; s->HEVClcList[i]->parent = s; } @@ -2683,8 +2677,7 @@ static int hls_slice_data_wpp(HEVCContext *s, const H2645NAL *nal) offset += s->sh.entry_point_offset[s->sh.num_entry_point_offsets - 1] - cmpt; if (length < offset) { av_log(s->avctx, AV_LOG_ERROR, "entry_point_offset table is corrupted\n"); - res = AVERROR_INVALIDDATA; - goto error; + return AVERROR_INVALIDDATA; } s->sh.size[s->sh.num_entry_point_offsets - 1] = length - offset; s->sh.offset[s->sh.num_entry_point_offsets - 1] = offset; @@ -2700,18 +2693,18 @@ static int hls_slice_data_wpp(HEVCContext *s, const H2645NAL *nal) atomic_store(&s->wpp_err, 0); res = ff_slice_thread_allocz_entries(s->avctx, s->sh.num_entry_point_offsets + 1); if (res < 0) - goto error; + return res; - for (i = 0; i <= s->sh.num_entry_point_offsets; i++) { - ret[i] = 0; - } + ret = av_calloc(s->sh.num_entry_point_offsets + 1, sizeof(*ret)); + if (!ret) + return AVERROR(ENOMEM); if (s->ps.pps->entropy_coding_sync_enabled_flag) s->avctx->execute2(s->avctx, hls_decode_entry_wpp, s->HEVClcList, ret, s->sh.num_entry_point_offsets + 1); for (i = 0; i <= s->sh.num_entry_point_offsets; i++) res += ret[i]; -error: + av_free(ret); return res; }