freeMXF.org http://freemxf.org/forum/ |
|
MXF file UUID and UL's http://freemxf.org/forum/viewtopic.php?f=2&t=67 |
Page 1 of 1 |
Author: | RichardRudek [ Wed Nov 29, 2006 3:02 am ] |
Post subject: | MXF file UUID and UL's |
I'm having trouble reconciling what I'm reading about UUID and UL's in 5.5.8 of the SMPTE eg41-2004 MXF Engineering Guide and what has been implemented in MXFLib (types.h), with what I'm seeing in an MXF file that was produced by an FS100 DTE. A specific example being their ProductID. Here's a snippet of MFXDump run against a file: Quote: Dump an MXF file using MXFLib - using dictionary "T:\MXF data for Richard\dict.xml" Partition at 0x00000000 is for BodySID 0x0000 0x00000000 : ClosedCompleteHeader(PartitionMetadata) 0x00000014 : MajorVersion(UInt16) = 1 0x00000016 : MinorVersion(UInt16) = 2 0x00000018 : KAGSize(UInt32) = 1 0x0000001c : ThisPartition(UInt64) = 0 0x00000024 : PreviousPartition(UInt64) = 0 0x0000002c : FooterPartition(UInt64) = 1575968768 0x00000034 : HeaderByteCount(UInt64) = 4656 0x0000003c : IndexByteCount(UInt64) = 27840 0x00000044 : IndexSID(UInt32) = 1 0x00000048 : BodyOffset(UInt64) = 0 0x00000050 : BodySID(UInt32) = 0 0x00000054 : OperationalPattern(Label) = [060e2b34.0401.0102.0d010201.10020000] 0x00000064 : EssenceContainers(EssenceContainers) 0x0000006c : EssenceContainer(Label) = [060e2b34.0401.0101.0d010301.02026102] Header Metadata: 0x00000584 : Preface(InterchangeObject) 0x00000598 : InstanceUID(UUID) = {570a7c14-d8ca-4af8-91db-c03cd5c660b8} 0x000005ac : LastModifiedDate(Timestamp) = 2006-10-24 9:28:11.000 0x000005b8 : Version(VersionType) = 258 0x000005be : Identifications(Identifications) 0x000005ca : Identification(UUID) = {cce2ed58-9001-05a4-93fe-9d7ede3afb35} 0x000005ca : Identification(UUID) -> Strong Reference to Identification 0x0000062a : Identification(InterchangeObject) 0x0000063e : InstanceUID(UUID) = {cce2ed58-9001-05a4-93fe-9d7ede3afb35} 0x00000652 : ThisGenerationUID(UUID) = {51e9bfe1-eac4-867e-c323-fca15df7d6a1} 0x00000666 : CompanyName(UTF16String) = Focus Enhancements, Inc. 0x0000069a : ProductName(UTF16String) = FireStore 0x000006b0 : VersionString(UTF16String) = v1.4 0x000006bc : ProductUID(UUID) = [65000000.0000.0000.46697265.53746f72] 0x000006d0 : ModificationDate(Timestamp) = 2006-10-24 9:28:11.000 From the square brackets and the fact that the element has a type of UUID, this should be a UL. Right ? If so, then if I'm reading 5.5.8 right, the UL shown above is illegal, right ? - not documented in SMPTE spreadsheets. Quote: 5.5.8 Storing ULs and UUIDs in the same property
Some data fields, such as the UID property of the LocalTagEntry batch in the primer, can contain either a UL or a UUID. In this case there is an advantage to using a particular byte order for the UUIDs. All UUIDs have a 1 in the most significant bit of the “clk_seq_hi_res” word (byte 9), whereas all ULs have a 0 in the most significant bit of the first byte. If UUIDs are stored with a byte order that places the “clk_seq_hi_res” word first, then it is always possible to tell if the value is a UL or a UUID by examining the MSB of the first byte. This byte order also prevents the remote possibility of a UUID being stored that matches a registered UL. For these reasons, it is recommended that when any UUID is published for inclusion in a data field that can also contain ULs, the byte order specified for that UUID be the same as the ISO/IEC 11578 default order, but with the upper and lower eight bytes swapped. The section above gives rise to the following guidelines: • A UUID may be stored in a data field of type UL by swapping the top and bottom 8 bytes of the UUID (the most significant bit of the first byte of such a swapped UUID is always 1); • MXF decoders should accept a swapped UUID in a place where a UL is expected. NOTE – AAF uses a compatible byte-swap method for storing ULs and UUIDs in the same properties, which it defines as AUIDs. |
Author: | Matt Beard [ Thu Nov 30, 2006 9:42 am ] |
Post subject: | |
Quote: If so, then if I'm reading 5.5.8 right, the UL shown above is illegal, right ? - not documented in SMPTE spreadsheets.
Right. For some reason there is a common misconception that you can put whatever you want in a UUID field. This is not true - the format is defined by RFC 4122. MXF (and for that matter AAF) use a trick to allow UUIDs and ULs to be used interchangeably; all valid UUIDs have the MSB of the 9th byte set and all ULs start with 0x06. This means that if "end-swap" a UL (you re-order a UL so that the first eight bytes are stored last and the last eight first) you can store it in a UUID field and distinguish it from a genuine UUID. This process is described in EG41 section 5.5.8. So, we have the situation that MXF UUID fields can either store a UUID as defined by RFC 4122 (9th byte has its MSB set) or an end-swapped UL (9th byte is 0x06). What I frequently find is someone has simply put ASCII text in the field instead, such as "MyFirstDevice". This is not a UUID, nor is it an end-swapped UL. If you look at the bytes that are stored in the ProductUID given you will see that they are actually "FireStore". When MXFLib displays a UUID it checks the MSB of the 9th byte; if it is set it displays it as a UUID (with curly brackets), otherwise it end-swaps it and displays it as a UL (with square brackets). If the data is neither a UUID or a UL you will just get garbage! Note: These mixed UUID/ULs are generally called AUIDs. If you do the same trick in reverse (store an end-swapped UUID in a UL field) it seems to be increasingly common to call that an IDAU (you see what they have done? They have end-swapped AUID) |
Page 1 of 1 | All times are UTC |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |