summaryrefslogtreecommitdiff
path: root/libavcodec/cbs_av1_syntax_template.c
diff options
context:
space:
mode:
authorMark Thompson <sw@jkqxz.net>2023-01-24 22:46:21 +0000
committerMark Thompson <sw@jkqxz.net>2023-05-17 19:38:45 +0000
commitdce6cf2c368edae76cd78f3cbfedb8187c3cb4b7 (patch)
treebd78bd088ef0047e5460f1f2d3779f71116053de /libavcodec/cbs_av1_syntax_template.c
parentbee912cb63d9e391818eaed698e6cc6b97b440f1 (diff)
downloadffmpeg-dce6cf2c368edae76cd78f3cbfedb8187c3cb4b7.tar.gz
cbs_av1: Don't reject unknown metadata
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.
Diffstat (limited to 'libavcodec/cbs_av1_syntax_template.c')
-rw-r--r--libavcodec/cbs_av1_syntax_template.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/libavcodec/cbs_av1_syntax_template.c b/libavcodec/cbs_av1_syntax_template.c
index 67a0dddd70..8f4640d1af 100644
--- a/libavcodec/cbs_av1_syntax_template.c
+++ b/libavcodec/cbs_av1_syntax_template.c
@@ -2004,6 +2004,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)
{
@@ -2028,8 +2051,7 @@ static int FUNC(metadata_obu)(CodedBitstreamContext *ctx, RWContext *rw,
CHECK(FUNC(metadata_timecode)(ctx, rw, &current->metadata.timecode));
break;
default:
- // Unknown metadata type.
- return AVERROR_PATCHWELCOME;
+ CHECK(FUNC(metadata_unknown)(ctx, rw, &current->metadata.unknown));
}
return 0;