From patchwork Tue Sep 19 19:57:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43819 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a886:b0:149:dfde:5c0a with SMTP id ca6csp185733pzb; Tue, 19 Sep 2023 12:57:54 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHJJu/aEKQSdMs3HyNdoE4JHa59MILmxSzt4njouc6es4C8D/iKOkaFSkW3xLHb6JLluytk X-Received: by 2002:a2e:3003:0:b0:2c0:20e3:9905 with SMTP id w3-20020a2e3003000000b002c020e39905mr374913ljw.21.1695153474416; Tue, 19 Sep 2023 12:57:54 -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 h10-20020a1709063b4a00b0099bd03ad4fdsi10556481ejf.979.2023.09.19.12.57.51; Tue, 19 Sep 2023 12:57:54 -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="infCFm/i"; 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 7F11B68C630; Tue, 19 Sep 2023 22:57:10 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04olkn2066.outbound.protection.outlook.com [40.92.75.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 06DDE68C63C for ; Tue, 19 Sep 2023 22:57:08 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FJVBtTlJ41Hb3sgNHImCB696I9HRm52v21T/Z0g6Z1De46ICecLjd/p4nB/NaERZGcNlcvSk+OFWcnJ2klHKQLEUM0nk03Ym8+jV8/1MN4XH4O8PCpfoBof4RkwSqvpFiX39kLZQZowImiR/IzRIb1DoXbVVUfea4BP643AWVruO5TLinqPADVihZswqWL5y3CiWiOaQP9QYWel89P1KWR5+bqwOwhb8Vkz0rCKoibyrgF5XueU5Usi2AXFgfRiRn5iteLP134Se2y12gUAZ4E6NVrbejbD9Li7g5QIBnOUZxBSon5I/AS45uoeyrqhC8qOSuBh47A3wHIH7vU3GDw== 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=FaPrBl3m9hBkU5MADRKVGMBqLdcU+pMDggQ8prp1TCY=; b=E754QhpyrSVSgLmOEdXjo7BSmoYN5xRSTcFArKJQ4PYA8MN2sbY/6MLZOmvpuRkH+Rl/JxrG//oEv2NFs8LjfDi0KcICL91nRppcDfsC2kagziihOhfQH2YMRPOhUSzMqJtmk+dZEHNsqQCQAs8lB3CKB1an0sJWwT5yT2WwL1TjARmlgQ5cxY3bJnr8I+A2lA7zqLfFW1K8INj8vNZjvd94Bd3w2CzykUVVdmvEFZ0XDKjVGH3tsIwivOiV6biunKTDj1ZR5soyexjsEulYUUK7RhFevWXE81M5Gfsc+GvkBzFFUrU5vBFYQvg2uM0gLshBdXZDGZPkcnmfsr+qZw== 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=FaPrBl3m9hBkU5MADRKVGMBqLdcU+pMDggQ8prp1TCY=; b=infCFm/inOZQPCkfFLnmTtAJNGfEsnb7hmuAK/aC3ZP5pbhidltFqrwf11HHGjqhDPdegIVgtXBYhHzvWH8Mk+u76zANE5RLamKo0WWcQmJ8FmwydKdWEuOXgEIFTxJDytuBw6hM40Z0+zB109sKHtwWeQbCKYQuWzZ93/0ohlLlTozr6wictPpY9zMD6shElUWDH0E9jyJJLTp2LWwiMBhQ+z54sTaBTAztiG8qWtGJ4l5Q6hDwsueuiXx4MGWqvPVki38f3jqoLDQ22cZR7EpMsjJDumo8rWHajeVtHeU+Z6fhLFr9IGQquYg7T2GuehJdA0JbEWWFvYg+APbVOQ== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AM8P250MB0215.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:326::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.26; Tue, 19 Sep 2023 19:57:07 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa%3]) with mapi id 15.20.6792.026; Tue, 19 Sep 2023 19:57:07 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 19 Sep 2023 21:57:00 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [b7YQn3tWX8IUBkNDMKBIaSqUpmAG3F+f] 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-8-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AM8P250MB0215:EE_ X-MS-Office365-Filtering-Correlation-Id: ef26b9f6-b095-4f02-9a0e-08dbb94a9a4f X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4VyFISreBEpR/8TTsx0P1OTbyF03/oyMxjY/Wn5YiGtzBOObSFoNEUnTJgUNN4X1vOPQn7UFABymPN2PrPJm5ECxF4icEb8dmzf3XJfCRYu6Y0qUPDEDPMqSXGxD4sX8NMk0GoWDwGA3xgVjm0YXBtvwa2Fs0syPe93zoTDwDwULnBE0E2stB4HBGGfhb3edyJRhUlw4uIfZTtNx9yF735PPTUqiBZ+lvzlY8aMnLFSCzoWkw2R8fu4SbFVu84Ws+2v7CqRW2h4u2k3XiBnFqIeDzLfbaXsk1kyNKO1SiUJlRLo1r4Z1mnQuA+1Z2/Za+w4yK+AgQqtj6zH28CaYWhKiHHGRxUvdMn4XZAKbWTNlGCfK3JSksmW8zjQvFfwo9FL0zDjRypjaPWHUkorQIBfISJquKQDZBh4/x+qRPCyX9poqZ2cNk1PBMXcJeSNh0iwVAmRl9F7uvdllupvDDfvA/L3aJ/EJjjOohEBtrcMy6Wqsu4Yh0rs4ua0gGwAmwtzj3oDYpdT2EQHD26ygbqyZnD2Y3ZiYDd8HmWdsDpqLTN+XK0CWTuB6NXpULaj/HqAoFL0JiwMXzvHSJj/PLnap4XKO0j28oNWqi7dzAd4LEPGOorGWxShcXnVE3kmi X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: zHGGR4/jEozQwt3f6ax5qKDM8DeGJjZHHN7s8x9c3jNiI7Pw4EWqTbXFDgcIoMEHnvtBSPulwNc/bVUpyMm+NE0UXP/Jl/SVnZeMEQx6eiVued3zyk4littOStFo9f/6xI77HOOftHplla0z8GBN1acRgwMviP1agptww3fnLKdOLMdzBt27TbI8lNhWjmMXjAKk7jPCGUo24SnFtAw5137RtFGoPWDu2x6S3Xt3L1KsjfPAEFmxDjSCmKMKo31ZGLznhKLg7mjzDB4T7DfBty733CWi3CVdf7KkhBFJsdCOc/IjpmAcMzl6VXcsjgrCSPcNn1wdd3AEc1c0mcrVIwCXvhU2H3rnwo1PVTQRQlYOtw29cldVQMWgXHPOkTUQn1IbNFVw7rJdPwilXoWGXIu0MA/NjL7FiAxykjf6KzLDJ5cBJdxjRZrq+uv5+cFmoBiu8wW1OxJGkvRjVxQ+u8y0Lk8qBCTmBT50W4qBxeA3FVXWj1agAsmEcmF5xQR7jSmb02auCf1ZJ3oDv5vLJFN28sMYQtpKgL5tneNojdyehR1F64m6EC3IRXUBGlaU1HPr2pDJf9bOrZKAQgBoKbkHxHdijPVzf+1Ku+7fntuTGHu+6v5asmi2meffZhvoQZR8rbNuc/+BOAZnQSsITT3J5WP/GomwKo4gKjzpqifzvKnWNnU2CjyWvpcAmEXe4zV2HLSToG8mc1usIhSxpvS9cqWXB/hLYHyGuLv0+s8Jeb28hgo8AeyRmtOggE9RqQKfhOqKZiZ0Ll65nQSoYH2DsqLbcT9k7O11PTO7Mi2l5fK0duefwzdj2RkLfTF6xg1oHS+k+iHL8xyXicrtGGjr1co2DiWlTyCSRGOF4GfMTYdRy+vVZ2SlZvOUebMiU3nlo3qA8kKRmA4ux0kZ68Cj8tL17r1Dd6Oyh1TyVI7LV5hveE2KY/6N9eCeZS0XmEpVyfHLXbgmAGg6BRc4f6CDBrvZXl/NN1fOBs43JKXzYhNT4dCvJChk4UolDfqwwxXhlK36RS6FfljYXFQ8EFlh7Y30otnZbEWSCdgFoIg3GskSDyY3kpH/YXUfKZZKkdz21H+fRDfap5ujjFZZHxDe9iEuwGtwEIB9eGrpROr41hxzqHgi5uCZrNoeNdKPROSOCTqDT9LE5uJtTRzuj+if+eOib/2iw9DjE/4HfRpKQIsja9d4o0A+3StwgGPLbSYpDNZsQjRYQDtLVakefsMEMhhqk4WWuTSewA4CZwrvbtUQjzXNUxsgXd5xK/SR X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ef26b9f6-b095-4f02-9a0e-08dbb94a9a4f X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2023 19:57:07.3053 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8P250MB0215 Subject: [FFmpeg-devel] [PATCH 08/42] avcodec/dovi_rpu: Use RefStruct API for Vdr data 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: 80WOlnStGMNk It avoids allocations and the corresponding error checks. Also avoids casts and indirections. Signed-off-by: Andreas Rheinhardt --- libavcodec/dovi_rpu.c | 54 ++++++++++++++++++------------------------- libavcodec/dovi_rpu.h | 4 ++-- libavcodec/hevcdec.c | 4 +--- 3 files changed, 26 insertions(+), 36 deletions(-) diff --git a/libavcodec/dovi_rpu.c b/libavcodec/dovi_rpu.c index dd38936552..794fa878a7 100644 --- a/libavcodec/dovi_rpu.c +++ b/libavcodec/dovi_rpu.c @@ -26,6 +26,7 @@ #include "dovi_rpu.h" #include "golomb.h" #include "get_bits.h" +#include "refstruct.h" enum { RPU_COEFF_FIXED = 0, @@ -35,15 +36,15 @@ enum { /** * Private contents of vdr_ref. */ -typedef struct DOVIVdrRef { +typedef struct DOVIVdr { AVDOVIDataMapping mapping; AVDOVIColorMetadata color; -} DOVIVdrRef; +} DOVIVdr; void ff_dovi_ctx_unref(DOVIContext *s) { - for (int i = 0; i < FF_ARRAY_ELEMS(s->vdr_ref); i++) - av_buffer_unref(&s->vdr_ref[i]); + for (int i = 0; i < FF_ARRAY_ELEMS(s->vdr); i++) + ff_refstruct_unref(&s->vdr[i]); *s = (DOVIContext) { .logctx = s->logctx, @@ -52,8 +53,8 @@ void ff_dovi_ctx_unref(DOVIContext *s) void ff_dovi_ctx_flush(DOVIContext *s) { - for (int i = 0; i < FF_ARRAY_ELEMS(s->vdr_ref); i++) - av_buffer_unref(&s->vdr_ref[i]); + for (int i = 0; i < FF_ARRAY_ELEMS(s->vdr); i++) + ff_refstruct_unref(&s->vdr[i]); *s = (DOVIContext) { .logctx = s->logctx, @@ -61,23 +62,14 @@ void ff_dovi_ctx_flush(DOVIContext *s) }; } -int ff_dovi_ctx_replace(DOVIContext *s, const DOVIContext *s0) +void ff_dovi_ctx_replace(DOVIContext *s, const DOVIContext *s0) { - int ret; s->logctx = s0->logctx; s->mapping = s0->mapping; s->color = s0->color; s->dv_profile = s0->dv_profile; - for (int i = 0; i < DOVI_MAX_DM_ID; i++) { - if ((ret = av_buffer_replace(&s->vdr_ref[i], s0->vdr_ref[i])) < 0) - goto fail; - } - - return 0; - -fail: - ff_dovi_ctx_unref(s); - return ret; + for (int i = 0; i < DOVI_MAX_DM_ID; i++) + ff_refstruct_replace(&s->vdr[i], s0->vdr[i]); } void ff_dovi_update_cfg(DOVIContext *s, const AVDOVIDecoderConfigurationRecord *cfg) @@ -195,7 +187,7 @@ int ff_dovi_rpu_parse(DOVIContext *s, const uint8_t *rpu, size_t rpu_size) { AVDOVIRpuDataHeader *hdr = &s->header; GetBitContext *gb = &(GetBitContext){0}; - DOVIVdrRef *vdr; + DOVIVdr *vdr; int ret; uint8_t nal_prefix; @@ -278,23 +270,23 @@ int ff_dovi_rpu_parse(DOVIContext *s, const uint8_t *rpu, size_t rpu_size) if (use_prev_vdr_rpu) { int prev_vdr_rpu_id = get_ue_golomb_31(gb); VALIDATE(prev_vdr_rpu_id, 0, DOVI_MAX_DM_ID); - if (!s->vdr_ref[prev_vdr_rpu_id]) { + if (!s->vdr[prev_vdr_rpu_id]) { av_log(s->logctx, AV_LOG_ERROR, "Unknown previous RPU ID: %u\n", prev_vdr_rpu_id); goto fail; } - vdr = (DOVIVdrRef *) s->vdr_ref[prev_vdr_rpu_id]->data; + vdr = s->vdr[prev_vdr_rpu_id]; s->mapping = &vdr->mapping; } else { int vdr_rpu_id = get_ue_golomb_31(gb); VALIDATE(vdr_rpu_id, 0, DOVI_MAX_DM_ID); - if (!s->vdr_ref[vdr_rpu_id]) { - s->vdr_ref[vdr_rpu_id] = av_buffer_allocz(sizeof(DOVIVdrRef)); - if (!s->vdr_ref[vdr_rpu_id]) + if (!s->vdr[vdr_rpu_id]) { + s->vdr[vdr_rpu_id] = ff_refstruct_allocz(sizeof(DOVIVdr)); + if (!s->vdr[vdr_rpu_id]) return AVERROR(ENOMEM); } - vdr = (DOVIVdrRef *) s->vdr_ref[vdr_rpu_id]->data; + vdr = s->vdr[vdr_rpu_id]; s->mapping = &vdr->mapping; vdr->mapping.vdr_rpu_id = vdr_rpu_id; @@ -390,24 +382,24 @@ int ff_dovi_rpu_parse(DOVIContext *s, const uint8_t *rpu, size_t rpu_size) int current_dm_id = get_ue_golomb_31(gb); VALIDATE(affected_dm_id, 0, DOVI_MAX_DM_ID); VALIDATE(current_dm_id, 0, DOVI_MAX_DM_ID); - if (!s->vdr_ref[affected_dm_id]) { - s->vdr_ref[affected_dm_id] = av_buffer_allocz(sizeof(DOVIVdrRef)); - if (!s->vdr_ref[affected_dm_id]) + if (!s->vdr[affected_dm_id]) { + s->vdr[affected_dm_id] = ff_refstruct_allocz(sizeof(DOVIVdr)); + if (!s->vdr[affected_dm_id]) return AVERROR(ENOMEM); } - if (!s->vdr_ref[current_dm_id]) { + if (!s->vdr[current_dm_id]) { av_log(s->logctx, AV_LOG_ERROR, "Unknown previous RPU DM ID: %u\n", current_dm_id); goto fail; } /* Update current pointer based on current_dm_id */ - vdr = (DOVIVdrRef *) s->vdr_ref[current_dm_id]->data; + vdr = s->vdr[current_dm_id]; s->color = &vdr->color; /* Update values of affected_dm_id */ - vdr = (DOVIVdrRef *) s->vdr_ref[affected_dm_id]->data; + vdr = s->vdr[affected_dm_id]; color = &vdr->color; color->dm_metadata_id = affected_dm_id; color->scene_refresh_flag = get_ue_golomb_31(gb); diff --git a/libavcodec/dovi_rpu.h b/libavcodec/dovi_rpu.h index f6ca5bbbc5..51c5fdbb87 100644 --- a/libavcodec/dovi_rpu.h +++ b/libavcodec/dovi_rpu.h @@ -47,12 +47,12 @@ typedef struct DOVIContext { /** * Private fields internal to dovi_rpu.c */ - AVBufferRef *vdr_ref[DOVI_MAX_DM_ID+1]; + struct DOVIVdr *vdr[DOVI_MAX_DM_ID+1]; ///< RefStruct references uint8_t dv_profile; } DOVIContext; -int ff_dovi_ctx_replace(DOVIContext *s, const DOVIContext *s0); +void ff_dovi_ctx_replace(DOVIContext *s, const DOVIContext *s0); /** * Completely reset a DOVIContext, preserving only logctx. diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index d64055e1f9..44a9680415 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -3584,9 +3584,7 @@ static int hevc_update_thread_context(AVCodecContext *dst, if (ret < 0) return ret; - ret = ff_dovi_ctx_replace(&s->dovi_ctx, &s0->dovi_ctx); - if (ret < 0) - return ret; + ff_dovi_ctx_replace(&s->dovi_ctx, &s0->dovi_ctx); ret = av_buffer_replace(&s->sei.common.dynamic_hdr_vivid.info, s0->sei.common.dynamic_hdr_vivid.info);