AMWA Application Specification AS-02 MXF Versioning
AMWA Application Specification AS-02 MXF Versioning
AMWA Application Specification AS-02 MXF Versioning
This motivates content owners to search for more efficient ways of creating the media required for different distribution channels. One common way of looking at the world is to consider the media factory shown in figure 1.
Media Factory
STREAM
Figure 1: Media factory The media factory accepts its input in the form of tapes and files. Its role is to deliver the revenue generating deliverables to the downstream services and devices. The media factory may be a business in its own right, or it may be a function within a larger facility. As facilities migrate to file-based working from tape-based working, the media factory concept is appearing in organizations around the world. To make this media factory efficient and measurable is a business decision, ensuring that costs and efficiencies can be calculated.
Copyright 2011 AMWA NOTES The users attention is called to the possibility that implementation and compliance with this specification may require use of subject matter covered by patent rights. By publication of this specification, no position is taken with respect to the existence or validity of any claim or of any patent rights in connection therewith. The AMWA, including the AMWA Board of Directors, shall not be responsible for identifying patents for which a license may be required by an AMWA specification or for conducting inquiries into the legal validity or scope of those patents that are brought to its attention.
Today, many media organizations do not keep the kind of Key Performance Indicators (KPIs) that would be traditionally employed if the factory were making mechanical widgets. There have been a number of revolutions in the overall design of mechanical factories in recent years that we can use to help our overall design of a media factory. "Lean Manufacturing", "Kanban" scheduling and "Total Quality Management" are all hot topics in factory design. There is no universal right answer to the way in which a factory should be built, but all of these mechanisms are aimed at the one central goal: Reduce waste.
In order to achieve this, it is important to know what waste in a media factory actually is. The list can be quite long, but the high-level view includes: Moving media that does not need to be moved; Keeping media that does not need to be kept; Copying media that does not need to be copied; Processing media that does not need to be processed; Taking too long to process media that could be processed more quickly; Deleting data or metadata that needs to be recreated in a later process; Re-keying data or metadata that was previously known; Making a tape from a file that was previously a tape.
In general, waste in a media factory is the same as waste in any other factory. In achieving the result that the business needs, materials, time and/or resources are used unnecessarily. The MXF file format was designed to associate metadata and media so that factories could be created that were much more efficient than tape-based factories. It seems, however, that these factories have not magically appeared because of a large number of factors that need to be considered when migrating from a tape-based world to a file-based world. The MXF file format was developed to provide a wrapper agnostic to the number of audio channels. or the compression format, or the resolution of the video. It was developed to provide a metadata-rich way of performing business processes on an asset whilst leaving the fine detail to the underlying machines that manipulate the pixels. To allow a step change in waste reduction to be realized, the AS-02 application specification defines an efficient way of using MXF within the media factory. This is also a step change in cost-efficiency of handling media. A key factor in this cost-efficiency is that AS-02 is an application specification for MXF users to build workflows. Its design is oriented towards low-cost, high-efficiency media factories rather than towards any one vendors view of the world. The underlying design brings the best from the MXF media world and the best from the IT world to allow standards-based workflows to be created without requiring expensive customization. AS-02 can be considered as a set of constraints on the SMPTE-MXF toolbox. It is not a new MXF standard. It is a way of making the best use of the tools that exist. MXF was standardized in 2004 by the SMPTE. Since then, a large number of products, services and tools have been created that use MXF. The product types are split into three broad categories: 1. 2. 3. OP1a interleaved devices and tools largely operating on files as if they were tapes; Atoms / referenced file devices largely operating on source elements; Generic toolkits, SDK and transcoding tools gluing the world together.
Neither the OP1a nor the atom way of using MXF is currently optimized for building a good factory.
Page 2 of 43
AS-02-10-2011-11-18 MXF Versioning Factories based on interleaved OP1a make the world look as much like a tape as possible to ease the migration from tape to file. This is a good thing because it introduces basic file-based working and the associated quickwin benefits. These benefits include faster than real time transfers and aggregation of large volumes of content onto single server, realizing genuine savings. These savings allow the concept of a media factory to be created in an otherwise tape-based world. The OP1a format has one major design principle interleave the video and audio so that you always have the data for one frame of video close to the data for the synchronized sound. This is great for an acquisition device like a camera or for a playback device - like a single channel playout server - for which AS-03 is a good fit. However, this can lead to serious waste for media factory operations. For example, if you need to create a stereo audio from the surround sound audio track, why should you have to transfer the video at the same time? 90% of the data transferred is not touched. This is waste. The OP-Atom format (SMPTE 390M-2004), as used in Avid environments and Panasonic P2 cameras, was optimized for storing individual essence components in editing environments. The actual essence storage is almost perfect for a factory environment. The problem comes with the way in which the individual components are synchronized: OP-Atom synchronizes the components within each OP-Atom file, allowing for only one version; The dCinema community makes use of an XML structure for the same role.
The goal of the AS-02 work was to create a factory format that supports multiple versions and with no reinvention, making use of metadata-only MXF (SMPTE 377-1-2009) to provide component synchronization. With as few constraints as possible, we had to use the tools in MXF as they were written and implemented. One lesson learned in lean manufacturing is that if you get it right, it should feel like the design is just on the edge, where on the edge means: You could write some more specification, but it wouldn't be widely used; If you deleted any of the specification, you would lose many of the benefits.
MXF is only a file format. It is a tool that allows you to build a better media factory. Like all tools, it can be used well and it can be misused. The AS-02 application specification contains many - but not all - of the rules that you need to build a media factory. It only contains the rules that relate to the file format. Other rules are required to put the system together, such as those to do with communication between AS-02 processes and AS-02 services. An interface specification that creates a common dialog for interoperable services between media factories is a likely topic for a future AMWA specification. When a media asset is used within a media factory, there are several ways in which it can be used: The unique identifier of the asset. Sometimes a filename, a house number or an UMID. The standardized metadata of the asset. Sometimes a database record, a MXF header or a QT header. The custom metadata of the asset. Often an XML file that may be lost when the asset is exchanged. A component of the asset. The video data or the data in one of the audio tracks. A simple version of the asset. The English soundtrack Internet version or the HD version. A complex version of the asset. Edited for family or aircraft viewing. A group of versions of the asset. All the mobile phone versions or the region 1 DVD versions.
Note how we are using the word asset and not the word file. You will see this is important when we come to talk about real implementations later. Also note that most of the uses of the term asset refer to anything from abstract metadata to several physical files. Most asset management systems have developed ways to handle
Page 3 of 43
AS-02-10-2011-11-18 MXF Versioning this complexity inside their databases. Prior to AS-02, no one had yet standardized the factory format that allows any two vendors to build products to that specification and have their equipment work out-of-the-box. AS-02 is a stable, specified way of using MXF that leads to efficient media factory design. It was originally designed by a group of ten companies to meet the needs of a single user who had a vision of an ultra-efficient media factory and has now been deployed in several facilities around the world. The uses of a media file given above were considered and application rules were written that allow devices to use MXF (was SMPTE 377M2004, now updated to SMPTE 377-1-2009) to achieve all of the use cases.
Contents
Executive summary .................................................................................................................. 1
Contents ................................................................................................................................. 4
1
Scope ............................................................................................................................... 6
2
Conformance language ....................................................................................................... 6
3
Reference documents ......................................................................................................... 7
4
Overview ........................................................................................................................... 7
4.1
File format requirements (informative) ......................................................................... 7
4.2
General AS-02 and shims ............................................................................................ 8
4.3
Asset structure, versions and bundles .......................................................................... 8
4.3.1
Introduction to the structure (informative) ............................................................ 8
4.3.2
MXF and non-MXF operations (informative) ........................................................ 10
4.3.3
AS-02 asset structure ........................................................................................ 11
4.3.4
Essence component file ..................................................................................... 11
4.3.5
Version file ....................................................................................................... 11
4.3.6
Simple version file ............................................................................................. 12
4.3.7
Bundle ............................................................................................................. 12
4.3.8
Simple bundle................................................................................................... 13
4.3.9
Extra folder ...................................................................................................... 13
4.3.10
Extra folder role of a file ............................................................................... 13
4.3.11
Manifest file .................................................................................................... 14
4.3.12
Shim file ......................................................................................................... 14
5
Version file parameters and constraints ............................................................................. 14
5.1
Provision categorization ............................................................................................ 14
5.2
No essence in the version file .................................................................................... 14
5.3
Partitions carrying header metadata in the version file ................................................ 14
5.4
MXF header constraints in a version file ..................................................................... 14
5.5
MXF header constraints in a simple version file ........................................................... 15
5.6
Closed and complete metadata in the version file footer partition ................................. 16
5.7
No essence stream index tables in a version file ......................................................... 16
5.8
Version file KAG size of 1 .......................................................................................... 16
5.9
Minimum simple version duration .............................................................................. 16
5.10
Media integrity check for essence components .......................................................... 16
5.11
Channel mapping with track numbers ....................................................................... 16
5.12
Timecode ................................................................................................................ 17
5.13
Descriptive metadata parameters and constraints ...................................................... 17
5.13.1
SOM/EOM....................................................................................................... 17
5.13.2
Other descriptive metadata schemes ................................................................ 17
6
Essence component file parameters and constraints ........................................................... 17
6.1
Essence track parameters and constraints .................................................................. 17
6.1.1
General ............................................................................................................ 17
6.1.2
Mono essence................................................................................................... 17
6.1.3
Interleaving ...................................................................................................... 18
6.1.4
Partitions ......................................................................................................... 18
Page 4 of 43
AS-02-10-2011-11-18 MXF Versioning 6.1.5 Index tables ..................................................................................................... 18 6.1.6 Video ............................................................................................................... 19 6.1.7 Audio ............................................................................................................... 19 6.1.8 Closed captioning and subtitles .......................................................................... 20 6.1.9 Other VBI and ANC data .................................................................................... 21 6.2 Header metadata and operational pattern constraints ................................................. 22 6.2.1 Baseline operational pattern .............................................................................. 22 6.2.2 Essence container label ..................................................................................... 22 6.2.3 System item ..................................................................................................... 22 6.2.4 Timecode ......................................................................................................... 22 6.2.5 Random index pack .......................................................................................... 23 6.2.6 KAG size .......................................................................................................... 23 6.3 Header metadata parameters and constraints ............................................................. 23 6.3.1 Package labeling ............................................................................................... 25 7 Legacy bundles ................................................................................................................ 25 7.1 Legacy bundles ........................................................................................................ 25 7.2 Legacy shim identification - compliance ID ................................................................. 26 7.2.1 DMS-AS compliance ID ...................................................................................... 26 8 Generic shim ................................................................................................................... 27 8.1 Shim identifier .......................................................................................................... 27 8.2 Shim ....................................................................................................................... 27 8.3 General essence ....................................................................................................... 27 8.4 Picture components .................................................................................................. 28 8.5 Sound components ................................................................................................... 28 8.6 Caption components ................................................................................................. 28 8.7 Other VANC / VBI components .................................................................................. 29 8.8 Version files ............................................................................................................. 29 8.9 Header metadata ..................................................................................................... 30 8.10 Bundle .................................................................................................................... 30 8.11 Descriptive metadata ............................................................................................... 30 9 Manifest file format .......................................................................................................... 30 9.1 Manifest structure .................................................................................................... 31 9.1.1 Bundle name element ....................................................................................... 31 9.1.2 Bundle identifier element ................................................................................... 31 9.1.3 Creator element ................................................................................................ 31 9.1.4 Creation date element ....................................................................................... 32 9.1.5 Annotation text element (optional) ..................................................................... 32 9.1.6 File list element ................................................................................................ 32 9.2 File element ............................................................................................................. 32 9.2.1 File identifier element ........................................................................................ 33 9.2.2 Role element .................................................................................................... 34 9.2.3 Size element..................................................................................................... 34 9.2.4 Path element .................................................................................................... 34 9.2.5 Media integrity check element (optional) ............................................................ 34 9.2.6 Annotation text element (optional) ..................................................................... 35 9.3 XML schema for manifests ........................................................................................ 35 9.4 Sample manifest file (informative) ............................................................................. 36 10 Shim file format ............................................................................................................. 38 10.1 Shim structure ........................................................................................................ 38 10.1.1 Shim name element ........................................................................................ 38 10.1.2 Shim identifier element.................................................................................... 38 10.1.3 Annotation text element (optional) ................................................................... 38 10.1.4 Application specification element (optional) ....................................................... 39 10.2 XML schema for shims ............................................................................................. 39
Page 5 of 43
AS-02-10-2011-11-18 MXF Versioning 10.3 Sample XML shim file (informative) ........................................................................... 39 Annex A. AS-02 sample shim document (informative) ............................................................ 40 A.1 Essence component files ........................................................................................... 40 A.2 Simple version files .................................................................................................. 41 A.3 Version files ............................................................................................................. 41 A.4 Metadata in MXF-AS-02 ............................................................................................ 42 A.5 Bundle .................................................................................................................... 42 Annex B. Registered manifest file roles (normative) ............................................................... 43
1 Scope
AMWAs application specification AS-02 defines the building blocks of interoperable media factories, the media facilities where the versioning of assets takes place. The specification provides a lean and efficient approach to working with file-based media that is intended to reduce waste as part media facility operations, e.g. by avoiding unnecessary copy operations or the re-keying of metadata. Rather than specifying a new file format, AS-02 provides constraints on the structure and use of standardized MXF files to provide new opportunities for interoperability both within and between media facilities. The design of AS-02 recognizes that individual facilities are likely to have some variations, specifically in the types of codecs and essence that are allowed. Also, variation is expected in the specific metadata rules and audio channel arrangements. For that reason, the AS-02 specification includes a shim specification that takes the rules of AS-02 and further constrains them for use in a facility. This has the goal that manufacturers can build MXF-compliant equipment, conforming to the AS-02 specification, and they know that properties subject to shim specification need to be exposed to the end user. This allows the end user to build a customized workflow by configuring a piece of generic software / equipment and yet retain the interoperability that comes with a constrained open standard. Note: In a managed AS-02 environment within a single facility, the physical layout rules of AS-02 may be relaxed. The rules shall not be relaxed for business-to-business interchange.
2 Conformance language
Normative text is text that describes elements of the design that are indispensable or contains the conformance language keywords: "shall", "should", or "may". Informative text is text that is potentially helpful to the user, but not indispensable, and can be removed, changed, or added editorially without affecting interoperability. Informative text does not contain any conformance keywords. All text in this document is, by default, normative, except: the Introduction, any section explicitly labeled as "informative" or individual paragraphs that start with "Note: The keywords "shall" and "shall not" indicate requirements strictly to be followed in order to conform to the document and from which no deviation is permitted. The keywords, "should" and "should not" indicate that, among several possibilities, one is recommended as particularly suitable, without mentioning or excluding others; or that a certain course of action is preferred but not necessarily required; or that (in the negative form) a certain possibility or course of action is deprecated but not prohibited. The keywords "may" and "need not" indicate courses of action permissible within the limits of the document. The keyword reserved indicates a provision that is not defined at this time, shall not be used, and may be defined in the future. The keyword forbidden indicates reserved and in addition indicates that the provision will never be defined in the future. A conformant implementation according to this document is one that includes all mandatory provisions ("shall") and, if implemented, all recommended provisions ("should") as described. A conformant implementation need not implement optional provisions ("may") and need not implement them as described. Published specification - Copyright 2011 AMWA AMWA-AS-02-10-2011-11-18_MXF_Versioning.doc Version 1.0, Nov-18-2011 Page 6 of 43
AS-02-10-2011-11-18 MXF Versioning Unless otherwise specified, the order of precedence of the types of normative information in this document shall be as follows: Normative prose shall be the authoritative definition; Tables shall be next; followed by formal languages; then figures; and then any other language forms.
3 Reference documents
The following standards contain provisions that, through reference in this text, constitute provisions of this recommended practice. At the time of publication, the editions indicated were valid. All standards are subject to revision, and parties to agreements based on this recommended practice are encouraged to investigate the possibility of applying the most recent edition of the standards indicated below. SMPTE SMPTE SMPTE SMPTE SMPTE SMPTE SMPTE SMPTE SMPTE SMPTE SMPTE SMPTE SMPTE W3C W3C W3C W3C W3C IETF IETF IETF IETF IETF 330M-2004 Television Unique Material Identifier (UMID) 377-1-2009 Material Exchange Format (MXF) File Format Specification 378M-2004 Television Material Exchange Format (MXF) Operational Pattern 1a 379-1-2009 Material Exchange Format (MXF) MXF Generic Container 380M-2004 Television Material Exchange Format (MXF) Descriptive Metadata Scheme-1 381M-2005 Television Material Exchange Format (MXF) Mapping MPEG Streams into the MXF Generic Container 382M-2007 Material Exchange Format - Mapping AES3 and Broadcast Wave Audio into the MXF Generic Container 391M-2004 Television Material Exchange Format (MXF) Operational Pattern 1b 393M-2004 Television Material Exchange Format (MXF) Operational Pattern 2b 407M-2006 Television MXF Operational Patterns 3a and 3b 410-2008 Material Exchange Format - Generic Stream Partition 436-2006 Television MXF Mappings for VBI Lines and Ancillary Data Packets 2029-2009 Uniform Resource Names for SMPTE Resources
Extensible Markup Language (XML) 1.0 (Fifth Edition) Namespaces in XML 1.0 (Third Edition) XML Schema Part 0: Primer (Second Edition) XML Schema Part 1: Structures (Second Edition) XML Schema Part 2: Datatypes (Second Edition) RFC RFC RFC RFC RFC 1321 1738 2104 3174 4122 The MD5 Message Digest Algorithm Uniform Resource Locators (URL) HMAC: Keyed-Hashing for Message Authentication US Secure Hash Algorithm 1 (SHA1) A UUID URN Namespace
4 Overview
4.1 File format requirements (informative)
AS-02 addresses the problem of having a common file format in a facility that has to handle many input formats and make many output formats. In an ideal world, a single essence representation would be standardized on. Unfortunately, over time, requirements for a facility change. The facility that started as SD introduces HD. The compression format of today gets replaced with a better one from tomorrow. Todays stereo audio gets upgraded to multi-channel and multi-lingual. In parallel, a facility operates with a constant pressure to reduce the cost of production, distribution and publishing. In order to build systems that work at the MXF level rather than at the MPEG, JPEG2000 or DV level, AS-02 is an application specification providing a set of rules that MXF encoders and MXF decoders must follow. This Published specification - Copyright 2011 AMWA AMWA-AS-02-10-2011-11-18_MXF_Versioning.doc Version 1.0, Nov-18-2011 Page 7 of 43
AS-02-10-2011-11-18 MXF Versioning brings many advantages. It allows a device to query the image size without having to implement a decoder for each essence type you simply read the MXF. It allows a business process to be specified with an action such as: If (16:9) then transcode(centre-cut-out) This action can be specified without the executor of process, human or system, needing to know the details of underlying codec type that is something for the transcoder to figure out. In general, this allows business systems to deliver work order requests to content-manipulation devices, which are in turn configured to support delivery specifications.
Page 8 of 43
media extra
Figure 2: AS-02 file structure a bundle In IT file-based operations, reference to the asset is by its root folder. Within that folder will exist one or more version files that reference media stored in the media subfolder, as shown in figure 3.
media
asset_v0.mxf asset_a0.mxf
Media is forward referenced from the version file . A media file is referred to as an Essence Component file.
Page 9 of 43
AS-02-10-2011-11-18 MXF Versioning Extra metadata and content that is not MXF-wrapped is stored in the extra folder. An example of a typical extra folder is shown in figure 4. You can see in the figure that any customized metadata type is permitted within AS-02, but may be further restricted within a shim. The root folder contains two XML documents that are used to manage the asset. The first of these is the manifest (section 9) that lists all the files in the bundles. The second of these is the shim (section 10) that provides an identifier for the shim that was used at the time the bundle was created or last modified.
amwa.tv qc-vendor.com
Extras link to the mxf version or media files using non-MXF (possibly proprietary) mechanisms
Page 10 of 43
Page 11 of 43
AS-02-10-2011-11-18 MXF Versioning 7. A version file may reference any of the essence components in the media folder. 8. Multiple references may be made to some essence components. 9. In some communities, the term composition is used as a substitute for the term version. The term AS-02 composition file shall be treated as equivalent to the term AS-02 version file. 10. In applications where non-MXF version information is required, it shall be stored in an XML file in the root folder and shall have the same name as the related .mxf file that stores the media synchronization information. 11. Version files may refer to multiple video, audio, and data tracks. In the case that they do, the precedence of the tracks shall be determined by the MXF track number property. Unique and non-zero track numbers shall be used.
4.3.7 Bundle
All the files belonging to the asset shall be stored beneath a single root folder of a bundle. Figure 2 shows the logical structure of an AS-02 asset bundle. The bundle of files shall have the following properties: 1. The name of the root folder shall be considered as the identification filename of the bundle. 2. All version files shall be placed in the root folder. 3. All essence components that can be referenced by a version file shall be placed in a subfolder called "media". Note: This includes unreferenced essence that may be re-linked at some later date. 4. All other files not referenced by a version file shall be placed in a subfolder called "extra". 5. Other subfolders may exist, but are not used in this application specification. 6. File system linking mechanisms shall not be used within the AS-02 bundle, i.e. all files under the root folder shall be physically stored there. The maximum number of versions in a bundle may be constrained by the max_versions shim parameter.
Shim parameter
max_versions
Definition Default value: unlimited Type: positive integer and unlimited Values: 1 to unlimited Maximum number of version files permitted in a bundle.
Page 12 of 43
Note: This bundle is intended for use in single version applications, such as on a playout server. It is intended for deterministic access, easy essence tracking and easy deletion. In a simple bundle, each of the essence component files shall be referenced from at most one OP1b program version header. Note: This provides for a simple and error-free content aging / content deletion strategy that does not require reference counting.
Subfolders within the extra folder shall be used to manage individual metadata files to prevent filename collisions and the inadvertent overwriting of files. It is recommended that individual business should put their private metadata in a folder with a name corresponding an established Internet domain name. For example: AMWA metadata is stored in: Sony metadata would be stored in: BBC metadata would be stored in: extra/amwa.tv/ extra/sony.com/ extra/bbc.co.uk/
The management of the data in each business folder is outside the scope of this specification but may form part of an individual shim.
Page 13 of 43
Shims shall always express constraints that are equal to or stronger than the general specification. The sections below define the general provisions that shall apply to all AS-02 files. Named parameters are specified whose values shall define further constraints that apply in specific shims. A distinctive font is used for the names of parameters. To enable automated processing of shims, the names are chosen to be unique across the AS-02 namespace, and are syntactically valid XML NCNames.
Definition Default value: false Type: boolean Values: true, false When true, there may be generic stream containers in the version file.
Note: An essence container refers to the use of the MXF Generic Container to carry a stream of picture or sound essence. Use of the MXF Generic Container to carry generic data streams in version files is acceptable if the shim parameter defined above is set to true.
Essence Container Data Operational Pattern Material Package Source Package (File / Physical) Sequence (all cases) SourceClip (Picture, Sound, Data) Network Locator
Definition Default value: 1 frame Type: free text The smallest duration that can be used in a material package timeline source clip property. When complex essence types are in use, such as for long-GOP MPEG, this parameter needs to specify whether or not sub-clips may start or end within GOPs / access units or other structural elements of the encoding scheme.
sync_cut
Default value: false Type: boolean When true, material package source clips are constrained such that all tracks shall cut synchronously. This effectively constrains version files to be OP2b butt-edits of pre-conformed clips. When false, the version file may become an OP3b edit decision list.
Page 15 of 43
5.6 Closed and complete metadata in the version file footer partition
During update of a version file, the header of the file may be in the progress of being updated. Applications reading the file should atomically read the closed and complete header metadata partition (it is small) and shall use that version of the metadata. If it is found that the version file header is open and the footer is closed, then this should be indicative of an update in progress and appropriate caution should be taken.
Definition Default value: 10 seconds Type: floating point Values: gently-constrained The minimum simple version duration parameter ensures that in an application specification, performance criteria can be specified that reflects the operation of a facility. For example, simple versions with a duration value of a single frame may not play out correctly.
Definition Default value: essence_only Type: enumeration Values: essence_only, entire_file, no_mic Version files may contain media integrity check information of the entire essence component file (entire_file), just the essence stream (essence_only) or not at all (no_mic). Essence component files shall only contain this metadata when the version files sign essence_only.
mic_type
Default value: crc32 Type: list of permitted enumerations Values: HMAC-SHA1, crc32, crc16, md5 Version files may contain a media integrity check using one of the valid mechanisms.
Definition Default value: false Type: boolean Values: true, false When using audio components in an application that involves physical mapping of audio to ports on equipment, it is necessary to identify which of the audio essence components are mapped to which output channel. This is done via the track number property in the material package tracks. A true value indicates that track numbers shall be present and may be used by equipment. A false value indicates that track numbers may exist in the file, but should not interpreted by equipment
Page 16 of 43
5.12 Timecode
Shim parameter
tc_mode
Definition Default value: file_specific Type: enumeration Values: DF, NDF, file_specific. The timecode counting mode of a version file may be specified so that file writers create consistent outputs. Drop Frame (DF), non-Drop Frame (NDF) or file_specific values are permitted. When working with 50Hz material, the value NDF is recommended. When working with 60Hz or 24Hz material DF or NDF is recommended according to the working practises of the facility. A value of file_specific is intended for applications and facilities where DF or NDF cannot be known apriori.
These parameters are described in the sections below. Parameters may be further constrained by shims as described in the annexes or external documents.
Page 17 of 43
6.1.3 Interleaving
AS-02 files shall not contain interleaved essence components.
6.1.4 Partitions
A partition in an AS-02 compliant essence component file shall only have one of the following types of data in it: Header metadata; Essence; Index table; SMPTE 410-2008 generic stream.
Definition Default value: 60 seconds Type: floating point Values: strongly-constrained for frame wrapped files Body partitions in a frame wrapped file shall occur at regular temporal spacing indicated by this parameter. Regular shall mean that any variation in the regularity shall be less than the smaller of 1 second or 10% of the period partition_spacing.
Shim parameter
partition_spacing
Clip wrapped files shall have the following structure: a header partition; one body partition with an index table; one body partition with clip wrapped essence; a footer partition. This is shown in figure 5.
Figure 5: Clip wrapped file partition structure A RIP shall be present in all essence component files.
Definition Default value: lead Type: enumeration Values: lead, follow or file_specific At each partition point in a given frame wrapped essence component file, the index partition shall either lead (i.e. precede) the essence partition that it indexes or follow the essence partition that it indexes. This shall be specified application by application. The file_specific option covers applications where the strategy cannot be defined.
index_strategy_clip
Default value: lead Type: enumeration Values: lead, follow or file_specific As above, but applies to clip wrapped files. When the index tables are calculated (PCM audio), lead means that the calculated index table immediately follows the header partition.
Page 18 of 43
6.1.6 Video
Video essence in AS-02 files may be of one of a selection of compression families and acceptable variability should be defined by individual shims.
Shim parameter
picture_family
Definition Default value: none Type: list of strings A list of supported video essence compression families including any family-specific elements such as GOP structures and profiles, for example MPEG-2 H.264 JPEG2000.
picture_bitrate
Default value: none Type: list of integer ranges A list of supported bitrates or ranges of bitrates for compressed video.
picture_format
Default value: none Type: list of formatted strings A list of permitted video frame sizes and rates, for example 1920/1080/50p/16:9.
picture_component_limit
Default value: 1 Type: non-negative integer or unlimited When a number is given, specifies the maximum number of video essence component files that can be simultaneously decoded from an AS-02 bundle. Note: This parameter allows a facility to document the capacity of their decoding devices, such as playout servers.
6.1.7 Audio
PCM audio files shall contain either mono audio or stereo audio or multi-channel audio. All kinds shall be considered as mono-essence and shall be described by a single track in the file package. PCM audio channels from a different soundfield shall be in different files, for example for different languages. Note: A soundfield is defined as the acoustical space in which the intended audio image is created. This definition is expected to appear in the SMPTE multi-channel audio specification. Therefore, you would not expect different languages to be present within the same soundfield. Note: In existing digital cinema workflows, it is common to find six tracks of audio from a single soundfield combined into a single PCM stream. Stereo and multi-channel audio may be represented as separate PCM audio files. The media file of a bundle may contain both a combined file and separate files for the same audio, with version files used to select the most appropriate representation. Multi-channel audio carried as data in an audio file (e.g. inside a SMPTE 377-1-2009 data container) shall be in a single essence component file and shall be described by a single MXF track in the file package. Audio from a compound essence containers representing more than one soundfield shall be extracted into a separate essence component files to ensure AS-02 compliance. The audio within a compound essence container shall be ignored in AS-02 operations. Compressed audio files may contain multiple channels within a single soundfield, for example 5.1. Compressed audio files shall be described by a single track in the file package.
Page 19 of 43
Definition Default value: none Type: list of strings A list of supported audio essence families including bitrates, permitted soundfield arrangements, compression types and any format specific elements such as delay setting.
audio_file_arrangement
Default value: none Type: free text A description of the physical storage strategy for audio. Typically, this will be of the form mono only files, stereo only files, stereo files with optional Dolby E in a file etc.
audio_component_limit
Default value: unlimited Type: non-negative integer or unlimited When a number is given, specifies the maximum number of audio essence component files that can be simultaneously decoded from an AS-02 bundle. Note: This parameter allows a facility to document the capacity of their decoding devices, such as playout servers.
PCM audio files shall be clip wrapped with a calculated index table. Constant bitrate compressed audio files shall be clip wrapped with a calculated index table. Variable bitrate compressed audio files shall be clip wrapped with a variable bitrate (VBR) index table.
Definition Default value: none Type: list of strings A list of supported data essence types for closed captioning including specific parameters, such as VBI lines.
CC_custom
Default value: false Type: boolean When true, VBI and / or VANC for closed caption data shall be encapsulated in the video essence using a defined method (e.g. carriage in MPEG picture user data). This data shall also be placed in a separate SMPTE 436M essence component file. Note: This provision is to support legacy playback devices and should be avoided wherever possible as it can leads to the SMPTE 436M captions and it custom copy changing independently.
Page 20 of 43
Definition Default value: false Type: boolean When true, VBI data for closed captions shall be encoded as active video within the video image. This data should also be placed in a separate VBI essence component file. Usually, this is only true for SD images that are coded as tall MPEG (i.e. the VBI area is in the active picture).
CC_component_limit
Default value: unlimited Type: non-negative integer or unlimited When a number is given, specifies the maximum number of closed caption files that can be merged when decoding an AS-02 bundle. Note: This parameter allows a facility to document the capacity of their decoding devices, such as playout servers.
Definition Default value: none Type: list of strings A list of supported data essence types including specific parameters such as VBI lines supported.
VBI_custom
Default value: false Type: boolean When true, VBI data shall be encapsulated in the video essence using a defined method (e.g. carriage in MPEG picture user data) as well as being present in a separate VBI essence component file.
VBI_render
Default value: false Type: boolean When true, VBI data shall be encoded as active video within the video image. This data should also be placed in a separate VBI essence component file. Usually, this is only true for SD images that are coded as tall MPEG (i.e. the VBI area is in the active picture).
ANC_data_essence
Default value: none Type: list of strings A list of supported data essence types including specific parameters such as ANC packet types supported.
ANC_custom
Default value: false Type: boolean When true, ANC data shall be encapsulated in the video essence using a defined method (e.g. carriage in MPEG picture user data) as well as being present in a separate ANC essence component file.
Page 21 of 43
Definition Default value: false Type: boolean When true, VBI data shall be encoded as active video within the video image. This data should also be present in a separate ANC essence component file.
data_component_limit
Default value: unlimited Type: non-negative integer or unlimited When a number is given, specifies the maximum number of VBI or VANC files that can be merged when decoding an AS-02 bundle. Note: This parameter allows a facility to document the capacity of their decoding devices, such as playout servers.
data_separation
Default vale: true Type: boolean When true, indicates that all data essence component files for VANC and VBI data shall be split into separate files. When set to false, all VANC and VBI data is merged into a single essence component file. Note: This specification does not permit a mixture of approaches.
Note: This provision is intended to maximize compatibility with legacy MXF decoder applications.
Definition Default value: false Type: boolean Indicates whether it is acceptable for the essence component file to carry timecode in the generic container system item. This provision is intended to capture source timecodes and does not affect the material package of any version file. Whatever the parameter is set to, timecode in any generic container system shall be copied to the file package header metadata, including any discontinuities therein.
6.2.4 Timecode
The timecode of an AS-02 version shall be controlled in the version file. There may be several timecode tracks in the header metadata of an essence component. Timecode mode - drop-frame or non-drop frame - may be specified in each shim.
Page 22 of 43
Definition Default value: none Type: free text Specifies how material package tracks in the essence component file are tagged with metadata, describing a business rule of the presence of absence of tags. This specification may be a private xml specification or a SMPTE specification. For example: "SMPTE MCA language", "SMPTE MCA language & spatial", "none".
There shall be a single essence descriptor for the essence. The edit rates property of a track for material that is frame coded shall be equal to the rate of content packages in the essence. For progressive material, this is the underlying frame rate. For MPEG interlaced material this is usually the frame rate. For interlaced J2k field coded material and for interlaced MPEG field coded material, this is usually the field rate. Clip wrapped audio shall have the edit rate set to the audio sampling rate.
Page 23 of 43
Static Track
Wave Audio Essence Descriptor VBI Data Descriptor ANC Data Descriptor Multiple Descriptor Network Locator Text Locator Timecode
Definition Default value: none Type: extensible enumeration Values: LTC, VITC, DVITC, external, source or <value> Indicates that ingest (file creation) applications shall start the material package timecode and the top-level file package timecode at a given value, or derive it from the specified source.
lead_TC
Default value: FP Type: enumeration Values: MP, FP Indicates that an application requiring the timecode of the component file shall use the lowest numbered by TrackNumber file package timecode track (default) or the material package timecode track of the essence component file.
The header metadata shall always be valid in a component file. This means that the process shown in figure 6 shall be followed:
Page 24 of 43
Figure 6: Valid header metadata process Open and incomplete partitions are created during file writing operation. When the writing operation is finished, the header or footer shall be marked closed and complete. The footer may contain a copy of the header metadata and it shall be marked closed and complete. A random index pack shall follow the footer.
7 Legacy bundles
This section specifies AS-02 structures that have been created prior to the approval of this AS-02 specification document. It is recommended that file readers be able to accept files with these structures.
Page 25 of 43
DMS1
Definition Default value: none Type: UTF-16 string It is recommended that the organization creating the shim uses an XML namespace identifier URI structure as a compliance_id. This minimizes the chances of a compliance_id clash with other organizations. Publishing the shim document at that URL may also encourage other organizations to copy the shim and hence minimize unnecessary invention in the industry. e.g. http://amwa.tv/AS-02-shim/2010/hd-j2k.txt
The compliance_id shall be stored as FrameworkThesaurusName property of a SMPTE 380M Production Framework.
Page 26 of 43
8 Generic shim
8.1 Shim identifier
To aid system designers and equipment vendors, the empty AS-02 generic shim is tabulated in this section. A shim identifier (shim_id) shall identify the shim. This identifier is intended to signal the version of the shim that was in use when the bundle was created or modified.
Shim parameter
shim_id
Definition Default value: none Type: UTF-16 string It is recommended that the organization creating the shim uses an XML namespace URI as a shim_id. This minimizes the chances of a shim identifier clash with other organizations. Publishing the shim document at that URL may also encourage other organizations to copy the shim and hence minimize unnecessary invention in the industry. e.g. http://amwa.tv/AS-02-shim/2010/hd-j2k.txt
The sections below are organized as a sheet to be filled in by a system designer who is constraining their system. An example of a completed shim is given in annex A. Not all the parameters are relevant in every design. Some parameters can be left as none or not applicable (n/a). The entry in the parameter name column is intended for use as the name of an XML element in a machinereadable template for the shim.
8.2 Shim
Dimension Shim ID Description The identifier of this shim. Parameter name
shim_id
AS-02 values
Shim-specific value
partition_spacing
index_strategy_frame
Strong Strong
lead lead
Index_strategy_clip
Page 27 of 43
What picture signal schemes (compression, sampling or other) are encountered in programs? How many bits/second at real time? Picture raster and aspect ratio? Maximum simultaneous video components?
picture_family
Picture bitrate
picture_bitrate
Gentle
none
picture_format picture_component_limit
Gentle Moderate
none 1
What sound signal schemes (compression, sampling or other) are encountered in programs? Physical storage strategy for audio. Maximum simultaneous audio components?
audio_family
audio_file_arrangement
None Moderate
none unlimited
audio_component_limit
What caption essence types are allowed? Captions to be inserted in video in a custom manner? Captions inserted into the active picture? Maximum simultaneous caption components?
CC_data_essence
CC_custom
Moderate
false
CC_render
Moderate
false
CC_component_limit
Moderate
unlimited
Page 28 of 43
VBI essence schemes VBI custom formatting VBI in-vision rendering ANC essence schemes ANC custom formatting ANC in-vision rendering Data component limit Separate data component files
What VBI essence types are allowed? VBI data inserted in video in a custom manner. VBI data to be rendered into the active picture. What VBI essence types are allowed? Captions to be inserted in video in a custom manner. VBI data to be rendered into the active picture. Maximum simultaneous data components? Different types of VBI/VANC in separate files?
VBI_data_essence
None Moderate
None false
VBI_custom
VBI_render
Moderate
false
ANC_data_essence
None Moderate
None false
ANC_custom
ANC_render
Moderate
false
data_component_limit
Moderate
unlimited
data_separation
Moderate
true
Version file complexity Version file bloating Short clip limit Version file complexity File length
Simple version files only? Can generic streams be put in a version file? Shortest length of a clip in an EDL. Is an edl a series of synchronous butt edits? Minimum duration of a simple version. What is the scope of the media integrity check? What algorithm is used for MIC?
simple_versions_only
generic_streams_in_version
sub_clip_limit
Gentle Gentle
1s false
sync_cut
min_sv_dur
Gentle
10s
mic_scope
Moderate
mic_algorithm
Moderate
Page 29 of 43
Channel ID
track_numbers
Timecode
tc_mode
Strong
<shim specific>
Shimspecific constraint
Shim-specific values
System item timecode handling Track tag metadata Ingest timecode handling Timecode precedence
Is the system item timecode copied to the header? How are tracks tagged? What timecode source shall be dominant when creating files? What timecode source shall be dominant when using essence files?
track_tag_policy
None Strong
None none
ingest_TC
lead_TC
Strong
FP
8.10 Bundle
Dimension Description Parameter name
max_versions
Shimspecific constraint
Shim-specific values
Maximum versions
Note: Setting this property to 1 and the simple_version property to true is used to indicate that only simple bundles are acceptable.
Shim identifier
Shim-specific values
Page 30 of 43
AS-02-10-2011-11-18 MXF Versioning The manifest shall be encoded as an XML document (W3C XML 1.0). The manifest file shall be named manifest.xml.
Figure 7: Manifest structure element Note: In figure 7, elements shown with a grey outline are optional.
Page 31 of 43
9.2
File element
A manifest shall contain a list of files and folders. A file (File) element shall represent any file or folder that exists in the AS-02 bundle. Each file shall be described by a file element, as illustrated in figure 8. See the XML schema declaration in section 9.3 of this document for a normative definition. The manifest shall not include a file element entry for the manifest itself.
Page 32 of 43
Figure 8 File element with optional media integrity check Note: In figure 8, elements shown with a grey outline are optional.
Page 33 of 43
AS-02-10-2011-11-18 MXF Versioning The value of the identifier shall be encoded according to the following rules, applied in order: 1. Where the native identifier of the file is a SMPTE UMID (SMPTE 330M) starting with the fixed 16-bytes 060a2b34h 01010105h 01010f20h 13000000h, the last 16-bytes of the UMID shall be used as a UUID encoded as a URN according to IETF RFC 4122. 2. Where the native identifier of the file is a SMPTE UMID (SMPTE 330M), the file identifier shall be encoded as a URN representation of the UMID according to SMPTE 2029-2009. 3. Where the native identifier of the file is a SMPTE universal label, the file identifier shall be encoded as a URN representation of the universal label according to SMPTE 2029-2009. 4. All other files shall have a UUID encoded as a URN according to IETF RFC 4122.
The media integrity check type (type) attribute shall be present and shall indicate the algorithm used to create the media integrity check value for the AS-02 asset. The possible values of this parameter shall be:
hmac-sha1 - secure hash algorithm, as defined in IETF RFC 2104 and IETF RFC 3174; crc32 - 33-bits polynomial length cyclic redundancy check, computed according to CRC-32C (Castagnoli) polynomial; crc16 - 17-bits polynomial length cyclic redundancy check, computed according to the CRC-16-CCITT
Note: For more information on calculating CRCs, the related Wikipedia page is a good place to start. See: http://en.wikipedia.org/wiki/Cyclic_Redundancy_Check. Note: The choice of CRC types is based on ones in common use and easy to decode. The list is left deliberately short to minimize complexity when implementing a decoder. The intention is to replace this section with a reference to AMWA's application specification for content integrity (AS-06) once work is completed. To ensure full coverage of the range of content integrity types, implementers are advised to check the current status of this document and AS-06.
Page 34 of 43
essence component file; entire_file - the media integrity check value was calculated for the entire file, including essence and any wrapper.
9.3
The XML Schema document presented in this section normatively defines the structure of a manifest using a machine-readable language.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mft=http://www.amwa.tv/as-02/1.0/manifest targetNamespace="http://www.amwa.tv/as-02/1.0/manifest" elementFormDefault="qualified" attributeFormDefault="unqualified"> <!-- ManifestType --> <xs:complexType name="ManifestType"> <xs:sequence> <xs:element name="BundleName" type="xs:string"/> <xs:element name="BundleID" type="mft:UUID"/> <xs:element name="Creator" type="xs:string"/> <xs:element name="CreationDate" type="xs:dateTime"/> <xs:element name="AnnotationText" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="FileList"> <xs:complexType> <xs:sequence> <xs:element name="File" type="mft:FileType" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other" processContents="lax"/> </xs:sequence> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:complexType> <!-- FileType --> <xs:complexType name="FileType"> <xs:sequence> <xs:element name="FileID" type="mft:IdType"/> <xs:element name="Role" type="mft:FileRole"/> <xs:element name="Size" type="xs:nonNegativeInteger"/> <xs:element name="Path" type="xs:anyURI"/> <xs:element name="MIC" minOccurs="0"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:hexBinary"> <xs:attribute name="type" type="mft:MICTypeType" use="required"/> <xs:attribute name="scope" type="mft:MICScopeType" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element name="AnnotationText" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other" processContents="lax"/> </xs:sequence> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:complexType>
Page 35 of 43
Note: The schema is available from the AMWA FTP site as file AS-02/AS-02-10-2011-11-17_Manifest.xsd.
Page 36 of 43
Page 37 of 43
10.1
Shim structure
The top-level element in the shim file shall be designated Shim, as shown in figure 9. See the XML schema declaration in Section 10.4 of this document for explicit type information.
Figure 9: Top-level shim structure Note: In figure 9, elements with grey outline are optional.
Page 38 of 43
AS-02-10-2011-11-18 MXF Versioning Note: Annotation text elements are intended only for display as guidance to a user.
10.2
The XML schema document presented in this section normatively defines the structure of a shim file using a machine-readable language.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:shim="http://www.amwa.tv/as-02/1.0/shim" targetNamespace="http://www.amwa.tv/as-02/1.0/shim" elementFormDefault="qualified" attributeFormDefault="unqualified"> <!-- ShimType --> <xs:complexType name="ShimType"> <xs:sequence> <xs:element name="ShimName" type="xs:string"/> <xs:element name="ShimID" type="xs:anyURI" minOccurs="0"/> <xs:element name="AnnotationText" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="ApplicationSpec" type="xs:string" minOccurs="0"/> <xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other" processContents="lax"/> </xs:sequence> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:complexType> <xs:element name="Shim" type="shim:ShimType"/> </xs:schema>
Note: The schema is available from AMWA as FTP site as file AS-02/AS-02-10-2011-11-17_Shim.xsd.
10.3
The following sample shim XML is a valid instance of the shim schema. It is non-functional and intended for informative purposes only.
<?xml version="1.0" encoding="UTF-8"?> <Shim xmlns="http://www.amwa.tv/as-02/1.0/shim" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ShimName>Network HD Contribution</ShimName> <ShimID>http://amwa.tv/AS-02-shim/2010/hd-j2k.txt</ShimID> <AnnotationText>An example shim for HD J2k created by AMWA</AnnotationText> </Shim>
Page 39 of 43
The essence component files contain the video, audio and ancillary data essences that make up the asset. The table below specifies the constraints on the essence and its wrapping as MXF.
# 1 2 Parameter
mono_essence_op1a VBI_custom and ANC_custom
Type
boolean boolean
Value True. All essence components are stored as mono-essence OPa1a files False. All ancillary data, both VBI and ANC in this case, is stored as separate SMPTE 436M streams in essence component files. No other proprietary ANC formats are maintained. False. No ANC or VBI information is rendered into the active picture The following list of video essence types is permitted. Stored in media\*_v0.mxf MXF SMPTE 422M Mapping JPEG 2000 codestreams into the MXF generic container Codec JPEG 2000 Constraints YUV 422 10bit, 100Mbps CDCI picture essence descriptor fields: Essence container UL 06.0E.2B.34.04.01.01.01.0D. 01.03.01.02.0C.01.00 JPEG 2000 picture subdescriptor field values: Rsiz 0 Xsiz 1920 Ysiz 1080 XOsiz 0 YOsiz 0 XTsiz 1920 YTsiz 1080 XTOsiz 0 YTOsiz 0 Csiz 3 Picture component sizing {Number of component = 3, 3, Ssiz0 = 9, XRsiz0 = 1, YRsiz0 = 1, Ssiz1 = 9, XRsiz1 = 2, YRsiz1 = 1, Ssiz2 = 9, XRsiz2 = 2, YRsiz2 = 1} Resolution 1920x1080 23.98p
3 4
audio_family
The following list of audio essence types is permitted. Stored in media\*_a??.mxf. MXF SMPTE 382M Mapping AES3 and Broadcast Wave Audio into the MXF Generic Container Codec Uncompressed BWF Constraints Stored as Stereo pairs. Sampling / structure 24-bit, 48kHz or 96kHz
Page 40 of 43
Parameter
CC_data_essence
Type
Value The following list of data essence types is permitted. Stored in media\*_vanc??.mxf MXF SMPTE 436M MXF mappings for VBI lines and ancillary data packets Contents SMPTE 291M VANC data Coding Processing Packets used to create .scc files in "extra\captions" folder.
7 8 9
10s between partitions. Lagging. Index tables are in the partition after the essence. All MP tracks are tagged with their nominal track position. Video tracks are labeled 1, audio channels are labeled from 1. In a stereo pair, the track number applies to the left channel, the right channel shall take the value of the left channel plus one. 00:57:30;00 is the expected start timecode of the first frame of any complete asset. This depends on the asset being ingested and is not fixed by this specification. MP::TC. The lead timecode shall be taken from the timecode component of the material package of version file. All other MXF timecodes shall be considered to be annotations. http://www.amwa.tv/as-02/hd/v0/2010
10 11
ingest_TC lead_TC
enum enum
12
shim_id
UL list
A.2
A simple version file (SPV) links together the essence components to create a complete asset. The simple version files do not describe any edits to the components.
#
1 2 3 4 5
Parameter
generic_streams_in_version min_sv_dur mic_algorithm mic_scope track_numbers
Type
Boolean Time Enum Enum Boolean
Value False. No generic streams are permitted in a simple version file. 1 sec. The minimum duration of an AS-02 file compliant with this shim is 1 second. N/A Media integrity check is not used. N/A Media integrity check is not used. True. The track numbers will be written into the material package of the version file.
A.3
#
1 2 sync_cut
Version files
Parameter Type
Time boolean
Some facilities only use simple version files. This should be indicated here.
Value 1 sec. The minimum size of a clip built into an edit list is 1 second. True. All of the tracks in present in the version file must be cut synchronously, constraining the version files to be butt-edits of pre-conformed clips.
sub_clip_limit
Page 41 of 43
A.4
Metadata in MXF-AS-02
Here we detail any special metadata to be included in the file or any constraints on the metadata used in the workflow. This section intentionally blank in this case.
# Parameter Type Value
A.5
#
Bundle
Parameter Type Value
Page 42 of 43
qc caption folder
Page 43 of 43