From patchwork Mon Jul 27 16:32:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Thompson X-Patchwork-Id: 21309 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:80ca:0:0:0:0:0 with SMTP id c10csp4278103ybm; Mon, 27 Jul 2020 09:34:33 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwa9BhLPGIFz8UaWYC81kJRFcDZKW8qgvyv/MB4QMH9hvE1NosAiC0n4rxWhwIai/0aTWRi X-Received: by 2002:a05:600c:2209:: with SMTP id z9mr143250wml.70.1595867672903; Mon, 27 Jul 2020 09:34:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1595867672; cv=none; d=google.com; s=arc-20160816; b=MdglrwD8SJsHAv47T5ZFUDHrHTgJCqsqtKwucJgmxGi6FVgrsyTjaThSWC7x+qyqly kiuFos/sX3H036/Re6DrEXSWNpjelw6HhuuESUZAWRvCYQ6u2gJ0xa/+wBw0vQtv7pit v/MIzwciUKKqJ625BkbvvthGcyPphnN7PDxRTXJKk1e25OvgVZq9QxrQdhxcBVx2+9oo 8IEUjD6anTdWpObxGMlhByVp6Z4rt7C9b84/erg/jjUUykMMBRmI6oT3XdfVweyHzd0J wGHurxtUBMzebK21Nvga3GF4ewfNcH44uxj2R+v9R5Sk0ek2EPQLs2FFq+nfPTKH9B24 vA8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=ohMyD6BoYjFgh+d6UqBhnt3BSm6y6WjP/1YM1OOkiRU=; b=I5MUzBV6xED4PRYOA6HWpfTEsdc3phcQv0vkeaRvvOjIJ4QTWiWOBJ6Hn+vaN1kS/V 1vDcSsGMH1MTq4bn9pORk7ON/1Di4soAWv8chtvVZKowlNqUo6/HDC1tIH+E2sVuY/Lz MIwHviaOmmqDPpLkD2WJllYyIqIb+iAk7M6NZtBSVpROAXuRjFjQ4jx95ZhjalWhA5Hp DXyJThTHvzVsNgLnofwuf8cxhJOqYv2G+VETM8vEq9INYf9K3PFVEhRH/gtRqY3H4nGW bU2pW5JBg9vR/2ImCDZq7//SXhyESGNq4Wc1e0ixHTIKQ3jQi/4DRaHBbVCyrH2Y9ILY z03w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@jkqxz-net.20150623.gappssmtp.com header.s=20150623 header.b=1D1Zr+18; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id n65si137077wme.59.2020.07.27.09.34.32; Mon, 27 Jul 2020 09:34:32 -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=@jkqxz-net.20150623.gappssmtp.com header.s=20150623 header.b=1D1Zr+18; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D546368B933; Mon, 27 Jul 2020 19:33:02 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7838E68B8A2 for ; Mon, 27 Jul 2020 19:32:55 +0300 (EEST) Received: by mail-wr1-f65.google.com with SMTP id f18so15547135wrs.0 for ; Mon, 27 Jul 2020 09:32:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jkqxz-net.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=FbVWsCuJwYXTneO8I5nqm0jPf6MPta3VmneDCKmO148=; b=1D1Zr+180scqv1cDAC/X9hayOYSzMwF3TVKCzqVuT7J+oZWrbksXKZGqoYHA/K4AuY sYsSv+B9JU4V5/CryzvYpHCBJDqaWcq55VHq/OZtgvO+c+7VJ5Z6Iu81Z286tJZO3OLb gSliiyZh6pZfRDuVV1ee1r2ci/rgCKFZ9D3NJXqaeBIdyYnuO0A6ep5R3dojCGZjPy3T YmYV3BqGKC0M+Z0IXpLj9IPgFuHOjqwUr4cnaFMxt18FatROTqUj7Aqm/nczi98CdtJa hK64ZrnVOHQMdUbPlNCCGxPxYasDTUdIBK0qguIvSvz/qxySOhqZjYBihif8QJCTtciS yJYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FbVWsCuJwYXTneO8I5nqm0jPf6MPta3VmneDCKmO148=; b=CzNp75tz8B7AdAe36wNzVz4/cCPiPFk7Fz/mS1idfAIt23YKUPy4g1p0eiBKlZcZPG d5w055mnSh5+pl31YDJkji0UKziqdbrT09sQjhjMzNAPCXKWPBGtW40W8YkRbQHDePvs DuuJA4DZ+Ol45XvxTbKhWZOU4ERuqLm9XYNa9sPBW7Mte9b5bGssnZHbytrBn0u8ZA+C 94Mw612aliHB8j3YqzQ2mCrHemkJYw1wg8CH//7g0tILZsJPWrvMMR9BjlhSH7VU8Kao u0G0zr8iK+iym5tTc6U1kvx3KSrJG2WNocDShcrShrCidDmwF/WFO+t01aA51vaMBZOs o2oA== X-Gm-Message-State: AOAM5326LADN/sstFrQWVs8vImAWOiIhKwuWL6LZG0PKMmcjc3rVh8fa R1Cz+AK0GCCwa8NJRovls/e/RHJRdWA= X-Received: by 2002:a5d:664e:: with SMTP id f14mr21058747wrw.6.1595867574461; Mon, 27 Jul 2020 09:32:54 -0700 (PDT) Received: from rywe.jkqxz.net (cpc91242-cmbg18-2-0-cust650.5-4.cable.virginm.net. [82.8.130.139]) by smtp.gmail.com with ESMTPSA id w16sm14706791wrg.95.2020.07.27.09.32.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Jul 2020 09:32:53 -0700 (PDT) From: Mark Thompson To: ffmpeg-devel@ffmpeg.org Date: Mon, 27 Jul 2020 17:32:26 +0100 Message-Id: <20200727163237.23371-12-sw@jkqxz.net> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200727163237.23371-1-sw@jkqxz.net> References: <20200727163237.23371-1-sw@jkqxz.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v6 11/22] cbs_av1: Use table-based alloc/free X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 0V8yVn5JGKEX Content-Length: 5557 --- libavcodec/cbs_av1.c | 85 ++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 46 deletions(-) diff --git a/libavcodec/cbs_av1.c b/libavcodec/cbs_av1.c index 75e9cb78df..dd2bc83bd4 100644 --- a/libavcodec/cbs_av1.c +++ b/libavcodec/cbs_av1.c @@ -809,50 +809,6 @@ fail: return err; } -static void cbs_av1_free_tile_data(AV1RawTileData *td) -{ - av_buffer_unref(&td->data_ref); -} - -static void cbs_av1_free_padding(AV1RawPadding *pd) -{ - av_buffer_unref(&pd->payload_ref); -} - -static void cbs_av1_free_metadata(AV1RawMetadata *md) -{ - switch (md->metadata_type) { - case AV1_METADATA_TYPE_ITUT_T35: - av_buffer_unref(&md->metadata.itut_t35.payload_ref); - break; - } -} - -static void cbs_av1_free_obu(void *opaque, uint8_t *content) -{ - AV1RawOBU *obu = (AV1RawOBU*)content; - - switch (obu->header.obu_type) { - case AV1_OBU_TILE_GROUP: - cbs_av1_free_tile_data(&obu->obu.tile_group.tile_data); - break; - case AV1_OBU_FRAME: - cbs_av1_free_tile_data(&obu->obu.frame.tile_group.tile_data); - break; - case AV1_OBU_TILE_LIST: - cbs_av1_free_tile_data(&obu->obu.tile_list.tile_data); - break; - case AV1_OBU_METADATA: - cbs_av1_free_metadata(&obu->obu.metadata); - break; - case AV1_OBU_PADDING: - cbs_av1_free_padding(&obu->obu.padding); - break; - } - - av_freep(&obu); -} - static int cbs_av1_ref_tile_data(CodedBitstreamContext *ctx, CodedBitstreamUnit *unit, GetBitContext *gbc, @@ -887,8 +843,7 @@ static int cbs_av1_read_unit(CodedBitstreamContext *ctx, GetBitContext gbc; int err, start_pos, end_pos; - err = ff_cbs_alloc_unit_content(unit, sizeof(*obu), - &cbs_av1_free_obu); + err = ff_cbs_alloc_unit_content2(ctx, unit); if (err < 0) return err; obu = unit->content; @@ -1253,11 +1208,49 @@ static void cbs_av1_close(CodedBitstreamContext *ctx) av_buffer_unref(&priv->frame_header_ref); } +static void cbs_av1_free_metadata(void *unit, uint8_t *content) +{ + AV1RawOBU *obu = (AV1RawOBU*)content; + AV1RawMetadata *md; + + av_assert0(obu->header.obu_type == AV1_OBU_METADATA); + md = &obu->obu.metadata; + + switch (md->metadata_type) { + case AV1_METADATA_TYPE_ITUT_T35: + av_buffer_unref(&md->metadata.itut_t35.payload_ref); + break; + } +} + +static const CodedBitstreamUnitTypeDescriptor cbs_av1_unit_types[] = { + CBS_UNIT_TYPE_POD(AV1_OBU_SEQUENCE_HEADER, AV1RawOBU), + CBS_UNIT_TYPE_POD(AV1_OBU_TEMPORAL_DELIMITER, AV1RawOBU), + CBS_UNIT_TYPE_POD(AV1_OBU_FRAME_HEADER, AV1RawOBU), + CBS_UNIT_TYPE_POD(AV1_OBU_REDUNDANT_FRAME_HEADER, AV1RawOBU), + + CBS_UNIT_TYPE_INTERNAL_REF(AV1_OBU_TILE_GROUP, AV1RawOBU, + obu.tile_group.tile_data.data), + CBS_UNIT_TYPE_INTERNAL_REF(AV1_OBU_FRAME, AV1RawOBU, + obu.frame.tile_group.tile_data.data), + CBS_UNIT_TYPE_INTERNAL_REF(AV1_OBU_TILE_LIST, AV1RawOBU, + obu.tile_list.tile_data.data), + CBS_UNIT_TYPE_INTERNAL_REF(AV1_OBU_PADDING, AV1RawOBU, + obu.padding.payload), + + CBS_UNIT_TYPE_COMPLEX(AV1_OBU_METADATA, AV1RawOBU, + &cbs_av1_free_metadata), + + CBS_UNIT_TYPE_END_OF_LIST +}; + const CodedBitstreamType ff_cbs_type_av1 = { .codec_id = AV_CODEC_ID_AV1, .priv_data_size = sizeof(CodedBitstreamAV1Context), + .unit_types = cbs_av1_unit_types, + .split_fragment = &cbs_av1_split_fragment, .read_unit = &cbs_av1_read_unit, .write_unit = &cbs_av1_write_obu,