use leb128 for metadata type and use value 4 for ITU-T T.35 Change-Id: I830f072f4b630a8a89593561f1bc293c998c064f
diff --git a/aom/aom_codec.h b/aom/aom_codec.h index 097d621..a6c68cd 100644 --- a/aom/aom_codec.h +++ b/aom/aom_codec.h
@@ -494,11 +494,11 @@ /*!\brief OBU metadata types. */ typedef enum { - OBU_METADATA_TYPE_PRIVATE_DATA = 0, + OBU_METADATA_TYPE_AOM_RESERVED_0 = 0, OBU_METADATA_TYPE_HDR_CLL = 1, OBU_METADATA_TYPE_HDR_MDCV = 2, OBU_METADATA_TYPE_SCALABILITY = 3, - OBU_METADATA_TYPE_DECODER_MODEL = 4, + OBU_METADATA_TYPE_ITUT_T35 = 4, OBU_METADATA_TYPE_TIMECODE = 5, } OBU_METADATA_TYPE;
diff --git a/av1/decoder/obu.c b/av1/decoder/obu.c index 6a6944c..c08d4d5 100644 --- a/av1/decoder/obu.c +++ b/av1/decoder/obu.c
@@ -318,10 +318,10 @@ return header_size + tg_payload_size; } -static void read_metadata_private_data(const uint8_t *data, size_t sz) { +static void read_metadata_itut_t35(const uint8_t *data, size_t sz) { + struct aom_read_bit_buffer rb = { data, data + sz, 0, NULL, NULL }; for (size_t i = 0; i < sz; i++) { - mem_get_le16(data); - data += 2; + aom_rb_read_literal(&rb, 8); } } @@ -421,19 +421,23 @@ } static size_t read_metadata(const uint8_t *data, size_t sz) { - if (sz < 2) return sz; // Invalid data size. - const OBU_METADATA_TYPE metadata_type = (OBU_METADATA_TYPE)mem_get_le16(data); - - if (metadata_type == OBU_METADATA_TYPE_PRIVATE_DATA) { - read_metadata_private_data(data + 2, sz - 2); + size_t type_length; + uint64_t type_value; + OBU_METADATA_TYPE metadata_type; + if (aom_uleb_decode(data, sz, &type_value, &type_length) < 0) { + return sz; + } + metadata_type = (OBU_METADATA_TYPE)type_value; + if (metadata_type == OBU_METADATA_TYPE_ITUT_T35) { + read_metadata_itut_t35(data + type_length, sz - type_length); } else if (metadata_type == OBU_METADATA_TYPE_HDR_CLL) { - read_metadata_hdr_cll(data + 2, sz - 2); + read_metadata_hdr_cll(data + type_length, sz - type_length); } else if (metadata_type == OBU_METADATA_TYPE_HDR_MDCV) { - read_metadata_hdr_mdcv(data + 2, sz - 2); + read_metadata_hdr_mdcv(data + type_length, sz - type_length); } else if (metadata_type == OBU_METADATA_TYPE_SCALABILITY) { - read_metadata_scalability(data + 2, sz - 2); + read_metadata_scalability(data + type_length, sz - type_length); } else if (metadata_type == OBU_METADATA_TYPE_TIMECODE) { - read_metadata_timecode(data + 2, sz - 2); + read_metadata_timecode(data + type_length, sz - type_length); } return sz;