From patchwork Tue Jan 17 22:23:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Thompson X-Patchwork-Id: 40073 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:1d43:b0:b8:6755:f97e with SMTP id cs3csp2201097pzb; Tue, 17 Jan 2023 14:23:47 -0800 (PST) X-Google-Smtp-Source: AMrXdXvOs6FA9wei69z1hzJAGrj6GmK903FjDHrUCJXzbG5nArbill9w79KaWNgEoYP9HXi4ouCD X-Received: by 2002:a17:907:a702:b0:842:3920:df75 with SMTP id vw2-20020a170907a70200b008423920df75mr4525715ejc.33.1673994226797; Tue, 17 Jan 2023 14:23:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673994226; cv=none; d=google.com; s=arc-20160816; b=PxNdRkvjtXoaE61BpRxf30+Xb8SZTsUyaXE+mF2Myo4iKsmYLg4Qt0wesOX5O1huz8 5cYAcFzWcYb7eBA6NqZJzkpcmyBxzNTrdEb9ZdeLMiyC1TQ4xCWaFDiVpuFcN9xLQyZt x90TpS8ybhFc7OEhan/veTGO4G+5pQevm7jbbAdLAcfR6ZS+zjChaZqK+Wd8JhWnyA3W qzPykfjUCzxLdIZyyV/OBI3tXLebHItNDpaewyqpotsSqXuuaczVlkjIvUY8PnLY19/N QSnhEWoTtCEiSv/bNJRyfRIqvKjTX+66iOh7fbKFve4fb7hvoJ41IIBt0r1Q7pi5I6T7 qrcg== 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:in-reply-to:references:to:from:content-language :user-agent:mime-version:date:message-id:dkim-signature:delivered-to; bh=ymxM6U6PfFB5axn5Rhv2zwg2yTnGbYRiNTfjtrlA0mA=; b=Bdgb+DfXCkWKNfFR4Xyi0J1+vjf2LwyAJgYcqlC1MmGuJTTMR2DQTLOe6WChpT06x1 21aO9UWKy8D+7vv7o8afi+O05IE+0qr4x8HhdafpS4QQStWvZ1Ybwen0v9Ex3dGgi4aK 6EmotE/UlQMiSMux8aGfguTELqJQQGJ3QHwzyOlvToGCBnncIAsXMCW6J9TYrn55SuVn wgLAfekbkVlkIumNDLFnopOdAUIz/Zo4Ns0QAY/oMz8wx/+SpePfG+E3J5+3hsoRm2BK JUaJm6q3Ki5V9vm+jLdLkZeUkJg6DDkXzgdxEraAG+s4iTO+wx/fUGQh4dsqoHToQiPy vbow== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@jkqxz-net.20210112.gappssmtp.com header.s=20210112 header.b=mzuNqIEA; 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 dt9-20020a170907728900b00872c9d863e9si3325751ejc.529.2023.01.17.14.23.46; Tue, 17 Jan 2023 14:23:46 -0800 (PST) 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.20210112.gappssmtp.com header.s=20210112 header.b=mzuNqIEA; 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 E817868BEAC; Wed, 18 Jan 2023 00:23:43 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CE7F768BD22 for ; Wed, 18 Jan 2023 00:23:37 +0200 (EET) Received: by mail-wm1-f44.google.com with SMTP id g10so23401026wmo.1 for ; Tue, 17 Jan 2023 14:23:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jkqxz-net.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:in-reply-to:references:to:from :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=E8Ug+QEC34onSKv2KdkiSNXBRWifn0ddKRkgqV3X8l8=; b=mzuNqIEAekvTS9cD1NknqN0hVpSLcZg6fbq8V2buI/3CXdpvFWbXHreTur4Ss3jc2B 0IG+9Y1KpqDkgzE8VzyBgX1c83vXG9FqxgTJAf4CdXncMYqngir5T0Hab33ICUXaxKUs 94zI0SlqEw2ISB+rS6fuPrYRyUXtQmLSO9dI+qbXIJO/rm0vt3vx9uUnE3qrR8CVLYBy tdiMRqhcPdChfyMT9iRA78+v/4CmS24ZdIoTvYHAwlX0Idqo9IPPJ0RAN2S8PQjGsMLs r/Zwd4zN1vtXvHJGEuzDxMn0uEUBbgPkOYXhUOIrzZ228xS1SsCGf6q83VwYn4RbRE7j lMsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:references:to:from :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=E8Ug+QEC34onSKv2KdkiSNXBRWifn0ddKRkgqV3X8l8=; b=KwgcY4cwatUzRs7ivlPyKbr7cxFN4YT1FUDr7E6pZx0FHVPDFofzzBbITo8l5Z/nwt jKMhE9bUGAZg5dZuNT7H8rLkTQwJrvuGJJx2ODgd+V03Rr9fu6cdlxyyeBGdPQlz0xh5 eQXglsL3bBx2/P1bN6mjWoQlhnBHMje8S2GjDBiR+uNs3gEbK+nwDRpqkDXJBG8hSi0B IHzRk/k2jEvGdrJEBMmlrv6u6d0a+KqywBO4DALMxcw5UHbMSHD+adkBxIcNLFyNQFxV BT89NnkiNr6qJ8XE119Guh2jK7dAoYi9ijWc4MANNHsxPgN4WVIf8sBfeMUomCbOv+Am IXSQ== X-Gm-Message-State: AFqh2kp4L2IJ/G5wb/UO9pQAi6XGJ4OZhu1xQX0HDfCx+eKVu1IIdW/C wiGhHgIy1IK4CAy3CVKEWdZl8HSy3EVOhlTkCjg= X-Received: by 2002:a05:600c:2d84:b0:3d9:e8b3:57f9 with SMTP id i4-20020a05600c2d8400b003d9e8b357f9mr4743775wmg.8.1673994217210; Tue, 17 Jan 2023 14:23:37 -0800 (PST) Received: from [192.168.0.14] (cpc91224-cmbg18-2-0-cust209.5-4.cable.virginm.net. [81.106.228.210]) by smtp.gmail.com with ESMTPSA id p2-20020a05600c358200b003cffd3c3d6csm164933wmq.12.2023.01.17.14.23.36 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 17 Jan 2023 14:23:36 -0800 (PST) Message-ID: Date: Tue, 17 Jan 2023 22:23:22 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.0 Content-Language: en-US From: Mark Thompson To: FFmpeg development discussions and patches References: <9f33d721-b3a5-dc8d-6048-4bc096d9abfe@jkqxz.net> In-Reply-To: <9f33d721-b3a5-dc8d-6048-4bc096d9abfe@jkqxz.net> Subject: [FFmpeg-devel] [PATCH 2/2] cbs_av1: Don't reject unknown metadata 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: oTSPQDSS1C3Y Accept it and pass it through unchanged. The standard requires that decoders ignore unknown metadata, and indeed this is tested by some of the Argon coverage streams. --- Artificial test example: [trace_headers @ 0x5596dda6ed80] OBU header [trace_headers @ 0x5596dda6ed80] 0 obu_forbidden_bit 0 = 0 [trace_headers @ 0x5596dda6ed80] 1 obu_type 0101 = 5 [trace_headers @ 0x5596dda6ed80] 5 obu_extension_flag 0 = 0 [trace_headers @ 0x5596dda6ed80] 6 obu_has_size_field 1 = 1 [trace_headers @ 0x5596dda6ed80] 7 obu_reserved_1bit 0 = 0 [trace_headers @ 0x5596dda6ed80] 8 leb128_byte[0] 00001101 = 13 [trace_headers @ 0x5596dda6ed80] 8 obu_size = 13 [trace_headers @ 0x5596dda6ed80] 16 leb128_byte[0] 00101010 = 42 [trace_headers @ 0x5596dda6ed80] 16 metadata_type = 42 [trace_headers @ 0x5596dda6ed80] Unknown Metadata [trace_headers @ 0x5596dda6ed80] 24 payload[0] 00000000 = 0 [trace_headers @ 0x5596dda6ed80] 32 payload[1] 00000001 = 1 [trace_headers @ 0x5596dda6ed80] 40 payload[2] 00000010 = 2 [trace_headers @ 0x5596dda6ed80] 48 payload[3] 00000011 = 3 [trace_headers @ 0x5596dda6ed80] 56 payload[4] 00000100 = 4 [trace_headers @ 0x5596dda6ed80] 64 payload[5] 00000101 = 5 [trace_headers @ 0x5596dda6ed80] 72 payload[6] 00000110 = 6 [trace_headers @ 0x5596dda6ed80] 80 payload[7] 00000111 = 7 [trace_headers @ 0x5596dda6ed80] 88 payload[8] 00001000 = 8 [trace_headers @ 0x5596dda6ed80] 96 payload[9] 00001001 = 9 [trace_headers @ 0x5596dda6ed80] 104 payload[10] 00001010 = 10 [trace_headers @ 0x5596dda6ed80] 112 trailing_one_bit 1 = 1 [trace_headers @ 0x5596dda6ed80] 113 trailing_zero_bit 0 = 0 [trace_headers @ 0x5596dda6ed80] 114 trailing_zero_bit 0 = 0 [trace_headers @ 0x5596dda6ed80] 115 trailing_zero_bit 0 = 0 [trace_headers @ 0x5596dda6ed80] 116 trailing_zero_bit 0 = 0 [trace_headers @ 0x5596dda6ed80] 117 trailing_zero_bit 0 = 0 [trace_headers @ 0x5596dda6ed80] 118 trailing_zero_bit 0 = 0 [trace_headers @ 0x5596dda6ed80] 119 trailing_zero_bit 0 = 0 libavcodec/cbs_av1.c | 7 +++++++ libavcodec/cbs_av1.h | 7 +++++++ libavcodec/cbs_av1_syntax_template.c | 26 ++++++++++++++++++++++++-- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/libavcodec/cbs_av1.c b/libavcodec/cbs_av1.c index 45e1288a51..8788fee099 100644 --- a/libavcodec/cbs_av1.c +++ b/libavcodec/cbs_av1.c @@ -1306,9 +1306,16 @@ static void cbs_av1_free_metadata(void *unit, uint8_t *content) md = &obu->obu.metadata; switch (md->metadata_type) { + case AV1_METADATA_TYPE_HDR_CLL: + case AV1_METADATA_TYPE_HDR_MDCV: + case AV1_METADATA_TYPE_SCALABILITY: + case AV1_METADATA_TYPE_TIMECODE: + break; case AV1_METADATA_TYPE_ITUT_T35: av_buffer_unref(&md->metadata.itut_t35.payload_ref); break; + default: + av_buffer_unref(&md->metadata.unknown.payload_ref); } av_free(content); } diff --git a/libavcodec/cbs_av1.h b/libavcodec/cbs_av1.h index 1fc80dcfa0..36848d4410 100644 --- a/libavcodec/cbs_av1.h +++ b/libavcodec/cbs_av1.h @@ -370,6 +370,12 @@ typedef struct AV1RawMetadataTimecode { uint32_t time_offset_value; } AV1RawMetadataTimecode; +typedef struct AV1RawMetadataUnknown { + uint8_t *payload; + AVBufferRef *payload_ref; + size_t payload_size; +} AV1RawMetadataUnknown; + typedef struct AV1RawMetadata { uint64_t metadata_type; union { @@ -378,6 +384,7 @@ typedef struct AV1RawMetadata { AV1RawMetadataScalability scalability; AV1RawMetadataITUTT35 itut_t35; AV1RawMetadataTimecode timecode; + AV1RawMetadataUnknown unknown; } metadata; } AV1RawMetadata; diff --git a/libavcodec/cbs_av1_syntax_template.c b/libavcodec/cbs_av1_syntax_template.c index 46f4c5a6b8..3cab02bdd9 100644 --- a/libavcodec/cbs_av1_syntax_template.c +++ b/libavcodec/cbs_av1_syntax_template.c @@ -2007,6 +2007,29 @@ static int FUNC(metadata_timecode)(CodedBitstreamContext *ctx, RWContext *rw, return 0; } +static int FUNC(metadata_unknown)(CodedBitstreamContext *ctx, RWContext *rw, + AV1RawMetadataUnknown *current) +{ + int err; + size_t i; + + HEADER("Unknown Metadata"); + +#ifdef READ + current->payload_size = cbs_av1_get_payload_bytes_left(rw); + + current->payload_ref = av_buffer_alloc(current->payload_size); + if (!current->payload_ref) + return AVERROR(ENOMEM); + current->payload = current->payload_ref->data; +#endif + + for (i = 0; i < current->payload_size; i++) + fbs(8, payload[i], 1, i); + + return 0; +} + static int FUNC(metadata_obu)(CodedBitstreamContext *ctx, RWContext *rw, AV1RawMetadata *current) { @@ -2031,8 +2054,7 @@ static int FUNC(metadata_obu)(CodedBitstreamContext *ctx, RWContext *rw, CHECK(FUNC(metadata_timecode)(ctx, rw, ¤t->metadata.timecode)); break; default: - // Unknown metadata type. - return AVERROR_PATCHWELCOME; + CHECK(FUNC(metadata_unknown)(ctx, rw, ¤t->metadata.unknown)); } return 0;