From: Mark Thompson <sw@jkqxz.net> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Subject: [FFmpeg-devel] [PATCH 2/2] cbs_av1: Don't reject unknown metadata Date: Tue, 17 Jan 2023 22:23:22 +0000 Message-ID: <e1346a0a-1261-e597-57eb-8d9a33adaade@jkqxz.net> (raw) In-Reply-To: <9f33d721-b3a5-dc8d-6048-4bc096d9abfe@jkqxz.net> 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; -- 2.39.0 _______________________________________________ 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".
next prev parent reply other threads:[~2023-01-17 22:23 UTC|newest] Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-01-17 22:21 [FFmpeg-devel] [PATCH 1/2] cbs_av1: Add tracing headers for metadata types Mark Thompson 2023-01-17 22:23 ` Mark Thompson [this message] 2023-01-18 20:35 ` [FFmpeg-devel] [PATCH 3/2] cbs_av1: Remove constraint on MDCV luminance values Mark Thompson 2023-01-18 20:38 ` James Almer 2023-01-24 22:29 ` Mark Thompson
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=e1346a0a-1261-e597-57eb-8d9a33adaade@jkqxz.net \ --to=sw@jkqxz.net \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git