From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 6885F476BB for ; Tue, 19 Sep 2023 20:01:13 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BC80F68C963; Tue, 19 Sep 2023 22:58:25 +0300 (EEST) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2085.outbound.protection.outlook.com [40.92.91.85]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C328768C92F for ; Tue, 19 Sep 2023 22:58:24 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=d8P8dr+lrWahmHFL5LPg+F92L3VQC5/cQV/gDpHP+FqqYXsYa2I0bE5iG+QSdRNxeZUKLDcKCNCttxbSkj8wGIcWI7rnmm3qfatl5/VIAqMciOR9NDbetoN0TEGacA43XadVMYHXHyQnLQSi3RhOhihjmOnm29+tsvQf0RxOlTk08pXze+d10THejpsFi+E9i7LMDCpInPZgN7TBiq+f6t+B4kjAE+1u8x2EvIbKjMYS9p8xFAvtTOGAN3upgg7PF+sMjNGLpA7LwO0kV9HNcga0bpg9rc95IOmgcrNL1j3lv/22o8LwJ4EXM5UtnPIi10lhygv9eHrhfKLptGBXMA== 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=GkOu3Is1E7dXSlh08NGSjIlMhz+kB5GBneHIlqJMCXg=; b=kjc0qH/GJ8xc2ulTrDF6hoaBLmPoJ6KaL2ImalfHAnwfqqiVzs1zH9nY2J7YsRKe+i1n0A4w7oGTZlMFIamajzBDtD9jo6EE7sY5Bq99BecuN+UD2S+CxCSDyPVdK8IHVVsYzgILf6juOqV20Uy65E924YuT3fWeZPU36Mx2DXmYw5Ix95Jokk4sOy7/x6DmlAw79JkEkJuVXVYY6m6G6rtE1QwMy1PujF7OrvwdQJIopRTVgMNzf36IjdtwV4QTjr4ofTHKCBHeygLeu/Klx/vg7Sl6IUyJMjA0WN9+D8HBVR1dVsLESgLfRspcADA2l5+W0aRocU9TO1g8LdAr5g== 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=GkOu3Is1E7dXSlh08NGSjIlMhz+kB5GBneHIlqJMCXg=; b=K4bxY00plPLnULZZSCKU5yg6tGTrQdyVw6z5SWO6X4yD1Pi0LpxaRswtq6/TIqNwccTyw1CyYkjYqdCB2PWCiORhjrCACSbjZgCnIAGbSKkc00s3dVvwzCe/lXY0vo2A/NLXQTcpSPNCxvV/ff+AAi7lXZKEa7lWwGRukejexvlwcSaEaQWKsvyJVqcIJuQm4gEk5sBnAonZbY/zj2wDmb/FSxa/0fONRILU3Z02D2+FtZ+3l4Lp1MpSvzbuIs/0pGARPvB4enEyUIuJPWeHwE6fIWjrkCryt3TsgtRu6Sk/P/4tqkzieXy0wFr86kOS0n+inexYugvx+QOsTea5Hw== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DU2P250MB0237.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:276::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.26; Tue, 19 Sep 2023 19:58:23 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa%3]) with mapi id 15.20.6792.026; Tue, 19 Sep 2023 19:58:23 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 19 Sep 2023 21:57:20 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [NAIytG1XnYq1ACBWYkJT8jIP704BdrPB] X-ClientProxiedBy: ZR0P278CA0086.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:22::19) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20230919195734.1005750-28-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|DU2P250MB0237:EE_ X-MS-Office365-Filtering-Correlation-Id: e7020ea9-63c7-43d1-5741-08dbb94ac795 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4DpeyhChY5KK/VmTmPYaTIm71hr8OPR0tyEjg018KfkdhQRBGH2L/pjN1nRhehb7Ft5mUxzpafYNqOd/Mni0tuo42A7TyNivO4Or/wXbBiNXJ8BY7/szHN8Q4aYfkvc7rTTf3iz4QqU9w/oe/t76iXLWDo6LhCAs2s8hUw+zW4gPgl9KDhh55F0waGFK4Roq0uUN5iKbOKYfu0n1CrZuT6UKPvB92ecL013HPhqzQtDkZajxxhZXCHQsJn+RFN0LvmIwlm9ACd0agV4lcCZT2BUQmfmEJSMovhZmaycqTu5fM4mtm4ths0KaYQcLk4+j+sT+R1peCAifi6KAY3ybhSv2YE95dGgGBR53PaE+d8bWNrvDC8mDvzVNjTWxqDaLcIpyWk14xsMBYysmmyiAtrazJKu3oviqlEztFuKutOvZRzlwQyQHi5bbyCwvMyIpfv+3mvwNS203ADO2luNvRZy6iiGQBgo72Ye16K09Gn8KTbPhZcFkgTAyE0J79mPOV7iJDz38dTOLlVidzWQBg7Zd5hDpWSjPrlqTEmsZT49mmYSs9r1ymcDQ+PavXRHGovYh7LocrKIK5NYYG36CRRK53Uv1+rpiICIkI4QVM/C4XKhRDKlT7kaBjDGjwJVP X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?EYXTGbDoHv6lwwDF377nh0pYuSBhGpQBCvr51bWf2zvLp8WzPkxwuMnWwRTD?= =?us-ascii?Q?5j4/p/ZyzIXuUhJh2ePYhXvfZOVAPjLnjSZUj4NwQKtM9TTG4iJXVRdIV7eG?= =?us-ascii?Q?Rk3voYxTtEYZUlKjGeHeaphQGlEP9keBkeIUdN40FgmN0Me7xtMJbA7DR4w9?= =?us-ascii?Q?uuWE1/Cq2/nE3/cFf30al+15DooDyCMRucNo2HbvKyfxE/AojzoISGIl2eBN?= =?us-ascii?Q?FyBnpWkYSqLD1+JwDD+0uJWG4xJdysbG+nxxmdU78o3pZb9Qan1CNuonYcMB?= =?us-ascii?Q?vE2uSrDKC5teyRhI77FBW4z/MCcJ4qIb5ClCF/I6sbhw6KgJ3MD6v46Ndc7a?= =?us-ascii?Q?MDfCJg1yh+o5eI6EnMiGksfb4+phyJpR5aAlWazJczq6rGVxIYnovfPRFNKL?= =?us-ascii?Q?wuMDyMilbUOGpiaQoyXlZjqNpr49gg2QBQmaaI8t602w5aBJs8e1T7I7HWfT?= =?us-ascii?Q?vQ9j4spDv2bSfjlM+DB2wJ2aOHslvVaGNnP9547mQmaPKLXyrysP8sAU7FTa?= =?us-ascii?Q?ojCuI6z6lQXfMhQ5EzP7JNVfQ1e0MYZvugiDnlAqIbGq52E1+MNWbIaQxt7W?= =?us-ascii?Q?Bdnjx7TSEhlCU3GfAOVNH4l4gZG46vFKH6MM6C4/rd0EXuJGmkRadRGvls4e?= =?us-ascii?Q?wPMMipEJrmN3dqjo3FqxsuzsbENhFej4STCTK2e5JQgCZN1VXKklb/LZIFUq?= =?us-ascii?Q?ig4cb2OPYVkzCf2OIsi5wnfj0PY6lH6XoRob7gaiON+syCE1w5vNPutSzTY+?= =?us-ascii?Q?BJps4Q7AuUe/v5tX1OHYvTou6obR0+Xc5TLSrV81SjoS4cv0SE5G5sWvROdA?= =?us-ascii?Q?CwG//ZoMQbkoNHpZd6lPT4nl1qkOfEkua7Y5Quc90yR5Wioj92FgcN0f6y5a?= =?us-ascii?Q?/ZUqZesxdzZXnnp+ivYsoDIVyLsp6aGWqWI1mUCzWVhfgadpzUmul2hoO2K/?= =?us-ascii?Q?macVPRKJ9sREdu0+1l+6RvULv+w39IpWKDTGK30KeSe5Sdk9IYuPRNUcrYHS?= =?us-ascii?Q?p8SPgU98fMH9AYcLx58Lu6ImMgIYpjI5qusDhmisoDeWvHOzK1Fp0lm11J4B?= =?us-ascii?Q?vVCrk2lAZY0jzfREP/ZAv7a7SnmNB1NUaWNvegCFnZy1usthf08IBsgp7Kwp?= =?us-ascii?Q?jJDBT+lWJ6gjAA1d6d0vrnrB8MHzPILutHcyAwYnsDCAZSHsiI8uq1kM6auQ?= =?us-ascii?Q?BdrJV9k4Y00jwJa6WrWrKW9+N8C+Zpf/W8zfMGhX5G96Eg+hyvN4JnSTsqXG?= =?us-ascii?Q?i9IKBgOBc3DAV6CKpoNU?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e7020ea9-63c7-43d1-5741-08dbb94ac795 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2023 19:58:23.2632 (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: DU2P250MB0237 Subject: [FFmpeg-devel] [PATCH 28/42] avcodec/mimic: Switch to ProgressFrames X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Andreas Rheinhardt Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Avoids implicit av_frame_ref() and therefore allocations and error checks. Signed-off-by: Andreas Rheinhardt --- libavcodec/mimic.c | 60 ++++++++++++++++------------------------------ 1 file changed, 21 insertions(+), 39 deletions(-) diff --git a/libavcodec/mimic.c b/libavcodec/mimic.c index a846a07a40..82da20bbf4 100644 --- a/libavcodec/mimic.c +++ b/libavcodec/mimic.c @@ -33,8 +33,8 @@ #include "bswapdsp.h" #include "hpeldsp.h" #include "idctdsp.h" +#include "progressframe.h" #include "thread.h" -#include "threadframe.h" #define MIMIC_HEADER_SIZE 20 #define MIMIC_VLC_BITS 11 @@ -51,7 +51,7 @@ typedef struct MimicContext { int cur_index; int prev_index; - ThreadFrame frames [16]; + ProgressFrame frames[16]; DECLARE_ALIGNED(32, int16_t, dct_block)[64]; @@ -104,16 +104,12 @@ static const uint8_t col_zag[64] = { static av_cold int mimic_decode_end(AVCodecContext *avctx) { MimicContext *ctx = avctx->priv_data; - int i; av_freep(&ctx->swap_buf); ctx->swap_buf_size = 0; - for (i = 0; i < FF_ARRAY_ELEMS(ctx->frames); i++) { - if (ctx->frames[i].f) - ff_thread_release_ext_buffer(avctx, &ctx->frames[i]); - av_frame_free(&ctx->frames[i].f); - } + for (int i = 0; i < FF_ARRAY_ELEMS(ctx->frames); i++) + ff_thread_progress_unref(avctx, &ctx->frames[i]); return 0; } @@ -128,7 +124,6 @@ static av_cold int mimic_decode_init(AVCodecContext *avctx) { static AVOnce init_static_once = AV_ONCE_INIT; MimicContext *ctx = avctx->priv_data; - int i; ctx->prev_index = 0; ctx->cur_index = 15; @@ -139,12 +134,6 @@ static av_cold int mimic_decode_init(AVCodecContext *avctx) ff_idctdsp_init(&ctx->idsp, avctx); ff_permute_scantable(ctx->permutated_scantable, col_zag, ctx->idsp.idct_permutation); - for (i = 0; i < FF_ARRAY_ELEMS(ctx->frames); i++) { - ctx->frames[i].f = av_frame_alloc(); - if (!ctx->frames[i].f) - return AVERROR(ENOMEM); - } - ff_thread_once(&init_static_once, mimic_init_static); return 0; @@ -154,7 +143,6 @@ static av_cold int mimic_decode_init(AVCodecContext *avctx) static int mimic_decode_update_thread_context(AVCodecContext *avctx, const AVCodecContext *avctx_from) { MimicContext *dst = avctx->priv_data, *src = avctx_from->priv_data; - int i, ret; if (avctx == avctx_from) return 0; @@ -162,13 +150,10 @@ static int mimic_decode_update_thread_context(AVCodecContext *avctx, const AVCod dst->cur_index = src->next_cur_index; dst->prev_index = src->next_prev_index; - for (i = 0; i < FF_ARRAY_ELEMS(dst->frames); i++) { - ff_thread_release_ext_buffer(avctx, &dst->frames[i]); - if (i != src->next_cur_index && src->frames[i].f->data[0]) { - ret = ff_thread_ref_frame(&dst->frames[i], &src->frames[i]); - if (ret < 0) - return ret; - } + for (int i = 0; i < FF_ARRAY_ELEMS(dst->frames); i++) { + ff_thread_progress_unref(avctx, &dst->frames[i]); + if (i != src->next_cur_index && src->frames[i].f) + ff_thread_progress_ref(&dst->frames[i], &src->frames[i]); } return 0; @@ -291,11 +276,10 @@ static int decode(MimicContext *ctx, int quality, int num_coeffs, } else { unsigned int backref = get_bits(&ctx->gb, 4); int index = (ctx->cur_index + backref) & 15; - uint8_t *p = ctx->frames[index].f->data[0]; - if (index != ctx->cur_index && p) { - ff_thread_await_progress(&ctx->frames[index], - cur_row, 0); + if (index != ctx->cur_index && ctx->frames[index].f) { + const uint8_t *p = ctx->frames[index].f->data[0]; + ff_thread_progress_await(&ctx->frames[index], cur_row); p += src - ctx->frames[ctx->prev_index].f->data[plane]; ctx->hdsp.put_pixels_tab[1][0](dst, p, stride, 8); @@ -305,8 +289,7 @@ static int decode(MimicContext *ctx, int quality, int num_coeffs, } } } else { - ff_thread_await_progress(&ctx->frames[ctx->prev_index], - cur_row, 0); + ff_thread_progress_await(&ctx->frames[ctx->prev_index], cur_row); ctx->hdsp.put_pixels_tab[1][0](dst, src, stride, 8); } src += 8; @@ -315,8 +298,7 @@ static int decode(MimicContext *ctx, int quality, int num_coeffs, src += (stride - ctx->num_hblocks[plane]) << 3; dst += (stride - ctx->num_hblocks[plane]) << 3; - ff_thread_report_progress(&ctx->frames[ctx->cur_index], - cur_row++, 0); + ff_thread_progress_report(&ctx->frames[ctx->cur_index], cur_row++); } } @@ -390,17 +372,17 @@ static int mimic_decode_frame(AVCodecContext *avctx, AVFrame *rframe, return AVERROR_PATCHWELCOME; } - if (is_pframe && !ctx->frames[ctx->prev_index].f->data[0]) { + if (is_pframe && !ctx->frames[ctx->prev_index].f) { av_log(avctx, AV_LOG_ERROR, "decoding must start with keyframe\n"); return AVERROR_INVALIDDATA; } - ff_thread_release_ext_buffer(avctx, &ctx->frames[ctx->cur_index]); + ff_thread_progress_unref(avctx, &ctx->frames[ctx->cur_index]); + if ((res = ff_thread_progress_get_buffer(avctx, &ctx->frames[ctx->cur_index], + AV_GET_BUFFER_FLAG_REF)) < 0) + return res; ctx->frames[ctx->cur_index].f->pict_type = is_pframe ? AV_PICTURE_TYPE_P : AV_PICTURE_TYPE_I; - if ((res = ff_thread_get_ext_buffer(avctx, &ctx->frames[ctx->cur_index], - AV_GET_BUFFER_FLAG_REF)) < 0) - return res; ctx->next_prev_index = ctx->cur_index; ctx->next_cur_index = (ctx->cur_index - 1) & 15; @@ -417,10 +399,10 @@ static int mimic_decode_frame(AVCodecContext *avctx, AVFrame *rframe, init_get_bits(&ctx->gb, ctx->swap_buf, swap_buf_size << 3); res = decode(ctx, quality, num_coeffs, !is_pframe); - ff_thread_report_progress(&ctx->frames[ctx->cur_index], INT_MAX, 0); + ff_thread_progress_report(&ctx->frames[ctx->cur_index], INT_MAX); if (res < 0) { if (!(avctx->active_thread_type & FF_THREAD_FRAME)) - ff_thread_release_ext_buffer(avctx, &ctx->frames[ctx->cur_index]); + ff_thread_progress_unref(avctx, &ctx->frames[ctx->cur_index]); return res; } @@ -447,6 +429,6 @@ const FFCodec ff_mimic_decoder = { FF_CODEC_DECODE_CB(mimic_decode_frame), .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, UPDATE_THREAD_CONTEXT(mimic_decode_update_thread_context), - .caps_internal = FF_CODEC_CAP_ALLOCATE_PROGRESS | + .caps_internal = FF_CODEC_CAP_USES_PROGRESSFRAMES | FF_CODEC_CAP_INIT_CLEANUP, }; -- 2.34.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".