(57)【要約】【課題】バイナリＭＰＥＧ−４（ｍｐ４）バイナリ・ファイルをＸＭＴ（Ｅｘｔｅｎｓｉｂｌｅ  ＭＰＥＧ−４  Ｔｅｘｔｕａｌ）ファイルに変換する方法、システム、およびコンピュータ・プログラム製品を提供すること。【解決手段】本発明に、ｍｐ４バイナリ・ファイルを表す少なくとも１つの中間構造化文書を生成することが含まれる。トランスレータが、中間文書を入力し、ＸＭＴ構造化文書を生成するように構成される。次に、ＸＭＬシリアライザを使用して、ＸＭＴ構造化文書に基づいてＸＭＴファイルを作成する。
2006517309.tif 000002
【特許請求の範囲】
【請求項１】
ＭＰＥＧ−４（ｍｐ４）バイナリ・ファイルをＸＭＴ（Ｅｘｔｅｎｓｉｂｌｅ  ＭＰＥＧ−４  Ｔｅｘｔｕａｌ）ファイルに変換する方法であって、
前記ｍｐ４バイナリ・ファイルを表す少なくとも１つの中間構造化文書を生成することと、
前記少なくとも１つの中間構造化文書をＸＭＴ構造化文書に変換することと、
前記ＸＭＴ構造化文書に基づいて前記ＸＭＴファイルを作成することと
を含む方法。
【請求項２】
前記中間構造化文書が、ｍｏｏｖアトムおよび１つまたは複数のｍｄａｔアトムを表すデータ構造を含み、前記ｍｏｏｖアトムが、ｉｏｄｓアトムおよび１つまたは複数のｔｒａｋアトムを含む、請求項１に記載の方法。
【請求項３】
前記ｍｄａｔアトムおよびｔｒａｋアトムを表すデータ構造に基づいて外部メディア・ファイルを生成することをさらに含む、請求項２に記載の方法。
【請求項４】
前記中間構造化文書の変換が、ｍｐ４−ｆｉｌｅ構造化文書を生成することを含む、請求項１に記載の方法。
【請求項５】
前記ｍｐ４−ｆｉｌｅ構造化文書が、ｅＸｔｅｍｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅに基づく、請求項４に記載の方法。
【請求項６】
前記ｍｐ４−ｆｉｌｅ構造化文書が、ｍｏｏｖ構造化要素および１つまたは複数のｍｄａｔ構造化要素を含み、前記ｍｏｏｖ構造化要素が、前記ｍｏｏｖアトムを表し、各ｍｄａｔ構造化要素が、前記中間構造化文書によって表される前記ｍｄａｔアトムの１つを表す、請求項４に記載の方法。
【請求項７】
前記ｍｏｏｖ構造化要素が、前記中間構造化文書の対応する部分を表すｉｏｄｓ要素および１つまたは複数のｔｒａｋ要素を含む、請求項６に記載の方法。
【請求項８】
前記ｍｐ４−ｂｉｆｓ構造化文書が、前記ｍｐ４−ｆｉｌｅ構造化文書と別々の別個の文書である、請求項７に記載の方法。
【請求項９】
前記ｍｐ４−ｂｉｆｓ構造化文書が、ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍを表す要素を含む、請求項４に記載の方法。
【請求項１０】
前記ｍｐ４−ｂｉｆｓ構造化文書が、ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍを表す要素を含む、請求項４に記載の方法。
【請求項１１】
前記中間構造化文書の生成が、
前記ｍｐ４バイナリ・ファイルを表すデータ構造の組を生成することと、
データ構造の前記組を前記中間構造化文書に変換することと
を含む、請求項１に記載の方法。
【請求項１２】
前記中間構造化文書の変換が、ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍを表すｍｐ４−ｂｉｆｓ構造化文書を生成することを含む、請求項１に記載の方法。
【請求項１３】
ＭＰＥＧ−４（ｍｐ４）バイナリ・ファイルをＸＭＴ（Ｅｘｔｅｎｓｉｂｌｅ  ＭＰＥＧ−４  Ｔｅｘｔｕａｌ）ファイルに変換するシステムであって、
前記ｍｐ４バイナリ・ファイルを入力し、前記ｍｐ４バイナリ・ファイルを表す少なくとも１つの中間構造化文書を生成するように構成されたバイナリ・ファイル・デコーダと、
前記中間構造化文書を入力し、ＸＭＴ構造化文書を生成するように構成されたトランスレータと、
前記ＸＭＴ構造化文書を入力し、前記ＸＭＴファイルを生成するように構成されたＸＭＴシリアライザと
を含むシステム。
【請求項１４】
前記少なくとも１つの中間構造化文書が、ｍｏｏｖアトムおよび１つまたは複数のｍｄａｔアトムを表すデータ構造を含む、請求項１３に記載のシステム。
【請求項１５】
ｍｏｏｖアトムを表すデータ構造が、ｉｏｄｓアトムおよび１つまたは複数のｔｒａｋアトムを表すデータ構造を含む、請求項１４に記載のシステム。
【請求項１６】
前記ｍｄａｔアトムおよびｔｒａｋアトムを表す前記データ構造に基づく１つまたは複数の外部メディア・ファイルをさらに含む、請求項１５に記載のシステム。
【請求項１７】
前記少なくとも１つの中間構造化文書が、ｍｐ４−ｆｉｌｅ構造化文書を含み、前記ｍｐ４−ｆｉｌｅ構造化文書が、データ構造の前記組に基づいて、１つまたは複数のｍｄａｔ要素、ｍｏｏｖ要素、およびｉｏｄｓ要素を含む、請求項１４に記載のシステム。
【請求項１８】
前記ｍｐ４−ｆｉｌｅ構造化文書が、ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍを表す、請求項１７に記載のシステム。
【請求項１９】
ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍを表すｍｐ４−ｂｉｆｓ構造化文書をさらに含む、請求項１７に記載のシステム。
【請求項２０】
前記ｍｐ４−ｂｉｆｓ構造化文書が、前記ｍｐ４−ｆｉｌｅ構造化文書と別々の別個の構造化文書である、請求項１９に記載のシステム。
【請求項２１】
有形の媒体で実施されたコンピュータ・プログラムであって、
ＭＰＥＧ−４（ｍｐ４）バイナリ・ファイルをＸＭＴ（Ｅｘｔｅｎｓｉｂｌｅ  ＭＰＥＧ−４  Ｔｅｘｔｕａｌ）ファイルに変換する、前記有形の媒体に結合されたコンピュータ可読プログラム・コード
を含み、前記コンピュータ可読プログラム・コードは、前記プログラムに、
前記ｍｐ４バイナリ・ファイルを表す少なくとも１つの中間構造化文書を生成することと、
前記中間構造化文書をＸＭＴ構造化文書に変換することと、
前記ＸＭＴ構造化文書に基づいて前記ＸＭＴファイルを作成することと
を行わせる、コンピュータ・プログラム。
【請求項２２】
前記少なくとも１つの中間構造化文書が、ｍｏｏｖアトムおよび１つまたは複数のｍｄａｔアトムを表すデータ構造を含み、前記ｍｏｏｖアトムが、１つまたは複数のｔｒａｋアトムを含む、請求項２１に記載のコンピュータ・プログラム。
【請求項２３】
前記コンピュータ可読プログラム・コードが、さらに、前記ｍｄａｔアトムおよびｔｒａｋアトムを表す前記データ構造に基づいて外部メディア・ファイルを生成するように構成される、請求項２２に記載のコンピュータ・プログラム。
【請求項２４】
前記少なくとも１つの中間構造化文書が、ｍｐ４−ｆｉｌｅ構造化文書を含む、請求項２１に記載のコンピュータ・プログラム。
【請求項２５】
前記ｍｐ４−ｆｉｌｅ構造化文書が、前記少なくとも１つの中間構造化文書に基づいて、１つまたは複数のｍｄａｔ要素、ｍｏｏｖ要素、およびｉｏｄｓ要素を含む、請求項２４に記載のコンピュータ・プログラム。
【請求項２６】
前記ｍｐ４−ｆｉｌｅ構造化文書が、ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍを表す、請求項２５に記載のコンピュータ・プログラム。
【請求項２７】
前記ｍｐ４−ｆｉｌｅ構造化文書が、ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍを表す、請求項２５に記載のコンピュータ・プログラム。
【請求項２８】
前記少なくとも１つの中間構造化文書が、ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍを表すｍｐ４−ｂｉｆｓ構造化文書を含む、請求項２１に記載のコンピュータ・プログラム。
【請求項２９】
前記ｍｐ４−ｂｉｆｓ構造化文書が、前記ｍｐ４−ｆｉｌｅ構造化文書と別々の別個の文書である、請求項２８に記載のコンピュータ・プログラム。
【請求項３０】
前記コンピュータ可読プログラム・コードが、さらに、
前記ｍｐ４バイナリ・ファイルを表すデータ構造の組を生成し、
データ構造の前記組を、前記少なくとも１つの中間構造化文書に変換する
ように構成される、請求項２１に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、全般的にはマルチメディア情報のデータ表現に関し、具体的には、「ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａ  Ｆｏｒｍａｔ」と称するマルチメディア情報表現の１つの形の、「ＭＰＥＧ−４  Ｔｅｘｔｕａｌ  Ｒｅｐｒｅｓｅｎｔａｔｉｏｎ」と称するマルチメディア情報表現の別の形への変換に関する。
【背景技術】
【０００２】
コンピュータは、一般に、イメージ、オーディオ・サンプル（サウンド）、およびビデオ・メディアを含むさまざまなディジタル・メディアならびにテキストおよび幾何形状を表すのに使用される。これらのメディア・タイプのそれぞれを、個別に提示することができ、あるいは、複数のそのようなメディア要素を、コンポジット・マルチメディア・プレゼンテーション（ｃｏｍｐｏｓｉｔｅ  ｍｕｌｔｉｍｅｄｉａ  ｐｒｅｓｅｎｔａｔｉｏｎ）と称するもので一緒に提示することができる。
【０００３】
コンポジット・マルチメディア・プレゼンテーションを作成し、配布する能力は、さまざまなメディア・タイプに基づく情報の散布に非常に重要である。さらに、コンポジット・マルチメディア・プレゼンテーションを提示する標準化された手段が作成されて、多数の作成者が、パーソナル・コンピュータ、セットトップ・ボックス、および他のデバイスなどのさまざまなコンピュータ・プラットフォームで再生できるプレゼンテーションを作成できるようになった。
【０００４】
ＭＰＥＧ（Ｍｏｔｉｏｎ  Ｐｉｃｔｕｒｅｓ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）によって開発されたコンポジット・マルチメディア・プレゼンテーションの２つの周知の標準化されたフォーマットが、ＸＭＴ（Ｅｘｔｅｎｓｉｂｌｅ  ＭＰＥＧ−４  Ｔｅｘｔｕａｌ）フォーマットおよびバイナリ・コーディングされたＭＰＥＧ−４（ｍｐ４）フォーマットである。ＸＭＴフォーマットは、コンポジット・マルチメディア・プレゼンテーションのオーサリングによく適し、ｍｐ４フォーマットは、コンポジット・マルチメディア・プレゼンテーションのコンパクトな保管および伝送によく適する。
【非特許文献１】http://www.w3.org/TR/2000/REC-XML-20001006
【非特許文献２】http://mpeg.telecomitalialab.com/working_documents.htm
【非特許文献３】ISO-IEC文書ISO/IEC 14496-1:2001、2001年8月、第9章
【非特許文献４】http://mpeg.telecomitalialab.com/documents.htm
【非特許文献５】http://developer.apple.com/techpubs/quicktime/qtdevdocs/REF/refFileFormat96.htm
【非特許文献６】http://developer.apple.com/techpubs/quicktime/qtdevdocs/PDF/QTFileFormat.pdf
【非特許文献７】ＩＳＯ／ＩＥＣ文書１４４９６−２（１９９９年、２０００年修正）「情報テクノロジ−オーディオ・ビジュアル・オブジェクトのコーディング−第２部：ビジュアル（Information Technology-Coding of Audio-Visual Objects - Part 2:Visual）」
【非特許文献８】ＩＳＯ／ＩＥＣ文書１３８１８−７（１９９７年）「情報テクノロジ−動画および関連するオーディオ情報の包括的コーディング−第７部：高度なオーディオ・コーディング（Information Technology - Generic Coding of Moving Pictures andAssociated Audio Information - Part 7: Advanced Audio Coding）」
【発明の開示】
【発明が解決しようとする課題】
【０００５】
したがって、ＸＭＴフォーマットされたプレゼンテーションをｍｐ４フォーマットされたプレゼンテーションに効率的に変換することが望ましい。
【課題を解決するための手段】
【０００６】
下で説明するように、本発明は、バイナリ・コーディングされたＭＰＥＧ−４（ｍｐ４）フォーマットをＸＭＴ（Ｅｘｔｅｎｓｉｂｌｅ  ＭＰＥＧ−４  Ｔｅｘｔｕａｌ）フォーマットに変換する方法、システム、および装置である。本発明は、比較的少量のソフトウェアからなる、ｍｐ４フォーマットからＸＭＴフォーマットへのコンポジット・マルチメディア・プレゼンテーション変換を達成するのに適度なリソースだけを必要とする効率的な機能を使用する。
【０００７】
したがって、本発明の一態様に、ＭＰＥＧ−４（ｍｐ４）バイナリ・ファイルをＸＭＴ（Ｅｘｔｅｎｓｉｂｌｅ  ＭＰＥＧ−４  Ｔｅｘｔｕａｌ）ファイルに変換する方法が含まれる。この方法に、ｍｐ４バイナリ・ファイルを表すデータ構造の組を生成する生成動作が含まれる。第１変換動作が、データ構造の組を少なくとも１つの中間構造化文書に変換し、第２変換動作が、中間構造化文書をＸＭＴ構造化文書に変換する。その後、作成動作が、ＸＭＴ構造化文書に基づいてＸＭＴファイルを作成する。
【０００８】
本発明のもう１つの態様は、ＭＰＥＧ−４（ｍｐ４）バイナリ・ファイルをＸＭＴ（Ｅｘｔｅｎｓｉｂｌｅ  ＭＰＥＧ−４  Ｔｅｘｔｕａｌ）ファイルに変換するシステムである。このシステムには、ｍｐ４バイナリ・ファイルを入力し、ｍｐ４バイナリ・ファイルを表すデータ構造の組を生成するように構成されたバイナリ・ファイル・デコーダが含まれる。第１トランスレータが、データ構造の組を入力し、少なくとも１つの中間構造化文書を作成するように構成される。第２トランスレータが、中間構造化文書を入力し、ＸＭＴ構造化文書を生成するように構成される。ＸＭＴシリアライザが、ＸＭＴ構造化文書を入力し、ＸＭＴファイルを生成するように構成される。
【０００９】
本発明のもう１つの態様は、ＭＰＥＧ−４（ｍｐ４）バイナリ・ファイルをＸＭＴ（Ｅｘｔｅｎｓｉｂｌｅ  ＭＰＥＧ−４  Ｔｅｘｔｕａｌ）ファイルに変換する、有形の媒体で実施されたコンピュータ・プログラム製品である。このコンピュータ・プログラムは、ｍｐ４バイナリ・ファイルを表すデータ構造の組を生成する動作と、データ構造の組を少なくとも１つの中間構造化文書に変換する動作と、中間構造化文書をＸＭＴ構造化文書に変換する動作と、ＸＭＴ構造化文書に基づいてＸＭＴファイルを作成する動作とを実行する。
【００１０】
本発明の前述および他の特徴、有用性、および利益は、添付図面に示された本発明のさまざまな実施形態の次の詳細な説明から明白になる。
【発明を実施するための最良の形態】
【００１１】
見出しの一覧
ＭＰＥＧ−４  Ｔｅｘｔｕａｌ  Ｒｅｐｒｅｓｅｎｔａｔｉｏｎ  １．０
ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａ  Ｆｏｒｍａｔファイル  ２．０
Ｓｃｅｎｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｓｔｒｅａｍ（ｓｄｓｍ）  ３．０
Ｏｂｊｅｃｔ  Ｄｅｓｃｒｉｐｔｏｒ  Ｓｔｒｅａｍ  （ｏｄｓｍ）  ４．０
ｍｐ４−ｆｉｌｅ文書  ５．０
ｍｐ４−ｂｉｆｓ文書  ６．０
ｍｐ４−ｘｍｔａコンバータ  ７．０
【００１２】
本発明は、ＸＭＴ（Ｅｘｔｅｎｓｉｂｌｅ  ＭＰＥＧ−４  Ｔｅｘｔｕａｌ）フォーマット（本明細書では、ＸＭＴ−Ａ文書およびＭＰＥＧ−４  Ｔｅｘｔｕａｌ  Ｒｅｐｒｅｓｅｎｔａｔｉｏｎとも称する）をバイナリ・コーディングされたＭＰＥＧ−４（ｍｐ４）フォーマット（ＭＰＥＧ−４  ｉｎｔｅｒｍｅｄｉａ  ｂｉｎａｒｙフォーマットとも称する）に変換する方法、システム、およびコンピュータ・プログラムである。本発明は、比較的少量のソフトウェアおよび適度なリソースだけを必要とする、ＸＭＴ−Ａからｍｐ４への変換を達成する新規の手法を使用する。本発明を、本明細書で、図１から１３５を参照して説明する。
【００１３】
１．０  ＭＰＥＧ−４  Ｔｅｘｔｕａｌ  Ｒｅｐｒｅｓｅｎｔａｔｉｏｎ
ＭＰＥＧ−４  Ｔｅｘｔｕａｌ  Ｒｅｐｒｅｓｅｎｔａｔｉｏｎは、マルチメディア・プレゼンテーションの構造を表す「テキスト・ファイル」からなる。マルチメディア・プレゼンテーションは、サウンド、静止画像、ビデオ・クリップ、および他の要素の同期化された組合せまたはシーケンスからなる。テキスト・ファイルは、文字、数字、および句読点のバイナリ・コードのシーケンスからなる電子データ構造である。一般に、テキスト・ファイルは、一般に「テキスト・エディタ」と称するソフトウェアを使用して解釈することができる。Ｗｉｎｄｏｗｓ（Ｒ）オペレーティング・システムに基づくコンピュータ用の「Ｎｏｔｅｐａｄ．ｅｘｅ」と称するソフトウェアおよび集合的にＵＮＩＸと称するさまざまなオペレーティング・システムを使用するコンピュータ用の「ｖｉ」を含む、テキスト・エディタの多数の例がある。Ｗｉｎｄｏｗｓは、米国ワシントン州レッドモンドのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ社の登録商標である。ＭＰＥＧ−４  Ｔｅｘｔｕａｌ  Ｒｅｐｒｅｓｅｎｔａｔｉｏｎを含むタイプのテキスト・ファイルを「ＸＭＴ−Ａ」ファイルと称する。
【００１４】
テキスト・ファイルの範囲内で、ＸＭＴ−Ａファイルは、ＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）ファイルの例である。ＸＭＬファイルは、Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ  Ｃｏｎｓｏｒｔｉｕｍによって指定される原理に基づく構造化文書である（http://www.w3.org/TR/2000/REC-XML-20001006を参照されたい）。ＸＭＴ−Ａファイルは、国際標準化機構および国際電気標準会議によって指定される、ＸＭＬファイルの特定の実施形態を表す（http://mpeg.telecomitalialab.com/working_documents.htmおよび、スイス国ジュネーブ２０、ＣＨ−１２１１、１、ｒｕｅ  ｄｅ  Ｖａｒｅｍｂｅ、Ｃａｓｅ  ｐｏｓｔａｌ  ５６の国際標準化機構（ＩＳＯ）から入手可能なＩＳＯ／ＩＥＣ文書１４４９６−１：２０００  Ａｍｄ．２、２０００年１０月を参照されたい）。ＸＭＴ−Ａ仕様のすべての部分の完全な記述は、膨大な量になる。したがって、ＸＭＴ−Ａファイルの次の説明は、その仕様のうちで、本発明を説明するのに必要な部分に限られる。ＸＭＴ−Ａファイル構造の完全な説明については、上で示したＸＭＴ仕様書を調査されたい。
【００１５】
ＸＭＬファイルと同様に、ＸＭＴ−Ａファイルは、「要素」の階層的な組からなる。各要素に、子要素と称する従属要素を含めることができる。さらに、各要素は、「属性」と称するデータ値の組を所有することができる。各属性は、名前および値を有する。特定の要素によって所有される、特定の属性名および可能な子要素は、その要素の型に依存する。各属性値の解釈は、対応する属性名およびその属性を所有する要素に依存する。
【００１６】
図１からわかるように、ＸＭＴ−Ａファイル１００は、２つの部分すなわち、Ｈｅａｄｅｒ要素１１０およびＢｏｄｙ要素１２０からなる。Ｈｅａｄｅｒ要素１１０に、ＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素１３０と定義された単一の子要素が含まれる。Ｂｏｄｙ要素１２０に、子要素として１つまたは複数の「ｐａｒ」要素１４０が含まれる。
【００１７】
ＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ  １３０は、１つの属性、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ（ＯＤＩＤ）を有し、その値は、文字ストリングである。図２からわかるように、この要素は、２つの子すなわち、Ｐｒｏｆｉｌｅｓ要素１５０およびＤｅｓｃｒ要素１６０を有する。Ｐｒｏｆｉｌｅｓ要素１５０は、子要素を有しない。Ｐｒｏｆｉｌｅｓ要素１５０は、「ｉｎｃｌｕｄｅＩｎｃｌｉｎｅＰｒｏｆｉｌｅＬｅｖｅｌＦｌａｇ」、「ｓｃｅｎｅＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、「ＯＤＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、「ａｕｄｉｏＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、「ｖｉｓｕａｌＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、および「ｇｒａｐｈｉｃｓＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」を含む複数の属性を所有する。
【００１８】
Ｄｅｓｃｒ要素１６０は、複数の型の子要素を有することができる。本発明に必須の唯一の型が、単一の「ｅｓＤｅｓｃｒ」要素１７０である。ｅｓＤｅｓｃｒ要素１７０は、１つまたは複数の「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」子要素１８０および１９０を所有することができる。ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素は、ＭＰＥＧ−４ドキュメンテーションで定義される概念である「エレメンタリ・ストリーム（ｅｌｅｍｅｎｔａｒｙ  ｓｔｒｅａｍ）」のあるプロパティを指定する。ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素の構造を、下で示す。
【００１９】
ＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素１３０に従属するｅｓＤｅｓｃｒ要素１７０は、１つまたは２つのＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素１８０および１９０を所有することができる。どの場合でも、「ｓｄｓｍ」または「ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ」として定義されたエレメンタリ・ストリームのＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ  １８０が存在しなければならない。さらに、「ｏｄｓｍ」または「ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ」として定義されたエレメンタリ・ストリームの第２のＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ  １９０を設けることができる。ｏｄｓｍのＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素１９０は、オーディオ・データ、ビジュアル・データ、またはｓｄｓｍ内で指定されない他のタイプのメディア・データに依存するＸＭＴ−Ａファイルに限って必要である。
【００２０】
図３からわかるように、各ｐａｒ要素１４０および２００に、１つまたは複数の「ｐａｒ−ｃｈｉｌｄ」要素２１０が含まれる。「ｐａｒ−ｃｈｉｌｄ」要素は、別のｐａｒ要素、ｏｄｓｍコマンド、またはｂｉｆｓコマンドとすることができる。各ｐａｒ要素に、名前「ｂｅｇｉｎ」を有する属性も含まれる。ｂｅｇｉｎ属性の値は、ｐａｒ要素内のｏｄｓｍコマンドまたはｂｉｆｓコマンドが実行される時を指定する。ｐａｒ要素のｂｅｇｉｎ属性によって決定される時間値は、親によって暗示される時間値に関して計算され、Ｂｏｄｙ要素１２０は、０の開始時刻を暗示する。
【００２１】
ｐａｒ−ｃｈｉｌｄ要素２１０に、図４に示されているように、２つの型のｏｄｓｍコマンド要素のインスタンスを含めることができる。これには、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅ要素２２０およびＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅ要素２５０が含まれる。ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅ要素２２０には、単一のＯＤ子要素２３０が含まれ、ＯＤ要素２３０には、単一のＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ子要素２４０が含まれる。ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２４０は、下で詳細に説明する。ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅ要素２５０は、１つの属性を有し、子要素を有しない。ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅ要素２５０の属性は、「ＯＤＩＤ」という名前を有する。
【００２２】
図５から７に示されているように、ｐａｒ−ｃｈｉｌｄ要素２１０に、３つの型のｂｉｆｓコマンド要素のインスタンスを含めることができる。これには、Ｉｎｓｅｒｔ要素３００、Ｄｅｌｅｔｅ要素３１０、およびＲｅｐｌａｃｅ要素３２０が含まれる。図５からわかるように、Ｉｎｓｅｒｔ要素３０は、「ｘｍｔａＢｉｆｓＮｏｄｅ」子要素３３０または「ＲＯＵＴＥ」子要素３４０のいずれかを有することができる。Ｄｅｌｅｔｅ要素３１０は、子を有しない。Ｒｅｐｌａｃｅ要素３２０は、「ｘｍｔａＢｉｆｓＮｏｄｅ」３５０子要素、「ＲＯＵＴＥ」子要素３６０、または「Ｓｃｅｎｅ」子要素３７０を有することができる。Ｓｃｅｎｅ要素は、「ｘｍｔａＴｏｐＮｏｄｅ」子要素３８０を有する。Ｓｃｅｎｅ要素は、１つまたは複数のＲＯＵＴＥ子要素３９０も有することができる。
【００２３】
ＲＯＵＴＥ要素３４０および３９０は、子を有しない。ＲＯＵＴＥ要素３４０および３９０の属性に、「ｆｒｏｍＮｏｄｅ」、「ｆｒｏｍＦｉｅｌｄ」、「ｔｏＮｏｄｅ」、および「ｔｏＦｉｅｌｄ」が含まれる。
【００２４】
用語「ｘｍｔａＢｉｆｓＮｏｄｅ要素」３３０は、約１００個の定義済みＢＩＦＳ  Ｎｏｄｅ要素のいずれか１つを表す。これらのそれぞれが、図８に示された全体的な構造４００を有する。各ｘｍｔａＢｉｆｓＮｏｄｅ要素４００は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様書（ISO-IEC文書ISO/IEC 14496-1:2001、2001年8月、第９章）で定義されたバイナリ・データ構造体であるＢＩＦＳ  Ｎｏｄｅを表す。この文書に関する情報は、http://mpeg.telecomitalialab.com/documents.htmおよびスイス国ジュネーブ２０、ＣＨ−１２１１、１、ｒｕｅ  ｄｅ  Ｖａｒｅｍｂｅ、Ｃａｓｅ  ｐｏｓｔａｌ  ５６の国際標準化機構（ＩＳＯ）で入手可能である。各ｘｍｔａＢｉｆｓＮｏｄｅ要素４００の要素タグは、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義された対応するＮｏｄｅＮａｍｅに基づく。いくつかの型のｘｍｔａＢｉｆｓＮｏｄｅ要素は、対応するＢＩＦＳ  Ｎｏｄｅのあるプロパティに基づいて従属（子）要素を有することができる。これを、ｎｏｄｅＦｉｅｌｄ要素４１０と呼ぶ。各ｎｏｄｅＦｉｅｌｄ要素は、さらなるｘｍｔａＢｉｆｓＮｏｄｅ要素４２０からなる１つまたは複数の従属要素を有することができる。この配置を、ＢＩＦＳノードの階層木を記述するために再帰的に繰り返すことができる。この階層の深さに制限はない。
【００２５】
各ＢＩＦＳ  Ｎｏｄｅは、「フィールド」と称する複数のプロパティを有する。これらのフィールドのそれぞれが、定義されたフィールド名（ストリング）およびフィールド・データ型（ｂｏｏｌｅａｎ、ｉｎｔｅｇｅｒ、ｆｌｏａｔなど）を有する。フィールド・データ型の１つが、「Ｎｏｄｅ」である。Ｎｏｄｅ以外のフィールド・データ型のすべてが、ｘｍｔａＢｉｆｓＮｏｄｅ要素４００の同一の名前の属性によって表される。型「Ｎｏｄｅ」を有する各フィールドは、ｘｍｔａＢｉｆｓＮｏｄｅ要素４００の同一の名前の子要素４１０によって表される。ｘｍｔａＢｉｆｓＮｏｄｅ要素４００の各子要素４１０は、子要素として１つまたは複数のｘｍｔａＢｉｆｓＮｏｄｅ要素４２０（ｘｍｔａＢｉｆｓＮｏｄｅ親要素４００の孫）を有することができる。
【００２６】
ＸＭＴ−Ａ  ＢＩＦＳ  ＮｏｄｅのＸＭＬ表現を、図９から１０に示す。各ＸＭＴ−Ａ  ＢＩＦＳ  Ｎｏｄｅ要素は、１００個を超える可能な型のＸＭＴ−Ａ  ＢＩＦＳノードの１つを一意に識別するＮｏｄｅＮａｍｅタグ５００および５７０によって識別される。各ノード要素は、オリジナルのノード要素５００または再利用されるノード要素５７０とすることができる。オリジナルのノード要素５００の場合に、任意選択の属性「ＤＥＦ」５１０を使用して、特定のノードの一意の英数字記述を提供することができる。この属性が設けられる場合に、そのノードは、「再利用可能」として分類される。
【００２７】
オリジナルのＸＭＴ−Ａ  ＢＩＦＳノード要素は、フィールド属性５２０の組も所有し、各プロパティ・フィールドの１つのフィールド属性が、型ＮｏｄｅＮａｍｅであり、「ｎｏｄｅ」または「ｂｕｆｆｅｒ」以外のノード・データ型を有するノードについて定義される。これらの属性は、図９では「ｆｉｅｌｄ０」、「ｆｉｅｌｄ２」、「ｆｉｅｌｄ３」、および「ｆｉｅｌｄ５」として識別される。これらの属性のそれぞれの実際の名前は、型「ＮｏｄｅＮａｍｅ」のノードに関するＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義された対応するプロパティ・フィールド名によって決定される。これらの属性のそれぞれに割り当てられる値は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたノード・データ型（ｂｏｏｌｅａｎ、ｉｎｔｅｇｅｒ、ｆｌｏａｔなど）を有するデータ値を表さなければならない。
【００２８】
さらに、オリジナルのＸＭＴ−Ａ  ＢＩＦＳノード要素５００は、「ｎｏｄｅ」または「ｂｕｆｆｅｒ」のデータ型を有するプロパティ・フィールドのフィールド名に対応する要素タグを有する１つまたは複数のフィールド−値子要素５３０および５４０を有することができる。各そのようなフィールド−値要素は、開始タグ５３０および終了タグ５４０を有する。そのようなフィールド−値要素５３０および５４０の例が、図９の要素タグ＜ｆｉｅｌｄ１＞…＜／ｆｉｅｌｄ１＞および＜ｆｉｅｌｄ４＞…＜／ｆｉｅｌｄ４＞によって表されている。
【００２９】
データ型「ｎｏｄｅ」を有するプロパティ・フィールドの場合に、フィールド−値要素に、ＢＩＦＳ−Ｎｏｄｅ要素５５０に対応する１つまたは複数の子要素を含めることができる。そのようなＢＩＦＳ−Ｎｏｄｅ子の例が、要素タグ＜ＮｏｄｅＮａｍｅ１  …  ／＞、＜ＮｏｄｅＮａｍｅ２  …  ／＞、および＜ＮｏｄｅＮａｍｅ３  …  ／＞によって表される。
【００３０】
データ型「ｂｕｆｆｅｒ」を有するプロパティ・フィールドの場合に、フィールド−値要素に、ＢＩＦＳコマンド要素３００、３１０、および３２０に対応する１つまたは複数の子要素を含めることができる。
【００３１】
ＸＭＴ−Ａ  ＢＩＦＳ  Ｎｏｄｅ要素に、フィールド−値子要素が含まれる場合に、そのＮｏｄｅ要素は、標準的なＸＭＬの原理に従って、＜／ＮｏｄｅＮａｍｅ＞終了タグ５６０によって終端される。
【００３２】
ＸＭＴ−Ａ  ＢＩＦＳノード要素の前述の定義は、従属ＢＩＦＳノード要素（＜ＮｏｄｅＮａｍｅ１＞など）のそれぞれに再帰的に適用され、ノードの階層木を作成できるようになる。ＸＭＴ−Ａ  ＢＩＦＳノード要素のこの木の深さに制限はない。
【００３３】
再利用されるノード５７０の場合に、ノード要素は、１つの属性だけを有し、子を有しない。唯一の属性は、「ＵＳＥ」属性５８０であり、その値５９０は、ノードＩＤストリングである。ＵＳＥ属性の値として提供されるノードＩＤストリングは、同一のＮｏｄｅＮａｍｅを有するオリジナルのノード要素５００のＤＥＦ属性５１０として指定されたノードＩＤストリングと一致しなければならない。
【００３４】
用語「ｘｍｔａＴｏｐＮｏｄｅ」は、Ｓｃｅｎｅ要素に対する子要素としてサービスすることを許容されるｘｍｔａＢｉｆｓＮｏｄｅ要素の定義されたサブセットの１つを表す。
【００３５】
図１１からわかるように、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２４０および６００（ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅ要素２２０の孫）は、上で説明したＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素１３０に類似する。ＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素１３０と異なって、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２４０および６００には、Ｐｒｏｆｉｌｅｓ子要素１５０が欠けている。ＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素１３０と同様に、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２４０および６００は、「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」（ＯＤＩＤ）属性６０６を有する。通常のＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２４０および６００は、単一のＤｅｓｃｒ子要素６１０を有し、Ｄｅｓｃｒ要素６１０は、単一のｅｓＤｅｓｃｒ子要素６２０を有し、ｅｓＤｅｓｃｒ要素６２０は、単一のＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ子要素６３０を有する。Ｄｅｓｃｒ要素６１０、ｅｓＤｅｓｃｒ要素６２０、およびＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素６３０は、ＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素１３０の対応する子１６０、１７０、１８０、および１９０に類似する。
【００３６】
ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素１８０、１９０、および６３０を、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素６００またはＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素１３０のいずれかに含めることができる。どちらの場合でも、ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素１８０、１９０、および６３０は、図１２に示された構造６４０を有する。ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素６４０の「ＥＳ＿ＩＤ」属性６３６の値は、各ストリームに固有の英数字ストリングである。ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ６４０要素は、必ず、ｄｅｃＣｏｎｆｉｇＤｅｓｃｒ子要素６４６およびｓｌＣｏｎｆｉｇＤｅｓｃｒ子要素６６０を有する。ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素６３０および６４０が、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素６００に従属する場合に、そのＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素６３０および６４０は、ＳｔｒｅａｍＳｏｕｒｃｅ子要素６７０も有する。ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素１８０、１９０、および６４０が、ＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素１３０に属する場合に、そのＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素１８０、１９０、および６４０は、ＳｔｒｅａｍＳｏｕｒｃｅ子要素６７０を有しない。
【００３７】
ｄｅｃＣｏｎｆｉｇＤｅｓｃｒ要素６４６は、ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ子要素６５０を有する。ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０は、親のＥＳ＿Ｄｅｓｃｒｉｐｔｉｏｎ要素６４０が、オーディオ、ビジュアル、ｓｄｓｍ、ｏｄｓｍ、または他のタイプのメディアのどれを表すかを示す、「ｓｔｒｅａｍＴｙｐｅ」および「ｏｂｊｅｃｔＴｙｐｅＩｎｄｉｃａｔｉｏｎ」を含む複数の属性を有する。ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｉｏｎ要素６５０は、ｓｔｒｅａｍＴｙｐｅおよびｏｂｊｅｃｔＴｙｐｅＩｎｄｉｃａｔｉｏｎの値に応じて、ｄｅｃＳｐｅｃｉｆｉｃＩｎｆｏ子要素６５６も有することができる。
【００３８】
ｓｄｓｍ（ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ）のＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素１８０の場合に、ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ６５０要素は、ｄｅｃＳｐｅｃｉｆｉｃＩｎｆｏ子要素６５６を有する。図１３からわかるように、ｄｅｃＳｐｅｃｉｆｉｃＩｎｆｏ６８０要素は、ＢＩＦＳＣｏｎｆｉｇ子要素６８６を有する。ＢＩＦＳＣｏｎｆｉｇ要素６８６は、ＢＩＦＳ  Ｎｏｄｅをエンコードする形を指定する複数の属性を有する。ＢＩＦＳＣｏｎｆｉｇ要素６８６は、ｃｏｍｍａｎｄＳｔｒｅａｍ要素６９０も所有し、ｃｏｍｍａｎｄＳｔｒｅａｍ要素６９０は、「ｓｉｚｅ」要素６９６を所有する。
【００３９】
ｓｌＣｏｎｆｉｇ要素６６０は、ＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ子要素６６６を有する。ＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６６６は、「ｐｒｅｄｅｆｉｎｅｄ」という名前の１つの属性を有し、子要素を有しない。「ｐｒｅｄｅｆｉｎｅｄ」属性は、必ず「２」の値を有する。
【００４０】
ＳｔｒｅａｍＳｏｕｒｃｅ要素６７０は、１つの属性「ｕｒｌ」を有し、子要素を有しない。ｕｒｌ属性の値は、特定のストリームの実際のサウンド、イメージなどを定義するオーディオ・データ、ビジュアル・データ、または他のデータを含むメディア・データ・ファイルの位置を示す、ファイル名またはインターネット・アドレス（ＵＲＬ、Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｏｒ）のいずれかを指定する。ＳｔｒｅａｍＳｏｕｒｃｅ要素６７０は、ｓｄｓｍ（ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ）またはｏｄｓｍ（ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ）の場合には存在しない。というのは、これらのストリームの両方が、ＸＭＴ−Ａファイルによって決定されるからである。
【００４１】
２．０  ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａ  Ｆｏｒｍａｔファイル
ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａ  Ｆｏｒｍａｔファイルは、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様書、ISO-IEC文書ISO/IEC 14496-1:2001、2001年8月の第１３章で定義された構造および構成を有する電子データの１形式である。電子データ構造のこの形式は、一般に「バイナリ・ファイル」と称するものの例である。というのは、これが、文字、数字、および句読点の表現に制限されないバイナリ・データ値のシーケンスからなるからである。これによって、ＸＭＴ−Ａファイルなどの通常のテキスト・ファイルによって可能になるものよりコンパクトなデータ構造が可能になる。ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａ  Ｆｏｒｍａｔによって定義された構造を有する電子データの保管された形が、「ｍｐ４バイナリ・ファイル」である。ＸＭＴ−Ａファイルと異なって、ｍｐ４バイナリ・ファイルは、ほとんどのテキスト編集ソフトウェアによって解釈することができない。
【００４２】
ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａ  Ｆｏｒｍａｔは、１９９６にアップル・コンピュータ（Apple Computers, Inc.）社によって定義された、http://developer.apple.com/techpubs/quicktime/qtdevdocs/REF/refFileFormat96.htmおよびhttp://developer.apple.com/techpubs/quicktime/qtdevdocs/PDF/QTFileFormat.pdfでオンラインで入手できるＱｕｉｃｋＴｉｍｅ（Ｒ）ファイル・フォーマットから派生した。ＱｕｉｃｋＴｉｍｅは、アップル・コンピュータ社の登録商標である。
【００４３】
ＱｕｉｃｋＴｉｍｅ（Ｒ）の継承のゆえに、ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａ  Ｆｏｒｍａｔは、ＱｕｉｃｋＴｉｍｅ（Ｒ）仕様から派生した複数の特性を保持する。この特性に、データ構造の単位としての「アトム」の概念が含まれる。各アトムは、２つの部分すなわち、ヘッダおよび本体を有する。ヘッダには、ヘッダを含むアトムを構成するバイト数を指定するアトム・サイズ値が含まれる。ヘッダには、アトムの型を指定するａｔｏｍＩｄも含まれる。アトムの本体には、アトムによって伝えられるデータが含まれる。このデータに、従属アトムを含めることができる。その最も基本的な形で、アトムは、４バイト（符号なし整数）からなるアトム・サイズ値と、やはり４バイト（文字）からなるａｔｏｍＩｄを有する。４バイトを超えるアトム・サイズ値およびａｔｏｍＩｄを有する、アトムの拡張された形も、ＭＰＥＧ−４仕様で定義されている。
【００４４】
図１４からわかるように、ｍｐ４バイナリ・ファイル７００は、１つまたは複数の「ｍｄａｔ」アトム７０６および１つの「ｍｏｏｖ」アトム７１２からなる。ｍｏｏｖアトム７１２は、ｍｄａｔアトム７０６の前または後に置くことができる。図１５からわかるように、各ｍｄａｔアトム７１８は、アトム・サイズ値７２４と、それに続く４バイトのａｔｏｍＩｄ「ｍｄａｔ」７３０と、「チャンク」７３６と呼ばれるデーバ・ブロックのシーケンスからなる。図１６からわかるように、各チャンク７４２は、メディア・データ「サンプル」７４８のシーケンスからなる。各サンプル７４８は、単一のメディア・ストリームに関する、特定の時点に関連するデータのブロックを指定する。単一のチャンク内のすべてのサンプルが、同一のメディア・データ・ストリームを表さなければならない。ｍｄａｔアトム７００の観察から、個々のサンプル７４８またはチャンク７３６および７４２を識別することは、必ずしも可能でない。各サンプル７４８ならびにチャンク７３６および７４２は、ｍｐ４バイナリ・ファイル内の他の場所に保管されたテーブルを使用して識別することができる。
【００４５】
図１７からわかるように、ｍｏｏｖアトム７５８は、アトム・サイズ値７６０と、それに続く４バイトのａｔｏｍＩｄ「ｍｏｏｖ」７６６ならびに「ｍｖｈｄ」（ｍｏｏｖ  ｈｅａｄｅｒ）アトム７７２、「ｉｏｄｓ」（ｉｎｉｔｉａｌ  ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ）アトム７７８、および１つまたは複数の「ｔｒａｋ」アトム７９０を含む複数の従属アトムからなる。「ｍｏｏｖ」アトム７１２および７５８には、データ・ストリームごとに１つの「ｔｒａｋ」アトム７９０が含まれ、この「ｔｒａｋ」アトム７９０には、存在する場合にｓｄｓｍ（ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ）およびｏｄｓｍ（ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ）が含まれる。「ｍｏｏｖ」アトム７１２および７５８に、任意選択の「ｕｄｔａ」（ｕｓｅｒ  ｄａｔａ）アトム７８４も含めることができる。「ｕｄｔａ」アトム７８４は、著作権メッセージなどの任意選択の情報をｍｐ４バイナリ・ファイルに埋め込むのに使用することができる。
【００４６】
ｍｖｈｄアトム７７２は、アトム・サイズ値と、それに続く４バイトのａｔｏｍＩｄ「ｍｖｈｄ」ならびに日付時刻スタンプ、時間スケール値、およびファイル持続時間値を含む複数のデータ値からなる。ｍｖｈｄアトムのアトム・サイズ値は、必ず１０８である。日付時刻スタンプは、ファイルが作成された時を示す。時間スケール値は、そのファイルの時間値を表すのに使用される毎秒のティック数を示す。ファイル持続時間値は、時間スケール値で指定される時間単位での、ファイル内の材料を表現するのに必要な総時間を示す。
【００４７】
図１８からわかるように、ｉｏｄｓアトム８００は、アトム・サイズ値８０４と、それに続く４バイトのａｔｏｍＩｄ「ｉｏｄｓ」８０８、８ビットのバージョン値８１２、２４ビットのフラグ値８１６、およびＭｐ４ｆＩｎｉｔＯｂｊＤｅｓｃｒデータ構造８２０からなる。図１９からわかるように、Ｍｐ４ｆＩｎｉｔＯｂｊＤｅｓｃｒデータ構造８２４は、１バイトのＭＰ４＿ＩＯＤ＿ＴＡＧ値８２８、後続データ・ブロックのバイト数８３２、１０ビットのＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ  ８３６、２つのフラグ・ビット８４０および８４４、４つの予約済みビット８４８、ならびに５つのプロファイル・レベル表示値８５２、８５６、８６０、８６４、および８６８からなる。プロファイル・レベル表示値の後に、１つまたは２つのＭＰＥＧ−４  ＥＳ＿ＩＤ＿Ｉｎｃデータ構造８７２が続く。１つのＥＳ＿ＩＤ＿Ｉｎｃ構造は、ｓｄｓｍ（ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ）に対応するｔｒａｋアトム７９０のＥＳ＿ＩＤ値を示す。第２のＥＳ＿ＩＤ＿Ｉｎｃ構造は、存在する場合に、ｏｄｓｍ（ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ）に対応するｔｒａｋアトム７９０のＥＳ＿ＩＤを示す。第２のＥＳ＿ＩＤ＿Ｉｎｃ構造は、ｏｄｓｍが存在する場合に限って存在する。図２０からわかるように、各ＥＳ＿ＩＤ＿Ｉｎｃデータ構造は、１バイトのＥＳ＿ＩＤ＿ＩｎｃＴａｇ値８８０、後続データ内のバイト数８８４（必ず４）、および３２ビットのＥＳ＿ＩＤ値８８８からなる。
【００４８】
図２１からわかるように、各ｔｒａｋアトム９００は、アトム・サイズ値９０３と、それに続く４バイトのａｔｏｍＩｄ「ｔｒａｋ」９０６、「ｔｋｈｄ」（ｔｒａｃｋ  ｈｅａｄｅｒ）アトム９１０、および「ｍｄｉａ」（ｍｅｄｉａ）アトム９１２からなる。ｏｄｓｍ（ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ）を表すｔｒａｋアトムの場合に、ｔｒａｋアトムに、「ｔｒｅｆ」（ｔｒａｃｋ  ｒｅｆｅｒｅｎｃｅ）アトム９４０も含まれる。遅れた開始を有するトラックの場合に、「ｅｄｔｓ」（ｅｄｉｔ  ｌｉｓｔ）アトム９４５が、トラックを開始する時を示すために設けられる。ｍｄｉａアトム９１２は、「ｍｄｈｄ」（ｍｅｄｉａ  ｈｅａｄｅｒ）アトム９１５、「ｈｄｌｒ」（ｈａｎｄｌｅｒ）アトム９１８、「ｍｉｎｆ」（ｍｅｄｉａ  ｉｎｆｏｒｍａｔｉｏｎ）アトム９２０、「ｓｔｂｌ」（ｓａｍｐｌｅ  ｔａｂｌｅｓ）アトム９３３、およびメディア情報ヘッダ・アトム９３６からなる。ラベル「＊ｍｈｄ」は、「ｎｍｈｄ」（ｓｄｓｍトラックおよびｏｄｓｍトラック）、「ｓｍｈｄ」（オーディオ・トラック）、「ｖｍｈｄ」（ビジュアル・トラック）などを含む複数のメディア情報ヘッダ・アトム型のいずれか１つを表す。
【００４９】
ｔｋｈｄアトム９１０、ｍｄｈｄアトム９１５、およびｈｄｌｒアトム９１８に、ｔｒａｃｋＩｄ番号、時刻日付スタンプ、メディア時間スケール、およびメディア持続時間値を含む複数のデータ値が含まれる。各トラックは、それ自体の時間スケールを有し、この時間スケールは、ｍｖｈｄアトム７７２で指定されるグローバル時間スケールと異なるものとすることができる。
【００５０】
図２２からわかるように、ｓａｍｐｌｅ  ｔａｂｌｅｓアトム９５０は、アトム・サイズ値９５４と、それに続く、４バイトのａｔｏｍＩｄ「ｓｔｂｌ」９５７、一連のサンプル・テーブル・アトム９６０、９６３、９６６、９７０、９７４、および９７８からなる。さまざまなサンプル・テーブル・アトムは、任意の順序とすることができる。これには、「ｓｔｓｃ」（ｓａｍｐｌｅ−ｔｏ−ｃｈｕｎｋ  ｔａｂｌｅ）アトム９６０、「ｓｔｔｓ」（ｔｉｍｅ−ｔｏ−ｓａｍｐｌｅ  ｔａｂｌｅ）アトム９６３、「ｓｔｃｏ」（ｃｈｕｎｋ  ｏｆｆｓｅｔ  ｔａｂｌｅ）アトム９６６、「ｓｔｓｚ」（ｓａｍｐｌｅ  ｓｉｚｅ  ｔａｂｌｅ）アトム９７０、可能な「ｓｔｓｓ」（ｓｙｎｃ  ｓａｍｐｌｅ  ｔａｂｌｅ）アトム９７４、および「ｓｔｓｄ」（ｓａｍｐｌｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｔａｂｌｅ）アトム９７８が含まれる。これらのサンプル・テーブル・アトムのそれぞれに、関連するｍｄａｔアトム７０６および７１８に保管されたバイナリ・メディア・データ７３６および７４８のプロパティを記述するデータが含まれる。
【００５１】
ｓａｍｐｌｅ−ｔｏ−ｃｈｕｎｋ  ｔａｂｌｅアトム（ｓｔｓｃアトム）９６０は、アトム・サイズ値、４バイトのａｔｏｍＩｄ（「ｓｔｓｃ」）、３２ビット符号なし整数（ｎｕｍＳｔｓｃＥｎｔｒｉｅｓ）、およびｓａｍｐｌｅ−ｔｏ−ｃｈｕｎｋデータ・レコードのシーケンスが含まれる。ｎｕｍＳｔｓｃＥｎｔｒｉｅｓの値は、ｓａｍｐｌｅ−ｔｏ−ｃｈｕｎｋデータ・レコードのシーケンスの項目数を指定する。各ｓａｍｐｌｅ−ｔｏ−ｃｈｕｎｋデータ・レコードは、開始チャンク番号、チャンクごとのサンプル数、およびサンプル記述インデックスを指定する、３つの３２ビット符号なし整数からなる。サンプル記述インデックスは、ｓａｍｐｌｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｔａｂｌｅ９７８内の項目へのインデックスである。チャンクごとのサンプル数は、開始チャンク番号によって指定されるチャンク７３６内および次の項目によって指定される開始チャンクの前のすべての後続チャンク内のサンプル７４８の個数を指定する。
【００５２】
ｔｉｍｅ−ｔｏ−ｓａｍｐｌｅ  ｔａｂｌｅアトム（ｓｔｔｓアトム）９６３は、アトム・サイズ値、４バイトのａｔｏｍＩｄ（「ｓｔｔｓ」）、３２ビット符号なし整数（ｎｕｍＳｔｔｓＥｎｔｒｉｅｓ）、およびｔｉｍｅ−ｔｏ−ｓａｍｐｌｅデータ・レコードのシーケンスからなる。ｎｕｍＳｔｔｓＥｎｔｒｉｅｓの値は、ｔｉｍｅ−ｔｏ−ｓａｍｐｌｅデータ・レコードのシーケンス内の項目数を指定する。各ｔｉｍｅ−ｔｏ−ｓａｍｐｌｅデータ・レコードは、サンプル・カウントおよびトラック時間スケール単位でのサンプル持続時間を指定する、２つの３２ビット符号なし整数からなる。サンプル・カウント値は、対応するサンプル持続時間を有する連続するサンプル７４８の個数を指定する。
【００５３】
ｃｈｕｎｋ  ｏｆｆｓｅｔ  ｔａｂｌｅアトム（ｓｔｃｏアトム）９６６は、アトム・サイズ値、４バイトのａｔｏｍＩｄ（「ｓｔｃｏ」）、３２ビット符号なし整数（ｎｕｍＳｔｃｏＥｎｔｒｉｅｓ）、およびチャンク・オフセット値のシーケンスからなる。ｎｕｍＳｔｃｏＥｎｔｒｉｅｓの値は、チャンク・オフセット値のシーケンス内の項目の個数を指定する。このシーケンスの各項目は、ｍｐ４ファイルの先頭と、ｍｄａｔアトム７１８内の対応するチャンク７３６の先頭との間のバイト数を指定する１つの３２ビット符号なし整数からなる。
【００５４】
ｓａｍｐｌｅ  ｓｉｚｅ  ｔａｂｌｅアトム（ｓｔｓｚアトム）９７０は、アトム・サイズ値、４バイトのａｔｏｍＩｄ（「ｓｔｓｚ」）、このｔｒａｋアトム９００に関連するすべてのメディア・データ・サンプル７４８のサイズを指定する３２ビット符号なし整数（ｉＳａｍｐｌｅＳｉｚｅ）からなる。このｔｒａｋアトムに関連するメディア・データ・サンプルが、サイズにおいてすべて同一ではない場合に、ｉＳａｍｐｌｅＳｉｚｅの値は、０と指定され、その次に、３２ビット符号なし整数（ｎｕｍＳｔｓｚＥｎｔｒｉｅｓ）およびサンプル・サイズ値のシーケンスが続く。ｎｕｍＳｔｓｚＥｎｔｒｉｅｓの値は、サンプル・サイズ値のシーケンス内の項目の個数を指定する。このシーケンスの各項目は、このｔｒａｋアトム９００に関連するメディア・データ７１８内の対応するサンプル７４８内のバイト数を指定する１つの３２ビット符号なし整数からなる。
【００５５】
ｓｙｎｃ  ｓａｍｐｌｅ  ｔａｂｌｅアトム（ｓｔｓｓアトム）９７４は、存在する場合に、アトム・サイズ値、４バイトのａｔｏｍＩｄ（「ｓｔｓｓ」）、３２ビット符号なし整数（ｎｕｍＳｔｓｓＥｎｔｒｉｅｓ）、およびサンプル・インデックス値のシーケンスからなる。ｎｕｍＳｔｓｓＥｎｔｒｉｅｓの値は、サンプル・インデックス値のシーケンス内の項目の個数を指定する。このシーケンスの各項目は、「ランダム・アクセス・サンプル」のサンプル・インデックスを指定する１つの３２ビット符号なし整数からなる。ランダム・アクセス・サンプル・インデックスは、このｔｒａｋアトム９００に関連するメディア・データ内の、メディア・プレイヤが前のサンプルに無関係にメディア・データの処理を開始できる点に対応するメディア・データ・サンプル７４８を識別する。このテーブルのサンプル・インデックス値は、単調に増加しなければならない。
【００５６】
ｓａｍｐｌｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｔａｂｌｅアトム（ｓｔｓｄアトム）９７８は、アトム・サイズ値、４バイトのａｔｏｍＩｄ（「ｓｔｓｄ」）、３２ビット符号なし整数（ｎｕｍＳｔｓｄＥｎｔｒｉｅｓ）、およびサンプル記述データ・レコードのシーケンスからなる。ｎｕｍＳｔｓｄＥｎｔｒｉｅｓの値は、サンプル記述データ・レコードのシーケンス内の項目の個数を指定する。各サンプル記述データ・レコードは、ｓａｍｐｌｅ−ｔｏ−ｃｈｕｎｋデータ・レコード内の対応するインデックスによって指定されるメディア・データ・サンプルをエンコードするのに使用された手段を指定する。サンプル記述データ・レコードのシーケンスは、通常、単一の項目を有し（ｎｕｍＳｔｓｄＥｎｔｒｉｅｓ＝１）、この項目は、メディアのタイプ（オーディオ、ビジュアル、ｓｄｓｍ、ｏｄｓｍ）、オーディオ・サンプルおよびビデオ・サンプルに使用された圧縮アルゴリズムなどを指定する。各サンプル記述テーブル項目は、「ｍｐ４＊」アトム９８２に含まれ、この「ｍｐ４＊」は、「ｍｐ４ｓ」（ｓｄｓｍサンプルおよびｏｄｓｍサンプル）、「ｍｐ４ａ」（オーディオ・サンプル）、および「ｍｐ４ｖ」（ビジュアル・サンプル）の包括的な代理である。各「ｍｐ４＊」アトム９８２に、「ｅｓｄｓ」（ｅｌｅｍｅｎｔａｒｙ  ｓｔｒｅａｍ  ｄｅｓｃｒｉｐｔｏｒ）アトム９８６が含まれ、各ｅｓｄｓアトム９８６に、ＭＰＥＧ−４エレメンタリ・ストリーム記述子（Ｅｓ＿Ｄｅｓｃｒ）データ構造９９０が含まれる。
【００５７】
ＭＰＥＧ−４エレメンタリ・ストリーム記述子１０００の構造を、図２３に示す。このデータ構造は、１バイトのタグ（ＥＳ＿ＤｅｓｃｒＴａｇ）１００４と、それに続く、このデータ構造の残りのバイト数の表示１００８、１６ビットのＥＳ＿ＩＤ値（通常は０）１０１２、３つの１ビット・フラグ（ｓｔｒｅａｍＤｅｐｅｎｄｅｎｃｅＦｌａｇ、ＵＲＬ＿Ｆｌａｇ、およびＯＣＲｓｔｒｅａｍＦｌａｇ）１０１６、および５ビットのストリーム優先順位値１０２０からなる。３つのフラグ１０１６のいずれかが非０である場合に、追加のデータ値（図示せず）をストリーム優先順位値１０２０に続けることができる。これらの任意選択のデータ値は、本発明に必要でない。
【００５８】
ストリーム優先順位値１０２０に、デコーダ構成記述子データ構造１０２４および同期レイヤ構成記述子データ構造１０２８が続く。デコーダ構成記述子１０２４の構造１０３２を、図２４に示す。このデータ構造は、１バイトのタグ（ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒＴａｇ）１０３６と、それに続く、このデータ構造の残りのバイト数の表示１０４０、および一連のデータ値からなり、このデータ値には、ｏｂｊｅｃｔＴｙｐｅ  １０４４、ｓｔｒｅａｍＴｙｐｅ  １０４８、ｕｐＳｔｒｅａｍビット１０５２、予約済みビット１０５６、ｂｕｆｆｅｒＳｉｚｅＤＢ  １０６０、ｍａｘＢｉｔｒａｔｅ  １０６４、およびａｖｇＢｉｔｒａｔｅ  １０６８が含まれる。これらの値の後に、ｓｔｒｅａｍＴｙｐｅおよびｏｂｊｅｃｔＴｙｐｅに依存するデコーダ固有情報データ構造１０７２を続けることができる。デコーダ固有情報データ構造１０７２は、ｓｄｓｍに必要であるが、ｏｄｓｍには不要である。ほとんどのオーディオおよびビジュアルのメディア・データ・ストリームも、デコーダ構成記述子１０３２内にデコーダ固有情報データ構造を有する。
【００５９】
デコーダ固有情報１０７２の構造１０７６を、図２５に示す。このデータ構造は、１バイトのタグ（ＤｅｃｏｄｅｒＳｐｅｃｉｆｉｃＩｎｆｏＴａｇ）１０８０と、それに続く、このデータ構造の残りのバイト数の表示１０８４からなる。残りのバイトは、ｏｂｊｅｃｔＴｙｐｅおよびｓｔｒｅａｍＴｙｐｅに依存する。ｓｄｓｍ（ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍまたはＢＩＦＳ）の場合に、デコーダ固有情報１０７２および１０７６に、ｎｏｄｅＩＤ値のエンコードに使用されたビット数の表示と、ｒｏｕｔｅＩＤ値のエンコードに使用されたビット数の表示が含まれる。これらの値のそれぞれが、５ビットの符号なし整数によって表される。
【００６０】
同期レイヤ構成記述子１０２８の構造１０８８を、図２６に示す。このデータ構造は、１バイトのタグ（ＳＬＣｏｎｆｉｇＤｅｓｃｒＴａｇ）１０９０と、それに続く、このデータ構造の残りのバイト数の表示１０９４（必ず１）および単一のデータ・バイト（値２すなわち「ｐｒｅｄｅｆｉｎｅｄ」）１０９８からなり、このデータ・バイトは、同期レイヤに事前定義の構成が使用されなければならないことを示す。
【００６１】
３．０  Ｓｃｅｎｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｓｔｒｅａｍ（ｓｄｓｍ）
特定のタイプのオーディオ・データ・ストリームおよびビジュアル・データ・ストリームのエンコードまたはデコードに使用される手段は、ＸＭＴ−Ａ仕様およびＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａ  Ｆｉｌｅ仕様によって決定されず、したがってこれらのストリームをエンコードする形の詳細には、本明細書では触れない。ＸＭＴ−Ａ文書に、ｓｔｒｅａｍ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ（ｓｄｓｍ）およびｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ（ｏｄｓｍ）の内容に関する詳細な情報が含まれる。その結果、各ＸＭＴ−Ａ文書は、ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａ  Ｆｉｌｅに含まれるｓｄｓｍストリームおよびｏｄｓｍストリームに密接に関連する。このセクションでは、ｓｄｓｍデータの構造を説明し、次のセクションで、ｏｄｓｍデータの構造を説明する。
【００６２】
他のメディア・データ・ストリームと同様に、ｓｄｓｍデータは、１つまたは複数のチャンクからなり、各チャンクは、１つまたは複数のサンプルからなる。図２７からわかるように、ｓｄｓｍバイナリ・チャンク１１００内の各サンプルは、「コマンド・フレーム」１１１０として定義される。各コマンド・フレーム１１１０は、バイト整列される。図２８からわかるように、各コマンド・フレーム１１１０は、１つまたは複数の「ＢＩＦＳコマンド」１１２０からなる。ＢＩＦＳは、「ＢＩｎａｒｙ  Ｆｏｒｍａｔ  ｆｏｒ  Ｓｔｒｅａｍｓ」の略である。各ＢＩＦＳコマンド１１２０に、継続ビット１１３０および１１４０が続く。継続ビットの値が（１）１１３０である場合に、もう１つのＢＩＦＳコマンドが続く。そうでない場合１１４０に、継続ビットに、最後のバイトを完了するのに十分な個数のヌル・パディング・ビット１１５０が続く。個々のＢＩＦＳコマンド１１２０は、コマンド・フレームの最初のＢＩＦＳコマンドを除いて、一般にバイト整列されない。
【００６３】
図２９から３２からわかるように、４タイプのＢＩＦＳコマンドすなわち「挿入」、「削除」、「置換」、「シーン置換」がある。ＢＩＦＳ挿入コマンド１２００は、２ビットの挿入コード（値＝「００」）１２０６と、それに続く２ビットのパラメータ型コード１２１０および挿入コマンド・データ１２１６からなる。ＢＩＦＳ削除コマンド１２２０は、２ビットの削除コード（値＝「０１」）１２２６と、それに続く２ビットのパラメータ型コード１２３０および削除コマンド・データ１２３６からなる。ＢＩＦＳ置換コマンド１２４０は、２ビットの置換コード（値＝「１０」）１２４４と、それに続く２ビットのパラメータ型コード１２５０および置換コマンド・データ１２６０からなる。ＢＩＦＳシーン置換コマンド１２７０は、２ビットのシーン置換コード（値＝「１１」）１２８０と、それに続くＢＩＦＳシーン・データ構造１２９０からなる。
【００６４】
図３３から３５からわかるように、３タイプのＢＩＦＳ挿入コマンドすなわち、（ａ）Ｎｏｄｅ  Ｉｎｓｅｒｔｉｏｎコマンド、（ｂ）Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｉｎｓｅｒｔｉｏｎコマンド、および（ｃ）Ｒｏｕｔｅ  Ｉｎｓｅｒｔｉｏｎコマンドがある。挿入コマンドのタイプは、パラメータ型値１２１０によって決定される。Ｎｏｄｅ  Ｉｎｓｅｒｔｉｏｎコマンド１３００は、２ビットの挿入コード（値＝「００」）１３０４と、それに続く、２ビットのパラメータ型コード（値＝「０１」、型＝Ｎｏｄｅ）１３０８、ｎｏｄｅＩＤ値１３１２、２ビットの挿入位置コード１３１６、およびＳＦＮｏｄｅデータ構造１３２４からなる。挿入位置コード１３１６の値が０である場合には、８ビットの位置値１３２０が、挿入位置コード１３１６に続く。ｎｏｄｅＩＤ値１３１２は、ＢＩＦＳコマンドの他所で定義された更新可能なノードの組の１つを指定する。これおよび他のｎｏｄｅＩＤ値をエンコードするのに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。ＳＦＮｏｄｅデータ構造１３２４の構造は、下で説明する。
【００６５】
Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｉｎｓｅｒｔｉｏｎコマンド１３２８は、２ビットの挿入コード（値＝「００」）１３３２と、それに続く、２ビットのパラメータ型コード（値＝「１０」、型＝ＩｎｄｅｘｅｄＶａｌｕｅ）１３３６、ｎｏｄｅＩＤ値１３４０、ｉｎＦｉｅｌｄＩＤ値１３４４、２ビットの挿入位置コード１３４８、およびフィールド値データ構造１３５６からなる。挿入位置コード１３４８の値が０である場合に、８ビットの位置値１３５２が、挿入位置コード１３４８に続く。ｎｏｄｅＩＤ値１３４０は、ＢＩＦＳコマンドの他所で定義された更新可能なノードの組の１つを指定する。ｎｏｄｅＩＤ値１３４０のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。ｉｎＦｉｅｌｄＩＤ値１３４４は、ｎｏｄｅＩＤ１３４０の値によって指定されるＢＩＦＳノードのデータ・フィールドの１つを識別する。ｉｎＦｉｅｌｄＩＤ値１３４４をエンコードするのに使用されるビット数は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様に含まれるテーブルに依存する。
【００６６】
フィールド値データ構造の内容は、指定されたＢＩＦＳノードの指定されたデータ・フィールドのフィールド・データ型（ｂｏｏｌｅａｎ、ｉｎｔｅｇｅｒ、ｆｌｏａｔ、ｓｔｒｉｎｇ、ｎｏｄｅなど）に依存する。これは、１ビットのように単純なものまたはＳＦＮｏｄｅデータ構造のように複雑なものとすることができる。各ＢＩＦＳノードの各データ・フィールドのフィールド・データ型は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様に含まれるテーブルで指定される。
【００６７】
Ｒｏｕｔｅ  Ｉｎｓｅｒｔｉｏｎコマンド１３６０は、２ビットの挿入コード（値＝「００」）１３６４と、それに続く、２ビットのパラメータ型コード（値＝「１１」、型＝Ｒｏｕｔｅ）１３６８、「ｉｓＵｐｄａｔｅａｂｌｅ」ビット１３７２、ｄｅｐａｒｔｕｒｅＮｏｄｅＩＤ値１３８０、ｄｅｐａｒｔｕｒｅＦｉｅｌｄＩＤ値１３８４、ａｒｒｉｖａｌＮｏｄｅＩＤ値１３８８、およびａｒｒｉｖａｌＦｉｅｌｄＩＤ値１３９２からなる。「ｉｓＵｐｄａｔｅａｂｌｅ」ビットの値が（１）である場合に、ｒｏｕｔｅＩＤ値１３７６が、「ｉｓＵｐｄａｔｅａｂｌｅ」ビット１３７２に続く。ｄｅｐａｒｔｕｒｅＮｏｄｅＩＤ値１３８０およびａｒｒｉｖａｌＮｏｄｅＩＤ値１３８８のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。ｄｅｐａｒｔｕｒｅＦｉｅｌｄＩＤ値１３８４のエンコードに使用されるビット数およびａｒｒｉｖａｌＦｉｅｌｄＩＤ値１３９２のエンコードに使用されるビット数は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様に含まれるテーブルに依存する。
【００６８】
図３６から３８からわかるように、３タイプのＢＩＦＳ削除コマンドすなわち（ａ）Ｎｏｄｅ  Ｄｅｌｅｔｉｏｎコマンド、（ｂ）Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｄｅｌｅｔｉｏｎコマンド、および（ｃ）Ｒｏｕｔｅ  Ｄｅｌｅｔｉｏｎコマンドがある。削除コマンドのタイプは、パラメータ型値１２３０によって決定される。Ｎｏｄｅ  Ｄｅｌｅｔｉｏｎコマンド１４００は、２ビットの削除コード（値＝「００」）１４０６と、それに続く、２ビットのパラメータ型コード（値＝「００」、型＝Ｎｏｄｅ）１４１２およびｎｏｄｅＩＤ値１４１８からなる。ｎｏｄｅＩＤ値１４１８は、ＢＩＦＳコマンドの他所で定義された更新可能なノードの組の１つを指定する。ｎｏｄｅＩＤ値１４１８のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。
【００６９】
Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｄｅｌｅｔｉｏｎコマンド１４２４は、２ビットの削除コード（値＝「０１」）１４３０と、それに続く、２ビットのパラメータ型コード（値＝「１０」、型＝Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ）１４３６、ｎｏｄｅＩＤ値１４４２、ｉｎＦｉｅｌｄＩＤ値１４４８、および２ビットの削除位置値１４５４からなる。ｎｏｄｅＩＤ値１４１８は、ＢＩＳＦコマンドの他所で定義された更新可能なノードの組の１つを指定する。ｎｏｄｅＩＤ値１４１８のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。
【００７０】
Ｒｏｕｔｅ  Ｄｅｌｅｔｉｏｎコマンド１４６６は、２ビットの削除コード（値＝「１０」）１４７２と、それに続く、２ビットのパラメータ型コード（値＝「１１」、型＝Ｒｏｕｔｅ）１４７８およびｒｏｕｔｅＩＤ値１４８４からなる。ｒｏｕｔｅＩＤ値１４８４は、ＢＩＳＦコマンドの他所で定義された更新可能なノードの組の１つを指定する。ｒｏｕｔｅＩＤ値１４８４のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。
【００７１】
図３９から４２からわかるように、４タイプの置換コマンドすなわち、（ａ）Ｎｏｄｅ  Ｒｅｐｌａｃｅｍｅｎｔコマンド、（ｂ）Ｆｉｅｌｄ  Ｒｅｐｌａｃｅｍｅｎｔコマンド、（ｃ）Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｒｅｐｌａｃｅｍｅｎｔコマンド、および（ｄ）Ｒｏｕｔｅ  Ｒｅｐｌａｃｅｍｅｎｔコマンドがある。置換コマンドのタイプは、パラメータ型値１２５０によって決定される。Ｎｏｄｅ  Ｒｅｐｌａｃｅｍｅｎｔコマンド１５００は、２ビットの置換コード（値＝「１０」）１５０４と、それに続く、２ビットのパラメータ型コード（値＝「０１」、型＝Ｎｏｄｅ）１５０８、ｎｏｄｅＩＤ値１５１０、およびＳＦＮｏｄｅデータ構造１５１４からなる。ｎｏｄｅＩＤ値１５１０は、ＢＩＦＳコマンドの他所で定義された更新可能なノードの組の１つを指定する。ｎｏｄｅＩＤ値１５１０のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。ＳＦＮｏｄｅデータ構造１５１４の構造は、下で説明する。
【００７２】
Ｆｉｅｌｄ  Ｒｅｐｌａｃｅｍｅｎｔコマンド１５２０は、２ビットの置換コード（値＝「１０」）１５２４と、それに続く、２ビットのパラメータ型コード（値＝「０１」、型＝Ｆｉｅｌｄ）１５２８、ｎｏｄｅＩＤ値１５３０、ｉｎＦｉｅｌｄＩＤ値１５３４、およびフィールド値データ構造１５３８からなる。ｎｏｄｅＩＤ値１５３０は、ＢＩＦＳコマンドの他所で定義された更新可能なノードの組の１つを指定する。ｎｏｄｅＩＤ値１５３０のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。ｉｎＦｉｅｌｄＩＤ値１５３４は、ｎｏｄｅＩＤ１５３０の値によって指定されるＢＩＦＳノードのデータ・フィールドの１つを識別する。ｉｎＦｉｅｌｄＩＤ値１５３４のエンコードに使用されるビット数は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様に含まれるテーブルに依存する。
【００７３】
Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｒｅｐｌａｃｅｍｅｎｔコマンド１５４０は、２ビットの置換コード（値＝「１０」）１５４４と、それに続く、２ビットのパラメータ型コード（値＝「１０」、型＝ＩｎｄｅｘｅｄＶａｌｕｅ）１５４８、ｎｏｄｅＩＤ値１５５０、ｉｎＦｉｅｌｄＩＤ値１５５４、２ビットの置換位置コード１５５８、およびフィールド値データ構造１５６４からなる。置換位置コード１５５８の値が０である場合に、８ビットの位置値１５６０が、置換位置コード１５５８に続く。ｎｏｄｅＩＤ値１５５０は、ＢＩＦＳコマンドの他所で定義された更新可能なノードの組の１つを指定する。ｎｏｄｅＩＤ値１５５０のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。ｉｎＦｉｅｌｄＩＤ値１５５４は、ｎｏｄｅＩＤ１５５０の値によって指定されるＢＩＦＳノードのデータ・フィールドの１つを識別する。ｉｎＦｉｅｌｄＩＤ値１５５４のエンコードに使用されるビット数は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様に含まれるテーブルに依存する。
【００７４】
Ｒｏｕｔｅ  Ｒｅｐｌａｃｅｍｅｎｔコマンド１５７０は、２ビットの置換コード（値＝「１０」）１５７４と、それに続く、２ビットのパラメータ型コード（値＝「１１」、型＝Ｒｏｕｔｅ）１５７８、ｒｏｕｔｅＩＤ値１５８０、ｄｅｐａｒｔｕｒｅＮｏｄｅＩＤ値１５８４、ｄｅｐａｒｔｕｒｅＦｉｅｌｄＩＤ値１５８８、ａｒｒｉｖａｌＮｏｄｅＩＤ値１５９０、およびａｒｒｉｖａｌＦｉｅｌｄＩＤ値１５９４からなる。ｒｏｕｔｅＩＤ値１５８０は、ＢＩＦＳコマンドの他所で定義された更新可能なノードの組の１つを指定する。ｒｏｕｔｅＩＤ値１５８０のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。ｄｅｐａｒｔｕｒｅＮｏｄｅＩＤ値１５８４およびａｒｒｉｖａｌＮｏｄｅＩＤ値１５９０のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。ｄｅｐａｒｔｕｒｅＦｉｅｌｄＩＤ値１５８８のエンコードに使用されるビット数およびａｒｒｉｖａｌＦｉｅｌｄＩＤ値１５９４のエンコードに使用されるビット数は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様に含まれるテーブルに依存する。
【００７５】
図３２からわかるように、ＢＩＦＳシーン置換コマンド１２７０は、２ビットのシーン置換コード（値＝「１１」）１２８０と、それに続くＢＩＦＳシーン・データ構造１２９０からなる。図４３からわかるように、ＢＩＦＳシーン・データ構造１６００は、６ビットの予約済みフィールド１６１０、２つの１ビット・フラグ（ＵＳＥＮＡＭＥＳ  １６２０およびｐｒｏｔｏＬｉｓｔ  １６３０）、ＳＦＴｏｐＮｏｄｅデータ構造１６４０、および１ビット・フラグ（ｈａｓＲｏｕｔｅｓ）１６５０からなる。ｐｒｏｔｏＬｉｓｔフラグ１６３０が真（１）の場合に、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義された追加データが、ｐｒｏｔｏＬｉｓｔフラグに続く。ＳＦＴｏｐＮｏｄｅデータ構造１６４０は、図４４から４８に示されたＳＦＮｏｄｅデータ構造の特殊な例である。ｈａｓＲｏｕｔｅｓフラグ１６５０が真（１）の場合に、Ｒｏｕｔｅｓデータ構造１６６０が、ｈａｓＲｏｕｔｅｓフラグに続く。Ｒｏｕｔｅｓデータ構造の構造を、図４９から５１に示す。
【００７６】
図４４、４５、および４６に示されているように、ＳＦＮｏｄｅデータ構造は、３つの形すなわち、（ａ）再利用、（ｂ）マスク・ノード、および（ｃ）リスト・ノードの１つを有することができる。３つの形のすべてが、１ビットのフラグ（ｉｓＲｅｕｓｅｄ）から始まる。再利用されるＳＦＮｏｄｅ１７００の場合に、ｉｓＲｅｕｓｅｄフラグの値は「１」（真）１７０４であり、ＳＦＮｏｄｅデータ構造の残りは、ｎｏｄｅＩＤｒｅｆ値１７０８からなる。ｎｏｄｅＩＤｒｅｆ１７０８の値は、ｓｄｓｍデータの他所で定義された更新可能なＳＦＮｏｄｅのｎｏｄｅＩＤ値と一致しなければならない。
【００７７】
ｉｓＲｅｕｓｅｄＦｌａｇが偽（０）１７１２および１７３２の場合に、ＳＦＮｏｄｅ型は、ｍａｓｋＡｃｃｅｓｓフラグ・ビット１７２２および１７４２の値に応じて、図４５および４６に示された２つの形の１つを有することができる。どちらの場合でも、ＳＦＮｏｄｅのデータに、ローカル・ノード型値（ｌｏｃａｌＮｏｄｅＴｙｐｅ）１７１４および１７３４、１ビットのフラグ（ｉｓＵｐｄａｔｅａｂｌｅ）１７１６および１７３６、ならびに第２の１ビットのフラグ（ｍａｓｋＡｃｃｅｓｓ）１７２２および１７４２が含まれる。ローカル・ノード型１７１４および１７３４のエンコードに使用されるビット数は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で指定されるテーブルに依存する。ｉｓＵｐｄａｔｅａｂｌｅフラグ１７１６および１７３６が真（１）の場合に、ｎｏｄｅＩＤ値１７１８および１７３８がｉｓＵｐｄａｔｅａｂｌｅフラグに続く。ｉｓＵｐｄａｔｅａｂｌｅフラグ１７１６および１７３６が真（１）であり、関連するＢＩＦＳシーン・データ構造１６００のＵＳＥＮＡＭＥＳフラグ１６２０も真（１）である場合に、ヌル終端ストリング（「ｎａｍｅ」）１７２０および１７４０が、ｎｏｄｅＩＤ値１７１８および１７３８に続く。
【００７８】
ｍａｓｋＡｃｃｅｓｓビットが真（１）１７２２の場合に、ＳＦＮｏｄｅは、「マスク・ノード」構造１７１０を有する。この場合に、図４５に示されているように、ｍａｓｋＡｃｃｅｓｓビット１７２２に、ｌｏｃａｌＮｏｄｅＴｙｐｅ  １７１４の値によって与えられるノード型を有するＢＩＦＳノードのＭＰＥＧ−４仕様で定義されたｎＦｉｅｌｄｓプロパティ・フィールドごとに１つの、マスク・ビット１７２６の順序付きシーケンスが続く。これらのマスク・ビットのうちの１つが真（１）である場合のそれぞれで、マスク・ビットに、ｌｏｃａｌＮｏｄｅＴｙｐｅ１７３４によって決定されるフィールド・データ型（ｉｎｔｅｇｅｒ、ｂｏｏｌｅａｎ、ｓｔｒｉｎｇ、ｎｏｄｅなど）に従ってエンコードされたバイナリ・フィールド値１７２８、フィールド番号（マスク・ビットのシーケンス内の位置）、およびＭＰＥＧ−４仕様で定義されたテーブルが続く。
【００７９】
ｍａｓｋＡｃｃｅｓｓビットが偽（０）である場合１７４２に、ＳＦＮｏｄｅは、「リスト・ノード」構造１７３０を有する。この場合に、図４６に示されているように、ｍａｓｋＡｃｃｅｓｓビット１７４２に、１つまたは複数のフィールド参照レコードが続く。各フィールド参照レコードは、１ビットの終了フラグ１７４４および１７５０から始まる。終了フラグが偽（０）である場合１７４４に、終了フラグ１７４４に、ローカル・ノード型１７３４について定義されたプロパティ・フィールドのフィールド参照インデックス番号（ｆｉｅｌｄＲｅｆ）１７４６が続き、ｆｉｅｌｄＲｅｆ値１７４６に、ローカル・ノード型１７３４によって決定されるフィールド・データ型（ｉｎｔｅｇｅｒ、ｂｏｏｌｅａｎ、ｓｔｒｉｎｇ、ｎｏｄｅなど）およびｆｉｅｌｄＲｅｆ値１７４６によって示されるプロパティ・フィールドに従ってエンコードされたバイナリ・フィールド値１７４８が続く。ｆｉｅｌｄＲｅｆ値１７４６のエンコードに使用されるビット数は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルによって決定される。終了フラグが真（１）である場合１７５０に、フィールド値のリストが終了する。
【００８０】
ＳＦＮｏｄｅ構造に含まれる各プロパティ・フィールド値は、単一のデータ値（ＳＦＦｉｅｌｄデータ構造）または複数のデータ値（ＭＦＦｉｅｌｄデータ構造）からなるものとすることができる。各ＭＦＦｉｅｌｄデータ構造に、０個以上のＳＦＦｉｅｌｄコンポーネントが含まれる。図４７および図４８からわかるように、ＭＦＦｉｅｌｄ構造には、ｉｓＬｉｓｔビット１７６６および１７８６の値に基づいて、リスト形式１７６０およびベクトル形式１７８０の２つの形がある。両方の形式が、１ビットの予約済みビット１７６２および１７８２と、それに続くｉｓＬｉｓｔビット１７６６および１７８６から始まる。
【００８１】
ｉｓＬｉｓｔビットが、値（１）を有する場合１７６６に、ＭＦＦｉｅｌｄデータ構造は、リスト形式１７６０を有する。この場合に、ｉｓＬｉｓｔビット１７６６に、１ビットのｅｎｄＦｌａｇ値１７７０および１７７２のシーケンスが続く。ｅｎｄＦｌａｇビットの値が「０」である場合１７７０に、ｅｎｄＦｌａｇビットに、ＳＦＦｉｅｌｄデータ構造１７７４が続く。ｅｎｄＦｌａｇビットの値が「１」である場合１７７２に、ＭＦＦｉｅｌｄデータ構造が終わる。
【００８２】
ｉｓＬｉｓｔビットが、値（０）を有する場合１７８６に、ＭＦＦｉｅｌｄデータ構造は、ベクトル形式１７８０を有する。この場合に、ｉｓＬｉｓｔビットに１７８６、５ビットのフィールド（ｎＢｉｔｓ）１７９０が続き、このフィールドは、次のフィールド・カウント値（ｎＦｉｅｌｄｓ）１７９２のビット数を指定する。これに、ｎＦｉｅｌｄｓ個のＳＦＦｉｅｌｄ構造１７９６のシーケンスが続く。
【００８３】
各ＳＦＦｉｅｌｄ値の構造は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で指定されるテーブルによって示されるように、対応するプロパティ・フィールドに関連する特定のフィールド・データ型に依存する。たとえば、ｂｏｏｌｅａｎフィールドは、単一ビットからなる。ｉｎｔｅｇｅｒ、ｆｌｏａｔ、ｓｔｒｉｎｇ、ＳＦＮｏｄｅを含む他の事例が、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義され、説明されている。
【００８４】
ＢＩＦＳシーン・データ構造１６００の最後のコンポーネントが、任意選択のＲｏｕｔｅｓデータ構造１６６０である。図４９および５０からわかるように、Ｒｏｕｔｅｓデータ構造には、リスト形式１８００およびベクトル形式１８３０の２つの形がある。Ｒｏｕｔｅｓデータ構造の両方の形式が、１ビットのリスト・フラグ１８０５および１８３５から始まる。リスト・フラグの値が真（１）である場合１８０５に、Ｒｏｕｔｅｓデータ構造は、リスト形式１８００を有する。この場合に、リスト・ビット１８０５に、１つまたは複数のＲｏｕｔｅデータ構造１８１０が続き、各Ｒｏｕｔｅデータ構造１８１０に、１ビットのｍｏｒｅＲｏｕｔｅｓフラグ１８１５および１８２０が続く。ｍｏｒｅＲｏｕｔｅｓフラグの値が真（１）の場合１８１５に、もう１つのＲｏｕｔｅデータ構造１８１０が続く。ｍｏｒｅＲｏｕｔｅｓフラグの値が偽（０）の場合１８２０に、Ｒｏｕｔｅｓデータ構造１８００が終了する。
【００８５】
Ｒｏｕｔｅｓデータ構造のリスト・フラグの値が偽（０）である場合１８３５に、Ｒｏｕｔｅｓデータ構造は、ベクトル形式１８３０を有する。この場合に、リスト・ビット１８３５に、５ビットのｎＢｉｔｓフィールド１８４０が続く。ｎＢｉｔｓフィールドに含まれる符号なし整数値は、それに続くｎｕｍＲｏｕｔｅｓ値１８４５のエンコードに使用されたビット数を指定する。ｎｕｍＲｏｕｔｅｓ値１８４５でエンコードされた符号なし整数は、ｎｕｍＲｏｕｔｅｓ値１８４５に続くＲｏｕｔｅデータ構造１８５０の個数を指定する。
【００８６】
図５１からわかるように、Ｒｏｕｔｅデータ構造１８６０は、１ビットのフラグ（ｉｓＵｐｄａｔｅａｂｌｅ）１８６５、ｏｕｔＮｏｄｅＩＤ値１８８０、ｏｕｔＦｉｅｌｄＲｅｆ値１８８５、ｉｎＮｏｄｅＩＤ値１８９０、およびｉｎＦｉｅｌｄＲｅｆ値１８９５からなる。ｉｓＵｐｄａｔｅａｂｌｅフラグ１８６５の値が真（１）である場合に、ｉｓＵｐｄａｔｅａｂｌｅフラグ１８６５に、ｒｏｕｔｅＩＤ値１８７０が続く。ｉｓＵｐｄａｔｅａｂｌｅフラグ１８６５の値が真（１）であり、対応するＢＩＦＳシーン・データ構造１６００のＵＳＥＮＡＭＥＳフラグ１６２０の値も真（１）である場合に、ｒｏｕｔｅＩＤ値１８７０に、ヌル終端ストリング（ｒｏｕｔｅＮａｍｅ）１８７５が続く。ｏｕｔＮｏｄｅＩＤ値、ｉｎＮｏｄｅＩＤ値、およびｒｏｕｔｅＩＤ値のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。ｏｕｔＦｉｅｌｄＲｅｆおよびｉｎＦｉｅｌｄＲｅｆのエンコードに使用されるビット数は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されるテーブルによって決定される。
【００８７】
４．０  Ｏｂｊｅｃｔ  Ｄｅｓｃｒｉｐｔｏｒ  Ｓｔｒｅａｍ（ｏｄｓｍ）
他のＭＰＥＧ−４エレメンタリ・ストリームと同様に、ｏｄｓｍ（ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ）は、１つまたは複数のチャンク７３６のシーケンスに含まれる。図５２から５３からわかるように、各ｏｄｓｍチャンク１９００は、ｏｄｓｍサンプル１９２０のシーケンスからなり、各ｏｄｓｍサンプル１９４０は、ｏｄｓｍコマンド１９６０のシーケンスからなる。各ｏｄｓｍチャンク１９００のｏｄｓｍサンプル１９２０の個数は、ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍのｔｒａｋアトム７９０および９００のｓａｍｐｌｅ−ｔｏ−ｃｈｕｎｋ  ｔａｂｌｅアトム（ｓｔｓｃ）９６０の内容によって決定される。各ｏｄｓｍサンプル１９４０のｏｄｓｍコマンド１９６０の個数は、ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍのｔｒａｋアトム７９０および９００のｓａｍｐｌｅ  ｓｉｚｅ  ｔａｂｌｅアトム（ｓｔｓｚ）９７０によって決定される。
【００８８】
２つの可能なｏｄｓｍコマンドすなわち、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅコマンドおよびＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅコマンドがある。図５４からわかるように、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅコマンド２０００は、１バイトのＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅＴａｇ  ２０１０、コマンドの残りのバイト数の表示（ｎｕｍＢｙｔｅｓ）２０２０、およびＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒｓ  ２０３０のシーケンスからなる。ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒの構造を、図５６から５７に要約した。図５５からわかるように、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅコマンド２０４０は、１バイトのＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅＴａｇ  ２０５０、コマンドの残りのバイト数の表示（ｎｕｍＢｙｔｅｓ）２０６０、ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩｄ値２０７０のシーケンス、および２ビットから６ビットのパディング・ビット２０８０からなる。
【００８９】
各ｎｕｍＢｙｔｅｓ値２０２０および２０６０は、ｏｄｓｍコマンドの残りのバイト数を指定する。ｎｕｍＢｙｔｅｓの値が１２８未満である場合に、この値は、単一のバイトでエンコードされる。そうでない場合には、ｎｕｍＢｙｔｅｓの値は、サイズ・バイトのシーケンスでエンコードされる。各サイズ・バイトの上位ビットは、別のサイズ・バイトが続くかどうかを示す。この上位ビットが「１」である場合には、次のサイズ・バイトが続く。各サイズ・バイトの残りの７ビットは、ｎｕｍＢｙｔｅｓの結果の符号なし整数値の７ビットを指定する。
【００９０】
各ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩｄ値２０７０は、１０ビットでエンコードされ、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅコマンド２０４０で見つかる１０ビットのｏｂｊｅｃｔＤｅｓｃｉｐｔｏｒＩｄ値のシーケンスは、バイトのシーケンスにパックされる。ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩｄ値の個数が４の倍数でない場合には、このコマンドの最後のバイトを充てんするために、２個、４個、または６個のヌル・ビット２０８０が、最後のｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩｄ値に続く。
【００９１】
図５６からわかるように、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅコマンド２０００内のＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ  ２１００は、１バイトのＭＰ４＿ＯＤ＿Ｔａｇ  ２１０８と、それに続く、ｎｕｍＢｙｔｅｓ値２１１６、１０ビットのＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ値２１２４、１ビットのＵＲＬ＿Ｆｌａｇ値２１３２、５ビットの予約済みフィールド（０ｘ１ｆ）２１４０、およびＥＳ＿Ｄｅｓｃｒデータ構造またはＥｓＩｄＲｅｆデータ構造２１４８のいずれかからなる。ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒのこの形式では、ＵＲＬ＿Ｆｌａｇ  ２１３２の値が、必ず偽（０）である。ｎｕｍＢｙｔｅｓ値２１１６は、このオブジェクト記述子の残りを含むバイト数を指定し、これは、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅコマンド２０００またはＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅコマンド２０４０に見られるｎｕｍＢｙｔｅｓ値２０２０および２０６０について指定されたものと同一の形でエンコードされる。
【００９２】
ＥＳ＿Ｄｅｓｃｒデータ構造１０００の構造を、図２３に示した。図５７からわかるように、ＥｓＩｄＲｅｆデータ構造２１６０は、１バイトのＥＳ＿ＩＤ＿ＲｅｆＴａｇ  ２１７０、ｎｕｍＢｙｔｅｓ値２１８０、および１６ビットのエレメンタリ・ストリームＩＤ（ＥＳ＿ＩＤ）値２１９０からなる。この場合に、ｎｕｍＢｙｔｅｓの値は、必ず「２」であり、この値は、８ビット整数として指定される。
【００９３】
本発明の動作を、全般的に図５８に示す。処理２２００は、ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａファイル２２１０の内容に基づいて、ＸＭＴ−Ａ文書２２２０および１組のメディア・データ・ファイル２２３０を作成する。入力ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａファイル２２１０を、「ｍｐ４バイナリ・ファイル」または「ｍｐ４ファイル」とも称する場合がある。出力ＸＭＴ−Ａ文書は、ＸＭＴ−Ａ仕様ＩＳＯ／ＩＥＣ  １４４９６−１：２０００  Ａｍｄ．２に基づくテキスト・ファイル、またはそのようなファイルを表すデータ構造の組からなるものとすることができる。出力メディア・データ・ファイル２２３０は、ｍｐ４ファイル２２１０に含まれるオーディオ・データ、ビデオ・データ、およびイメージ・データを表す。出力メディア・データ・ファイルのそれぞれは、出力ＸＭＴ−Ａ文書２２２０に含まれるＳｔｒｅａｍＳｏｕｒｃｅ参照６７０によって識別される。メディア・データ・ファイル２２３０の個数は、０とすることができる。
【００９４】
本発明２２００によって実行される論理動作は、（１）コンピュータ・システムで稼動するコンピュータ実施されるステップのシーケンスとして、または（２）コンピューティング・システム内の相互接続された機械モジュールとして、あるいはその両方として実施することができる。実施形態は、本発明を適用するシステムの性能要件に依存する選択の問題である。したがって、本明細書で説明する本発明の実施形態を構成する論理動作を、その代わりに動作、ステップ、またはモジュールと呼ぶ。
【００９５】
さらに、本発明によって実行される動作を、コンピュータ可読媒体として実施されたコンピュータ可読プログラムとすることができる。制限ではなく例として、コンピュータ可読媒体に、コンピュータ記憶媒体および通信媒体が含まれる。コンピュータ可読媒体に、コンピュータ可読命令、データ構造、プログラム・モジュール、または他のデータなどの情報の保管の方法または技術で実施された、揮発性および不揮発性の、取外し可能および取り外し不能の媒体が含まれる。コンピュータ記憶媒体に、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュ・メモリ、または他のメモリ技術、ＣＤ−ＲＯＭ、ディジタル多用途ディスク（ＤＶＤ）、または他の光ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージ、または他の磁気記憶デバイス、あるいは所望の情報の保管に使用でき、コンピュータによってアクセス可能な他のすべての媒体が含まれるが、これに制限はされない。通信媒体は、通常、搬送波または他のトランスポート機構などの変調されたデータ信号内でコンピュータ可読命令、データ構造、プログラム・モジュール、または他のデータを実施し、通信媒体には、すべての情報配信媒体が含まれる。用語「変調されたデータ信号」は、信号内で情報をエンコードする形で、その特性の１つまたは複数を設定または変更された信号を意味する。制限ではなく例として、通信媒体に、有線接続または直接配線接続などの有線媒体と、音響、ＲＦ、赤外線、および他の無線媒体などの無線媒体が含まれる。上記のいずれかの組合せも、コンピュータ可読媒体の範囲に含まれなければならない。
【００９６】
図５８からわかるように、出力ＸＭＴ−Ａ文書２２２０およびメディア・データ・ファイル２２３０を作成する処理は、２ステップで達成される。第１ステップでは、ｍｐ４ファイル−中間文書コンバータ２２４０が、入力ｍｐ４ファイル２２１０を解釈し、中間文書２２４５の組およびメディア・データ・ファイル２２３０の組を作成する。中間文書２２４５の組は、ｍｐ４−ｆｉｌｅ文書２２５０およびｍｐ４−ｂｉｆｓ文書２２６０からなる。第２ステップでは、中間文書−ＸＭＴ−Ａコンバータ２２７０が、中間文書２２４５に基づいて、出力ＸＭＴ−Ａ２２２０を生成する。
【００９７】
この処理２２００をこの２つのステップに分割する理由の１つが、入力ｍｐ４ファイル２２１０が、出力ＸＭＴ−Ａ文書２２２０およびメディア・データ・ファイル２２３０によって表されるものと同一の情報を表すが、入力ｍｐ４ファイル２２１０の編成および構造が、出力ＸＭＴ−Ａ文書の編成および構造と大きく異なることである。たとえば、ｍｐ４ファイル２２１０の構造は、Ｑｕｉｃｋｔｉｍｅメディア・データ・ファイルの構造に密接に関連するが、ＸＭＴ−Ａ文書２２２０の構造は、Ｑｕｉｃｋｔｉｍｅメディア・データ・ファイルの特性を全く有しない。ＸＭＴ−Ａ文書２２２０には、ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ（ｓｄｓｍ）およびｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ（ｏｄｓｍ）の記述が含まれるが、これらを任意の順序で混合することができる。ｍｐ４ファイル２２１０にも、ｓｄｓｍおよびｏｄｓｍの記述が含まれるが、これらのそれぞれが、時間的に順序付けられたサンプルの別々のストリームとして表される。
【００９８】
ｍｐ４ファイル２２１０の構造および編成が、ＸＭＴ−Ａ文書２２２０の構造および編成と非常に異なるので、ｍｐ４ファイル２２１０に基づいてＸＭＴ−Ａ文書２２２０を作成する処理を、２つのステップ（ａ）デコードおよび（ｂ）再編成に分割することが有利である。第１ステップで、ｍｐ４ファイルにエンコードされたバイナリ情報が、解釈され、ｍｐ４ファイル、ｓｄｓｍ、およびｏｄｓｍの構造および編成を表す構造化文書の組を作成するのに使用される。他のバイナリ・データは、単に新しいメディア・データ・ファイルにコピーされる。このステップは、ＸＭＴ−Ａ文書の定義にかまわずに実行することができる。第２ステップでは、第１ステップで作成された構造化文書を使用して、ＸＭＴ−Ａ文書を作成する。このステップは、この情報がｍｐ４ファイルのバイナリ形式で表現された形にかまわずに実行することができる。
【００９９】
ｍｐ４ファイル２２１０に基づいてＸＭＴ−Ａ文書２２２０を作成する処理をこの２つのステップ２２４０および２２７０に分割するという目的を達成するために、（ａ）ｍｐ４ファイルの構造および編成、（ｂ）ｍｐ４ファイルで表されるｓｔｒｅａｍ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ（ｓｄｓｍ）の構造および編成、ならびに（ｃ）ｍｐ４ファイルで表されるｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ（ｏｄｓｍ）の構造および編成を表す新しい構造化文書２２４５を定義する必要がある。これは、３つの新しいタイプの構造化文書すなわち、ｍｐ４ファイルを表す構造間文書、ｓｄｓｍを表す構造化文書、およびｏｄｓｍを表す構造化文書を定義することによって達成することができる。もちろん、ｍｐ４ファイルおよびｓｄｓｍを表すのに必要な構造化文書は、比較的複雑であるが、ｏｄｓｍを表すのに必要な構造化文書は、非常に単純である。その結果、ｏｄｓｍの記述を、ｍｐ４ファイルを表すのに使用される構造化文書に組み込むことが便利である。その結果、本発明のこの実施形態で、ｍｐ４ファイルおよびｏｄｓｍの構造化文書とｓｄｓｍの構造化文書という２つの新しい構造化文書が導入される。この２つの構造化文書は、ｍｐ４−ｆｉｌｅ文書２２５０およびｍｐ４−ｂｉｆｓ文書２２６０として識別される。この構造化文書を、集合的に中間文書２２４５と呼ぶ。
【０１００】
２つのタイプの構造化文書の使用が、便利さの問題として選択されたことに留意されたい。同一の目的を、３タイプの構造化文書（ｍｐ４ファイルだけ、ｏｄｓｍだけ、およびｓｄｓｍだけ）を定義することによって達成することができ、３タイプの情報のすべてを、単一の合成構造化文書に合併することができる。
【０１０１】
本発明の一実施形態で、再編成された情報を表現するために作成される構造化文書の特定のタイプは、「ＸＭＬ」（ｅＸｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）技術に基づく。これが有利なのは、下記の理由による。
（ａ）ＸＭＴ−Ａ文書の定義が、ＸＭＬ技術に基づく
（ｂ）ＸＭＬ技術は、構造化文書を表す標準化された手段を提供する
（ｃ）ＸＭＬ技術に基づく構造化文書を扱う標準化されたソフトウェア・ツールが存在する
【０１０２】
したがって、本発明の一実施形態で、ＸＭＴ−Ａファイルに含まれる情報を再編成する処理が、ＸＭＬからＸＭＬへの変換になる。さらに、ＸＭＬファイルを扱う標準化されたソフトウェアの存在によって、同一の機能を実行する新しい特殊化されたソフトウェアを開発する必要なしに、入力ＸＭＴ−Ａ文書ならびに中間文書を管理することが可能になる。
【０１０３】
この実施形態は、中間文書を表すのにＸＭＬ技術を使用することに基づくが、他のタイプの構造化文書を使用する、本発明の代替実施形態を作成することが可能である。
【０１０４】
次の材料で、（１）ｍｐ４−ｆｉｌｅ文書２２５０の構造、（２）ｍｐ４−ｂｉｆｓ文書２２６０の構造、（３）ＸＭＴ−Ａ−中間文書コンバータ２２４０の動作、および（４）中間文書−ｍｐ４ファイル・コンバータ２２７０の動作を説明する。
【０１０５】
５．０  ｍｐ４−ｆｉｌｅ文書
図５９からわかるように、ｍｐ４−ｆｉｌｅ文書２３００の構造は、ｍｐ４バイナリ・ファイル７００の構造に非常に似ている。ｍｐ４ｆｉｌｅ文書２３００には、１つまたは複数のメディア・データ（ｍｄａｔ）要素２３１０の組と、単一のｍｏｏｖ要素２３２０が含まれる。ｍｏｏｖ要素２３２０に、ｍｐ４ｆｉｏｄｓ（ｍｐ４  ｆｉｌｅ  ｉｎｉｔｉａｌ  ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ）要素２３３０と、１つまたは複数のｔｒａｋ要素２３５０が含まれる。ｍｏｏｖ要素２３２０に、任意選択のユーザ・データ（ｕｄｔａ）要素２３４０を含めることもできる。ｕｄｔａ要素２３４０は、著作権表示などの情報を含めるのに使用される。ｍｖｈｄアトム７７２のプロパティは、ｍｏｏｖ要素２３２０の属性によって表される。
【０１０６】
図６０からわかるように、ｍｐ４ｆｉｏｄｓ要素２３６０は、ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ属性２３７０を所有する。ｍｐ４ｆｉｏｄｓ要素２３６０は、図６０に示されていない他の複数の属性も所有する。これらの追加の属性に、ｂｏｏｌｅａｎ属性「ｉｎｃｌｕｄｅＩｎｌｉｎｅＰｒｏｆｉｌｅｓＦｌａｇ」、ｉｎｔｅｇｅｒ属性「ｓｃｅｎｅＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、「ＯＤＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、「ａｕｄｉｏＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、「ｖｉｓｕａｌＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、および「ｇｒａｐｈｉｃｓＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」が含まれる。ｍｐ４ｆｉｏｄｓ要素２３６０に、１つまたは複数のＥｓＩｄＩｎｃ要素２３８０も含まれる。各ＥｓＩｄＩｎｃ要素２３８０は、関連するｔｒａｋ要素２３５０のｔｒａｃｋＩＤ属性と一致するｔｒａｃｋＩＤ属性２３９０を所有する。
【０１０７】
図６１からわかるように、各ｍｄａｔ要素２４００に、ｓｄｓｍ要素２４１０、ｏｄｓｍ要素２４２０、およびｍｅｄｉａＦｉｌｅ要素２４３０のうちの１つまたは複数を含めることができる。これらの要素のそれぞれは、関連するｔｒａｋ要素２３５０のｔｒａｃｋＩＤ属性と一致する独自の「ｔｒａｃｋＩＤ」属性を所有する。各ｍｅｄｉａＦｉｌｅ要素２４３０は、関連するメディア・データ（オーディオ・データ、ビジュアル・データなど）を含む外部バイナリ・ファイルのファイル名を指定する「ｎａｍｅ」属性を有する。各ｓｄｓｍ要素２４１０は、関連するｍｐ４−ｂｉｆｓ文書２２６０を表すＸＭＬファイルの名前を指定する「ｘｍｌＦｉｌｅ」属性を有する。一実施形態で、ｍｐ４−ｆｉｌｅ文書またはｍｐ４−ｂｉｆｓ文書あるいはその両方を表すＸＭＬファイルの作成が、診断目的に有用である場合があるが、そのようなファイルは、本発明の動作に必要ではない。
【０１０８】
図６２および６４からわかるように、各ｓｄｓｍ要素２４４０および各ｍｅｄｉａＦｉｌｅ要素２４８０に、１つまたは複数のチャンク要素２４５０および２４９０が含まれる。各チャンク要素２４５０および２４９０は、既知の場合にバイナリ・データの関連するブロックのバイト数を示す「ｓｉｚｅ」属性を所有する。各チャンク要素２４５０および２４９０は、既知の場合に、バイナリｓｄｓｍデータ・ファイルまたはメディア・データ・ファイルの先頭と、そのバイナリｓｄｓｍデータ・ファイルまたはメディア・データ・ファイル内の現在のチャンクのデータの先頭との間のバイト数を示す「ｏｆｆｓｅｔ」属性も所有する。ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ（ｓｄｓｍ）を記述する追加情報が、ｍｐ４−ｂｉｆｓ文書に含まれる。
【０１０９】
図６３からわかるように、各ｏｄｓｍ要素２４６０に、１つまたは複数のｏｄｓｍＣｈｕｎｋ２４７０要素が含まれる。各ｏｄｓｍＣｈｕｎｋ要素２４７０は、既知の場合にｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍの関連する部分のバイト数を示す「ｓｉｚｅ」属性を所有する。各ｏｄｓｍＣｈｕｎｋ要素２４７０は、既知の場合に、関連するｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍのバイナリ・データの先頭と、そのストリーム内の現在のチャンクのデータの先頭との間のバイト数を示す「ｏｆｆｓｅｔ」属性も所有する。
【０１１０】
図６５からわかるように、各ｏｄｓｍＣｈｕｎｋ要素２５００に、１つまたは複数のｏｄｓｍＳａｍｐｌｅ要素２５１０が含まれる。図６６からわかるように、各ｏｄｓｍＳａｍｐｌｅ要素２５２０に、１つまたは複数のｏｄｓｍ−ｃｏｍｍａｎｄ要素２５３０が含まれる。図６７からわかるように、各ｏｄｓｍ−ｃｏｍｍａｎｄ要素は、ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ要素２５４０またはＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅ要素２５７０とすることができる。各ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ要素２５４０に、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２５５０が含まれ、ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ要素２５４０に含まれる各ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２５５０に、ＥｓＩｄＲｅｆ要素２５６０が含まれる。
【０１１１】
各ｏｄｓｍＳａｍｐｌｅ要素２５１０および２５２０は、ｏｄｓｍＳａｍｐｌｅ要素２５１０および２５２０に含まれるコマンドが実行される時を秒単位で指定する「ｔｉｍｅ」属性を所有する。各ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２５５０および各ＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅ要素２５７０は、数値のオブジェクト記述子ＩＤを指定する「ＯＤＩＤ」属性２５５５、２５７５を所有する。各ＥｓＩｄＲｅｆ要素２５６０は、数値エレメンタリ・ストリームＩＤを指定する「ＥｓＩｄ」属性２５６５を所有する。
【０１１２】
図６８に示されたｔｒａｋ要素２３５０の構造２６００は、ｍｐ４ファイル７００内のｔｒａｋアトム７９０および９００の構造に非常に類似する。各ｔｒａｋ要素２６００に、ｍｄｉａ要素２６０４が含まれる。ｔｒａｋ要素２６００に、ｔｒｅｆ（ｔｒａｃｋ  ｒｅｆｅｒｅｎｃｅ）要素２６３６またはｅｄｔｓ（ｅｄｉｔ  ｌｉｓｔ）要素２６４４あるいはその両方も含まれる。ｍｐ４ファイルのｔｋｈｄアトム９１０に類似するｔｋｈｄ要素はない。その代わりに、ｔｋｈｄアトム９１０に含まれるプロパティが、ｔｒａｋ要素２６００の属性として表現される。
【０１１３】
ｍｄｉａ要素２６０４に、ｈｄｌｒ要素２６０８およびｍｉｎｆ要素２６１２が含まれる。ｍｄｈｄアトム９１５のプロパティは、ｍｄｉａ要素２６０４の属性として表される。ｍｉｎｆ要素２６１２に、ｄｉｎｆ要素２６１６、ｓｔｂｌ要素２６２８、およびメディア・ヘッダ要素２６３２が含まれる。メディア・ヘッダ要素（「＊ｍｈｄ」）２６３２は、関連するデータ・ストリームのデータの型に依存する複数の形式の１つを有することができる。ｓｄｓｍまたはｏｄｓｍに関連するｔｒａｋ要素内のメディア・ヘッダ要素２６３２は、「ｎｍｈｄ」要素によって表される。オーディオ・ストリームに関連するｔｒａｋ要素内のメディア・ヘッダ要素２６３２は、「ｓｍｈｄ」要素によって表され、ビジュアル・ストリームに関連するｔｒａｋ要素内のメディア・ヘッダ要素２６３２は、「ｖｍｈｄ」要素によって表される。
【０１１４】
図６９からわかるように、ｓｔｂｌ（ｓａｍｐｌｅ  ｔａｂｌｅｓ）要素２６２８および２６５２に、ｓｔｓｃ（ｓａｍｐｌｅ−ｔｏ−ｃｈｕｎｋ  ｔａｂｌｅ）要素２６５６、ｓｔｔｓ（ｔｉｍｅ−ｔｏ−ｓａｍｐｌｅ  ｔａｂｌｅ）要素２６６０、ｓｔｃｏ（ｃｈｕｎｋ  ｏｆｆｓｅｔ  ｔａｂｌｅ）要素２６６４、ｓｔｓｚ（ｓａｍｐｌｅ  ｓｉｚｅ  ｔａｂｌｅ）要素２６６８、およびｓｔｓｄ（ｓａｍｐｌｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｔａｂｌｅ）要素２６７６が含まれる。ｓｔｂｌ要素２６５２に、ストリーム・タイプまたはメディア・タイプに応じて、ｓｔｓｓ（ｓｙｎｃ  ｓａｍｐｌｅ  ｔａｂｌｅ）要素２６７２も含めることができる。ｓｔｓｄ要素２６７６に、図６９で「ｍｐ４＊要素」２６８０と表された、複数のタイプの従属要素の１つを含めることができる。ｓｄｓｍストリームまたはｏｄｓｍストリームに関連するｔｒａｋ要素２６００に含まれるｓｔｓｄ要素２６７６の場合に、ｓｔｓｄ要素２６８０に、「ｍｐ４ｓ」要素が含まれる。オーディオ・ストリームに関連するｔｒａｋ要素２６００に含まれるｓｔｓｄ要素２６８０の場合に、ｓｔｓｄ要素２６８０に、「ｍｐ４ａ」要素が含まれる。ビジュアル・ストリームに関連するｔｒａｋ要素２６００に含まれるｓｔｓｄ要素２６８０の場合に、ｓｔｓｄ要素２６８０に、「ｍｐ４ｖ」要素が含まれる。どの場合でも、「ｍｐ４＊」要素２６８０には、ｅｓｄｓ要素２６８４が含まれ、ｅｓｄｓ要素２６８４に、ＥＳ＿Ｄｅｓｃｒ要素２６８８が含まれる。
【０１１５】
図７０からわかるように、ＥＳ＿Ｄｅｓｃｒ要素２７００に、ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０およびＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７６０が含まれる。ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０に、ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０、ＪＰＥＧ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ  ２７３０、ＶｉｓｕａｌＣｏｎｆｉｇ  ２７４０、またはＡｕｄｉｏＣｏｎｆｉｇ  ２７５０を含む複数のタイプのデコーダ固有情報要素の１つを含めることができる。さまざまなタイプのデコーダ固有情報要素のそれぞれは、バイナリＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ構造１０３２に含まれるＤｅｃｏｄｅｒＳｐｅｃｉｆｉｃＩｎｆｏデータ構造１０７２の形式を表す。バイナリＥＳ＿Ｄｅｓｃｒ構造１０００、ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ構造１０３２、ＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ構造１０８８、およびＤｅｃｏｄｅｒＳｐｅｃｉｆｉｃＩｎｆｏ構造１０７６のプロパティは、ｍｐ４−ｆｉｌｅ文書２３００の対応する要素２７００、２７１０、２７６０、２７２０、２７３０、２７４０、および２７５０の属性によって表される。
【０１１６】
６．０  ｍｐ４−ｂｉｆｓ文書
図７１からわかるように、ｍｐ４−ｂｉｆｓ文書２８００に、単一のｂｉｆｓＣｏｎｆｉｇ要素２８１０と、それに続く１つまたは複数のｃｏｍｍａｎｄＦｒａｍｅ要素２８２０のシーケンスが含まれる。図７２からわかるように、各ｃｏｍｍａｎｄＦｒａｍｅ要素２８３０に、１つまたは複数のｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｍｍａｎｄ要素２８４０が含まれる。各ｃｏｍｍａｎｄＦｒａｍｅ要素２８２０および２８３０は、ｃｏｍｍａｎｄＦｒａｍｅ要素に含まれるコマンドが実行される時を秒単位で指定する属性「ｔｉｍｅ」を所有する。
【０１１７】
各ｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｍｍａｎｄ要素２８４０は、１１個の可能なＭＰＥＧ−４  ＢＩＦＳコマンドすなわち、ＩｎｓｅｒｔＮｏｄｅ、ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ、ＩｎｓｅｒｔＲｏｕｔｅ、ＤｅｌｅｔｅＮｏｄｅ、ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ、ＤｅｌｅｔｅＲｏｕｔｅ、ＲｅｐｌａｃｅＮｏｄｅ、ＲｅｐｌａｃｅＦｉｅｌｄ、ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ、ＲｅｐｌａｃｅＲｏｕｔｅ、およびＲｅｐｌａｃｅＳｃｅｎｅのうちの１つを表す。図７３からわかるように、ｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｍｍａｎｄ要素２９１０に、１つまたは複数のｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０を含めることができる。１１タイプのｂｉｆｓＣｏｍｍａｎｄのうちで、ＩｎｓｅｒｔＮｏｄｅ、ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ、ＲｅｐｌａｃｅＮｏｄｅ、ＲｅｐｌａｃｅＦｉｅｌｄ、ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ、およびＲｅｐｌａｃｅＳｃｅｎｅに、従属ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０を含めることができる。ｂｉｆｓＣｏｍｍａｎｄ要素ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ、ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ、およびＲｅｐｌａｃｅＦｉｅｌｄは、従属ｂｉｆｓＣｏｍｍａｎｄ要素２９１０を有することができる。
【０１１８】
図７４からわかるように、ＲｅｐｌａｃｅＳｃｅｎｅ  ｂｉｆｓＣｏｍｍａｎｄ要素２９３０に、単一の従属ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素だけをを含めることができ、これは、「ＴｏｐＮｏｄｅ」要素２９４０でなければならない。ＴｏｐＮｏｄｅ要素２９４０は、ＭＰＥＧ−４  ＢＩＦＳノードの特定のサブセットのメンバに対応する。このサブセットは、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されている。さらに、ＲｅｐｌａｃｅＳｃｅｎｅ  ｂｉｆｓＣｏｍｍａｎｄ要素２９３０に、従属する「Ｒｏｕｔｅｓ」要素２９５０も含めることができ、「Ｒｏｕｔｅｓ」要素２９５０に、１つまたは複数の従属する「Ｒｏｕｔｅ」要素２９６０を含めることができる。ｍｐ４ｂｉｆｓ  Ｒｏｕｔｅ要素２９６０は、属性「ｒｏｕｔｅＩｄ」、「ａｒｒｉｖａｌＮｏｄｅＩｄ」、「ａｒｒｉｖａｌＦｉｅｌｄ」、「ｄｅｐａｒｔｕｒｅＮｏｄｅＩｄ」、および「ｄｅｐａｒｔｕｒｅＦｉｅｌｄ」を有する。
【０１１９】
可能な従属ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素のほかに、各タイプのｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｍｍａｎｄ要素は、次の属性値を所有する。
１．ＩｎｓｅｒｔＮｏｄｅ：「ｐａｒｅｎｔＩｄ」、「ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ」、および「ｐｏｓｉｔｉｏｎ」
２．ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ：「ｎｏｄｅＩｄ」、「ｉｎＦｉｅｌｄＮａｍｅ」、「ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ」、「ｐｏｓｉｔｉｏｎ」、および「ｖａｌｕｅ」
３．ＩｎｓｅｒｔＲｏｕｔｅ：「ＲｏｕｔｅＩｄ」、「ｄｅｐａｒｔｕｒｅＮｏｄｅ」、「ｄｅｐａｒｔｕｒｅＦｉｅｌｄ」、「ａｒｒｉｖａｌＮｏｄｅ」、および「ａｒｒｉｖａｌＦｉｅｌｄ」
４．ＤｅｌｅｔｅＮｏｄｅ：「ｎｏｄｅＩｄ」
５．ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ：「ｎｏｄｅＩｄ」、「ｉｎＦｉｅｌｄＮａｍｅ」、「ｄｅｌｅｔｉｏｎＰｏｓｉｔｉｏｎ」、および「ｐｏｓｉｔｉｏｎ」
６．ＤｅｌｅｔｅＲｏｕｔｅ：「ｒｏｕｔｅＩｄ」
７．ＲｅｐｌａｃｅＮｏｄｅ：「ｐａｒｅｎｔＩｄ」
８．ＲｅｐｌａｃｅＦｉｅｌｄ：「ｎｏｄｅＩｄ」、「ｉｎＦｉｅｌｄＮａｍｅ」、および「ｖａｌｕｅ」
９．ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ：「ｎｏｄｅＩｄ」、「ｉｎＦｉｅｌｄＮａｍｅ」、「ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ」、「ｐｏｓｉｔｉｏｎ」、および「ｖａｌｕｅ」
１０．ＲｅｐｌａｃｅＲｏｕｔｅ：「ｒｏｕｔｅＩｄ」、「ｄｅｐａｒｔｕｒｅＮｏｄｅ」、「ｄｅｐａｒｔｕｒｅＦｉｅｌｄ」、「ａｒｒｉｖａｌＮｏｄｅ」、および「ａｒｒｉｖａｌＦｉｅｌｄ」
１１．ＲｅｐｌａｃｅＳｃｅｎｅ：「ＵＳＥＮＡＭＥＳ」（ｂｏｏｌｅａｎ値）
【０１２０】
ｂｉｆｓＣｏｍｍａｎｄ要素ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ、ＲｅｐｌａｃｅＦｉｅｌｄ、およびＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅに関して、「ｉｎＦｉｅｌｄＮａｍｅ」属性によって指定されるプロパティ・フィールドが、「Ｎｏｄｅ」のノード・データ型を有する（ＭＰＥＧ−４仕様に従って）場合に、この要素に、１つまたは複数の従属するｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０が含まれ、「ｖａｌｕｅ」属性に、従属するＮｏｄｅ要素のそれぞれに関連するノード名のリストが含まれる。
【０１２１】
ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０は、多数のタイプのＭＰＥＧ−４  ＢＩＦＳノード・データ構造の１つを表す。１００個以上の異なるタイプのＢＩＦＳノードが、ＭＰＥＧ−４システム仕様で定義されている。ＭＰＥＧ−４  ＢＩＦＳノードの各タイプが、特定のＮｏｄｅＮａｍｅおよび１組のプロパティ・フィールドを有する。
【０１２２】
ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素には、オリジナルＮｏｄｅ要素および再利用されるＮｏｄｅ要素という２つの基本的なタイプがある。図７５からわかるように、ｍｐ４ｂｉｆｓオリジナルＮｏｄｅ要素３０００は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたＢＩＦＳノードの１つのＮｏｄｅＮａｍｅプロパティに対応する「ＮｏｄｅＮａｍｅ」によって指定される。
【０１２３】
ｍｐ４ｂｉｆｓオリジナルＮｏｄｅ要素３０００は、任意選択のＮｏｄｅＩｄ属性３０１０を有することができる。ＮｏｄｅＩｄ属性３０１０の値が指定される場合に、Ｎｏｄｅ要素３０００は、「再利用可能Ｎｏｄｅ」として分類される。ＮｏｄｅＩｄ属性３０１０の値は、指定される場合に、１から現在のシーンで定義された再利用可能Ｎｏｄｅの個数までの範囲の整数である。ＮｏｄｅＩｄ属性３０１０の値が指定され、関連するＲｅｐｌａｃｅＳｃｅｎｅコマンドの「ＵＳＥＮＡＭＥＳ」属性の値が「真」である場合に、そのＮｏｄｅ要素は、「ｎａｍｅ」属性３０１６も有する。
【０１２４】
ＮｏｄｅＩｄ属性３０１０およびｎａｍｅ属性３０１６の他に、各オリジナルＮｏｄｅ要素は、複数のプロパティ・フィールド属性３０２０を有する。各プロパティ・フィールド属性３０２０は、特定のＮｏｄｅ要素のＮｏｄｅＮａｍｅによって識別されるノード・タイプのＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたプロパティ・フィールドの１つに対応する。各プロパティ・フィールドは、ｂｏｏｌｅａｎ、ｉｎｔｅｇｅｒ、ｆｌｏａｔなど、定義されたフィールド・データ型を有する。可能なフィールド・データ型の組に、「ＳＦＮｏｄｅ」および「ＭＦＮｏｄｅ」が含まれる。特定のオリジナルＮｏｄｅ要素のＮｏｄｅＮａｍｅが、フィールド・データ型「ＳＦＮｏｄｅ」および「ＭＦＮｏｄｅ」を有する１つまたは複数のプロパティ・フィールドを有するＭＰＥＧ−４  ＢＩＦＳノードに対応する場合に、そのＮｏｄｅ要素は、１つまたは複数の従属するＮｏｄｅ要素３０３０を所有することができる。そうである場合に、対応するプロパティ・フィールド属性の値は、そのプロパティ・フィールドに関連する各従属Ｎｏｄｅ要素のＮｏｄｅＮａｍｅストリングからなる。
【０１２５】
たとえば、ＮｏｄｅＮａｍｅ「Ｇｒｏｕｐ」を有する特定のｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素が、「ｃｈｉｌｄｒｅｎ」属性に関連する、ＮｏｄｅＮａｍｅ「Ｔｒａｎｓｆｏｒｍ２Ｄ」、「Ｖａｌｕａｔｏｒ」、および「ＴｉｍｅＳｅｎｓｏｒ」を有する従属ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素を所有する場合に、「ｃｈｉｌｄｒｅｎ」属性の値は、「Ｔｒａｎｓｆｏｒｍ２Ｄ  Ｖａｌｕａｔｏｒ  ＴｉｍｅＳｅｎｓｏｒ」になる。
【０１２６】
Ｃｏｎｄｉｔｉｏｎａｌ  ＢＩＦＳノードの特別な例で、プロパティ・フィールドの１つが、「ｂｕｆｆｅｒ」というプロパティ・フィールド名を有し、「ｂｕｆｆｅｒ」プロパティ・フィールドのフィールド・データ型が、「ｃｏｍｍａｎｄ  ｂｕｆｆｅｒ」であり、「ｂｕｆｆｅｒ」プロパティ・フィールドの値が、１つまたは複数のＢＩＦＳコマンドからなる。この場合に、対応するｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素３０４０のＮｏｄｅＮａｍｅは、「Ｃｏｎｄｉｔｉｏｎａｌ」になる。Ｃｏｎｄｉｔｉｏｎａｌ  Ｎｏｄｅ要素３０４０のＮｏｄｅＩｄ属性３０５０およびｎａｍｅ属性３０５６の値は、他のｍｐ４ｂｉｆｓオリジナルＮｏｄｅ要素３０００と同様に指定することができる。従属するＮｏｄｅ要素３０３０の代わりに、Ｃｏｎｄｉｔｉｏｎａｌ  Ｎｏｄｅ要素は、１つまたは複数の従属するｂｉｆｓＣｏｍｍａｎｄ要素３０７０を有し、「ｂｕｆｆｅｒ」属性の値は、従属するｂｉｆｓＣｏｍｍａｎｄ要素３０７０のコマンド名の順序付きリストからなる。
【０１２７】
たとえば、特定のＣｏｎｄｉｔｉｏｎａｌ  Ｎｏｄｅ要素が、従属ＩｎｓｅｒｔＲｏｕｔｅ  ｂｉｆｓＣｏｍｍａｎｄ要素とそれに続く従属ＤｅｌｅｔｅＮｏｄｅ  ｂｉｆｓＣｏｍｍａｎｄ要素を所有する場合に、「ｂｕｆｆｅｒ」属性の値は、「ＩｎｓｅｒｔＲｏｕｔｅ  ＤｅｌｅｔｅＮｏｄｅ」になる。
【０１２８】
オリジナルＮｏｄｅ要素の、従属するＮｏｄｅ要素またはｂｉｆｓＣｏｍｍａｎｄ要素を所有する能力は、ＢＩＦＳコマンドおよびＮｏｄｅ要素の階層的集合に対して再帰的に繰り返すことができる。
【０１２９】
図７７からわかるように、再利用されるＮｏｄｅ要素３０８０は、「ＲｅｕｓｅｄＮｏｄｅ」というＮｏｄｅＮａｍｅを有する。ＲｅｕｓｅｄＮｏｄｅ要素３０８０は、従属する要素を有しない。ＲｅｕｓｅｄＮｏｄｅ要素３０８０は、「ｎｏｄｅＲｅｆ」３０９０という名前の単一の属性を有する。ｎｏｄｅＲｅｆ属性３０９０の値は、再利用可能なオリジナルＮｏｄｅ要素３０００および３０４０の一方のＮｏｄｅＩｄ属性３０１０および３０５０の値と一致しなければならない。
【０１３０】
７．０  ｍｐ４−ｘｍｔａコンバータ
図５８からわかるように、処理２２００は、ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａバイナリ・ファイル（「ｍｐ４ファイル」）２２１０に基づいて、ＸＭＴ−Ａ文書２２２０および０個以上のバイナリ・メディア・データ・ファイル２２３０の組を作成する。
【０１３１】
この処理は、次の２つの主ステップからなる。
ａ．ｍｐ４バイナリ・ファイル２２１０に基づく、中間ｘｍｌ文書の対２２４０および２２５０およびメディア・データ・ファイル２２３０の組の作成２２４０。
ｂ．中間ｘｍｌ文書の対２２５０および２２６０に基づくｘｍｔａ  ｘｍｌ文書２２２０の作成２２７０。
【０１３２】
これらのステップのそれぞれを、下で説明する。
【０１３３】
ｍｐ４バイナリ・ファイルに基づく中間ｘｍｌ文書の対およびメディア・データ・ファイルの組の作成
ｍｐ４バイナリ・ファイル２２１０に基づいて中間ｘｍｌ文書の対２２５０および２２６０ならびにメディア・データ・ファイル２２３０の組を作成する処理２２４０は、次の２つの部分からなる。
（１）ｍｐ４バイナリ・ファイル２２１０の内容に基づいて、ＱｔＩｎｆｏデータ構造３１００を作成する。
（２）結果のＱｔＩｎｆｏデータ構造３１００に基づいて、メディア・データ・ファイル２２３０の組および中間ｘｍｌ文書の対２２５０および２２６０を作成する。メディア・データ・ファイル２２３０の組は、空とすることができる。
【０１３４】
本発明の代替実施形態で、この２つの部分を単一の処理に組み合わせることができ、この単一の処理では、中間ｘｍｌ文書２２５０および２２６０とメディア・データ・ファイル２２３０が、ＱｔＩｎｆｏデータ構造３１００を作成せずに、ｍｐ４バイナリ・ファイル２２１０から直接に作成される。図１４からわかるように、ｍｐ４バイナリ・ファイル７００は、ｍｏｏｖアトム７１２および１つまたは複数のｍｄａｔアトム７０６からなる。ｍｄａｔアトム７０６は、メディア・データ・ファイル２２３０を作成するのに必要なデータを含むが、ｍｏｏｖアトム７１２で指定される情報なしで解釈することはできない。その結果、中間ｘｍｌ文書２２５０および２２６０ならびにメディア・データ・ファイル２２３０を作成する前に、ｍｐ４バイナリ・ファイル２２１０の内容を表すＱｔＩｎｆｏデータ構造３１００などの一時的データ構造を作成することが有利である。
【０１３５】
ＱｔＩｎｆｏデータ構造
ＱｔＩｎｆｏデータ構造は、ｍｐ４バイナリ・ファイル７００の内容を表す。図７８からわかるように、ＱｔＩｎｆｏデータ構造３１００は、次のコンポーネントからなる。
１．ｍａｘＮｕｍＴｒａｃｋｓ  ３１０３：ｍｄａｔ配列３１１３およびｔｒａｋ配列３１２０の項目数を指定する整数
２．Ｍｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒ  ３１０６：このＱｔＩｎｆｏデータ構造３１００によって表されるｍｐ４バイナリ・ファイル７００に含まれるｍｏｏｖアトム７１２および７５４に含まれるｉｏｄｓアトム７７８のプロパティを表すＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒデータ構造３１３０のアドレス
３．ｍｅｄｉａＤａｔａＳｉｚｅ  ３１０８：このＱｔＩｎｆｏデータ構造３１００によって表されるｍｐ４バイナリ・ファイル７００内のすべてのｍｄａｔアトム７０６および７１８のサイズ７２４の合計を指定する整数
４．ｎｕｍＭｄａｔＡｔｏｍｓ  ３１１０：このＱｔＩｎｆｏデータ構造３１００によって表されるｍｐ４バイナリ・ファイル７００に含まれるｍｄａｔアトム７０６の個数を指定する整数
５．ｍｄａｔ配列３１１３：ｍａｘＮｕｍＴｒａｃｋｓ  ３１０３個のｍｄａｔ構造３１６０のシーケンスのアドレス。代替案として、これによって、ｍｄａｔ構造３１６０のｍａｘＮｕｍＴｒａｃｋｓ  ３１０３個のアドレスのシーケンスのアドレスを指定することができる。この配列の最初のｎｕｍＭｄａｔＡｔｏｍｓ個のｍｄａｔ構造のそれぞれは、このＱｔＩｎｆｏデータ構造３１００によって表されるｍｐ４バイナリ・ファイル７００に含まれるｍｄａｔアトム７０６の１つを表す
６．ＭｏｏｖＨｅａｄｅｒ  ３１１６：このＱｔＩｎｆｏデータ構造３１００によって表されるｍｐ４バイナリ・ファイル７００に含まれるｍｏｏｖアトム７１２および７５４に含まれるｍｖｈｄアトム７７２のプロパティを表すＭｏｏｖＨｅａｄｅｒデータ構造３１７０のアドレス
７．ｎｕｍＴｒａｃｋｓ  ３１１８：このＱｔＩｎｆｏデータ構造３１００によって表されるｍｐ４バイナリ・ファイル７００のｔｒａｋアトム７９０の個数を指定する整数
８．ｔｒａｋ配列３１２０：ｍａｘＮｕｍＴｒａｃｋｓ  ３１０３個のｔｒａｋ構造３２００のシーケンスのアドレス。代替案として、これによって、ｔｒａｋ構造３２００のｍａｘＮｕｍＴｒａｃｋｓ  ３１０３個のアドレスのシーケンスのアドレスを指定することができる。この配列の最初のｎｕｍＴｒａｋＡｔｏｍｓ個のｔｒａｋ構造のそれぞれは、このＱｔＩｎｆｏデータ構造３１００によって表されるｍｐ４バイナリ・ファイル７００に含まれるｍｏｏｖアトム７１２および７５４に含まれるｔｒａｋアトム７９０の１つを表す
９．（ＵｓｅｒＤａｔａ）：このＱｔＩｎｆｏデータ構造３１００によって表されるｍｐ４バイナリ・ファイル７００のｍｏｏｖアトム７１２の外の可能なｕｄｔａアトムを表す任意選択のデータ構造のアドレス
【０１３６】
Ｍｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒデータ構造３１３０は、ｉｏｄｓアトム７７８および８００のプロパティを表す。図７９からわかるように、Ｍｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒデータ構造３１３０は、次のコンポーネントからなる。
１．ｓｉｚｅ  ３１３３：ｉｏｄｓアトム７７８のバイト数を示す整数
２．ｖｅｒｓｉｏｎ  ３１３６：ｉｏｄｓアトム８００のｖｅｒｓｉｏｎプロパティ８１２およびｆｌａｇｓプロパティ８１６の値を示す整数
３．ＯｂｊｅｃｔＤｅｓｃｒＩＤ  ３１３８：ｉｏｄｓアトム８００に含まれるＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒオブジェクト８２４のＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤプロパティ８３６の値を示す整数
４．ｕｒｌＦｌａｇ  ３１４０：ｉｏｄｓアトム８００に含まれるＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒオブジェクト８２４のＵＲＬ＿Ｆｌａｇプロパティ８４０の値を示すｂｏｏｌｅａｎ値
５．ｕｒｌＳｔｒｉｎｇ  ３１４３：量「ｕｒｌＦｌａｇ」の値が「偽」である場合に、量「ｕｒｌＳｔｒｉｎｇ」の値は０（ヌル）である。そうでない場合に、この量の値は、文字ストリングを表すヌル終端シーケンス・バイトのアドレスを指定する
６．ｉｎＬｉｎｅＰｒｏｆｉｌｅｓ  ３１４６：ｉｏｄｓアトム８００に含まれるＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒオブジェクト８２４のｉｎｃｌｕｄｅＩｎｌｉｎｅＰｒｏｆｉｌｅｓＦｌａｇプロパティ８４４の値を表すｂｏｏｌｅａｎ値
７．ＰｒｏｆｉｌｅＬｅｖｅｌｓ  ３１４８：５つの整数の組、ＯＤＰｒｏｆｉｌｅＬｅｖｅｌ、ｓｃｅｎｅＰｒｏｆｉｌｅＬｅｖｅｌ、ａｕｄｉｏＰｒｏｆｉｌｅＬｅｖｅｌ、ｖｉｓｕａｌＰｒｏｆｉｌｅＬｅｖｅｌ、およびｇｒａｐｈｉｃｓＰｒｏｆｉｌｅＬｅｖｅｌであり、ｉｏｄｓアトム８００に含まれるＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒオブジェクト８２４のプロパティ、ＯＤＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ  ８５２、ｓｃｅｎｅＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ  ８５６、ａｕｄｉｏＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ  ８６０、ｖｉｓｕａｌＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ  ８６４、およびｇｒａｐｈｉｃｓＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ  ８６８の値を示す
８．ｍａｘＮｕｍＥｓＩｄＩｎｃｓ  ３１５０：ＥｓＩｄＩｎｃ配列３１５６の項目数を示す整数（「２」の値で十分である）
９．ｎｕｍＥｓＩｄＩｎｃｓ  ３１５３：ｉｏｄｓアトム８００に含まれるＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒオブジェクト８２４のＥＳ＿ＩＤ＿Ｉｎｃオブジェクト８７２の個数を示す整数
１０．ＥｓＩｄＩｎｃ配列３１５６：ｍａｘＮｕｍＥｓＩｄＩｎｃｓ個のＥｓＩｄＩｎｃ構造のシーケンス、またはｍａｘＮｕｍＥｓＩｄＩｎｃｓ個のＥｓＩｄＩｎｃ構造のシーケンスのアドレス
【０１３７】
ＵＲＬ＿Ｆｌａｇプロパティ８４０の値が「０」の場合に、値「偽」が、コンポーネント「ｕｒｌＦｌａｇ」３１４０に割り当てられ、そうでない場合には、値「真」が、量「ｕｒｌＦｌａｇ」３１４０に割り当てられる。ＵＲＬ＿Ｆｌａｇプロパティ８４０は、「０」であると期待される。
【０１３８】
ｉｎｃｌｕｄｅＩｎｌｉｎｅＰｒｏｆｉｌｅｓＦｌａｇプロパティ８４４の値が「０」である場合に、値「偽」が、コンポーネント「ｉｎＬｉｎｅＰｒｏｆｉｌｅｓ」３１４６に割り当てられ、そうでない場合に、値「真」が、量「ｉｎＬｉｎｅＰｒｏｆｉｌｅｓ」３１４６に割り当てられる。
【０１３９】
ＥｓＩｄＩｎｃ構造は、２つの整数「ｓｉｚｅ」および「ｔｒａｃｋＩＤ」からなる。これらの整数は、Ｍｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒオブジェクト８２４内の対応するＥＳ＿ＩＤ＿Ｉｎｃオブジェクト８７２および８７６の量「ｎｕｍＢｙｔｅｓ」８８４および「ＥＳ＿ＩＤ」８８８の値を表す。
【０１４０】
各ｍｄａｔ構造３１６０は、ｍｄａｔアトム７０６および７１８のプロパティを表す。図８０からわかるように、ｍｄａｔ構造３１６０は、次のコンポーネントからなる。
１．ｓｉｚｅ  ３１６３：ｍｄａｔアトム７０６を含むバイト数。これは、ｍｄａｔアトム７１８の「アトム・サイズ」プロパティ７２４と同一である。
２．ｓｔａｒｔ  ３１６６：これは、ｍｐ４バイナリ・ファイル７００の先頭とｍｄａｔアトム７０６の第１バイトとの間のバイト数を指定する。
３．ＭｅｄｉａＤａｔａ  ３１６８：これは、ｍｄａｔアトム７０６に含まれるチャンク７３６の組のコピーを含む（ｓｉｚｅ−８）バイトの配列のアドレスである。
【０１４１】
ＭｏｏｖＨｅａｄｅｒ構造３１７０は、ｍｖｈｄアトム７７２のプロパティを表す。図８１からわかるように、ＭｏｏｖＨｅａｄｅｒ構造３１７０は、次の値からなる。
１．ｓｉｚｅ  ３１７３：ｍｖｈｄアトム７７２のバイト数を示す整数
２．ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ  ３１７６：ｍｖｈｄアトム７７２の「ｖｅｒｓｉｏｎ」プロパティおよび「ｆｌａｇｓ」プロパティの値を示す整数の対
３．ｃｒｅａｔｉｏｎＴｉｍｅ  ３１７８：ｍｖｈｄアトム７７２の「ｃｒｅａｔｉｏｎＴｉｍｅ」プロパティの値を示す整数
４．ｍｏｄｉｆｉｅｄＴｉｍｅ  ３１８０：ｍｖｈｄアトム７７２の「ｍｏｄｉｆｉｃａｔｉｏｎＴｉｍｅ」プロパティの値を示す整数
５．ｔｉｍｅＳｃａｌｅ  ３１８３：ｍｖｈｄアトム７７２の「ｔｉｍｅＳｃａｌｅ」プロパティの値を示す整数
６．ｄｕｒａｔｉｏｎ  ３１８６：ｍｖｈｄアトム７７２の「ｄｕｒａｔｉｏｎ」プロパティの値を示す整数
７．ｎｅｘｔＴｒａｃｋＩＤ  ３１８８：ｍｖｈｄアトム７７２の「ｎｅｘｔＴｒａｃｋＩＤ」プロパティの値を示す整数
【０１４２】
各ｔｒａｋ構造３２００は、ｔｒａｋアトム７９０および９００のプロパティを表す。図８２からわかるように、各ｔｒａｋ構造３２００に、次のコンポーネントを含めることができる。
１．ｓｉｚｅ  ３２０２：ｔｒａｋアトム９００のバイト数９０３を示す整数
２．ＴｒａｃｋＨｅａｄｅｒ  ３２０４：このｔｒａｋ構造３２００によって表されるｔｒａｋアトム９００に含まれるｔｋｈｄアトム９１０のプロパティを表すＴｒａｃｋＨｅａｄｅｒデータ構造３２１２のアドレス
３．ＴｒａｃｋＭｅｄｉａ  ３２０６：このｔｒａｋ構造３２００によって表されるｔｒａｋアトム９００に含まれるｍｄｉａアトム９１２のプロパティを表すＴｒａｃｋＭｅｄｉａデータ構造３２２６のアドレス
４．ＴｒａｃｋＥｄｉｔ  ３２０８：このｔｒａｋ構造３２００によって表されるｔｒａｋアトム９００に含まれる任意選択のｅｄｔｓアトム９４５のプロパティを表す任意選択のＴｒａｃｋＥｄｉｔデータ構造３２３６のアドレス
５．ＴｒａｃｋＲｅｆｅｒｅｎｃｅ  ３２１０：このｔｒａｋ構造３２００によって表されるｔｒａｋアトム９００に含まれる任意選択のｔｒｅｆアトム９４０のプロパティを表す任意選択のＴｒａｃｋＲｅｆｅｒｅｎｃｅデータ構造３２６４のアドレス
【０１４３】
ＴｒａｃｋＨｅａｄｅｒデータ構造３２１２は、ｔｋｈｄアトム９１０のプロパティを表す。図８３からわかるように、ＴｒａｃｋＨｅａｄｅｒデータ構造３２１２は、次のコンポーネントからなる。
１．ｓｉｚｅ  ３２１４：ｔｋｈｄアトム９１０のバイト数を示す整数
２．ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ  ３２１６：ｔｋｈｄアトム９１０の「ｖｅｒｓｉｏｎ」プロパティおよび「ｆｌａｇｓ」プロパティの値を示す整数の対
３．ｃｒｅａｔｉｏｎＴｉｍｅ  ３２１８：ｔｋｈｄアトム９１０の「ｃｒｅａｔｉｏｎＴｉｍｅ」プロパティの値を示す整数
４．ｍｏｄｉｆｉｅｄＴｉｍｅ  ３２２０：ｔｋｈｄアトム９１０の「ｍｏｄｉｆｉｃａｔｉｏｎＴｉｍｅ」プロパティの値を示す整数
５．ｄｕｒａｔｉｏｎ  ３２２２：ｔｋｈｄアトム９１０の「ｄｕｒａｔｉｏｎ」プロパティの値を示す整数
６．ｔｒａｃｋＩＤ  ３２２４：ｔｋｈｄアトム９１０の「ｔｒａｃｋＩＤ」プロパティの値を示す整数
【０１４４】
ＴｒａｃｋＭｅｄｉａ構造３２２６は、ｍｄｉａアトム９１２のプロパティを表す。図８４からわかるように、ＴｒａｃｋＭｅｄｉａ構造３２２６は、次のコンポーネントからなる。
１．ｓｉｚｅ  ３２２８：ｍｄｉａアトム９１２のバイト数を示す整数
２．ＭｅｄｉａＨｅａｄｅｒ  ３２３０：ｍｄｉａアトム９１２に含まれるｍｄｈｄアトム９１５のプロパティを表すＭｅｄｉａＨｅａｄｅｒ構造３３００のアドレス
３．Ｈａｎｄｌｅｒ  ３２３２：ｍｄｉａアトム９１２に含まれるｈｄｌｒアトム９１８のプロパティを表すＨａｎｄｌｅｒ構造３３２０のアドレス
４．ＭｅｄｉａＩｎｆｏ  ３２３４：ｍｄｉａアトム９１２に含まれるｍｉｎｆアトム９２０を表すＭｅｄｉａＩｎｆｏ構造３３３３のアドレス
【０１４５】
ＴｒａｃｋＥｄｉｔ構造３２３６は、ｅｄｔｓアトム９４５のプロパティを表す。図８５からわかるように、ＴｒａｃｋＥｄｉｔ構造３２３６に、次のコンポーネントが含まれる。
１．ｓｉｚｅ  ３２３８：ｅｄｔｓアトム９４５のバイト数を示す整数
２．ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ  ３２４０：ｅｄｔｓアトム９４５の「ｖｅｒｓｉｏｎ」プロパティおよび「ｆｌａｇｓ」プロパティの値を示す整数の対
３．ＥｄｉｔＬｉｓｔ  ３２４２：ｅｄｔｓアトム９４５に含まれるｅｌｓｔアトム９４８を表すＥｄｉｔＬｉｓｔ構造３２４４のアドレス
【０１４６】
ＥｄｉｔＬｉｓｔ構造３２４４は、ｅｌｓｔアトム９４８のプロパティを表す。図８６からわかるように、ＥｄｉｔＬｉｓｔ構造３２４４は、次のコンポーネントからなる。
１．ｓｉｚｅ  ３２４６：ｅｌｓｔアトム９４８のバイト数を示す整数
２．ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ  ３２４８：ｅｌｓｔアトム９４８の「ｖｅｒｓｉｏｎ」プロパティおよび「ｆｌａｇｓ」プロパティの値を示す整数の対
３．ｎｕｍＳｅｇｍｅｎｔｓ  ３２５０：ＥｄｉｔＳｅｇｍｅｎｔ配列３２５２内のＥｄｉｔＳｅｇｍｅｎｔ構造３２５６の個数を指定する整数
４．ＥｄｉｔＳｅｇｍｅｎｔ配列３２５２：これは、ｎｕｍＳｅｇｍｅｎｔｓ個のＥｄｉｔＳｅｇｍｅｎｔ構造３２５６のシーケンス、またはＥｄｉｔＳｅｇｍｅｎｔ構造３２５６のｎｕｍＳｅｇｍｅｎｔｓ個のアドレスのシーケンスとすることができる
【０１４７】
各ＥｄｉｔＳｅｇｍｅｎｔ構造３２５６は、このＥｄｉｔＳｅｇｍｅｎｔ構造３２５６を含むＥｄｉｔＬｉｓｔ構造３２４４によって表されるｅｌｓｔアトム９４８に含まれる「ｅｄｉｔセグメント」のプロパティを表す。図８７からわかるように、各ＥｄｉｔＳｅｇｍｅｎｔ構造３２５６は、３つの整数すなわち、ｓｔａｒｔＴｉｍｅ  ３２５８、ｄｕｒａｔｉｏｎ  ３２６０、およびｒｅｌａｔｉｖｅＲａｔｅ  ３２６２からなる。これらの整数のそれぞれは、対応するｅｄｉｔセグメントの同一の名前のプロパティを表す。
【０１４８】
ＴｒａｃｋＲｅｆｅｒｅｎｃｅ構造３２６４は、ｔｒｅｆアトム９４０のプロパティを表す。図８８からわかるように、ＴｒａｃｋＲｅｆｅｒｅｎｃｅ構造３２６４は、次のコンポーネントからなる。
１．ｓｉｚｅ  ３２６６：ｔｒｅｆアトム９４０のバイト数を示す整数
２．Ｍｐｏｄ  ３２６８：ｔｒｅｆアトム９４０に含まれるｍｐｏｄアトム９４２を表すＭｐｏｄ構造３２７０のアドレス
【０１４９】
Ｍｐｏｄ構造３２７０は、ｍｐｏｄアトム９４２のプロパティを表す。図８９からわかるように、Ｍｐｏｄ構造３２７０は、次のコンポーネントからなる。
１．ｓｉｚｅ  ３２７２：ｍｐｏｄアトム９４２のバイト数を示す整数
２．ｎｕｍＥｎｔｒｉｅｓ  ３２７４：ｔｒａｃｋＩＤ配列３２７６の項目数を指定する整数
３．ｔｒａｃｋＩＤ配列３２７６：ｎｕｍＥｎｔｒｉｅｓ個の整数のシーケンスのアドレス。これらの整数のそれぞれが、ｍｐｏｄアトム９４２で指定されるｔｒａｃｋＩＤ値の１つを表す。
【０１５０】
ＵｓｅｒＤａｔａ構造３２８０は、ｕｄｔａアトム７８４のプロパティを表す。図９０からわかるように、ＵｓｅｒＤａｔａ構造３２８０は、次のコンポーネントからなる。
１．ｓｉｚｅ  ３２８２：ｕｄｔａアトム７８４のバイト数を示す整数
２．ｎｕｍＣｐｒｔ  ３２８４：ｃｐｒｔ配列３２８６のメンバ数を指定する整数
３．ｃｐｒｔ配列３２８６：ｃｐｒｔ構造３２９０のシーケンスのアドレス、またはｃｐｒｔ構造３２９０のアドレスのシーケンス
【０１５１】
ｃｐｒｔ構造３２９０は、ｃｐｒｔアトムのプロパティを表す。図９１からわかるように、ｃｐｒｔ構造３２９０は、次のコンポーネントからなる。
１．ｓｉｚｅ  ３２９２：ｃｐｒｔアトムのバイト数を指定する整数
２．ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ  ３２９４：ｃｐｒｔアトムの「ｖｅｒｓｉｏｎ」プロパティおよび「ｆｌａｇｓ」プロパティの値を示す整数の対
３．ｌａｎｇｕａｇｅ  ３２９６：ｃｐｒｔアトムの「ｌａｎｇｕａｇｅ」プロパティの値を示す整数
４．ｎｏｔｉｃｅ  ３２９８：ｃｐｒｔアトムで指定されるメッセージを示すヌル終端ストリング
【０１５２】
ＭｅｄｉａＨｅａｄｅｒ構造３３００は、ｍｄｈｄアトム９１５のプロパティを表す。図９２からわかるように、ＭｅｄｉａＨｅａｄｅｒ構造３３００に、次の値が含まれる。
１．ｓｉｚｅ  ３３０３：ｍｄｈｄアトム９１５のバイト数を示す整数
２．ｖｅｒｓｉｏｎ  ＆  ｆｌａｇ  ３３０６：ｍｄｈｄアトム９１５の「ｖｅｒｓｉｏｎ」プロパティおよび「ｆｌａｇｓ」プロパティの値を示す整数の対
３．ｃｒｅａｔｉｏｎＴｉｍｅ  ３３０８：ｍｄｈｄアトム９１５の「ｃｒｅａｔｉｏｎＴｉｍｅ」プロパティの値を示す整数
４．ｍｏｄｉｆｉｅｄＴｉｍｅ  ３３１０：ｍｄｈｄアトム９１５の「ｍｏｄｉｆｉｃａｔｉｏｎＴｉｍｅ」プロパティの値を示す整数
５．ｔｉｍｅＳｃａｌｅ  ３３１３：ｍｄｈｄアトム９１５の「ｔｉｍｅＳｃａｌｅ」プロパティの値を示す整数
６．ｄｕｒａｔｉｏｎ  ３３１６：ｍｄｈｄアトム９１５の「ｄｕｒａｔｉｏｎ」プロパティの値を示す整数
７．ｌａｎｇｕａｇｅ  ３３１８：ｍｄｈｄアトム９１５の「ｌａｎｇｕａｇｅ」プロパティの値を示す整数
【０１５３】
Ｈａｎｄｌｅｒ構造３３２０は、ｈｄｌｒアトム９１８のプロパティを表す。図９３からわかるように、Ｈａｎｄｌｅｒ構造３３２０に、次の値が含まれる。
１．ｓｉｚｅ  ３３２３：ｈｄｌｒアトム９１８のバイト数を示す整数
２．ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ  ３３２６：ｈｄｌｒアトム９１８の「ｖｅｒｓｉｏｎ」プロパティおよび「ｆｌａｇｓ」プロパティの値を示す整数の対
３．ｈａｎｄｌｅｒＴｙｐｅ  ３３２８：ｈｄｌｒアトム９１８のハンドラ型プロパティを指定する４文字タグ
４．ｎａｍｅ  ３３３０：記述または診断のために提供されるヌル終端ストリングのアドレス
【０１５４】
ＭｅｄｉａＩｎｆｏ構造３３３３は、ｍｉｎｆアトム９２０のプロパティを表す。図９４からわかるように、ＭｅｄｉａＩｎｆｏ構造３３３３に、ＭｅｄｉａＤａｔａＩｎｆｏ構造３３３８および３３５０のアドレス、ＳａｍｐｌｅＴａｂｌｅｓ構造３３４０および３４００のアドレス、ならびにＭｅｄｉａＩｎｆｏＨｅａｄｅｒ構造３３４３のアドレスが含まれる。ＭｅｄｉａＩｎｆｏＨｅａｄｅｒ構造３３４３は、次のメディア情報ヘッダ・アトム９３６の１つを表す。
１．ｎｍｈｄアトム（ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ（ｓｄｓｍ）またはｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ（ｏｄｓｍ）の）
２．ｖｍｈｄアトム（ビジュアル・ストリームの）、または
３．ｓｍｈｄアトム（オーディオ・ストリームの）
【０１５５】
ＭｅｄｉａＩｎｆｏＨｅａｄｅｒ構造３３４３に、次の値が含まれる。
１．ｓｉｚｅ：メディア情報ヘッダ・アトム９３６のバイト数を示す整数
２．ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ：メディア情報ヘッダ・アトム９３６の「ｖｅｒｓｉｏｎ」プロパティおよび「ｆｌａｇｓ」プロパティの値を示す整数の対
【０１５６】
ＭｅｄｉａＤａｔａＩｎｆｏ構造３３５０は、ｄｉｎｆアトム９２４のプロパティを表す。図９５からわかるように、ＭｅｄｉａＤａｔａＩｎｆｏ構造３３５０に、次のコンポーネントが含まれる。
１．ｓｉｚｅ  ３３５３：ｄｉｎｆアトム９２４のバイト数を示す整数
２．ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ  ３３５６：ｄｉｎｆアトム９２４の「ｖｅｒｓｉｏｎ」プロパティおよび「ｆｌａｇｓ」プロパティの値を示す整数の対
３．ＤａｔａＲｅｆＴａｂｌｅ  ３３５８：ＤａｔａＲｅｆＴａｂｌｅデータ構造３３６０のアドレス
【０１５７】
ＤａｔａＲｅｆＴａｂｌｅ構造３３６０は、ｄｒｅｆアトム９２７のプロパティを表す。図９６からわかるように、ＤａｔａＲｅｆＴａｂｌｅ構造３３６０に、次のコンポーネントが含まれる。
１．ｓｉｚｅ  ３３６３：ｄｒｅｆアトム９２７のバイト数を示す整数
２．ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ  ３３６６：ｄｒｅｆアトム９２７の「ｖｅｒｓｉｏｎ」プロパティおよび「ｆｌａｇｓ」プロパティの値を示す整数の対
３．ｎｕｍＤａｔａＲｅｆｓ  ３３６８：ｄａｔａＲｅｆ配列３３７０の項目数を示す整数
４．ｄａｔａＲｅｆ配列３３７０：ｄａｔａＲｅｆデータ構造３３８０のシーケンスのアドレス
【０１５８】
ｄａｔａＲｅｆ構造３３８０は、データ参照テーブルの項目を表す。図９７からわかるように、ｄａｔａＲｅｆ構造３３８０に、次のコンポーネントが含まれる。
１．ｓｉｚｅ  ３３８３：このｄａｔａＲｅｆ構造３３８０によって表されるデータ参照構造のバイト数を示す整数
２．ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ  ３３８６：データ参照構造の「ｖｅｒｓｉｏｎ」プロパティおよび「ｆｌａｇｓ」プロパティの値を示す整数の対
３．ｄａｔａＲｅｆＴｙｐｅ  ３３８８：このｄａｔａＲｅｆ構造３３８０によって表されるデータ参照構造の型を示す４文字のシーケンス
４．ｄａｔａＲｅｆＤａｔａ  ３３９０：データ参照構造の残りを表すｓｉｚｅ−１２バイトのシーケンスのアドレス
【０１５９】
ＳａｍｐｌｅＴａｂｌｅｓ構造３４００は、ｓｔｂｌアトム９３３および９５０のプロパティを表す。図９８からわかるように、ＳａｍｐｌｅＴａｂｌｅｓ構造３４００に、次のコンポーネントが含まれる。
１．ｓｉｚｅ  ３４０３：ｓｔｂｌアトム９５０のバイト数９５４を示す整数
２．ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅ  ３４０６：ｓｔｓｃアトム９６０の内容を表すデータ構造のアドレス
３．ＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅ  ３４０８：ｓｔｃｏアトム９６６の内容を表すデータ構造のアドレス
４．ＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅ  ３４１０：ｓｔｔｓアトム９６３の内容を表すデータ構造のアドレス
５．ＳａｍｐｌｅＳｉｚｅＴａｂｌｅ  ３４１３：ｓｔｓｚアトム９７０の内容を表すデータ構造のアドレス
６．ＳｙｎｃＳａｍｐｌｅＴａｂｌｅ  ３４１６：ｓｔｓｓアトム９７４の内容を表すデータ構造のアドレス
７．ＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎＴａｂｌｅ  ３４１８：ｓｔｓｄアトム９７８の内容を表すデータ構造のアドレス
【０１６０】
ＳａｍｐｌｅＳｉｚｅＴａｂｌｅ  ３４１３を除いて、ＳａｍｐｌｅＴａｂｌｅｓ構造３４００に含まれるサンプル・テーブルのそれぞれは、図９９の３４２０に示されているように、次のメンバを有する。
１．ｓｉｚｅ  ３４２３：このデータ構造によって表されるサンプル・テーブル・アトムのバイト数を示す整数
２．ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ  ３４２６：このデータ構造によって表されるサンプル・テーブル・アトムの「ｖｅｒｓｉｏｎ」プロパティおよび「ｆｌａｇｓ」プロパティの値を示す整数の対
３．ｎｕｍＥｎｔｒｉｅｓ  ３４２８：ｔａｂｌｅ配列３４３０の項目数を示す整数
４．ｔａｂｌｅ配列３４３０：整数またはデータ構造の配列のアドレス
【０１６１】
図１００からわかるように、ＳａｍｐｌｅＳｉｚｅＴａｂｌｅ構造３４４０は、すべてのサンプルの固定サンプル・サイズを指定する整数である追加メンバ「ｓａｍｐｌｅＳｉｚｅ」３４５０を含むことを除いて、他のサンプル・テーブルに類似する。メンバ「ｓａｍｐｌｅＳｉｚｅ」３４５０の値が非０である場合に、メンバ「ｔａｂｌｅ配列」３４５６は省略される。
【０１６２】
メンバ「ｔａｂｌｅ配列」の構造は、サンプル・テーブルのタイプに依存する。ＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅ構造３４０８、ＳａｍｐｌｅＳｉｚｅＴａｂｌｅ構造３４１３、およびＳｙｎｃＳａｍｐｌｅＴａｂｌｅ構造３４１６の場合に、このメンバは、３２ビット整数のシーケンスを表す。
【０１６３】
ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅ構造３４０６の場合に、テーブル配列は、ＳａｍｐｌｅＴｏＣｈｕｎｋデータ構造３４６０の配列を表す。図１０１からわかるように、各ＳａｍｐｌｅＴｏＣｈｕｎｋデータ構造３４６０は、３つの整数メンバ、「ｆｉｒｓｔＣｈｕｎｋ」３４６３、「ｎｕｍＳａｍｐｌｅｓ」３４６６、および「ｄｅｓｃｒｉｐｔｉｏｎ」３４６８からなる。
【０１６４】
ＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅ構造３４１０の場合に、テーブル配列は、ＴｉｍｅＴｏＳａｍｐｌｅデータ構造３４７０の配列を表す。図１０２からわかるように、各ＴｉｍｅＴｏＳａｍｐｌｅデータ構造３４７０は、２つの整数メンバ、「ｃｏｕｎｔ」３４７３および「ｄｕｒａｔｉｏｎ」３４７６からなる。
【０１６５】
ＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎＴａｂｌｅ構造３４１８の場合に、ｔａｂｌｅ配列は、ＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎデータ構造３４８０の配列を表す。図１０３からわかるように、各ＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎデータ構造３４８０は、次の６つのメンバからなる。
１．ｓｉｚｅ  ３４８３：このＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎ構造３４８０によって表されるサンプル記述テーブルエントリのバイト数を示す整数
２．ｄａｔａＦｏｒｍａｔ  ３４８６：このＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎデータ構造３４８０によって表されるｍｐ４＊アトム９８２の型を指定する４文字識別子（「ｍｐ４ｓ」、「ｍｐ４ａ」、または「ｍｐ４ｖ」）
３．ｄａｔａＲｅｆｅｒｅｎｃｅ  ３４８８：このＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎ構造３４８０によって表されるｍｐ４＊アトム９８２のｄａｔａＲｅｆｅｒｅｎｃｅプロパティを表す整数
４．ｅｓｄＶｅｒｓｉｏｎ  ３４９０：このＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎ構造３４８０によって表されるｍｐ４＊アトム９８２に含まれる「ｅｓｄｓ」アトム９８６のｖｅｒｓｉｏｎプロパティを示す整数
５．ｅｓｄＳｉｚｅ  ３４９３：このＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎ構造３４８０によって表されるｍｐ４＊アトム９８２に含まれる「ｅｓｄｓ」アトム９８６のバイト数を示す整数
６．ｅｓｄＤａｔａ  ３４９６：このＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎ構造３４８０によって表されるｍｐ４＊アトム９８２に含まれる「ｅｓｄｓ」アトム９８６に含まれるＥＳ＿Ｄｅｓｃｒオブジェクト構造９９０のコピーを含むバイトの配列のアドレス
【０１６６】
ｍｐ４バイナリ・ファイルに基づくＱｔＩｎｆｏ構造の作成
ｍｐ４バイナリ・ファイルに基づくＱｔＩｎｆｏデータ構造の作成の処理は、量「ｍａｘＮｕｍＴｒａｃｋｓ」の特定の値に基づく新しい空のＱｔＩｎｆｏデータ構造の作成から始まる。量「ｍａｘＮｕｍＴｒａｃｋｓ」の値は、特定のｍｐ４ファイルのトラックの実際の個数を超えるのに十分に大きい１２８などの所定の定数とすることができ、あるいは、ｍｐ４バイナリ・ファイルをオープンし、このファイルに含まれるｔｒａｋアトムの数を数えることによって決定することができる。新しい空のＱｔＩｎｆｏ構造を作成した後に、ｍｐ４ファイルを、図１０４に示されているように解釈する。この処理は、次のステップからなる。
１．ｍｐ４バイナリ・ファイルをオープンする（読み取りのために）動作３５００。
２．ｍｐ４ファイルから３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＳｉｚｅ」に割り当てる動作３５１０。次に、ｍｐ４ファイルから第２の３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＩｄ」に割り当てる。
３．量「ａｔｏｍＩｄ」の値を値「ｍｄａｔ」と比較する動作３５２０。
４．量「ａｔｏｍＩｄ」の値が「ｍｄａｔ」に対応する場合に、手順「ｍｄａｔアトムの処理」を実行する動作３５２５。
５．量「ａｔｏｍＩｄ」の値を値「ｍｏｏｖ」と比較する動作３５３０。
６．量「ａｔｏｍＩｄ」の値が「ｍｏｏｖ」に対応する場合に、手順「ｍｏｏｖアトムの処理」を実行する動作３５３５。
７．量「ａｔｏｍＩｄ」の値を値「ｕｄｔａ」と比較する動作３５４０。
８．量「ａｔｏｍＩｄ」の値が「ｕｄｔａ」に対応する場合に、手順「ｕｄｔａアトムの処理」を実行し、下の動作３５７０を続ける動作３５４５。
９．そうでない場合に、ｍｐ４ファイルのａｔｏｍＳｉｚｅ−８バイトをスキップする動作３５６０。すなわち、このバイト数をｍｐ４ファイルから読み取るが、結果の値に関して何もしない。
１０．ｍｐ４バイナリ・ファイル７００の現在のファイル位置をテストする動作３５７０。
１１．ｍｐ４バイナリ・ファイル７００の現在のファイル位置がファイルの終り状態に対応する（読み取られたバイト数がｍｐ４ファイル全体のバイト数と等しい）場合に、処理を終了する動作３５８０。そうでない場合には、動作３５１０から動作３５７０を繰り返す。
【０１６７】
図１０５からわかるように、手順「ｍｄａｔアトムの処理」３５２５は、次のステップからなる。
１．新しいＭｅｄｉａＤａｔａ構造「ｎｅｗＭｅｄｉａＤａｔａ」３１６０を作成する動作３６００。
２．この新しいＭｅｄｉａＤａｔａ構造３１６０のアドレスをＱｔＩｎｆｏ構造３１００のｍｄａｔ配列３１１３の項目ｎｕｍＭｄａｔＡｔｏｍｓに割り当てる動作３６１０。
３．ｎｕｍＭｄａｔＡｔｏｍｓ  ３１１０の値を１つ増分する動作３６２０。
４．量「ａｔｏｍＳｉｚｅ」の値を新しいＭｅｄｉａＤａｔａ構造３１６０のメンバ「ｓｉｚｅ」３１６３に割り当てる動作３６３０。
５．現在のファイル・ポインタ（−８）を新しいＭｅｄｉａＤａｔａ構造３１６０のメンバ「ｓｔａｒｔ」３１６６に割り当てる動作３６４０。
６．（ａｔｏｍＳｉｚｅ−８）バイトの新しいバイト配列を作成し、このバイト配列のアドレスを新しいＭｅｄｉａＤａｔａ構造３１６０のメンバ「ＭｅｄｉａＤａｔａ」３１６８に割り当てる動作３６５０。
７．ｍｐ４バイナリ・ファイルから（ａｔｏｍＳｉｚｅ−８）バイトを読み取り、その結果を新しいＭｅｄｉａＤａｔａ構造３１６０のメンバ「ＭｅｄｉａＤａｔａ」３１６８によって指定される新しいバイト配列にコピーする動作３６６０。
【０１６８】
図１０６からわかるように、手順「ｍｏｏｖアトムの処理」３５３５は、次のステップからなる。
１．値０をＱｔＩｎｆｏ構造３１００のメンバ「ｎｕｍＴｒａｃｋｓ」３１１８に割り当てる動作３７００。
２．ｍｐ４ファイルから３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＳｉｚｅ」に割り当てる動作３７１０。次に、ｍｐ４ファイルから第２の３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＩｄ」に割り当てる。
３．量「ａｔｏｍＩｄ」の値を値「ｍｖｈｄ」と比較する動作３７２０。
４．量「ａｔｏｍＩｄ」の値が「ｍｖｈｄ」に対応する場合に、手順「ｍｖｈｄアトムの処理」を実行する動作３７２５。その後、下の動作３７７０で継続する。
５．量「ａｔｏｍＩｄ」の値を値「ｉｏｄｓ」と比較する動作３７３０。
６．量「ａｔｏｍＩｄ」の値が「ｉｏｄｓ」に対応する場合に、手順「ｉｏｄｓアトムの処理」を実行する動作３７３５。その後、下の動作３７７０で継続する。
７．量「ａｔｏｍＩｄ」の値を値「ｔｒａｋ」と比較する動作３７４０。
８．量「ａｔｏｍＩｄ」の値が「ｔｒａｋ」に対応する場合に、手順「ｔｒａｋアトムの処理」を実行する動作３７４５。その後、下の動作３７７０で継続する。
９．そうでない場合に、ｍｐ４ファイルでａｔｏｍＳｉｚｅ−８バイトをスキップする動作３７６０。すなわち、このバイト数をｍｐ４ファイルから読み取るが、結果の値について何もしない。
１０．ｍｏｏｖアトム７５４の終りに達したかどうかを検査する動作３７７０。ｍｏｏｖアトム７５４の終りに達したという条件は、ｍｏｏｖアトム７５４の先頭以降にｍｐ４ファイルから読み取られたデータ・バイト数が、動作３７１０で決定された量ａｔｏｍＳｉｚｅと等しい場合に満足される。
１１．ｍｏｏｖアトム（７５４）の終りに達した場合に、この処理を終了する動作３７８０。そうでない場合に、動作３７１０から動作３７７０を繰り返す。
【０１６９】
手順「ユーザ・データ・アトムの処理」を使用して、ＵｓｅｒＤａｔａ構造３２８０の任意選択のｕｄｔａアトム７８４の内容を表すことができる。この情報は、最終的なＸＭＴ−Ａファイルには不要であり、その結果、ｕｄｔａアトム７８４の残りの部分（ａｔｏｍＳｉｚｅ−８バイト）を単にスキップすることで十分である。
【０１７０】
代替案では、次のステップを使用して、ｕｄｔａアトム７８４の内容を解釈することができる。
１．新しいＵｓｅｒＤａｔａデータ構造３２８０を作成する。
２．この新しいＵｓｅｒＤａｔａデータ構造３２８０のアドレスを、ＱｔＩｎｆｏ構造３１００のメンバＵｓｅｒＤａｔａ  ３１２３に割り当てる。
３．量「ａｔｏｍＳｉｚｅ」の値を、この新しいＵｓｅｒＤａｔａデータ構造３２８０のメンバ「ｓｉｚｅ」３２８２に割り当てる。
４．値「０」を、ＵｓｅｒＤａｔａ構造３２８０のメンバ「ｎｕｍＣｐｒｔ」３２８４に割り当てる。
５．ｕｄｔａアトム７８４の終りに達するまで、手順「Ｃｏｐｙｒｉｇｈｔアトムの読取」を繰り返す。ｕｄｔａアトム７８４の終りに達したという条件は、ｕｄｔａアトム７８４の先頭以降でｍｐ４ファイルから読み取ったデータ・バイト数が、メンバ「ｓｉｚｅ」３２８２の値と等しい場合に満足される。
【０１７１】
手順「Ｃｏｐｙｒｉｇｈｔアトムの読取」は、次のステップからなる。
１．ｍｐ４ファイルから３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＳｉｚｅ」に割り当てる。次に、ｍｐ４ファイルから第２の３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＩｄ」に割り当てる。
２．量「ａｔｏｍＩｄ」の値を値「ｃｐｒｔ」と比較する。
３．量「ａｔｏｍＩｄ」の値が「ｃｐｒｔ」に対応しない場合に、ｍｐ４ファイルのａｔｏｍＳｉｚｅ−８バイトのデータをスキップし、ステップ５の手順「ユーザ・データ・アトムの処理」で継続する。そうでない場合には、次のステップを実行する。
４．新しいｃｐｒｔ構造「ｎｅｗＣｐｒｔ」３２９０を作成する。
５．この新しいｃｐｒｔ構造のアドレスを、ＵｓｅｒＤａｔａ構造３２８０のｃｐｒｔ配列メンバ３２８６の項目ｎｕｍＣｐｒｔに割り当てる。
６．量「ａｔｏｍＳｉｚｅ」の値を新しいｃｐｒｔ構造３２９０のメンバ「ｓｉｚｅ」（３２９２）に割り当てる。
７．ｍｐ４ファイルから３２ビット整数を読み取り、この整数の値を新しいｃｐｒｔ構造３２９０のメンバ「ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ」３２９４に割り当てる。
８．ｍｐ４ファイルから１６ビット整数を読み取り、この整数の値を新しいｃｐｒｔ構造３２９０のメンバ「ｌａｎｇｕａｇｅ」３２９６に割り当てる。
９．ｍｐ４ファイルからバイトのヌル終端シーケンスを読み取り、これらのバイトを新しいストリング量「ｎｅｗＮｏｔｉｃｅ」にコピーする。
１０．新しいストリング量「ｎｅｗＮｏｔｉｃｅ」のアドレスを、新しいｃｐｒｔ構造３２９０のメンバ「ｎｏｔｉｃｅ」３２９８に割り当てる。
１１．ＵｓｅｒＤａｔａ構造３２８０のメンバ「ｎｕｍＣｐｒｔ」３２８４の値を１つ増分する。
【０１７２】
手順「ｍｖｈｄアトムの処理」３７２５は、次のステップからなる。
１．新しいＭｏｏｖＨｅａｄｅｒデータ構造３１７０を作成する。
２．この新しいＭｏｏｖＨｅａｄｅｒデータ構造３１７０のアドレスを、ＱｔＩｎｆｏ構造３１００のメンバＭｏｏｖＨｅａｄｅｒ  ３１１６に割り当てる。
３．量「ａｔｏｍＳｉｚｅ」の値を、この新しいＭｏｏｖＨｅａｄｅｒデータ構造３１７０のメンバ「ｓｉｚｅ」３１７３に割り当てる。
４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＭｏｏｖＨｅａｄｅｒ構造３１７０のメンバ「ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ」３１７６に割り当てる。
５．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＭｏｏｖＨｅａｄｅｒ構造３１７０のメンバ「ｃｒｅａｔｉｏｎＴｉｍｅ」３１７８に割り当てる。
６．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＭｏｏｖＨｅａｄｅｒ構造３１７０のメンバ「ｍｏｄｉｆｉｅｄＴｉｍｅ」３１８０に割り当てる。
７．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＭｏｏｖＨｅａｄｅｒ構造３１７０のメンバ「ｔｉｍｅＳｃａｌｅ」３１８３に割り当てる。
８．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＭｏｏｖＨｅａｄｅｒ構造３１７０のメンバ「ｄｕｒａｔｉｏｎ」３１８６に割り当てる。
９．ｍｐ４ファイルから７６バイトを読み取り、その結果の値を無視する。
１０．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＭｏｏｖＨｅａｄｅｒ構造３１７０のメンバ「ｎｅｘｔＴｒａｃｋＩＤ」３１８８に割り当てる。
【０１７３】
手順「ｉｏｄｓアトムの処理」は、次のステップからなる。
１．新しいＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒデータ構造３１３０を作成する。
２．この新しいＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒデータ構造３１３０のアドレスを、ＱｔＩｎｆｏ構造３１００のメンバＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒ  ３１０６に割り当てる。
３．量「ａｔｏｍＳｉｚｅ」の値をＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒ構造３１３０のメンバ「ｓｉｚｅ」３１３３に割り当てる。
４．ｍｐ４ファイルから３２ビット整数８１２、８１６を読み取り、その結果をＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒ構造３１３０のメンバ「ｖｅｒｓｉｏｎ」３１３６に割り当てる。
５．ｍｐ４ファイルから８ビット整数８２８を読み取り、その結果が期待される値「１６」（ＭＰ４＿ＩＯＤ＿Ｔａｇ）を有することを検証する。
６．ｍｐ４ファイルから８ビット整数８３２を読み取り、その結果を量「ｏｂｊＳｉｚｅ」に割り当てる。
７．ｏｂｊＳｉｚｅの値が１２７を超える場合に、ステップ６を繰り返す。
８．ｍｐ４ファイルから１６ビット整数８３６から８４８を読み取り、その結果を量「ｏｄｉｄａｎｄｆｌａｇｓ」に割り当てる。
９．値「ｏｄｉｄａｎｄｆｌａｇｓ」８３６の上位１０ビットの値を、Ｍｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒ構造３１３０のメンバ「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」３１３８に割り当てる。
１０．論理演算（（「ｏｄｉｄａｎｄｆｌａｇｓ」の値）  ａｎｄ  ３２）の結果が０である場合に、値０をＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒ構造３１３０のメンバ「ｕｒｌＦｌａｇ」３１４０に割り当てる。そうでない場合には、値「１」をＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒ構造３１３０のメンバ「ｕｒｌＦｌａｇ」３１４０に割り当てる。
１１．論理演算（（「ｏｄｉｄａｎｄｆｌａｇｓ」の値）  ａｎｄ  １６）の結果が０である場合に、値「０」をＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒ構造３１３０のメンバ「ｉｎｌｉｎｅＰｒｏｆｉｌｅｓ」３１４６に割り当てる。そうでない場合に、値「１」をＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒ構造３１３０のメンバ「ｉｎｌｉｎｅＰｒｏｆｉｌｅｓ」３１４６に割り当てる。
１２．値「２」を、Ｍｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒ構造３１３０のメンバ「ｍａｘＮｕｍＥｓＩｄＩｎｃｓ」３１５０に割り当てる。
１３．値０を、Ｍｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒ構造３１３０のメンバｎｕｍＥｓＩｄＩｎｃｓ  ３１５３に割り当てる。
１４．ｍａｘＮｕｍＥｓＩｄＩｎｃｓ個のアドレス値の配列を作成する。
１５．この配列のアドレスを、Ｍｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒ構造３１３０のメンバ「ＥｓＩｄＩｎｃ配列」３１５６に割り当てる。
１６．メンバｕｒｌＦｌａｇの値が「１」である場合に、手順「ＵＲＬストリングの処理」を実行する。そうでない（ｕｒｌＦｌａｇの値が「０」である）場合に、手順「プロファイルレベル・インジケータの処理」を実行する。
【０１７４】
手順「ＵＲＬストリングの処理」は、次のステップからなる。
１．バイトのヌル終端シーケンスをｍｐ４ファイルから読み取る。
２．これらのバイトを新しいバイト配列に保管する。
３．この新しいバイト配列のアドレスを、Ｍｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒ構造３１３０のメンバｕｒｌＳｔｒｉｎｇ  ３１４３に割り当てる。
【０１７５】
手順「プロファイルレベル・インジケータの処理」は、次のステップからなる。
１．値０を、Ｍｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒ構造３１３０の量ｕｒｌＳｔｒｉｎｇ  ３１４３に割り当てる。
２．５つのプロファイルレベル・表示値８５２から８６８をｍｐ４ファイルから読み取り、それぞれをＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒ構造３１３０の対応するメンバに割り当てる。これらのプロファイルレベル値のそれぞれは、単一のバイトからなり、この５つの値は、Ｍｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒ構造３１３０の「ＰｒｏｆｉｌｅＬｅｖｅｌｓ」３１４８によって表される。
３．ｉｏｄｓアトム８００の終りに達するまで、手順「ＥｓＩｄＩｎｃオブジェクトの処理」を繰り返す。ｉｏｄｓアトム８００の終りに達したという条件は、ｉｏｄｓアトム８００の先頭以降でｍｐ４ファイルから読み取られたデータ・バイト数が、ｉｏｄｓアトム８００のサイズ８０４、３１３３と等しい場合に満足される。
【０１７６】
手順「ＥｓＩｄＩｎｃオブジェクトの処理」は、次のステップからなる。
１．ｍｐ４ファイルから１バイトのオブジェクト・タグ８８０を読み取る。
２．オブジェクト・タグの値が期待される値（１４、「ＥｓＩｄＩｎｃＴａｇ」）であることを検証する。
３．新しいＥｓＩｄＩｎｃ構造を作成する。この構造には、２つのメンバ値、「ｓｉｚｅ」および「ｔｒａｃｋＩＤ」が含まれる。
４．この新しいＥｓＩｄＩｎｃ構造のアドレスを、Ｍｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒ構造３１３０のＥｓＩｄＩｎｃ配列３１５６の項目ｎｕｍＥｓＩｄＩｎｃｓに割り当てる。
５．ＥｓＩｄＩｎｃオブジェクトの残りを含むバイト数８８４を読み取り、その結果を新しいＥｓＩｄＩｎｃ構造のメンバ「ｓｉｚｅ」に割り当てる。
６．ｍｐ４ファイルから３２ビット整数８８８を読み取り、その結果を新しいＥｓＩｄＩｎｃ構造のメンバ「ｔｒａｃｋＩＤ」に割り当てる。
７．メンバｎｕｍＥｓＩｄＩｎｃｓ  ３１５３の値を１つ増分する。
【０１７７】
図１０７からわかるように、手順「ｔｒａｋアトムの処理」動作３７４５は、次のステップからなる。
１．新しいｔｒａｋデータ構造３２００を作成する動作３８００。この新しいｔｒａｋ構造のアドレスを、現在のＱｔＩｎｆｏ構造３１００のｔｒａｋ配列メンバ３１２０の項目ｎｕｍＴｒａｃｋｓに割り当てる。量「ＡｔｏｍＳｉｚｅ」の値を、新しいｔｒａｋ構造３２００のメンバ「ｓｉｚｅ」３２０２に割り当てる。
２．ｍｐ４ファイルから３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＳｉｚｅ」に割り当てる。次に、ｍｐ４ファイルから第２の３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＩｄ」に割り当てる動作３８１０。
３．量「ａｔｏｍＩｄ」の値を値「ｔｋｈｄ」と比較する動作３８２０。
４．量「ａｔｏｍＩｄ」の値が「ｔｋｈｄ」に対応する場合に、手順「ｔｒａｃｋ  ｈｅａｄｅｒ（ｔｋｈｄ）アトムの処理」を実行する動作３８２５。その後、動作３８７０で継続する。
５．量「ａｔｏｍＩｄ」の値を値「ｍｄｉａ」と比較する動作３８３０。
６．量「ａｔｏｍＩｄ」の値が「ｍｄｉａ」に対応する場合に、手順「ｔｒａｃｋ  ｍｅｄｉａ（ｍｄｉａ）アトムの処理」を実行する動作３８３５。その後、動作３８７０で継続する。
７．量「ａｔｏｍＩｄ」の値を値「ｅｄｔｓ」と比較する動作３８４０。
８．量「ａｔｏｍＩｄ」の値が「ｅｄｔｓ」に対応する場合に、手順「ｔｒａｃｋ  ｅｄｉｔ（ｅｄｔｓ）アトムの処理」を実行する動作３８４５。その後、動作３８７０で継続する。
９．量「ａｔｏｍＩｄ」の値を値「ｔｒｅｆ」と比較する動作３８５０。
１０．量「ａｔｏｍＩｄ」の値が「ｔｒｅｆ」に対応する場合に、手順「ｔｒａｃｋ  ｒｅｆｅｒｅｎｃｅ（ｔｒｅｆ）アトムの処理」を実行する手動作３８５５。その後、動作３８７０で継続する。
１１．そうでない場合に、ｍｐ４ファイルのａｔｏｍＳｉｚｅ−８バイトをスキップする動作３８６０。すなわち、ａｔｏｍＳｉｚｅ−８バイトをｍｐ４ファイルから読み取り、結果の値を無視する。
１２．ｔｒａｋアトム９００の終りに達したかどうかを検査する動作３８７０。ｔｒａｋアトム９００の終りに達したという条件は、ｔｒａｋアトム９００の先頭以降でｍｐ４ファイルから読み取られたデータ・バイト数が、現在のｔｒａｋ構造３２００のメンバ「ｓｉｚｅ」３２０２の値と等しい場合に満足される。
１３．ｔｒａｋアトム９００の終りに達した場合に、ｎｕｍＴｒａｃｋｓの値を１つ増分する動作３８８０。そうでない場合には、動作３８１０から動作３８７０を繰り返す。
【０１７８】
手順「ｔｒａｃｋ  ｈｅａｄｅｒアトムの処理」は、次のステップからなる。
１．新しいＴｒａｃｋＨｅａｄｅｒデータ構造３２１２を作成する。
２．この新しいＴｒａｃｋＨｅａｄｅｒデータ構造３２１２のアドレスを、現在のｔｒａｋ構造３２００のメンバＴｒａｃｋＨｅａｄｅｒ  ３２０４に割り当てる。
３．量「ａｔｏｍＳｉｚｅ」の値を、ＴｒａｃｋＨｅａｄｅｒ構造３２１２のメンバ「ｓｉｚｅ」３２１４に割り当てる。
４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＴｒａｃｋＨｅａｄｅｒ構造３２１２のメンバ「ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ」３２１６に割り当てる。
５．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＴｒａｃｋＨｅａｄｅｒ構造３２１２のメンバ「ｃｒｅａｔｉｏｎＴｉｍｅ」３２１８に割り当てる。
６．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＴｒａｃｋＨｅａｄｅｒ構造３２１２のメンバ「ｍｏｄｉｆｉｅｄＴｉｍｅ」３２２０に割り当てる。
７．ｍｐ４ファイルから３２ビット整数を読み取り、この値を量「ｔｒａｃｋＩＤ」に割り当てる。量「ｔｒａｃｋＩＤ」の値を、ＴｒａｃｋＨｅａｄｅｒ構造３２１２のメンバ「ｔｒａｃｋＩＤ」３２２４に割り当てる。
８．ｍｐ４ファイルから４バイトを読み取り、結果の値を無視する。
９．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＴｒａｃｋＨｅａｄｅｒ構造３２１２のメンバ「ｄｕｒａｔｉｏｎ」３２２２に割り当てる。
１０．ｍｐ４ファイルから６０バイトを読み取り、結果の値を無視する。
【０１７９】
図３９からわかるように、手順「ｔｒａｃｋ  ｍｅｄｉａアトムの処理」は、次のステップからなる。
１．新しいＴｒａｃｋＭｅｄｉａデータ構造３２２６を作成する動作３９００。このＴｒａｃｋＭｅｄｉａ構造３２２６のアドレスを、現在のｔｒａｋ構造３２００のメンバＴｒａｃｋＭｅｄｉａ  ３２０６に割り当てる。「ａｔｏｍＳｉｚｅ」の値を、新しいＴｒａｃｋＭｅｄｉａ構造３２２６のメンバ「ｓｉｚｅ」３２２８に割り当てる。
２．ｍｐ４ファイルから３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＳｉｚｅ」に割り当てる動作３９１０。次に、ｍｐ４ファイルから第２の３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＩｄ」に割り当てる。
３．量「ａｔｏｍＩｄ」の値を値「ｍｄｈｄ」と比較する動作３９２０。
４．量「ａｔｏｍＩｄ」の値が「ｍｄｈｄ」に対応する場合に、手順「ｍｅｄｉａ  ｈｅａｄｅｒ（ｍｄｈｄ）アトムの処理」を実行する動作３９２５。その後、下の動作３９７０で継続する。
５．量「ａｔｏｍＩｄ」の値を値「ｈｄｌｒ」と比較する動作３９３０。
６．量「ａｔｏｍＩｄ」の値が「ｈｄｌｒ」に対応する場合に、手順「ｈａｎｄｌｅｒ（ｈｄｌｒ）アトムの処理」を実行する動作３９３５。その後、下の動作３９７０で継続する。
７．量「ａｔｏｍＩｄ」の値を値「ｍｉｎｆ」と比較する動作３９４０。
８．量「ａｔｏｍＩｄ」の値が「ｍｉｎｆ」に対応する場合に、手順「ｍｅｄｉａ  ｉｎｆｏ（ｍｉｎｆ）アトムの処理」を実行する動作３９４５。その後、下の動作３９７０で継続する。
９．そうでない場合に、ｍｐ４ファイルのａｔｏｍＳｉｚｅ−８バイトをスキップする動作３９６０。すなわち、このバイト数をｍｐ４ファイルから読み取るが、結果の値について何もしない。
１０．ｍｄｉａアトム９１２の終りに達したかどうかを検査する動作３９７０。ｍｄｉａアトム９１２の終りに達したという条件は、ｍｄｉａアトム９１２の先頭以降でｍｐ４ファイルから読み取られたデータ・バイト数が、現在のＴｒａｃｋＭｅｄｉａ構造３２２６のメンバ「ｓｉｚｅ」３２２８の値と等しい場合に満足される。
１１．ｍｄｉａアトム９１２の終りに達した場合に、この手順を終了し、動作３８７０で処理を継続させる動作３９８０。そうでない場合には、動作３９１０から動作３９７０を繰り返す。
【０１８０】
手順「ｔｒａｃｋ  ｅｄｉｔアトムの処理」は、ｅｄｔｓアトム９４５のデータの終りに達するまで次のステップを繰り返すことからなる。ｅｄｔｓアトム９４５の終りに達したという条件は、ｅｄｔｓアトム９４５の先頭以降でｍｐ４ファイルから読み取られたデータ・バイト数が、ｅｄｔｓアトムのサイズと等しい場合に満足される。単一のｅｌｓｔアトム９４８が、ｅｄｔｓアトム９４５内で見つかると期待される。
１．新しいＴｒａｃｋＥｄｉｔ構造３２３６を作成する。
２．この新しいＴｒａｃｋＥｄｉｔ構造３２３６のアドレスを、現在のｔｒａｋ構造３２００のメンバＴｒａｃｋＥｄｉｔ  ３２０８に割り当てる。
３．「ａｔｏｍＳｉｚｅ」の値を、新しいＴｒａｃｋＥｄｉｔ構造３２３６のメンバ「ｓｉｚｅ」３２３８に割り当てる。
４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＴｒａｃｋＥｄｉｔ構造３２３６のメンバ「ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ」３２４０に割り当てる。
５．ｍｐ４ファイルから３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＳｉｚｅ」に割り当てる。次に、ｍｐ４ファイルから第２の３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＩｄ」に割り当てる。
６．量「ａｔｏｍＩｄ」の値を値「ｅｌｓｔ」と比較する。
７．量「ａｔｏｍＩｄ」の値が「ｅｌｓｔ」に対応する場合に、手順「編集リスト・アトムの処理」を実行する。そうでない場合に、ｍｐ４ファイルでａｔｏｍＳｉｚｅ−８バイトをスキップする。すなわち、ｍｐ４ファイルからａｔｏｍＳｉｚｅ−８バイトを読み取り、結果の値を無視する。
８．ｅｄｔｓ（ｔｒａｃｋ  ｅｄｉｔ）アトム９４５の終りに達したかどうかを検査する。ｅｄｔｓアトム９４５の終りに達したという条件は、ｅｄｔｓアトム９４５の先頭以降でｍｐ４ファイルから読み取られたデータ・バイト数が、ＴｒａｃｋＥｄｉｔ構造３２３６のメンバ「ｓｉｚｅ」３２３８の値と等しい場合に満足される。
９．ｅｄｔｓアトム９４５の終りに達している場合に、この手順を終了する。そうでない場合には、ステップ５から８を繰り返す。
【０１８１】
手順「編集リスト・アトムの処理」は、次のステップからなる。
１．新しいＥｄｉｔＬｉｓｔ構造３２４４を作成する。
２．この新しいＥｄｉｔＬｉｓｔ構造３２４４のアドレスを、現在のＴｒａｃｋＥｄｉｔ構造３２３６のメンバ「ＥｄｉｔＬｉｓｔ」３２４２に割り当てる。
３．「ａｔｏｍＳｉｚｅ」の値を、新しいＥｄｉｔＬｉｓｔ構造３２４４のメンバ「ｓｉｚｅ」３２４６に割り当てる。
４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を、ＥｄｉｔＬｉｓｔ構造３２４４のメンバ「ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ」３２４８に割り当てる。
５．ｍｐ４ファイルから３２ビット整数を読み取り、この値を、量「ｎｕｍＳｅｇｍｅｎｔｓ」に割り当てる。
６．量「ｎｕｍＳｅｇｍｅｎｔｓ」の値を、ＥｄｉｔＬｉｓｔ構造３２４４のメンバ「ｎｕｍＳｅｇｍｅｎｔｓ」３２５０に割り当てる。
７．ｎｕｍＳｅｇｍｅｎｔｓ個のＥｄｉｔＳｅｇｍｅｎｔ構造３２５６の配列を作成し、この配列のアドレスを、ＥｄｉｔＬｉｓｔ構造３２４４のメンバ「ＥｄｉｔＳｅｇｍｅｎｔ配列」に割り当てる。
８．値０を、量「ｓｅｇｍｅｎｔ」に割り当てる。
９．次のステップ（１０から１３）を、ｎｕｍＳｅｇｍｅｎｔｓ回（量「ｓｅｇｍｅｎｔ」の値が量「ｎｕｍＳｅｇｍｅｎｔｓ」と等しくなるまで）繰り返す。
１０．ｍｐ４ファイルから３２ビット整数を読み取り、結果をＥｄｉｔＳｅｇｍｅｎｔ構造の配列３２５２の項目「ｓｅｇｍｅｎｔ」のメンバ「ｓｔａｒｔＴｉｍｅ」３２５８に割り当てる。
１１．ｍｐ４ファイルから３２ビット整数を読み取り、結果をＥｄｉｔＳｅｇｍｅｎｔ構造の配列３２５２の項目「ｓｅｇｍｅｎｔ」のメンバ「ｄｕｒａｔｉｏｎ」３２６０に割り当てる。
１２．ｍｐ４ファイルから３２ビット整数を読み取り、結果をＥｄｉｔＳｅｇｍｅｎｔ構造の配列３２５２の項目「ｓｅｇｍｅｎｔ」のメンバ「ｒｅｌａｔｉｖｅＲａｔｅ」３２６２に割り当てる。
１３．量「ｓｅｇｍｅｎｔ」の値を１つ増分する。
【０１８２】
手順「ｔｒａｃｋ  ｒｅｆｅｒｅｎｃｅアトムの処理」は、次のステップからなる。単一のｍｐｏｄアトム９４２が、ｔｒｅｆアトム９４０内で見つかると期待される。
１．新しいＴｒａｃｋＲｅｆｅｒｅｎｃｅ構造３２６４を作成する。
２．この新しいＴｒａｃｋＲｅｆｅｒｅｎｃｅ構造３２６４のアドレスを、現在のｔｒａｋ構造３２００のメンバ「ＴｒａｃｋＲｅｆｅｒｅｎｃｅ」に割り当てる。
３．ａｔｏｍＳｉｚｅの値を、この新しいＴｒａｃｋＲｅｆｅｒｅｎｃｅ構造３２６４のメンバ「ｓｉｚｅ」３２６６に割り当てる。
４．ｔｒｅｆアトム９４０のデータの終りに達するまで、次のステップを繰り返す。ｔｒｅｆアトム９４０の終りに達したという条件は、ｔｒｅｆアトム９４０の先頭以降でｍｐ４ファイルから読み取られたデータ・バイト数が、ｔｒｅｆアトム９４０のサイズと等しい場合に満足される。
５．ｍｐ４ファイルから３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＳｉｚｅ」に割り当てる。ｍｐ４ファイルから第２の３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＩｄ」に割り当てる。
６．量「ａｔｏｍＩｄ」の値を値「ｍｐｏｄ」と比較する。
７．量「ａｔｏｍＩｄ」の値が「ｍｐｏｄ」に対応する場合に、手順「ｍｐｏｄアトムの処理」を実行する。そうでない場合には、ｍｐ４ファイルでａｔｏｍＳｉｚｅ−８バイトをスキップする。すなわち、ｍｐ４ファイルからａｔｏｍＳｉｚｅ−８バイトを読み取り、結果の値を無視する。
８．ｔｒｅｆ（ｔｒａｃｋ  ｒｅｆｅｒｅｎｃｅ）アトム９４０の終りに達したかどうかを検査する。ｔｒｅｆアトム９４０の終りに達したという条件は、ｔｒｅｆアトム９４０の先頭以降でｍｐ４ファイルから読み取られたデータ・バイト数が、ＴｒａｃｋＲｅｆｅｒｅｎｃｅ構造３２６４のメンバ「ｓｉｚｅ」３２６６の値と等しい場合に満足される。
９．ｔｒｅｆアトム９４０の終りに達している場合には、この手順を終了する。そうでない場合には、ステップ５から８を繰り返す。
【０１８３】
手順「ｍｐｏｄアトムの処理」は、次のステップからなる。
１．新しいＭｐｏｄデータ構造３２７０を作成する。
２．この新しいＭｐｏｄデータ構造３２７０のアドレスを、ＴｒａｃｋＲｅｆｅｒｅｎｃｅデータ構造３２６４のメンバ「Ｍｐｏｄ」３２６８に割り当てる。
３．ａｔｏｍＳｉｚｅの値を、この新しいＭｐｏｄデータ構造のメンバ「ｓｉｚｅ」３２７２に割り当てる。
４．Ｍｐｏｄメンバ「ｓｉｚｅ」の値から８を引き、その結果を４で割り、その結果を量「ｎｕｍＥｎｔｒｉｅｓ」に割り当てる。
５．「ｎｕｍＥｎｔｒｉｅｓ」の値を、新しいＭｐｏｄデータ構造３２７０のメンバ「ｎｕｍＥｎｔｒｉｅｓ」３２７４に割り当てる。
６．「ｎｕｍＥｎｔｒｉｅｓ」個の項目を有する整数の配列を作成し、この配列のアドレスを、新しいＭｐｏｄデータ構造３２７０のメンバ「ｔｒａｃｋＩＤ配列」３２７６に割り当てる。
７．値０を、量「ｅｎｔｒｙ」に割り当てる。
８．次のステップ（９から１０）を、ｎｕｍＥｎｔｒｉｅｓ回（量「ｅｎｔｒｙ」の値が量「ｎｕｍＥｎｔｒｉｅｓ」の値と等しくなるまで）繰り返す。
９．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を現在のＭｐｏｄデータ構造３２７０の配列「ｔｒａｃｋＩＤ配列」３２７６の項目「ｅｎｔｒｙ」に割り当てる。
１０．量「ｅｎｔｒｙ」の値を１つ増分する。
【０１８４】
手順「ｍｅｄｉａ  ｈｅａｄｅｒアトムの処理」は、次のステップからなる。
１．新しいＭｅｄｉａＨｅａｄｅｒ構造３３００を作成する。
２．この新しいＭｅｄｉａＨｅａｄｅｒ構造３３００のアドレスを、現在のＴｒａｃｋＭｅｄｉａ構造３２２６のメンバ「ＭｅｄｉａＨｅａｄｅｒ」３２３０に割り当てる。
３．量「ａｔｏｍＳｉｚｅ」の値を、ＭｅｄｉａＨｅａｄｅｒ構造３３００のメンバ「ｓｉｚｅ」３３０３に割り当てる。
４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＭｅｄｉａＨｅａｄｅｒ構造３３００のメンバ「ｖｅｒｓｉｏｎ  ＆  ｆｌａｇ」３３０６に割り当てる。
５．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＭｅｄｉａＨｅａｄｅｒ構造３３００のメンバ「ｃｒｅａｔｉｏｎＴｉｍｅ」３３０８に割り当てる。
６．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＭｅｄｉａＨｅａｄｅｒ構造３３００のメンバ「ｍｏｄｉｆｉｅｄＴｉｍｅ」３３１０に割り当てる。
７．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＭｅｄｉａＨｅａｄｅｒ構造３３００のメンバ「ｔｉｍｅＳｃａｌｅ」３３１３に割り当てる。
８．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＭｅｄｉａＨｅａｄｅｒ構造３３００のメンバ「ｄｕｒａｔｉｏｎ」３３１６に割り当てる。
９．ｍｐ４ファイルから１６ビット整数を読み取り、その結果をＭｅｄｉａＨｅａｄｅｒ構造３３００のメンバ「ｌａｎｇｕａｇｅ」３３１８に割り当てる。
１０．ｍｐ４ファイルから２バイトを読み込み、結果の値を無視する。
【０１８５】
手順「ｈａｎｄｌｅｒアトムの処理」は、次のステップからなる。
１．新しいＨａｎｄｌｅｒ構造３３２０を作成する。
２．この新しいＨａｎｄｌｅｒ構造３３２０のアドレスを、現在のＴｒａｃｋＭｅｄｉａ構造３２２６のメンバ「Ｈａｎｄｌｅｒ」３２３２に割り当てる。
３．量「ａｔｏｍＳｉｚｅ」の値を、Ｈａｎｄｌｅｒ構造３３２０のメンバ「ｓｉｚｅ」３３２３に割り当てる。
４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＨａｎｄｌｅｒ構造３３２０のメンバ「ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ」３３２６に割り当てる。
５．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＨａｎｄｌｅｒ構造３３２０のメンバ「ｈａｎｄｌｅｒＴｙｐｅ」３３２８に割り当てる。
６．ｍｐ４ファイルの１２バイトを読み取り、結果の値を無視する。
７．ｍｐ４ファイルから文字のヌル終端ストリングを読み取り、結果の文字のシーケンスを文字の配列に保管し、この文字の配列のアドレスを、Ｈａｎｄｌｅｒ構造３３２０のメンバ「ｎａｍｅ」３３３０に割り当てる。
【０１８６】
図１０９からわかるように、手順「ｍｅｄｉａ  ｉｎｆｏアトムの処理」は、次のステップからなる。
１．新しいＭｅｄｉａＩｎｆｏデータ構造３３３３を作成する動作４０００。この新しいＭｅｄｉａＩｎｆｏデータ構造３３３３のアドレスを、現在のＴｒａｃｋＭｅｄｉａデータ構造３２２６のメンバＭｅｄｉａＩｎｆｏ  ３２３４に割り当てる。量「ａｔｏｍＳｉｚｅ」の値を、ＭｅｄｉａＩｎｆｏデータ構造３３３３のメンバ「ｓｉｚｅ」３３３６に割り当てる。
２．ｍｐ４ファイルから３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＳｉｚｅ」に割り当てる動作４０１０。次に、ｍｐ４ファイルから第２の３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＩｄ」に割り当てる。
３．量「ａｔｏｍＩｄ」の値を値「ｄｉｎｆ」と比較する動作４０２０。
４．量「ａｔｏｍＩｄ」の値が「ｄｉｎｆ」に対応する場合に、手順「ｍｅｄｉａ  ｄａｔａ  ｉｎｆｏ（ｄｉｎｆ）アトムの処理」を実行する動作４０２５。その後、動作４０８０で継続する。
５．量「ａｔｏｍＩｄ」の値を値「ｓｔｂｌ」と比較する動作４０３０。
６．量「ａｔｏｍＩｄ」の値が「ｓｔｂｌ」に対応する場合に、手順「サンプル・テーブル・アトムの処理」を実行する動作４０３５。その後、動作４０８０で継続する。
７．量「ａｔｏｍＩｄ」の値を値「ｎｍｈｄ」と比較する動作４０４０。
８．量「ａｔｏｍＩｄ」の値が「ｎｍｈｄ」に対応する場合に、手順「ｍｐｅｇ４メディア・ヘッダ・アトムの処理」を実行する動作４０４５。その後、動作４０８０で継続する。
９．量「ａｔｏｍＩｄ」の値を値「ｓｍｈｄ」と比較する動作４０５０。
１０．量「ａｔｏｍＩｄ」の値が「ｓｍｈｄ」に対応する場合に、手順「サウンド・メディア・ヘッダ・アトムの処理」を実行する動作４０５５。その後、動作４０８０で継続する。
１１．量「ａｔｏｍＩｄ」の値を値「ｖｍｈｄ」と比較する動作４０６０。
１２．量「ａｔｏｍＩｄ」の値が「ｖｍｈｄ」に対応する場合に、手順「ビデオ・メディア・ヘッダ・アトムの処理」を実行する動作４０６５。その後、動作４０８０で継続する。
１３．そうでない場合に、ｍｐ４ファイルのａｔｏｍＳｉｚｅ−８バイトをスキップする動作４０７０。すなわち、ｍｐ４ファイルからａｔｏｍＳｉｚｅ−８バイトを読み取り、結果の値を無視する。
１４．ｍｉｎｆアトム９２０の終りに達したかどうかを検査する動作４０８０。ｍｉｎｆアトム９２０の終りに達したという条件は、ｍｉｎｆアトム９２０の先頭以降でｍｐ４ファイルから読み取られたデータ・バイト数が、ＭｅｄｉａＩｎｆｏデータ構造３３３３のメンバ「ｓｉｚｅ」３３３６の値と等しい場合に満足される。
１５．ｍｉｎｆアトム９２０の終りに達している場合にこの手順を終了する動作４０９０。そうでない場合には、動作４０１０から動作４０８０を繰り返す。
【０１８７】
手順「ｍｅｄｉａ  ｄａｔａ  ｉｎｆｏ（ｄｉｎｆ）アトムの処理」は、次の手順からなる。
１．新しいＭｅｄｉａＤａｔａＩｎｆｏ構造３３５０を作成する。
２．この新しいＭｅｄｉａＤａｔａＩｎｆｏ構造３３５０のアドレスを、現在のＭｅｄｉａＩｎｆｏ構造３３３３のメンバ「ＭｅｄｉａＤａｔａＩｎｆｏ」３３３８に割り当てる。
３．量「ａｔｏｍＳｉｚｅ」の値を、ＭｅｄｉａＤａｔａＩｎｆｏ構造３３５０のメンバ「ｓｉｚｅ」３３５３に割り当てる。
４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＭｅｄｉａＤａｔａＩｎｆｏ構造３３５０のメンバ「ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ」３３５６に割り当てる。
５．ｄｉｎｆアトム９２４のデータの終りに達するまで、次のステップを繰り返す。ｄｉｎｆアトム９２４の終りに達したという条件は、ｄｉｎｆアトム９２４の先頭以降でｍｐ４ファイルから読み取られたデータ・バイト数が、ＭｅｄｉａＤａｔａＩｎｆｏ構造３３５０のメンバ「ｓｉｚｅ」の値と等しい場合に満足される。
６．ｍｐ４ファイルから３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＳｉｚｅ」に割り当てる。
７．ｍｐ４ファイルから３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＩｄ」に割り当てる。
８．量「ａｔｏｍＩｄ」の値が「ｄｒｅｆ」に対応する場合に、手順「データ参照テーブル・アトムの処理」を実行する。そうでない場合には、ｍｐ４ファイルのａｔｏｍＳｉｚｅ−８バイトをスキップする。すなわち、ｍｐ４ファイルからａｔｏｍＳｉｚｅ−８バイトを読み取り、結果の値を無視する。
９．ｄｉｎｆアトム９２４の終りに達したかどうかを検査する。ｄｉｎｆアトム９２４の終りに達している場合には、この手順を終了する。そうでない場合には、ステップ２から９を繰り返す。
【０１８８】
手順「データ参照テーブル・アトムの処理」は、次のステップからなる。
１．新しいＤａｔａＲｅｆＴａｂｌｅデータ構造３３６０を作成する。
２．この新しいＤａｔａＲｅｆＴａｂｌｅデータ構造３３６０のアドレスを、現在のＭｅｄｉａＤａｔａＩｎｆｏデータ構造３３５０のメンバＤａｔａＲｅｆＴａｂｌｅ３３５８に割り当てる。
３．量「ａｔｏｍＳｉｚｅ」の値を、ＤａｔａＲｅｆＴａｂｌｅデータ構造３３６０のメンバ「ｓｉｚｅ」３３６３に割り当てる。
４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＤａｔａＲｅｆＴａｂｌｅ構造３３６０のメンバ「ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ」３３６６に割り当てる。
５．ｍｐ４ファイルから３２ビット整数を読み取り、この値を量「ｎｕｍＤａｔａＲｅｆｓ」に割り当てる。
６．量「ｎｕｍＤａｔａＲｅｆｓ」の値を、ＤａｔａＲｅｆＴａｂｌｅ構造３３６０のメンバ「ｎｕｍＤａｔａＲｅｆｓ」３３６８に割り当てる。
７．「ｎｕｍＤａｔａＲｅｆｓ」個の項目を有するアドレスの配列を作成し、この配列のアドレスを、新しいＤａｔａＲｅｆＴａｂｌｅデータ構造３３６０のメンバ「ｄａｔａＲｅｆ配列」３３７０に割り当てる。
８．値０を、量「ｅｎｔｒｙ」に割り当てる。
９．次のステップを、ｎｕｍＤａｔａＲｅｆｓ回（量「ｅｎｔｒｙ」の値が量「ｎｕｍＤａｔａＲｅｆｓ」の値と等しくなるまで）繰り返す。
１０．新しいｄａｔａＲｅｆデータ構造３３８０を作成する。
１１．この新しいｄａｔａＲｅｆデータ構造３３８０のアドレスを、ＤａｔａＲｅｆＴａｂｌｅデータ構造３３６０のｄａｔａＲｅｆ配列メンバ３３７０の項目「ｅｎｔｒｙ」に割り当てる。
１２．ｍｐ４ファイルから３２ビット整数を読み取り、その値を量「ｄｒｅｆＳｉｚｅ」に割り当てる。
１３．量「ｄｒｅｆＳｉｚｅ」の値を、この新しいｄａｔａＲｅｆデータ構造３３８０のメンバ「ｓｉｚｅ」３３８３に割り当てる。
１４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を現在のｄａｔａＲｅｆデータ構造３３８０のメンバ「ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ」３３８６に割り当てる。
１５．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をこの新しいｄａｔａＲｅｆデータ構造３３８０のメンバ「ｄａｔａＲｅｆＴｙｐｅ」３３８８に割り当てる。量「ｔｙｐｅ」の値は、４つのテキスト文字のシーケンスとして解釈することができる。
１６．（ｄｒｅｆＳｉｚｅ−１２）バイトの配列を作成し、この配列のアドレスを、現在のｄａｔａＲｅｆデータ構造３３８０のメンバ「ｄａｔａＲｅｆＤａｔａ」３３９０に割り当てる。
１７．ｍｐ４ファイルから（ｄｒｅｆＳｉｚｅ−１２）バイトのシーケンスを読み取り、これらを、配列「ｄａｔａＲｅｆＤａｔａ」３３９０の連続する項目にコピーする。
１８．量「ｅｎｔｒｙ」の値を１つ増分する。
【０１８９】
手順「ｍｐｅｇ４メディア・ヘッダ・アトムの処理」は、次のステップからなる。
１．新しいＭｐｅｇ４ＭｅｄｉａＨｅａｄｅｒデータ構造を作成する。Ｍｐｅｇ４ＭｅｄｉａＨｅａｄｅｒデータ構造に、メンバ「ｓｉｚｅ」および「ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ」が含まれる。
２．この新しいＭｐｅｇ４ＭｅｄｉａＨｅａｄｅｒデータ構造のアドレスを、現在のＭｅｄｉａＩｎｆｏデータ構造３３３３のメンバＭｅｄｉａＩｎｆｏＨｅａｄｅｒ  ３３４３に割り当てる。
３．量「ａｔｏｍＳｉｚｅ」の値を、この新しいＭｐｅｇ４ＭｅｄｉａＨｅａｄｅｒデータ構造のメンバ「ｓｉｚｅ」に割り当てる。
４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をこの新しいＭｐｅｇ４ＭｅｄｉａＨｅａｄｅｒデータ構造のメンバ「ｖｅｒＦｌａｇｓ」に割り当てる。
５．ｍｐｅｇ４  ｍｅｄｉａ  ｈｅａｄｅｒ（ｎｍｈｄ）アトム９３６に含まれるすべての残りのデータをスキップする（ａｔｏｍＳｉｚｅが１２を超える場合に）。
【０１９０】
手順「サウンド・メディア・ヘッダ・アトムの処理」は、次のステップからなる。
１．新しいＳｏｕｎｄＭｅｄｉａＨｅａｄｅｒデータ構造を作成する。ＳｏｕｎｄＭｅｄｉａＨｅａｄｅｒデータ構造に、メンバ「ｓｉｚｅ」、「ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ」、および「ｂａｌａｎｃｅ」が含まれる。
２．この新しいＳｏｕｎｄＭｅｄｉａＨｅａｄｅｒデータ構造のアドレスを、現在のＭｅｄｉａＩｎｆｏデータ構造３３３３のメンバＭｅｄｉａＩｎｆｏＨｅａｄｅｒ  ３３４３に割り当てる。
３．量「ａｔｏｍＳｉｚｅ」の値を、この新しいＳｏｕｎｄＭｅｄｉａＨｅａｄｅｒデータ構造のメンバ「ｓｉｚｅ」に割り当てる。
４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいＳｏｕｎｄＭｅｄｉａＨｅａｄｅｒ構造のメンバ「ｖｅｒｓｉｏｎ  ＆  Ｆｌａｇｓ」に割り当てる。
５．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいＳｏｕｎｄＭｅｄｉａＨｅａｄｅｒデータ構造のメンバ「ｂａｌａｎｃｅ」に割り当てる。
６．ｓｏｕｎｄ  ｍｅｄｉａ  ｈｅａｄｅｒ（ｓｍｈｄ）アトム９３６に含まれる残りのすべてのデータをスキップする（ａｔｏｍＳｉｚｅが１６を超える場合に）。
【０１９１】
手順「ビデオ・メディア・ヘッダ・アトムの処理」は、次のステップからなる。
１．新しいＶｉｄｅｏＭｅｄｉａＨｅａｄｅｒデータ構造を作成する。ＶｉｄｅｏＭｅｄｉａＨｅａｄｅｒデータ構造に、メンバ「ｓｉｚｅ」、「ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ」、「ｍｏｄｅ」、「ｏｐＲｅｄ」、「ｏｐＧｒｅｅｎ」、および「ｏｐＢｌｕｅ」が含まれる。
２．この新しいＶｉｄｅｏＭｅｄｉａＨｅａｄｅｒデータ構造のアドレスを、現在のＭｅｄｉａＩｎｆｏデータ構造３３３３のメンバＭｅｄｉａＩｎｆｏＨｅａｄｅｒ  ３３４３に割り当てる。
３．ａｔｏｍＳｉｚｅの値を、この新しいＶｉｄｅｏＭｅｄｉａＨｅａｄｅｒデータ構造のメンバ「ｓｉｚｅ」に割り当てる。
４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいＶｉｄｅｏＭｅｄｉａＨｅａｄｅｒ構造のメンバ「ｖｅｒｓｉｏｎ  ＆  Ｆｌａｇｓ」に割り当てる。
５．ｍｐ４ファイルから１６ビット整数を読み取り、その結果を新しいＶｉｄｅｏＭｅｄｉａＨｅａｄｅｒ構造のメンバ「ｍｏｄｅ」に割り当てる。
６．ｍｐ４ファイルから１６ビット整数を読み取り、その結果を現在のＶｉｄｅｏＭｅｄｉａＨｅａｄｅｒ構造のメンバ「ｏｐＲｅｄ」に割り当てる。
７．ｍｐ４ファイルから１６ビット整数を読み取り、その結果を現在のＶｉｄｅｏＭｅｄｉａＨｅａｄｅｒ構造のメンバ「ｏｐＧｒｅｅｎ」に割り当てる。
８．ｍｐ４ファイルから１６ビット整数を読み取り、その結果を現在のＶｉｄｅｏＭｅｄｉａＨｅａｄｅｒ構造のメンバ「ｏｐＢｌｕｅ」に割り当てる。
９．ｖｉｄｅｏ  ｍｅｄｉａ  ｈｅａｄｅｒ（ｖｍｈｄ）アトム９３６に含まれる残りのすべてのデータをスキップする（ａｔｏｍＳｉｚｅが２０を超える場合に）。
【０１９２】
図１１０からわかるように、手順「サンプル・テーブル・アトムの処理」は、次のステップからなる。
１．新しいＳａｍｐｌｅＴａｂｌｅｓデータ構造３４００を作成する動作４１００。この新しいＳａｍｐｌｅＴａｂｌｅｓデータ構造３４００のアドレスを、現在のＭｅｄｉａＩｎｆｏデータ構造３３３３のメンバＳａｍｐｌｅＴａｂｌｅｓ  ３３４０に割り当てる。「ａｔｏｍＳｉｚｅ」の値を、この新しいＳａｍｐｌｅＴａｂｌｅｓデータ構造３４００のメンバ「ｓｉｚｅ」３４０３に割り当てる。
２．ｍｐ４ファイルから３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＳｉｚｅ」に割り当てる動作４１１０。その後、ｍｐ４ファイルから第２の３２ビット整数を読み取り、この整数の値を量「ａｔｏｍＩｄ」に割り当てる。
３．量「ａｔｏｍＩｄ」の値を値「ｓｔｓｃ」と比較する動作４１２０。
４．量「ａｔｏｍＩｄ」の値が「ｓｔｓｃ」に対応する場合に、手順「ｓａｍｐｌｅ  ｔｏ  ｃｈｕｎｋ  ｔａｂｌｅ（ｓｔｓｃ）アトムの処理」を実行する動作４１２５。その後、動作４１９０で継続する。
５．量「ａｔｏｍＩｄ」の値を値「ｓｔｃｏ」と比較する動作４１３０。
６．量「ａｔｏｍＩｄ」の値が「ｓｔｃｏ」に対応する場合に、手順「ｃｈｕｎｋ  ｏｆｆｓｅｔ  ｔａｂｌｅ（ｓｔｃｏ）アトムの処理」を実行する動作４１３５。その後、動作４１９０で継続する。
７．量「ａｔｏｍＩｄ」の値を値「ｓｔｔｓ」と比較する動作４１４０。
８．量「ａｔｏｍＩｄ」の値が「ｓｔｔｓ」に対応する場合に、手順「ｔｉｍｅ  ｔｏ  ｓａｍｐｌｅ  ｔａｂｌｅ（ｓｔｔｓ）アトムの処理」を実行する動作４１４５。その後、動作４１９０で継続する。
９．量「ａｔｏｍＩｄ」の値を値「ｓｔｓｚ」と比較する動作４１５０。
１０．量「ａｔｏｍＩｄ」の値が「ｓｔｓｚ」に対応する場合に、手順「ｓａｍｐｌｅ  ｓｉｚｅ  ｔａｂｌｅ（ｓｔｓｚ）アトムの処理」を実行する動作４１５５。その後、動作４１９０で継続する。
１１．量「ａｔｏｍＩｄ」の値を値「ｓｔｓｓ」と比較する動作４１６０。
１２．量「ａｔｏｍＩｄ」の値が「ｓｔｓｓ」に対応する場合に、手順「ｓｙｎｃ  ｓａｍｐｌｅ  ｔａｂｌｅ（ｓｔｓｓ）アトムの処理」を実行する動作４１６５。その後、動作４１９０で継続する。
１３．量「ａｔｏｍＩｄ」の値を値「ｓｔｓｄ」と比較する動作４１７０。
１４．量「ａｔｏｍＩｄ」の値が「ｓｔｓｄ」に対応する場合に、手順「ｓａｍｐｌｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｔａｂｌｅ（ｓｔｓｄ）アトムの処理」を実行する動作４１７５。その後、動作４１９０で継続する。
１５．そうでない場合に、ｍｐ４ファイルでａｔｏｍＳｉｚｅ−８バイトをスキップする動作４１８０。すなわち、ｍｐ４ファイルからａｔｏｍＳｉｚｅ−８バイトを読み取り、結果の値を無視する。
１６．ｓｔｂｌアトム９５０の終りに達したかどうかを検査する動作４１９０。ｓｔｂｌアトム９５０の終りに達したという条件は、ｓｔｂｌアトム９５０の先頭以降でｍｐ４ファイルから読み取られたデータ・バイト数が、ＳａｍｐｌｅＴａｂｌｅｓデータ構造３４００のメンバ「ｓｉｚｅ」３４０３の値と等しい場合に満足される。
１７．ｓｔｂｌアトム９５０の終りに達した場合に、この手順を終了する動作４１９５。そうでない場合には、動作４１１０から動作４１９０を繰り返す。
【０１９３】
手順「ｓａｍｐｌｅ  ｔｏ  ｃｈｕｎｋ  ｔａｂｌｅ（ｓｔｓｃ）アトムの処理」は、次のステップからなる。
１．新しいサンプル・テーブル・データ構造３４２０を作成する。
２．この新しいサンプル・テーブル・データ構造３４２０のアドレスを、現在のＳａｍｐｌｅＴａｂｌｅｓデータ構造３４００のメンバＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅ  ３４０６に割り当てる。
３．量「ａｔｏｍＳｉｚｅ」の値を、新しいサンプル・テーブル・データ構造３４２０のメンバ「ｓｉｚｅ」３４２３に割り当てる。
４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造３４２０のメンバ「ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ」３４２６に割り当てる。
５．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造３４２０のメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４２８に割り当てる。
６．ｎｕｍＥｎｔｒｉｅｓ個の項目を有するアドレスの配列を作成し、この配列のアドレスを、新しいサンプル・テーブル・データ構造３４２０のメンバ「ｔａｂｌｅ配列」３４３０に割り当てる。
７．値０を、量「ｅｎｔｒｙ」に割り当てる。
８．次のステップを、ｎｕｍＥｎｔｒｉｅｓ回（量「ｅｎｔｒｙ」の値がメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４２８の値と等しくなるまで）繰り返す。
９．新しいＳａｍｐｌｅＴｏＣｈｕｎｋデータ構造３４６０を作成する。
１０．この新しいＳａｍｐｌｅＴｏＣｈｕｎｋデータ構造３４６０のアドレスを、新しいサンプル・テーブル・データ構造３４２０のメンバ「ｔａｂｌｅ配列」３４３０の項目「ｅｎｔｒｙ」に割り当てる。
１１．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいＳａｍｐｌｅＴｏＣｈｕｎｋデータ構造３４６０のメンバ「ｆｉｒｓｔＣｈｕｎｋ」３４６３に割り当てる。
１２．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいＳａｍｐｌｅＴｏＣｈｕｎｋデータ構造３４６０のメンバ「ｎｕｍＳａｍｐｌｅｓ」３４６６に割り当てる。
１３．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＳａｍｐｌｅＴｏＣｈｕｎｋデータ構造３４６０のメンバ「ｄｅｓｃｒｉｐｔｉｏｎ」３４６８に割り当てる。
１４．量「ｅｎｔｒｙ」の値を１つ増分する。
【０１９４】
手順「ｃｈｕｎｋ  ｏｆｆｓｅｔ  ｔａｂｌｅ（ｓｔｃｏ）アトムの処理」は、次のステップからなる。
１．新しいサンプル・テーブル・データ構造３４２０を作成する。
２．この新しいサンプル・テーブル・データ構造３４２０のアドレスを、現在のＳａｍｐｌｅＴａｂｌｅｓデータ構造３４００のメンバＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅ  ３４０８に割り当てる。
３．量「ａｔｏｍＳｉｚｅ」の値を、新しいサンプル・テーブル・データ構造３４２０のメンバ「ｓｉｚｅ」３４２３に割り当てる。
４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造３４２０のメンバ「ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ」３４２６に割り当てる。
５．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造３４２０のメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４２８に割り当てる。
６．ｎｕｍＥｎｔｒｉｅｓ個の項目を有する整数の配列を作成し、この配列のアドレスを、新しいサンプル・テーブル・データ構造３４２０のメンバ「ｔａｂｌｅ配列」３４３０に割り当てる。
７．値０を、量「ｅｎｔｒｙ」に割り当てる。
８．次のステップを、ｎｕｍＥｎｔｒｉｅｓ回（量「ｅｎｔｒｙ」の値がメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４２８の値と等しくなるまで）繰り返す。
９．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造３４２０の配列「ｔａｂｌｅ配列」３４３０の項目「ｅｎｔｒｙ」に割り当てる。
１０．量「ｅｎｔｒｙ」の値を１つ増分する。
【０１９５】
手順「ｔｉｍｅ  ｔｏ  ｓａｍｐｌｅ  ｔａｂｌｅ（ｓｔｔｓ）アトムの処理」は、次のステップからなる。
１．新しいサンプル・テーブル・データ構造３４２０を作成する。
２．この新しいサンプル・テーブル・データ構造３４２０のアドレスを、現在のＳａｍｐｌｅＴａｂｌｅｓデータ構造３４００のメンバＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅ  ３４１０に割り当てる。
３．量「ａｔｏｍＳｉｚｅ」の値を、新しいサンプル・テーブル・データ構造３４２０のメンバ「ｓｉｚｅ」３４２３に割り当てる。
４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造３４２０のメンバ「ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ」３４２６に割り当てる。
５．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造３４２０のメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４２８に割り当てる。
６．ｎｕｍＥｎｔｒｉｅｓ個の項目を有する整数の配列を作成し、この配列のアドレスを、新しいサンプル・テーブル・データ構造３４２０のメンバ「ｔａｂｌｅ配列」３４３０に割り当てる。
７．値０を、量「ｅｎｔｒｙ」に割り当てる。
８．次のステップを、ｎｕｍＥｎｔｒｉｅｓ回（量「ｅｎｔｒｙ」の値がメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４２８の値と等しくなるまで）繰り返す。
９．新しいＴｉｍｅＴｏＳａｍｐｌｅデータ構造３４７０を作成する。
１０．この新しいＴｉｍｅＴｏＳａｍｐｌｅデータ構造３４７０のアドレスを、サンプル・テーブル・データ構造３４２０のメンバ「ｔａｂｌｅ配列」３４３０の項目「ｅｎｔｒｙ」に割り当てる。
１１．新しいＴｉｍｅＴｏＳａｍｐｌｅデータ構造３４７０を作成する。
１２．この新しいＴｉｍｅＴｏＳａｍｐｌｅデータ構造３４７０のアドレスを、サンプル・テーブル・データ構造３４２０の配列「ｔａｂｌｅ配列」３４３０の項目「ｅｎｔｒｙ」に割り当てる。
１３．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいＴｉｍｅＴｏＳａｍｐｌｅデータ構造３４７０のメンバ「ｃｏｕｎｔ」３４７３に割り当てる。
１４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいＴｉｍｅＴｏＳａｍｐｌｅデータ構造３４７０のメンバ「ｄｕｒａｔｉｏｎ」３４７６に割り当てる。
１５．量「ｅｎｔｒｙ」の値を１つ増分する。
【０１９６】
手順「ｓａｍｐｌｅ  ｓｉｚｅ  ｔａｂｌｅ（ｓｔｓｚ）アトムの処理」は、次のステップからなる。
１．新しいＳａｍｐｌｅＳｉｚｅＴａｂｌｅデータ構造３４４０を作成する。
２．この新しいＳａｍｐｌｅＳｉｚｅＴａｂｌｅデータ構造３４２０のアドレスを、現在のＳａｍｐｌｅＴａｂｌｅｓデータ構造３４００のメンバＳａｍｐｌｅＳｉｚｅＴａｂｌｅ  ３４１３に割り当てる。
３．量「ａｔｏｍＳｉｚｅ」の値を、新しいＳａｍｐｌｅＳｉｚｅＴａｂｌｅデータ構造３４４０のメンバ「ｓｉｚｅ」３４４３に割り当てる。
４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいＳａｍｐｌｅＳｉｚｅＴａｂｌｅデータ構造３４４０のメンバ「ｖｅｒｓｉｏｎ  ＆  Ｆｌａｇｓ」３４４６に割り当てる。
５．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいＳａｍｐｌｅＳｉｚｅＴａｂｌｅデータ構造３４４０のメンバ「ｓａｍｐｌｅＳｉｚｅ」３４５０に割り当てる。新しいＳａｍｐｌｅＳｉｚｅＴａｂｌｅデータ構造３４４０のメンバｓａｍｐｌｅＳｉｚｅ  ３４５０の値が０である場合には、次のステップを実行し、そうでない場合には、値０を、新しいＳａｍｐｌｅＳｉｚｅＴａｂｌｅデータ構造３４４０のメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４５３および「ｔａｂｌｅ配列」３４５６に割り当てる。
６．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいＳａｍｐｌｅＳｉｚｅＴａｂｌｅデータ構造３４４０のメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４５３に割り当てる。
７．ｎｕｍＥｎｔｒｉｅｓ個の項目を有する整数の配列を作成し、この配列のアドレスを、新しいＳａｍｐｌｅＳｉｚｅＴａｂｌｅデータ構造３４４０のメンバ「ｔａｂｌｅ配列」３４５６に割り当てる。
８．値０を、量「ｅｎｔｒｙ」に割り当てる。
９．次のステップを、ｎｕｍＥｎｔｒｉｅｓ回（量「ｅｎｔｒｙ」の値がメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４５３の値と等しくなるまで）繰り返す。
１０．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＳａｍｐｌｅＳｉｚｅＴａｂｌｅデータ構造３４４０のメンバ「ｔａｂｌｅ配列」３４５６の項目「ｅｎｔｒｙ」に割り当てる。
１１．量「ｅｎｔｒｙ」の値を１つ増分する。
【０１９７】
手順「ｓｙｎｃ  ｓａｍｐｌｅ  ｔａｂｌｅ（ｓｔｓｓ）アトムの処理」は、次のステップからなる。
１．新しいサンプル・テーブル・データ構造３４２０を作成する。
２．この新しいサンプル・テーブル・データ構造３４２０のアドレスを、現在のＳａｍｐｌｅＴａｂｌｅｓデータ構造３４００のメンバＳｙｎｃＳａｍｐｌｅＴａｂｌｅ  ３４１６に割り当てる。
３．量「ａｔｏｍＳｉｚｅ」の値を、新しいサンプル・テーブル・データ構造３４２０のメンバ「ｓｉｚｅ」３４２３に割り当てる。
４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造３４２０のメンバ「ｖｅｒｓｉｏｎ  ＆  Ｆｌａｇｓ」３４２６に割り当てる。
５．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造３４２０のメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４２８に割り当てる。
６．ｎｕｍＥｎｔｒｉｅｓ個の項目を有する整数の配列を作成し、この配列のアドレスを、新しいサンプル・テーブル・データ構造３４２０のメンバ「ｔａｂｌｅ配列」３４３０に割り当てる。
７．値０を、量「ｅｎｔｒｙ」に割り当てる。
８．次のステップを、ｎｕｍＥｎｔｒｉｅｓ回（量「ｅｎｔｒｙ」の値がメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４２８の値と等しくなるまで）繰り返す。
９．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造３４２０の配列「ｔａｂｌｅ配列」３４３０の項目「ｅｎｔｒｙ」に割り当てる。
１０．項目「ｅｎｔｒｙ」の値を１つ増分する。
【０１９８】
手順「ｓａｍｐｌｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｔａｂｌｅ（ｓｔｓｄ）アトム」は、次のステップからなる。
１．新しいサンプル・テーブル・データ構造３４２０を作成する。
２．この新しいサンプル・テーブル・データ構造３４４０のアドレスを、現在のＳａｍｐｌｅＴａｂｌｅｓデータ構造３４００のメンバＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎＴａｂｌｅ  ３４１８に割り当てる。
３．量「ａｔｏｍＳｉｚｅ」の値を、新しいサンプル・テーブル・データ構造３４２０のメンバ「ｓｉｚｅ」３４２３に割り当てる。
４．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造３４２０のメンバ「ｖｅｒｓｉｏｎ  ＆  Ｆｌａｇｓ」３４２６に割り当てる。
５．ｍｐ４ファイルから３２ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造３４２０のメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４２８に割り当てる。
６．ｎｕｍＥｎｔｒｉｅｓ個の項目を有する整数の配列を作成し、この配列のアドレスを、新しいサンプル・テーブル・データ構造３４２０のメンバ「ｔａｂｌｅ配列」３４３０に割り当てる。
７．値０を、量「ｅｎｔｒｙ」に割り当てる。
８．次のステップを、ｎｕｍＥｎｔｒｉｅｓ回（量「ｅｎｔｒｙ」の値がメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４２８の値と等しくなるまで）繰り返す。
９．新しいＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎデータ構造３４８０を作成する。
１０．この新しいＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎデータ構造３４８０のアドレスを、新しいサンプル・テーブル・データ構造３４２０のメンバ「ｔａｂｌｅ配列」３４３０の項目「ｅｎｔｒｙ」に割り当てる。
１１．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎデータ構造３４８０のメンバ「ｓｉｚｅ」３４８３に割り当てる。
１２．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎデータ構造３４８０のメンバ「ｄａｔａＦｏｒｍａｔ」３４８６に割り当てる。メンバ「ｄａｔａＦｏｒｍａｔ」の値は、４文字シーケンス、「ｍｐ４ａ」、「ｍｐ４ｖ」、および「ｍｐ４ｓ」の１つを表す可能性がある。
１３．ｍｐ４ファイルから６バイトを読み取り、結果の値を無視する。
１４．ｍｐ４ファイルから１６ビット整数を読み取り、その結果をＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎデータ構造３４８０のメンバ「ｄａｔａＲｅｆｅｒｅｎｃｅ」３４８８に割り当てる。
１５．量「ｄａｔａＦｏｒｍａｔ」の値が、ストリング「ｍｐ４ａ」に対応する場合に、ｍｐ４ファイルから２０バイトを読み取り、結果の値を無視する。
１６．量「ｄａｔａＦｏｒｍａｔ」の値が、ストリング「ｍｐ４ｖ」に対応する場合に、ｍｐ４ファイルから７０バイトを読み取り、結果の値を無視する。
１７．ｍｐ４ファイルから３２ビット整数を読み取り、結果を量「ａｔｏｍＳｉｚｅ」に割り当てる。
１８．ｍｐ４ファイルから３２ビット整数を読み取り、結果を量「ａｔｏｍＩｄ」に割り当てる。
１９．量「ａｔｏｍＩｄ」の値が「ｅｓｄｓ」に対応する場合に、手順「ｅｓｄｓアトムの処理」を実行する。そうでない場合に、ｍｐ４ファイルから（ａｔｏｍＳｉｚｅ−８）バイトを読み取り、この値を無視する。
【０１９９】
手順「ｅｓｄｓアトムの処理」は、次のステップからなる。
１．ｍｐ４ファイルから３２ビット整数を読み取り、その結果をＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎデータ構造３４８０のメンバ「ｅｓｄＶｅｒｓｉｏｎ」３４９０に割り当てる。
２．量「ａｔｏｍＳｉｚｅ」の値から１２を引き、その結果を現在のＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎデータ構造３４８０のメンバ「ｅｓｄＳｉｚｅ」３４９３に割り当てる。
３．ｅｓｄＳｉｚｅ  ３４９３個の項目を有するバイトの新しい配列を作成し、この配列のアドレスを、現在のＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎデータ構造３４８０のメンバ「ｅｓｄＤａｔａ」３４９６に割り当てる。
４．ｍｐ４ファイルからｅｓｄＳｉｚｅ  ３４９３個のバイトのシーケンスを読み取り、これらの値を、配列「ｅｓｄＤａｔａ」３４９６の連続する項目にコピーする。
【０２００】
ＱｔＩｎｆｏデータ構造に基づく中間ｘｍｌ文書およびメディア・データ・ファイルの作成
ｍｐ４バイナリ・ファイル７００および２２１０に基づくＱｔＩｎｆｏデータ構造３１００の作成の後に、ＱｔＩｎｆｏデータ構造３１００を使用して、メディア・データ・ファイル２２３０の組ならびに中間ｘｍｌ文書２２５０および２２６０の対を作成する。これらのｘｍｌ文書に、「ｍｐ４ｆｉｌｅ」文書２２５０および２３００と、「ｍｐ４ｂｉｆｓ」文書２２６０および２８００が含まれる。ｍｐ４ｆｉｌｅ文書２２５０および２３００の構造を、図２３から２７に示す。ｍｐ４ｂｉｆｓ文書２２６０および２８００の構造を、図２８から３０に示す。
【０２０１】
この処理は、次の２つのステップに分割される。
１．ＱｔＩｎｆｏデータ構造３１００内で表された（３１１３、３１６０）ｍｅｄｉａ  ｄａｔａ（ｍｄａｔ）アトム７０６のｘｍｌ表現２３１０を形成し、関連するメディア・データ３１６８をｘｍｌ文書またはバイナリ・メディア・データ・ファイル２２３０に保管する。
２．ＱｔＩｎｆｏデータ構造３１００で表されたｍｏｏｖアトム７１２のｘｍｌ表現２３２０を形成する。
【０２０２】
これらのステップのそれぞれを、下で説明する。
【０２０３】
ステップ１．ＱｔＩｎｆｏデータ構造内で表されたｍｅｄｉａ  ｄａｔａアトムのｘｍｌ表現を形成し、関連するメディア・データをｘｍｌ文書またはバイナリ・メディア・データ・ファイルに保管する
このステップでは、ＱｔＩｎｆｏデータ構造３１００で表された各ｍｄａｔアトム７０６を、ｍｐ４ｆｉｌｅ文書２３００内のｍｄａｔ要素２３１０によって表す。オーディオ・ストリームまたはビジュアル・ストリーム（存在する場合に）に関連するメディア・データ３１６８は、新しいバイナリ・メディア・データ・ファイル２２３０に転送される。ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ（ｓｄｓｍまたはＢＩＦＳ）に関連するメディア・データ３１６８は、ｍｐ４ｂｉｆｓ文書２２６０および２８００の形で表される。ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ（存在する場合に）に関連するメディア・データ３１６８は、ｍｐ４ｆｉｌｅ文書２３００内のｘｍｌ形式２５００で表される。
【０２０４】
図１１１からわかるように、このステップは、次の手順を用いて達成される。
１．動作４２００で、値０を、量「ｉＭｄａｔ」、「ｎｕｍＶｉｓｕａｌ」、および「ｎｕｍＡｕｄｉｏ」に割り当てる。
２．動作４２１０で、量「ｉＭｄａｔ」の値を、ＱｔＩｎｆｏ構造３１００のメンバ「ｎｕｍＭｄａｔＡｔｏｍｓ」３１１０の値と比較する。
３．量「ｉＭｄａｔ」の値が、メンバ「ｎｕｍＭｄａｔＡｔｏｍｓ」の値と等しい場合に、動作４２２０で、このステップを終了する。そうでない場合には、下の手順で継続する。
４．動作４２３０で、ＱｔＩｎｆｏ構造３１００のメンバ「ｍｄａｔ配列」３１１３の項目「ｉＭｄａｔ」の値を、ｍｄａｔデータ構造３１６０のアドレスを表す量「ｍｄａｔＡｔｏｍ」に割り当てる。
５．動作４２４０で、ｍｄａｔデータ構造「ｍｄａｔＡｔｏｍ」３１６０のメンバ「ｓｔａｒｔ」３１６６の値を、量「ｍｄａｔＳｔａｒｔ」に割り当てる。
６．動作４２５０で、ｍｄａｔＡｔｏｍメンバ「ｓｉｚｅ」３１６３の値と量「ｍｄａｔＳｔａｒｔ」の値の合計を、量「ｎｅｘｔＭｄａｔ」に割り当てる。
７．動作４２６０で、新しい「ｍｄａｔ」要素２３１０を作成し、ｍｐ４ｆｉｌｅ文書２３００のトップ・レベル要素に付加する。量「ｉＭｄａｔ」の値を、新しいｍｄａｔ要素の属性「ｍｄａｔＩＤ」に割り当て、量「ｍｄａｔＳｉｚｅ」の値を新しいｍｄａｔ要素の属性「ｓｉｚｅ」に割り当て、ｍｄａｔデータ構造「ｍｄａｔＡｔｏｍ」のメンバ「ＭｅｄｉａＤａｔａ」の値を、量「ｍｅｄｉａＤａｔａ」に割り当てる。
８．動作４２７０で、手順「メディア・データの処理」を実行する。
９．動作４２８０で、量「ｉＭｄａｔ」の値を１つ増分し、動作４２１０を繰り返す。
【０２０５】
手順「メディア・データの処理」
手順「メディア・データの処理」４２７０は、図１１２に示されているように、次のステップからなる。
１．値０を、量「ｉＴｒａｃｋ」に割り当てる動作４３００。
２．量「ｉＴｒａｃｋ」の値をＱｔＩｎｆｏ構造３１００のメンバ「ｎｕｍＴｒａｃｋｓ」３１１８と比較する動作４３１０。
３．量「ｉＴｒａｃｋ」の値がＱｔＩｎｆｏ構造３１００のメンバ「ｎｕｍＴｒａｃｋｓ」３１１８の値と等しい場合に、この処理を終了する動作４３１５。
４．ＱｔＩｎｆｏ構造３１００のメンバ「ｔｒａｋ配列」３１２０の項目「ｉＴｒａｃｋ」の値をｔｒａｋデータ構造３２００のアドレス「ｔｒａｋＡｔｏｍ」に割り当てる動作４３２０。データ構造「ｔｒａｋＡｔｏｍ」３２００のメンバＴｒａｃｋＭｅｄｉａ  ３２０６のメンバＭｅｄｉａＩｎｆｏ  ３２３４のメンバＳａｍｐｌｅＴａｂｌｅｓ  ３３４０のメンバＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅ  ３４０８のメンバ「ｔａｂｌｅ配列」３４３０によって指定される整数の配列の最初の項目（項目０）の値を、量「ｃｈｕｎｋＯｆｆｓｅｔ」に割り当てる。
５．量「ｃｈｕｎｋＯｆｆｓｅｔ」の値が０より大きく、量「ｍｄａｔＳｔａｒｔ」の値以上であり、量「ｎｅｘｔＭｄａｔ」未満である場合に、次のステップを実行する動作４３３０。そうでない場合には、量「ｉＴｒａｃｋ」の値を１つ増分する（動作４３９０）。
６．手順「ストリーム・タイプの発見」を実行する動作４３４０。
７．量「ｓｔｒｅａｍＴｙｐｅ」の値を値「１」と比較する動作４３５０。
８．量「ｓｔｒｅａｍＴｙｐｅ」の値が「１」である場合に、手順「ＯｄｓｍＤａｔａＴｏＸｍｌ」を実行する動作４３５５。
９．量「ｓｔｒｅａｍＴｙｐｅ」の値を値「３」と比較する動作４３６０。
１０．量「ｓｔｒｅａｍＴｙｐｅ」の値が「３」である場合に、手順「ＳｄｓｍＤａｔａＴｏＸｍｌ」を実行する動作４３６５。
１１．量「ｓｔｒｅａｍＴｙｐｅ」の値を値「４」と比較する動作４３７０。
１２．量「ｓｔｒｅａｍＴｙｐｅ」の値が「４」である場合に、手順「ＶｉｓｕａｌＤａｔａＴｏＸｍｌ」を実行し、その後、「ｎｕｍＶｉｓｕａｌ」の値を１つ増分する動作４３７５。
１３．量「ｓｔｒｅａｍＴｙｐｅ」の値を値「５」と比較する動作４３８０。
１４．量「ｓｔｒｅａｍＴｙｐｅ」の値が「５」である場合に、手順「ＡｕｄｉｏＤａｔａＴｏＸｍｌ」を実行し、その後、「ｎｕｍＡｕｄｉｏ」の値を１つ増分する動作４３８５。
１５．量「ｉＴｒａｃｋ」の値を１つ増分する動作４３９０。
【０２０６】
手順「ストリーム・タイプの発見」
手順「ストリーム・タイプの発見」は、図１１３からわかるように、次のステップからなる。
１．データ構造「ｔｒａｋＡｔｏｍ」のメンバＴｒａｃｋＭｅｄｉａ  ３２０６のメンバＭｅｄｉａＩｎｆｏ  ３２３４のメンバＳａｍｐｌｅＴａｂｌｅｓ  ３３４０のメンバＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎＴａｂｌｅ  ３４１８の値を、サンプル・テーブル・データ構造３４２０のアドレスを表す量「ｓｔｓｄＡｔｏｍ」に割り当てる動作４４００。
２．量「ｓｔｓｄＡｔｏｍ」の値によって指定されるサンプル・テーブル・データ構造３４２０のメンバ「ｔａｂｌｅ配列」３４３０の第１項目（項目０）によって指定されるＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎデータ構造３４８０のメンバ「ｅｓｄＤａｔａ」３４９６の値を、バイトの配列を表す量「ｅｓｄＤａｔａ」に割り当てる動作４４１０。
３．量「ｓｔｓｄＡｔｏｍ」の値によって指定されるサンプル・テーブル・データ構造３４２０のメンバ「ｔａｂｌｅ配列」の第１項目（項目０）によって指定されるＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎデータ構造３４８０のメンバ「ｅｓｄＳｉｚｅ」の値を、量「ｅｓｄＳｉｚｅ」に割り当てる動作４４２０。
４．値０を量「ｅｓｄＰｏｓ」に割り当てる動作４４３０。
５．手順「デコーダ構成記述子の発見」を実行する動作４４４０。
６．手順「タグ・サイズの取得」を実行する動作４４５０。
７．配列「ｅｓｄＤａｔａ」の項目「ｅｓｄＰｏｓ」の値を量「ｏｂｊｅｃｔＴｙｐｅ」に割り当てる動作４４６０。
８．量「ｅｓｄＰｏｓ」の値を１つ増分する動作４４７０。
９．配列「ｅｓｄＤａｔａ」の項目「ｅｓｄＰｏｓ」の値を入手し、その結果を２ビット右にシフトし（４で割り）、その結果を量「ｓｔｒｅａｍＴｙｐｅ」に割り当てる動作４４８０。
【０２０７】
量「ｅｓｄＰｏｓ」の値が、ステップ５から１０で量「ｅｓｄＳｉｚｅ」以上である場合に、値０を量「ｓｔｒｅａｍＴｙｐｅ」および「ｏｂｊｅｃｔＴｙｐｅ」に割り当て、この処理を終了する。
【０２０８】
手順「デコーダ構成記述子の発見」
手順「デコーダ構成記述子の発見」は、図１１４からわかるように、次のステップからなる。
１．配列「ｅｓｄＤａｔａ」の項目「ｅｓｄＰｏｓ」の値を量「ｅｓｄＴａｇ」に割り当てる動作４５００。
２．量「ｅｓｄＴａｇ」の値を値「３」と比較する動作４５１０。
３．量「ｅｓｄＴａｇ」の値が「３」でない場合に、量「ｅｓｄＳｉｚｅ」の値を量「ｅｓｄＰｏｓ」に割り当てる動作４５２０と、この手順を終了する動作４５２５。そうでない場合には、次のステップを実行する。
４．量「ｅｓｄＰｏｓ」の値を１つ増分する動作４５３０。
５．手順「タグ・サイズの取得」を実行する動作４５３５。
６．量「ｅｓｄＰｏｓ」の値を「４」だけ増分する動作４５４０。
７．配列「ｅｓｄＤａｔａ」の項目「ｅｓｄＰｏｓ」の値を量「ｅｓｄＴａｇ」に割り当てる動作４５５０。
８．量「ｅｓｄＴａｇ」の値を値「４」と比較する動作４５６０。
９．量「ｅｓｄＴａｇ」の値が「４」でない場合に、量「ｅｓｄＰｏｓ」の値を１つ増分する動作４５６５、手順「タグサイズの取得」を実行する動作４５７０、量「ｔａｇＳｉｚｅ」の値を量「ｅｓｄＰｏｓ」の値に加算する動作４５７５と、その後の動作４５５０の繰り返し。
１０．そうでない場合に、量「ｅｓｄＰｏｓ」の値を１つ増分する動作４５８０。
１１．この手順を終了し、手順「ストリーム・タイプの発見」で継続する動作４５８５。
【０２０９】
手順「タグ・サイズの取得」
手順「タグ・サイズの取得」は、次のステップからなる。
１．値０を量「ｔａｇＳｉｚｅ」に割り当てる動作４６００。
２．配列「ｅｓｄＤａｔａ」の項目「ｅｓｄＰｏｓ」の値を量「ｓｉｚｅＢｙｔｅ」に割り当てる動作４６１０。
３．量「ｓｉｚｅＢｙｔｅ」の値を値１２８と比較する動作４６２０。量「ｓｉｚｅＢｙｔｅ」の値が１２８以上である場合には、次の動作を実行する。
４．量「ｓｉｚｅＢｙｔｅ」の値から１２８を引く（または、量「ｓｉｚｅＢｙｔｅ」の値をこの値の下位７ビットと置換する）動作４６３０。
５．量「ｔａｇＳｉｚｅ」の値に１２８をかける（または、この値を左に７ビットだけシフトする）動作４６４０。
６．量「ｓｉｚｅＢｙｔｅ」の値を量「ｔａｇＳｉｚｅ」の値に加算する動作４６５０。
７．量「ｅｓｄＰｏｓ」の値を値「１」だけ増分する動作４６６０。
８．動作４６１０を繰り返す。量「ｓｉｚｅＢｙｔｅ」が１２８未満の場合に、下の動作を実行する。
９．量「ｔａｇＳｉｚｅ」の値に１２８をかける（左に７ビットだけシフトする）動作４６７０。
１０．量「ｓｉｚｅＢｙｔｅ」の値を量「ｔａｇＳｉｚｅ」の値に加算する動作４６８０。
１１．量「ｅｓｄＰｏｓ」の値を値「１」だけ増分する動作４６９０。
１２．動作４６９５で、この手順が終了し、この手順を呼び出した手順で継続する。
【０２１０】
手順「ＯｄｓｍＤａｔａＴｏＸｍｌ」
手順「ＯｄｓｍＤａｔａＴｏＸｍｌ」４３５５は、ｍｄａｔ構造「ｍｄａｔＡｔｏｍ」に含まれるｏｄｓｍデータ・ストリーム（ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ）のｘｍｌ表現を作成する。図１１６からわかるように、次の動作を使用して、このｏｄｓｍデータ・ストリームのｘｍｌ表現を作成する。
１．動作４７００で、ｍｄａｔ構造「ｍｄａｔＡｔｏｍ」のメンバ「ＭｅｄｉａＤａｔａ」３１６８の値を、バイトの配列のアドレスを表す量「ＯｄｓｍＤａｔａ」に割り当てる。ｍｄａｔ構造「ｍｄａｔＡｔｏｍ」のメンバ「ｓｉｚｅ」３１６３の値を、整数量「ＯｄｓｍＳｉｚｅ」に割り当てる。
２．動作４７０５で、新しい「ｏｄｓｍ」要素２４６０を作成し、現在のｍｄａｔ要素２４００に付加する。ｔｒａｋ構造３２００「ｔｒａｋＡｔｏｍ」に含まれるＴｒａｃｋＨｅａｄｅｒ構造３２１２、３２０４のメンバｔｒａｃｋＩＤ  ３２２４の値を、新しい「ｏｄｓｍ」要素の属性「ｔｒａｃｋＩＤ」に割り当てる。
３．動作４７１０で、ＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅ  ３４０８のサンプル・テーブル構造３４２０のメンバｎｕｍＥｎｔｒｉｅｓ  ３４２８の値を、量「ｎｕｍＣｈｕｎｋｓ」に割り当てる。ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅ  ３４０６のサンプル・テーブル構造３４２０のメンバｎｕｍＥｎｔｒｉｅｓ  ３４２８の値を、量「ｎｕｍＳｔｓｃＥｎｔｒｉｅｓ」に割り当てる。サンプル・テーブル構造ＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅ、ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅなどは、ｔｒａｋ構造３２００「ｔｒａｋＡｔｏｍ」のメンバ「ＴｒａｃｋＭｅｄｉａ」３２０６によって表されるＴｒａｃｋＭｅｄｉａデータ構造３２２６のメンバ「ＭｅｄｉａＩｎｆｏ」３２３４によって表されるＭｅｄｉａＩｎｆｏデータ構造３３３３のメンバ「ＳａｍｐｌｅＴａｂｌｅｓ」３３４０によって表されるＳａｍｐｌｅＴａｂｌｅｓ構造３４００のメンバである。
４．動作４７１５で、値０を量「ｓｔｔｓＩｎｄｅｘ」に割り当てる。ＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅ  ３４１０のサンプル・テーブル構造３４２０に含まれるｔａｂｌｅ配列３４３０の最初の項目の値を、ＴｉｍｅＴｏＳａｍｐｌｅ構造３４７０のアドレスを表す量ｓｔｔｓＥｎｔｒｙに割り当てる。ＴｉｍｅＴｏＳａｍｐｌｅ構造ｓｔｔｓＥｎｔｒｙのメンバ「ｃｏｕｎｔ」の値を、量「ｃｏｕｎｔ」に割り当てる。ＴｉｍｅＴｏＳａｍｐｌｅ構造ｓｔｔｓＥｎｔｒｙのメンバ「ｄｕｒａｔｉｏｎ」の値を、量「ｄｕｒａｔｉｏｎ」に割り当てる。
５．動作４７２０で、値０を量「ｓｔｓｃＩｎｄｅｘ」に割り当てる。ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅ  ３４０６のサンプル・テーブル構造３４２０に含まれるｔａｂｌｅ配列３４３０の最初の項目の値を、ＳａｍｐｌｅＴｏＣｈｕｎｋ構造３４６０のアドレスを表す量ｓｔｓｃＥｎｔｒｙに割り当てる。ＳａｍｐｌｅＴｏＣｈｕｎｋ構造ｓｔｓｃＥｎｔｒｙのメンバ「ｆｉｒｓｔＣｈｕｎｋ」の値から１を引いたものを、整数量「ｆｉｒｓｔＣｈｕｎｋ」に割り当てる。
６．動作４７２５で、値０を整数量「ｔｉｍｅ」、「ｓａｍｐｌｅ」、および「ｃｈｕｎｋ」に割り当てる。
７．動作４７３０で、量「ｃｈｕｎｋ」の値を量「ｎｕｍＣｈｕｎｋｓ」の値と比較する。
８．動作４７３５で、量「ｃｈｕｎｋ」の値が量「ｎｕｍＣｈｕｎｋｓ」の値と等しい場合に、手順「ＯｄｓｍＤａｔａＴｏＸｍｌ」が終了する。
９．動作４７４０で、量「ｃｈｕｎｋ」の値が量「ｎｕｍＣｈｕｎｋｓ」の値と等しくない場合に、ｍｄａｔ構造３１６０  ｍｄａｔＡｔｏｍのメンバ「ｓｔａｒｔ」の値に「８」を加算し、その結果を、ＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅ  ３４０８のサンプル・テーブル構造３４２０に含まれるｔａｂｌｅ配列３４３０の項目「ｃｈｕｎｋ」の値から引き、その結果を整数量「ｏｆｆｓｅｔ」に割り当てる。
１０．動作４７４５で、量「ｃｈｕｎｋ」の値を量「ｆｉｒｓｔＣｈｕｎｋ」の値と比較する。
１１．動作４７５０で、量「ｃｈｕｎｋ」の値が量「ｆｉｒｓｔＣｈｕｎｋ」の値と等しい場合に、ＳａｍｐｌｅＴｏＣｈｕｎｋ構造３４６０  ｓｔｓｃＥｎｔｒｙのメンバ「ｎｕｍＳａｍｐｌｅｓ」３４６６の値を、量「ｎｕｍＳａｍｐｌｅｓ」に割り当てる。量「ｓｔｓｃＩｎｄｅｘ」の値を１つ増分する。量「ｓｔｓｃＩｎｄｅｘ」の値が、量「ｎｕｍＳｔｓｃＥｎｔｒｉｅｓ」の値より小さい場合に、ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅ  ３４０６のサンプル・テーブル構造３４２０に含まれるｔａｂｌｅ配列３４３０の項目「ｓｔｓｃＩｎｄｅｘ」の値を、ＳａｍｐｌｅＴｏＣｈｕｎｋ構造３４６０  ｓｔｓｃＥｎｔｒｙに割り当て、ＳａｍｐｌｅＴｏＣｈｕｎｋ構造ｓｔｓｃＥｎｔｒｙのメンバ「ｆｉｒｓｔＣｈｕｎｋ」の値から１を引いたものを、整数量「ｆｉｒｓｔＣｈｕｎｋ」に割り当てる。そうでない場合に、量「ｎｕｍＣｈｕｎｋｓ」の値を、量「ｆｉｒｓｔＣｈｕｎｋ」に割り当てる。
１２．動作４７５５で、ＳａｍｐｌｅＳｉｚｅＴａｂｌｅ  ３４１３のＳａｍｐｌｅＳｉｚｅＴａｂｌｅ構造３４４０に含まれる整数の配列３４５６の項目「ｓａｍｐｌｅ」から「ｓａｍｐｌｅ＋ｎｕｍＳａｍｐｌｅｓ−１」までを合計することによって、量「ｃｈｕｎｋＳｉｚｅ」の値を決定する。
１３．動作４７６０で、新しい「ｏｄｓｍＣｈｕｎｋ」要素を作成し、動作４７０５で作成された新しい「ｏｄｓｍ」要素に付加する。量「ｏｆｆｓｅｔ」の値を、新しい「ｏｄｓｍＣｈｕｎｋ」要素の属性「ｏｆｆｓｅｔ」に割り当てる。量「ｃｈｕｎｋＳｉｚｅ」の値を、新しい「ｏｄｓｍＣｈｕｎｋ」要素の属性「ｓｉｚｅ」に割り当てる。
１４．動作４７７０で、図１１７に示された手順「ｏｄｓｍチャンクのデコード」を実行する。
１５．動作４７８０で、量「ｃｈｕｎｋ」の値を１つ増分し、動作４７３０を繰り返す。
【０２１１】
手順「ｏｄｓｍチャンクのデコード」
図１１７からわかるように、手順「ｏｄｓｍチャンクのデコード」は、次のステップからなる。
１．量「ｃｈｕｎｋＳｉｚｅ」の値を０と比較する動作４８００。
２．量「ｃｈｕｎｋＳｉｚｅ」の値が０を超えない場合に、手順「ｏｄｓｍチャンクのデコード」を終了し、動作４７８０で手順「ＯｄｓｍＤａｔａＴｏＸｍｌ」を再開する動作４８０５。
３．量「ｃｈｕｎｋＳｉｚｅ」の値が０を超える場合に、ＳａｍｐｌｅＳｉｚｅＴａｂｌｅ  ３４１３のＳａｍｐｌｅＳｉｚｅＴａｂｌｅ構造３４４０のメンバｔａｂｌｅ  ３４５６の項目「ｓａｍｐｌｅ」の値を整数量「ｓａｍｐｌｅＳｉｚｅ」に割り当てる動作４８１０。
４．新しいｏｄｓｍＳａｍｐｌｅ要素を作成し、上の４７６０で作成されたｏｄｓｍＣｈｕｎｋ要素に付加する動作４８２０。量「ｏｆｆｓｅｔ」の値を、新しいｏｄｓｍＳａｍｐｌｅ要素の属性「ｏｆｆｓｅｔ」に割り当てる。量「ｓａｍｐｌｅＳｉｚｅ」の値を、新しいｏｄｓｍＳａｍｐｌｅ要素の属性「ｓｉｚｅ」に割り当てる。量「ｔｉｍｅ」の値を新しいｏｄｓｍＳａｍｐｌｅ要素の属性「ｔｉｍｅ」に割り当てる。
５．量「ｔｉｍｅ」の値を、量「ｄｕｒａｔｉｏｎ」の値だけ増分する動作４８２５。量「ｃｏｕｎｔ」の値を値「１」だけ減分する。
６．量「ｃｏｕｎｔ」の値を０と比較する動作４８３０。
７．量「ｃｏｕｎｔ」の値が０を超えない場合に、量「ｓｔｔｓＩｎｄｅｘ」の値を値「１」だけ増分する動作４８３５。ＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅ  ３４１０のサンプル・テーブル構造３４２０に含まれるｔａｂｌｅ配列３４３０の項目「ｓｔｔｓＩｎｄｅｘ」の値を、ＴｉｍｅＴｏＳａｍｐｌｅ構造３４７０ｓｔｔｓＥｎｔｒｙに割り当てる。ＴｉｍｅＴｏＳａｍｐｌｅ構造ｓｔｔｓＥｎｔｒｙのメンバ「ｃｏｕｎｔ」の値を、量「ｃｏｕｎｔ」に割り当てる。ＴｉｍｅＴｏＳａｍｐｌｅ構造ｓｔｔｓＥｎｔｒｙのメンバ「ｄｕｒａｔｉｏｎ」の値を、量「ｄｕｒａｔｉｏｎ」に割り当てる。
８．量「ｃｈｕｎｋＳｉｚｅ」の値を、量「ｓａｍｐｌｅＳｉｚｅ」の値だけ減分する動作４８４０。
９．量「ｓａｍｐｌｅＳｉｚｅ」の値を０と比較する動作４８４５。
１０．量「ｓａｍｐｌｅＳｉｚｅ」の値が０を超えない場合に、量「ｓａｍｐｌｅ」の値を「１」だけ増分し、動作４８００で処理を継続する動作４８５０。
１１．量「ｓａｍｐｌｅＳｉｚｅ」の値が０を超える場合に、バイトの配列「ＯｄｓｍＤａｔａ」の項目「ｏｆｆｓｅｔ」の値を量「ｔａｇ」に割り当てる動作４８６０。量「ｏｆｆｓｅｔ」の値を値「１」だけ増分し、量「ｓａｍｐｌｅＳｉｚｅ」の値を値「１」だけ減分する。
１２．手順「タグ・サイズの取得」を実行する動作４８６５。これは、
（ａ）バイトの配列ＯｄｓｍＤａｔａが、配列「ｅｓｄＤａｔａ」の代わりに使用され、
（ｂ）量「ｏｆｆｓｅｔ」が、量「ｅｓｄＰｏｓ」の代わりに使用され、
（ｃ）量「ｏｆｆｓｅｔ」（ｅｓｄＰｏｓ）が１つ増分される（動作４６６０、４６９０）たびに、量「ｓａｍｐｌｅＳｉｚｅ」の値が、値「１」だけ減分される
ことを除いて、上で説明した手順「タグ・サイズの取得」と同等である。
１３．量「ｔａｇ」の値を、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義された量「ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅＴａｇ」の値と比較する動作４８７０。
１４．量「ｔａｇ」の値が量「ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅＴａｇ」の値と等しい場合に、手順「ＯｄＵｐｄａｔｅのデコード」を実行する動作４８７５。
１５．そうでない場合に、量「ｔａｇ」の値を、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義された量「ＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅＴａｇ」の値と比較する動作４８８０。
１６．量「ｔａｇ」の値が量「ＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅＴａｇ」の値と等しい場合に、手順「ＯｄＲｅｍｏｖｅのデコード」を実行する動作４８８５。
１７．そうでない場合に、量「ｏｆｆｓｅｔ」の値を量「ｔａｇＳｉｚｅ」の値だけ増分する動作４８９０。
１８．量「ｓａｍｐｌｅＳｉｚｅ」の値を量「ｔａｇＳｉｚｅ」（動作４８６５で決定される）だけ減分する動作４８９５。
１９．処理は、動作４８４５で継続される。
【０２１２】
手順「ＯｄＵｐｄａｔｅのデコード」
ｏｄｓｍコマンドに関する動作４８６０でのコマンド・タグの値が、値「ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅＴａｇ」と等しい場合（動作４８７０、２０００）に、図１１８に示されている、次のステップ４８７５が実行される。
１．動作４９００で、新しいＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ要素２５４０を作成し、現在のｏｄｓｍＳａｍｐｌｅ要素２５２０に付加する。
２．動作４９１０で、手順「タグ・サイズの取得」を使用して、量「ｔａｇＳｉｚｅ」の値（ｎｕｍＢｙｔｅｓ  ２０２０）を入手する。これは、（ａ）バイトの配列ＯｄｓｍＤａｔａが、配列「ｅｓｄＤａｔａ」の代わりに使用され、（ｂ）量「ｏｆｆｓｅｔ」が、量「ｅｓｄＰｏｓ」の代わりに使用されることを除いて、上で説明した手順「タグ・サイズの取得」と同等である。量「ｔａｇＳｉｚｅ」の値を、量「ｒｅｓｉｄｕａｌＳｉｚｅ」に割り当てる。
３．動作４９２０で、量「ｒｅｓｉｄｕａｌＳｉｚｅ」の値を値「１」と比較する。
４．動作４９２５で、量「ｒｅｓｉｄｕａｌＳｉｚｅ」の値が１未満である場合に、この手順が完了する。
５．動作４９３０で、量「ｒｅｓｉｄｕａｌＳｉｚｅ」の値が１未満でない場合に、バイトの配列「ＯｄｓｍＤａｔａ」の項目「ｏｆｆｓｅｔ」の値を、量「ｏｄＴａｇ」に割り当てる。量「ｏｆｆｓｅｔ」の値を「１」だけ増分し、量「ｒｅｓｉｄｕａｌＳｉｚｅ」の値を「１」だけ減分する。
６．動作４９４０で、手順「タグ・サイズの取得」を使用して、量「ｔａｇＳｉｚｅ」（ｎｕｍＢｙｔｅｓ  ２１１６）の値を入手する。これは、（ａ）バイトの配列ＯｄｓｍＤａｔａが、配列「ｅｓｄＤａｔａ」の代わりに使用され、（ｂ）量「ｏｆｆｓｅｔ」が、量「ｅｓｄＰｏｓ」の代わりに使用されることを除いて、上で説明した手順「タグ・サイズの取得」と同等である。量「ｔａｇＳｉｚｅ」の値を、量「ｏｄＳｉｚｅ」に割り当てる。
７．動作４９５０で、量「ｒｅｓｉｄｕａｌＳｉｚｅ」の値を、量「ｏｄＳｉｚｅ」の値だけ減分する。
８．動作４９６０で、量「ｏｄＴａｇ」の値を、ＭＰＥＧ−４  Ｓｙｓｔｅｍ仕様で定義された値「ＭＰ４＿ＯＤ＿Ｔａｇ」と比較する。
９．動作４９６５で、量「ｏｄＴａｇ」の値が、「ＭＰ４＿ＯＤ＿Ｔａｇ」と等しくない場合に、量「ｏｆｆｓｅｔ」の値を、量「ｔａｇＳｉｚｅ」の値だけ増分し、動作４９２０を繰り返す。
１０．動作４９７０で、量「ｏｄＴａｇ」の値が、「ＭＰ４＿ＯＤ＿Ｔａｇ」２１０８と等しい場合に、新しい「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素２５５０を作成し、現在のＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅ要素２５４０に付加する。
１１．動作４９８０で、量「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」２１２４の値を決定し、その結果を新しいＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２５５０の属性「ＯＤＩＤ」に割り当てる。
【０２１３】
量「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」の値は、次の動作によって決定することができる。
（ａ）バイトの配列「ＯｄｓｍＤａｔａ」の項目ｏｆｆｓｅｔの値を整数量「ｔｅｍｐ１」に割り当て、
（ｂ）量「ｏｆｆｓｅｔ」の値を１つ増分し、量「ｏｄＳｉｚｅ」の値を１つ減分し、
（ｃ）バイトの配列「ＯｄｓｍＤａｔａ」の項目ｏｆｆｓｅｔの値を整数量「ｔｅｍｐ２」に割り当て、
（ｄ）量「ｏｆｆｓｅｔ」の値を１つ増分し、量「ｏｄＳｉｚｅ」の値を１つ減分し、
（ｅ）量「ｔｅｍｐ１」の値に４をかけ（左に２ビットだけシフトし）、
（ｆ）量「ｔｅｍｐ２」の値を６４で割り（右に６ビットだけシフトし）、
（ｇ）値「ｔｅｍｐ１」と「ｔｅｍｐ２」の合計を整数量「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」に割り当てる。
１２．動作４９９０で、下で説明する手順「ｄｅｃｏｄｅＥｓＩｄＲｅｆ」を実行する。
【０２１４】
手順「ｄｅｃｏｄｅＥｓＩｄＲｅｆ」
図１１９からわかるように、手順「ｄｅｃｏｄｅＥｓＩｄＲｅｆ」４９９０は、次のステップからなる。
１．動作５０００で、量「ｏｄＳｉｚｅ」の値を値「１」と比較する。
２．動作５０１０で、量「ｏｄＳｉｚｅ」の値が「１」未満である場合に、この手順を終了する。
３．動作５０２０で、バイトの配列「ＯｄｓｍＤａｔａ」の項目「ｏｆｆｓｅｔ」の値を、量「ｅｓｄＴａｇ」に割り当て、量「ｏｆｆｓｅｔ」の値を「１」だけ増分し、量「ｏｄＳｉｚｅ」の値を「１」だけ減分する。
４．動作５０３０で、手順「タグ・サイズの取得」を使用して、量「ｔａｇＳｉｚｅ」（ｎｕｍＢｙｔｅｓ  ２１８０）の値を入手する。これは、（ａ）バイトの配列ＯｄｓｍＤａｔａが、配列「ｅｓｄＤａｔａ」の代わりに使用され、（ｂ）量「ｏｆｆｓｅｔ」が、量「ｅｓｄＰｏｓ」の代わりに使用されることを除いて、上で説明した手順「タグ・サイズの取得」と同等である。量「ｔａｇＳｉｚｅ」の値を、量「ｅｓｄＳｉｚｅ」に割り当てる。
５．動作５０４０で、量「ｏｄＳｉｚｅ」の値を、量「ｅｓｄＳｉｚｅ」の値だけ減分する。
６．動作５０５０で、量「ｅｓｄＴａｇ」の値を、ＭＰＥＧ−４  Ｓｙｓｔｅｍ仕様で定義された値「ＥＳ＿ＩＤ＿ＲｅｆＴａｇ」と比較する。
７．動作５０６０で、量「ｅｓｄＴａｇ」の値が値「ＥＳ＿ＩＤ＿ＲｅｆＴａｇ」と等しくない場合に、量「ｏｆｆｓｅｔ」の値を量「ｅｓｄＳｉｚｅ」の値だけ増分し、動作５０００を繰り返す。
８．動作５０７０で、量「ｅｓｄＴａｇ」の値が値「ＥＳ＿ＩＤ＿ＲｅｆＴａｇ」と等しい場合に、新しい「ＥｓＩｄＲｅｆ」要素２５６０を作成し、これを現在のＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２５５０に付加する。
９．動作５０８０で、量「ＥＳ＿ＩＤ」２１９０の値を決定し、その結果を新しいＥｓＩｄＲｅｆ要素２５６０の属性「ＥｓＩｄ」に割り当てる。
【０２１５】
量「ＥＳ＿ＩＤ」の値は、次の動作によって決定することができる。
（ａ）バイトの配列「ＯｄｓｍＤａｔａ」の項目ｏｆｆｓｅｔの値を整数量「ｔｅｍｐ１」に割り当て、
（ｂ）量「ｏｆｆｓｅｔ」の値を１つ増分し、
（ｃ）バイトの配列「ＯｄｓｍＤａｔａ」の項目ｏｆｆｓｅｔの値を整数量「ｔｅｍｐ２」に割り当て、
（ｄ）量「ｏｆｆｓｅｔ」の値を１つ増分し、
（ｅ）量「ｔｅｍｐ１」の値に２５６をかけ（左に８ビットだけシフトし）、
（ｆ）値「ｔｅｍｐ１」と「ｔｅｍｐ２」の合計を整数量「ＥＳ＿ＩＤ」に割り当てる。
【０２１６】
手順「ＯｄＲｅｍｏｖｅのデコード」
ｏｄｓｍコマンド１９６０のコマンド・タグの値が、値「ＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅＴａｇ」２０５０と等しい場合に、次のステップを実行する４８８５。
１．新しいＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅ要素２５７０を作成し、現在のｏｄｓｍＳａｍｐｌｅ要素２５２０に付加する。
２．手順「タグ・サイズの取得」を使用して、量「ｔａｇＳｉｚｅ」（ｎｕｍＢｙｔｅｓ  ２０６０）を入手する。これは、（ａ）バイトの配列ＯｄｓｍＤａｔａが、配列「ｅｓｄＤａｔａ」の代わりに使用され、（ｂ）量「ｏｆｆｓｅｔ」が、量「ｅｓｄＰｏｓ」の代わりに使用されることを除いて、上で説明した手順「タグ・サイズの取得」と同等である。
３．量「ｔａｇＳｉｚｅ」の値に８をかけ、その結果を１０で割り、その結果を量「ｎｕｍＯｄＩｄｓ」に割り当てる。
４．新しいヌル・ストリング量「ＯｄＩｄＬｉｓｔ」を作成する。
５．バイトの配列「ＯｄｓｍＤａｔａ」を、項目「ｏｆｆｓｅｔ」から始まるビットのシーケンスとして扱う。このビットのシーケンスからｎｕｍＯｄＩｄ個の連続する１０ビット整数値（ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩｄ  ２０７０）を抽出する。
６．これらのｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩｄ値  ２０７０のそれぞれのストリング表現を作成する。連続する値を単一の空白スペース文字で区切って、これらのストリング値のそれぞれを、ストリング量「ＯｄＩｄＬｉｓｔ」に連結する。
７．ストリング量「ＯｄＩｄＬｉｓｔ」の結果の値を、新しいＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅ要素２５７０の属性「ＯＤＩＤ」に割り当てる。
【０２１７】
手順「ＶｉｓｕａｌＤａｔａＴｏＸｍｌ」
手順「ＶｉｓｕａｌＤａｔａＴｏＸｍｌ」４３７５は、ｍｄａｔ構造「ｍｄａｔＡｔｏｍ」に含まれるビジュアル・メディア・データ・ストリームを含むチャンクのｘｍｌ表現を作成する。これらのチャンクに含まれるメディア・データは、外部メディア・データ・ファイルにもコピーされる。図１２０からわかるように、この手順は、次の動作からなる。
【０２１８】
１．動作５１００で、ｍｄａｔ構造「ｍｄａｔＡｔｏｍ」のメンバ「ＭｅｄｉａＤａｔａ」３１６８の値を、バイトの配列のアドレスを表す量「ＭｅｄｉａＤａｔａ」に割り当てる。ｍｄａｔ構造「ｍｄａｔＡｔｏｍ」のメンバ「ｓｉｚｅ」３１６３の値を、整数量「ＭｅｄｉａＳｉｚｅ」に割り当てる。
【０２１９】
２．動作５１０５で、新しい「ｍｅｄｉａＦｉｌｅ」要素２４８０を作成し、現在のｍｄａｔ要素２４００に付加する。そのような「ｍｅｄｉａＦｉｌｅ」要素２４８０のそれぞれは、２つの属性「ｔｒａｃｋＩＤ」および「ｎａｍｅ」を有する。属性「ｎａｍｅ」の値は、このストリームを含むメディア・データ・チャンクを含むメディア・データ・ファイル２２３０の名前を指定する。
ｔｒａｋ構造「ｔｒａｋＡｔｏｍ」に含まれるＴｒａｃｋＨｅａｄｅｒ構造３２１２、３２０４のメンバｔｒａｃｋＩＤ  ３２２４の値を、新しい「ｍｅｄｉａＦｉｌｅ」要素２４８０の属性「ｔｒａｃｋＩＤ」の値に割り当てる。
「ｎａｍｅ」属性の値は、３つの文字のストリングすなわち、ファイル名スタブ、シーケンス番号、およびファイル・タイプ・サフィックスを連結することによって決定される。ファイル名スタブは、入力ｍｐ４ファイルの名前のコピーから、「．」（ドットまたはピリオド）文字の最後の出現とそれ以降の文字を除いたものによって決定することができる。シーケンス番号は、ビジュアル・オブジェクト・シーケンス番号「ｎｕｍＶｉｓｕａｌ」の値のストリング表現から形成することができる。
ファイル・タイプ・サフィックスは、量ｏｂｊｅｃｔＴｙｐｅの値、またはメディア・データ・ストリームに含まれるファイル・フォーマット・インジケータ、あるいはその両方に依存するものとすることができる。たとえば、量ｏｂｊｅｃｔＴｙｐｅの値が「３２」である場合に、ファイル・タイプ・サフィックスを、「．ｍ４ｖ」（ＭＰＥＧ−４ビデオ）と指定することができる。
【０２２０】
３．動作５１１０で、新しいメディア・データ・ファイルを、書き込みのためにオープンする。この新しいメディア・データ・ファイルの名前は、動作５１０５で確立されたｍｅｄｉａＦｉｌｅ要素２４８０の「ｎａｍｅ」属性の値によって決定される。
「ＭＰＥＧ−４ビデオ」（ｏｂｊｅｃｔＴｙｐｅ  １０４４は「３２」）の場合に、データの最初のブロックは、新しいメディア・データ・ファイルの先頭に置かなければならない。このデータのブロックは、量「ｉＴｒａｃｋ」によって指定される値を有するｔｒａｃｋＩＤ値３２２４を有するｔｒａｋ構造３２００のＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎデータ構造３４８０のメンバ「ｅｓｄＤａｔａ」３４９６によって指定されるバイトの配列に含まれる「デコーダ固有情報」ブロック１０７２、１０７６に含まれる。ＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎデータ構造３４８０は、このｔｒａｋ構造のＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎｓデータ構造３４００のＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎＴａｂｌｅデータ構造３４１８のメンバｔａｂｌｅ  ３４３０の最初の項目（項目０）によって決定される。「デコーダ固有情報」ブロック１０７２、１０７６は、このｅｓｄＤａｔａデータ・ブロック３４９６に含まれる「デコーダ構成記述子」データ・ブロック１０２４、１０３２に含まれる。
デコーダ構成記述子データ１０３２は、上で説明した手順「デコーダ構成記述子の発見」を使用して突き止めることができる。デコーダ固有情報データ・ブロック１０７２、１０７６は、デコーダ構成記述子１０３２内で、ｄｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒＴａｇ  １０３６、デコーダ構成記述子サイズ値１０４０、および１４バイトのデコーダ構成記述子データ１０４４から１０６８の後に配置される。デコーダ固有情報データ・ブロック１０７６は、１バイトのｄｅｃｏｄｅｒＳｐｅｃｉｆｉｃＩｎｆｏＴａｇ  １０８０（値「５」）、デコーダ固有情報データ・ブロック・サイズ値（ｎｕｍＢｙｔｅｓ  １０８４）、およびｎｕｍＢｙｔｅｓバイトのデコーダ固有情報データからなる。このｎｕｍＢｙｔｅｓ  １０８４バイトのシーケンスが、出力メディア・データ・ファイル２２３０にコピーされる。
【０２２１】
４．動作５１１５で、ＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅ  ３４０８のサンプル・テーブル構造３４２０のメンバｎｕｍＥｎｔｒｉｅｓ  ３４２８の値を、量「ｎｕｍＣｈｕｎｋｓ」に割り当てる。ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅ  ３４０６のサンプル・テーブルタ構造３４２０のメンバｎｕｍＥｎｔｒｉｅｓ  ３４２８の値を、量「ｎｕｍＳｔｓｃＥｎｔｒｉｅｓ」に割り当てる。サンプル・テーブル構造ＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅ、ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅなどは、ｔｒａｋ構造３２００  ｔｒａｋＡｔｏｍのメンバ「ＴｒａｃｋＭｅｄｉａ」３２０６によって表されるＴｒａｃｋＭｅｄｉａデータ構造３２２６のメンバ「ＭｅｄｉａＩｎｆｏ」３２３４によって表されるＭｅｄｉａＩｎｆｏデータ構造３３３３のメンバ「ＳａｍｐｌｅＴａｂｌｅｓ」３３４０によって表されるＳａｍｐｌｅＴａｂｌｅｓ構造３４００のメンバである。
【０２２２】
５．動作５１２０で、ＴｉｍｅＴｏＳａｍｐｌｅ構造ｓｔｔｓＥｎｔｒｙのメンバ「ｃｏｕｎｔ」の値を、量「ｃｏｕｎｔ」に割り当てる。
【０２２３】
６．動作５１２５で、値０を、量「ｓｔｓｃＩｎｄｅｘ」に割り当てる。ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅ  ３４０６のサンプル・テーブル構造３４２０に含まれるｔａｂｌｅ配列３４３０の最初の項目の値を、ＳａｍｐｌｅＴｏＣｈｕｎｋ構造３４６０のアドレスを表す量ｓｔｓｃＥｎｔｒｙに割り当てる。ＳａｍｐｌｅＴｏＣｈｕｎｋ構造ｓｔｓｃＥｎｔｒｙのメンバ「ｆｉｒｓｔＣｈｕｎｋ」の値から１を引いたものを、整数量「ｆｉｒｓｔＣｈｕｎｋ」に割り当てる。
【０２２４】
７．動作５１３０で、値０を、整数量「ｃｈｕｎｋ」に割り当てる。
【０２２５】
８．動作５１４０で、量「ｃｈｕｎｋ」の値を、量「ｎｕｍＣｈｕｎｋｓ」の値と比較する。
【０２２６】
９．動作５１４５で、量「ｃｈｕｎｋ」の値が量「ｎｕｍＣｈｕｎｋｓ」の値と等しい場合に、手順「ＶｉｓｕａｌＤａｔａＴｏＸｍｌ」が終了する。
【０２２７】
１０．動作５１５０で、量「ｃｈｕｎｋ」の値が量「ｎｕｍＣｈｕｎｋｓ」の値と等しくない場合に、値「８」をｍｄａｔ構造３１６０  ｍｄａｔＡｔｏｍのメンバ「ｓｔａｒｔ」の値に加算し、その結果をＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅ  ３４０８のサンプル・テーブル構造３４２０に含まれるｔａｂｌｅ配列３４３０の項目「ｃｈｕｎｋ」の値から引き、その結果を整数量「ｏｆｆｓｅｔ」に割り当てる。
【０２２８】
１１．動作５１６０で、量「ｃｈｕｎｋ」の値を、量「ｆｉｒｓｔＣｈｕｎｋ」の値と比較する。
【０２２９】
１２．動作５１６５で、量「ｃｈｕｎｋ」の値が量「ｆｉｒｓｔＣｈｕｎｋ」の値と等しい場合に、ＳａｍｐｌｅＴｏＣｈｕｎｋ構造３４６０  ｓｔｓｃＥｎｔｒｙのメンバ「ｎｕｍＳａｍｐｌｅｓ」３４６６の値を、量「ｎｕｍＳａｍｐｌｅｓ」に割り当てる。量「ｓｔｓｃＩｎｄｅｘ」の値を１つ増分する。量「ｓｔｓｃＩｎｄｅｘ」の値が、量「ｎｕｍＳｔｓｃＥｎｔｒｉｅｓ」より小さい場合に、ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅ  ３４０６のサンプル・テーブル構造３４２０に含まれるｔａｂｌｅ配列３４３０の項目「ｓｔｓｃＩｎｄｅｘ」の値を、ＳａｍｐｌｅＴｏＣｈｕｎｋ構造３４６０  ｓｔｓｃＥｎｔｒｙに割り当て、ＳａｍｐｌｅＴｏＣｈｕｎｋ構造ｓｔｓｃＥｎｔｒｙのメンバ「ｆｉｒｓｔＣｈｕｎｋ」の値から１を引いたものを、整数量「ｆｉｒｓｔＣｈｕｎｋ」に割り当てる。そうでない場合には、量「ｎｕｍＣｈｕｎｋｓ」の値を、量「ｆｉｒｓｔＣｈｕｎｋ」に割り当てる。
【０２３０】
１３．動作５１７０で、ＳａｍｐｌｅＳｉｚｅＴａｂｌｅ  ３４１３のＳａｍｐｌｅＳｉｚｅＴａｂｌｅ構造３４４０に含まれる整数の配列３４５６の項目「ｓａｍｐｌｅ」から「ｓａｍｐｌｅ＋ｎｕｍＳａｍｐｌｅｓ−１」までを合計することによって、量「ｃｈｕｎｋＳｉｚｅ」の値を決定する。
【０２３１】
１４．動作５１８０で、新しい「ｃｈｕｎｋ」要素を作成し、動作５１０５で作成された新しい「ｍｅｄｉａＦｉｌｅ」要素に付加する。量「ｏｆｆｓｅｔ」の値を、新しい「ｃｈｕｎｋ」要素の属性「ｏｆｆｓｅｔ」に割り当てる。量「ｃｈｕｎｋＳｉｚｅ」の値を、新しい「ｃｈｕｎｋ」要素の属性「ｓｉｚｅ」に割り当てる。
【０２３２】
１５．動作５１８５で、バイト配列ＭｅｄｉａＤａｔａの先頭からｏｆｆｓｅｔバイトから始まるメディア・データのｃｈｕｎｋＳｉｚｅバイトを、動作５１１０でオープンされた出力メディア・データ・ファイルにコピーする。
【０２３３】
１６．動作５１９０で、量「ｃｈｕｎｋ」の値を１つ増分し、動作５１４０を繰り返す。
【０２３４】
手順「ＡｕｄｉｏＤａｔａＴｏＸｍｌ」
手順「ＡｕｄｉｏＤａｔａＴｏＸｍｌ」４３８５は、ｍｄａｔ構造「ｍｄａｔＡｔｏｍ」に含まれるオーディオ・メディア・データ・ストリームを含むチャンクを表すｘｍｌ表現を作成する。これらのチャンクに含まれるメディア・データは、外部メディア・データ・ファイルにもコピーされる。図１２０からわかるように、この手順は、次の相違を除いて上で説明した手順「ＶｉｓｕａｌＤａｔａＴｏＸｍｌ」と同等である。
【０２３５】
「ｎａｍｅ」属性の値を形成するのに使用されるシーケンス番号を、オーディオ・オブジェクト・シーケンス番号「ｎｕｍＡｕｄｉｏ」のストリング表現から形成することができる。
【０２３６】
ファイル・タイプ・サフィックスは、量ｏｂｊｅｃｔＴｙｐｅの値またはメディア・データ・ストリームに含まれるファイル・フォーマット表示あるいはこの両方に依存するものとすることができる。たとえば、量ｏｂｊｅｃｔＴｙｐｅの値が「１０７」である場合に、ファイル・タイプ・サフィックスを、「．ｍｐ３」（ＭＰＥＧ−１  ｌａｙｅｒ  ３オーディオ）と指定することができる。
【０２３７】
動作５１４５で、量「ｃｈｕｎｋ」の値が量「ｎｕｍＣｈｕｎｋｓ」の値と等しい場合に、手順「ＡｕｄｉｏＤａｔａＴｏＸｍｌ」が終了する。
【０２３８】
ＭＰＥＧ−２  ＡＡＣ（Ａｄｖａｎｃｅｄ  Ａｕｄｉｏ  Ｃｏｄｉｎｇ）など、あるタイプのオーディオ・データは、本明細書で説明したものを超える追加処理を必要とする場合がある。そのような処理を実行する手段は、対応するメディア固有ファイル構造仕様に基づいて、当業者が考案することができる。各タイプのオーディオ・データを処理するのに使用される特定の手段は、本明細書には含まれない。
【０２３９】
手順「ＳｄｓｍＤａｔａＴｏＸｍｌ」
手順「ＳｄｓｍＤａｔａＴｏＸｍｌ」４３６５は、現在のｍｄａｔ構造「ｍｄａｔＡｔｏｍ」に含まれるｓｄｓｍ（ＢＩＦＳ）データ・ストリーム（ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ）のｘｍｌ表現を作成する。この手順によって作成されるｓｄｓｍのｘｍｌ表現は、次の２つの部分からなる。
（ａ）ｓｄｓｍを含むメディア・データ・チャンク２４５０の要約を含むｓｄｓｍ要素２４４０。このｓｄｓｍ要素２４４０は、ｍｐ４ｆｉｌｅ文書２３００の一部を形成する現在のｍｄａｔ要素に含まれる。
（ｂ）ｓｄｓｍメディア・データ・サンプル１１００および１１１０のｘｍｌ表現が、ｍｐ４ｂｉｆｓ文書２２６０および２８００内に作成される。
【０２４０】
図１２１からわかるように、この手順は、次の動作からなる。
１．動作５２００で、ｍｄａｔ構造「ｍｄａｔＡｔｏｍ」のメンバ「ＭｅｄｉａＤａｔａ」３１６８の値を、バイトの配列のアドレスを表す量「ＳｄｓｍＤａｔａ」に割り当てる。ｍｄａｔ構造「ｍｄａｔＡｔｏｍ」のメンバ「ｓｉｚｅ」３１６３の値を、整数量「ＳｄｓｍＳｉｚｅ」に割り当てる。
【０２４１】
２．動作５２０５で、新しい「ｓｄｓｍ」要素２４１０、２４４０を作成し、現在のｍｄａｔ要素２４００に付加する。各そのような「ｓｄｓｍ」要素２４４０は、２つの属性「ｔｒａｃｋＩＤ」および「ｘｍｌＦｉｌｅ」を有する。属性「ｘｍｌＦｉｌｅ」は、結果のｍｐ４ｂｉｆｓ文書２２６０、２８００を表すのに使用できる任意選択のｘｍｌ出力ファイルの名前を指定する。この任意選択のｘｍｌ出力ファイルは、診断に有用である場合があるが、本発明の動作に必要ではない（ｍｐ４バイナリ・ファイルに基づくＸＭＴ−Ａファイルの作成用）。
ｔｒａｋ構造「ｔｒａｋＡｔｏｍ」に含まれるＴｒａｃｋＨｅａｄｅｒ構造３２１２、３２０４のメンバｔｒａｃｋＩＤ  ３２２４の値を、新しい「ｓｄｓｍ」要素２４４０の属性「ｔｒａｃｋＩＤ」の値に割り当てる。
属性「ｘｍｌＦｉｌｅ」の値を、文字の２つのストリング、ファイル名スタブおよびファイル・タイプ・サフィックスの連結によって決定する。ファイル名スタブは、入力ｍｐ４ファイルの名前のコピーから、「．」（ドットまたはピリオド）文字の最後の出現とそれ以降の文字を除いたものによって決定することができる。ファイル・タイプ・サフィックスは、「Ｂｉｆｓ．ｘｍｌ」である。
【０２４２】
３．動作５２１０で、新しい「ｂｉｆｓＣｏｎｆｉｇ」要素２８１０を作成し、ｍｐ４ｂｉｆｓ文書２２６０、２８００のトップ要素に付加する。下で説明する手順「ｂｉｆｓＣｏｎｆｉｇ属性のセット」を使用して、「ｂｉｆｓＣｏｎｆｉｇ」要素２８１０の属性をセットする。
【０２４３】
４．動作５２１５で、ＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅ  ３４０８のサンプル・テーブル構造３４２０のメンバｎｕｍＥｎｔｒｉｅｓ  ３４２８の値を、量「ｎｕｍＣｈｕｎｋｓ」に割り当てる。ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅ  ３４０６のサンプル・テーブル構造３４２０のメンバｎｕｍＥｎｔｒｉｅｓ  ３４２８の値を、量「ｎｕｍＳｔｓｃＥｎｔｒｉｅｓ」に割り当てる。サンプル・テーブル構造ＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅ、ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅなどは、ｔｒａｋ構造３２００  ｔｒａｋＡｔｏｍのメンバ「ＴｒａｃｋＭｅｄｉａ」３２０６によって表されるＴｒａｃｋＭｅｄｉａデータ構造３２２６のメンバ「ＭｅｄｉａＩｎｆｏ」３２３４によって表されるＭｅｄｉａＩｎｆｏデータ構造３３３３のメンバ「ＳａｍｐｌｅＴａｂｌｅｓ」３３４０によって表されるＳａｍｐｌｅＴａｂｌｅｓ構造３４００のメンバである。
【０２４４】
５．動作５２２０で、値０を、量「ｓｔｔｓＩｎｄｅｘ」に割り当てる。ＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅ  ３４１０のサンプル・テーブル構造３４２０に含まれるｔａｂｌｅ配列３４３０の最初の項目の値を、ＴｉｍｅＴｏＳａｍｐｌｅ構造３４７０のアドレスを表す量ｓｔｔｓＥｎｔｒｙに割り当てる。ＴｉｍｅＴｏＳａｍｐｌｅ構造ｓｔｔｓＥｎｔｒｙのメンバ「ｃｏｕｎｔ」の値を、量「ｃｏｕｎｔ」に割り当てる。ＴｉｍｅＴｏＳａｍｐｌｅ構造ｓｔｔｓＥｎｔｒｙのメンバ「ｄｕｒａｔｉｏｎ」の値を、量「ｄｕｒａｔｉｏｎ」に割り当てる。
【０２４５】
６．動作５２２５で、値０を量「ｓｔｓｃＩｎｄｅｘ」に割り当てる。ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅ  ３４０６のサンプル・テーブル構造３４２０に含まれるｔａｂｌｅ配列３４３０の最初の項目の値を、ＳａｍｐｌｅＴｏＣｈｕｎｋ構造３４６０のアドレスを表す量ｓｔｓｃＥｎｔｒｙに割り当てる。ＳａｍｐｌｅＴｏＣｈｕｎｋ構造ｓｔｓｃＥｎｔｒｙのメンバ「ｆｉｒｓｔＣｈｕｎｋ」の値から１を引いたものを、整数量「ｆｉｒｓｔＣｈｕｎｋ」に割り当てる。
【０２４６】
７．動作５２３０で、値０を整数量「ｃｈｕｎｋ」に割り当てる。
【０２４７】
８．動作５２４０で、量「ｃｈｕｎｋ」の値を量「ｎｕｍＣｈｕｎｋｓ」の値と比較する。
【０２４８】
９．動作５２４５で、量「ｃｈｕｎｋ」の値が量「ｎｕｍＣｈｕｎｋｓ」の値と等しい場合に、手順「ＳｄｓｍＤａｔａＴｏＸｍｌ」を終了する。
【０２４９】
１０．動作５２５０で、量「ｃｈｕｎｋ」の値が量「ｎｕｍＣｈｕｎｋｓ」の値と等しくない場合に、値「８」を、ｍｄａｔ構造３１６０  ｍｄａｔＡｔｏｍのメンバ「ｓｔａｒｔ」の値に加算し、その結果を、ＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅ  ３４０８のサンプル・テーブル構造３４２０に含まれるｔａｂｌｅ配列３４３０の項目「ｃｈｕｎｋ」から引き、その結果を、整数量「ｏｆｆｓｅｔ」に割り当てる。
【０２５０】
１１．動作５２６０で、量「ｃｈｕｎｋ」の値を量「ｆｉｒｓｔＣｈｕｎｋ」の値と比較する。
【０２５１】
１２．動作５２６５で、量「ｃｈｕｎｋ」の値が量「ｆｉｒｓｔＣｈｕｎｋ」の値と等しい場合に、ＳａｍｐｌｅＴｏＣｈｕｎｋ構造３４６０  ｓｔｓｃＥｎｔｒｙのメンバ「ｎｕｍＳａｍｐｌｅｓ」３４６６の値を、量「ｎｕｍＳａｍｐｌｅｓ」に割り当てる。量「ｓｔｓｃＩｎｄｅｘ」の値を１つ増分する。量「ｓｔｓｃＩｎｄｅｘ」の値が、量「ｎｕｍＳｔｓｃＥｎｔｒｉｅｓ」の値未満である場合に、ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅ  ３４０６のサンプル・テーブル構造３４２０に含まれるｔａｂｌｅ配列３４３０の項目「ｓｔｓｃＩｎｄｅｘ」の値を、ＳａｍｐｌｅＴｏＣｈｕｎｋ構造３４６０  ｓｔｓｃＥｎｔｒｙに割り当て、ＳａｍｐｌｅＴｏＣｈｕｎｋ構造ｓｔｓｃＥｎｔｒｙのメンバ「ｆｉｒｓｔＣｈｕｎｋ」の値から１を引いたものを、整数量「ｆｉｒｓｔＣｈｕｎｋ」に割り当てる。そうでない場合には、量「ｎｕｍＣｈｕｎｋｓ」の値を、量「ｆｉｒｓｔＣｈｕｎｋ」に割り当てる。
【０２５２】
１３．動作５２７０で、ＳａｍｐｌｅＳｉｚｅＴａｂｌｅ  ３４１３のＳａｍｐｌｅＳｉｚｅＴａｂｌｅ構造３４４０に含まれる整数の配列３４５６の項目「ｓａｍｐｌｅ」から「ｓａｍｐｌｅ＋ｎｕｍＳａｍｐｌｅｓ−１」までを合計することによって、量「ｃｈｕｎｋＳｉｚｅ」の値を決定する。
【０２５３】
１４．動作５２７５で、ｎｕｍＳａｍｐｌｅｓ個の項目を有するタイム・スタンプのテーブルを、関連するｔｒａｋ構造３２００に含まれる、ＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅデータ構造３４１０のｔａｂｌｅ配列メンバ３４３０の項目、ＴｒａｃｋＥｄｉｔデータ構造３２０８、３２３６、ならびにＭｅｄｉａＨｅａｄｅｒデータ構造３２３０の内容に基づいて作成する。このテーブルには、現在のチャンクのサンプルごとに１つの項目が含まれ、このテーブルの各項目は、ストリーム内のすべての先行するサンプルのｄｕｒａｔｉｏｎ値３４７６の合計に、存在する場合に任意選択のＴｒａｃｋＥｄｉｔデータ構造３２０８、３２３６で指定される初期遅延を加えたものを表す。当業者は、使用可能な情報からそのようなテーブルを生成する手段を作成することができる。
【０２５４】
１５．動作５２８０で、新しい「ｃｈｕｎｋ」要素を作成し、ステップ２で作成された新しい「ｓｄｓｍ」要素に付加する。量「ｏｆｆｓｅｔ」の値を、新しい「ｃｈｕｎｋ」要素の属性「ｏｆｆｓｅｔ」に割り当てる。量「ｃｈｕｎｋＳｉｚｅ」の値を、新しい「ｃｈｕｎｋ」要素の属性「ｓｉｚｅ」に割り当てる。
【０２５５】
１６．動作５２８５で、図１２２に示された手順「ｓｄｓｍチャンクのデコード」を実行する。
【０２５６】
１７．動作５２９０で、量「ｃｈｕｎｋ」の値を１つ増分し、動作５２４０を繰り返す。
【０２５７】
手順ｂｉｆｓＣｏｎｆｉｇ属性のセット
ｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｎｆｉｇ要素２８１０は、７つの属性、「ｎｏｄｅＩｄＢｉｔｓ」、「ｒｏｕｔｅＩｄＢｉｔｓ」、「ｃｏｍｍａｎｄＦｒａｍｅ」、「ｕｓｅＢＩＦＳｖ２Ｃｏｎｆｉｇ」、「ｐｒｏｔｏＩｄｂｉｔｓ」、「ｕｓｅ３ＤＭｅｓｈＣｏｄｉｎｇ」、および「ｕｓｅＰｒｅｄｉｃｔｉｖｅＭＦＦｉｅｌｄ」を有する。これらの属性の値は、現在のｔｒａｋデータ構造「ｔｒａｋＡｔｏｍ」のデコーダ固有情報データ１０７２の内容によって決定される。このデータ・ブロックは、現在のｔｒａｋＡｔｏｍデータ構造に含まれるＳａｍｐｌｅＴａｂｌｅｓデータ構造３４００のメンバＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎＴａｂｌｅ  ３４１８のメンバ「ｔａｂｌｅ配列」３４３０の項目０によって指定されるＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎデータ構造３４８０のｅｓｄＤａｔａメンバ１０００、３４９６内のデコーダ構成記述子１０２４、１０３２に含まれる。
【０２５８】
量「ｏｂｊｅｃｔＴｙｐｅ」の値が「２」である場合に、デコーダ固有情報データは、「バージョン２」ＢＩＦＳ構成を表す。この場合に、デコーダ固有情報ブロックの最初の３バイトは、次の内容を有する。
【０２５９】
［ｕｒａａａａａｂ  ｂｂｂｂｐｐｐｐ  ｐｃｘｘｘｘｘｘ］
ただし、
ｕ＝「ｕｓｅ３ＤＭｅｓｈＣｏｄｉｎｇ」の１ビット値
ｒ＝「ｕｓｅＰｒｅｄｉｃｔｉｖｅＭＦＦｉｅｌｄ」の１ビット値
ａａａａａ＝「ｎｏｄｅＩｄＢｉｔｓ」の５ビット符号なし整数値
ｂｂｂｂｂ＝「ｒｏｕｔｅＩｄＢｉｔｓ」の５ビット符号なし整数値
ｐｐｐｐｐ＝「ｐｒｏｔｏＩｄｂｉｔｓ」の５ビット符号なし整数値
ｃ＝「ｃｏｍｍａｎｄＦｒａｍｅ」の１ビット値
【０２６０】
ａａａａａ、ｂｂｂｂｂ、およびｐｐｐｐｐによって指定される値は、示された属性に割り当てられる。
【０２６１】
「ａａａａａ」によって指定される符号なし整数値は、ｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｎｆｉｇ要素２８１０の「ｎｏｄｅＩｄＢｉｔｓ」属性に割り当てられる。「ｂｂｂｂｂ」によって指定される符号なし整数値は、ｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｎｆｉｇ要素２８１０の「ｒｏｕｔｅＩｄＢｉｔｓ」属性に割り当てられる。「ｐｐｐｐｐ」によって指定される符号なし整数値は、ｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｎｆｉｇ要素２８１０の「ｐｒｏｔｏＩｄｂｉｔｓ」属性に割り当てられる。
【０２６２】
「ｕ」、「ｒ」、または「ｃ」の値が「０」の場合に、値「偽」が、ｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｎｆｉｇ要素２８１０の対応する属性に割り当てられる。「ｕ」、「ｒ」、または「ｃ」の値が「１」の場合に、値「真」が、ｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｎｆｉｇ要素２８１０の対応する属性に割り当てられる。
【０２６３】
量「ｏｂｊｅｃｔＴｙｐｅ」の値が「２」でない場合に、デコーダ固有情報データは、「バージョン１」ＢＩＦＳ構成を表す。この場合に、デコーダ固有情報ブロックの最初の２バイトは、次の内容を有する。
【０２６４】
［ａａａａａｂｂｂ  ｂｂｃｘｘｘｘｘ］
ただし、
ａａａａａ＝「ｎｏｄｅＩｄＢｉｔｓ」の５ビット符号なし整数値
ｂｂｂｂｂ＝「ｒｏｕｔｅＩｄＢｉｔｓ」の５ビット符号なし整数値
ｃ「ｃｏｍｍａｎｄＦｒａｍｅ」の１ビット値
【０２６５】
この場合に、「ｐｒｏｔｏＩｄｂｉｔｓ」、「ｕｓｅ３ＤＭｅｓｈＣｏｄｉｎｇ」、および「ｕｓｅＰｒｅｄｉｃｔｉｖｅＭＦＦｉｅｌｄ」の値は不要である。
【０２６６】
「ａａａａａ」によって指定される符号なし整数値は、ｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｎｆｉｇ要素２８１０の「ｎｏｄｅＩｄＢｉｔｓ」属性に割り当てられる。「ｂｂｂｂｂ」によって指定される符号なし整数値は、ｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｎｆｉｇ要素２８１０の「ｒｏｕｔｅＩｄＢｉｔｓ」属性に割り当てられる。
【０２６７】
「ｃ」の値が「０」である場合に、値「偽」が、ｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｎｆｉｇ要素２８１０の「ｃｏｍｍａｎｄＦｒａｍｅ」属性に割り当てられる。そうでない（「ｃ」の値が「１」である）場合に、値「真」が、ｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｎｆｉｇ要素２８１０の「ｃｏｍｍａｎｄＦｒａｍｅ」属性に割り当てられる。
【０２６８】
手順「ｓｄｓｍチャンクのデコード」
図１２２からわかるように、手順「ｓｄｓｍチャンクのデコード」は、次のステップからなる。
【０２６９】
１．動作５３００で、量「ｏｆｆｓｅｔ」の値を、整数量「ｓｄｓｍＰｏｓ」に割り当てる。量「ｃｈｕｎｋＳｉｚｅ」の値を、量「ｏｆｆｓｅｔ」の値に加算し、その結果を整数量「ｓｄｓｍＥｎｄ」に割り当てる。量「ｓｄｓｍＰｏｓ」の値は、バイトの配列「ＳｄｓｍＤａｔａ」内のバイトの位置を指定する。
関連する整数量「ｓｄｓｍＢｉｔ」は、量ｓｄｓｍＰｏｓの値によって指定されるバイト内のビットの位置を示す。当初、値０を、関連する量「ｓｄｓｍＢｉｔ」に割り当てる。その後、ｓｄｓｍビットストリームから抽出されるビットごとに、ｓｄｓｍＢｉｔを１つ増分する。ｓｄｓｍＢｉｔの値が７を超える場合に、必ず、「ｓｄｓｍＢｉｔ」の値を８つ減分し、「ｓｄｓｍＰｏｓ」の値を１つ増分する。
２．動作５３０５で、値０を整数量「ｓａｍｐｌｅ」に割り当て、値「偽」を、ｂｏｏｌｅａｎ量「ｆｒａｍｅＯｐｅｎ」に割り当てる。
３．動作５３１０で、量「ｓｄｓｍＰｏｓ」の値を、量「ｓｄｓｍＥｎｄ」の値と比較する。
４．動作５３１５で、量「ｓｄｓｍＰｏｓ」の値が、量「ｓｄｓｍＥｎｄ」の値未満でない場合に、この手順は終了する。
５．動作５３２０で、量「ｓｄｓｍＰｏｓ」の値が、量「ｓｄｓｍＥｎｄ」の値未満である場合に、量「ｆｒａｍｅＯｐｅｎ」の値を、値「偽」と比較する。
６．動作５３２５で、量「ｆｒａｍｅＯｐｅｎ」の値が値「偽」と等しい場合に、新しい「ｃｏｍｍａｎｄＦｒａｍｅ」要素２８２０を作成し、ｍｐ４ｂｉｆｓ文書２８００に付加する。タイム・スタンプのテーブルの項目「ｓａｍｐｌｅ」の値を、新しいｃｏｍｍａｎｄＦｒａｍｅ要素の「ｔｉｍｅ」属性に割り当てる。値「真」を、ｂｏｏｌｅａｎ量「ｆｒａｍｅＯｐｅｎ」に割り当てる。
７．動作５３３０で、「ｓｄｓｍＰｏｓ」および「ｓｄｓｍＢｉｔ」の値によって指定される点から始まるｓｄｓｍビットストリームの次の２ビットを、量「ｃｍｄＣｏｄｅ」に割り当てる。量「ｓｄｓｍＢｉｔ」の値を２つ増分し、量「ｃｍｄＣｏｄｅ」の値を０と比較する。
８．動作５３３５で、量「ｃｍｄＣｏｄｅ」の値が「０」１２０６と等しい場合に、手順「挿入コマンドのデコード」を実行する。
９．動作５３４０で、量「ｃｍｄＣｏｄｅ」の値を「１」と比較する。
１０．動作５３４５で、量「ｃｍｄＣｏｄｅ」の値が「１」１２２６と等しい場合に、手順「削除コマンドのデコード」を実行する。
１１．動作５３５０で、量「ｃｍｄＣｏｄｅ」の値を「２」と比較する。
１２．動作５３５５で、量「ｃｍｄＣｏｄｅ」の値が「２」１２４４と等しい場合に、手順「置換コマンドのデコード」を実行する。
１３．動作５３６０で、量「ｃｍｄＣｏｄｅ」の値が「０」、「１」、または「２」でない場合に、この値は２ビットのデータによって決定されるので、この値は「３」でなければならない。その結果、このステップの結果は必ず「ｙｅｓ」である。
１４．動作５３６５で、量「ｃｍｄＣｏｄｅ」の値が「３」１２８０と等しい場合に、手順「ＲｅｐｌａｃｅＳｃｅｎｅコマンドのデコード」を実行する。
手順「ＲｅｐｌａｃｅＳｃｅｎｅコマンドのデコード」には、新しい「ＲｅｐｌａｃｅＳｃｅｎｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２９３０を作成し、現在の「ｃｏｍｍａｎｄＦｒａｍｅ」要素２８３０に付加することが含まれる。シーン置換ｃｍｄＣｏｄｅ  １２８０に続くＢＩＦＳシーン・データ構造１２９０、１６００を、解釈し、必要に応じてｓｄｓｍＢｉｔおよびｓｄｓｍＢｙｔｅの値を増やす。
【０２７０】
「ｒｅｓｅｒｖｅｄ」コンポーネント１６１０によって指定される値は、ｓｄｓｍＢｉｔの値を増分することによってスキップされる。ＢＩＦＳシーン・データ構造１６００のＵＳＥＮＡＭＥＳコンポーネント１６２０およびｐｒｏｔｏＬｉｓｔコンポーネント１６３０によって指定される値が、判定され、新しい「ＲｅｐｌａｃｅＳｃｅｎｅ」要素の対応する属性に割り当てられる。
【０２７１】
次に、手順「ＳＦＮｏｄｅのデコード」を使用して、ＢＩＦＳシーン構造１６００のＳＦＴｏｐＮｏｄｅコンポーネント１６４０を解釈する。新しい「ＲｅｐｌａｃｅＳｃｅｎｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２９３０は、結果のＴｏｐＮｏｄｅ  ＢＩＦＳノード要素２９４０の親として働く。
【０２７２】
１ビット値「ｈａｓＲｏｕｔｅｓ」１６５０を、ｂｏｏｌｅａｎ値「ｈａｓＲｏｕｔｅｓ」に割り当てる。「ｈａｓＲｏｕｔｅｓ」の値が「１」（「真」）である場合に、次のＲｏｕｔｅｓコンポーネント１６６０、１８００、１８３０を解釈する。新しい「Ｒｏｕｔｅｓ」要素２９５０を作成し、新しい「ＲｅｐｌａｃｅＳｃｅｎｅ」要素２９３０に付加する。Ｒｏｕｔｅｓコンポーネント１６６０に含まれるＲｏｕｔｅ構造１８１０または１８５０ごとに、新しい「Ｒｏｕｔｅｓ」要素２９５０を作成し、新しい「Ｒｏｕｔｅｓ」要素２９５０に付加する。各Ｒｏｕｔｅ構造１８６０のコンポーネント、ｒｏｕｔｅＩＤ  １８７０、ｒｏｕｔｅＮａｍｅ  １８７５、ｏｕｔＮｏｄｅＩＤ  １８８０、ｏｕｔＦｉｅｌｄＲｅｆ  １８８５、ｉｎＮｏｄｅＩＤ  １８９０、およびｉｎＦｉｅｌｄＲｅｆ  １８９５によって指定される値を判定し、各新しい「Ｒｏｕｔｅ」要素２９６０の対応する属性に割り当てる。
１５．動作５３７０で、手順「挿入コマンドのデコード」、「削除コマンドのデコード」、「置換コマンドのデコード」、または「ＲｅｐｌａｃｅＳｃｅｎｅコマンドのデコード」の完了に続いて、ｓｄｓｍビットストリームの次のビットを、ｂｏｏｌｅａｎ量「ｃｏｎｔｉｎｕｅ」１１３０または１１４０に割り当てる。量「ｃｏｎｔｉｎｕｅ」の結果の値が「１」（「真」）１１３０である場合に、この手順は、動作５３１０で継続される。
１６．量「ｃｏｎｔｉｎｕｅ」の結果の値が「０」（「偽」）１１４０である場合に、ｓｄｓｍビットストリームを、次のバイトの始めまで進める動作５３７５。すなわち、量ｓｄｓｍＢｉｔの値が０である場合には、何も行わない。そうでない場合には、「ｓｄｓｍＢｉｔ」の値に０をセットし、ｓｄｓｍＢｙｔｅの値を１つ増分する。このステップは、ｓｄｓｍコマンド・フレーム１１１０の終りの「パディング・ビット」１１５０をスキップする。
１７．動作５３８０で、ｂｏｏｌｅａｎ量「ｆｒａｍｅＯｐｅｎ」に「偽」をセットし、量「ｓａｍｐｌｅ」の値を１つ増分し、この手順は、動作５３１０で継続される。
【０２７３】
手順「挿入コマンドのデコード」
図１２３からわかるように、手順「挿入コマンドのデコード」は、次のステップからなる。
１．動作５４００で、ｓｄｓｍビットストリーム１２１０の次の２ビットを、量「ｐａｒａｍＴｙｐｅ」に割り当てる。
２．動作５４１０で、量「ｐａｒａｍＴｙｐｅ」の値を「０」と比較する。
３．動作５４２０で、量「ｐａｒａｍＴｙｐｅ」の値が「０」１３０８である場合に、手順「ＩｎｓｅｒｔＮｏｄｅコマンドのデコード」を実行する。
手順「ＩｎｓｅｒｔＮｏｄｅコマンドのデコード」には、新しい「ＩｎｓｅｒｔＮｏｄｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０を作成することと、これを現在の親要素２８３０に付加することが含まれる。Ｎｏｄｅ  Ｉｎｓｅｒｔｉｏｎコマンド１３００のコンポーネント、ｎｏｄｅＩＤ  １３１２、ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ  １３１６、およびｐｏｓｉｔｉｏｎ  １３２０によって指定される値を判定し、新しい「ＩｎｓｅｒｔＮｏｄｅ」ｂｉｆｓＣｏｍｍａｎｄ要素の対応する属性に割り当てる。
その後、手順「ＳＦＮｏｄｅのデコード」を使用して、Ｎｏｄｅ  Ｉｎｓｅｒｔｉｏｎコマンド１３００のＳＦＮｏｄｅコンポーネント１３２４を解釈する。
４．動作５４３０で、量「ｐａｒａｍＴｙｐｅ」の値を「１」と比較する。
５．動作５４４０で、量「ｐａｒａｍＴｙｐｅ」の値が「１」である場合に、エラーに出会っている。この値は、有効なｓｄｓｍデータ・ストリーム内で許容されない。ｓｄｓｍビットストリームのデコードの処理を打ち切らなければならない。
６．動作５４５０で、量「ｐａｒａｍＴｙｐｅ」の値を「２」と比較する。
７．動作５４６０で、量「ｐａｒａｍＴｙｐｅ」の値が「２」１３３６である場合に、手順「ＩｎｓｅｒｔＩｄｘＶａｌｕｅコマンドのデコード」を実行する。
手順「ＩｎｓｅｒｔＩｄｘＶａｌｕｅコマンドのデコード」には、新しい「ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０を作成することと、これを現在の親要素２８３０に付加することが含まれる。Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｉｎｓｅｒｔｉｏｎコマンド１３２８のコンポーネント、ｎｏｄｅＩＤ  １３４０、ｉｎＦｉｅｌｄＩＤ  １３４４、ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ  １３４８、およびｐｏｓｉｔｉｏｎ  １３２０によって指定される値を判定し、新しい「ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ」ｂｉｆｓＣｏｍｍａｎｄ要素の対応する属性に割り当てる。
【０２７４】
コンポーネント「フィールド値」１３５６によって表されるデータの型（ｂｏｏｌｅａｎ、ｉｎｔｅｇｅｒ、ｓｔｒｉｎｇなど）は、量「ｎｏｄｅＩＤ」、「ｉｎＦｉｅｌｄＩＤ」、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルによって決定される。フィールド値のデータ型が、「ＳＦＮｏｄｅ」である場合に、手順「ＳＦＮｏｄｅのデコード」を使用して、Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｉｎｓｅｒｔｉｏｎコマンド１３２８の「フィールド値」コンポーネント１３５６を解釈し、「フィールド値」コンポーネントに含まれるＢＩＦＳノードの名前を、新しい「ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ」要素の「ｖａｌｕｅ」属性に割り当てる。そうでない場合には、「フィールド値」コンポーネント１３５６によって表される数値またはストリング値を、新しい「ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ」ｂｉｆｓＣｏｍｍａｎｄ要素の「ｖａｌｕｅ」属性に割り当てる。
８．動作５４７０で、「ｐａｒａｍＴｙｐｅ」の値が、「０」、「１」、または「２」でない場合に、この値は２ビットのデータによって決定されるので、値は「３」１３６８でなければならない。その結果、このステップの結果は、必ず「ｙｅｓ」になる。
９．動作５４８０で、手順「ＩｎｓｅｒｔＲｏｕｔｅコマンドのデコード」を実行する。
手順「ＩｎｓｅｒｔＲｏｕｔｅコマンドのデコード」には、新しい「ＩｎｓｅｒｔＲｏｕｔｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０を作成することと、これを現在の親要素２８３０に付加することが含まれる。Ｒｏｕｔｅ  Ｉｎｓｅｒｔｉｏｎコマンド１３６０のコンポーネント、ｉｓＵｐｄａｔｅａｂｌｅ  １３７２、ｒｏｕｔｅＩＤ  １３７６、ｄｅｐａｒｔｕｒｅＮｏｄｅＩＤ  １３８０、ｄｅｐａｒｔｕｒｅＦｉｅｌｄＩＤ  １３８４、ａｒｒｉｖａｌＮｏｄｅＩＤ  １３８８、およびａｒｒｉｖａｌＦｉｅｌｄＩＤ  １３９２によって指定される値を判定し、新しい「ＩｎｓｅｒｔＲｏｕｔｅ」ｂｉｆｓＣｏｍｍａｎｄ要素の対応する属性に割り当てる。
１０．動作５４９０で、手順「ＩｎｓｅｒｔＮｏｄｅコマンドのデコード」、「ＩｎｓｅｒｔＩｄｘＶａｌｕｅコマンドのデコード」、または「ＩｎｓｅｒｔＲｏｕｔｅコマンドのデコード」の完了の後に、ｓｄｓｍビットストリームの処理は、量「ｍｏｒｅＣｏｍｍａｎｄｓ」の値を用いて継続される。
【０２７５】
手順「削除コマンドのデコード」
図１２４からわかるように、手順「削除コマンドのデコード」は、次のステップからなる。
【０２７６】
１．動作５５００で、ｓｄｓｍビットストリームの次の２ビットを量「ｐａｒａｍＴｙｐｅ」に割り当てる。
【０２７７】
２．動作５５１０で、量「ｐａｒａｍＴｙｐｅ」の値を「０」と比較する。
【０２７８】
３．動作５５２０で、量「ｐａｒａｍＴｙｐｅ」の値が「０」１４１２である場合に、手順「ＤｅｌｅｔｅＮｏｄｅコマンドのデコード」を実行する。
手順「ＤｅｌｅｔｅＮｏｄｅコマンドのデコード」には、新しい「ＤｅｌｅｔｅＮｏｄｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０を作成することと、これを現在の親要素２８３０に付加することが含まれる。Ｎｏｄｅ  Ｄｅｌｅｔｉｏｎコマンド１４００のコンポーネントｎｏｄｅＩＤ  １４１８によって指定される値を、判定し、新しい「ＤｅｌｅｔｅＮｏｄｅ」ｂｉｆｓＣｏｍｍａｎｄ要素の「ｎｏｄｅＩＤ」属性に割り当てる。
【０２７９】
４．動作５５５０で、量「ｐａｒａｍＴｙｐｅ」の値を「１」と比較する。
【０２８０】
５．動作５５４０で、量「ｐａｒａｍＴｙｐｅ」の値が１である場合に、エラーに出会っている。この値は、有効なｓｄｓｍデータ・ストリーム内で許容されない。ｓｄｓｍビットストリームのデコードの処理を打ち切らなければならない。
【０２８１】
６．動作５５５０で、量「ｐａｒａｍＴｙｐｅ」の値を「２」と比較する。
【０２８２】
７．動作５５６０で、量「ｐａｒａｍＴｙｐｅ」の値が「２」１４３６である場合に、手順「ＤｅｌｅｔｅＩｄｘＶａｌｕｅコマンドのデコード」を実行する。
手順「ＤｅｌｅｔｅＩｄｘＶａｌｕｅコマンドのデコード」には、新しい「ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０を作成することと、これを現在の親要素２８３０に付加することが含まれる。Ｎｏｄｅ  Ｄｅｌｅｔｉｏｎコマンド１４２４のコンポーネントｎｏｄｅＩＤ  １４４２、ｉｎＦｉｅｌｄＩＤ  １４４８、ｄｅｌｅｔｉｏｎＰｏｓｉｔｉｏｎ  １４５４、およびｐｏｓｉｔｉｏｎ  １４６０によって指定される値を判定し、新しい「ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ」ｂｉｆｓＣｏｍｍａｎｄ要素の対応する属性に割り当てる。
【０２８３】
８．動作５５７０で、「ｐａｒａｍＴｙｐｅ」の値が、「０」、「１」、または「２」でない場合に、この値は２ビットのデータによって決定されるので、値は「３」１４７８でなければならない。その結果、このステップの結果は、必ず「ｙｅｓ」になる。
【０２８４】
９．動作５５８０で、手順「ＤｅｌｅｔｅＲｏｕｔｅコマンドのデコード」を実行する。
手順「ＤｅｌｅｔｅＲｏｕｔｅコマンドのデコード」には、新しい「ＤｅｌｅｔｅＲｏｕｔｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０を作成することと、これを現在の親要素２８３０に付加することが含まれる。Ｒｏｕｔｅ  Ｄｅｌｅｔｉｏｎコマンド１４６６のコンポーネントｒｏｕｔｅＩＤ  １４８４によって指定される値を、新しい「ＤｅｌｅｔｅＲｏｕｔｅ」ｂｉｆｓＣｏｍｍａｎｄ要素の「ｒｏｕｔｅＩＤ」属性に割り当てる。
【０２８５】
１０．動作５５９０で、手順「ＩｎｓｅｒｔＮｏｄｅコマンドのデコード」、「ＩｎｓｅｒｔＩｄｘＶａｌｕｅコマンドのデコード」、または「ＩｎｓｅｒｔＲｏｕｔｅコマンドのデコード」の完了の後に、ｓｄｓｍビットストリームの処理は、量「ｍｏｒｅＣｏｍｍａｎｄｓ」の値を用いて継続される。
【０２８６】
手順「置換コマンドのデコード」
図１２５からわかるように、手順「置換コマンドのデコード」は、次のステップからなる。
【０２８７】
１．動作５６００で、ｓｄｓｍビットストリームの次の２ビットを量「ｐａｒａｍＴｙｐｅ」に割り当てる。
【０２８８】
２．動作５６１０で、量「ｐａｒａｍＴｙｐｅ」の値を「０」と比較する。
【０２８９】
３．動作５６２０で、量「ｐａｒａｍＴｙｐｅ」の値が「０」１５０８である場合に、手順「ＲｅｐｌａｃｅＮｏｄｅコマンドのデコード」を実行する。
手順「ＲｅｐｌａｃｅＮｏｄｅコマンドのデコード」には、新しい「ＲｅｐｌａｃｅＮｏｄｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０を作成することと、これを現在の親要素２８３０に付加することが含まれる。Ｎｏｄｅ  Ｒｅｐｌａｃｅｍｅｎｔコマンド１５００のコンポーネントｎｏｄｅＩＤ  １５１０によって指定される値を、判定し、新しい「ＲｅｐｌａｃｅＮｏｄｅ」ｂｉｆｓＣｏｍｍａｎｄ要素の「ｎｏｄｅＩＤ」属性に割り当てる。
その後、手順「ＳＦＮｏｄｅのデコード」を使用して、Ｎｏｄｅ  Ｒｅｐｌａｃｅｍｅｎｔコマンド１５００のＳＦＮｏｄｅコンポーネント１５１４を解釈する。
【０２９０】
４．動作５６３０で、量「ｐａｒａｍＴｙｐｅ」の値を「１」と比較する。
【０２９１】
５．動作５６４０で、量「ｐａｒａｍＴｙｐｅ」の値が「１」１５３８である場合に、手順「ＲｅｐｌａｃｅＦｉｅｌｄコマンドのデコード」を実行する。
手順「ＲｅｐｌａｃｅＦｉｅｌｄコマンドのデコード」には、新しい「ＲｅｐｌａｃｅＦｉｅｌｄ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０を作成することと、これを現在の親要素２８３０に付加することが含まれる。Ｆｉｅｌｄ  Ｒｅｐｌａｃｅｍｅｎｔコマンド１５２０のコンポーネント、ｎｏｄｅＩＤ  １５３０およびｉｎＦｉｅｌｄＩＤ  １５３４によって指定される値を、判定し、新しい「ＲｅｐｌａｃｅＦｉｅｌｄ」ｂｉｆｓＣｏｍｍａｎｄ要素の対応する属性に割り当てる。
コンポーネント「フィールド値」１５３８によって表されるデータの型（ｂｏｏｌｅａｎ、ｉｎｔｅｇｅｒ、ｓｔｒｉｎｇなど）は、量「ｎｏｄｅＩＤ」、「ｉｎＦｉｅｌｄＩＤ」、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルによって決定される。フィールド値のデータ型が、「ＳＦＮｏｄｅ」である場合に、手順「ＳＦＮｏｄｅのデコード」を使用して、Ｆｉｅｌｄ  Ｒｅｐｌａｃｅｍｅｎｔコマンド１５２０の「フィールド値」コンポーネント１５３８を解釈し、「フィールド値」コンポーネントに含まれるＢＩＦＳノードの名前を、新しい「ＲｅｐｌａｃｅＦｉｅｌｄ」要素の「ｖａｌｕｅ」属性に割り当てる。そうでない場合には、「フィールド値」コンポーネント１５３８によって表される数値またはストリング値を、新しい「ＲｅｐｌａｃｅＦｉｅｌｄ」ｂｉｆｓＣｏｍｍａｎｄ要素の「ｖａｌｕｅ」属性に割り当てる。
【０２９２】
６．動作５６５０で、量「ｐａｒａｍＴｙｐｅ」の値を「２」と比較する。
【０２９３】
７．動作５５６０で、量「ｐａｒａｍＴｙｐｅ」の値が「２」１５４８である場合に、手順「ＲｅｐｌａｃｅＩｄｘＶａｌｕｅコマンドのデコード」を実行する。
手順「ＲｅｐｌａｃｅＩｄｘＶａｌｕｅコマンドのデコード」には、新しい「ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０を作成することと、これを現在の親要素２８３０に付加することが含まれる。Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｒｅｐｌａｃｅｍｅｎｔコマンド１５４０のコンポーネント、ｎｏｄｅＩＤ  １５５０、ｉｎＦｉｅｌｄＩＤ  １５５４、ｒｅｐｌａｃｅｍｅｎｔＰｏｓｉｔｉｏｎ  １５５８、およびｐｏｓｉｔｉｏｎ  １５６０によって指定される値を、判定し、新しい「ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ」ｂｉｆｓＣｏｍｍａｎｄ要素の対応する属性に割り当てる。
「フィールド値」コンポーネント１５６４によって表されるデータの型（ｂｏｏｌｅａｎ、ｉｎｔｅｇｅｒ、ｓｔｒｉｎｇなど）は、量「ｎｏｄｅＩＤ」、「ｉｎＦｉｅｌｄＩＤ」、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルによって決定される。フィールド値のデータ型が、「ＳＦＮｏｄｅ」である場合に、手順「ＳＦＮｏｄｅのデコード」を使用して、Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｒｅｐｌａｃｅｍｅｎｔコマンド１５４０の「フィールド値」コンポーネント１５６４を解釈し、「フィールド値」コンポーネントに含まれるＢＩＦＳノードの名前を、新しい「ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ」要素の「ｖａｌｕｅ」属性に割り当てる。そうでない場合には、「フィールド値」コンポーネント１５６４によって表される数値またはストリング値を、新しい「ｒｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ」ｂｉｆｓＣｏｍｍａｎｄ要素の「ｖａｌｕｅ」属性に割り当てる。
【０２９４】
８．動作５６７０で、「ｐａｒａｍＴｙｐｅ」の値が、「０」、「１」、または「２」でない場合に、この値は２ビットのデータによって決定されるので、値は「３」１５７８でなければならない。その結果、このステップの結果は、必ず「ｙｅｓ」になる。
【０２９５】
９．動作５６８０で、手順「ＲｅｐｌａｃｅＲｏｕｔｅコマンドのデコード」を実行する。
手順「ＲｅｐｌａｃｅＲｏｕｔｅコマンドのデコード」には、新しい「ＲｅｐｌａｃｅＲｏｕｔｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０を作成することと、これを現在の「ｃｏｍｍａｎｄＦｒａｍｅ」要素２８３０に付加することが含まれる。Ｒｏｕｔｅ  Ｒｅｐｌａｃｅｍｅｎｔコマンド１５７０のコンポーネント、ｒｏｕｔｅＩＤ  １５８０、ｄｅｐａｒｔｕｒｅＮｏｄｅＩＤ  １５８４、ｄｅｐａｒｔｕｒｅＦｉｅｌｄＩＤ  １５８８、ａｒｒｉｖａｌＮｏｄｅＩＤ  １５９０、およびａｒｒｉｖａｌＦｉｅｌｄＩＤ  １５９４によって指定される値を、判定し、新しい「ＲｅｐｌａｃｅＲｏｕｔｅ」ｂｉｆｓＣｏｍｍａｎｄ要素の対応する属性に割り当てる。
【０２９６】
１０．動作５６９０で、手順「ＩｎｓｅｒｔＮｏｄｅコマンドのデコード」、「ＩｎｓｅｒｔＩｄｘＶａｌｕｅコマンドのデコード」、または「ＩｎｓｅｒｔＲｏｕｔｅコマンドのデコード」の完了の後に、ｓｄｓｍビットストリームの処理は、量「ｍｏｒｅＣｏｍｍａｎｄｓ」の値を用いて継続される。
【０２９７】
手順「ＳＦＮｏｄｅのデコード」
ＳＦＮｏｄｅデータ構造１７００、１７１０、および１７３０の構図を、図４４から４８に要約した。各ＳＦＮｏｄｅデータ構造は、親データ構造に含まれる。親データ構造は、ＢＩＦＳコマンド１１２０または別のＳＦＮｏｄｅ構造のいずれかとすることができる。どちらの場合でも、ｍｐ４ｂｉｆｓ文書内に、対応する親要素がある。ＢＩＦＳコマンド親構造の場合に、ｍｐ４ｂｉｆｓ親要素は、ｂｉｆｓＣｏｍｍａｎｄ要素２９１０である。ＳＦＮｏｄｅ親構造の場合に、ｍｐ４ｂｉｆｓ親要素は、ＢＩＦＳ  Ｎｏｄｅ要素になる。
【０２９８】
図１２６からわかるように、手順「ＳＦＮｏｄｅのデコード」には、次のステップが含まれる。
【０２９９】
１．動作５７００で、ｓｄｓｍビットストリームの次のビットを、ｂｏｏｌｅａｎ量「ｉｓＲｅｕｓｅｄ」１７０４、１７１２、１７３２に割り当て、結果の値を値「真」（１）と比較する。
【０３００】
２．動作５７１０で、「ｉｓＲｅｕｓｅｄ」の値が「真」（１）１７０４である場合に、新しい「ＲｅｕｓｅｄＮｏｄｅ」要素を作成し、現在のｍｐ４ｂｉｆｓ親要素に付加する。「ｎｏｄｅＩＤＲｅｆ」コンポーネント１７０８の値を解釈し、結果の整数値を、新しい「ＲｅｕｓｅｄＮｏｄｅ」要素の「ｎｏｄｅＲｅｆ」属性に割り当てる。「ｎｏｄｅＩＤＲｅｆ」の値を指定するのに使用されるビット数は、ｍｐ４ｂｉｆｓ文書２８００の「ｂｉｆｓＣｏｎｆｉｇ」要素２８１０の「ｎｏｄｅＩｄＢｉｔｓ」属性によって決定される。これによって、ＳＦＮｏｄｅ構造の処理が完了する。
【０３０１】
３．動作５７２０で、「ｉｓＲｅｕｓｅｄ」の値が「０」（「偽」）１７１２、１７３２である場合に、「ｌｏｃａｌＮｏｄｅＴｙｐｅ」１７１４、１７３４の値を、ｓｄｓｍビットストリームから抽出する。この値を表すビット数は、親構造の識別およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルによって決定される。
親構造の識別、「ｌｏｃａｌＮｏｄｅＴｙｐｅ」の値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルを使用して、このＳＦＮｏｄｅ構造によって表されるＢＩＦＳノードの特定の型の「ｎｏｄｅＮｕｍｂｅｒ」プロパティの整数値を決定する。整数量「ｎｏｄｅＮｕｍｂｅｒ」の値およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルを使用して、このＳＦＮｏｄｅ構造によって表されるＢＩＦＳノードの型を記述するストリング量「ｎｏｄｅＮａｍｅ」の値を決定する。量「ｎｏｄｅＮａｍｅ」の値によって指定される要素名を有する新しいＢＩＦＳノード要素を作成し、ｍｐ４ｂｉｆｓ親要素に付加する。
【０３０２】
４．動作５７３０で、ｓｄｓｍビットストリームの次のビットをｂｏｏｌｅａｎ量「ｉｓＵｐｄａｔｅａｂｌｅ」１７１６、１７３６に割り当て、結果の値を値「真」（１）と比較する。
【０３０３】
５．動作５７４０で、「ｉｓＵｐｄａｔｅａｂｌｅ」の値が「１」である場合に、量「ｎｏｄｅＩＤ」の整数値をｓｄｓｍビットストリームから抽出する。値「ｎｏｄｅＩＤ」を指定するのに使用されるビット数は、ｍｐ４ｂｉｆｓ文書２８００の「ｂｉｆｓＣｏｎｆｉｇ」要素２８１０の「ｎｏｄｅＩｄＢｉｔｓ」属性によって決定される。結果の値を、動作５７２０で作成された新しいＢＩＦＳノード要素の「ｎｏｄｅＩＤ」属性に割り当てる。
【０３０４】
６．動作５７５０で、関連する「ＲｅｐｌａｃｅＳｃｅｎｅ」要素の「ＵＳＥＮＡＭＥＳ」属性のｂｏｏｌｅａｎ値を、値「真」（１）と比較する。
【０３０５】
７．動作５７６０で、「ＵＳＥＮＡＭＥＳ」の値が「真」である場合に、ＳＦＮｏｄｅ構造から英数字文字のヌル終端ストリング１７２０、１７４０を抽出し、結果のストリング値を、動作５７２０で作成された新しいＢＩＦＳノード要素の「ｎａｍｅ」属性に割り当てる。
【０３０６】
８．動作５７７０で、ｓｄｓｍビットストリームの次のビットを、ｂｏｏｌｅａｎ量「ｍａｓｋＡｃｃｅｓｓ」１７２２、１７４２に割り当て、結果の値を値「真」（１）と比較する。
９．動作５７８０で、「ｍａｓｋＡｃｃｅｓｓ」の値が１（「真」）である場合に、このＳＦＮｏｄｅ構造は、図４５に示された形を有する。この場合に、ｍａｓｋＡｃｃｅｓｓビット１７２２に、マスク・ビット１７２６のシーケンスが続く。マスク・ビットの個数は、量「ｎＦｉｅｌｄｓ」１７２８の値によって表される。量「ｎＦｉｅｌｄｓ」の値は、動作５７２０での量「ｎｏｄｅＮｕｍｂｅｒ」の値とＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルによって決定される。量「ｆｉｅｌｄＩｎｄｅｘ」には、「ｍａｓｋＡｃｃｅｓｓ」１７２２の値を解釈した後に０がセットされる。各マスク・ビット１７２６を解釈した後に、量「ｆｉｅｌｄＩｎｄｅｘ」の値を１つ増分する。「１」の値を有する各マスク・ビット１７２６に、量「ｎｏｄｅＮｕｍｂｅｒ」の値および量「ｆｉｅｌｄＩｎｄｅｘ」の値によって指定されるプロパティ・フィールドの値が続く。
各プロパティ・フィールドの値は、手順「フィールド値のデコード」によって決定される。
【０３０７】
１０．動作５７９０で、「ｍａｓｋＡｃｃｅｓｓ」の値が０（「偽」）である場合に、このＳＦＮｏｄｅ構造は、図４６に示された形を有する。この場合に、ｍａｓｋＡｃｃｅｓｓビット１７２２に、ｅｎｄＦｌａｇビット１７４４が続く。ｅｎｄＦｌａｇビットの値が「１」１７５０である場合に、ＳＦＮｏｄｅ構造の終りに達している。ｅｎｄＦｌａｇビットの値が「０」１７４４である場合に、ｅｎｄＦｌａｇビットに、ｆｉｅｌｄＲｅｆ値１７４６と、量「ｎｏｄｅＮｕｍｂｅｒ」の値および量「ｆｉｅｌｄＩｎｄｅｘ」の値によって指定されるプロパティ・フィールドの値１７４８が続く。
【０３０８】
各プロパティ・フィールドの値は、手順「フィールド値のデコード」によって決定される。
【０３０９】
手順「フィールド値のデコード」
各ＳＦＮｏｄｅ構造の各プロパティ・フィールドは、特定のフィールド・データ型プロパティおよび特定のｆｉｅｌｄＮａｍｅストリングを有する。フィールド・データ型プロパティは、ｂｏｏｌｅａｎ、ｉｎｔｅｇｅｒ、ｆｌｏａｔ、ｖｅｃｔｏｒ２ｄ、ｖｅｃｔｏｒ３ｄ、ｒｏｔａｔｉｏｎ、ｃｏｌｏｒ、ｔｉｍｅ、ｓｔｒｉｎｇ、ＵＲＬ、ｎｏｄｅ、またはｂｕｆｆｅｒのうちの１つとすることができる。各プロパティ・フィールドは、ＳＦＦｉｅｌｄ（単一値フィールド）またはＭＦＦｉｅｌｄ（複数値フィールド）としても定義される。
【０３１０】
各プロパティ・フィールドのフィールド・データ型プロパティ、ｆｉｅｌｄＮａｍｅストリング、およびＭＦＦｉｅｌｄ／ＳＦＦｉｅｌｄプロパティは、ＳＦＮｏｄｅ構造の「ｎｏｄｅＮｕｍｂｅｒ」量５７２０、プロパティ・フィールドの「ｆｉｅｌｄＩｎｄｅｘ」量または「ｆｉｅｌｄＲｅｆ」量の値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルによって決定される。
【０３１１】
ＳＦＦｉｅｌｄプロパティ・フィールドの場合に、フィールド値を表すのに使用されるビットのシーケンスは、フィールド・データ型プロパティおよびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で提供される情報によって決定される。
【０３１２】
ＭＦＦｉｅｌｄプロパティ・フィールドの場合に、フィールド値は、０個以上のＳＦＦｉｅｌｄ値の組によって決定される。ＭＦＦｉｅｌｄプロパティ・フィールド値を構成するＳＦＦｉｅｌｄ値の組は、図４７または図４８に示された形を有する。どちらの場合でも、最初のビット１７６２、１７８２は、０でなければならない。次のビットは、ｂｏｏｌｅａｎ量「ｉｓＬｉｓｔ」１７６６および１７８６の値を指定する。
【０３１３】
量「ｉｓＬｉｓｔ」の値が「１」である場合に、ＭＦＦｉｅｌｄプロパティ・フィールドは、図４７に示されたリスト形式を有する。この場合に、ｉｓＬｉｓｔビット１７６６に、ｅｎｄＦｌａｇビット１７７０が続く。ｅｎｄＦｌａｇビットの値が「０」１７７０である場合に、ｅｎｄＦｌａｇビットに、現在のフィールド・データ型に従ってフォーマットされたＳＦＦｉｅｌｄ値１７７４が続く。そのようなＳＦＦｉｅｌｄ値１７７４のそれぞれに、もう１つのｅｎｄＦｌａｇビット１７７０が続く。値「１」を有するｅｎｄＦｌａｇビット１７７２によって、リスト形式のＭＦＦｉｅｌｄが終了する。
【０３１４】
量「ｉｓＬｉｓｔ」の値が「０」である場合に、ＭＦＦｉｅｌｄプロパティ・フィールドは、図４８に示されたリスト形式を有する。この場合に、ｉｓＬｉｓｔビット１７６６に、５ビットの整数値「ｎｕｍＢｉｔｓ」１７９０が続く。「ｎｕｍＢｉｔｓ」の値に、ｎｕｍＢｉｔｓ個のビットからなる整数値「ｎＦｉｅｌｄｓ」１７９２が続く。「ｎＦｉｅｌｄｓ」の値に、それぞれが現在のフィールド・データ型に従ってフォーマットされたｎＦｉｅｌｄｓ個のＳＦＦｉｅｌｄ値が続く。
【０３１５】
どの場合（ＳＦＦｉｅｌｄ、リスト形式ＭＦＦｉｅｌｄ、またはベクトル形式ＭＦＦｉｅｌｄ）でも、各ＳＦＦｉｅｌｄ値を、文字ストリングに変換する。そのような文字ストリングのそれぞれを、空白スペースによって区切られた連続して付加された値を有する属性ストリングに付加する。フィールド・データ型ｉｎｔｅｇｅｒ、ｆｌｏａｔ、ｖｅｃｔｏｒ２ｄ、ｖｅｃｔｏｒ３ｄ、ｒｏｔａｔｉｏｎ、ｃｏｌｏｒ、およびｔｉｍｅの場合に、標準的な手段を使用して、各数値を文字ストリングとして表す。フィールド・データ型ｂｏｏｌｅａｎの場合に、値「０」および「１」が、文字ストリング「ｆａｌｓｅ」および「ｔｒｕｅ」によって表される。フィールド・データ型ｓｔｒｉｎｇおよびＵＲＬの場合に、各ＳＦＦｉｅｌｄ値は、引用符で囲まれる。
【０３１６】
フィールド・データ型「ｎｏｄｅ」の場合に、各ＳＦＦｉｅｌｄ値は、ＳＦＮｏｄｅ構造１７００、１７１０、または１７２０を表す。そのようなＳＦＮｏｄｅ構造のそれぞれを、「子ノード」と呼ぶ。そのような子ノードのそれぞれを、手順「ＳＦＮｏｄｅのデコード」の再帰的使用によって解釈する。そのような子ノードごとに決定されるストリング量「ｎｏｄｅＮａｍｅ」の値を、現在の属性ストリングに付加する。さらに、ストリング量「ｎｏｄｅＮａｍｅ」の値によって指定される要素名を有する新しいｘｍｌ要素を作成し、手順「ＳＦＮｏｄｅのデコード」のステップ３で作成されたＢＩＦＳノード要素に付加する。
【０３１７】
フィールド・データ型「ｂｕｆｆｅｒ」の場合に、各ＳＦＦｉｅｌｄ値は、ｓｄｓｍ  ＢＩＦＳコマンド１１２０を表す。各そのようなＢＩＦＳコマンドを、現在のノード要素を親要素として使用して、手順「ｓｄｓｍチャンクのデコード」の動作５３３０から動作５３６５を使用して解釈する。各ＢＩＦＳコマンドに関連するｃｏｍｍａｎｄＮａｍｅストリング（たとえば「ＩｎｓｅｒｔＮｏｄｅ」）を、現在の属性ストリングに付加する。さらに、ｃｏｍｍａｎｄＮａｍｅストリングによって指定される要素名を有する新しいｘｍｌ要素を作成し、手順「ＳＦＮｏｄｅのデコード」のステップ３で作成されたＢＩＦＳノード要素に付加する。
【０３１８】
各フィールド・データ値の解釈を完了した後に、結果の属性ストリングを、対応するＢＩＦＳノード要素のｆｉｅｌｄＮａｍｅ属性に割り当てる。すなわち、結果の属性ストリングを、指定されたＢＩＦＳノードの指定されたプロパティ・フィールドのｆｉｅｌｄＮａｍｅストリングによって与えられる属性名を有する属性の属性値に割り当てる。
【０３１９】
ＱｔＩｎｆｏデータ構造で表されたｍｏｏｖアトムのｘｍｌ表現の形成
ＱｔＩｎｆｏデータ構造３１００に基づくｍｐ４ｆｉｌｅ文書２３００の作成の第２ステップは、ｍｐ４バイナリ・ファイル７００に含まれるｍｏｏｖアトム７１２、７５４のｘｍｌ表現の作成である。図１２７からわかるように、このステップは、次の動作からなる。
１．動作５８００で、新しい「ｍｏｏｖ」要素２３２０を作成し、ｍｐ４ｆｉｌｅ文書２３００のトップ・レベル要素に付加する。
２．動作５８０５で、ＱｔＩｎｆｏデータ構造３１００のＭｏｏｖＨｅａｄｅｒメンバ３１１６を処理する。図８１からわかるように、ＭｏｏｖＨｅａｄｅｒデータ構造３１７０には、量ｓｉｚｅ  ３１７３、ｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ  ３１７６、ｃｒｅａｔｉｏｎＴｉｍｅ  ３１７８、ｍｏｄｉｆｉｅｄＴｉｍｅ  ３１８０、ｔｉｍｅＳｃａｌｅ  ３１８３、ｄｕｒａｔｉｏｎ  ３１８６、およびｎｅｘｔＴｒａｃｋＩＤ  ３１８８の値が含まれる。これらの値のそれぞれを、新しい「ｍｏｏｖ」要素２３２０の同一の名前の属性に割り当てる。
３．動作５８１０で、手順「Ｍｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒの処理」を実行する。
４．動作５８２０で、メンバＵｓｅｒＤａｔａ  ３１２３の値が０でない場合に、手順「ＵｓｅｒＤａｔａデータ構造の処理」を実行する。
５．動作５８２５で、値０を整数量「ｉＴｒａｃｋ」に割り当てる。
６．動作５８３０で、量「ｉＴｒａｃｋ」の値を、ＱｔＩｎｆｏメンバ「ｎｕｍＴｒａｃｋｓ」３１１８と比較する。
７．動作５８３５で、量「ｉＴｒａｃｋ」の値が、ＱｔＩｎｆｏメンバ「ｎｕｍＴｒａｃｋｓ」の値と等しい場合に、このステップは完了する。この時点で、中間ｘｍｌファイル２２５０および２２６０を作成する処理が、完了している。最終的なＸＭＴ−Ａ文書作成の処理は、「中間ｘｍｌ文書に基づくＸＭＴ−Ａ  ｘｍｌ文書の作成」で継続される。
８．動作５８４０で、量「ｉＴｒａｃｋ」の値が、ＱｔＩｎｆｏメンバ「ｎｕｍＴｒａｃｋｓ」の値と等しくない場合に、新しいｔｒａｋ要素２３５０を作成し、動作５８００で作成された新しいｍｏｏｖ要素２３２０に付加する。これが、「現在のｔｒａｋ要素」である。
【０３２０】
ＱｔＩｎｆｏメンバ「ｔｒａｋ配列」３１２０の項目「ｉＴｒａｃｋ」を、ｔｒａｋ構造３２００のアドレスを表す量「ｔｒａｋＡｔｏｍ」に割り当てる。値「ｔｒａｋＡｔｏｍ」によって表されるｔｒａｋ構造が、「現在のｔｒａｋ構造」である。
９．動作５８５０で、手順「ＴｒａｋＨｅａｄｅｒデータ構造の処理」を実行する。
１０．動作５８６０で、手順「ＴｒａｋＭｅｄｉａデータ構造の処理」を実行する。
１１．動作５８７０で、現在のｔｒａｋ構造のＴｒａｃｋＥｄｉｔメンバ３２０８が０でない場合に、手順「ＴｒａｃｋＥｄｉｔデータ構造の処理」を実行する。
１２．動作５８８０で、現在のｔｒａｋ構造のＴｒａｃｋＲｅｆｅｒｅｎｃｅメンバ３２１０が０でない場合に、手順「ＴｒａｃｋＲｅｆｅｒｅｎｃｅデータ構造の処理」を実行する。
１３．動作５８９０で、量「ｉＴｒａｃｋ」の値を１つ増分し、量「ｎｕｍＴｒａｃｋｓ」の値との量「ｉＴｒａｃｋ」の値の比較５８３０を繰り返す。
【０３２１】
手順「Ｍｐ４ＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒの処理」
手順「Ｍｐ４ＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒの処理」は、次のステップからなる。
１．新しい「ｍｐ４ｆｉｏｄｓ」要素２３３０を作成し、「ｍｏｏｖ」要素２３２０に付加する。
２．Ｍｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒメンバ「ＯｂｊｅｃｔＤｅｓｃｒＩＤ」３１３８の整数値を、新しい「ｍｐ４ｆｉｏｄｓ」要素２３６０の「ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」属性２３７０に割り当てる。
３．メンバ「ｉｎｌｉｎｅＰｒｏｆｉｌｅｓ」３１４６のｂｏｏｌｅａｎ値を、新しいｍｐ４ｆｉｏｄｓ要素２３６０の「ｉｎｃｌｕｄｅＩｎｌｉｎｅＰｒｏｆｉｌｅｓＦｌａｇ」属性に割り当てる。
４．メンバ「ｕｒｌＦｌａｇ」３１４０のｂｏｏｌｅａｎ値が「真」である場合に、メンバ「ｕｒｌＳｔｒｉｎｇ」３１４３によって表される文字ストリングを、「ｍｐ４ｆｉｏｄｓ」要素２３６０の「ｕｒｌ」属性に割り当て、Ｍｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒデータ構造３１３０の処理を完了する。メンバ「ｕｒｌＦｌａｇ」３１４０のｂｏｏｌｅａｎ値が「偽」である場合には、ヌル・ストリングをｍｐ４ｆｉｏｄｓ要素２３６０の「ｕｒｌ」属性に割り当てる。
５．Ｍｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒデータ構造３１３０の「ＰｒｏｆｉｌｅＬｅｖｅｌｓ」メンバ３１４８の対応するメンバ（ＯＤＰｒｏｆｉｌｅＬｅｖｅｌ、ｓｃｅｎｅＰｒｏｆｉｌｅＬｅｖｅｌ、ａｕｄｉｏＰｒｏｆｉｌｅＬｅｖｅｌ、ｖｉｓｕａｌＰｒｏｆｉｌｅＬｅｖｅｌ、およびｇｒａｐｈｉｃｓＰｒｏｆｉｌｅＬｅｖｅｌ）に基づいて、ｍｐ４ｆｉｏｄｓ要素２３６０の属性、「ＯＤＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、「ｓｃｅｎｅＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、「ａｕｄｉｏＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、「ｖｉｓｕａｌＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、および「ｇｒａｐｈｉｃｓＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」に整数値を割り当てる。
６．Ｍｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒデータ構造３１３０のＥｓＩｄＩｎｃ配列３１５６のｎｕｍＥｓＩｄＩｎｃｓ  ３１５３個の項目のそれぞれについて、新しいＥｓＩｄＩｎｃ要素２３８０を作成する。各新しいＥｓＩｄＩｎｃ要素２３８０を、ｍｐ４ｆｉｏｄｓ要素２３６０に付加する。ＥｓＩｄＩｎｃ配列３１５６の各項目に、整数メンバ「ｔｒａｃｋＩＤ」が含まれる。メンバ「ｔｒａｃｋＩＤ」の値を、対応する新しいＥｓＩｄＩｎｃ要素２３８０の「ｔｒａｃｋＩＤ」属性２３９０に割り当てる。
【０３２２】
手順「ＵｓｅｒＤａｔａデータ構造の処理」
手順「ＵｓｅｒＤａｔａデータ構造の処理」は、次のステップからなる。
１．新しい「ｕｄｔａ」要素２３４０を作成し、新しい「ｍｏｏｖ」要素２３２０に付加する。
ＵｓｅｒＤａｔａデータ構造３２８０のメンバｎｕｍＣｐｒｔ  ３２８４の値が０より大きい場合に、メンバｃｐｒｔ配列３２８６の項目ごとに、次のステップを繰り返す。
２．新しい「ｃｐｒｔ」要素を作成し、新しい「ｕｄｔａ」要素２３４０に付加する。
３．ｃｐｒｔ配列３２８６の選択された項目によって表されるｃｐｒｔ構造３２９０のｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓメンバ３２９４の値を、新しい「ｃｐｒｔ」要素の「ｖｅｒｓｉｏｎ」属性および「ｆｌａｇｓ」属性に割り当てる。
４．「ｃｐｒｔ」構造３２９０のメンバ「ｌａｎｇｕａｇｅ」３２９６の値を、新しい「ｃｐｒｔ」要素の「ｌａｎｇｕａｇｅ」属性に割り当てる。
５．ｃｐｒｔデータ構造３２９０のメンバ「ｎｏｔｉｃｅ」３２９８に基づいて新しいｘｍｌテキスト・ノードを作成し、この新しいテキスト・ノードを「ｃｐｒｔ」要素に付加する。
【０３２３】
手順「ＴｒａｋＨｅａｄｅｒデータ構造の処理」
手順「ＴｒａｋＨｅａｄｅｒデータ構造の処理」は、次のステップからなる。
１．現在のｔｒａｋ構造のＴｒａｃｋＨｅａｄｅｒメンバのメンバ「ｖｅｒｓｉｏｎ」３２１６の値を、現在の「ｔｒａｋ」要素２６００の「ｖｅｒｓｉｏｎ」属性に割り当てる。
２．現在のｔｒａｋ構造のＴｒａｃｋＨｅａｄｅｒメンバのメンバ「ｆｌａｇｓ」３２１６の値を、現在の「ｔｒａｋ」要素２６００の「ｆｌａｇｓ」属性に割り当てる。
３．現在の「ｔｒａｋ」構造のＴｒａｃｋＨｅａｄｅｒメンバのメンバ「ｃｒｅａｔｉｏｎＴｉｍｅ」３２１８の値を、現在の「ｔｒａｋ」要素２６００の「ｃｒｅａｔｉｏｎＴｉｍｅ」属性に割り当てる。
４．現在の「ｔｒａｋ」構造のＴｒａｃｋＨｅａｄｅｒメンバのメンバ「ｍｏｄｉｆｉｅｄＴｉｍｅ」３２２０の値を、現在の「ｔｒａｋ」要素２６００の「ｍｏｄｉｆｉｅｄＴｉｍｅ」属性に割り当てる。
５．現在の「ｔｒａｋ」構造のＴｒａｃｋＨｅａｄｅｒメンバのメンバ「ｄｕｒａｔｉｏｎ」３２２２の値を、現在の「ｔｒａｋ」要素２６００「ｄｕｒａｔｉｏｎ」属性に割り当てる。
６．現在の「ｔｒａｋ」構造のＴｒａｃｋＨｅａｄｅｒメンバのメンバ「ｔｒａｃｋＩＤ」３２２４の値を、現在の「ｔｒａｋ」要素２６００の「ｔｒａｃｋＩＤ」属性に割り当てる。
【０３２４】
手順「ＴｒａｋＭｅｄｉａデータ構造の処理」
手順「ＴｒａｋＭｅｄｉａデータ構造の処理」は、次のステップからなる。
１．新しい「ｍｄｉａ」要素２６０４を作成し、現在の「ｔｒａｋ」要素２６００に付加する。
２．手順「ＭｅｄｉａＨｅａｄｅｒデータ構造の処理」を実行する。
３．手順「Ｈａｎｄｌｅｒデータ構造の処理」を実行する。
４．手順「ＭｅｄｉａＩｎｆｏデータ構造の処理」を実行する。
【０３２５】
手順「ＴｒａｃｋＥｄｉｔデータ構造の処理」
手順「ＴｒａｃｋＥｄｉｔデータ構造の処理」は、次のステップからなる。
１．新しいｅｄｔｓ要素２６４４を作成し、現在のｔｒａｋ要素に付加する。
現在のＴｒａｃｋＥｄｉｔデータ構造３２０８、３２３６のメンバＥｄｉｔＬｉｓｔ  ３２４２が０でない場合に、下の追加ステップを実行する。
２．新しいｅｌｓｔ要素２６４８を作成し、新しいｅｄｔｓ要素２６４４に付加する。
３．現在のＴｒａｃｋＥｄｉｔデータ構造３２０８、３２３６のＥｄｉｔＬｉｓｔメンバ３２４２によって表されるＥｄｉｔＬｉｓｔデータ構造３２４４のメンバｖｅｒｓｉｏｎ  ＆  ｆｌａｇｓ  ３２４８の値を、新しい「ｅｌｓｔ」要素２６４８の「ｖｅｒｓｉｏｎ」属性および「ｆｌａｇｓ」属性に割り当てる。
４．値０を量「ｓｅｇｍｅｎｔ」に割り当て、ＥｄｉｔＬｉｓｔデータ構造３２４４のメンバ「ｎｕｍＳｅｇｍｅｎｔｓ」３２５０の値を、量「ｎｕｍＳｅｇｍｅｎｔｓ」に割り当てる。量「ｎｕｍＳｅｇｍｅｎｔｓ」の値は、「２」になると期待される。
５．ＥｄｉｔＬｉｓｔデータ構造３２４４のＥｄｉｔＳｅｇｍｅｎｔ配列メンバ３２５２のｎｕｍＳｅｇｍｅｎｔｓ個の項目のそれぞれについて、次のステップを繰り返す。これらの項目のそれぞれが、ＥｄｉｔＳｅｇｍｅｎｔ構造３２５６からなる。
６．新しい「ｓｅｇｍｅｎｔ」要素を作成し、新しい「ｅｌｓｔ」要素２６４８に付加する。
７．ＥｄｉｔＳｅｇｍｅｎｔ構造３２５６のメンバ「ｓｔａｒｔＴｉｍｅ」３２５８の値を、新しい「ｓｅｇｍｅｎｔ」要素の「ｓｔａｒｔＴｉｍｅ」属性に割り当てる。
８．ＥｄｉｔＳｅｇｍｅｎｔ構造３２５６のメンバ「ｄｕｒａｔｉｏｎ」３２６０の値を、新しい「ｓｅｇｍｅｎｔ」要素の「ｄｕｒａｔｉｏｎ」属性に割り当てる。
９．ＥｄｉｔＳｅｇｍｅｎｔ構造３２５６のメンバ「ｒｅｌａｔｉｖｅＲａｔｅ」３２６２の値を、新しい「ｓｅｇｍｅｎｔ」要素の「ｒｅｌａｔｉｖｅＲａｔｅ」属性に割り当てる。
【０３２６】
手順「ＴｒａｃｋＲｅｆｅｒｅｎｃｅデータ構造の処理」
手順「ＴｒａｃｋＲｅｆｅｒｅｎｃｅデータ構造の処理」は、次のステップからなる。
１．新しい「ｔｒｅｆ」要素２６３６を作成し、現在のｔｒａｋ要素２６００に付加する。
現在のＴｒａｃｋＲｅｆｅｒｅｎｃｅデータ構造３２１０、３２６４のメンバＭｐｏｄ  ３２６８が０でない場合に、下の追加ステップを実行する。
２．新しい「ｍｐｏｄ」要素２６４０を作成し、新しい「ｔｒｅｆ」要素２６３６に付加する。
３．値０を量「ｅｎｔｒｙ」に割り当て、Ｍｐｏｄ構造３２６８、３２７０のメンバ「ｎｕｍＥｎｔｒｉｅｓ」３２７４の値を、量「ｎｕｍＥｎｔｒｉｅｓ」に割り当て、「ｔｒａｃｋＩｄＬｉｓｔ」という名前の新しい文字ストリングを（ヌル・ストリングとして）作成する。
４．量「ｎｕｍＥｎｔｒｉｅｓ」が０より大きい場合に、Ｍｐｏｄ構造３２７０のメンバｔｒａｃｋＩＤ配列３２７６のｎｕｍＥｎｔｒｉｅｓ個の項目ごとに、下の３つのステップを繰り返す。
ａ．量「ｅｎｔｒｙ」が０より大きい場合に、文字ストリング「ｔｒａｃｋＩｄＬｉｓｔ」に空白スペースを付加する。
ｂ．ｔｒａｃｋＩＤ配列３２７６の項目「ｅｎｔｒｙ」によって表される整数値の文字ストリング表現を作成し、その結果を文字ストリング「ｔｒａｃｋＩｄＬｉｓｔ」に付加する。
ｃ．量「ｅｎｔｒｙ」の値を「１」だけ増分する。
５．文字ストリング「ｔｒａｃｋＩｄＬｉｓｔ」の値を、ｍｐｏｄ要素２６４０のｔｒａｃｋＩＤ属性に割り当てる。
【０３２７】
手順「ＭｅｄｉａＨｅａｄｅｒデータ構造の処理」
手順「ＭｅｄｉａＨｅａｄｅｒデータ構造の処理」は、次のステップからなる。
１．ＭｅｄｉａＨｅａｄｅｒ構造３２３０、３３００のメンバ「ｖｅｒｓｉｏｎ」３３０６の値を、現在の「ｍｄｉａ」要素２６０４の「ｖｅｒｓｉｏｎ」属性に割り当てる。
２．ＭｅｄｉａＨｅａｄｅｒ構造３２３０、３３００のメンバ「ｆｌａｇｓ」３３０６の値を、現在の「ｍｄｉａ」要素２６０４の「ｆｌａｇｓ」属性に割り当てる。
３．ＭｅｄｉａＨｅａｄｅｒ構造３２３０、３３００のメンバ「ｃｒｅａｔｉｏｎＴｉｍｅ」３３０８の値を、現在の「ｍｄｉａ」要素２６０４の「ｃｒｅａｔｉｏｎＴｉｍｅ」属性に割り当てる。
４．ＭｅｄｉａＨｅａｄｅｒ構造３２３０、３３００のメンバ「ｍｏｄｉｆｉｅｄＴｉｍｅ」３３１０の値を、現在の「ｍｄｉａ」要素２６０４の「ｍｏｄｉｆｉｅｄＴｉｍｅ」属性に割り当てる。
５．ＭｅｄｉａＨｅａｄｅｒ構造３２３０、３３００のメンバ「ｔｉｍｅＳｃａｌｅ」３３１３の値を、現在の「ｍｄｉａ」要素２６０４の「ｔｉｍｅＳｃａｌｅ」属性に割り当てる。
６．ＭｅｄｉａＨｅａｄｅｒ構造３２３０、３３００のメンバ「ｄｕｒａｔｉｏｎ」３３１６の値を、現在の「ｍｄｉａ」要素２６０４の「ｄｕｒａｔｉｏｎ」属性に割り当てる。
７．ＭｅｄｉａＨｅａｄｅｒ構造３２３０、３３００のメンバ「ｌａｎｇｕａｇｅ」３３１８の値を、現在の「ｍｄｉａ」要素２６０４の「ｌａｎｇｕａｇｅ」属性に割り当てる。
【０３２８】
手順「Ｈａｎｄｌｅｒデータ構造の処理」
手順「Ｈａｎｄｌｅｒデータ構造の処理」は、次のステップからなる。
１．新しい「ｈｄｌｒ」要素２６０８を作成し、現在の「ｍｄｉａ」要素２６０４に付加する。
２．Ｈａｎｄｌｅｒ構造３２３２、３３２０のメンバ「ｖｅｒｓｉｏｎ」３３２６の値を、新しい「ｈｄｌｒ」要素２６０８の「ｖｅｒｓｉｏｎ」属性に割り当てる。
３．Ｈａｎｄｌｅｒ構造３２３２、３３２０のメンバ「ｆｌａｇｓ」３３２６の値を、新しい「ｈｄｌｒ」要素２６０８の「ｆｌａｇｓ」属性に割り当てる。
４．Ｈａｎｄｌｅｒ構造３２３２、３３２０のメンバ「ｈａｎｄｌｅｒＴｙｐｅ」３３２８の値を、新しい「ｈｄｌｒ」要素２６０８の「ｈａｎｄｌｅｒＴｙｐｅ」属性に割り当てる。
５．Ｈａｎｄｌｅｒ構造３２３２、３３２０のメンバ「ｎａｍｅ」３３３０の値を、新しい「ｈｄｌｒ」要素２６０８の「ｎａｍｅ」属性に割り当てる。
【０３２９】
手順「ＭｅｄｉａＩｎｆｏデータ構造の処理」
手順「ＭｅｄｉａＩｎｆｏデータ構造の処理」は、次のステップからなる。
１．新しい「ｍｉｎｆ」要素２６１２を作成し、現在の「ｍｄｉａ」要素２６０４に付加する。
２．手順「ＭｅｄｉａＤａｔａＩｎｆｏデータ構造の処理」を実行する。
３．手順「ＭｅｄｉａＩｎｆｏＨｅａｄｅｒデータ構造の処理」を実行する。
４．手順「ＳａｍｐｌｅＴａｂｌｅｓデータ構造の処理」を実行する。
【０３３０】
手順「ＭｅｄｉａＤａｔａＩｎｆｏデータ構造の処理」
手順「ＭｅｄｉａＤａｔａＩｎｆｏデータ構造の処理」は、次のステップからなる。
１．新しい「ｄｉｎｆ」要素２６１６を作成し、現在の「ｍｉｎｆ」要素２６１２に付加する。
２．ＭｅｄｉａＤａｔａＩｎｆｏ構造３３３８、３３５０のメンバＤａｔａＲｅｆＴａｂｌｅ  ３３５８が０でない場合に、次のステップを実行する。
３．新しい「ｄｒｅｆ」要素２６２０を作成し、新しい「ｄｉｎｆ」要素２６１６に付加する。
４．ＭｅｄｉａＤａｔａＩｎｆｏ構造３３３８、３３５０のメンバＤａｔａＲｅｆＴａｂｌｅ  ３３５８によって表されるＤａｔａＲｅｆＴａｂｌｅ構造３３６０のメンバ「ｖｅｒｓｉｏｎ」３３６６の値を、新しい「ｄｒｅｆ」要素２６２０の「ｖｅｒｓｉｏｎ」属性に割り当てる。
５．ＤａｔａＲｅｆＴａｂｌｅ構造３３６０のメンバ「ｆｌａｇｓ」３３６６の値を、新しい「ｄｒｅｆ」要素２６２０の「ｆｌａｇｓ」属性に割り当てる。
６．ＤａｔａＲｅｆＴａｂｌｅ構造３３６０のメンバｄａｔａＲｅｆ配列３３７０の項目ごとに、次のステップを繰り返す。
７．新しい「ｕｒｌＤａｔａ」要素２６２４を作成し、新しい「ｄｒｅｆ」要素２６２０に付加する。
８．ｄａｔａＲｅｆ配列３３７０の選択された項目によって表されるｄａｔａＲｅｆ構造３３８０のメンバ「ｖｅｒｓｉｏｎ」３３８６の値を、新しい「ｕｒｌＤａｔａ」要素２６２４の「ｖｅｒｓｉｏｎ」属性に割り当てる。
９．ｄａｔａＲｅｆ構造３３８０のメンバ「ｆｌａｇｓ」３３８６の値を、新しい「ｕｒｌＤａｔａ」要素２６２４の「ｆｌａｇｓ」属性に割り当てる。
１０．ｄａｔａＲｅｆ構造３３８０のメンバ「ｆｌａｇｓ」３３８６の値が「１」でなく、メンバ「ｄａｔａＲｅｆＴｙｐｅ」３３８８の値が「ｕｒｌ  」（すなわちｕ−ｒ−ｌ−スペース）である場合に、文字ストリングとしてメンバ「ｄａｔａＲｅｆＤａｔａ」３３９０を解釈し、その結果を新しい「ｕｒｌＤａｔａ」要素２６２４の「ｌｏｃａｔｉｏｎ」属性に割り当てる。
【０３３１】
手順「ＭｅｄｉａＩｎｆｏＨｅａｄｅｒデータ構造の処理」
所与のｔｒａｋ構造に含まれるＭｅｄｉａＩｎｆｏＨｅａｄｅｒデータ構造は、そのｔｒａｋ構造に関連するメディア・データのストリーム・タイプに応じて、３つのタイプのうちの１つになる可能性がある。
【０３３２】
現在の「ｔｒａｋ」構造が、ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ（ｓｄｓｍ）またはｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ（ｏｄｓｍ）に関連する場合に、ＭｅｄｉａＩｎｆｏＨｅａｄｅｒ構造３３４３は、「Ｍｐｅｇ４ＭｅｄｉａＨｅａｄｅｒ」データ構造でなければならない。この構造は、メンバ「ｓｉｚｅ」、「ｖｅｒｓｉｏｎ」、および「ｆｌａｇｓ」を有する。この場合に、手順「ＭｅｄｉａＩｎｆｏＨｅａｄｅｒデータ構造の処理」は、次のステップからなる。
１．新しい「ｎｍｈｄ」要素２６３２を作成し、現在の「ｍｉｎｆ」要素２６１６に付加する。
２．ＭｅｄｉａＩｎｆｏＨｅａｄｅｒ構造３３４３のメンバ「ｖｅｒｓｉｏｎ」の値を、新しい「ｎｍｈｄ」要素２６３２の「ｖｅｒｓｉｏｎ」属性に割り当てる。
３．ＭｅｄｉａＩｎｆｏＨｅａｄｅｒ構造３３４３のメンバ「ｆｌａｇｓ」の値を、新しい「ｎｍｈｄ」要素２６３２の「ｆｌａｇｓ」属性に割り当てる。
【０３３３】
現在の「ｔｒａｋ」構造が、オーディオ・ストリームに関連する場合に、ＭｅｄｉａＩｎｆｏＨｅａｄｅｒ構造３３４３は、「ＳｏｕｎｄＭｅｄｉａＨｅａｄｅｒ」データ構造でなければならない。このデータ構造は、メンバ「ｓｉｚｅ」、「ｖｅｒｓｉｏｎ」、「ｆｌａｇｓ」、および「ｂａｌａｎｃｅ」を有する。この場合に、手順「ＭｅｄｉａＩｎｆｏＨｅａｄｅｒデータ構造の処理」は、次のステップからなる。
１．新しい「ｓｍｈｄ」要素２６３２を作成し、現在の「ｍｉｎｆ」要素に付加する。
２．ＭｅｄｉａＩｎｆｏＨｅａｄｅｒ構造３３４３のメンバ「ｖｅｒｓｉｏｎ」の値を、新しい「ｓｍｈｄ」要素２６３２の「ｖｅｒｓｉｏｎ」属性に割り当てる。
３．ＭｅｄｉａＩｎｆｏＨｅａｄｅｒ構造３３４３のメンバ「ｆｌａｇｓ」の値を、新しい「ｓｍｈｄ」要素２６３２の「ｆｌａｇｓ」属性に割り当てる。
４．ＭｅｄｉａＩｎｆｏＨｅａｄｅｒ構造３３４３のメンバ「ｂａｌａｎｃｅ」の値を、新しい「ｓｍｈｄ」要素２６３２の「ｂａｌａｎｃｅ」属性に割り当てる。
【０３３４】
現在の「ｔｒａｋ」構造がビジュアル・ストリームに関連する場合に、ＭｅｄｉａＩｎｆｏＨｅａｄｅｒ構造３３４３は、「ＶｉｄｅｏＭｅｄｉａＨｅａｄｅｒ」データ構造でなければならない。このデータ構造は、メンバ「ｓｉｚｅ」、「ｖｅｒｓｉｏｎ」、「ｆｌａｇｓ」、「ｇｒａｐｈＭｏｄｅ」、「ｏｐＲｅｄ」、「ｏｐＧｒｅｅｎ」、および「ｏｐＢｌｕｅ」を有する。この場合に、手順「ＭｅｄｉａＩｎｆｏＨｅａｄｅｒデータ構造の処理」は、次のステップからなる。
１．新しい「ｖｍｈｄ」要素２６３２を作成し、現在の「ｍｉｎｆ」要素に付加する。
２．ＭｅｄｉａＩｎｆｏＨｅａｄｅｒ構造３３４３のメンバ「ｖｅｒｓｉｏｎ」の値を、新しい「ｖｍｈｄ」要素２６３２の「ｖｅｒｓｉｏｎ」属性に割り当てる。
３．ＭｅｄｉａＩｎｆｏＨｅａｄｅｒ構造３３４３のメンバ「ｆｌａｇｓ」の値を、新しい「ｖｍｈｄ」要素２６３２の「ｆｌａｇｓ」属性に割り当てる。
４．ＭｅｄｉａＩｎｆｏＨｅａｄｅｒ構造３３４３のメンバ「ｇｒａｐｈＭｏｄｅ」の値を、新しい「ｖｍｈｄ」要素２６３２の「ｔｒａｎｓｆｅｒＭｏｄｅ」属性に割り当てる。
５．ＭｅｄｉａＩｎｆｏＨｅａｄｅｒ構造３３４３のメンバ「ｏｐＲｅｄ」の値を、新しい「ｖｍｈｄ」要素２６３２の「ｏｐＣｏｌｏｒＲｅｄ」属性に割り当てる。
６．ＭｅｄｉａＩｎｆｏＨｅａｄｅｒ構造３３４３のメンバ「ｏｐＧｒｅｅｎ」の値を、新しい「ｖｍｈｄ」要素２６３２の「ｏｐＣｏｌｏｒＧｒｅｅｎ」属性に割り当てる。
７．ＭｅｄｉａＩｎｆｏＨｅａｄｅｒ構造３３４３のメンバ「ｏｐＢｌｕｅ」の値を、新しい「ｖｍｈｄ」要素２６３２の「ｏｐＣｏｌｏｒＢｌｕｅ」属性に割り当てる。
【０３３５】
手順「ＳａｍｐｌｅＴａｂｌｅｓデータ構造の処理」
手順「ＳａｍｐｌｅＴａｂｌｅｓデータ構造の処理」は、次のステップからなる。
１．新しい「ｓｔｂｌ」要素２６２８を作成し、現在の「ｍｉｎｆ」要素２６１２に付加する。
２．手順「ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅデータ構造の処理」を実行する。
３．手順「ＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅデータ構造の処理」を実行する。
４．手順「ＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅデータ構造の処理」を実行する。
５．手順「ＳａｍｐｌｅＳｉｚｅＴａｂｌｅデータ構造の処理」を実行する。
６．ＳａｍｐｌｅＴａｂｌｅｓ３４００のメンバＳｙｎｃＳａｍｐｌｅＴａｂｌｅ  ３４１６の値が０でない場合に、手順「ＳｙｎｃＳａｍｐｌｅＴａｂｌｅデータ構造の処理」を実行する。
７．手順「ＳａｍｐｌｅＤｅｓｃｒＴａｂｌｅデータ構造の処理」を実行する。
【０３３６】
手順「ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅデータ構造の処理」
ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅデータ構造は、サンプル・テーブル・データ構造３４２０からなり、このサンプル・テーブル・データ構造３４２０では、メンバ「ｔａｂｌｅ配列」の各項目が、ＳａｍｐｌｅＴｏＣｈｕｎｋ構造３４６０からなる。手順「ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅデータ構造の処理」は、次のステップからなる。
１．新しい「ｓｔｓｃ」要素２６５６を作成し、現在の「ｓｔｂｌ」要素２６２８、２６５２に付加する。
２．ＳａｍｐｌｅＴａｂｌｅｓのメンバＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅ  ３４０６を、サンプル・テーブル構造３４２０「ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅ」に割り当てる。
３．ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅのメンバ「ｖｅｒｓｉｏｎ」３４２６の値を、新しい「ｓｔｓｃ」要素２６５６の「ｖｅｒｓｉｏｎ」属性に割り当てる。
４．ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅのメンバ「ｆｌａｇｓ」３４２６の値を、新しい「ｓｔｓｃ」要素２６５６の「ｆｌａｇｓ」属性に割り当てる。
５．ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅのメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４２８の値を、量「ｎｕｍＥｎｔｒｉｅｓ」に割り当てる。値０を量「ｅｎｔｒｙ」に割り当て、量「ｅｎｔｒｙ」の値が量「ｎｕｍＥｎｔｒｉｅｓ」の値と等しくなるまで、次のステップを繰り返す。
６．新しい「ｓａｍｐｌｅＴｏＣｈｕｎｋ」要素を作成し、新しい「ｓｔｓｃ」要素２６５６に付加する。
７．ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅのメンバ「ｔａｂｌｅ配列」３４３０の項目「ｅｎｔｒｙ」を、ＳａｍｐｌｅＴｏＣｈｕｎｋ構造３４６０「ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅＥｎｔｒｙ」に割り当てる。
８．ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅＥｎｔｒｙのメンバ「ｆｉｒｓｔＣｈｕｎｋ」３４６３の値を、新しい「ｓａｍｐｌｅＴｏＣｈｕｎｋ」要素の「ｆｉｒｓｔＣｈｕｎｋ」属性に割り当てる。
９．ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅＥｎｔｒｙのメンバ「ｎｕｍＳａｍｐｌｅｓ」３４６６の値を、新しい「ｓａｍｐｌｅＴｏＣｈｕｎｋ」要素の「ｎｕｍＳａｍｐｌｅｓ」属性に割り当てる。
１０．ＳａｍｐｌｅＴｏＣｈｕｎｋＴａｂｌｅＥｎｔｒｙのメンバ「ｄｅｓｃｒｉｐｔｉｏｎ」３４６８の値を、新しい「ｓａｍｐｌｅＴｏＣｈｕｎｋ」要素の「ｓａｍｐｌｅＤｅｓｃ」属性に割り当てる。
１１．量「ｅｎｔｒｙ」の値を「１」だけ増分する。
【０３３７】
手順「ＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅデータ構造の処理」
ＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅデータ構造３４０８は、メンバ「ｔａｂｌｅ配列」の各項目が整数のシーケンスからなるサンプル・テーブル・データ構造３４２０からなる。手順「ＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅデータ構造の処理」は、次のステップからなる。
１．新しい「ｓｔｃｏ」要素２６６４を作成し、現在の「ｓｔｂｌ」要素２６５２に付加する。
２．ＳａｍｐｌｅＴａｂｌｅｓメンバＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅ  ３４０８を、サンプル・テーブル構造３４２０「ＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅ」に割り当てる。
３．ＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅメンバ「ｖｅｒｓｉｏｎ」の値を、新しい「ｓｔｃｏ」要素２６６４の「ｖｅｒｓｉｏｎ」属性に割り当てる。
４．ＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅメンバ「ｆｌａｇｓ」の値を、新しい「ｓｔｃｏ」要素２６６４の「ｆｌａｇｓ」属性に割り当てる。
５．ＣｈｕｎｋＯｆｆｓｅｔＴａｂｌｅメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４２８の値を、量「ｎｕｍＥｎｔｒｉｅｓ」に割り当てる。値０を量「ｅｎｔｒｙ」に割り当て、量「ｅｎｔｒｙ」の値が量「ｎｕｍＥｎｔｒｉｅｓ」の値と等しくなるまで、次のステップを繰り返す。
６．新しい「ｃｈｕｎｋＯｆｆｓｅｔ」要素を作成し、新しい「ｓｔｃｏ」要素２６６４に付加する。
７．メンバ「ｔａｂｌｅ配列」の項目「ｅｎｔｒｙ」の値を量「ｏｆｆｓｅｔ」に割り当てる。
８．量「ｏｆｆｓｅｔ」の値を、新しい「ｃｈｕｎｋＯｆｆｓｅｔ」要素の「ｏｆｆｓｅｔ」属性に割り当てる。
９．量「ｏｆｆｓｅｔ」の値を、ＱｔＩｎｆｏメンバ「ｍｄａｔ配列」３１１３の各項目３１６０のメンバ「ｓｔａｒｔ」３１６６および「ｓｉｚｅ」３１６３の値と比較して、指定されたオフセット値に関連するｍｄａｔアトム７０６のインデックス「ｍｄａｔＩｄ」の値を決定する。量「ｍｄａｔＩｄ」の値は、量「ｏｆｆｓｅｔ」の値が、メンバ「ｓｔａｒｔ」３１６６の値より大きく、メンバ「ｓｔａｒｔ」３１６６と「ｓｉｚｅ」３１６３の合計より小さい、「ｍｄａｔ配列」３１１３の項目のインデックスによって決定される。
１０．ｍｄａｔ配列項目「ｍｄａｔＩｄ」のメンバ「ｓｉｚｅ」３１６３の値を、量「ｍｄａｔＳｔａｒｔ」に割り当てる。「ｍｄａｔＳｔａｒｔ」の値に「８」を加え、その結果を量「ｏｆｆｓｅｔ」の値から引き、その結果を量「ｍｄａｔＯｆｆｓｅｔ」に割り当てる。
１１．量「ｍｄａｔＩｄ」の値を、新しい「ｃｈｕｎｋＯｆｆｓｅｔ」要素の「ｍｄａｔＩｄ」属性に割り当てる。
１２．量「ｍｄａｔＯｆｆｓｅｔ」の値を、新しい「ｃｈｕｎｋＯｆｆｓｅｔ」要素の「ｍｄａｔＯｆｆｓｅｔ」属性に割り当てる。
１３．量「ｅｎｔｒｙ」の値を「１」だけ増分する。
【０３３８】
手順「ＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅデータ構造の処理」
ＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅデータ構造３４１０は、メンバ「ｔａｂｌｅ配列」の各項目がＴｉｍｅＴｏＳａｍｐｌｅ構造３４７０からなるサンプル・テーブル・データ構造３４２０からなる。手順「ＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅデータ構造の処理」は、次のステップからなる。
１．新しい「ｓｔｔｓ」要素２６６０を作成し、現在の「ｓｔｂｌ」要素に割り当てる。
２．ＳａｍｐｌｅＴａｂｌｅｓメンバＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅ  ３４１０を、サンプル・テーブル構造３４２０「ＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅ」に割り当てる。
３．ＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅメンバ「ｖｅｒｓｉｏｎ」３４２６の値を、新しい「ｓｔｔｓ」要素２６６０の「ｖｅｒｓｉｏｎ」属性に割り当てる。
４．ＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅメンバ「ｆｌａｇｓ」３４２６の値を、新しい「ｓｔｔｓ」要素２６６０の「ｆｌａｇｓ」属性に割り当てる。
５．ＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４２８の値を、量「ｎｕｍＥｎｔｒｉｅｓ」に割り当てる。値０を量「ｅｎｔｒｙ」に割り当て、量「ｅｎｔｒｙ」の値が量「ｎｕｍＥｎｔｒｉｅｓ」の値と等しくなるまで、次のステップを繰り返す。
６．新しい「ｔｉｍｅＴｏＳａｍｐｌｅ」要素を作成し、新しい「ｓｔｔｓ」要素２６６０に付加する。
７．ＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅメンバ「ｔａｂｌｅ配列」３４３０の項目「ｅｎｔｒｙ」を、ＴｉｍｅＴｏＳａｍｐｌｅ構造３４７０「ＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅＥｎｔｒｙ」に割り当てる。
８．ＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅＥｎｔｒｙメンバ「ｃｏｕｎｔ」３４７３の値を、新しい「ｔｉｍｅＴｏＳａｍｐｌｅ」要素の「ｃｏｕｎｔ」属性に割り当てる。
９．ＴｉｍｅＴｏＳａｍｐｌｅＴａｂｌｅＥｎｔｒｙメンバ「ｄｕｒａｔｉｏｎ」３４７６の値を、新しい「ｔｉｍｅＴｏＳａｍｐｌｅ」要素の「ｄｕｒａｔｉｏｎ」属性に割り当てる。
１０．量「ｅｎｔｒｙ」の値を「１」だけ増分する。
【０３３９】
手順「ＳａｍｐｌｅＳｉｚｅＴａｂｌｅデータ構造の処理」
手順「ＳａｍｐｌｅＳｉｚｅＴａｂｌｅデータ構造の処理」は、次のステップからなる。
１．新しい「ｓｔｓｚ」要素２６６８を作成し、現在の「ｓｔｂｌ」要素２６５２に付加する。
２．ＳａｍｐｌｅＴａｂｌｅｓメンバＳａｍｐｌｅＳｉｚｅＴａｂｌｅ  ３４１３を、ＳａｍｐｌｅＳｉｚｅＴａｂｌｅ構造３４４０「ＳａｍｐｌｅＳｉｚｅＴａｂｌｅ」に割り当てる。
３．ＳａｍｐｌｅＳｉｚｅＴａｂｌｅメンバ「ｖｅｒｓｉｏｎ」３４４６の値を、新しい「ｓｔｓｚ」要素２６６８の「ｖｅｒｓｉｏｎ」属性に割り当てる。
４．ＳａｍｐｌｅＳｉｚｅＴａｂｌｅメンバ「ｆｌａｇｓ」３４４６の値を、新しい「ｓｔｓｚ」要素２６６８の「ｆｌａｇｓ」属性に割り当てる。
５．ＳａｍｐｌｅＳｉｚｅＴａｂｌｅメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４５３の値を、量「ｎｕｍＥｎｔｒｉｅｓ」に割り当てる。
６．量「ｎｕｍＥｎｔｒｉｅｓ」の値を、新しい「ｓｔｓｚ」要素２６６８の「ｎｕｍＳａｍｐｌｅｓ」属性に割り当てる。
７．ＳａｍｐｌｅＳｉｚｅＴａｂｌｅ構造３４１３、３４４０メンバ「ｓａｍｐｌｅＳｉｚｅ」３４５０の値が０でない場合に、ＳａｍｐｌｅＳｉｚｅＴａｂｌｅ構造３４１３、３４４０メンバ「ｓａｍｐｌｅＳｉｚｅ」３４５０の値を、新しい「ｓｔｓｚ」要素の「ｓｉｚｅＦｏｒＡｌｌ」属性に割り当てる。この場合に、この処理は完了する。
８．ＳａｍｐｌｅＳｉｚｅＴａｂｌｅ構造３４１３、３４４０メンバ「ｓａｍｐｌｅＳｉｚｅ」３４５０が０である場合に、値０を量「ｅｎｔｒｙ」に割り当て、量「ｅｎｔｒｙ」の値が量「ｎｕｍＥｎｔｒｉｅｓ」の値と等しくなるまで、次のステップを繰り返す。
９．新しい「ｓａｍｐｌｅＳｉｚｅ」要素を作成し、新しい「ｓｔｓｚ」要素２６６８に付加する。
１０．ＳａｍｐｌｅＳｉｚｅＴａｂｌｅメンバ「ｔａｂｌｅ配列」３４５６の項目「ｅｎｔｒｙ」の値を、新しい「ｓａｍｐｌｅＳｉｚｅ」要素の「ｓｉｚｅ」属性に割り当てる。
１１．量「ｅｎｔｒｙ」の値を「１」だけ増分する。
【０３４０】
手順「ＳｙｎｃＳａｍｐｌｅＴａｂｌｅデータ構造の処理」
ＳｙｎｃＳａｍｐｌｅＴａｂｌｅデータ構造３４１６は、メンバ「ｔａｂｌｅ配列」の各項目が整数のシーケンスからなるサンプル・テーブル・データ構造３４２０からなる。手順「ＳｙｎｃＳａｍｐｌｅＴａｂｌｅデータ構造の処理」は、次のステップからなる。
１．新しい「ｓｔｓｓ」要素２６７２を作成し、現在の「ｓｔｂｌ」要素２６５２に付加する。
２．ＳａｍｐｌｅＴａｂｌｅｓメンバＳｙｎｃＳａｍｐｌｅＴａｂｌｅ  ３４１６を、サンプル・テーブル構造３４２０「ＳｙｎｃＳａｍｐｌｅＴａｂｌｅ」に割り当てる。
３．ＳｙｎｃＳａｍｐｌｅＴａｂｌｅメンバ「ｖｅｒｓｉｏｎ」３４２６の値を、新しい「ｓｔｓｓ」要素２６７２の属性「ｖｅｒｓｉｏｎ」に割り当てる。
４．ＳｙｎｃＳａｍｐｌｅＴａｂｌｅメンバ「ｆｌａｇｓ」３４２６の値を、新しい「ｓｔｓｓ」要素２６７２の属性「ｆｌａｇｓ」に割り当てる。
５．ＳｙｎｃＳａｍｐｌｅＴａｂｌｅメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４２８の値を、量「ｎｕｍＥｎｔｒｉｅｓ」に割り当てる。値０を量「ｅｎｔｒｙ」に割り当て、量「ｅｎｔｒｙ」の値が量「ｎｕｍＥｎｔｒｉｅｓ」の値と等しくなるまで、次のステップを繰り返す。
６．新しい「ｓｙｎｃＳａｍｐｌｅ」要素を作成し、新しい「ｓｔｓｓ」要素２６７２に割り当てる。
７．ＳｙｎｃＳａｍｐｌｅＴａｂｌｅメンバ「ｔａｂｌｅ配列」３４３０の項目「ｅｎｔｒｙ」の値を、新しい「ｓｙｎｃＳａｍｐｌｅ」要素の属性「ｓａｍｐｌｅＮｕｍｂｅｒ」に割り当てる。
８．量「ｅｎｔｒｙ」の値を「１」だけ増分する。
【０３４１】
手順「ＳａｍｐｌｅＤｅｓｃｒＴａｂｌｅデータ構造の処理」
ＳａｍｐｌｅＤｅｓｃｒＴａｂｌｅデータ構造３４１８は、メンバ「ｔａｂｌｅ配列」の各項目がＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎ構造３４８０からなるサンプル・テーブル・データ構造３４２０からなる。手順「ＳａｍｐｌｅＤｅｓｃｒＴａｂｌｅデータ構造の処理」は、次のステップからなる。
１．新しい「ｓｔｓｄ」要素２６７６を作成し、現在の「ｓｔｂｌ」要素２６５２に付加する。
２．ＳａｍｐｌｅＴａｂｌｅｓメンバＳａｍｐｌｅＤｅｓｃｒＴａｂｌｅ  ３４１８を、サンプル・テーブル構造３４２０「ＳａｍｐｌｅＤｅｓｃｒＴａｂｌｅ」に割り当てる。
３．ＳａｍｐｌｅＤｅｓｃｒＴａｂｌｅメンバ「ｖｅｒｓｉｏｎ」３４２６の値を、新しい「ｓｔｓｄ」要素２６７６の属性「ｖｅｒｓｉｏｎ」に割り当てる。
４．ＳａｍｐｌｅＤｅｓｃｒＴａｂｌｅメンバ「ｆｌａｇｓ」３４２６の値を、新しい「ｓｔｓｄ」要素２６７６の属性「ｆｌａｇｓ」に割り当てる。
５．ＳａｍｐｌｅＤｅｓｃｒＴａｂｌｅメンバ「ｎｕｍＥｎｔｒｉｅｓ」３４２８の値を、量「ｎｕｍＥｎｔｒｉｅｓ」に割り当てる。値０を量「ｅｎｔｒｙ」に割り当て、量「ｅｎｔｒｙ」の値が量「ｎｕｍＥｎｔｒｉｅｓ」の値と等しくなるまで、次のステップを繰り返す。
６．ＳａｍｐｌｅＤｅｓｃｒＴａｂｌｅメンバ「ｔａｂｌｅ配列」３４３０の項目「ｅｎｔｒｙ」を、ＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎ構造３４８０「ＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎ」に割り当てる。
７．ＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎメンバ「ｄａｔａＦｏｒｍａｔ」の値が「ｍｐ４ａ」に対応する場合に、新しい「ｍｐ４ａ」要素を作成し、新しい「ｓｔｓｄ」要素２６７６に付加する。ＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎメンバ「ｄａｔａＦｏｒｍａｔ」の値が「ｍｐ４ｖ」に対応する場合に、新しい「ｍｐ４ｖ」要素を作成し、新しい「ｓｔｓｄ」要素２６７６に付加する。ＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎメンバ「ｄａｔａＦｏｒｍａｔ」の値が「ｍｐ４ｓ」に対応する場合に、新しい「ｍｐ４ｓ」要素を作成し、新しい「ｓｔｓｄ」要素２６７６に付加する。結果の要素（「ｍｐ４ａ」、「ｍｐ４ｖ」、または「ｍｐ４ｓ」）を、「ｍｐ４＊」要素２６８０と呼ぶ。
８．ＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎメンバ「ｄａｔａＲｅｆｅｒｅｎｃｅ」３４８８の値を、新しい「ｍｐ４＊」要素２６８０の属性「ｄａｔａＲｅｆＩｎｄｅｘ」に割り当てる。
９．新しい「ｅｓｄｓ」要素２６８４を作成し、新しい「ｍｐ４＊」要素２６８０に付加する。
１０．ＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎメンバ「ｅｓｄＶｅｒｓｉｏｎ」３４９０の値を、新しい「ｅｓｄｓ」要素２６８４の属性「ｖｅｒｓｉｏｎ」に割り当てる。
１１．ＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎメンバ「ｅｓｄＤａｔａ」３４９６の値を、バイトの配列を表す量「ｅｓｄＤａｔａ」に割り当て、値０を量「ｅｓｄＰｏｓ」に割り当てる。
１２．手順「ｅｓｄＤａｔａ配列のデコード」を実行する。
１３．量「ｅｎｔｒｙ」の値を「１」だけ増分する。
【０３４２】
手順「ｅｓｄＤａｔａ配列のデコード」
手順「ｅｓｄＤａｔａ配列のデコード」は、次のステップからなる。
１．配列「ｅｓｄＤａｔａ」の項目「ｅｓｄＰｏｓ」の値を、量「ＥｓＤｅｓｃＴａｇ」に割り当て、量「ｅｓｄＰｏｓ」の値を「１」だけ増分する。
２．手順「タグ・サイズの取得」を使用して、量「ｎｕｍＢｙｔｅｓ」の値を得る。
３．量「ＥｓＤｅｓｃＴａｇ」の値が、定数「ＥＳ＿ＤｅｓｃｒＴａｇ」の値（３）と等しい場合に、次のステップを実行する。そうでない場合には、終了する。
４．新しい「ＥＳ＿Ｄｅｓｃｒ」要素２６８８、２７００を作成し、現在の「ｅｓｄｓ」要素２６８４に付加する。
５．量「ｎｕｍＢｙｔｅｓ」の値を、新しい「ＥＳ＿Ｄｅｓｃｒ」要素２６８８、２７００の属性「ｓｉｚｅ」に割り当てる。
６．配列「ｅｓｄＤａｔａ」の項目「ｅｓｄＰｏｓ」および「ｅｓｄＰｏｓ＋１」の値を、１６ビット整数に組み合わせ、その結果を新しい「ＥＳ＿Ｄｅｓｃｒ」要素２６８８の「ＥＳ＿ＩＤ」属性２７００に割り当て、量「ｅｓｄＰｏｓ」の値を「２」だけ増分する。
７．配列「ｅｓｄＤａｔａ」の項目「ｅｓｄＰｏｓ」の値を、量「ｆｌａｇｓＡｎｄＰｒｉｏｒｉｔｙ」に割り当て、この値の上位５ビットを、量「ｐｒｉｏｒｉｔｙ」に割り当て、下位３ビットを、量「ｆｌａｇｓ」に割り当て、量「ｅｓｄＰｏｓ」の値を、「１」だけ増分する。
８．量「ｐｒｉｏｒｉｔｙ」の値を、新しい「ＥＳ＿Ｄｅｓｃｒ」要素２６８８、２７００の属性「ｐｒｉｏｒｉｔｙ」に割り当てる。
９．量「ｆｌａｇｓ」の値を、新しい「ＥＳ＿Ｄｅｓｃｒ」要素２６８８、２７００の属性「ｆｌａｇｓ」に割り当てる。
１０．量「ｆｌａｇｓ」の最下位ビットが「１」である場合に、値「真」を新しい「ＥＳ＿Ｄｅｓｃｒ」要素２６８８の属性「ＯＣＲｓｔｒｅａｍＦｌａｇ」に割り当てる。
１１．量「ｎｕｍＢｙｔｅｓ」の値が「１」未満になるまで、次のステップを繰り返す。
１２．配列「ｅｓｄＤａｔａ」の項目「ｅｓｄＰｏｓ」の値を量「ｄｅｓｃｒＴａｇ」に割り当て、量「ｎｕｍＢｙｔｅｓ」の値を「１」だけ減分し、量「ｅｓｄＰｏｓ」の値を「１」だけ増分する。
１３．手順「タグ・サイズの取得」を使用して、量「ｄｅｓｃｒＳｉｚｅ」の値を決定し、量「ｎｕｍＢｙｔｅｓ」の値を、この量の値を指定するのに使用されるバイト数だけ減分する。
１４．量「ｎｕｍＢｙｔｅｓ」の値を、量「ｄｅｓｃｒＳｉｚｅ」の値だけ減分する。
１５．量「ｄｅｓｃｒＴａｇ」の値が、定数「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒＴａｇ」の値（４）の値と等しい場合に、手順「デコーダ構成記述子の処理」を実行する。
１６．量「ｄｅｓｃｒＴａｇ」の値が、定数「ＳＬＣｏｎｆｉｇＤｅｓｃｒＴａｇ」の値（６）の値と等しい場合に、手順「ｓｌ構成記述子の処理」を実行する。
１７．そうでない（すなわち、量「ｄｅｓｃｒＴａｇ」の値が「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒＴａｇ」および「ＳＬＣｏｎｆｉｇＤｅｓｃｒＴａｇ」のいずれとも等しくない）場合に、量「ｅｓｄＰｏｓ」の値を量「ｉｎｆｏＳｉｚｅ」の値だけ増分する。
【０３４３】
手順「デコーダ構成記述子の処理」
手順「デコーダ構成記述子の処理」は、次のステップからなる。
１．新しい「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０を作成し、現在の「ＥＳ＿Ｄｅｓｃｒ」要素２７００に付加する。
２．量「ｄｅｓｃｒＳｉｚｅ」の値を、新しい「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０の「ｓｉｚｅ」属性に割り当てる。
３．配列「ｅｓｄＤａｔａ」の項目「ｅｓｄＰｏｓ」の値を、量「ｏｂｊｅｃｔＴｙｐｅ」および新しい「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０の属性「ｏｂｊｅｃｔＴｙｐｅ」に割り当て、量「ｅｓｄＰｏｓ」の値を「１」だけ増分する。
４．配列「ｅｓｄＤａｔａ」の項目「ｅｓｄＰｏｓ」の値を、量「ｓｔｒｅａｍＴｙｐｅ」に割り当て、量「ｅｓｄＰｏｓ」の値を「１」だけ増分する。
５．量「ｓｔｒｅａｍＴｙｐｅ」の第２ビット（「２」ビット）が、０でない場合に、値「真」を、新しい「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０の属性「ｕｐＳｔｒｅａｍ」に割り当てる。
６．量「ｓｔｒｅａｍＴｙｐｅ」の値を４で割り（右に２ビットだけシフトし）、その結果を、量「ｓｔｒｅａｍＴｙｐｅ」および新しい「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０の属性「ｓｔｒｅａｍＴｙｐｅ」に割り当てる。
７．配列「ｅｓｄＤａｔａ」の次の３つの項目を、２４ビット値に組み合わせ、その結果を、新しい「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０の属性「ｂｕｆｆｅｒＳｉｚｅ」に割り当て、量「ｅｓｄＰｏｓ」の値を「３」だけ増分する。
８．配列「ｅｓｄＤａｔａ」の次の４つの項目を、３２ビット値に組み合わせ、その結果を、新しい「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０の属性「ｍａｘＢｉｔｒａｔｅ」に割り当て、量「ｅｓｄＰｏｓ」の値を「４」だけ増分する。
９．配列「ｅｓｄＤａｔａ」の次の４つの項目を、３２ビット値に組み合わせ、その結果を、新しい「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０の属性「ａｖｇＢｉｔｒａｔｅ」に割り当て、量「ｅｓｄＰｏｓ」の値を「４」だけ増分する。
１０．量「ｄｅｓｃｒＳｉｚｅ」の値を１３だけ減分する。
１１．量「ｄｅｓｃｒＳｉｚｅ」の値が１を超える場合に、量「ｄｅｓｃｒＳｉｚｅ」の値が１未満になるまで、次のステップを繰り返す。
１２．配列「ｅｓｄＤａｔａ」の次の項目を、量「ｉｎｆｏＴａｇ」に割り当て、量「ｄｅｓｃｒＳｉｚｅ」の値を「１」だけ減分する。
１３．手順「タグ・サイズの取得」を使用して、量「ｉｎｆｏＴａｇ」に割り当てられた値に従うタグ・サイズの値を決定し、その結果を量「ｉｎｆｏＴａｇ」に割り当て、量「ｄｅｓｃｒＳｉｚｅ」の値を、この量の値を指定するのに使用されるバイト数だけ減分する。
１４．量「ｄｅｓｃｒＳｉｚｅ」の値を、量「ｉｎｆｏＳｉｚｅ」の値だけ減分する。
１５．量「ｉｎｆｏＴａｇ」の値が、定数「ＤｅｃｏｄｅｒＳｐｅｃｉｆｉｃＩｎｆｏＴａｇ」の値（５）と等しい場合に、手順「デコーダ固有情報の処理」を実行する。そうでない場合には、量「ｅｓｄＰｏｓ」の値を、量「ｉｎｆｏＳｉｚｅ」の値だけ増分する。
【０３４４】
手順「ｓｌ構成記述子の処理」
手順「ｓｌ構成記述子の処理」は、次のステップからなる。
１．新しい「ＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７６０を作成し、現在の「ＥＳ＿Ｄｅｓｃｒ」要素２７００に付加する。
２．配列「ｅｓｄＤａｔａ」の項目「ｅｓｄＰｏｓ」の値を、新しい「ＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７６０の属性「ｐｒｅｄｅｆｉｎｅｄ」に割り当て、量「ｅｓｄＰｏｓ」の値を「１」だけ増分する。
【０３４５】
手順「デコーダ固有情報の処理」
配列「ｅｓｄＤａｔａ」内の、「ＤｅｃｏｄｅｒＳｐｅｃｉｆｉｃＩｎｆｏＴａｇ」に続く項目の内容は、量「ｓｔｒｅａｍＴｙｐｅ」および「ｏｂｊｅｃｔＴｙｐｅ」の値に依存する。
【０３４６】
量「ｓｔｒｅａｍＴｙｐｅ」の値が「３」である場合には、手順「ＢＩＦＳ構成の処理」を実行する。
【０３４７】
量「ｓｔｒｅａｍＴｙｐｅ」の値が「４」であり、量「ｏｂｊｅｃｔＴｙｐｅ」の値が「１０８」である場合には、手順「ＪＰＥＧ構成の処理」を実行する。
【０３４８】
量「ｓｔｒｅａｍＴｙｐｅ」の値が「４」であり、量「ｏｂｊｅｃｔＴｙｐｅ」の値が「１０８」でない場合には、手順「ビジュアル構成の処理」を実行する。
【０３４９】
量「ｓｔｒｅａｍＴｙｐｅ」の値が「５」である場合には、手順「オーディオ構成の処理」を実行する。
【０３５０】
手順「ＢＩＦＳ構成の処理」
手順「ＢＩＦＳ構成の処理」は、次のステップからなる。これらのステップは、「ｅｓｄＤａｔａ」配列内の、項目「ｅｓｄＰｏｓ」から始まる、「ｉｎｆｏＳｉｚｅ」個の項目のシーケンスを、ビットのシーケンスとして扱う。
１．新しい「ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」要素２７２０を作成し、現在の「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０に付加する。
２．量「ｏｂｊｅｃｔＴｙｐｅ」の値が「２」である場合に、次の量の値を、配列「ｅｓｄＤａｔａ」から（項目「ｅｓｄＰｏｓ」から始めて）抽出し、結果の値のそれぞれを、新しいＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素の同一の名前の属性に割り当てる。
ａ．ｕｓｅ３ＤＭｅｓｈＣｏｄｉｎｇ（１ビット）
ｂ．ｕｓｅＰｒｅｄｉｃｔｉｖｅＭＦＦｉｅｌｄ（１ビット）
ｃ．ｎｕｍＮｏｄｅＩｄＢｉｔｓ（５ビット）
ｄ．ｎｕｍＲｏｕｔｅＩｄＢｉｔｓ（５ビット）
ｅ．ｎｕｍＰＲＯＴＯＩＤｂｉｔｓ（５ビット）
３．そうでない（すなわち、量「ｏｂｊｅｃｔＴｙｐｅ」の値が「２」でない）場合に、次の量の値を、配列「ｅｓｄＤａｔａ」から（項目「ｅｓｄＰｏｓ」から始めて）抽出し、結果の値のそれぞれを、新しいＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素の同一の名前の属性に割り当てる。
ａ．ｎｕｍＮｏｄｅＩｄＢｉｔｓ（５ビット）
ｂ．ｎｕｍＲｏｕｔｅＩｄＢｉｔｓ（５ビット）
４．配列「ｅｓｄＤａｔａ」の次のビットの値を抽出する。結果が「０」の場合には、値「偽」を、新しいＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素の属性「ｉｓＣｏｍｍａｎｄＳｔｒｅａｍ」に割り当て、ステップ８にスキップする。結果が「１」の場合には、値「真」を、属性「ｉｓＣｏｍｍａｎｄＳｔｒｅａｍ」に割り当て、次のステップを実行する。
５．配列「ｅｓｄＤａｔａ」の次のビットの値を抽出する。結果が「０」の場合には、値「偽」を、新しいＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素の属性「ｐｉｘｅｌ  ｍｅｔｒｉｃ」に割り当てる。そうでない場合には、値「真」を、属性「ｐｉｘｅｌ  ｍｅｔｒｉｃ」に割り当てる。
６．配列「ｅｓｄＤａｔａ」の次のビットの値を抽出する。結果が「０」の場合には、値「偽」を、新しいＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素の属性「ｈａｓＳｉｚｅ」に割り当て、ステップ８にスキップする。結果が「１」の場合には、値「真」を、属性「ｈａｓＳｉｚｅ」に割り当て、次のステップを実行する。
７．次の量を、配列「ｅｓｄＤａｔａ」から（項目「ｅｓｄＰｏｓ」から始めて）抽出し、結果の値のそれぞれを、新しいＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素の同一の名前の属性に割り当てる。
ａ．ｐｉｘｅｌＷｉｄｔｈ（１６ビット）
ｂ．ｐｉｘｅｌＨｅｉｇｈｔ（１６ビット）
８．量「ｅｓｄＰｏｓ」の値を、量「ｉｎｆｏＳｉｚｅ」の値だけ増分する。
【０３５１】
手順「ＪＰＥＧ構成の処理」
手順「ＪＰＥＧ構成の処理」は、次のステップからなる。
１．新しい「ＪＰＥＧ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」要素２７３０を作成し、現在の「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０に付加する。
２．量「ｉｎｆｏＳｉｚｅ」の値を、新しい「ＪＰＥＧ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」要素２７３０の「ｓｉｚｅ」属性に割り当てる。
３．配列「ｅｓｄＤａｔａ」の次の２項目を、１６ビット値に組み合わせ、その結果を新しい「ＪＰＥＧ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」要素２７３０の属性「ｈｅａｄｅｒＬｅｎｇｔｈ」に割り当て、量「ｅｓｄＰｏｓ」の値を、「２」だけ増分する。
４．配列「ｅｓｄＤａｔａ」の次の２項目を、１６ビット値に組み合わせ、その結果を新しい「ＪＰＥＧ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」要素２７３０の属性「Ｘｄｅｎｓｉｔｙ」に割り当て、量「ｅｓｄＰｏｓ」の値を、「２」だけ増分する。
５．配列「ｅｓｄＤａｔａ」の次の２項目を、１６ビット値に組み合わせ、その結果を新しい「ＪＰＥＧ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」要素２７３０の属性「Ｙｄｅｎｓｉｔｙ」に割り当て、量「ｅｓｄＰｏｓ」の値を、「２」だけ増分する。
６．配列「ｅｓｄＤａｔａ」の項目「ｅｓｄＰｏｓ」の値を、新しい「ＪＰＥＧ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」要素２７３０の属性「ｎｕｍＣｏｍｐｏｎｅｎｔｓ」に割り当て、量「ｅｓｄＰｏｓ」の値を、「１」だけ増分する。
【０３５２】
手順「ビジュアル構成の処理」
手順「ビジュアル構成の処理」は、次のステップからなる。
１．新しい「ＶｉｓｕａｌＣｏｎｆｉｇ」要素２７４０を作成し、現在の「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０に付加する。
２．量「ｉｎｆｏＳｉｚｅ」の値を、新しい「ＶｉｓｕａｌＣｏｎｆｉｇ」要素２７４０の「ｓｉｚｅ」属性に割り当てる。
３．量「ｅｓｄＰｏｓ」の値を、量「ｉｎｆｏＳｉｚｅ」の値だけ増分する。
【０３５３】
手順「オーディオ構成の処理」
手順「オーディオ構成の処理」は、次のステップからなる。
１．新しい「ＡｕｄｉｏＣｏｎｆｉｇ」要素２７５０を作成し、現在の「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０に付加する。
２．量「ｉｎｆｏＳｉｚｅ」の値を、新しい「ＡｕｄｉｏＣｏｎｆｉｇ」要素２７５０の「ｓｉｚｅ」属性に割り当てる。
３．量「ｅｓｄＰｏｓ」の値を、量「ｉｎｆｏＳｉｚｅ」の値だけ増分する。
【０３５４】
中間ｘｍｌ文書の対に基づくＸＭＴ−Ａ  ｘｍｌ文書の作成
図１２８からわかるように、ＸＭＴ−Ａ文書１００を作成する処理は、次のステップからなる。
１．動作５９００で、標準ｘｍｌ手段を使用して、新しい空のＸＭＴ−Ａ文書１００を作成する。
２．動作５９２０で、手順ＸＭＴ−Ａ  Ｈｅａｄｅｒの作成を実行する。
３．動作５９４０で、標準ｘｍｌ手段を使用して、新しい空のＸＭＴ−Ａ  Ｂｏｄｙ要素１２０を作成し、新しいＸＭＴ−Ａ文書１００に付加する。
４．動作５９６０で、手順「ＯＤコマンドのｐａｒ要素の作成」を実行する。
５．動作５９８０で、手順「ＢＩＦＳコマンドのｐａｒ要素の作成」を実行する。
【０３５５】
ステップ２、４、および５を、下で説明する。
【０３５６】
これらのステップに備えて、ｍｐ４ｆｉｌｅ文書に従属する「ｍｏｏｖ」要素の「ｔｉｍｅＳｃａｌｅ」属性の値を、量「ｔｉｍｅＳｃａｌｅ」に割り当てる。
【０３５７】
手順ＸＭＴ−Ａ  Ｈｅａｄｅｒ要素の作成
図１２９からわかるように、手順ＸＭＴ−Ａ  Ｈｅａｄｅｒの作成は、次のステップからなる。
１．動作６０００で、標準ｘｍｌ手段を使用して、新しいＨｅａｄｅｒ要素１１０を作成し、ＸＭＴ−Ａ文書１００に付加する。
２．動作６０１０で、手順「ＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒの作成」を実行する。
３．動作６０２０で、手順「Ｐｒｏｆｉｌｅｓ要素の作成」を実行する。
４．動作６０３０で、手順「Ｄｅｓｃｒ要素の作成」を実行する。
５．動作６０４０で、標準ｘｍｌ手段を使用して、ｍｐ４ｆｉｌｅ文書２３００内のｍｐ４ｆｉｏｄｓ要素２３３０、２３６０に従属する各要素を選択する。
６．動作６０５０で、ｍｐ４ｆｉｏｄｓ要素２３３０、２３６０に従属するＥｓＩｄＩｎｃ要素２３８０ごとに、手順「ＥｓＩｄＩｎｃ要素の処理」を実行する。
【０３５８】
ステップ２の手順「ＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒの作成」は、次の動作からなる。
ａ．標準ｘｍｌ手段を使用して、新しいＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素１３０を作成し、新しいＨｅａｄｅｒ要素１１０に付加する。
ｂ．標準ｘｍｌ手段を使用して、ｍｐ４ｆｉｌｅ文書２３００に含まれるｍｏｏｖ要素２３２０を突き止める。
ｃ．標準ｘｍｌ手段を使用して、ｍｏｏｖ要素２３２０に含まれるｍｐ４ｆｉｏｄｓ要素２３３０、２３６０を突き止める。
ｄ．プレフィックス「ＩＯＤＩＤ：」と、それに続く、ｍｐ４ｆｉｏｄｓ要素２３６０のｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ属性２３７０の値からなる新しいストリングを作成し、このストリングの値を、ＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素１３０のＯＤＩＤ属性に割り当てる。
【０３５９】
ステップ３の手順「Ｐｒｏｆｉｌｅｓ要素の作成」は、次の動作からなる。
ａ．標準ｘｍｌ手段を使用して、新しいＰｒｏｆｉｌｅｓ要素１５０を作成し、新しいＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素１３０に付加する。
ｂ．ｍｐ４ｆｉｏｄｓ要素２３６０のｉｎｃｌｕｄｅＩｎｌｉｎｅＰｒｏｆｉｌｅｓＦｌａｇ属性の値を、Ｐｒｏｆｉｌｅｓ要素１５０のｉｎｃｌｕｄｅＩｎｌｉｎｅＰｒｏｆｉｌｅＬｅｖｅｌＦｌａｇ属性に割り当てる。
ｃ．ｍｐ４ｆｉｏｄｓ要素２３６０の対応する属性の値に基づいて、Ｐｒｏｆｉｌｅｓ要素１５０の次の属性に値を割り当てる。
ｉ．ｓｃｅｎｅＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ
ｉｉ．ＯＤＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ
ｉｉｉ．ａｕｄｉｏＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ
ｉｖ．ｖｉｓｕａｌＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ
ｖ．ｇｒａｐｈｉｃｓＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ
【０３６０】
Ｐｒｏｆｉｌｅｓ要素１５０の属性に割り当てられる値は、ｍｐ４ｆｉｏｄｓ要素２３６０の対応する属性によって表される特定の数値を表す英数字ストリングからなるものとすることができる。たとえば、ストリング「Ｎｏｎｅ」を使用して、数値「−１」または「２５５」を表すことができる。ｍｐ４ｆｉｏｄｓ要素２３６０の属性について許容される他の数値を、ＭＰＥＧ−４  ｓｙｓｔｅｍｓ仕様で定義されたストリング値に置換することができる。
【０３６１】
ステップ４の手順「Ｄｅｓｃｒ要素の作成」は、次の動作からなる。
ａ．標準ｘｍｌ手段を使用して、新しいＤｅｓｃｒ要素１６０を作成し、新しいＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素１３０に付加する。
ｂ．標準ｘｍｌ手段を使用して、新しいｅｓＤｅｓｃｒ要素１７０を作成し、新しいＤｅｓｃｒ要素１６０に付加する。
【０３６２】
ステップ５は、標準ｘｍｌ手段を使用して、ｍｐ４ｆｉｌｅ文書２３００内のｍｐ４ｆｉｏｄｓ要素２３３０、２３６０に従属する各要素２３８０を選択することからなる。このステップで選択される要素は、ＥｓＩｄＩｎｃ要素２３８０であると期待される。手順「ＥｓＩｄＩｎｃ要素の処理」を、このステップで識別されたＥｓＩｄＩｎｃ要素２３８０ごとに実行する。
【０３６３】
手順「ＥｓＩｄＩｎｃ要素の処理」
次の動作を、ｍｐ４ｆｉｌｅ文書２３００内のｍｐ４ｆｉｏｄｓ要素２３６０に従属するＥｓＩｄＩｎｃ要素２３８０ごとに実行する。
１．動作６１００で、ＥｓＩｄＩｎｃ要素２３８０のｔｒａｃｋＩＤ属性２３９０の値を、量「ｔｒａｃｋＩＤ」に割り当てる。
２．動作６１１０で、標準ｘｍｌ手段を使用して、ｔｒａｋ要素２３５０のｔｒａｃｋＩＤ属性の値が量「ｔｒａｃｋＩＤ」の値と一致する、ｍｐ４ｆｉｌｅ文書２３００内のｍｏｏｖ要素２３２０に従属するｔｒａｋ要素２３５０を見つける。
３．動作６１２０で、標準ｘｍｌ手段を使用して、前のステップで識別されたｔｒａｋ要素２３５０、２６００に含まれるＥＳ＿Ｄｅｓｃｒ要素２６８８を見つける。
４．動作６１３０で、標準ｘｍｌ手段を使用して、新しいＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素１８０、１９０を作成し、ｅｓＤｅｓｃｒ要素１７０に付加する。
５．動作６１４０で、ステップ「２」で決定されたストリング量「ｔｒａｃｋＴｙｐｅ」の値を、ストリング「ｓｄｓｍ」と比較する。
６．動作６１５０で、ストリング量「ｔｒａｃｋＴｙｐｅ」の値が「ｓｄｓｍ」である場合に、手順「ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍのＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒの作成」を実行する。
７．動作６１６０で、手順「ＢＩＦＳＣｏｎｆｉｇの作成」を実行する。
８．動作６１７０で、ストリング量「ｔｒａｃｋＴｙｐｅ」の値が「ｓｄｓｍ」でない場合に、ストリング量「ｔｒａｃｋＴｙｐｅ」の値を、ストリング「ｏｄｓｍ」と比較する。
９．動作６１８０で、ストリング量「ｔｒａｃｋＴｙｐｅ」の値が「ｏｄｓｍ」である場合に、手順「ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍのＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒの作成」を実行する。
１０．動作６１９０で、手順「ｔｒａｋのｔｒｅｆ要素からのｍｐｏｄＴｒａｃｋＩＤｓの取得」を実行する。
【０３６４】
ステップ２に、選択されたｔｒａｋ要素が識別された後に実行される次の動作が含まれる。
ａ．標準ｘｍｌ手段を使用して、指定されたｔｒａｋ要素２６００に従属するｈｄｌｒ要素２６０８を見つける。
ｂ．このｈｄｌｒ要素の「ｎａｍｅ」属性の値を、ストリング量「ｔｒａｃｋＮａｍｅ」に割り当てる。
ｃ．このｈｄｌｒ要素の「ｈａｎｄｌｅｒＴｙｐｅ」属性の値を、ストリング量「ｔｒａｃｋＴｙｐｅ」に割り当てる。この量の値は、「ｓｄｓｍ」または「ｏｄｓｍ」のいずれかであると期待される。
ｄ．ストリング「ＩＯＤ」に量「ｔｒａｃｋＮａｍｅ」の値およびストリング「ＥＳＩＤ：１」を連結することによって、新しいストリング量「ＥＳ＿ＩＤ」を作成し、その結果を、新しいＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素１８０、１９０の「ＥＳ＿ＩＤ」属性に割り当てる。
ｅ．新しいｄｅｃＣｏｎｆｉｇＤｅｓｃｒ要素６４６を作成し、ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素１８０、１９０、６４０に付加する。
ｆ．新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０を作成し、ｄｅｃＣｏｎｆｉｇＤｅｓｃｒ要素６４６に付加する。
ｇ．新しいｓｌＣｏｎｆｉｇＤｅｓｃｒ要素６６０を作成し、ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素６４０に付加する。
ｈ．新しいＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６６６を作成し、ｓｌＣｏｎｆｉｇＤｅｓｃｒ要素６６０に付加する。
ｉ．新しい「ｐｒｅｄｅｆｉｎｅｄ」要素を作成し、ＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６６６に付加する。
ｊ．値「２」を、「ｐｒｅｄｅｆｉｎｅｄ」要素の「ｖａｌｕｅ」属性に割り当てる。
【０３６５】
ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍのＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒの作成
１．標準ｘｍｌ手段を使用して、ｍｐ４ｆｉｌｅ文書２３００内の選択されたｔｒａｋ要素２６００に含まれるＥＳ＿Ｄｅｓｃｒ要素２６８８、２７００に含まれるＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０を見つける。
【０３６６】
２．ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０の「ａｖｇＢｉｔｒａｔｅ」属性および「ｍａｘＢｉｔｒａｔｅ」属性の値を、ＸＭＴ−Ａ文書１００の新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の対応する属性に割り当てる。
【０３６７】
３．ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０の「ｂｕｆｆｅｒＳｉｚｅ」属性の値を、新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の「ｂｕｆｆｅｒＳｉｚｅＤＢ」属性に割り当てる。
【０３６８】
４．ｍｐ４ｆｉｌｅ文書２３００のＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０の「ｓｔｒｅａｍＴｙｐｅ」属性の数値に基づいて、ストリング値を、新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の「ｓｔｒｅａｍＴｙｐｅ」属性に割り当てる。ｍｐ４ｆｉｌｅ文書２３００のＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０の「ｓｔｒｅａｍＴｙｐｅ」属性の値は、図１３１の第１列６２００の項目の１つと一致すると期待される。図１３１の第２列６２２０の対応する項目を、ＸＭＴ−Ａ文書１００の新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の「ｓｔｒｅａｍＴｙｐｅ」属性に割り当てる。
この事例では、ｍｐ４ｆｉｌｅ文書２３００のＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０のｓｔｒｅａｍＴｙｐｅ属性の値が、「３」と期待され、値「ＳｃｅｎｅＤｅｓｃｒｉｐｔｉｏｎ」が、ＸＭＴ−Ａ文書１００の新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の「ｓｔｒｅａｍＴｙｐｅ」属性に割り当てられる。
【０３６９】
５．ｍｐ４ｆｉｌｅ文書２３００のＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０の「ｏｂｊｅｃｔＴｙｐｅ」属性の数値に基づいて、ＸＭＴ−Ａ文書１００の新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の「ｏｂｊｅｃｔＴｙｐｅＩｎｄｉｃａｔｉｏｎ」属性に、ストリング値を割り当てる。ｍｐ４ｆｉｌｅ文書２３００のＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０の「ｏｂｊｅｃｔＴｙｐｅ」属性の値は、図１３２の第１列６２４０の項目の１つと一致すると期待される。図１３２の第２列６２６０の対応する項目を、ＸＭＴ−Ａ文書１００の新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の「ｏｂｊｅｃｔＴｙｐｅＩｎｄｉｃａｔｉｏｎ」属性に割り当てる。
【０３７０】
６．新しいｄｅｃＳｐｅｃｉｆｉｃＩｎｆｏ要素６５６、６８０を作成し、ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０に付加する。
【０３７１】
ＢＩＦＳＣｏｎｆｉｇの作成
手順「ＢＩＦＳＣｏｎｆｉｇの作成」は、次のステップからなる。
１．新しいＢＩＦＳＣｏｎｆｉｇ要素６８６を作成し、新しいｄｅｃＳｐｅｃｉｆｉｃＩｎｆｏ要素６８０に付加する。
２．標準ｘｍｌ手段を使用して、ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０に従属するＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０を見つける。
３．ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０の「ｎｏｄｅＩｄＢｉｔｓ」属性の値を、量ｎｏｄｅＩｄＢｉｔｓおよびＢＩＦＳＣｏｎｆｉｇ要素６８６の「ｎｏｄｅＩＤｂｉｔｓ」属性に割り当てる。
４．ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０の「ｒｏｕｔｅＩｄＢｉｔｓ」属性の値を、ＢＩＦＳＣｏｎｆｉｇ要素６８６の「ｒｏｕｔｅＩＤｂｉｔｓ」属性に割り当てる。
５．量「ｖ２Ｃｏｎｆｉｇ」の値が「真」である場合に、次の３つのステップを実行する。
ａ．ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０の「ｐｒｏｔｏＩｄＢｉｔｓ」属性の値を、ＢＩＦＳＣｏｎｆｉｇ要素６８６の「ＰＲＯＴＯＩＤｂｉｔｓ」属性に割り当てる。
ｂ．ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０の「ｕｓｅ３ＤＭｅｓｈＣｏｄｉｎｇ」属性の値を、ＢＩＦＳＣｏｎｆｉｇ要素６８６の「ｕｓｅ３ＤＭｅｓｈＣｏｄｉｎｇ」属性に割り当てる。
ｃ．ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０の「ｕｓｅＰｒｅｄｉｃｔｉｖｅＭＦＦｉｅｌｄ」属性の値を、ＢＩＦＳＣｏｎｆｉｇ要素６８６の「ｕｓｅＰｒｅｄｉｃｔｉｖｅＭＦＦｉｅｌｄ」属性に割り当てる。
６．ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０の「ｃｏｍｍａｎｄＳｔｒｅａｍ」属性の値が「真」である場合に、次のステップを実行する。
ａ．新しい「ｃｏｍｍａｎｄＳｔｒｅａｍ」要素６９０を作成し、ＢＩＦＳＣｏｎｆｉｇ要素６８６に付加する。
ｂ．ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０の「ｐｉｘｅｌＭｅｔｒｉｃ」属性の値を、ｃｏｍｍａｎｄＳｔｒｅａｍ要素６９０の「ｐｉｘｅｌＭｅｔｒｉｃ」属性に割り当てる。
ｃ．新しい「ｓｉｚｅ」要素６９６を作成し、ｃｏｍｍａｎｄＳｔｒｅａｍ要素６９０
ｄ．ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０の「ｐｉｘｅｌＨｅｉｇｈｔ」属性の値を、「ｓｉｚｅ」要素６９６の「ｐｉｘｅｌＨｅｉｇｈｔ」属性に割り当てる。
ｅ．ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０の「ｐｉｘｅｌＷｉｄｔｈ」属性の値を、「ｓｉｚｅ」要素６９６の「ｐｉｘｅｌＷｉｄｔｈ」属性に割り当てる。
【０３７２】
ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍのＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒの作成
１．標準ｘｍｌ手段を使用して、ｍｐ４ｆｉｌｅ文書２３００内の選択されたｔｒａｋ要素２６００に含まれるＥＳ＿Ｄｅｓｃｒ要素２６８８、２７００に含まれるＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０を見つける。
【０３７３】
２．ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０の「ａｖｇＢｉｔｒａｔｅ」属性および「ｍａｘＢｉｔｒａｔｅ」属性の値を、ＸＭＴ−Ａ文書内の新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の対応する属性に割り当てる。
【０３７４】
３．ｍｐ４ｆｉｌｅ文書内のｔｒａｋアトムのＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素の「ｂｕｆｆｅｒＳｉｚｅ」属性の値を、新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の「ｂｕｆｆｅｒＳｉｚｅＤＢ」属性に割り当てる。
【０３７５】
４．ｍｐ４ｆｉｌｅ文書２３００内のＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０の「ｓｔｒｅａｍＴｙｐｅ」属性の数値に基づいて、ＸＭＴ−Ａ文書１００の新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の「ｓｔｒｅａｍＴｙｐｅ」属性にストリング値を割り当てる。ｍｐ４ｆｉｌｅ文書２３００内のＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０の「ｓｔｒｅａｍＴｙｐｅ」属性の値は、図１３１の第１列６２００の項目の１つと一致すると期待される。図１３１の第２列６２２０の対応する項目を、ＸＭＴ−Ａ文書１００の新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の「ｓｔｒｅａｍＴｙｐｅ」属性に割り当てる。
この事例では、ｍｐ４ｆｉｌｅ文書２３００内のＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０のｓｔｒｅａｍＴｙｐｅ属性の値が、「１」になると期待され、値「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」が、ＸＭＴ−Ａ文書１００の新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の「ｓｔｒｅａｍＴｙｐｅ」属性に割り当てられる。
【０３７６】
５．ｍｐ４ｆｉｌｅ文書２３００内のＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０の「ｏｂｊｅｃｔＴｙｐｅ」属性の数値に基づいて、ＸＭＴ−Ａ文書１００の新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の「ｏｂｊｅｃｔＴｙｐｅＩｎｄｉｃａｔｉｏｎ」属性にストリング値を割り当てる。ｍｐ４ｆｉｌｅ文書２３００内のＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０の「ｏｂｊｅｃｔＴｙｐｅ」属性の値は、図１３２の第１列の項目の１つと一致すると期待される。図１３２の第２列６２６０の対応する項目を、ＸＭＴ−Ａ文書１００の新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の「ｏｂｊｅｃｔＴｙｐｅＩｎｄｉｃａｔｉｏｎ」属性に割り当てる。
【０３７７】
ｔｒａｋのｔｒｅｆ要素からのｍｐｏｄＴｒａｃｋＩＤｓの取得
手順「ｔｒａｋのｔｒｅｆ要素からのｍｐｏｄＴｒａｃｋＩＤｓの取得」は、次のステップからなる。
１．標準ｘｍｌ手段を使用して、選択されたｔｒａｋ要素２６００に従属するｔｒｅｆ要素２６３６を見つける。
２．標準ｘｍｌ手段を使用して、選択されたｔｒｅｆ要素２６３６に従属するｍｐｏｄ要素２６４０を見つける。
３．「ｍｐｏｄ」要素２６４０の「ｔｒａｃｋＩＤ」属性の値を、量「ｍｐｏｄＴｒａｃｋＩｄｓ」に割り当てる。
【０３７８】
手順「ＯＤコマンドのｐａｒ要素の作成」
Ｏｂｊｅｃｔ  Ｄｅｓｃｒｉｐｔｏｒコマンド要素を表すＸＭＴ−Ａ「ｐａｒ」要素１４０は、Ｏｂｊｅｃｔ  Ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ（ｏｄｓｍ）を表すｍｐ４ｆｉｌｅ文書２３００の要素２４６０から導出される。ＸＭＴ−Ａ文書１００で提示される各Ｏｂｊｅｃｔ  Ｄｅｓｃｒｉｐｔｏｒコマンドには、ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素６３０も含まれ、このＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素６３０のそれぞれは、ｍｐ４ｆｉｌｅ文書２３００内のｔｒａｋ要素２３５０、２６００に含まれるＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素２６８８から導出される。
【０３７９】
これらの「ｐａｒ」要素の作成に備えて、ストリング量「ｍｐｏｄＴｒａｃｋＩｄｓ」を使用して、ｔｒａｃｋＩｄ値の配列、ｐＭｐｏｄＴｒａｃｋＩｄを作成する。ｍｐｏｄＴｒａｃｋＩｄｓの値は、対応するｍｐ４ファイルについてＯｂｊｅｃｔ  Ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ（ｏｄｓｍ）が存在する場合に、ＸＭＴ−Ａ  Ｈｅａｄｅｒ要素１１０の作成中に割り当てられたものである。この量に値が割り当てられていない場合には、Ｏｂｊｅｃｔ  Ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍがなく、Ｏｂｊｅｃｔ  Ｄｅｓｃｒｉｐｔｏｒコマンド要素を表す「ｐａｒ」要素が生成されず、このステップは終了する。対応するｍｐ４ファイルに、ｓｄｓｍおよびｏｄｓｍを除いて１つまたは複数のメディア・データ・ストリームが含まれる場合に、量「ｍｐｏｄＴｒａｃｋＩｄｓ」の値に、整数ｔｒａｃｋＩＤ値のシーケンスが含まれ、配列ｐＭｐｏｄＴｒａｃｋＩｄの各要素が、このシーケンスの対応するメンバを表す。
【０３８０】
図１３３からわかるように、Ｏｂｊｅｃｔ  Ｄｅｓｃｒｉｐｔｏｒコマンドを表す「ｐａｒ」要素を作成する手順は、次のステップからなる。
１．動作６３００で、標準ｘｍｌ手段を使用して、ｍｐ４ｆｉｌｅ文書２３００内のｏｄｓｍ要素２４２０のすべてを見つける。これを達成するには、まず標準ｘｍｌ手段を使用して、ｍｐ４ｆｉｌｅ文書内の各ｍｄａｔ要素２３１０を選択する。次に、標準ｘｍｌ手段を使用して、各ｍｄａｔ要素２４００内の各ｏｄｓｍ要素２４２０を選択する。
２．動作６３１０で、標準ｘｍｌ手段を使用して、各ｏｄｓｍ要素２４６０内の各ｏｄｓｍＣｈｕｎｋ要素２４７０を選択する。
３．動作６３２０で、標準ｘｍｌ手段を使用して、各ｏｄｓｍＣｈｕｎｋ要素２５００内の各ｏｄｓｍＳａｍｐｌｅ要素２５１０を選択する。
４．動作６３３０で、標準ｘｍｌ手段を使用して、新しい空の「ｐａｒ」要素１４０を作成し、ＸＭＴ−Ａ  Ｂｏｄｙ要素１２０に付加する。
５．動作６３４０で、ｏｄｓｍＳａｍｐｌｅ要素２５１０、２５２０の「ｔｉｍｅ」属性２５１５、２５２５の値を、量「ｔｉｍｅＳｃａｌｅ」の値で割り、その結果を新しい「ｐａｒ」要素１４０の「ｂｅｇｉｎ」属性に割り当てる。
６．動作６３５０で、標準ｘｍｌ手段を使用して、各ｏｄｓｍＳａｍｐｌｅ要素２５２０に含まれる各ｏｄｓｍコマンド要素２５３０を選択する。
７．動作６３６０で、各ｏｄｓｍコマンド要素２５３０の要素名を、ストリング「ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ」と比較する。
８．動作６３７０で、ｏｄｓｍコマンド要素２５３０の要素名が「ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ」である場合に、手順「ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ要素の作成」を実行する。
９．動作６３８０で、ｏｄｓｍコマンド要素２５３０の要素名が「ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ」でない場合に、ｏｄｓｍコマンド要素２５３０の要素名を、ストリング「ＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅ」と比較する。
１０．動作６３９０で、ｏｄｓｍコマンド要素２５３０の要素名が「ＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅ」である場合に、手順「ＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅ要素の作成」を実行する。
【０３８１】
ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅ要素の作成
手順「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅ要素の作成」は、次のステップからなる。
１．標準ｘｍｌ手段を使用して、新しい「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅ」要素２２０を作成し、現在の「ｐａｒ」要素２１０に付加する。
２．標準ｘｍｌ手段を使用して、新しい「ＯＤ」要素２３０を作成し、現在の「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅ」要素２２０に付加する。
３．標準ｘｍｌ手段を使用して、ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ  ｏｄｓｍコマンド要素２５４０に従属する「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素２５５０を見つける。
４．標準ｘｍｌ手段を使用して、新しい「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素２４０、６００を作成し、現在の「ＯＤ」要素２３０に付加する。
５．ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２５５０のＯＤＩＤ属性２５５５の値を、ストリング量「ＯＤＩＤ」に割り当てる。
６．ストリング量「ＯＤＩＤ」の値に、プレフィックス「ＯＤＩＤ：」を連結し、その結果を、新しいＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２４０、６０６のｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤに割り当て、「ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」を「ＯＤＩＤ」と表す。
７．標準ｘｍｌ手段を使用して、新しい「Ｄｅｓｃｒ」要素６１０を作成し、新しいＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素６００に付加する。
８．標準ｘｍｌ手段を使用して、新しい「ｅｓＤｅｓｃｒ」要素６２０を作成し、新しい「Ｄｅｓｃｒ」要素６１０に付加する。
９．標準ｘｍｌ手段を使用して、新しい「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」要素６３０を作成し、現在の「ｅｓＤｅｓｃｒ」要素６２０に付加する。
１０．標準ｘｍｌ手段を使用して、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２５５０に従属する「ＥｓＩｄＲｅｆ」要素２５６０を選択する。
１１．「ＥｓＩｄＲｅｆ」要素２５６０の「ＥｓＩｄ」属性２５６５の値を、量「ＥｓＩｄ」に割り当てる。
１２．標準ｘｍｌ手段を使用して、新しい「ｄｅｃＣｏｎｆｉｇＤｅｓｃｒ」要素６４６を作成し、新しい「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」要素６３０、６４０に割り当てる。
１３．標準ｘｍｌ手段を使用して、新しい「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素６５０を作成し、新しい「ｄｅｃＣｏｎｆｉｇＤｅｓｃｒ」要素６４６に割り当てる。
１４．配列ｐＭｐｏｄＴｒａｃｋＩｄの項目（ＥｓＩｄ−１）の値を、量「ｍｐｏｄＴｒａｃｋＩＤ」に割り当てる。たとえば、「ＥｓＩｄ」の値が「１」である場合に、ｍｐｏｄＴｒａｃｋＩＤの値は、配列ｐＭｏｐｄＴｒａｃｋＩｄの項目「０」すなわち最初の項目によって決定される。
１５．標準ｘｍｌ手段を使用して、ｔｒａｃｋＩＤ属性の値が量「ｍｐｏｄＴｒａｃｋＩＤ」の値と一致するｔｒａｋ要素２３５０を選択する。
１６．標準ｘｍｌ手段を使用して、選択されたｔｒａｋ要素２３５０、２６００に従属するｈｄｌｒ要素２６０８を選択する。
１７．選択されたｈｄｌｒ要素２６０８の「ｎａｍｅ」属性の値を、ストリング量「ｔｒａｃｋＮａｍｅ」に割り当てる。
１８．選択されたｈｄｌｒ要素２６０８の「ｈａｎｄｌｅｒＴｙｐｅ」属性の値を、ストリング量「ｔｒａｃｋＴｙｐｅ」に割り当てる。
１９．ストリング「ＥＳＩＤ：」に量「ｔｒａｃｋＮａｍｅ」の値および量「ＥｓＩｄ」の値を連結することによって新しいストリング量を作成し、その結果を新しい「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」要素６４０の「ＥＳ＿ＩＤ」属性６３６に割り当てる。
２０．標準ｘｍｌ手段を使用して、新しい「ｓｌＣｏｎｆｉｇＤｅｓｃｒ」要素６６０を作成し、現在の「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」要素６４０に付加する。
２１．標準ｘｍｌ手段を使用して、新しい「ＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素６６６を作成し、新しい「ｓｌＣｏｎｆｉｇＤｅｓｃｒ」要素６６０に付加する。
２２．標準ｘｍｌ手段を使用して、新しい「ｐｒｅｄｅｆｉｎｅｄ」要素を作成し、新しい「ＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素６６６に付加する。
２３．値「２」を、新しい「ｐｒｅｄｅｆｉｎｅｄ」要素の「ｖａｌｕｅ」属性に割り当てる。
２４．手順「メディア・データ・ストリームのＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素の作成」を実行する。
２５．手順「ＳｔｒｅａｍＳｏｕｒｃｅ要素の作成」を実行する。
【０３８２】
メディア・データ・ストリームのＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素の作成
手順「メディア・データ・ストリームのＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素の作成」は、次のステップからなる。
１．標準ｘｍｌ手段を使用して、手順「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅ要素の作成」のステップ１５で選択されたｔｒａｋ要素２３５０に含まれるＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０を選択する。
２．手順「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅ要素の作成」のステップ１３で作成された新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の「ｓｔｒｅａｍＴｙｐｅ」属性に、ストリング値を割り当てる。このストリングの値は、図１３１の第２列６２２０の項目によって決定される。この項目は、第１列６２００の、選択されたＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０の「ｓｔｒｅａｍＴｙｐｅ」属性の数値と一致する項目に対応する。
３．手順「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅ要素の作成」のステップ１３で作成された新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の「ｏｂｊｅｃｔＴｙｐｅＩｎｄｉｃａｔｉｏｎ」属性に、ストリング値を割り当てる。このストリングの値は、図１３２の第２列６２６０の項目によって決定される。この項目は、第１列６２４０の、選択されたＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０の「ｏｂｊｅｃｔＴｙｐｅ」属性の数値と一致する項目に対応する。
４．選択されたＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０の「ａｖｇＢｉｔｒａｔｅ」属性および「ｍａｘＢｉｔｒａｔｅ」属性の値を、ＸＭＴ−Ａ文書の新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の対応する属性に割り当てる。
５．選択されたＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０の「ｂｕｆｆｅｒＳｉｚｅ」属性の値を、ＸＭＴ−Ａ文書の新しいＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の「ｂｕｆｆｅｒＳｉｚｅＤＢ」属性に割り当てる。
６．選択されたＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０に、従属するＪＰＥＧ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７３０、ＶｉｓｕａｌＣｏｎｆｉｇ要素２７４０、またはＡｕｄｉｏＣｏｎｆｉｇ要素２７５０が含まれる場合に、次のステップを実行する。
ａ．標準ｘｍｌ手段を使用して、新しい「ｄｅｃＳｐｅｃｉｆｉｃＩｎｆｏ」要素６５６を作成し、新しい「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素６５０に付加する。
ｂ．標準ｘｍｌ手段を使用して、新しい「ＤｅｃｏｄｅｒＳｐｅｃｉｆｉｃＩｎｆｏ」要素を作成し、現在の「ｄｅｃＳｐｅｃｉｆｉｃＩｎｆｏ」要素６５６に付加する。
ｃ．値「ａｕｔｏ」を、新しいＤｅｃｏｄｅｒＳｐｅｃｉｆｉｃＩｎｆｏ要素の「ｔｙｐｅ」属性に割り当てる。
【０３８３】
ＳｔｒｅａｍＳｏｕｒｃｅ要素の作成
手順「ＳｔｒｅａｍＳｏｕｒｃｅ要素の作成」は、次のステップからなる。
１．標準ｘｍｌ手段を使用して、ｍｐ４ｆｉｌｅ文書２３００に含まれる各ｍｄａｔ要素２３１０を選択する。
２．標準ｘｍｌ手段を使用して、各ｍｄａｔ要素２３１０に含まれる各ｍｅｄｉａＦｉｌｅ要素２４３０、２４８０を選択する。
３．各選択されたｍｅｄｉａＦｉｌｅ要素２４８０の「ｔｒａｃｋＩＤ」属性の値を、量「ｍｄａｔＴｒａｃｋＩＤ」に割り当てる。
４．量「ｍｄａｔＴｒａｃｋＩＤ」の値を、量「ｍｐｏｄＴｒａｃｋＩＤ」の現在の値と比較する。
５．量「ｍｄａｔＴｒａｃｋＩＤ」の値が、量「ｍｐｏｄＴｒａｃｋＩＤ」の現在の値と一致する場合に、次のステップを実行する。
ａ．標準ｘｍｌ手段を使用して、新しい「ＳｔｒｅａｍＳｏｕｒｃｅ」要素６７０を作成し、現在の「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」要素６４０に付加する。
ｂ．選択されたｍｅｄｉａＦｉｌｅ要素２４８０の「ｎａｍｅ」属性の値を、プレフィックス「ｆｉｌｅ：／／／」に連結し、その結果を新しい「ＳｔｒｅａｍＳｏｕｒｃｅ」要素６７０の「ｕｒｌ」属性に割り当てる。
【０３８４】
ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅ要素の作成
手順「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅ要素の作成」は、次のステップからなる。
１．標準ｘｍｌ手段を使用して、新しい「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅ」要素２５０を作成し、現在の「ｐａｒ」要素２１０に付加する。
２．ｏｄｓｍサンプル要素２５３０の「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅ」要素２５７０の「ＯＤＩＤ」属性の値を、プレフィックス「ＯＤＩＤ：」に連結し、その結果を、新しい「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅ」要素２５０の「ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩｄ」属性に割り当てる。ＸＭＴ−Ａ「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅ」要素の「ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩｄ」属性は、図４では「ＯＤＩＤ」として表されている。
【０３８５】
手順「ＢＩＦＳコマンドのｐａｒ要素の作成」
図１３４からわかるように、手順「ＢＩＦＳコマンドのｐａｒ要素の作成」は、次のステップからなる。
１．動作６４００で、標準ｘｍｌ手段を使用して、ｍｐ４ｂｉｆｓ文書２８００のｂｉｆｓＣｏｎｆｉｇ要素２８１０を選択する。「ｎｏｄｅＩｄＢｉｔｓ」属性の値を、量「ｎｕｍＮｏｄｅＩｄＢｉｔｓ」に割り当てる。「ｐＮｏｄｅＮｕｍｂｅｒ」という名前の整数の配列および「ｐＮｏｄｅＩｄＮａｍｅ」という名前のストリングの配列を作成する。これらの配列のそれぞれの要素数は、２のｎｕｍＮｏｄｅＩｄＢｉｔｓ乗によって指定される。
２．動作６４１０で、標準ｘｍｌ手段を使用して、ｍｐ４ｂｉｆｓ文書２８００の各「ｃｏｍｍａｎｄＦｒａｍｅ」要素２８２０を選択する。
３．動作６４２０で、標準ｘｍｌ手段を使用して、新しい「ｐａｒ」要素１４０を作成し、ＸＭＴ−Ａ  Ｂｏｄｙ要素１２０に割り当てる。
４．動作６４３０で、ｃｏｍｍａｎｄＦｒａｍｅ要素２８２０の「ｔｉｍｅ」属性の値を、「ｐａｒ」要素１４０の「ｂｅｇｉｎ」属性に割り当てる。
５．動作６４４０で、現在のｃｏｍｍａｎｄＦｒａｍｅ要素２８２０を使用して、手順「ノード番号の配列およびノード名の配列の作成」を実行する。
６．動作６４５０で、現在のｃｏｍｍａｎｄＦｒａｍｅ要素２８２０を使用して、手順「ＸＭＴ−Ａ要素へのｍｐ４ｂｉｆｓ  ｃｏｍｍａｎｄＦｒａｍｅ要素の変換」を実行する。
【０３８６】
ノード番号の配列およびノード名の配列の作成
手順「ノード番号の配列およびノード名の配列の作成」を、図１３５に要約する。この手順は、次のステップからなる。
１．動作６５００で、標準ｘｍｌ手段を使用して、現在のｍｐ４ｂｉｆｓ  ｃｏｍｍａｎｄＦｒａｍｅ要素２８３０によって所有される各従属要素を選択する。そのような従属要素のそれぞれが、ｂｉｆｓＣｏｍｍａｎｄ要素２８４０、２９１０に対応する。
２．動作６５１０で、標準ｘｍｌ手段を使用して、現在のｂｉｆｓＣｏｍｍａｎｄコマンド要素によって所有される各従属要素を選択する。選択された従属要素が、ｂｉｆｓＣｏｍｍａｎｄ要素に対応する場合に、この手順を再帰的に繰り返す。そうでない場合に、選択された従属要素は、ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素に対応しなければならず、次のステップが実行される。
３．動作６５２０で、選択されたｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０、３０００の要素名を、ストリング「ＲｅｕｓｅｄＮｏｄｅ」と比較する。選択されたｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０、３０００の要素名が「ＲｅｕｓｅｄＮｏｄｅ」である場合に、次のｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素６５１０、６５９０があるならば、それを選択することによって継続する。
４．動作６５３０で、選択されたｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０、３０００の要素名が「ＲｅｕｓｅｄＮｏｄｅ」でない場合に、標準ｘｍｌ手段を使用して、選択されたｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０、３０００の「ＮｏｄｅＩｄ」属性の値が指定されているかどうかを判定する。
５．動作６５４０で、選択されたｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０、３０００の「ＮｏｄｅＩｄ」属性の値が指定されている場合に、「ＮｏｄｅＩｄ」属性の数値を、整数量「ｎｏｄｅＩｄ」に割り当てる。
６．動作６５５０で、選択されたｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０、３０００の名前を、ＭＰＥＧ−４仕様で定義されたＮｏｄｅ名の配列の各項目と比較する。ＭＰＥＧ−４  Ｎｏｄｅ名の配列の一致する項目のインデックスを、整数量ｎｏｄｅＮｕｍｂｅｒに割り当てる。整数量ｎｏｄｅＮｕｍｂｅｒの値を、配列ｐＮｏｄｅＮｕｍｂｅｒの項目ｎｏｄｅＩｄに割り当てる。
７．動作６５６０で、標準ｘｍｌ手段を使用して、選択されたｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０、３０００の「ｎａｍｅ」属性の値が指定されているかどうかを判定する。
８．動作６５７０で、選択されたｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０、３０００の「ｎａｍｅ」属性の値が指定されている場合に、この「ｎａｍｅ」属性の値を、配列ｐＮｏｄｅＩｄＮａｍｅの項目ｎｏｄｅＩｄに割り当てる。
９．動作６５８０で、標準ｘｍｌ手段を使用して、選択されたｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０、３０００によって所有される各従属要素３０３０、３０７０を選択する。ｂｉｆｓＣｏｍｍａｎｄ要素３０７０に対応する従属要素ごとに、ステップ２  ６５１０を再帰的に繰り返す。
１０．動作６５９０で、ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素３０３０に対応する従属要素ごとに、ステップ３  ６５２０を再帰的に繰り返す。
【０３８７】
ＸＭＴ−Ａ要素へのｍｐ４ｂｉｆｓ  ｃｏｍｍａｎｄＦｒａｍｅ要素の変換
次の手順を使用して、ｍｐ４ｂｉｆｓ  ｃｏｍｍａｎｄＦｒａｍｅ要素２８３０の内容を、ＸＭＴ−Ａ  ＢＩＦＳコマンド要素３００、３１０、３２０に変換する。この場合に、「現在のｍｐ４ｂｉｆｓ要素」は、６４１０で選択されたｍｐ４ｂｉｆｓ  ｃｏｍｍａｎｄＦｒａｍｅ要素２８３０であり、「ＸＭＴ−Ａ親要素」は、６４２０で作成されたＸＭＴ−Ａ「ｐａｒ」要素である。
【０３８８】
同一の手順を使用して、ｍｐ４ｆｂｉｆｓ  Ｃｏｎｄｉｔｉｏｎａｌ  Ｎｏｄｅ  ３０４０を、ＸＭＴ−Ａ  ＢＩＦＳコマンド要素３００、３１０、３２０に変換する。この場合に、「現在のｍｐ４ｂｉｆｓ要素」は、ｍｐ４ｂｉｆｓコマンド要素２９１０またはｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素３０００に従属するｍｐ４ｂｉｆｓ  Ｃｏｎｄｉｔｉｏｎａｌ  Ｎｏｄｅ  ３０４０であり、「ＸＭＴ−Ａ親要素」は、ＸＭＴ−Ａ  ＢＩＦＳコマンド要素３００、３１０、３２０またはＸＭＴ−Ａ  ＣｏｍｍａｎｄＢｕｆｆｅｒ  ｎｏｄｅＦｉｅｌｄ要素４１０である。
１．標準ｘｍｌ手段を使用して、現在のｍｐ４ｂｉｆｓ要素に従属する各ｍｐ４ｂｉｆｓ要素を選択する。そのような従属要素のそれぞれを、下にステップの１つで説明されているように処理する。
２．選択された従属要素の要素名が「ＩｎｓｅｒｔＮｏｄｅ」である場合に、手順「ｍｐ４ｂｉｆｓ  ＩｎｓｅｒｔＮｏｄｅ要素のＸＭＴ−Ａ要素への変換」を実行する。
３．選択された従属要素の要素名が「ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ」である場合に、手順「ｍｐ４ｂｉｆｓ  ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ要素のＸＭＴ−Ａ要素への変換」を実行する。
４．選択された従属要素の要素名が「ＩｎｓｅｒｔＲｏｕｔｅ」である場合に、手順「ｍｐ４ｂｉｆｓ  ＩｎｓｅｒｔＲｏｕｔｅ要素のＸＭＴ−Ａ要素への変換」を実行する。
５．選択された従属要素の要素名が「ＤｅｌｅｔｅＮｏｄｅ」である場合に、手順「ｍｐ４ｂｉｆｓ  ＤｅｌｅｔｅＮｏｄｅ要素のＸＭＴ−Ａ要素への変換」を実行する。
６．選択された従属要素の要素名が「ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ」である場合に、手順「ｍｐ４ｂｉｆｓ  ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ要素のＸＭＴ−Ａ要素への変換」を実行する。
７．選択された従属要素の要素名が「ＤｅｌｅｔｅＲｏｕｔｅ」である場合に、手順「ｍｐ４ｂｉｆｓ  ＤｅｌｅｔｅＲｏｕｔｅ要素のＸＭＴ−Ａ要素への変換」を実行する。
８．選択された従属要素の要素名が「ＲｅｐｌａｃｅＮｏｄｅ」である場合に、手順「ｍｐ４ｂｉｆｓ  ＲｅｐｌａｃｅＮｏｄｅ要素のＸＭＴ−Ａ要素への変換」を実行する。
９．選択された従属要素の要素名が「ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ」である場合に、手順「ｍｐ４ｂｉｆｓ  ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ要素のＸＭＴ−Ａ要素への変換」を実行する。
１０．選択された従属要素の要素名が「ＲｅｐｌａｃｅＦｉｅｌｄ」である場合に、手順「ｍｐ４ｂｉｆｓ  ＲｅｐｌａｃｅＦｉｅｌｄ要素のＸＭＴ−Ａ要素への変換」を実行する。
１１．選択された従属要素の要素名が「ＲｅｐｌａｃｅＲｏｕｔｅ」である場合に、手順「ｍｐ４ｂｉｆｓ  ＲｅｐｌａｃｅＲｏｕｔｅ要素のＸＭＴ−Ａ要素への変換」を実行する。
１２．選択された従属要素の要素名が「ＲｅｐｌａｃｅＳｃｅｎｅ」である場合に、手順「ｍｐ４ｂｉｆｓ  ＲｅｐｌａｃｅＳｃｅｎｅ要素のＸＭＴ−Ａ要素への変換」を実行する。
【０３８９】
ｍｐ４ｂｉｆｓ  ＩｎｓｅｒｔＮｏｄｅ要素のＸＭＴ−Ａ要素への変換
手順「ｍｐ４ｂｉｆｓ  ＩｎｓｅｒｔＮｏｄｅ要素のＸＭＴ−Ａ要素への変換」は、次のステップからなる。
１．新しいＸＭＴ−Ａ「Ｉｎｓｅｒｔ」要素３００を作成し、ＸＭＴ−Ａ親要素に付加する。
２．ｐａｒｅｎｔＩｄ属性を処理する。
ａ．ｍｐ４ｂｉｆｓ「ＩｎｓｅｒｔＮｏｄｅ」要素の「ｐａｒｅｎｔＩｄ」属性の値を、整数量「ｎｏｄｅＩｄ」に割り当てる。
ｂ．配列ｐＮｏｄｅＩｄＮａｍｅの項目ｎｏｄｅＩｄの値を、ストリング量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｃ．ストリング量「ｎｏｄｅＩｄＮａｍｅ」の値がヌルであるか、内容を有しない（０の長さ）場合に、量「ｎｏｄｅＩｄ」の値をプレフィックス「ｎｏｄｅＩｄ：」に付加し、その結果を量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｄ．量「ｎｏｄｅＩｄＮａｍｅ」の値を、ＸＭＴ−Ａ「Ｉｎｓｅｒｔ」要素３００の「ａｔＮｏｄｅ」属性に割り当てる。
３．ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ属性を処理する。
ａ．ｍｐ４ｂｉｆｓ「ＩｎｓｅｒｔＮｏｄｅ」要素の「ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ」属性の値を、ストリング量「ｐｏｓｉｔｉｏｎ」に割り当てる。
ｂ．量「ｐｏｓｉｔｉｏｎ」の値が「０」である場合に、ｍｐ４ｂｉｆｓ「ＩｎｓｅｒｔＮｏｄｅ」要素の「ｐｏｓｉｔｉｏｎ」属性の値を、ＸＭＴ−Ａ「Ｉｎｓｅｒｔ」要素３００の「ｐｏｓｉｔｉｏｎ」属性に割り当てる。
ｃ．量「ｐｏｓｉｔｉｏｎ」の値が「２」である場合に、値「ＢＥＧＩＮ」を、ＸＭＴ−Ａ「Ｉｎｓｅｒｔ」要素３００の「ｐｏｓｉｔｉｏｎ」属性に割り当てる。
ｄ．量「ｐｏｓｉｔｉｏｎ」の値が「３」である場合に、値「ＥＮＤ」を、ＸＭＴ−Ａ「Ｉｎｓｅｒｔ」要素３００の「ｐｏｓｉｔｉｏｎ」属性に割り当てる。
４．従属するｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素を処理する。
ａ．標準ｘｍｌ手段を使用して、現在のｂｉｆｓＣｏｍｍａｎｄ要素２９１０によって所有される従属するＮｏｄｅ要素２９２０のそれぞれを選択する。
ｂ．そのような選択された従属するＮｏｄｅ要素２９２０ごとに、手順「ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素のＸＭＴ−Ａ  Ｎｏｄｅ要素への変換」を実行する。
【０３９０】
ｍｐ４ｂｉｆｓ  ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ要素のＸＭＴ−Ａ要素への変換
手順「ｍｐ４ｂｉｆｓ  ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ要素のＸＭＴ−Ａ要素への変換」は、次のステップからなる。
１．新しいＸＭＴ−Ａ「Ｉｎｓｅｒｔ」要素３００を作成し、現在のＸＭＴ−Ａ親要素に付加する。
２．ｎｏｄｅＩｄ属性を処理する。
ａ．ｍｐ４ｂｉｆｓ「ＩｎｓｅｒｔＮｏｄｅ」要素の「ｎｏｄｅＩｄ」属性の値を、整数量「ｎｏｄｅＩｄ」に割り当てる。
ｂ．配列ｐＮｏｄｅＮｕｍｂｅｒの項目ｎｏｄｅＩｄの値を、整数量「ｎｏｄｅＮｕｍｂｅｒ」に割り当てる。
ｃ．配列ｐＮｏｄｅＩｄＮａｍｅの項目ｎｏｄｅＩｄの値を、ストリング量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｄ．ストリング量「ｎｏｄｅＩｄＮａｍｅ」の値が、ヌルであるか、内容を有しない（０の長さ）場合に、量「ｎｏｄｅＩｄ」の値をプレフィックス「ｎｏｄｅＩｄ：」に付加し、その結果を量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｅ．量「ｎｏｄｅＩｄＮａｍｅ」の値を、ＸＭＴ−Ａ「Ｉｎｓｅｒｔ」要素の「ａｔＮｏｄｅ」属性に割り当てる。
３．ｉｎＦｉｅｌｄＮａｍｅ属性およびｖａｌｕｅ属性を処理する。
ａ．ｍｐ４ｂｉｆｓ「ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ」要素の「ｉｎＦｉｅｌｄＮａｍｅ」属性の値を、ＸＭＴ−Ａ「Ｉｎｓｅｒｔ」要素の「ａｔＦｉｅｌｄ」属性に割り当てる。
ｂ．ｍｐ４ｂｉｆｓ「ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ」要素の「ｖａｌｕｅ」属性の値を、ＸＭＴ−Ａ「Ｉｎｓｅｒｔ」要素の「ｖａｌｕｅ」属性に割り当てる。
４．ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ属性を処理する。
ａ．ｍｐ４ｂｉｆｓ「ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ」要素の「ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ」属性の値を、ストリング量「ｐｏｓｉｔｉｏｎ」に割り当てる。
ｂ．量「ｐｏｓｉｔｉｏｎ」の値が「０」である場合に、ｍｐ４ｂｉｆｓ「ＩｎｓｅｒｔＮｏｄｅ」要素の「ｐｏｓｉｔｉｏｎ」属性の値を、ＸＭＴ−Ａ「Ｉｎｓｅｒｔ」要素３００の「ｐｏｓｉｔｉｏｎ」属性に割り当てる。
ｃ．量「ｐｏｓｉｔｉｏｎ」の値が「２」である場合に、値「ＢＥＧＩＮ」を、ＸＭＴ−Ａ「Ｉｎｓｅｒｔ」要素３００の「ｐｏｓｉｔｉｏｎ」属性に割り当てる。
ｄ．量「ｐｏｓｉｔｉｏｎ」の値が「３」である場合に、値「ＥＮＤ」を、ＸＭＴ−Ａ「Ｉｎｓｅｒｔ」要素３００の「ｐｏｓｉｔｉｏｎ」属性に割り当てる。
５．従属するｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素を処理する。
ａ．標準ｘｍｌ手段を使用して、現在のｂｉｆｓＣｏｍｍａｎｄ要素２９１０によって所有される従属するＮｏｄｅ要素２９２０のそれぞれを選択する。
ｂ．そのような選択された従属するＮｏｄｅ要素２９２０ごとに、手順「ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素のＸＭＴ−Ａ  Ｎｏｄｅ要素への変換」を実行する。
【０３９１】
ｍｐ４ｂｉｆｓ  ＩｎｓｅｒｔＲｏｕｔｅ要素のＸＭＴ−Ａ要素への変換
手順「ｍｐ４ｂｉｆｓ  ＩｎｓｅｒｔＲｏｕｔｅ要素のＸＭＴ−Ａ要素への変換」は、次のステップからなる。
１．新しいＸＭＴ−Ａ「Ｉｎｓｅｒｔ」要素３００を作成し、現在のＸＭＴ−Ａ親要素に付加する。
２．新しいＸＭＴ−Ａ「Ｒｏｕｔｅ」要素３４０を作成し、新しいＸＭＴ−Ａ「Ｉｎｓｅｒｔ」要素３００に付加する。
３．ｒｏｕｔｅＩｄ属性を処理する。
ａ．ｍｐ４ｂｉｆｓ「ＩｎｓｅｒｔＲｏｕｔｅ」要素の「ｒｏｕｔｅＩｄ」属性の値を、ストリング量「ｉＲｏｕｔｅ」に割り当てる。
ｂ．ｍｐ４ｂｉｆｓ「ＩｎｓｅｒｔＲｏｕｔｅ」要素の「ｎａｍｅ」属性の値を、ストリング量「ｒｏｕｔｅＮａｍｅ」に割り当てる。
ｃ．ストリング量「ｒｏｕｔｅＮａｍｅ」の値が、ヌルでなく、少なくとも１つの文字を含む場合に、量「ｒｏｕｔｅＮａｍｅ」を、ＸＭＴ−Ａ「Ｒｏｕｔｅ」要素３４０の「ＤＥＦ」属性に割り当てる。そうではなく、ストリング量「ｉＲｏｕｔｅ」の値が、ヌルでなく、少なくとも１つの文字を含む場合に、量「ｉＲｏｕｔｅ」の値をプレフィックス「ｒｏｕｔｅ：」に付加し、その結果をＸＭＴ−Ａ「Ｒｏｕｔｅ」要素３４０の「ＤＥＦ」属性に割り当てる。
４．ｍｐ４ｂｉｆｓ「ＩｎｓｅｒｔＲｏｕｔｅ」要素に基づいて、手順「ｍｐ４ｂｉｆｓ  Ｒｏｕｔｅ要素の属性のＸＭＴ−Ａ  ＲＯＵＴＥ要素の属性への変換」を実行する
【０３９２】
ｍｐ４ｂｉｆｓ  ＤｅｌｅｔｅＮｏｄｅ要素のＸＭＴ−Ａ要素への変換
手順「ｍｐ４ｂｉｆｓ  ＤｅｌｅｔｅＮｏｄｅ要素のＸＭＴ−Ａ要素への変換」は、次のステップからなる。
１．新しいＸＭＴ−Ａ「Ｄｅｌｅｔｅ」要素３１０を作成し、現在のＸＭＴ−Ａ親要素に付加する。
２．ｎｏｄｅＩｄ属性を処理する。
ａ．ｍｐ４ｂｉｆｓ「ＤｅｌｅｔｅＮｏｄｅ」要素の「ｎｏｄｅＩｄ」属性の値を、整数量「ｎｏｄｅＩｄ」に割り当てる。
ｂ．配列ｐＮｏｄｅＩｄＮａｍｅの項目ｎｏｄｅＩｄの値を、整数量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｃ．ストリング量「ｎｏｄｅＩｄＮａｍｅ」の値が、ヌルであるか、内容を有しない（０の長さ）場合に、量「ｎｏｄｅＩｄ」の値をプレフィックス「ｎｏｄｅＩｄ：」に付加し、その結果を量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｄ．量「ｎｏｄｅＩｄＮａｍｅ」の値を、ＸＭＴ−Ａ「Ｄｅｌｅｔｅ」要素３１０の「ａｔＮｏｄｅ」属性に割り当てる。
【０３９３】
ｍｐ４ｂｉｆｓ  ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ要素のＸＭＴ−Ａ要素への変換
手順「ｍｐ４ｂｉｆｓ  ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ要素のＸＭＴ−Ａ要素への変換」は、次のステップからなる。
１．新しいＸＭＴ−Ａ「Ｄｅｌｅｔｅ」要素３１０を作成し、現在のＸＭＴ−Ａ親要素に付加する。
２．ｎｏｄｅＩｄ属性を処理する。
ａ．ｍｐ４ｂｉｆｓ「ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ」要素の「ｎｏｄｅＩｄ」属性の値を、整数量「ｎｏｄｅＩｄ」に割り当てる。
ｂ．配列ｐＮｏｄｅＮｕｍｂｅｒの項目ｎｏｄｅＩｄの値を、整数量「ｎｏｄｅＮｕｍｂｅｒ」に割り当てる。
ｃ．配列ｐＮｏｄｅＩｄＮａｍｅの項目ｎｏｄｅＩｄの値を、ストリング量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｄ．ストリング量「ｎｏｄｅＩｄＮａｍｅ」の値が、ヌルであるか、内容を有しない（０の長さ）場合に、量「ｎｏｄｅＩｄ」の値をプレフィックス「ｎｏｄｅＩｄ：」に付加し、その結果を量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｅ．量「ｎｏｄｅＩｄＮａｍｅ」の値を、ＸＭＴ−Ａ「Ｄｅｌｅｔｅ」要素３１０の「ａｔＮｏｄｅ」属性に割り当てる。
３．ｉｎＦｉｅｌｄ属性を処理する。
ａ．ｍｐ４ｂｉｆｓ「ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ」要素の「ｉｎＦｉｅｌｄ」属性の値を、整数量「ｆｉｅｌｄ」に割り当てる。
ｂ．インデックス「ｎｏｄｅＮｕｍｂｅｒ」を有するＢＩＦＳノードの、ＭＰＥＧ−４仕様で定義されたフィールド名の配列の項目「ｆｉｅｌｄ」の値を、ストリング量「ｆｉｅｌｄＮａｍｅ」に割り当てる。
ｃ．量「ｆｉｅｌｄＮａｍｅ」の値を、ＸＭＴ−Ａ「Ｄｅｌｅｔｅ」要素３１０の「ａｔＦｉｅｌｄ」属性に割り当てる。
４．ｄｅｌｅｔｉｏｎＰｏｓｉｔｉｏｎ属性を処理する。
ａ．ｍｐ４ｂｉｆｓ「ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ」要素の「ｄｅｌｅｔｉｏｎＰｏｓｉｔｉｏｎ」属性の値を、ストリング量「ｐｏｓｉｔｉｏｎ」に割り当てる。
ｂ．量「ｐｏｓｉｔｉｏｎ」の値が「０」である場合に、ｍｐ４ｂｉｆｓ「ＩｎｓｅｒｔＮｏｄｅ」要素の「ｐｏｓｉｔｉｏｎ」属性の値を、ＸＭＴ−Ａ「Ｄｅｌｅｔｅ」要素３１０の「ｐｏｓｉｔｉｏｎ」属性に割り当てる。
ｃ．量「ｐｏｓｉｔｉｏｎ」の値が「２」である場合に、値「ＢＥＧＩＮ」を、ＸＭＴ−Ａ「Ｄｅｌｅｔｅ」要素３１０の「ｐｏｓｉｔｉｏｎ」属性に割り当てる。
ｄ．量「ｐｏｓｉｔｉｏｎ」の値が「３」である場合に、値「ＥＮＤ」を、ＸＭＴ−Ａ「Ｄｅｌｅｔｅ」要素３１０の「ｐｏｓｉｔｉｏｎ」属性に割り当てる。
【０３９４】
ｍｐ４ｂｉｆｓ  ＤｅｌｅｔｅＲｏｕｔｅ要素のＸＭＴ−Ａ要素への変換
手順「ｍｐ４ｂｉｆｓ  ＤｅｌｅｔｅＲｏｕｔｅ要素のＸＭＴ−Ａ要素への変換」は、次のステップからなる。
１．新しいＸＭＴ−Ａ「Ｄｅｌｅｔｅ」要素３１０を作成し、現在のＸＭＴ−Ａ親要素に付加する。
２．ｍｐ４ｂｉｆｓ「ＤｅｌｅｔｅＲｏｕｔｅ」要素の「ｒｏｕｔｅＩｄ」属性の値をストリング量「ｒｏｕｔｅＩｄ」に割り当てる。
３．量「ｒｏｕｔｅＩｄ」の値をプレフィックス「ｒｏｕｔｅ：」に付加し、その結果をＸＭＴ−Ａ「Ｄｅｌｅｔｅ」要素３１０の「ａｔＲｏｕｔｅ」属性に割り当てる。
【０３９５】
ｍｐ４ｂｉｆｓ  ＲｅｐｌａｃｅＮｏｄｅ要素のＸＭＴ−Ａ要素への変換
手順「ｍｐ４ｂｉｆｓ  ＲｅｐｌａｃｅＮｏｄｅ要素のＸＭＴ−Ａ要素への変換」は、次のステップからなる。
１．新しいＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素３２０を作成し、現在のＸＭＴ−Ａ親要素に付加する。
２．ｎｏｄｅＩｄ属性を処理する。
ａ．ｍｐ４ｂｉｆｓ「ＲｅｐｌａｃｅＮｏｄｅ」要素の「ｎｏｄｅＩｄ」属性の値を、整数量「ｎｏｄｅＩｄ」に割り当てる。
ｂ．配列ｐＮｏｄｅＩｄＮａｍｅの項目ｎｏｄｅＩｄの値を、ストリング量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｃ．ストリング量「ｎｏｄｅＩｄＮａｍｅ」の値が、ヌルであるか、内容を有しない（０の長さ）場合に、量「ｎｏｄｅＩｄ」の値をプレフィックス「ｎｏｄｅＩｄ：」に付加し、その結果を量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｄ．量「ｎｏｄｅＩｄＮａｍｅ」の値を、ＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素３２０の「ａｔＮｏｄｅ」属性に割り当てる。
３．従属するｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素を処理する。
ａ．標準ｘｍｌ手段を使用して、現在のｂｉｆｓＣｏｍｍａｎｄ要素２９１０によって所有される従属するＮｏｄｅ要素２９２０のそれぞれを選択する。
ｂ．そのような選択された従属するＮｏｄｅ要素２９２０ごとに、手順「ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素のＸＭＴ−Ａ  Ｎｏｄｅ要素への変換」を実行する。
【０３９６】
ｍｐ４ｂｉｆｓ  ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ要素のＸＭＴ−Ａ要素への変換
手順「ｍｐ４ｂｉｆｓ  ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ要素のＸＭＴ−Ａ要素への変換」は、次のステップからなる。
１．新しいＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素３２０を作成し、現在のＸＭＴ−Ａ親要素（図７）に付加する。
２．ｎｏｄｅＩｄ属性を処理する。
ａ．ｍｐ４ｂｉｆｓ「ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ」要素の「ｎｏｄｅＩｄ」属性の値を、整数量「ｎｏｄｅＩｄ」に割り当てる。
ｂ．配列ｐＮｏｄｅＮｕｍｂｅｒの項目ｎｏｄｅＩｄの値を、整数量「ｎｏｄｅＮｕｍｂｅｒ」に割り当てる。
ｃ．配列ｐＮｏｄｅＩｄＮａｍｅの項目ｎｏｄｅＩｄの値を、ストリング量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｄ．ストリング量「ｎｏｄｅＩｄＮａｍｅ」の値が、ヌルであるか、内容を有しない（０の長さ）場合に、量「ｎｏｄｅＩｄ」の値をプレフィックス「ｎｏｄｅＩｄ：」に付加し、その結果を量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｅ．量「ｎｏｄｅＩｄＮａｍｅ」の値を、ＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素３２０の「ａｔＮｏｄｅ」属性に割り当てる。
３．ｉｎＦｉｅｌｄＮａｍｅ属性およびｖａｌｕｅ属性を処理する。
ａ．ｍｐ４ｂｉｆｓ「ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ」要素の「ｉｎＦｉｅｌｄＮａｍｅ」属性の値を、ＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素の「ａｔＦｉｅｌｄ」属性に割り当てる。
ｂ．ｍｐ４ｂｉｆｓ「ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ」要素の「ｖａｌｕｅ」属性の値を、ＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素３２０の「ｖａｌｕｅ」属性に割り当てる。
４．ｒｅｐｌａｃｅｍｅｎｔＰｏｓｉｔｉｏｎ属性を処理する。
ａ．ｍｐ４ｂｉｆｓ「ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ」要素の「ｒｅｐｌａｃｅｍｅｎｔＰｏｓｉｔｉｏｎ」属性の値を、ストリング量「ｐｏｓｉｔｉｏｎ」に割り当てる。
ｂ．量「ｐｏｓｉｔｉｏｎ」の値が「０」である場合に、ｍｐ４ｂｉｆｓ「ＩｎｓｅｒｔＮｏｄｅ」要素の「ｐｏｓｉｔｉｏｎ」属性の値を、ＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素３２０の「ｐｏｓｉｔｉｏｎ」属性に割り当てる。
ｃ．量「ｐｏｓｉｔｉｏｎ」の値が「２」である場合に、値「ＢＥＧＩＮ」を、ＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素３２０の「ｐｏｓｉｔｉｏｎ」属性に割り当てる。
ｄ．量「ｐｏｓｉｔｉｏｎ」の値が「３」である場合に、値「ＥＮＤ」を、ＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素３２０の「ｐｏｓｉｔｉｏｎ」属性に割り当てる。
５．従属するｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素を処理する。
ａ．標準ｘｍｌ手段を使用して、現在のｂｉｆｓＣｏｍｍａｎｄ要素２９１０によって所有される従属するＮｏｄｅ要素２９２０のそれぞれを選択する。
ｂ．そのような選択された従属するＮｏｄｅ要素２９２０ごとに、手順「ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素のＸＭＴ−Ａ  Ｎｏｄｅ要素への変換」を実行する。
【０３９７】
ｍｐ４ｂｉｆｓ  ＲｅｐｌａｃｅＦｉｅｌｄ要素のＸＭＴ−Ａ要素への変換
手順「ｍｐ４ｂｉｆｓ  ＲｅｐｌａｃｅＦｉｅｌｄ要素のＸＭＴ−Ａ要素への変換」は、次のステップからなる。
１．新しいＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素３２０を作成し、現在のＸＭＴ−Ａ親要素に付加する。
２．ｎｏｄｅＩｄ属性を処理する。
ａ．ｍｐ４ｂｉｆｓ「ＲｅｐｌａｃｅＦｉｅｌｄ」要素の「ｎｏｄｅＩｄ」属性の値を、整数量「ｎｏｄｅＩｄ」に割り当てる。
ｂ．配列ｐＮｏｄｅＮｕｍｂｅｒの項目ｎｏｄｅＩｄの値を、整数量「ｎｏｄｅＮｕｍｂｅｒ」に割り当てる。
ｃ．配列ｐＮｏｄｅＩｄＮａｍｅの項目ｎｏｄｅＩｄの値を、ストリング量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｄ．ストリング量「ｎｏｄｅＩｄＮａｍｅ」の値が、ヌルであるか、内容を有しない（０の長さ）場合に、量「ｎｏｄｅＩｄ」の値をプレフィックス「ｎｏｄｅＩｄ：」に付加し、その結果を量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｅ．量「ｎｏｄｅＩｄＮａｍｅ」の値を、ＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素の「ａｔＮｏｄｅ」属性に割り当てる。
３．ｉｎＦｉｅｌｄＮａｍｅ属性およびｖａｌｕｅ属性を処理する。
ａ．ｍｐ４ｂｉｆｓ「ＲｅｐｌａｃｅＦｉｅｌｄ」要素の「ｉｎＦｉｅｌｄＮａｍｅ」属性の値を、ＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素の「ａｔＦｉｅｌｄ」属性に割り当てる。
ｂ．ｍｐ４ｂｉｆｓ「ＲｅｐｌａｃｅＦｉｅｌｄ」要素の「ｖａｌｕｅ」属性の値を、ＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素の「ｖａｌｕｅ」属性に割り当てる。
４．従属するｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素を処理する。
ａ．標準ｘｍｌ手段を使用して、現在のｂｉｆｓＣｏｍｍａｎｄ要素２９１０によって所有される従属するＮｏｄｅ要素２９２０のそれぞれを選択する。
ｂ．そのような選択された従属するＮｏｄｅ要素２９２０ごとに、手順「ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素のＸＭＴ−Ａ  Ｎｏｄｅ要素への変換」を実行する。
【０３９８】
ｍｐ４ｂｉｆｓ  ＲｅｐｌａｃｅＲｏｕｔｅ要素のＸＭＴ−Ａ要素への変換
手順「ｍｐ４ｂｉｆｓ  ＲｅｐｌａｃｅＲｏｕｔｅ要素のＸＭＴ−Ａ要素への変換」は、次のステップからなる。
１．新しいＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素３２０を作成し、現在のＸＭＴ−Ａ親要素に付加する。
２．ｍｐ４ｂｉｆｓ「ＲｅｐｌａｃｅＲｏｕｔｅ」要素の「ｒｏｕｔｅＩｄ」属性の値をストリング量「ｒｏｕｔｅＩｄ」に割り当てる。
３．量「ｒｏｕｔｅＩｄ」の値をプレフィックス「ｒｏｕｔｅ：」に付加し、その結果をＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素の「ａｔＲｏｕｔｅ」属性に割り当てる。
４．ｍｐ４ｂｉｆｓ「ＲｅｐｌａｃｅＲｏｕｔｅ」要素に基づいて、手順「ｍｐ４ｂｉｆｓ  Ｒｏｕｔｅ要素の属性のＸＭＴ−Ａ  ＲＯＵＴＥ要素の属性への変換」を実行する。
【０３９９】
ｍｐ４ｂｉｆｓ  ＲｅｐｌａｃｅＳｃｅｎｅ要素のＸＭＴ−Ａ要素への変換
手順「ｍｐ４ｂｉｆｓ  ＲｅｐｌａｃｅＳｃｅｎｅ要素のＸＭＴ−Ａ要素への変換」は、次のステップからなる。
１．新しいＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素３２０を作成し、現在のＸＭＴ−Ａ親要素に付加する。
２．新しいＸＭＴ−Ａ「Ｓｃｅｎｅ」要素３７０を作成し、新しいＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素３２０に付加する。
３．ＲｅｐｌａｃｅＳｃｅｎｅ要素２９３０の「ＵＳＥＮＡＭＥＳ」属性の値を、ストリング量「ｕｓｅＮａｍｅｓ」に割り当てる。量ｕｓｅＮａｍｅｓの値が「真」である場合に、量ｕｓｅＮａｍｅｓの値を、新しいＸＭＴ−Ａ  Ｓｃｅｎｅ要素３７０の「ＵＳＥＮＡＭＥＳ」属性に割り当てる。
４．標準ｘｍｌ手段を使用して、ＲｅｐｌａｃｅＳｃｅｎｅ要素２９３０によって所有される従属要素のそれぞれを選択する。そのような選択された従属要素ごとに、次の動作を実行する。
５．選択された従属要素の名前が、「Ｒｏｕｔｅｓ」２９５０である場合に、次のステップを実行する。そうでない場合には、手順「ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素のＸＭＴ−Ａ  Ｎｏｄｅ要素への変換」を実行する。
６．標準ｘｍｌ手段を使用して、選択された「Ｒｏｕｔｅｓ」要素２９５０によって所有される従属要素のそれぞれを選択する。そのような従属要素のそれぞれは、「Ｒｏｕｔｅ」要素２９６０であると期待される。そのような「Ｒｏｕｔｅ」要素２９６０ごとに、次のステップを実行する。
７．新しいＸＭＴ−Ａ「ＲＯＵＴＥ」要素３９０を作成し、ＸＭＴ−Ａ「Ｓｃｅｎｅ」要素３７０に付加する。
８．任意選択のｒｏｕｔｅＩｄ属性を処理する。
ａ．選択された「Ｒｏｕｔｅ」要素２９６０の「ｒｏｕｔｅＩｄ」属性の値を、ストリング量「ｉＲｏｕｔｅ」に割り当てる。
ｂ．ｍｐ４ｂｉｆｓ「Ｒｏｕｔｅ」要素２９６０の「ｎａｍｅ」属性の値を、ストリング量「ｒｏｕｔｅＮａｍｅ」に割り当てる。
ｃ．ストリング量「ｒｏｕｔｅＮａｍｅ」の値が、ヌルでなく、少なくとも１つの文字を含む場合に、量「ｒｏｕｔｅＮａｍｅ」を、ＸＭＴ−Ａ「Ｒｏｕｔｅ」要素３９０の「ＤＥＦ」属性に割り当てる。そうではなく、ストリング量「ｉＲｏｕｔｅ」の値が、ヌルでなく、少なくとも１つの文字を含む場合に、量「ｉＲｏｕｔｅ」の値をプレフィックス「ｒｏｕｔｅ：」に付加し、その結果をＸＭＴ−Ａ「Ｒｏｕｔｅ」要素３９０の「ＤＥＦ」属性に割り当てる。
９．ｍｐ４ｂｉｆｓ「Ｒｏｕｔｅ」要素２９６０に基づいて、手順「ｍｐ４ｂｉｆｓ  Ｒｏｕｔｅ要素の属性のＸＭＴ−Ａ  ＲＯＵＴＥ要素の属性への変換」を実行する。
【０４００】
ｍｐ４ｂｉｆｓ  Ｒｏｕｔｅ要素の属性のＸＭＴ−Ａ  ＲＯＵＴＥ要素の属性への変換
手順「ｍｐ４ｂｉｆｓ  Ｒｏｕｔｅ要素の属性のＸＭＴ−Ａ  ＲＯＵＴＥ要素の属性への変換」は、次のステップからなる。
【０４０１】
この手順で参照されるｍｐ４ｂｉｆｓ  Ｒｏｕｔｅ要素は、ｍｐ４ｂｉｆｓ「Ｒｏｕｔｅ」要素２９６０、ｍｐ４ｂｉｆｓ「ＩｎｓｅｒｔＲｏｕｔｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２９１０、またはｍｐ４ｂｉｆｓ「ＲｅｐｌａｃｅＲｏｕｔｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２９１０とすることができる。
１．ｄｅｐａｒｔｕｒｅＮｏｄｅ値を処理する。
ａ．ｍｐ４ｂｉｆｓ  Ｒｏｕｔｅ要素の「ｄｅｐａｒｔｕｒｅＮｏｄｅ」属性の値を、整数量「ｎｏｄｅＩｄ」に割り当てる。
ｂ．配列ｐＮｏｄｅＮｕｍｂｅｒの項目ｎｏｄｅＩｄの値を、整数量「ｎｏｄｅＮｕｍｂｅｒ」に割り当てる。
ｃ．配列ｐＮｏｄｅＩｄＮａｍｅの項目ｎｏｄｅＩｄの値を、ストリング量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｄ．ストリング量「ｎｏｄｅＩｄＮａｍｅ」の値が、ヌルであるか、内容を有しない（０の長さ）場合に、量「ｎｏｄｅＩｄ」の値をプレフィックス「ｎｏｄｅＩｄ：」に付加し、その結果を量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｅ．量「ｎｏｄｅＩｄＮａｍｅ」の値を、ＸＭＴ−Ａ「ＲＯＵＴＥ」要素３６０または３９０の「ｆｒｏｍＮｏｄｅ」属性に割り当てる。
２．ｄｅｐａｒｔｕｒｅＦｉｅｌｄ値を処理する。
ａ．ｍｐ４ｂｉｆｓ  Ｒｏｕｔｅ要素の「ｄｅｐａｒｔｕｒｅＦｉｅｌｄ」属性の値を、整数量「ｆｉｅｌｄ」に割り当てる。
ｂ．インデックス「ｎｏｄｅＮｕｍｂｅｒ」を有するＢＩＦＳノードの、ＭＰＥＧ−４仕様で定義されたフィールド名の配列の項目「ｆｉｅｌｄ」の値を、ストリング量「ｆｉｅｌｄＮａｍｅ」に割り当てる。
ｃ．量「ｆｉｅｌｄＮａｍｅ」の値を、ＸＭＴ−Ａ「ＲＯＵＴＥ」要素３６０または３９０の「ｆｒｏｍＦｉｅｌｄ」属性に割り当てる。
３．ａｒｒｉｖａｌＮｏｄｅ値を処理する。
ａ．ｍｐ４ｂｉｆｓ  Ｒｏｕｔｅ要素の「ａｒｒｉｖａｌＮｏｄｅ」属性の値を、整数量「ｎｏｄｅＩｄ」に割り当てる。
ｂ．配列ｐＮｏｄｅＮｕｍｂｅｒの項目ｎｏｄｅＩｄの値を、整数量「ｎｏｄｅＮｕｍｂｅｒ」に割り当てる。
ｃ．配列ｐＮｏｄｅＩｄＮａｍｅの項目ｎｏｄｅＩｄの値を、ストリング量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｄ．ストリング量「ｎｏｄｅＩｄＮａｍｅ」の値が、ヌルであるか、内容を有しない（０の長さ）場合に、量「ｎｏｄｅＩｄ」の値をプレフィックス「ｎｏｄｅＩｄ：」に付加し、その結果を量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｅ．量「ｎｏｄｅＩｄＮａｍｅ」の値を、ＸＭＴ−Ａ「ＲＯＵＴＥ」要素３６０または３９０の「ｔｏＮｏｄｅ」属性に割り当てる。
４．ａｒｒｉｖａｌＦｉｅｌｄ値を処理する。
ａ．ｍｐ４ｂｉｆｓ  Ｒｏｕｔｅ要素の「ａｒｒｉｖａｌＦｉｅｌｄ」属性の値を、整数量「ｆｉｅｌｄ」に割り当てる。
ｂ．インデックス「ｎｏｄｅＮｕｍｂｅｒ」を有するＢＩＦＳノードの、ＭＰＥＧ−４仕様で定義されたフィールド名の配列の項目「ｆｉｅｌｄ」の値を、ストリング量「ｆｉｅｌｄＮａｍｅ」に割り当てる。
ｃ．量「ｆｉｅｌｄＮａｍｅ」の値を、ＸＭＴ−Ａ「ＲＯＵＴＥ」要素３６０または３９０の「ｔｏＦｉｅｌｄ」属性に割り当てる。
【０４０２】
ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素のＸＭＴ−Ａ  Ｎｏｄｅ要素への変換
各ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素３０００は、特定のＸＭＴ−Ａ親要素に従属する新しいＸＭＴ−Ａ  Ｎｏｄｅ要素４００によって表される。このＸＭＴ−Ａ親要素の識別は、ｍｐ４ｂｉｆｓ  Ｎｏｄｅ  ３０００要素が従属するｍｐ４ｂｉｆｓ要素によって決定される。
ａ．ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０が、ＩｎｓｅｒｔＮｏｄｅ  ｂｉｆｓＣｏｍｍａｎｄ要素２９１０またはＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ  ｂｉｆｓＣｏｍｍａｎｄ要素２９１０に従属する場合に、ＸＭＴ−Ａ親要素は、対応するＸＭＴ−Ａ「Ｉｎｓｅｒｔ」要素３００によって定義される。
ｂ．ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０が、ＲｅｐｌａｃｅＮｏｄｅ  ｂｉｆｓＣｏｍｍａｎｄ要素２９１０、ＲｅｐｌａｃｅＦｉｅｌｄ  ｂｉｆｓＣｏｍｍａｎｄ要素２９１０、またはＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ  ｂｉｆｓＣｏｍｍａｎｄ要素２９１０に従属する場合に、ＸＭＴ−Ａ親要素は、対応するＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素３２０によって定義される。
ｃ．ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０が、ＲｅｐｌａｃｅＳｃｅｎｅ  ｂｉｆｓＣｏｍｍａｎｄ要素２９３０に従属する場合に、ＸＭＴ−Ａ親要素は、対応するＸＭＴ−Ａ「Ｓｃｅｎｅ」要素３７０によって定義される。
ｄ．ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素３０３０が、もう１つのｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素３０００またはＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ  ｂｉｆｓＣｏｍｍａｎｄ要素２９１０に従属する場合に、ＸＭＴ−Ａ親要素は、対応するＸＭＴ−Ａ「ｎｏｄｅＦｉｅｌｄ」要素４１０によって定義される。
【０４０３】
ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素の要素名が、「ＲｅｕｓｅｄＮｏｄｅ」３０８０である場合には、手順「ｍｐ４ｂｉｆｓ  ＲｅｕｓｅｄＮｏｄｅ要素のＸＭＴ−Ａ  Ｎｏｄｅ要素の作成」を実行する。そうでない場合には、次のステップを実行する。
１．整数量「ｎｏｄｅＮｕｍｂｅｒ」の値を決定する。この値は、示される項目の値が現在のｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素３０００のＮｏｄｅＮａｍｅと一致する、ＭＰＥＧ−４仕様で定義されたノード名の配列の項目番号によって決定される。
２．ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素３０００と同一の要素名（ＮｏｄｅＮａｍｅ）を有する新しいＸＭＴ−Ａ  Ｎｏｄｅ要素４００を作成し、ＸＭＴ−Ａ親要素に付加する。この新しいＸＭＴ−Ａ  Ｎｏｄｅ要素を、「現在のＸＭＴ−Ａ  Ｎｏｄｅ要素」と定義する。
３．必要な場合に、「ＤＥＦ」属性の値を決定する。
ａ．ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素３０００の「ｎａｍｅ」属性３０１６の値を、ストリング量「ｎｏｄｅＩｄＮａｍｅ」に割り当てる。
ｂ．量「ｎｏｄｅＩｄＮａｍｅ」の値が、ヌルでなく、この量によって表されるストリングが、少なくとも１つの文字を有する場合に、量「ｎｏｄｅＩｄＮａｍｅ」の値を、新しいＸＭＴ−Ａ  Ｎｏｄｅ要素４００の「ＤＥＦ」属性に割り当てる。
ｃ．量「ｎｏｄｅＩｄＮａｍｅ」の値がヌルであるか、この量によって表されるストリングが、少なくとも１つの文字を有しない場合に、ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素３０００の「ＮｏｄｅＩｄ」属性３０１０の値を、ストリング量「ｎｏｄｅＩｄ」に割り当てる。
ｄ．量「ｎｏｄｅＩｄ」の値が、ヌルでなく、この量によって表されるストリングが、少なくとも１つの文字を有する場合に、量「ｎｏｄｅＩｄ」の値をプレフィックス「ｎｏｄｅＩｄ：」に付加し、その結果を、新しいＸＭＴ−Ａ  Ｎｏｄｅ要素４００の「ＤＥＦ」属性に割り当てる。
４．標準ｘｍｌ手段を使用して、現在のｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素３０００について指定されたプロパティ・フィールド属性値３０２０のそれぞれを選択する。
５．現在の属性値の名前の値を、ストリング量「ａｔｔｒｉｂｕｔｅＮａｍｅ」に割り当てる。
６．ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素３０００のプロパティ・フィールド属性値３０２０ごとに、次のステップを実行する。
７．フィールド・データ型を決定する。
ａ．整数量「ｆｉｅｌｄ」の値を判定する。この値は、「ａｔｔｒｉｂｕｔｅＮａｍｅ」の値と一致するフィールド名のテーブルのメンバの項目番号の値と等しい。フィールド名のテーブルは、現在のｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素に関連するノード名およびノード番号を有するＢＩＦＳノードに関するＭＰＥＧ−４仕様によって定義される。
ｂ．ｆｉｅｌｄＤａｔａＴｙｐｅ値のテーブルの項目「ｆｉｅｌｄ」の値を、整数量「ｆｉｅｌｄＤａｔａＴｙｐｅ」に割り当てる。ｆｉｅｌｄＤａｔａＴｙｐｅ値のテーブルは、現在のｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素３０００に関連するノード名およびノード番号を有するＢＩＦＳノードに関するＭＰＥＧ−４仕様によって定義される。
８．ＵＲＬフィールド・データ型について検査する。フィールド・データ型が、「ＵＲＬ」フィールド・データ型を表すものとしてＭＰＥＧ−４仕様で定義された値と等しい場合に、次の動作を実行する。
ａ．ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素の「ａｔｔｒｉｂｕｔｅＮａｍｅ」属性の値をストリング量「ｕｒｌＳｔｒｉｎｇ」に割り当てる。
ｂ．量「ｕｒｌＳｔｒｉｎｇ」によって表される文字ストリングの最初の５文字を、プレフィックス「ｏｄｉｄ：／／ＯＤＩＤ：」に置換する。
ｃ．結果のストリング値を、現在のＸＭＴ−Ａ  Ｎｏｄｅ要素４００の「ａｔｔｒｉｂｕｔｅＮａｍｅ」属性に割り当てる。
９．Ｎｏｄｅフィールド・データ型について検査する。フィールド・データ型が、「Ｎｏｄｅ」フィールド・データ型を表すものとしてＭＰＥＧ−４仕様で定義された値と等しい場合に、次の動作を実行する。
ａ．要素名「ａｔｔｒｉｂｕｔｅＮａｍｅ」を有する新しいＸＭＴ−Ａ要素を作成し、現在のＸＭＴ−Ａ  Ｎｏｄｅ要素に付加する。この要素を、「現在のＸＭＴ−Ａ  ｎｏｄｅＦｉｅｌｄ要素」と定義する。
ｂ．標準ｘｍｌ手段を使用して、現在のｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素によって所有される従属要素のそれぞれを選択する。これらの従属要素のそれぞれが、もう１つのｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素であると期待される。これらの従属要素は、「子」要素と指定され、現在のｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素は、「親」要素と指定される。
ｃ．現在のＸＭＴ−Ａ  ｎｏｄｅＦｉｅｌｄ要素を「親」要素として使用して、各子要素に対して手順「ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素のＸＭＴ−Ａ  Ｎｏｄｅ要素への変換」を実行する。
１０．Ｃｏｍｍａｎｄ  Ｂｕｆｆｅｒフィールド・データ型について検査する。フィールド・データ型が、「Ｃｏｍｍａｎｄ  Ｂｕｆｆｅｒ」フィールド・データ型を表すものとしてＭＰＥＧ−４仕様で定義された値と等しい場合に、次の動作を実行する。
ａ．要素名「ａｔｔｒｉｂｕｔｅＮａｍｅ」を有する新しいＸＭＴ−Ａ要素を作成し、現在のＸＭＴ−Ａ  Ｎｏｄｅ要素に付加する。この要素を、「現在のＸＭＴ−Ａ  ｎｏｄｅＦｉｅｌｄ要素」４００と定義する。
ｂ．現在のＸＭＴ−Ａ  ｎｏｄｅＦｉｅｌｄ要素を「親」要素として使用して、手順「ｍｐ４ｂｉｆｓ  ｃｏｍｍａｎｄＦｒａｍｅ要素のＸＭＴ−Ａ要素への変換」を実行する。
１１．他の属性を処理する。フィールド・データ型が、前のステップで識別される値の１つでない場合に、次の動作を実行する。
ａ．ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素の「ａｔｔｒｉｂｕｔｅＮａｍｅ」属性の値を、ストリング量「ａｔｔｒｉｂｕｔｅＶａｌｕｅ」に割り当てる。
ｂ．量「ａｔｔｒｉｂｕｔｅＶａｌｕｅ」の値を、現在のＸＭＴ−Ａ  Ｎｏｄｅ要素４００の「ａｔｔｒｉｂｕｔｅＮａｍｅ」属性に割り当てる。
【０４０４】
ｍｐ４ｂｉｆｓ  ＲｅｕｓｅｄＮｏｄｅ要素のＸＭＴ−Ａ  Ｎｏｄｅ要素の作成
ｍｐ４ｂｉｆｓ  ＲｅｕｓｅｄＮｏｄｅ要素３０８０の場合に、ｎｏｄｅＲｅｆ値３０９０が、必要な属性である。ｍｐ４ｂｉｆｓ  ＲｅｕｓｅｄＮｏｄｅ要素３０８０ごとに、次のステップを実行する。
１．ｎｏｄｅＲｅｆ属性３０９０の値を、整数量「ｎｏｄｅＩｄ」に割り当てる。
２．配列ｐＮｏｄｅＮｕｍｂｅｒｓの項目「ｎｏｄｅＩｄ」の値を、整数量「ｎｏｄｅＮｕｍｂｅｒ」に割り当てる。
３．ＭＰＥＧ−４仕様で定義されたノード名のテーブルの項目「ｎｏｄｅＮｕｍｂｅｒ」の値を、ストリング量「ｎｏｄｅＮａｍｅ」に割り当てる。
４．型「ｎｏｄｅＮａｍｅ」の新しいＸＭＴ−Ａ  ｎｏｄｅ要素４００を作成し、現在のＸＭＴ−Ａ親要素に付加する。
５．量ｎｏｄｅＩｄの値を、新しいＸＭＴ−Ａ  ｎｏｄｅ要素４００の「ＵＳＥ」属性に割り当てる。
【０４０５】
本発明の前述の説明は、例示および説明のために提示されたものである。網羅的であることまたは本発明を開示された形態に制限することは意図されておらず、他の修正形態および変形形態が、上の教示に鑑みて可能である。たとえば、ＸＭＴ−Ａファイルの正確な定義が、時と共に変化または進化する可能性がある。同様に、ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａ  Ｆｏｒｍａｔの正確な定義が、時と共に変化または進化する可能性がある。本明細書に記載の発明は、上に示した文書で指定される特定の定義に制限されない。したがって、本発明の原理は、他の関連しないデータ構造にも適用することができる。ＳＦＮｏｄｅデータ構造の他の拡張形式も、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されている。そのような事例を含むために次の実施形態で説明されるように本発明を拡張する手段が、当業者に明白になる。したがって、開示された実施形態は、本発明の原理およびその実用的な応用例を最もよく説明し、これによって、当業者が、企図される特定の使用に適するようにさまざまな実施形態およびさまざまな修正形態で本発明を最もよく利用できるようにするために、選択され、説明された。請求項が、従来技術によって制限される範囲を除いて、本発明の他の代替実施形態を含むように解釈されることが意図されている。
【図面の簡単な説明】
【０４０６】
【図１】本発明の一実施形態によって使用される例示的なＸＭＴ−Ａ文書を示す図である。
【図２】例示的なＸＭＴ−Ａ  Ｉｎｉｔｉａｌ  Ｏｂｊｅｃｔ  Ｄｅｓｃｒｉｐｔｏｒを示す図である。
【図３】例示的なＸＭＴ−Ａ  ｐａｒ要素を示す図である。
【図４】例示的なＸＭＴ−Ａ  ｏｄｓｍコマンド要素を示す図である。
【図５】例示的なＸＭＴ−Ａ  Ｉｎｓｅｒｔコマンドを示す図である。
【図６】例示的なＸＭＴ−Ａ  Ｄｅｌｅｔｅコマンドを示す図である。
【図７】例示的なＸＭＴ−Ａ  Ｒｅｐｌａｃｅコマンドを示す図である。
【図８】例示的なＸＭＴ−Ａ  ＢＩＦＳ  Ｎｏｄｅ要素を示す図である。
【図９】例示的なＸＭＴ−Ａ  ＢＩＦＳ  Ｎｏｄｅを示す図である。
【図１０】例示的な再利用されるＸＭＴ−Ａ  ＢＩＦＳ  Ｎｏｄｅを示す図である。
【図１１】例示的なＸＭＴ−Ａ  ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒを示す図である。
【図１２】例示的なＸＭＴ−Ａ  ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒを示す図である。
【図１３】ｓｄｓｍ（ＢＩＦＳ）に関する例示的なＤｅｃｏｄｅｒＳｐｅｃｉｆｉｃＩｎｆｏを示す図である。
【図１４】本発明の一実施形態によって生成される例示的なｍｐ４バイナリ・ファイルを示す図である。
【図１５】例示的なｍｄａｔアトムを示す図である。
【図１６】例示的なチャンクを示す図である。
【図１７】例示的なｍｏｏｖアトムを示す図である。
【図１８】例示的なｍｐ４ファイルｉｏｄｓアトムを示す図である。
【図１９】例示的なＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒを示す図である。
【図２０】例示的なＥＳ＿ＩＤ＿Ｉｎｃを示す図である。
【図２１】例示的なｔｒａｋアトムを示す図である。
【図２２】例示的なｓａｍｐｌｅ  ｔａｂｌｅｓアトムを示す図である。
【図２３】例示的なバイナリＥＳ記述子を示す図である。
【図２４】例示的なデコーダ構成記述子を示す図である。
【図２５】例示的なデコーダ固有情報記述子を示す図である。
【図２６】例示的なバイナリＳＬ構成記述子を示す図である。
【図２７】例示的なｓｄｓｍバイナリ・チャンクを示す図である。
【図２８】例示的なｓｄｓｍコマンド・フレームを示す図である。
【図２９】例示的なＢＩＦＳ挿入コマンドを示す図である。
【図３０】例示的なＢＩＦＳ削除コマンドを示す図である。
【図３１】例示的なＢＩＦＳ置換コマンドを示す図である。
【図３２】例示的なＢＩＦＳシーン置換コマンドを示す図である。
【図３３】例示的なＮｏｄｅ挿入コマンドを示す図である。
【図３４】例示的なＩｎｄｅｘｅｄＶａｌｕｅ挿入コマンドを示す図である。
【図３５】例示的なＲｏｕｔｅ挿入コマンドを示す図である。
【図３６】例示的なＮｏｄｅ削除コマンドを示す図である。
【図３７】例示的なＩｎｄｅｘｅｄＶａｌｕｅ削除コマンドを示す図である。
【図３８】例示的なＲｏｕｔｅ削除コマンドを示す図である。
【図３９】例示的なＮｏｄｅ置換コマンドを示す図である。
【図４０】例示的なＦｉｅｌｄ置換コマンドを示す図である。
【図４１】例示的なＩｎｄｅｘｅｄＶａｌｕｅ置換コマンドを示す図である。
【図４２】例示的なＲｏｕｔｅ置換コマンドを示す図である。
【図４３】例示的なＢＩＦＳ  Ｓｃｅｎｅを示す図である。
【図４４】例示的なＳＦＮｏｄｅ（再利用される）を示す図である。
【図４５】例示的なＳＦＮｏｄｅ（マスク・ノード）を示す図である。
【図４６】例示的なＳＦＮｏｄｅ（リスト・ノード）を示す図である。
【図４７】例示的なＭＦＦｉｅｌｄ（リスト形式）を示す図である。
【図４８】例示的なＭＦＦｉｅｌｄ（ベクトル形式）を示す図である。
【図４９】例示的なＲｏｕｔｅｓ（リスト形式）を示す図である。
【図５０】例示的なＲｏｕｔｅｓ（ベクトル形式）を示す図である。
【図５１】例示的なＲｏｕｔｅを示す図である。
【図５２】例示的なｏｄｓｍバイナリ・チャンクを示す図である。
【図５３】例示的なｏｄｓｍバイナリ・サンプルを示す図である。
【図５４】例示的なＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅコマンドを示す図である。
【図５５】例示的なＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅコマンドを示す図である。
【図５６】例示的なバイナリ・オブジェクト記述子を示す図である。
【図５７】例示的なバイナリＥｓＩｄＲｅｆ記述子を示す図である。
【図５８】本発明によって企図される、例示的なＭＰＥＧ−４からＸＭＴ−Ａへの中間ファイル・コンバータを示す図である。
【図５９】例示的なｍｐ４ｆｉｌｅ文書を示す図である。
【図６０】例示的なｍｐ４ｆｉｏｄｓ文書を示す図である。
【図６１】例示的なｍｄａｔ要素を示す図である。
【図６２】例示的なｓｄｓｍ要素を示す図である。
【図６３】例示的なｏｄｓｍ要素を示す図である。
【図６４】例示的なｍｅｄｉａＦｉｌｅ要素を示す図である。
【図６５】例示的なｏｄｓｍＣｈｕｎｋ要素を示す図である。
【図６６】例示的なｏｄｓｍＳａｍｐｌｅ要素を示す図である。
【図６７】例示的なｏｄｓｍコマンド要素を示す図である。
【図６８】例示的なｔｒａｋ要素を示す図である。
【図６９】例示的なｓｔｂｌ要素を示す図である。
【図７０】例示的なＥＳ＿Ｄｅｓｃｒを示す図である。
【図７１】例示的なｍｐ４ｂｉｆｓ文書を示す図である。
【図７２】例示的なｍｐ４ｂｉｆｓ  ｃｏｍｍａｎｄＦｒａｍｅ要素を示す図である。
【図７３】例示的なｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｍｍａｎｄ要素を示す図である。
【図７４】例示的なｍｐ４ｂｉｆｓ  ＲｅｐｌａｃｅＳｃｅｎｅ要素を示す図である。
【図７５】例示的なｍｐ４ｂｉｆｓのオリジナルＮｏｄｅ要素を示す図である。
【図７６】例示的なｍｐ４ｂｉｆｓ  Ｃｏｎｄｉｔｉｏｎａｌ  Ｎｏｄｅ要素を示す図である。
【図７７】例示的なｍｐ４ｂｉｆｓの再利用されるＮｏｄｅ要素を示す図である。
【図７８】例示的なＱｔＩｎｆｏ構造を示す図である。
【図７９】例示的なＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒ要素を示す図である。
【図８０】例示的なｍｄａｔ構造を示す図である。
【図８１】例示的なＭｏｏｖＨｅａｄｅｒを示す図である。
【図８２】例示的なｔｒａｃｋ構造を示す図である。
【図８３】例示的なＴｒａｃｋＨｅａｄｅｒ構造を示す図である。
【図８４】例示的なＴｒａｃｋＭｅｄｉａ構造を示す図である。
【図８５】例示的なＴｒａｃｋＥｄｉｔ構造を示す図である。
【図８６】例示的なＥｄｉｔＬｉｓｔ構造を示す図である。
【図８７】例示的なＥｄｉｔＳｅｇｍｅｎｔ構造を示す図である。
【図８８】例示的なＴｒａｃｋＲｅｆｅｒｅｎｃｅ構造を示す図である。
【図８９】例示的なＭｐｏｄ構造を示す図である。
【図９０】例示的なＵｓｅｒＤａｔａ構造を示す図である。
【図９１】例示的なｃｐｒｔ構造を示す図である。
【図９２】例示的なＭｅｄｉａＨｅａｄｅｒ構造を示す図である。
【図９３】例示的なＨａｎｄｌｅｒ構造を示す図である。
【図９４】例示的なＭｅｄｉａＩｎｆｏ構造を示す図である。
【図９５】例示的なＭｅｄｉａＤａｔａＩｎｆｏ構造を示す図である。
【図９６】例示的なＤａｔａＲｅｆＴａｂｌｅ構造を示す図である。
【図９７】例示的なｄａｔａＲｅｆ構造を示す図である。
【図９８】例示的なＳａｍｐｌｅＴａｂｌｅｓ構造を示す図である。
【図９９】例示的なサンプル・テーブル構造を示す図である。
【図１００】例示的なＳａｍｐｌｅＳｉｚｅＴａｂｌｅ構造を示す図である。
【図１０１】例示的なＳａｍｐｌｅＴｏＣｈｕｎｋ構造を示す図である。
【図１０２】例示的なＴｉｍｅＴｏＳａｍｐｌｅ構造を示す図である。
【図１０３】例示的なＳａｍｐｌｅＤｅｓｃｒｉｐｔｉｏｎ構造を示す図である。
【図１０４】例示的なｍｐ４ファイル解釈を示す流れ図である。
【図１０５】例示的なｍｄａｔアトム処理を示す流れ図である。
【図１０６】例示的なｍｏｏｖアトム処理を示す流れ図である。
【図１０７】例示的なｔｒａｋアトム処理を示す流れ図である。
【図１０８】例示的なｔｒａｃｋ  ｍｅｄｉａアトム処理を示す流れ図である。
【図１０９】例示的なｍｅｄｉａ  ｉｎｆｏアトム処理を示す流れ図である。
【図１１０】例示的なｓａｍｐｌｅ  ｔａｂｌｅｓアトム処理を示す流れ図である。
【図１１１】ＱｔＩｎｆｏデータ構造で表現されたメディア・データ・アトムのｘｍｌ表現の形成を示す例示的な流れ図である。
【図１１２】例示的なメディア・データ処理を示す流れ図である。
【図１１３】ストリーム・タイプを見つける、例示的な流れ図である。
【図１１４】デコーダ構成記述子を見つける、例示的な流れ図である。
【図１１５】例示的なタグ・サイズ取得を示す流れ図である。
【図１１６】ｏｄｓｍデータ・ストリームからのｘｍｌ表現作成を示す例示的な流れ図である。
【図１１７】例示的なｏｄｓｍチャンク・デコードを示す流れ図である。
【図１１８】例示的なＯｄＵｐｄａｔｅデコードを示す流れ図である。
【図１１９】例示的なｄｅｃｏｄｅＥｓＩｄＲｅｆ手順を示す流れ図である。
【図１２０】メディア・ファイル作成とｍｄａｔアトムの表現を示す例示的な流れ図である。
【図１２１】例示的なＳｄｓｍＤａｔａＴｏＸｍｌ手順を示す流れ図である。
【図１２２】例示的なｓｄｓｍチャンク・デコード手順を示す流れ図である。
【図１２３】例示的な挿入コマンド・デコード手順を示す流れ図である。
【図１２４】例示的な削除コマンド・デコード手順を示す流れ図である。
【図１２５】例示的な置換コマンド・デコード手順を示す流れ図である。
【図１２６】例示的なＳＦＮｏｄｅデコード手順を示す流れ図である。
【図１２７】ｍｏｏｖアトムのｘｍｌ表現作成を示す例示的な流れ図である。
【図１２８】ＸＭＴ−Ａ文書作成を示す例示的な流れ図である。
【図１２９】ＸＭＴ−Ａヘッダ作成を示す例示的な流れ図である。
【図１３０】ＥｓＩｄＩｎｃ要素の処理を示す例示的な流れ図である。
【図１３１】例示的なｓｔｒｅａｍＴｙｐｅ変換テーブルを示す図である。
【図１３２】例示的なｏｂｊｅｃｔＴｙｐｅ−ｏｂｊｅｃｔＴｙｐｅＩｎｄｉｃａｔｉｏｎテーブルを示す図である。
【図１３３】Ｏｂｊｅｃｔ  Ｄｅｓｃｒｉｐｔｏｒコマンドを表す「ｐａｒ」を作成する手順を示す例示的な流れ図である。
【図１３４】ｃｏｍｍａｎｄＦｒａｍｅ要素を表す「ｐａｒ」の作成を示す例示的な流れ図である。
【図１３５】ノード番号値およびｎｏｄｅＩｄ名のテーブル作成を示す例示的な流れ図である。
【図１】
2006517309.tif 000003
【図２】
2006517309.tif 000004
【図３】
2006517309.tif 000005
【図４】
2006517309.tif 000006
【図５】
2006517309.tif 000007
【図６】
2006517309.tif 000008
【図７】
2006517309.tif 000009
【図８】
2006517309.tif 000010
【図９】
2006517309.tif 000011
【図１０】
2006517309.tif 000012
【図１１】
2006517309.tif 000013
【図１２】
2006517309.tif 000014
【図１３】
2006517309.tif 000015
【図１４】
2006517309.tif 000016
【図１５】
2006517309.tif 000017
【図１６】
2006517309.tif 000018
【図１７】
2006517309.tif 000019
【図１８】
2006517309.tif 000020
【図１９】
2006517309.tif 000021
【図２０】
2006517309.tif 000022
【図２１】
2006517309.tif 000023
【図２２】
2006517309.tif 000024
【図２３】
2006517309.tif 000025
【図２４】
2006517309.tif 000026
【図２５】
2006517309.tif 000027
【図２６】
2006517309.tif 000028
【図２７】
2006517309.tif 000029
【図２８】
2006517309.tif 000030
【図２９】
2006517309.tif 000031
【図３０】
2006517309.tif 000032
【図３１】
2006517309.tif 000033
【図３２】
2006517309.tif 000034
【図３３】
2006517309.tif 000035
【図３４】
2006517309.tif 000036
【図３５】
2006517309.tif 000037
【図３６】
2006517309.tif 000038
【図３７】
2006517309.tif 000039
【図３８】
2006517309.tif 000040
【図３９】
2006517309.tif 000041
【図４０】
2006517309.tif 000042
【図４１】
2006517309.tif 000043
【図４２】
2006517309.tif 000044
【図４３】
2006517309.tif 000045
【図４４】
2006517309.tif 000046
【図４５】
2006517309.tif 000047
【図４６】
2006517309.tif 000048
【図４７】
2006517309.tif 000049
【図４８】
2006517309.tif 000050
【図４９】
2006517309.tif 000051
【図５０】
2006517309.tif 000052
【図５１】
2006517309.tif 000053
【図５２】
2006517309.tif 000054
【図５３】
2006517309.tif 000055
【図５４】
2006517309.tif 000056
【図５５】
2006517309.tif 000057
【図５６】
2006517309.tif 000058
【図５７】
2006517309.tif 000059
【図５８】
2006517309.tif 000060
【図５９】
2006517309.tif 000061
【図６０】
2006517309.tif 000062
【図６１】
2006517309.tif 000063
【図６２】
2006517309.tif 000064
【図６３】
2006517309.tif 000065
【図６４】
2006517309.tif 000066
【図６５】
2006517309.tif 000067
【図６６】
2006517309.tif 000068
【図６７】
2006517309.tif 000069
【図６８】
2006517309.tif 000070
【図６９】
2006517309.tif 000071
【図７０】
2006517309.tif 000072
【図７１】
2006517309.tif 000073
【図７２】
2006517309.tif 000074
【図７３】
2006517309.tif 000075
【図７４】
2006517309.tif 000076
【図７５】
2006517309.tif 000077
【図７６】
2006517309.tif 000078
【図７７】
2006517309.tif 000079
【図７８】
2006517309.tif 000080
【図７９】
2006517309.tif 000081
【図８０】
2006517309.tif 000082
【図８１】
2006517309.tif 000083
【図８２】
2006517309.tif 000084
【図８３】
2006517309.tif 000085
【図８４】
2006517309.tif 000086
【図８５】
2006517309.tif 000087
【図８６】
2006517309.tif 000088
【図８７】
2006517309.tif 000089
【図８８】
2006517309.tif 000090
【図８９】
2006517309.tif 000091
【図９０】
2006517309.tif 000092
【図９１】
2006517309.tif 000093
【図９２】
2006517309.tif 000094
【図９３】
2006517309.tif 000095
【図９４】
2006517309.tif 000096
【図９５】
2006517309.tif 000097
【図９６】
2006517309.tif 000098
【図９７】
2006517309.tif 000099
【図９８】
2006517309.tif 000100
【図９９】
2006517309.tif 000101
【図１００】
2006517309.tif 000102
【図１０１】
2006517309.tif 000103
【図１０２】
2006517309.tif 000104
【図１０３】
2006517309.tif 000105
【図１０４】
2006517309.tif 000106
【図１０５】
2006517309.tif 000107
【図１０６】
2006517309.tif 000108
【図１０７】
2006517309.tif 000109
【図１０８】
2006517309.tif 000110
【図１０９】
2006517309.tif 000111
【図１１０】
2006517309.tif 000112
【図１１１】
2006517309.tif 000113
【図１１２】
2006517309.tif 000114
【図１１３】
2006517309.tif 000115
【図１１４】
2006517309.tif 000116
【図１１５】
2006517309.tif 000117
【図１１６】
2006517309.tif 000118
【図１１７】
2006517309.tif 000119
【図１１８】
2006517309.tif 000120
【図１１９】
2006517309.tif 000121
【図１２０】
2006517309.tif 000122
【図１２１】
2006517309.tif 000123
【図１２２】
2006517309.tif 000124
【図１２３】
2006517309.tif 000125
【図１２４】
2006517309.tif 000126
【図１２５】
2006517309.tif 000127
【図１２６】
2006517309.tif 000128
【図１２７】
2006517309.tif 000129
【図１２８】
2006517309.tif 000130
【図１２９】
2006517309.tif 000131
【図１３０】
2006517309.tif 000132
【図１３１】
2006517309.tif 000133
【図１３２】
2006517309.tif 000134
【図１３３】
2006517309.tif 000135
【図１３４】
2006517309.tif 000136
【図１３５】
2006517309.tif 000137