(57)【要約】【課題】ＸＭＴ（Ｅｘｔｅｎｓｉｂｌｅ  ＭＰＥＧ−４  Ｔｅｘｔｕａｌ）文書をバイナリＭＰＥＧ−４（ｍｐ４）ファイルに変換する方法、システム、およびコンピュータ・プログラム製品を提供すること。【解決手段】ＸＭＴ文書に、０個以上の関連するメディア・データ・ファイルが含まれる可能性がある。本発明に、ｍｐ４ファイルを表す中間文書を生成することと、中間文書および関連するメディア・データ・ファイルに基づいてｍｐ４ファイルを作成することが含まれる。第１コンバータが、ＸＭＴ文書を入力し、ｍｐ４ファイルの構造を表す少なくとも１つの中間文書を生成するように構成される。第２コンバータが、中間文書および関連するメディア・ファイルを入力し、ｍｐ４ファイルを生成するように構成される。
2006514354.tif 000002
【特許請求の範囲】
【請求項１】
Ｅｘｔｅｎｓｉｂｌｅ  ＭＰＥＧ−４  Ｔｅｘｔｕａｌ（ＸＭＴ）文書をバイナリＭＰＥＧ−４（ｍｐ４）ファイルに変換する方法であって、前記ＸＭＴ文書は、０個以上の関連するメディア・データ・ファイルを有し、
前記ｍｐ４ファイルを表す中間文書を生成することと、
前記中間文書および前記関連するメディア・データ・ファイルに基づいて前記ｍｐ４ファイルを作成することと
を含む方法。
【請求項２】
前記中間文書の作成が、さらに、前記ｍｐ４ファイルの特定の部分を表す１つまたは複数の追加中間文書を生成することを含む、請求項１に記載の方法。
【請求項３】
前記追加中間文書の生成が、さらに、ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍを表すｍｐ４−ｂｉｆｓ文書を生成することを含む、請求項２に記載の方法。
【請求項４】
前記ｍｐ４−ｂｉｆｓ文書が、前記ｍｐ４ファイルを表す前記中間文書と別々の別個の文書である、請求項３に記載の方法。
【請求項５】
前記追加中間文書の生成が、さらに、ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍを表す文書を生成することを含む、請求項２に記載の方法。
【請求項６】
前記ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍを表す前記文書が、前記ｍｐ４ファイルを表す前記中間文書と別々の別個の文書である、請求項５に記載の方法。
【請求項７】
前記ｍｐ４ファイルの作成が、各関連するメディア・データ・ファイルの各時間的要素を表すバイト数を判定することを含む、請求項１に記載の方法。
【請求項８】
前記ｍｐ４ファイルの作成が、各関連するメディア・データ・ファイルの各時間的要素の時間的持続時間を判定することを含む、請求項１に記載の方法。
【請求項９】
Ｅｘｔｅｎｓｉｂｌｅ  ＭＰＥＧ−４  Ｔｅｘｔｕａｌ（ＸＭＴ）文書をバイナリＭＰＥＧ−４（ｍｐ４）ファイルに変換するシステムであって、前記ＸＭＴ文書は、０個以上の関連するメディア・ファイルを有し、
前記ＸＭＴ文書を入力し、前記ｍｐ４ファイルの構造を表す少なくとも１つの中間文書を生成するように構成された第１コンバータと、
前記中間文書およびすべての関連するメディア・ファイルを入力するように構成され、さらに、前記ｍｐ４ファイルを生成するように構成された第２コンバータと
を含むシステム。
【請求項１０】
前記中間文書が、前記ｍｐ４ファイルの特定の部分を表す追加中間文書を含む、請求項９に記載のシステム。
【請求項１１】
前記追加中間文書が、ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍを表すｍｐ４−ｂｉｆｓ文書を含む、請求項１０に記載のシステム。
【請求項１２】
前記追加中間文書が、ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍを表す文書を含む、請求項１０に記載のシステム。
【請求項１３】
ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍを表す前記文書が、前記ｍｐ４ファイルを表す前記中間文書に含まれる、請求項１２に記載のシステム。
【請求項１４】
ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍを表す前記文書が、前記ｍｐ４ファイルを表す前記中間文書と別々の別個の文書である、請求項１２に記載のシステム。
【請求項１５】
前記ｍｐ４ファイルを表す前記中間文書が、ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍを表す文書を参照する、請求項１４に記載のシステム。
【請求項１６】
有形の媒体で実施されたコンピュータ・プログラムであって、
Ｅｘｔｅｎｓｉｂｌｅ  ＭＰＥＧ−４  Ｔｅｘｔｕａｌ（ＸＭＴ）文書をバイナリＭＰＥＧ−４（ｍｐ４）ファイルに変換する、前記有形の媒体に結合されたコンピュータ・可読プログラム・コード
を含み、前記ＸＭＴ文書が、０個以上の関連するメディア・データ・ファイルを有し、前記コンピュータ可読プログラム・コードが、前記プログラムに、
前記ｍｐ４ファイルを表す中間文書を生成させ、
前記中間文書および前記関連するメディア・データ・ファイルに基づいて前記ｍｐ４ファイルを作成させる
ように構成される、コンピュータ・プログラム。
【請求項１７】
前記中間文書が、Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ（ＸＭＬ）文書である、請求項１６に記載のコンピュータ・プログラム。
【請求項１８】
前記中間文書を生成させるように構成された前記コンピュータ可読プログラム・コードが、さらに、前記ｍｐ４ファイルの特定の部分を表す１つまたは複数の追加中間文書を生成するように構成されたコンピュータ可読プログラム・コードを含む、請求項１６に記載のコンピュータ・プログラム。
【請求項１９】
前記追加中間文書が、Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ（ＸＭＬ）文書である、請求項１８に記載のコンピュータ・プログラム。
【請求項２０】
１つまたは複数の追加中間文書を生成するように構成された前記コンピュータ可読プログラム・コードが、さらに、ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍを表すｍｐ４−ｂｉｆｓ文書を生成するように構成された可読プログラム・コードを含む、請求項１８に記載のコンピュータ・プログラム。
【請求項２１】
前記ｍｐ４−ｂｉｆｓ文書が、前記ｍｐ４ファイルを表す前記中間文書に含まれる、請求項２０に記載のコンピュータ・プログラム。
【請求項２２】
前記ｍｐ４−ｂｉｆｓ文書が、前記ｍｐ４ファイルを表す前記中間文書と別々の別個の文書である、請求項２０に記載のコンピュータ・プログラム。
【請求項２３】
前記ｍｐ４ファイルを表す前記中間文書が、前記ｍｐ４−ｂｉｆｓ文書を参照する、請求項２２に記載のコンピュータ・プログラム。
【請求項２４】
１つまたは複数の追加中間文書を生成するように構成された前記コンピュータ可読プログラム・コードが、さらに、ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍを表す文書を生成するように構成されたコンピュータ可読プログラム・コードを含む、請求項１８に記載のコンピュータ・プログラム。
【請求項２５】
前記ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍを表す前記文書が、前記ｍｐ４ファイルを表す前記中間文書に含まれる、請求項２４に記載のコンピュータ・プログラム。
【請求項２６】
前記ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍを表す前記文書が、前記ｍｐ４ファイルを表す前記中間文書と別々の別個の文書である、請求項２４に記載のコンピュータ・プログラム。
【請求項２７】
前記ｍｐ４ファイルを表す前記中間文書が、前記ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍを表す前記文書を参照する、請求項２６に記載のコンピュータ・プログラム。
【請求項２８】
前記ｍｐ４ファイルを作成させるように構成された前記コンピュータ可読プログラム・コードが、各関連するメディア・データ・ファイルの各時間的要素を表すバイト数を判定するように構成されたコンピュータ可読プログラム・コードを含む、請求項１６に記載のコンピュータ・プログラム。
【請求項２９】
前記ｍｐ４ファイルを作成させるように構成された前記コンピュータ可読プログラム・コードが、各関連するメディア・データ・ファイルの各時間的要素の時間的持続時間を判定するように構成されたコンピュータ可読プログラム・コードを含む、請求項１６に記載のコンピュータ・プログラム。
【請求項３０】
前記関連するメディア・データ・ファイルが、１つまたは複数のオーディオ・データ・ファイルを含む、請求項１６に記載のコンピュータ・プログラム。
【請求項３１】
前記関連するメディア・データ・ファイルが、１つまたは複数のイメージ・データ・ファイルを含む、請求項１６に記載のコンピュータ・プログラム。
【請求項３２】
前記関連するメディア・データ・ファイルが、１つまたは複数のビデオ・データ・ファイルを含む、請求項１６に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、全般的にはマルチメディア情報のデータ表現に関し、具体的には、「ＭＰＥＧ−４  Ｔｅｘｔｕａｌ  Ｒｅｐｒｅｓｅｎｔａｔｉｏｎ」と称するマルチメディア情報表現の１つ形の、「ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａ  Ｆｏｒｍａｔ」と称するマルチメディア情報表現の別の形への変換に関する。
【背景技術】
【０００２】
コンピュータは、一般に、イメージ、オーディオ・サンプル（サウンド）、およびビデオ・メディアを含むさまざまなディジタル・メディアならびにテキストおよび幾何形状を表すのに使用される。これらのメディア・タイプのそれぞれを、個別に提示することができ、あるいは、複数のそのようなメディア要素を、コンポジット・マルチメディア・プレゼンテーション（ｃｏｍｐｏｓｉｔｅ  ｍｕｌｔｉｍｅｄｉａ  ｐｒｅｓｅｎｔａｔｉｏｎ）と称するもので一緒に提示することができる。
【０００３】
コンポジット・マルチメディア・プレゼンテーションを作成し、配布する能力は、さまざまなメディア・タイプに基づく情報の散布に非常に重要である。さらに、コンポジット・マルチメディア・プレゼンテーションを提示する標準化された手段が作成されて、多数の作成者が、パーソナル・コンピュータ、セットトップ・ボックス、および他のデバイスなどのさまざまなコンピュータ・プラットフォームで再生できるプレゼンテーションを作成できるようになった。
【０００４】
ＭＰＥＧ（Ｍｏｔｉｏｎ  Ｐｉｃｔｕｒｅｓ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）によって開発されたコンポジット・マルチメディア・プレゼンテーションの２つの周知の標準化されたフォーマットが、ＸＭＴ（Ｅｘｔｅｎｓｉｂｌｅ  ＭＰＥＧ−４  Ｔｅｘｔｕａｌ）フォーマットおよびバイナリ・コーディングされたＭＰＥＧ−４（ｍｐ４）フォーマットである。ＸＭＴフォーマットは、コンポジット・マルチメディア・プレゼンテーションのオーサリングによく適し、ｍｐ４フォーマットは、コンポジット・マルチメディア・プレゼンテーションのコンパクトな保管および伝送によく適する。
【非特許文献１】http://www.w3.org/TR/2000/REC-XML-20001006
【非特許文献２】http://mpeg.telecomitalialab.com/working_documents.htm
【非特許文献３】ISO/IED文書14496-1:2000 Amd.2、2000年10月
【非特許文献４】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でオンラインで入手できるＱｕｉｃｋＴｉｍｅ（Ｒ）ファイル・フォーマットから派生した。ＱｕｉｃｋＴｉｍｅは、アップル・コンピュータ社の登録商標である。
【００４３】
ＱｕｉｃｋＴｉｍｅ（Ｒ）の継承のゆえに、ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａ  Ｆｏｒｍａｔは、ＱｕｉｃｋＴｉｍｅ（Ｒ）仕様から派生した複数の特性を保持する。この特性に、データ構造の単位としての「アトム」の概念が含まれる。各アトムは、２つの部分すなわち、ヘッダおよび本体を有する。ヘッダには、ヘッダを含むアトムを構成するバイト数を指定するアトム・サイズ値が含まれる。ヘッダには、アトムの型を指定するａｔｏｍＩｄも含まれる。アトムの本体には、アトムによって伝えられるデータが含まれる。このデータに、従属アトムを含めることができる。その最も基本的な形で、アトムは、４バイト（符号なし整数）からなるアトム・サイズ値と、やはり４バイト（文字）からなるａｔｏｍＩｄを有する。４バイトを超えるアトム・サイズ値およびａｔｏｍＩｄを有する、アトムの拡張された形も、ＭＰＥＧ−４仕様で定義されている。
【００４４】
図１４からわかるように、ｍｐ４バイナリ・ファイル７００は、１つまたは複数の「ｍｄａｔ」アトム７０６および１つの「ｍｏｏｖ」アトム７１２からなる。ｍｏｏｖアトム７１２は、ｍｄａｔアトム７０６の前または後に置くことができる。図１５からわかるように、各ｍｄａｔアトム７１８は、アトム・サイズ値７２４と、それに続く４バイトのａｔｏｍＩｄ「ｍｄａｔ」７３０と、「チャンク」７３６と呼ばれるデーバ・ブロックのシーケンスからなる。図１６からわかるように、各チャンク７４２は、メディア・データ「サンプル」７４８のシーケンスからなる。各サンプル７４８は、単一のメディア・ストリームに関する、特定の時点に関連するデータのブロックを指定する。単一のチャンク内のすべてのサンプルが、同一のメディア・データ・ストリームを表さなければならない。ｍｄａｔアトム７００の観察から、個々のサンプル７４８またはチャンク７３６および７４２を識別することは、必ずしも可能でない。各サンプル７４８ならびにチャンク７３６および７４２は、ｍｐ４バイナリ・ファイル内の他の場所に保管されたテーブルを使用して識別することができる。
【００４５】
図１７からわかるように、ｍｏｏｖアトム７５８は、アトム・サイズ値７６０と、それに続く４バイトのａｔｏｍＩｄ「ｍｏｏｖ」７６６ならびに「ｍｖｈｄ」（ｍｏｏｖ  ｈｅａｄｅｒ）アトム７７２、「ｉｏｄｓ」（ｉｎｉｔｉａｌ  ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ）アトム７７８、および１つまたは複数の「ｔｒａｋ」アトム７９０を含む複数の従属アトムからなる。「ｍｏｏｖ」アトム７１２および７５８には、データ・ストリームごとに１つの「ｔｒａｋ」アトム７９０が含まれ、この「ｔｒａｋ」アトム７９０には、存在する場合にｓｄｓｍ（ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ）およびｏｄｓｍ（ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ）が含まれる。「ｍｏｏｖ」アトム７１２および７５８に、任意選択の「ｕｄｔａ」（ｕｓｅｒ  ｄａｔａ）アトム７８４も含めることができる。「ｕｄｔａ」アトム７８４は、著作権メッセージなどの任意選択の情報をｍｐ４バイナリ・ファイルに埋め込むのに使用することができる。
【００４６】
ｍｖｈｄアトム７７２は、アトム・サイズ値と、それに続く４バイトのａｔｏｍＩｄ「ｍｖｈｄ」ならびに日付時刻スタンプ、時間スケール値、およびファイル持続時間値を含む複数のデータ値からなる。ｍｖｈｄアトムのアトム・サイズ値は、必ず１０８である。日付時刻スタンプは、ファイルが作成された時を示す。時間スケール値は、そのファイルの時間値を表すのに使用される毎秒のティック数を示す。ファイル持続時間値は、時間スケール値で指定される時間単位での、ファイル内の材料を表現するのに必要な総時間を示す。
【００４７】
図１８からわかるように、ｉｏｄｓアトム８００は、アトム・サイズ値８０４と、それに続く４バイトのａｔｏｍＩｄ「ｉｏｄｓ」８０８、８ビットのバージョン値８１２、２４ビットのフラグ値８１６、およびＭｐ４ｆＩｎｉｔＯｂｊＤｅｓｃｒデータ構造８２０からなる。図１９からわかるように、Ｍｐ４ｆＩｎｉｔＯｂｊＤｅｓｃｒデータ構造８２４は、１バイトのＭＰ４＿ＩＯＤ＿ＴＡＧ値８２８、後続データ・ブロックのバイト数８３２、１０ビットのＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ  ８３６、２つのフラグ・ビット８４０および８４４、４つの予約済みビット８４８、ならびに５つのプロファイル・レベル表示値８５２、８５６、８６０、８６４、および８６８からなる。プロファイル・レベル表示値の後に、１つまたは２つのＭＰＥＧ−４  ＥＳ＿ＩＤ＿Ｉｎｃデータ構造８７２が続く。１つのＥＳ＿ＩＤ＿Ｉｎｃ構造は、ｓｄｓｍ（ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ）に対応するｔｒａｋアトム７９０のＥＳ＿ＩＤ値を示す。第２のＥＳ＿ＩＤ＿Ｉｎｃ構造は、存在する場合に、ｏｄｓｍ（ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ）に対応するｔｒａｋアトム７９０のＥＳ＿ＩＤを示す。第２のＥＳ＿ＩＤ＿Ｉｎｃ構造は、ｏｄｓｍが存在する場合に限って存在する。図２０からわかるように、各ＥＳ＿ＩＤ＿Ｉｎｃデータ構造は、１バイトのＥＳ＿ＩＤ＿ＩｎｃＴａｇ値８８０、後続データ内のバイト数８８４（必ず４）、および３２ビットのＥＳ＿ＩＤ値８８８からなる。
【００４８】
図２１からわかるように、各ｔｒａｋアトム９００は、アトム・サイズ値９０３と、それに続く４バイトのａｔｏｍＩｄ「ｔｒａｋ」９０６、「ｔｋｈｄ」（ｔｒａｃｋ  ｈｅａｄｅｒ）アトム９１０、および「ｍｄｉａ」（ｍｅｄｉａ）アトム９１２からなる。ｏｄｓｍ（ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ）を表すｔｒａｋアトムの場合に、ｔｒａｋアトムに、「ｔｒｅｆ」（ｔｒａｃｋ  ｒｅｆｅｒｅｎｃｅ）アトム９４０も含まれる。遅れた開始を有するトラックの場合に、「ｅｄｔｓ」（ｅｄｉｔ  ｌｉｓｔ）アトム９４５が、トラックを開始する時を示すために設けられる。ｍｄｉａアトム９１２は、「ｍｄｈｄ」（ｍｅｄｉａ  ｈｅａｄｅｒ）アトム９１５、「ｈｄｌｒ」（ｈａｎｄｌｅｒ）アトム９１８、「ｍｉｎｆ」（ｍｅｄｉａ  ｉｎｆｏｒｍａｔｉｏｎ）アトム９２０、「ｓｔｂｌ」（ｓａｍｐｌｅ  ｔａｂｌｅｓ）アトム９３３、およびメディア情報ヘッダ・アトム９３６からなる。ラベル「＊ｍｈｄ」は、「ｎｍｈｄ」（ｓｄｓｍトラックおよびｏｄｓｍトラック）、「ｓｍｈｄ」（オーディオ・トラック）、「ｖｍｈｄ」（ビジュアル・トラック）などを含む複数のメディア情報ヘッダ・アトム型のいずれか１つを表す。
【００４９】
ｔｋｈｄアトム９１０、ｍｄｈｄアトム９１５、およびｈｄｌｒアトム９１８に、ｔｒａｃｋＩｄ番号、時刻日付スタンプ、メディア時間スケール、およびメディア持続時間値を含む複数のデータ値が含まれる。各トラックは、それ自体の時間スケールを有し、この時間スケールは、ｍｖｈｄアトム７７２で指定されるグローバル時間スケールと異なるものとすることができる。
【００５０】
図２２からわかるように、ｓａｍｐｌｅ  ｔａｂｌｅｓアトム９５０は、アトム・サイズ値９５４と、それに続く、４バイトのａｔｏｍＩｄ「ｓｔｂｌ」９５７、一連のサンプル・テーブル・アトム９６０、９６３、９６６、９７０、９７４、および９７８からなる。さまざまなサンプル・テーブル・アトムは、任意の順序とすることができる。これには、「ｓｔｓｃ」（ｓａｍｐｌｅ−ｔｏ−ｃｈｕｎｋ  ｔａｂｌｅ）アトム９６０、「ｓｔｔｓ」（ｔｉｍｅ−ｔｏ−ｓａｍｐｌｅ  ｔａｂｌｅ）アトム９６３、「ｓｔｃｏ」（ｃｈｕｎｋ  ｏｆｆｓｅｔ  ｔａｂｌｅ）アトム９６６、「ｓｔｓｚ」（ｓａｍｐｌｅ  ｓｉｚｅ  ｔａｂｌｅ）アトム９７０、可能な「ｓｔｓｓ」（ｓｙｎｃ  ｓａｍｐｌｅ  ｔａｂｌｅ）アトム９７４、および「ｓｔｓｄ」（ｓａｍｐｌｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｔａｂｌｅ）アトム９７８が含まれる。これらのサンプル・テーブル・アトムのそれぞれに、関連するｍｄａｔアトム７０６および７１８に保管されたバイナリ・メディア・データ７３６および７４８のプロパティを記述するデータが含まれる。
【００５１】
ｓａｍｐｌｅ−ｔｏ−ｃｈｕｎｋ  ｔａｂｌｅアトム（ｓｔｓｃアトム）９６０は、アトム・サイズ値、４バイトのａｔｏｍＩｄ（「ｓｔｓｃ」）、３２ビット符号なし整数（ｎｕｍＳｔｓｃＥｎｔｒｉｅｓ）、およびｓａｍｐｌｅ−ｔｏ−ｃｈｕｎｋデータ・レコードのシーケンスが含まれる。ｎｕｍＳｔｓｃＥｎｔｒｉｅｓの値は、ｓａｍｐｌｅ−ｔｏ−ｃｈｕｎｋデータ・レコードのシーケンスの項目数を指定する。各ｓａｍｐｌｅ−ｔｏ−ｃｈｕｎｋデータ・レコードは、開始チャンク番号、チャンクごとのサンプル数、およびサンプル記述インデックスを指定する、３つの３２ビット符号なし整数からなる。サンプル記述インデックスは、ｓａｍｐｌｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｔａｂｌｅ９７８内の項目へのインデックスである。チャンクごとのサンプル数は、開始チャンク番号によって指定されるチャンク７３６内および次の項目によって指定される開始チャンクの前のすべての後続チャンク内のサンプル７４８の個数を指定する。
【００５２】
ｔｉｍｅ−ｔｏ−ｓａｍｐｌｅ  ｔａｂｌｅアトム（ｓｔｔｓアトム）９６３は、アトム・サイズ値、４バイトのａｔｏｍＩｄ（「ｓｔｔｓ」）、３２ビット符号なし整数（ｎｕｍＳｔｔｓＥｎｔｒｉｅｓ）、およびｔｉｍｅ−ｔｏ−ｓａｍｐｌｅデータ・レコードのシーケンスからなる。ｎｕｍＳｔｔｓＥｎｔｒｉｅｓの値は、ｔｉｍｅ−ｔｏ−ｓａｍｐｌｅデータ・レコードのシーケンス内の項目数を指定する。各ｔｉｍｅ−ｔｏ−ｓａｍｐｌｅデータ・レコードは、サンプル・カウントおよびトラック時間スケール単位でのサンプル持続時間を指定する、２つの３２ビット符号なし整数からなる。サンプル・カウント値は、対応するサンプル持続時間を有する連続するサンプル７４８の個数を指定する。
【００５３】
ｃｈｕｎｋ  ｏｆｆｓｅｔ  ｔａｂｌｅアトム（ｓｔｃｏアトム）９６６は、アトム・サイズ値、４バイトのａｔｏｍＩｄ（「ｓｔｃｏ」）、３２ビット符号なし整数（ｎｕｍＳｔｃｏＥｎｔｒｉｅｓ）、およびチャンク・オフセット値のシーケンスからなる。ｎｕｍＳｔｃｏＥｎｔｒｉｅｓの値は、チャンク・オフセット値のシーケンス内の項目の個数を指定する。このシーケンスの各項目は、ｍｐ４ファイルの先頭と、ｍｄａｔアトム７１８内の対応するチャンク７３６の先頭との間のバイト数を指定する１つの３２ビット符号なし整数からなる。
【００５４】
ｓａｍｐｌｅ  ｓｉｚｅ  ｔａｂｌｅアトム（ｓｔｓｚアトム）９７０は、アトム・サイズ値、４バイトのａｔｏｍＩｄ（「ｓｔｓｚ」）、このｔｒａｋアトム９００に関連するすべてのメディア・データ・サンプル７４８のサイズを指定する３２ビット符号なし整数（ｉＳａｍｐｌｅＳｉｚｅ）からなる。このｔｒａｋアトムに関連するメディア・データ・サンプルが、サイズにおいてすべて同一ではない場合に、ｉＳａｍｐｌｅＳｉｚｅの値は、０と指定され、その次に、３２ビット符号なし整数（ｎｕｍＳｔｓｚＥｎｔｒｉｅｓ）およびサンプル・サイズ値のシーケンスが続く。ｎｕｍＳｔｓｚＥｎｔｒｉｅｓの値は、サンプル・サイズ値のシーケンス内の項目の個数を指定する。このシーケンスの各項目は、このｔｒａｋアトム９００に関連するメディア・データ７１８内の対応するサンプル７４８内のバイト数を指定する１つの３２ビット符号なし整数からなる。
【００５５】
ｓｙｎｃ  ｓａｍｐｌｅ  ｔａｂｌｅアトム（ｓｔｓｓアトム）９７４は、存在する場合に、アトム・サイズ値、４バイトのａｔｏｍＩｄ（「ｓｔｓｓ」）、３２ビット符号なし整数（ｎｕｍＳｔｓｓＥｎｔｒｉｅｓ）、およびサンプル・インデックス値のシーケンスからなる。ｎｕｍＳｔｓｓＥｎｔｒｉｅｓの値は、サンプル・インデックス値のシーケンス内の項目の個数を指定する。このシーケンスの各項目は、「ランダム・アクセス・サンプル」のサンプル・インデックスを指定する１つの３２ビット符号なし整数からなる。ランダム・アクセス・サンプル・インデックスは、このｔｒａｋアトム９００に関連するメディア・データ内の、メディア・プレイヤが前のサンプルに無関係にメディア・データの処理を開始できる点に対応するメディア・データ・サンプル７４８を識別する。このテーブルのサンプル・インデックス値は、単調に増加しなければならない。
【００５６】
ｓａｍｐｌｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｔａｂｌｅアトム（ｓｔｓｄアトム）９７８は、アトム・サイズ値、４バイトのａｔｏｍＩｄ（「ｓｔｓｄ」）、３２ビット符号なし整数（ｎｕｍＳｔｓｄＥｎｔｒｉｅｓ）、およびサンプル記述データ・レコードのシーケンスからなる。ｎｕｍＳｔｓｄＥｎｔｒｉｅｓの値は、サンプル記述データ・レコードのシーケンス内の項目の個数を指定する。各サンプル記述データ・レコードは、ｓａｍｐｌｅ−ｔｏ−ｃｈｕｎｋデータ・レコード内の対応するインデックスによって指定されるメディア・データ・サンプルをエンコードするのに使用された手段を指定する。サンプル記述データ・レコードのシーケンスは、通常、単一の項目を有し（ｎｕｍＳｔｓｄＥｎｔｒｉｅｓ＝１）、この項目は、メディアのタイプ（オーディオ、ビジュアル、ｓｄｓｍ、ｏｄｓｍ）、オーディオ・サンプルおよびビデオ・サンプルに使用された圧縮アルゴリズムなどを指定する。各サンプル記述テーブル項目は、「ｍｐ４＊」アトム９８２に含まれ、この「ｍｐ４＊」は、「ｍｐ４ｓ」（ｓｄｓｍサンプルおよびｏｄｓｍサンプル）、「ｍｐ４ａ」（オーディオ・サンプル）、および「ｍｐ４ｖ」（ビジュアル・サンプル）の包括的な代理である。各「ｍｐ４＊」アトム９８２に、「ｅｓｄｓ」（ｅｌｅｍｅｎｔａｒｙ  ｓｔｒｅａｍ  ｄｅｓｃｒｉｐｔｏｒ）アトム９８６が含まれ、各ｅｓｄｓアトム９８６に、ＭＰＥＧ−４エレメンタリ・ストリーム記述子（Ｅｓ＿Ｄｅｓｃｒ）データ構造９９０が含まれる。
【００５７】
ＭＰＥＧ−４エレメンタリ・ストリーム記述子１０００の構造を、図２３に示す。このデータ構造は、１バイトのタグ（ＥＳ＿ＤｅｓｃｒＴａｇ）１００４と、それに続く、このデータ構造の残りのバイト数の表示１００８、１６ビットのＥＳ＿ＩＤ値（通常は０）１０１２、３つの１ビット・フラグ（ｓｔｒｅａｍＤｅｐｅｎｄｅｎｃｅＦｌａｇ、ＵＲＬ＿Ｆｌａｇ、およびＯＣＲｓｔｒｅａｍＦｌａｇ）１０１６、および５ビットのストリーム優先順位値１０２０からなる。３つのフラグ１０１６のいずれかが非０である場合に、追加のデータ値（図示せず）をストリーム優先順位値１０２０に続けることができる。これらの任意選択のデータ値は、本発明に必要でない。
【００５８】
ストリーム優先順位値１０２０に、デコーダ構成記述子データ構造１０２４および同期レイヤ構成記述子データ構造１０２８が続く。デコーダ構成記述子１０２４の構造１０３２を、図２４に示す。このデータ構造は、１バイトのタグ（ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒＴａｇ）１０３６と、それに続く、このデータ構造の残りのバイト数の表示１０４０、および一連のデータ値からなり、このデータ値には、ｏｂｊｅｃｔＴｙｐｅ  １０４４、ｓｔｒｅａｍＴｙｐｅ  １０４８、ｕｐＳｔｒｅａｍビット１０５２、予約済みビット１０５６、ｂｕｆｆｅｒＳｉｚｅＤＢ  １０６０、ｍａｘＢｉｔｒａｔｅ  １０６４、およびａｖｇＢｉｔｒａｔｅ  １０６８が含まれる。これらの値の後に、ｓｔｒｅａｍＴｙｐｅおよびｏｂｊｅｃｔＴｙｐｅに依存するデコーダ固有情報データ構造１０７２を続けることができる。デコーダ固有情報データ構造１０７２は、ｓｄｓｍに必要であるが、ｏｄｓｍには不要である。ほとんどのオーディオおよびビジュアルのメディア・データ・ストリームも、デコーダ構成記述子１０３２内にデコーダ固有情報データ構造を有する。
【００５９】
デコーダ固有情報１０７２の構造１０７６を、図２５に示す。このデータ構造は、１バイトのタグ（ＤｅｃｏｄｅｒＳｐｅｃｉｆｉｃＩｎｆｏＴａｇ）１０８０と、それに続く、このデータ構造の残りのバイト数の表示１０８４からなる。残りのバイトは、ｏｂｊｅｃｔＴｙｐｅおよびｓｔｒｅａｍＴｙｐｅに依存する。ｓｄｓｍ（ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍまたはＢＩＦＳ）の場合に、デコーダ固有情報１０７２および１０７６に、ｎｏｄｅＩＤ値のエンコードに使用されたビット数の表示と、ｒｏｕｔｅＩＤ値のエンコードに使用されたビット数の表示が含まれる。これらの値のそれぞれが、５ビットの符号なし整数によって表される。
【００６０】
同期レイヤ構成記述子１０２８の構造１０８８を、図２６に示す。このデータ構造は、１バイトのタグ（ＳＬＣｏｎｆｉｇＤｅｓｃｒＴａｇ）１０９０と、それに続く、このデータ構造の残りのバイト数の表示１０９４（必ず１）および単一のデータ・バイト（値２すなわち「ｐｒｅｄｅｆｉｎｅｄ」）１０９８からなり、このデータ・バイトは、同期レイヤに事前定義の構成が使用されなければならないことを示す。
【００６１】
３．０  Ｓｃｅｎｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｓｔｒｅａｍ（ｓｄｓｍ）
特定のタイプのオーディオ・データ・ストリームおよびビジュアル・データ・ストリームのエンコードまたはデコードに使用される手段は、ＸＭＴ−Ａ仕様およびＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａ  Ｆｉｌｅ仕様によって決定されず、したがってこれらのストリームをエンコードする形の詳細には、本明細書では触れない。ＸＭＴ−Ａ文書に、ｓｔｒｅａｍ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ（ｓｄｓｍ）およびｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ（ｏｄｓｍ）の内容に関する詳細な情報が含まれる。その結果、各ＸＭＴ−Ａ文書は、ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａ  Ｆｉｌｅに含まれるｓｄｓｍストリームおよびｏｄｓｍストリームに密接に関連する。このセクションでは、ｓｄｓｍデータの構造を説明し、次のセクションで、ｏｄｓｍデータの構造を説明する。
【００６２】
他のメディア・データ・ストリームと同様に、ｓｄｓｍデータは、１つまたは複数のチャンクからなり、各チャンクは、１つまたは複数のサンプルからなる。図２７からわかるように、ｓｄｓｍバイナリ・チャンク１１００内の各サンプルは、「コマンド・フレーム」１１１０として定義される。各コマンド・フレーム１１１０は、バイト整列される。図２８からわかるように、各コマンド・フレーム１１１０は、１つまたは複数の「ＢＩＦＳコマンド」１１２０からなる。ＢＩＦＳは、「ＢＩｎａｒｙ  Ｆｏｒｍａｔ  ｆｏｒ  Ｓｔｒｅａｍｓ」の略である。各ＢＩＦＳコマンド１１２０に、継続ビット１１３０および１１４０が続く。継続ビットの値が（１）１１３０である場合に、もう１つのＢＩＦＳコマンドが続く。そうでない場合１１４０に、継続ビットに、最後のバイトを完了するのに十分な個数のヌル・パディング・ビット１１５０が続く。個々のＢＩＦＳコマンド１１２０は、コマンド・フレームの最初のＢＩＦＳコマンドを除いて、一般にバイト整列されない。
【００６３】
図２９から３２からわかるように、４タイプのＢＩＦＳコマンドすなわち「挿入」、「削除」、「置換」、「シーン置換」がある。ＢＩＦＳ挿入コマンド１２００は、２ビットの挿入コード（値＝「００」）１２０６と、それに続く２ビットのパラメータ型コード１２１０および挿入コマンド・データ１２１６からなる。ＢＩＦＳ削除コマンド１２２０は、２ビットの削除コード（値＝「０１」）１２２６と、それに続く２ビットのパラメータ型コード１２３０および削除コマンド・データ１２３６からなる。ＢＩＦＳ置換コマンド１２４０は、２ビットの置換コード（値＝「１０」）１２４４と、それに続く２ビットのパラメータ型コード１２５０および置換コマンド・データ１２６０からなる。ＢＩＦＳシーン置換コマンド１２７０は、２ビットのシーン置換コード（値＝「１１」）１２８０と、それに続くＢＩＦＳシーン・データ構造１２９０からなる。
【００６４】
図３３から３５からわかるように、３タイプのＢＩＦＳ挿入コマンドすなわち、（ａ）Ｎｏｄｅ  Ｉｎｓｅｒｔｉｏｎコマンド、（ｂ）Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｉｎｓｅｒｔｉｏｎコマンド、および（ｃ）Ｒｏｕｔｅ  Ｉｎｓｅｒｔｉｏｎコマンドがある。挿入コマンドのタイプは、パラメータ型値１２１０によって決定される。Ｎｏｄｅ  Ｉｎｓｅｒｔｉｏｎコマンド１３００は、２ビットの挿入コード（値＝「００」）１３０４と、それに続く、２ビットのパラメータ型コード（値＝「０１」、型＝Ｎｏｄｅ）１３０８、ｎｏｄｅＩＤ値１３１２、２ビットの挿入位置コード１３１６、およびＳＦＮｏｄｅデータ構造１３２４からなる。挿入位置コード１３１６の値が０である場合には、８ビットの位置値１３２０が、挿入位置コード１３１６に続く。ｎｏｄｅＩＤ値１３１２は、ＢＩＦＳコマンドの他所で定義された更新可能なノードの組の１つを指定する。これおよび他のｎｏｄｅＩＤ値をエンコードするのに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。ＳＦＮｏｄｅデータ構造１３２４の構造は、下で説明する。
【００６５】
Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｉｎｓｅｒｔｉｏｎコマンド１３２８は、２ビットの挿入コード（値＝「００」）１３３２と、それに続く、２ビットのパラメータ型コード（値＝「１０」、型＝ＩｎｄｅｘｅｄＶａｌｕｅ）１３３６、ｎｏｄｅＩＤ値１３４０、ｉｎＦｉｅｌｄＩＤ値１３４４、２ビットの挿入位置コード１３４８、およびフィールド値データ構造１３５６からなる。挿入位置コード１３４８の値が０である場合に、８ビットの位置値１３５２が、挿入位置コード１３４８に続く。ｎｏｄｅＩＤ値１３４０は、ＢＩＦＳコマンドの他所で定義された更新可能なノードの組の１つを指定する。ｎｏｄｅＩＤ値１３４０のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。ｉｎＦｉｅｌｄＩＤ値１３４４は、ｎｏｄｅＩＤ１３４０の値によって指定されるＢＩＦＳノードのデータ・フィールドの１つを識別する。ｉｎＦｉｅｌｄＩＤ値１３４４をエンコードするのに使用されるビット数は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様に含まれるテーブルに依存する。
【００６６】
フィールド値データ構造の内容は、指定されたＢＩＦＳノードの指定されたデータ・フィールドのフィールド・データ型（ｂｏｏｌｅａｎ、ｉｎｔｅｇｅｒ、ｆｌｏａｔ、ｓｔｒｉｎｇ、ｎｏｄｅなど）に依存する。これは、１ビットのように単純なものまたはＳＦＮｏｄｅデータ構造のように複雑なものとすることができる。各ＢＩＦＳノードの各データ・フィールドのフィールド・データ型は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様に含まれるテーブルで指定される。
【００６７】
Ｒｏｕｔｅ  Ｉｎｓｅｒｔｉｏｎコマンド１３６０は、２ビットの挿入コード（値＝「００」）１３６４と、それに続く、２ビットのパラメータ型コード（値＝「１１」、型＝Ｒｏｕｔｅ）１３６８、「ｉｓＵｐｄａｔｅａｂｌｅ」ビット１３７２、ｄｅｐａｒｔｕｒｅＮｏｄｅＩＤ値１３８０、ｄｅｐａｒｔｕｒｅＦｉｅｌｄＩＤ値１３８４、ａｒｒｉｖａｌＮｏｄｅＩＤ値１３８８、およびａｒｒｉｖａｌＦｉｅｌｄＩＤ値１３９２からなる。「ｉｓＵｐｄａｔｅａｂｌｅ」ビットの値が（１）である場合に、ｒｏｕｔｅＩＤ値１３７６が、「ｉｓＵｐｄａｔｅａｂｌｅ」ビット１３７２に続く。ｄｅｐａｒｔｕｒｅＮｏｄｅＩＤ値１３８０およびａｒｒｉｖａｌＮｏｄｅＩＤ値１３８８のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。ｄｅｐａｒｔｕｒｅＦｉｅｌｄＩＤ値１３８４のエンコードに使用されるビット数およびａｒｒｉｖａｌＦｉｅｌｄＩＤ値１３９２のエンコードに使用されるビット数は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様に含まれるテーブルに依存する。
【００６８】
図３６から３８からわかるように、３タイプのＢＩＦＳ削除コマンドすなわち（ａ）Ｎｏｄｅ  Ｄｅｌｅｔｉｏｎコマンド、（ｂ）Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｄｅｌｅｔｉｏｎコマンド、および（ｃ）Ｒｏｕｔｅ  Ｄｅｌｅｔｉｏｎコマンドがある。削除コマンドのタイプは、パラメータ型値１２３０によって決定される。Ｎｏｄｅ  Ｄｅｌｅｔｉｏｎコマンド１４００は、２ビットの削除コード（値＝「００」）１４０６と、それに続く、２ビットのパラメータ型コード（値＝「００」、型＝Ｎｏｄｅ）１４１２およびｎｏｄｅＩＤ値１４１８からなる。ｎｏｄｅＩＤ値１４１８は、ＢＩＦＳコマンドの他所で定義された更新可能なノードの組の１つを指定する。ｎｏｄｅＩＤ値１４１８のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。
【００６９】
Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｄｅｌｅｔｉｏｎコマンド１４２４は、２ビットの削除コード（値＝「０１」）１４３０と、それに続く、２ビットのパラメータ型コード（値＝「１０」、型＝Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ）１４３６、ｎｏｄｅＩＤ値１４４２、ｉｎＦｉｅｌｄＩＤ値１４４８、および２ビットの削除位置値１４５４からなる。ｎｏｄｅＩＤ値１４１８は、ＢＩＳＦコマンドの他所で定義された更新可能なノードの組の１つを指定する。ｎｏｄｅＩＤ値１４１８のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。
【００７０】
Ｒｏｕｔｅ  Ｄｅｌｅｔｉｏｎコマンド１４６６は、２ビットの削除コード（値＝「１０」）１４７２と、それに続く、２ビットのパラメータ型コード（値＝「１１」、型＝Ｒｏｕｔｅ）１４７８およびｒｏｕｔｅＩＤ値１４８４からなる。ｒｏｕｔｅＩＤ値１４８４は、ＢＩＳＦコマンドの他所で定義された更新可能なノードの組の１つを指定する。ｒｏｕｔｅＩＤ値１４８４のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。
【００７１】
図３９から４２からわかるように、４タイプの置換コマンドすなわち、（ａ）Ｎｏｄｅ  Ｒｅｐｌａｃｅｍｅｎｔコマンド、（ｂ）Ｆｉｅｌｄ  Ｒｅｐｌａｃｅｍｅｎｔコマンド、（ｃ）Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｒｅｐｌａｃｅｍｅｎｔコマンド、および（ｄ）Ｒｏｕｔｅ  Ｒｅｐｌａｃｅｍｅｎｔコマンドがある。挿入コマンドのタイプは、パラメータ型値１２１０によって決定される。Ｎｏｄｅ  Ｒｅｐｌａｃｅｍｅｎｔコマンド１５００は、２ビットの置換コード（値＝「１０」）１５０４と、それに続く、２ビットのパラメータ型コード（値＝「０１」、型＝Ｎｏｄｅ）１５０８、ｎｏｄｅＩＤ値１５１０、およびＳＦＮｏｄｅデータ構造１５１４からなる。ｎｏｄｅＩＤ値１５１０は、ＢＩＦＳコマンドの他所で定義された更新可能なノードの組の１つを指定する。ｎｏｄｅＩＤ値１５１０のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。ＳＦＮｏｄｅデータ構造１５１４の構造は、下で説明する。
【００７２】
Ｆｉｅｌｄ  Ｒｅｐｌａｃｅｍｅｎｔコマンド１５２０は、２ビットの置換コード（値＝「１０」）１５２４と、それに続く、２ビットのパラメータ型コード（値＝「０１」、型＝Ｆｉｅｌｄ）１５２８、ｎｏｄｅＩＤ値１５３０、ｉｎＦｉｅｌｄＩＤ値１５３４、およびフィールド値データ構造１５３８からなる。ｎｏｄｅＩＤ値１５３０は、ＢＩＦＳコマンドの他所で定義された更新可能なノードの組の１つを指定する。ｎｏｄｅＩＤ値１５３０のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。ｉｎＦｉｅｌｄＩＤ値１５３４は、ｎｏｄｅＩＤ１５３０の値によって指定されるＢＩＦＳノードのデータ・フィールドの１つを識別する。ｉｎＦｉｅｌｄＩＤ値１５３４のエンコードに使用されるビット数は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様に含まれるテーブルに依存する。
【００７３】
Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｒｅｐｌａｃｅｍｅｎｔコマンド１５４０は、２ビットの置換コード（値＝「１０」）１５４４と、それに続く、２ビットのパラメータ型コード（値＝「１０」、型＝ＩｎｄｅｘｅｄＶａｌｕｅ）１５４８、ｎｏｄｅＩＤ値１５５０、ｉｎＦｉｅｌｄＩＤ値１５５４、２ビットの置換位置コード１５５８、およびフィールド値データ構造１５６４からなる。置換位置コード１５５８の値が０である場合に、８ビットの位置値１５６０が、置換位置コード１５５８に続く。ｎｏｄｅＩＤ値１５５０は、ＢＩＦＳコマンドの他所で定義された更新可能なノードの組の１つを指定する。ｎｏｄｅＩＤ値１５５０のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。ｉｎＦｉｅｌｄＩＤ値１５５４は、ｎｏｄｅＩＤ１５５０の値によって指定されるＢＩＦＳノードのデータ・フィールドの１つを識別する。ｉｎＦｉｅｌｄＩＤ値１５５４のエンコードに使用されるビット数は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様に含まれるテーブルに依存する。
【００７４】
Ｒｏｕｔｅ  Ｒｅｐｌａｃｅｍｅｎｔコマンド１５７０は、２ビットの置換コード（値＝「１０」）１５７４と、それに続く、２ビットのパラメータ型コード（値＝「１１」、型＝Ｒｏｕｔｅ）１５７８、ｒｏｕｔｅＩＤ値１５８０、ｄｅｐａｒｔｕｒｅＮｏｄｅＩＤ値１５８４、ｄｅｐａｒｔｕｒｅＦｉｅｌｄＩＤ値１５８８、ａｒｒｉｖａｌＮｏｄｅＩＤ値１５９０、およびａｒｒｉｖａｌＦｉｅｌｄＩＤ値１５９４からなる。ｒｏｕｔｅＩＤ値１５８０は、ＢＩＦＳコマンドの他所で定義された更新可能なノードの組の１つを指定する。ｒｏｕｔｅＩＤ値１５８０のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。ｄｅｐａｒｔｕｒｅＮｏｄｅＩＤ値１５８４およびａｒｒｉｖａｌＮｏｄｅＩＤ値１５９０のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。ｄｅｐａｒｔｕｒｅＦｉｅｌｄＩＤ値１５８８のエンコードに使用されるビット数およびａｒｒｉｖａｌＦｉｅｌｄＩＤ値１５９４のエンコードに使用されるビット数は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様に含まれるテーブルに依存する。
【００７５】
図３２からわかるように、ＢＩＦＳシーン置換コマンド１２７０は、２ビットのシーン置換コード（値＝「１１」）１２８０と、それに続くＢＩＦＳシーン・データ構造１２９０からなる。図４３からわかるように、ＢＩＦＳシーン・データ構造１６００は、６ビットの予約済みフィールド１６１０、２つの１ビット・フラグ（ＵＳＥＮＡＭＥＳ  １６２０およびｐｒｏｔｏＬｉｓｔ  １６３０）、ＳＦＴｏｐＮｏｄｅデータ構造１６４０、および１ビット・フラグ（ｈａｓＲｏｕｔｅｓ）１６５０からなる。ｐｒｏｔｏＬｉｓｔフラグ１６３０が真（１）の場合に、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義された追加データが、ｐｒｏｔｏＬｉｓｔフラグに続く。ＳＦＴｏｐＮｏｄｅデータ構造１６４０は、図４４から４８に示されたＳＦＮｏｄｅデータ構造の特殊な例である。ｈａｓＲｏｕｔｅｓフラグ１６５０が真（１）の場合に、Ｒｏｕｔｅｓデータ構造１６６０が、ｈａｓＲｏｕｔｅｓフラグに続く。Ｒｏｕｔｅｓデータ構造の構造を、図４９から５１に示す。
【００７６】
図４４、４５、および４６に示されているように、ＳＦＮｏｄｅデータ構造は、３つの形すなわち、（ａ）再利用、（ｂ）マスク・ノード、および（ｃ）リスト・ノードの１つを有することができる。３つの形のすべてが、１ビットのフラグ（ｉｓＲｅｕｓｅｄ）から始まる。再利用されるＳＦＮｏｄｅ１７００の場合に、ｉｓＲｅｕｓｅｄフラグの値は「１」（真）１７０４であり、ＳＦＮｏｄｅデータ構造の残りは、ｎｏｄｅＩＤｒｅｆ値１７０８からなる。ｎｏｄｅＩＤｒｅｆ１７０８の値は、ｓｄｓｍデータの他所で定義された更新可能なＳＦＮｏｄｅのｎｏｄｅＩＤ値と一致しなければならない。
【００７７】
ｉｓＲｅｕｓｅｄＦｌａｇが偽（０）１７１２および１７３２の場合に、ＳＦＮｏｄｅ型は、ｍａｓｋＡｃｃｅｓｓフラグ・ビット１７２２および１７４２の値に応じて、図４５および４６に示された２つの形の１つを有することができる。どちらの場合でも、ＳＦＮｏｄｅのデータに、ローカル・ノード型値（ｌｏｃａｌＮｏｄｅＴｙｐｅ）１７１４および１７３４、１ビットのフラグ（ｉｓＵｐｄａｔｅａｂｌｅ）１７１６および１７３６、ならびに第２の１ビットのフラグ（ｍａｓｋＡｃｃｅｓｓ）１７２２および１７４２が含まれる。ローカル・ノード型１７１４および１７３４のエンコードに使用されるビット数は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で指定されるテーブルに依存する。ｉｓＵｐｄａｔｅａｂｌｅフラグ１７１６および１７３６が真（１）の場合に、ｎｏｄｅＩＤ値１７１８および１７３８がｉｓＵｐｄａｔｅａｂｌｅフラグに続く。ｉｓＵｐｄａｔｅａｂｌｅフラグ１７１６および１７３６が真（１）であり、関連するＢＩＦＳシーン・データ構造１６００のＵＳＥＮＡＭＥＳフラグ１６２０も真（１）である場合に、ヌル終端ストリング（「ｎａｍｅ」）１７２０および１７４０が、ｎｏｄｅＩＤ値１７１８および１７３８に続く。
【００７８】
ｍａｓｋＡｃｃｅｓｓビットが真（１）１７２２の場合に、ＳＦＮｏｄｅは、「マスク・ノード」構造１７１０を有する。この場合に、図４５に示されているように、ｍａｓｋＡｃｃｅｓｓビット１７２２に、ｌｏｃａｌＮｏｄｅＴｙｐｅ  １７１４の値によって与えられるノード型を有するＢＩＦＳノードのＭＰＥＧ−４仕様で定義されたｎＦｉｅｌｄｓプロパティ・フィールドごとに１つの、マスク・ビット１７２６の順序付きシーケンスが続く。これらのマスク・ビットのうちの１つが真（１）である場合のそれぞれで、マスク・ビットに、ｌｏｃａｌＮｏｄｅＴｙｐｅ１７３４によって決定されるフィールド・データ型（ｉｎｔｅｇｅｒ、ｂｏｏｌｅａｎ、ｓｔｒｉｎｇ、ｎｏｄｅなど）に従ってエンコードされたバイナリ・フィールド値１７２８、フィールド番号（マスク・ビットのシーケンス内の位置）、およびＭＰＥＧ−４仕様で定義されたテーブルが続く。
【００７９】
ｍａｓｋＡｃｃｅｓｓビットが偽（０）である場合１７４２に、ＳＦＮｏｄｅは、「リスト・ノード」構造１７３０を有する。この場合に、図４６に示されているように、ｍａｓｋＡｃｃｅｓｓビット１７４２に、１つまたは複数のフィールド参照レコードが続く。各フィールド参照レコードは、１ビットの終了フラグ１７４４および１７５０から始まる。終了フラグが偽（０）である場合１７４４に、終了フラグ１７４４に、ローカル・ノード型１７３４について定義されたプロパティ・フィールドのフィールド参照インデックス番号（ｆｉｅｌｄＲｅｆ）１７４６が続き、ｆｉｅｌｄＲｅｆ値１７４６に、ローカル・ノード型１７３４によって決定されるフィールド・データ型（ｉｎｔｅｇｅｒ、ｂｏｏｌｅａｎ、ｓｔｒｉｎｇ、ｎｏｄｅなど）およびｆｉｅｌｄＲｅｆ値１７４６によって示されるプロパティ・フィールドに従ってエンコードされたバイナリ・フィールド値１７４８が続く。ｆｉｅｌｄＲｅｆ値１７４６のエンコードに使用されるビット数は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルによって決定される。終了フラグが真（１）である場合１７５０に、フィールド値のリストが終了する。
【００８０】
ＳＦＮｏｄｅ構造に含まれる各プロパティ・フィールド値は、単一のデータ値（ＳＦＦｉｅｌｄデータ構造）または複数のデータ値（ＭＦＦｉｅｌｄデータ構造）からなるものとすることができる。各ＭＦＦｉｅｌｄデータ構造に、０個以上のＳＦＦｉｅｌｄコンポーネントが含まれる。図４７および図４８からわかるように、ＭＦＦｉｅｌｄ構造には、ｉｓＬｉｓｔビット１７６６および１７８６の値に基づいて、リスト形式１７６０およびベクトル形式１７８０の２つの形がある。両方の形式が、１ビットの予約済みビット１７６２および１７８２と、それに続くｉｓＬｉｓｔビット１７６６および１７８６から始まる。
【００８１】
ｉｓＬｉｓｔビットが、値（１）を有する場合１７６６に、ＭＦＦｉｅｌｄデータ構造は、リスト形式１７６０を有する。この場合に、ｉｓＬｉｓｔビット１７６６に、１ビットのｅｎｄＦｌａｇ値１７７０および１７７２のシーケンスが続く。ｅｎｄＦｌａｇビットの値が「０」である場合１７７０に、ｅｎｄＦｌａｇビットに、ＳＦＦｉｅｌｄデータ構造１７７４が続く。ｅｎｄＦｌａｇビットの値が「１」である場合１７７２に、ＭＦＦｉｅｌｄデータ構造が終わる。
【００８２】
ｉｓＬｉｓｔビットが、値（０）を有する場合１７８６に、ＭＦＦｉｅｌｄデータ構造は、ベクトル形式１７８０を有する。この場合に、ｉｓＬｉｓｔビットに１７８６、５ビットのフィールド（ｎＢｉｔｓ）１７９０が続き、このフィールドは、次のフィールド・カウント値（ｎＦｉｅｌｄｓ）１７９２のビット数を指定する。これに、ｎＦｉｅｌｄｓ個のＳＦＦｉｅｌｄ構造１７９６のシーケンスが続く。
【００８３】
各ＳＦＦｉｅｌｄ値の構造は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で指定されるテーブルによって示されるように、対応するプロパティ・フィールドに関連する特定のフィールド・データ型に依存する。たとえば、ｂｏｏｌｅａｎフィールドは、単一ビットからなる。ｉｎｔｅｇｅｒ、ｆｌｏａｔ、ｓｔｒｉｎｇ、ＳＦＮｏｄｅを含む他の事例が、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義され、説明されている。
【００８４】
ＢＩＦＳシーン・データ構造１６００の最後のコンポーネントが、任意選択のＲｏｕｔｅｓデータ構造１６６０である。図４９および５０からわかるように、Ｒｏｕｔｅｓデータ構造には、リスト形式１８００およびベクトル形式１８３０の２つの形がある。Ｒｏｕｔｅｓデータ構造の両方の形式が、１ビットのリスト・フラグ１８０５および１８３５から始まる。リスト・フラグの値が真（１）である場合１８０５に、Ｒｏｕｔｅｓデータ構造は、リスト形式１８００を有する。この場合に、リスト・ビット１８０５に、１つまたは複数のＲｏｕｔｅデータ構造１８１０が続き、各Ｒｏｕｔｅデータ構造１８１０に、１ビットのｍｏｒｅＲｏｕｔｅｓフラグ１８１５および１８２０が続く。ｍｏｒｅＲｏｕｔｅｓフラグの値が真（１）の場合１８１５に、もう１つのＲｏｕｔｅデータ構造１８１０が続く。ｍｏｒｅＲｏｕｔｅｓフラグの値が偽（０）の場合１８２０に、Ｒｏｕｔｅｓデータ構造１８００が終了する。
【００８５】
Ｒｏｕｔｅｓデータ構造のリスト・フラグの値が偽（０）である場合１８３５に、Ｒｏｕｔｅｓデータ構造は、ベクトル形式１８３０を有する。この場合に、リスト・ビット１８３５に、５ビットのｎＢｉｔｓフィールド１８４０が続く。ｎＢｉｔｓフィールドに含まれる符号なし整数値は、それに続くｎｕｍＲｏｕｔｅｓ値１８４５のエンコードに使用されたビット数を指定する。ｎｕｍＲｏｕｔｅｓ値１８４５でエンコードされた符号なし整数は、ｎｕｍＲｏｕｔｅｓ値１８４５に続くＲｏｕｔｅデータ構造１８５０の個数を指定する。
【００８６】
図５１からわかるように、Ｒｏｕｔｅデータ構造１８６０は、１ビットのフラグ（ｉｓＵｐｄａｔｅａｂｌｅ）１８６５、ｏｕｔＮｏｄｅＩＤ値１８８０、ｏｕｔＦｉｅｌｄＲｅｆ値１８８５、ｉｎＮｏｄｅＩＤ値１８９０、およびｉｎＦｉｅｌｄＲｅｆ値１８９５からなる。ｉｓＵｐｄａｔｅａｂｌｅフラグ１８６５の値が真（１）である場合に、ｉｓＵｐｄａｔｅａｂｌｅフラグ１８６５に、ｒｏｕｔｅＩＤ値１８７０が続く。ｉｓＵｐｄａｔｅａｂｌｅフラグ１８６５の値が真（１）であり、対応するＢＩＦＳシーン・データ構造１６００のＵＳＥＮＡＭＥＳフラグ１６２０の値も真（１）である場合に、ｒｏｕｔｅＩＤ値１８７０に、ヌル終端ストリング（ｒｏｕｔｅＮａｍｅ）１８７５が続く。ｏｕｔＮｏｄｅＩＤ値、ｉｎＮｏｄｅＩＤ値、およびｒｏｕｔｅＩＤ値のエンコードに使用されるビット数は、ｓｄｓｍストリームのデコーダ固有情報１０７２で指定される。ｏｕｔＦｉｅｌｄＲｅｆおよびｉｎＦｉｅｌｄＲｅｆのエンコードに使用されるビット数は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されるテーブルによって決定される。
【００８７】
４．０  Ｏｂｊｅｃｔ  Ｄｅｓｃｒｉｐｔｏｒ  Ｓｔｒｅａｍ（ｏｄｓｍ）
他のＭＰＥＧ−４エレメンタリ・ストリームと同様に、ｏｄｓｍ（ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ）は、１つまたは複数のチャンク７３６のシーケンスに含まれる。図５２から５３からわかるように、各ｏｄｓｍチャンク１９００は、ｏｄｓｍサンプル１９２０のシーケンスからなり、各ｏｄｓｍサンプル１９４０は、ｏｄｓｍコマンド１９６０のシーケンスからなる。各ｏｄｓｍチャンク１９００のｏｄｓｍサンプル１９２０の個数は、ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍのｔｒａｋアトム７９０および９００のｓａｍｐｌｅ−ｔｏ−ｃｈｕｎｋ  ｔａｂｌｅアトム（ｓｔｓｃ）９６０の内容によって決定される。各ｏｄｓｍサンプル１９４０のｏｄｓｍコマンド１９６０の個数は、ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍのｔｒａｋアトム７９０および９００のｓａｍｐｌｅ  ｓｉｚｅ  ｔａｂｌｅアトム（ｓｔｓｚ）９７０によって決定される。
【００８８】
２つの可能なｏｄｓｍコマンドすなわち、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅコマンドおよびＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅコマンドがある。図５４からわかるように、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅコマンド２０００は、１バイトのＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅＴａｇ  ２０１０、コマンドの残りのバイト数の表示（ｎｕｍＢｙｔｅｓ）２０２０、およびＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒｓ  ２０３０のシーケンスからなる。ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒの構造を、図５６から５７に要約した。図５５からわかるように、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅコマンド２０４０は、１バイトのＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅＴａｇ  ２０５０、コマンドの残りのバイト数の表示（ｎｕｍＢｙｔｅｓ）２０６０、ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩｄ値２０７０のシーケンス、および２ビットから６ビットのパディング・ビット２０８０からなる。
【００８９】
各ｎｕｍＢｙｔｅｓ値２０２０および２０６０は、ｏｄｓｍコマンドの残りのバイト数を指定する。ｎｕｍＢｙｔｅｓの値が１２８未満である場合に、この値は、単一のバイトでエンコードされる。そうでない場合には、ｎｕｍＢｙｔｅｓの値は、サイズ・バイトのシーケンスでエンコードされる。各サイズ・バイトの上位ビットは、別のサイズ・バイトが続くかどうかを示す。この上位ビットが「１」である場合には、次のサイズ・バイトが続く。各サイズ・バイトの残りの７ビットは、ｎｕｍＢｙｔｅｓの結果の符号なし整数値の７ビットを指定する。
【００９０】
各ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩｄ値２０７０は、１０ビットでエンコードされ、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅコマンド２０４０で見つかる１０ビットのｏｂｊｅｃｔＤｅｓｃｉｐｔｏｒＩｄ値のシーケンスは、バイトのシーケンスにパックされる。ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩｄ値の個数が４の倍数でない場合には、このコマンドの最後のバイトを充てんするために、２個、４個、または６個のヌル・ビット２０８０が、最後のｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩｄ値に続く。
【００９１】
図５６からわかるように、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅコマンド２０００内のＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ  ２１００は、１バイトのＭＰ４＿ＯＤ＿Ｔａｇ  ２１０８と、それに続く、ｎｕｍＢｙｔｅｓ値２１１６、１０ビットのＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ値２１２４、１ビットのＵＲＬ＿Ｆｌａｇ値２１３２、５ビットの予約済みフィールド（０ｘ１ｆ）２１４０、およびＥＳ＿Ｄｅｓｃｒデータ構造またはＥｓＩｄＲｅｆデータ構造２１４８のいずれかからなる。ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒのこの形式では、ＵＲＬ＿Ｆｌａｇ  ２１３２の値が、必ず偽（０）である。ｎｕｍＢｙｔｅｓ値２１１６は、このオブジェクト記述子の残りを含むバイト数を指定し、これは、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅコマンド２０００またはＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅコマンド２０４０に見られるｎｕｍＢｙｔｅｓ値２０２０および２０６０について指定されたものと同一の形でエンコードされる。
【００９２】
ＥＳ＿Ｄｅｓｃｒデータ構造１０００の構造を、図２３に示した。図５７からわかるように、ＥｓＩｄＲｅｆデータ構造２１６０は、１バイトのＥＳ＿ＩＤ＿ＲｅｆＴａｇ  ２１７０、ｎｕｍＢｙｔｅｓ値２１８０、および１６ビットのエレメンタリ・ストリームＩＤ（ＥＳ＿ＩＤ）値２１９０からなる。この場合に、ｎｕｍＢｙｔｅｓの値は、必ず「２」であり、この値は、８ビット整数として指定される。
【００９３】
本発明の動作を、全般的に図５８に示す。本発明２２００は、ＸＭＴ−Ａ文書２２１０および関連するメディア・データ・ファイル２２２０の内容に基づいて、ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａファイル２２３０を作成する。出力のＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａファイル２２３０を、「ｍＰ４バイナリ・ファイル」または「ｍｐ４ファイル」とも称する場合がある。入力のＸＭＴ−Ａ文書２２１０は、ＩＳＯ／ＩＥＣ  １４４９６−１：２０００  Ａｍｄ．２に記載のＸＭＴ−Ａ仕様またはそのようなファイルのデータ構造表現の組に基づくテキスト・ファイルからなるものとすることができる。関連するメディア・データ・ファイル２２２０は、ＸＭＴ−Ａ文書２２１０に含まれるＳｔｒｅａｍＳｏｕｒｃｅ参照６７０によって指定されるオーディオ・データ、ビデオ・データ、およびイメージ・データを表す。メディア・データ・ファイル２２２０の個数は、０個以上とすることができる。
【００９４】
本発明２２００によって実行される論理動作は、（１）コンピュータ・システムで稼動するコンピュータ実施されるステップのシーケンスとして、または（２）コンピューティング・システム内の相互接続された機械モジュールとして、あるいはその両方として実施することができる。実施形態は、本発明を適用するシステムの性能要件に依存する選択の問題である。したがって、本明細書で説明する本発明の実施形態を構成する論理動作を、その代わりに動作、ステップ、またはモジュールと呼ぶ。
【００９５】
さらに、本発明によって実行される動作を、コンピュータ可読媒体として実施されたコンピュータ可読プログラムとすることができる。制限ではなく例として、コンピュータ可読媒体に、コンピュータ記憶媒体および通信媒体が含まれる。コンピュータ可読媒体に、コンピュータ可読命令、データ構造、プログラム・モジュール、または他のデータなどの情報の保管の方法または技術で実施された、揮発性および不揮発性の、取外し可能および取り外し不能の媒体が含まれる。コンピュータ記憶媒体に、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュ・メモリ、または他のメモリ技術、ＣＤ−ＲＯＭ、ディジタル多用途ディスク（ＤＶＤ）、または他の光ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージ、または他の磁気記憶デバイス、あるいは所望の情報の保管に使用でき、コンピュータによってアクセス可能な他のすべての媒体が含まれるが、これに制限はされない。通信媒体は、通常、搬送波または他のトランスポート機構などの変調されたデータ信号内でコンピュータ可読命令、データ構造、プログラム・モジュール、または他のデータを実施し、通信媒体には、すべての情報配信媒体が含まれる。用語「変調されたデータ信号」は、信号内で情報をエンコードする形で、その特性の１つまたは複数を設定または変更された信号を意味する。制限ではなく例として、通信媒体に、有線接続または直接配線接続などの有線媒体と、音響、ＲＦ、赤外線、および他の無線媒体などの無線媒体が含まれる。上記のいずれかの組合せも、コンピュータ可読媒体の範囲に含まれなければならない。
【００９６】
図５８からわかるように、ｍｐ４ファイル２２３０を作成する処理は、２ステップで達成される。第１ステップでは、ＸＭＴ−Ａ−中間文書コンバータ２２４０が、入力ＸＭＴ−Ａ文書２２１０を解釈し、ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａファイル２２３０を表す１つまたは複数の中間文書２２４５を作成する。本発明の１実施形態で、中間文書の対２２５０および２２６０が、中間文書コンバータ２２４０によって作成される。この中間文書は、ｍｐ４−ｆｉｌｅ文書２２５０およびｍｐ４−ｂｉｆｓ文書２２６０からなる。第２ステップで、中間文書−ｍｐ４ファイル・コンバータ２２７０が、ｍｐ４−ｆｉｌｅ文書２２５０、ｍｐ４−ｂｉｆｓ文書２２６０、およびＸＭＴ−Ａ文書２２１０に関連するメディア・データ・ファイル２２２０（存在する場合に）に基づいて出力ｍｐ４ファイル２２３０を生成する。
【００９７】
この処理２２００をこの２つのステップに分割する理由の１つは、出力ｍｐ４ファイル２２３０が、入力ＸＭＴ−Ａ文書２２１０およびメディア・データ・ファイル２２２０によって表されるものと同一の情報を表すが、出力ｍｐ４ファイル２２３０の編成および構造が、入力のＸＭＴ−Ａ文書の編成および構造と大きく異なるからである。たとえば、ｍｐ４ファイルの構造は、Ｑｕｉｃｋｔｉｍｅ（Ｒ）メディア・データ・ファイルの構造に密接に関係するが、ＸＭＴ−Ａファイルの構造は、Ｑｕｉｃｋｔｉｍｅ（Ｒ）メディア・データ・ファイルの特性を全く有しない。ＸＭＴ−Ａ文書には、ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ（ｓｄｓｍ）およびｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ（ｏｄｓｍ）の記述が含まれるが、これらは、任意の順序で一緒に混合することができる。ｍｐ４ファイルにも、ｓｄｓｍおよびｏｄｓｍの記述が含まれるが、これらのそれぞれが、時間的に順序付けられたサンプルの別々のストリームとして表現される。
【００９８】
ｍｐ４ファイル２２３０の構造および編成が、ＸＭＴ−Ａ文書２２１０の構造および編成と非常に異なるので、ｍｐ４ファイル２２３０を作成する処理を、ＸＭＴ−Ａ文書２２１０に基づいて、少なくとも２つのステップすなわち（ａ）再編成および（ｂ）バイナリ・エンコーディングに分割することが有利である。第１ステップでは、ＸＭＴ−Ａ文書２２１０に含まれる情報を、ｍｐ４ファイルの構造および編成を反映した形に再編成する。第２ステップでは、結果の再編成された情報を、出力ｍｐ４ファイル２２３０に必要な順序でトラバースしながらこの情報のバイナリ・エンコーディングを実行することによって、出力ｍｐ４ファイル２２３０を作成する。この形で、第１ステップは、ｍｐ４ファイルのバイナリ・エンコーディングの要件に無関係に実行することができ、第２ステップは、ＸＭＴ−Ａ文書の構造に無関係に実行することができる。
【００９９】
ＸＭＴ−Ａ文書２２１０に基づいてｍｐ４ファイル２２３０を作成する処理をこの２ステップに分割するという目標を達成するために、（ａ）ｍｐ４ファイルの構造および編成、（ｂ）ｍｐ４ファイルで表されるｓｔｒｅａｍ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ（ｓｄｓｍ）の構造および編成、ならびに（ｃ）ｍｐ４ファイル２２３０で表されるｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ（ｏｄｓｍ）の構造および編成を表す新しい構造化文書を定義する必要がある。これは、３つの新しいタイプの構造化文書すなわち、ｍｐ４ファイルを表す構造間文書、ｓｄｓｍを表す構造化文書、およびｏｄｓｍを表す構造化文書を定義することによって達成することができる。もちろん、ｍｐ４ファイルおよびｓｄｓｍを表すのに必要な構造化文書は、比較的複雑であるが、ｏｄｓｍを表すのに必要な構造化文書は、非常に単純である。その結果、ｏｄｓｍの記述を、ｍｐ４ファイルを表すのに使用される構造化文書に組み込むことが便利である。その結果、本発明の１実施形態で、ｍｐ４ファイルおよびｏｄｓｍの構造化文書とｓｄｓｍの構造化文書という２つの新しい構造化文書が導入される。この２つの構造化文書は、ｍｐ４−ｆｉｌｅ文書２２５０およびｍｐ４−ｂｉｆｓ文書２２６０として識別される。この構造化文書を、集合的に中間文書と呼ぶ。
【０１００】
２つのタイプの構造化文書の使用が、便利さの問題として選択されたことに留意されたい。同一の目的を、３タイプの構造化文書（ｍｐ４ファイルだけ、ｏｄｓｍだけ、およびｓｄｓｍだけ）を定義することによって達成することができ、３タイプの情報のすべてを、単一の合成構造化文書に合併することができる。
【０１０１】
本発明の１実施形態で、再編成された情報を表現するために作成される構造化文書の特定のタイプは、「ＸＭＬ」（ｅＸｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）技術に基づく。これが有利なのは、下記の理由による。
（ａ）ＸＭＴ−Ａ文書の定義が、ＸＭＬ技術に基づく
（ｂ）ＸＭＬ技術は、構造化文書を表す標準化された手段を提供する
（ｃ）ＸＭＬ技術に基づく構造化文書を扱う標準化されたソフトウェア・ツールが存在する
【０１０２】
したがって、本発明の１実施形態で、ＸＭＴ−Ａファイルに含まれる情報を再編成する処理が、ＸＭＬからＸＭＬへの変換になる。さらに、ＸＭＬファイルを扱う標準化されたソフトウェアの存在によって、同一の機能を実行する新しい特殊化されたソフトウェアを開発する必要なしに、入力ＸＭＴ−Ａ文書ならびに中間文書を管理することが可能になる。
【０１０３】
この実施形態は、中間文書を表すのにＸＭＬ技術を使用することに基づくが、他のタイプの構造化文書を使用する、本発明の代替実施形態を作成することが可能である。
【０１０４】
次の材料で、（１）ｍｐ４−ｆｉｌｅ文書２２５０の構造、（２）ｍｐ４−ｂｉｆｓ文書２２６０の構造、（３）ＸＭＴ−Ａ−中間文書コンバータ２２４０の動作、および（４）中間文書−ｍｐ４ファイル・コンバータ２２７０の動作を説明する。
【０１０５】
５．０  ｍｐ４−ｆｉｌｅ文書
図５９からわかるように、ｍｐ４−ｆｉｌｅ文書２３００の構造は、ｍｐ４バイナリ・ファイル７００の構造に非常に似ている。ｍｐ４ｆｉｌｅ文書２３００には、１つまたは複数のメディア・データ（ｍｄａｔ）要素２３１０の組と、単一のｍｏｏｖ要素２３２０が含まれる。ｍｏｏｖ要素２３２０に、ｍｐ４ｆｉｏｄｓ（ｍｐ４  ｆｉｌｅ  ｉｎｉｔｉａｌ  ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ）要素２３３０と、１つまたは複数のｔｒａｋ要素２３５０が含まれる。ｍｏｏｖ要素２３２０に、任意選択のユーザ・データ（ｕｄｔａ）要素２３４０を含めることもできる。ｕｄｔａ要素２３４０は、著作権表示などの情報を含めるのに使用される。ｍｖｈｄアトム７７２のプロパティは、ｍｏｏｖ要素２３２０の属性によって表される。
【０１０６】
図６０からわかるように、ｍｐ４ｆｉｏｄｓ要素２３６０は、ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ属性２３７０を所有する。ｍｐ４ｆｉｏｄｓ要素２３６０は、図６０に示されていない他の複数の属性も所有する。これらの追加の属性に、ｂｏｏｌｅａｎ属性「ｉｎｃｌｕｄｅＩｎｌｉｎｅＰｒｏｆｉｌｅｓＦｌａｇ」、ｉｎｔｅｇｅｒ属性「ｓｃｅｎｅＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、「ＯＤＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、「ａｕｄｉｏＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、「ｖｉｓｕａｌＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、および「ｇｒａｐｈｉｃｓＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」が含まれる。ｍｐ４ｆｉｏｄｓ要素２３６０に、１つまたは複数のＥｓＩｄＩｎｃ要素２３８０も含まれる。各ＥｓＩｄＩｎｃ要素２３８０は、関連するｔｒａｋ要素２３５０のｔｒａｃｋＩＤ属性と一致するｔｒａｃｋＩＤ属性２３９０を所有する。
【０１０７】
図６１からわかるように、各ｍｄａｔ要素２４００に、ｓｄｓｍ要素２４１０、ｏｄｓｍ要素２４２０、およびｍｅｄｉａＦｉｌｅ要素２４３０のうちの１つまたは複数を含めることができる。これらの要素のそれぞれは、関連するｔｒａｋ要素２３５０のｔｒａｃｋＩＤ属性と一致する独自の「ｔｒａｃｋＩＤ」属性を所有する。各ｍｅｄｉａＦｉｌｅ要素２４３０は、関連するメディア・データ（オーディオ・データ、ビジュアル・データなど）を含む外部バイナリ・ファイルのファイル名を指定する「ｎａｍｅ」属性を有する。各ｓｄｓｍ要素２４１０は、関連するｍｐ４−ｂｉｆｓ文書２２６０を表すＸＭＬファイルの名前を指定する「ｘｍｌＦｉｌｅ」属性を有する。１実施形態で、ｍｐ４−ｆｉｌｅ文書またはｍｐ４−ｂｉｆｓ文書あるいはその両方を表すＸＭＬファイルの作成が、診断目的に有用である場合があるが、そのようなファイルは、本発明の動作に必要ではない。
【０１０８】
図６２および６４からわかるように、各ｓｄｓｍ要素２４４０および各ｍｅｄｉａＦｉｌｅ要素２４８０に、１つまたは複数のチャンク要素２４５０および２４９０が含まれる。各チャンク要素２４５０および２４９０は、既知の場合にバイナリ・データの関連するブロックのバイト数を示す「ｓｉｚｅ」属性を所有する。各チャンク要素２４５０および２４９０は、既知の場合に、バイナリｓｄｓｍデータ・ファイルまたはメディア・データ・ファイルの先頭と、そのバイナリｓｄｓｍデータ・ファイルまたはメディア・データ・ファイル内の現在のチャンクのデータの先頭との間のバイト数を示す「ｏｆｆｓｅｔ」属性も所有する。ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ（ｓｄｓｍ）を記述する追加情報が、ｍｐ４−ｂｉｆｓ文書に含まれる。
【０１０９】
図６３からわかるように、各ｏｄｓｍ要素２４６０に、１つまたは複数のｏｄｓｍＣｈｕｎｋ２４７０要素が含まれる。各ｏｄｓｍＣｈｕｎｋ要素２４７０は、既知の場合にｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍの関連する部分のバイト数を示す「ｓｉｚｅ」属性を所有する。各ｏｄｓｍＣｈｕｎｋ要素２４７０は、既知の場合に、関連するｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍのバイナリ・データの先頭と、そのストリーム内の現在のチャンクのデータの先頭との間のバイト数を示す「ｏｆｆｓｅｔ」属性も所有する。
【０１１０】
図６５からわかるように、各ｏｄｓｍＣｈｕｎｋ要素２５００に、１つまたは複数のｏｄｓｍＳａｍｐｌｅ要素２５１０が含まれる。図６６からわかるように、各ｏｄｓｍＳａｍｐｌｅ要素２５２０に、１つまたは複数のｏｄｓｍ−ｃｏｍｍａｎｄ要素２５３０が含まれる。図６７からわかるように、各ｏｄｓｍ−ｃｏｍｍａｎｄ要素は、ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ要素２５４０またはＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅ要素２５７０とすることができる。各ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ要素２５４０に、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２５５０が含まれ、ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ要素２５４０に含まれる各ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２５５０に、ＥｓＩｄＲｅｆ要素２５６０が含まれる。
【０１１１】
各ｏｄｓｍＳａｍｐｌｅ要素２５１０および２５２０は、ｏｄｓｍＳａｍｐｌｅ要素２５１０および２５２０に含まれるコマンドが実行される時を秒単位で指定する「ｔｉｍｅ」属性を所有する。各ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２５５０および各ＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅ要素２５７０は、数値のオブジェクト記述子ＩＤを指定する「ＯＤＩＤ」属性を所有する。各ＥｓＩｄＲｅｆ要素２５６０は、数値エレメンタリ・ストリームＩＤを指定する「ＥｓＩｄ」属性を所有する。
【０１１２】
図６８に示されたｔｒａｋ要素２３５０の構造２６００は、ｍｐ４ファイル７００内のｔｒａｋアトム７９０および９００の構造に非常に類似する。各ｔｒａｋ要素２６００に、ｍｄｉａ要素２６０４が含まれる。ｔｒａｋ要素２６００に、ｔｒｅｆ（ｔｒａｃｋ  ｒｅｆｅｒｅｎｃｅ）要素２６３６またはｅｄｔｓ（ｅｄｉｔ  ｌｉｓｔ）要素２６４４あるいはその両方も含まれる。ｍｐ４ファイルのｔｋｈｄアトム９１０に類似するｔｋｈｄ要素はない。その代わりに、ｔｋｈｄアトム９１０に含まれるプロパティが、ｔｒａｋ要素２６００の属性として表現される。
【０１１３】
ｍｄｉａ要素２６０４に、ｈｄｌｒ要素２６０８およびｍｉｎｆ要素２６１２が含まれる。ｍｄｈｄアトム９１５のプロパティは、ｍｄｉａ要素２６０４の属性として表される。ｍｉｎｆ要素２６１２に、ｄｉｎｆ要素２６１６、ｓｔｂｌ要素２６２８、およびメディア・ヘッダ要素２６３２が含まれる。メディア・ヘッダ要素（「＊ｍｈｄ」）２６３２は、関連するデータ・ストリームのデータの型に依存する複数の形式の１つを有することができる。ｓｄｓｍまたはｏｄｓｍに関連するｔｒａｋ要素内のメディア・ヘッダ要素２６３２は、「ｎｍｈｄ」要素によって表される。オーディオ・ストリームに関連するｔｒａｋ要素内のメディア・ヘッダ要素２６３２は、「ｓｍｈｄ」要素によって表され、ビジュアル・ストリームに関連するｔｒａｋ要素内のメディア・ヘッダ要素２６３２は、「ｖｍｈｄ」要素によって表される。
【０１１４】
図６９からわかるように、ｓｔｂｌ（ｓａｍｐｌｅ  ｔａｂｌｅｓ）要素２６２８および２６５２に、ｓｔｓｃ（ｓａｍｐｌｅ−ｔｏ−ｃｈｕｎｋ  ｔａｂｌｅ）要素２６５６、ｓｔｔｓ（ｔｉｍｅ−ｔｏ−ｓａｍｐｌｅ  ｔａｂｌｅ）要素２６６０、ｓｔｃｏ（ｃｈｕｎｋ  ｏｆｆｓｅｔ  ｔａｂｌｅ）要素２６６４、ｓｔｓｚ（ｓａｍｐｌｅ  ｓｉｚｅ  ｔａｂｌｅ）要素２６６８、およびｓｔｓｄ（ｓａｍｐｌｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｔａｂｌｅ）要素２６７６が含まれる。ｓｔｂｌ要素２６５２に、ストリーム・タイプまたはメディア・タイプに応じて、ｓｔｓｓ（ｓｙｎｃ  ｓａｍｐｌｅ  ｔａｂｌｅ）要素２６７２も含めることができる。ｓｔｓｄ要素２６７６に、図６９で「ｍｐ４＊要素」２６８０と表された、複数のタイプの従属要素の１つを含めることができる。ｓｄｓｍストリームまたはｏｄｓｍストリームに関連するｔｒａｋ要素２６００に含まれるｓｔｓｄ要素２６７６の場合に、ｓｔｓｄ要素２６８０に、「ｍｐ４ｓ」要素が含まれる。オーディオ・ストリームに関連するｔｒａｋ要素２６００に含まれるｓｔｓｄ要素２６８０の場合に、ｓｔｓｄ要素２６８０に、「ｍｐ４ａ」要素が含まれる。ビジュアル・ストリームに関連するｔｒａｋ要素２６００に含まれるｓｔｓｄ要素２６８０の場合に、ｓｔｓｄ要素２６８０に、「ｍｐ４ｖ」要素が含まれる。どの場合でも、「ｍｐ４＊」要素２６８０には、ｅｓｄｓ要素２６８４が含まれ、ｅｓｄｓ要素２６８４に、ＥＳ＿Ｄｅｓｃｒ要素２６８８が含まれる。
【０１１５】
図７０からわかるように、ＥＳ＿Ｄｅｓｃｒ要素２７００に、ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０およびＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７６０が含まれる。ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素２７１０に、ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０、ＪＰＥＧ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ  ２７３０、ＶｉｓｕａｌＣｏｎｆｉｇ  ２７４０、またはＡｕｄｉｏＣｏｎｆｉｇ  ２７５０を含む複数のタイプのデコーダ固有情報要素の１つを含めることができる。さまざまなタイプのデコーダ固有情報要素のそれぞれは、バイナリＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ構造１０３２に含まれるＤｅｃｏｄｅｒＳｐｅｃｉｆｉｃＩｎｆｏデータ構造１０７２の形式を表す。バイナリＥＳ＿Ｄｅｓｃｒ構造１０００、ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ構造１０３２、ＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ構造１０８８、およびＤｅｃｏｄｅｒＳｐｅｃｉｆｉｃＩｎｆｏ構造１０７６のプロパティは、ｍｐ４−ｆｉｌｅ文書２３００の対応する要素２７００、２７１０、２７６０、２７２０、２７３０、２７４０、および２７５０の属性によって表される。
【０１１６】
６．０  ｍｐ４−ｂｉｆｓ文書
図７１からわかるように、ｍｐ４−ｂｉｆｓ文書２８００に、単一のｂｉｆｓＣｏｎｆｉｇ要素２８１０と、それに続く１つまたは複数のｃｏｍｍａｎｄＦｒａｍｅ要素２８２０のシーケンスが含まれる。図７２からわかるように、各ｃｏｍｍａｎｄＦｒａｍｅ要素２８３０に、１つまたは複数のｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｍｍａｎｄ要素２８４０が含まれる。各ｃｏｍｍａｎｄＦｒａｍｅ要素２８２０および２８３０は、ｃｏｍｍａｎｄＦｒａｍｅ要素に含まれるコマンドが実行される時を秒単位で指定する属性「ｔｉｍｅ」を所有する。
【０１１７】
各ｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｍｍａｎｄ要素２８４０は、１１個の可能なＭＰＥＧ−４  ＢＩＦＳコマンドすなわち、ＩｎｓｅｒｔＮｏｄｅ、ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ、ＩｎｓｅｒｔＲｏｕｔｅ、ＤｅｌｅｔｅＮｏｄｅ、ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ、ＤｅｌｅｔｅＲｏｕｔｅ、ＲｅｐｌａｃｅＮｏｄｅ、ＲｅｐｌａｃｅＦｉｅｌｄ、ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ、ＲｅｐｌａｃｅＲｏｕｔｅ、およびＲｅｐｌａｃｅＳｃｅｎｅのうちの１つを表す。図７３からわかるように、ｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｍｍａｎｄ要素２９１０に、１つまたは複数のｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０を含めることができる。１１タイプのｂｉｆｓＣｏｍｍａｎｄのうちで、ＩｎｓｅｒｔＮｏｄｅ、ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ、ＲｅｐｌａｃｅＮｏｄｅ、ＲｅｐｌａｃｅＦｉｅｌｄ、ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ、およびＲｅｐｌａｃｅＳｃｅｎｅに、従属ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０を含めることができる。
【０１１８】
図７４からわかるように、ＲｅｐｌａｃｅＳｃｅｎｅ  ｂｉｆｓＣｏｍｍａｎｄ要素２９３０に、単一の従属ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素だけをを含めることができ、これは、「ＴｏｐＮｏｄｅ」要素２９４０でなければならない。ＴｏｐＮｏｄｅ要素２９４０は、ＭＰＥＧ−４  ＢＩＦＳノードの特定のサブセットのメンバに対応する。このサブセットは、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されている。さらに、ＲｅｐｌａｃｅＳｃｅｎｅ  ｂｉｆｓＣｏｍｍａｎｄ要素２９３０に、従属する「Ｒｏｕｔｅｓ」要素２９５０も含めることができ、「Ｒｏｕｔｅｓ」要素２９５０に、１つまたは複数の従属する「Ｒｏｕｔｅ」要素２９６０を含めることができる。ｍｐ４ｂｉｆｓ  Ｒｏｕｔｅ要素２９６０は、属性「ｒｏｕｔｅＩｄ」、「ａｒｒｉｖａｌＮｏｄｅＩｄ」、「ａｒｒｉｖａｌＦｉｅｌｄ」、「ｄｅｐａｒｔｕｒｅＮｏｄｅＩｄ」、および「ｄｅｐａｒｔｕｒｅＦｉｅｌｄ」を有する。
【０１１９】
可能な従属ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素のほかに、各タイプのｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｍｍａｎｄ要素は、次の属性値を所有する。
１．ＩｎｓｅｒｔＮｏｄｅ：「ｐａｒｅｎｔＩｄ」、「ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ」、および「ｐｏｓｉｔｉｏｎ」
２．ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ：「ｎｏｄｅＩｄ」、「ｉｎＦｉｅｌｄＮａｍｅ」、「ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ」、「ｐｏｓｉｔｉｏｎ」、および「ｖａｌｕｅ」
３．ＩｎｓｅｒｔＲｏｕｔｅ：「ＲｏｕｔｅＩｄ」、「ｄｅｐａｒｔｕｒｅＮｏｄｅ」、「ｄｅｐａｒｔｕｒｅＦｉｅｌｄ」、「ａｒｒｉｖａｌＮｏｄｅ」、および「ａｒｒｉｖａｌＦｉｅｌｄ」
４．ＤｅｌｅｔｅＮｏｄｅ：「ｎｏｄｅＩｄ」
５．ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ：「ｎｏｄｅＩｄ」、「ｉｎＦｉｅｌｄＮａｍｅ」、「ｄｅｌｅｔｉｏｎＰｏｓｉｔｉｏｎ」、および「ｐｏｓｉｔｉｏｎ」
６．ＤｅｌｅｔｅＲｏｕｔｅ：「ｒｏｕｔｅＩｄ」
７．ＲｅｐｌａｃｅＮｏｄｅ：「ｐａｒｅｎｔＩｄ」
８．ＲｅｐｌａｃｅＦｉｅｌｄ：「ｎｏｄｅＩｄ」、「ｉｎＦｉｅｌｄＮａｍｅ」、および「ｖａｌｕｅ」
９．ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ：「ｎｏｄｅＩｄ」、「ｉｎＦｉｅｌｄＮａｍｅ」、「ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ」、「ｐｏｓｉｔｉｏｎ」、および「ｖａｌｕｅ」
１０．ＲｅｐｌａｃｅＲｏｕｔｅ：「ｒｏｕｔｅＩｄ」、「ｄｅｐａｒｔｕｒｅＮｏｄｅ」、「ｄｅｐａｒｔｕｒｅＦｉｅｌｄ」、「ａｒｒｉｖａｌＮｏｄｅ」、および「ａｒｒｉｖａｌＦｉｅｌｄ」
１１．ＲｅｐｌａｃｅＳｃｅｎｅ：「ＵＳＥＮＡＭＥＳ」（ｂｏｏｌｅａｎ値）
【０１２０】
ｂｉｆｓＣｏｍｍａｎｄ要素ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ、ＲｅｐｌａｃｅＦｉｅｌｄ、およびＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅに関して、「ｉｎＦｉｅｌｄＮａｍｅ」属性によって指定されるプロパティ・フィールドが、「Ｎｏｄｅ」のノード・データ型を有する（ＭＰＥＧ−４仕様に従って）場合に、この要素に、１つまたは複数の従属するｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０が含まれ、「ｖａｌｕｅ」属性に、従属するＮｏｄｅ要素のそれぞれに関連するノード名のリストが含まれる。
【０１２１】
ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９２０は、多数のタイプのＭＰＥＧ−４  ＢＩＦＳノード・データ構造の１つを表す。１００個以上の異なるタイプのＢＩＦＳノードが、ＭＰＥＧ−４システム仕様で定義されている。ＭＰＥＧ−４  ＢＩＦＳノードの各タイプが、特定のＮｏｄｅＮａｍｅおよび１組のプロパティ・フィールドを有する。
【０１２２】
ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素には、オリジナルＮｏｄｅ要素および再利用されるＮｏｄｅ要素という２つの基本的なタイプがある。図７５からわかるように、ｍｐ４ｂｉｆｓオリジナルＮｏｄｅ要素３０００は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたＢＩＦＳノードの１つのＮｏｄｅＮａｍｅプロパティに対応する「ＮｏｄｅＮａｍｅ」によって指定される。
【０１２３】
ｍｐ４ｂｉｆｓオリジナルＮｏｄｅ要素３０００は、任意選択のＮｏｄｅＩｄ属性３０１０を有することができる。ＮｏｄｅＩｄ属性３０１０の値が指定される場合に、Ｎｏｄｅ要素３０００は、「再利用可能Ｎｏｄｅ」として分類される。ＮｏｄｅＩｄ属性３０１０の値は、指定される場合に、１から現在のシーンで定義された再利用可能Ｎｏｄｅの個数までの範囲の整数である。ＮｏｄｅＩｄ属性３０１０の値が指定され、関連するＲｅｐｌａｃｅＳｃｅｎｅコマンドの「ＵＳＥＮＡＭＥＳ」属性の値が「真」である場合に、そのＮｏｄｅ要素は、「ｎａｍｅ」属性３０１６も有する。
【０１２４】
ＮｏｄｅＩｄ属性３０１０およびｎａｍｅ属性３０１６の他に、各オリジナルＮｏｄｅ要素は、複数のプロパティ・フィールド属性３０２０を有する。各プロパティ・フィールド属性３０２０は、特定のＮｏｄｅ要素のＮｏｄｅＮａｍｅによって識別されるノード・タイプのＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたプロパティ・フィールドの１つに対応する。各プロパティ・フィールドは、ｂｏｏｌｅａｎ、ｉｎｔｅｇｅｒ、ｆｌｏａｔなど、定義されたフィールド・データ型を有する。可能なフィールド・データ型の組に、「ＳＦＮｏｄｅ」および「ＭＦＮｏｄｅ」が含まれる。特定のオリジナルＮｏｄｅ要素のＮｏｄｅＮａｍｅが、フィールド・データ型「ＳＦＮｏｄｅ」および「ＭＦＮｏｄｅ」を有する１つまたは複数のプロパティ・フィールドを有するＭＰＥＧ−４  ＢＩＦＳノードに対応する場合に、そのＮｏｄｅ要素は、１つまたは複数の従属するＮｏｄｅ要素３０３０を所有することができる。そうである場合に、対応するプロパティ・フィールド属性の値は、そのプロパティ・フィールドに関連する各従属Ｎｏｄｅ要素のＮｏｄｅＮａｍｅストリングからなる。
【０１２５】
たとえば、ＮｏｄｅＮａｍｅ「Ｇｒｏｕｐ」を有する特定のｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素が、「ｃｈｉｌｄｒｅｎ」属性に関連する、ＮｏｄｅＮａｍｅ「Ｔｒａｎｓｆｏｒｍ２Ｄ」、「Ｖａｌｕａｔｏｒ」、および「ＴｉｍｅＳｅｎｓｏｒ」を有する従属ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素を所有する場合に、「ｃｈｉｌｄｒｅｎ」属性の値は、「Ｔｒａｎｓｆｏｒｍ２Ｄ  Ｖａｌｕａｔｏｒ  ＴｉｍｅＳｅｎｓｏｒ」になる。
【０１２６】
Ｃｏｎｄｉｔｉｏｎａｌ  ＢＩＦＳノードの特別な例で、プロパティ・フィールドの１つが、「ｂｕｆｆｅｒ」というプロパティ・フィールド名を有し、「ｂｕｆｆｅｒ」プロパティ・フィールドのフィールド・データ型が、「ｃｏｍｍａｎｄ  ｂｕｆｆｅｒ」であり、「ｂｕｆｆｅｒ」プロパティ・フィールドの値が、１つまたは複数のＢＩＦＳコマンドからなる。この場合に、対応するｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素３０４０のＮｏｄｅＮａｍｅは、「Ｃｏｎｄｉｔｉｏｎａｌ」になる。Ｃｏｎｄｉｔｉｏｎａｌ  Ｎｏｄｅ要素３０４０のＮｏｄｅＩｄ属性３０５０およびｎａｍｅ属性３０５６の値は、他のｍｐ４ｂｉｆｓオリジナルＮｏｄｅ要素３０００と同様に指定することができる。従属するＮｏｄｅ要素３０３０の代わりに、Ｃｏｎｄｉｔｉｏｎａｌ  Ｎｏｄｅ要素は、１つまたは複数の従属するｂｉｆｓＣｏｍｍａｎｄ要素３０７０を有し、「ｂｕｆｆｅｒ」属性の値は、従属するｂｉｆｓＣｏｍｍａｎｄ要素３０７０のコマンド名の順序付きリストからなる。
【０１２７】
たとえば、特定のＣｏｎｄｉｔｉｏｎａｌ  Ｎｏｄｅ要素が、従属ＩｎｓｅｒｔＲｏｕｔｅ  ｂｉｆｓＣｏｍｍａｎｄ要素とそれに続く従属ＤｅｌｅｔｅＮｏｄｅ  ｂｉｆｓＣｏｍｍａｎｄ要素を所有する場合に、「ｂｕｆｆｅｒ」属性の値は、「ＩｎｓｅｒｔＲｏｕｔｅ  ＤｅｌｅｔｅＮｏｄｅ」になる。
【０１２８】
オリジナルＮｏｄｅ要素の、従属するＮｏｄｅ要素またはｂｉｆｓＣｏｍｍａｎｄ要素を所有する能力は、ＢＩＦＳコマンドおよびＮｏｄｅ要素の階層的集合に対して再帰的に繰り返すことができる。
【０１２９】
図７７からわかるように、再利用されるＮｏｄｅ要素３０８０は、「ＲｅｕｓｅｄＮｏｄｅ」というＮｏｄｅＮａｍｅを有する。ＲｅｕｓｅｄＮｏｄｅ要素３０８０は、従属する要素を有しない。ＲｅｕｓｅｄＮｏｄｅ要素３０８０は、「ｎｏｄｅＲｅｆ」３０９０という名前の単一の属性を有する。ｎｏｄｅＲｅｆ属性３０９０の値は、再利用可能なオリジナルＮｏｄｅ要素３０００および３０４０の一方のＮｏｄｅＩｄ属性３０１０および３０５０の値と一致しなければならない。
【０１３０】
７．０  ｘｍｔａ−ｍｐ４コンバータ
上で述べたように、本発明の１実施形態は、ＸＭＴ−Ａ文書２２１０および０個以上のバイナリ・メディア・データ・ファイル２２２０のセットに基づいて、ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａバイナリ・ファイル（「ｍｐ４ファイル」）２２３０を作成する。
【０１３１】
この処理は、次の２つの主要なステップからなる。
ａ．中間文書２２５０および２２６０の対がＸＭＴ−Ａ文書２２１０に基づいて作成される第１ステップ２２４０
ｂ．ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａバイナリ・ファイル２２３０が、中間文書２２５０および２２６０と、ＸＭＴ−Ａ文書２２１０で指定されたバイナリ・メディア・データ・ファイル２２２０に基づいて作成される第２ステップ２２７０
【０１３２】
メディア・データ・ファイル２２２０は、第２ステップでのみ使用される。第１ステップ２２４０は、メディア・データ・ファイルの名前を使用することができるが、メディア・データ・ファイル自体は、第１ステップ２２４０では使用されない。
【０１３３】
この主要なステップを、図５８に示し、下で詳細に説明する。
【０１３４】
７．１  ＸＭＴ−Ａ文書に基づく中間文書の作成
中間文書２２５０および２２６０を作成する処理２２４０を、図７８に要約した。処理２２４０を、特定の応用例の必要に合わせて、ハードウェア、ソフトウェア、またはこの２つの組合せで実施できることが企図されている。ハードウェア実施形態は、より高速に動作する傾向があり、ソフトウェア実施形態は、しばしば、作るのがより安価である。処理２２４０によって実行される論理動作は、（１）コンピュータ・システムで稼動するコンピュータ実施されるステップのシーケンスとして、または（２）コンピューティング・システム内の相互接続された機械モジュールとして、あるいはその両方として実施することができる。実施形態は、本発明を適用するシステムの性能要件に依存する選択の問題である。したがって、本明細書で説明する本発明の実施形態を構成する論理動作を、その代わりに動作、ステップ、またはモジュールと呼ぶ。
【０１３５】
７．１．１  ＸＭＴ−Ａ文書、ｍｐ４ｆｉｌｅ文書、およびｍｐ４ｂｉｆｓ文書の作成
処理２２４０は、動作３１００で開始される。ＸＭＴ−Ａ文書１００は、この文書を表すＸＭＬファイルを読み取り、解釈することによって作成することができる。標準ＸＭＬ手段を使用して、そのようなファイルを読み取り、ＸＭＬファイルに含まれるすべての情報を表すＸＭＴ−Ａ文書を作ることができる。これは、標準ＸＭＬ動作であり、本発明に固有ではない。その代わりに、ＸＭＴ−ＡベースのＭＰＥＧ−４オーサリング・ツールなどの他の手段から前に導出されたＸＭＴ−Ａ文書を、次のステップを実施するソフトウェアまたは他の手段への引数として与えることができる。
【０１３６】
空のｍｐ４−ｆｉｌｅ文書２３００および空のｍｐ４ｂｉｆｓ文書２８００を、標準ＸＭＬ手段を使用して作成する。これらの文書のそれぞれに、可能なデフォルト属性以外の子および属性を有しないトップ・レベル要素が含まれる。値を、ストリング量「ｓｄｓｍＦｉｌｅＮａｍｅ」に割り当てることができる。この値は、中間文書が外部テキスト・ファイルに保存される場合に限って使用される。入力ＸＭＴ−Ａ文書がある場合に、その名前から適切な値を導出することができる。そうでない場合に、値「ｍｐ４ｂｉｆｓ．ｘｍｌ」を、量「ｓｄｓｍＦｉｌｅＮａｍｅ」に割り当てることができる。動作３１００が完了した後に、制御フローは、動作３１０６に移る。
【０１３７】
７．１．２  ｍｐ４ｂｉｆｓ文書の新しい「ｂｉｆｓＣｏｎｆｉｇ」要素の作成
動作３１０６で、ｍｐ４ｂｉｆｓ文書の新しい「ｂｉｆｓＣｏｎｆｉｇ」要素を作成する。標準ＸＭＬ手段を使用して、空の「ｂｉｆｓＣｏｎｆｉｇ」要素２８１０を作成し、これをｍｐ４ｂｉｆｓ文書２８００のトップ・レベル要素に挿入する。標準ＸＭＬ手段を使用して、この「ｂｉｆｓＣｏｎｆｉｇ」要素の次の属性に値を割り当てる。「０」の値を、「ｎｏｄｅＩｄＢｉｔｓ」属性に割り当てる。「０」の値を、「ｒｏｕｔｅＩｄＢｉｔｓ」属性に割り当てる。「０」の値を、「ｐｒｏｔｏＩｄＢｉｔｓ」属性に割り当てる。「真」の値を、「ｃｏｍｍａｎｄＳｔｒｅａｍ」属性に割り当てる。「真」の値を、「ｐｉｘｅｌＭｅｔｒｉｃ」属性に割り当てる。「０」の値を、「ｐｉｘｅｌＨｅｉｇｈｔ」属性に割り当てる。「０」の値を、「ｐｉｘｅｌＷｉｄｔｈ」属性に割り当てる。「偽」の値を、「ｕｓｅＢｉｆｓＶ２Ｃｏｎｆｉｇ」属性に割り当てる。「偽」の値を、「ｕｓｅ３ＤＭｅｓｈＣｏｄｉｎｇ」属性に割り当てる。「偽」の値を、「ｕｓｅＰｒｅｄｉｃｔｉｖｅＭＦＦｉｅｌｄ」属性に割り当てる。これらは、後にＸＭＴ−Ａ文書から導出された値によって置換される、一時的な値にすぎない。動作３１０６が完了した後に、制御フローは、動作３１１０に移る。
【０１３８】
７．１．３  ｍｐ４ｆｉｌｅ文書の新しい「ｍｏｏｖ」要素の作成
動作３１１０で、ｍｐ４ｆｉｌｅ文書の新しい「ｍｏｏｖ」要素を作成する。標準ＸＭＬ手段を使用して、空の「ｍｏｏｖ」要素２３２０を作成し、ｍｐ４ｆｉｌｅ文書２３００のトップ・レベル要素に挿入する。「１」の値を、量「ｎｅｘｔＴｒａｃｋＩＤ」および量「ｎｅｘｔＥｓＩｄ」に割り当てる。標準ＸＭＬ手段を使用して、値にこの「ｍｏｏｖ」要素の、次の属性を割り当てる。
【０１３９】
ａ．「ｃｒｅａｔｉｏｎＴｉｍｅ」および「ｍｏｄｉｆｉｃａｔｉｏｎＴｉｍｅ」：これらの属性の値は、符号なし整数として表された、１９０４年１月１日からの経過秒数を指定しなければならない。これらの値は、現在のクロック時刻によって決定されることが好ましい。現在クロック時刻が入手可能でない場合には、これらに任意の値をセットすることができる。ここで指定される実際の値は、単に情報を与えるものであり、結果のＭＰＥＧ−４バイナリ・ファイルの処理に影響しない。
【０１４０】
ｂ．「ｔｉｍｅＳｃａｌｅ」：この属性は、ＭＰＥＧ−４バイナリ・ファイル内で時間を測定するのに使用される、毎秒のクロック・ティック数を指定する。１０００の値は、時間がミリ秒単位で指定されることを暗示する。
【０１４１】
ｃ．「ｄｕｒａｔｉｏｎ」：値０が、この属性に割り当てられる。この値は、後で更新される。
【０１４２】
ｄ．「ｎｅｘｔＴｒａｃｋＩＤ」：量「ｎｅｘｔＴｒａｃｋＩＤ」の値が、この属性に割り当てられる。後に、各新しい「ｔｒａｋ」要素が文書に追加され、量「ｎｅｘｔＴｒａｃｋＩＤ」の値が増やされる時に、この属性の値が更新される。
【０１４３】
この時点で、任意選択の「ｕｄｔａ」（ｕｓｅｒ  ｄａｔａ）要素２３４０を追加することができる。これは、後続の主要なステップ２２７０で作成されるＭＰＥＧ−４バイナリ・ファイルに著作権メッセージを挿入するのに使用することができる。作成者識別などの他の情報も、この時に指定することができる。動作３１１０が完了した後に、制御フローは動作３１１６に移る。
【０１４４】
７．１．４  ＸＭＴ−Ａ「Ｈｅａｄｅｒ」要素の処理
動作３１１６では、ＸＭＴ−Ａ  Ｈｅａｄｅｒを処理する。このステップでは、「ｍｏｏｖ」要素２３２０内の「ｍｐ４ｆｉｏｄｓ」要素２３３０および２３６０を作成する。「ｍｄａｔ」要素２３１０および「ｔｒａｋ」要素２３５０が、ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ（ｓｄｓｍ）に関して作成される。オブジェクトが存在する場合に、もう１つの「ｍｄａｔ」要素２３１０およびもう１つの「ｔｒａｋ」要素２３５０が、ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ（ｏｄｓｍ）について作成される。
【０１４５】
標準ＸＭＬ手段を使用して、ＸＭＴ−Ａ文書１００内の「Ｈｅａｄｅｒ」要素１１０を入手することができる。次に、図７９に示されたステップを使用して、ＸＭＴ−Ａ「Ｈｅａｄｅｒ」要素を処理する。ＸＭＴ−Ａ「Ｈｅａｄｅｒ」処理サブ動作は、ＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ処理動作３１５０から始まる。
【０１４６】
動作３１５０では、標準ＸＭＬ手段を使用して、ＸＭＴ−Ａ「Ｈｅａｄｅｒ」要素１１０に従属するＸＭＴ−Ａ「ＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素１３０を入手することができる。「ＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素１３０は、「ＩＯＤＩＤ：ｎｎｎ」という形の値を有する「ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」という名前の属性を有することができ、ここで、サブストリング「ｎｎｎ」は、正の整数を表す。その代わりに、この要素が、値「ｎｎｎ」を有する「ｂｉｎａｒｙＩＤ」という名前の属性を有する場合がある。どちらの場合でも、「ｎｎｎ」によって表される値を、量「ＯＤＩＤ」に割り当てる。この属性のどちらもが存在しない場合には、値「１」を、量「ＯＤＩＤ」に割り当てる。動作３１５０が完了した後に、制御フローは、動作３１６０に移る。
【０１４７】
動作３１６０で、新しい「ｍｐ４ｆｉｏｄｓ」要素２３３０および２３６０を作成し、ｍｐ４ｆｉｌｅ文書２３００の「ｍｏｏｖ」要素２３２０に挿入する。ＸＭＴ−Ａ文書１００の「ＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素１３０から導出された量「ＯＤＩＤ」の値を、「ｍｐ４ｆｉｏｄｓ」要素２３３０および２３６０の「ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」属性２３７０に割り当てる。動作３１６０が完了した後に、制御フローは、動作３１７０に移る。
【０１４８】
動作３１７０では、標準ＸＭＬ手段を使用して、「ＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素１３０に従属する「Ｐｒｏｆｉｌｅｓ」要素１５０を入手する。次に、「ｍｐ４ｆｉｏｄｓ」要素２３６０の「ｉｎｃｌｕｄｅＩｎｌｉｎｅＰｒｏｆｉｌｅｓ」、「ｓｃｅｎｅＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、「ＯＤＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、「ａｕｄｉｏＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」、「ｖｉｓｕａｌＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」および「ｇｒａｐｈｉｃｓＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ」属性の値を、「Ｐｒｏｆｉｌｅｓ」要素１５０の同一の名前の属性の値に基づいてセットする。
【０１４９】
「ｍｐ４ｆｉｏｄｓ」要素２３６０の「ｉｎｃｌｕｄｅＩｎｌｉｎｅＰｒｏｆｉｌｅｓ」属性の値は、「真」または「偽」でなければならない。「Ｐｒｏｆｉｌｅｓ」要素１５０の「ｉｎｃｌｕｄｅＩｎｌｉｎｅＰｒｏｆｉｌｅｓ」属性の値が、「真」または「偽」である場合に、同一の値を、「ｍｐ４ｆｉｏｄｓ」要素２３６０の「ｉｎｃｌｕｄｅＩｎｌｉｎｅＰｒｏｆｉｌｅｓ」属性に割り当てる。そうでない場合には、値「偽」を、「ｍｐ４ｆｉｏｄｓ」要素２３６０の「ｉｎｃｌｕｄｅＩｎｌｉｎｅＰｒｏｆｉｌｅｓ」属性に割り当てる。
【０１５０】
「ｍｐ４ｆｉｏｄｓ」要素２３６０の５つのプロファイルおよびレベル表示属性の値は、−２５５から＋２５５までの数値を表さなければならない。「Ｐｒｏｆｉｌｅｓ」要素１５０の対応する属性は、同等の値を有する場合があり、あるいは、英数字ストリングによって指定される値を有する場合がある。「Ｐｒｏｆｉｌｅｓ」要素１５０のプロファイルおよびレベル表示属性のいずれかが、ストリング値「ｎｏｎｅ」を有する場合に、「ｍｐ４ｆｉｏｄｓ」要素２３６０の同一の名前を有する属性に、数値「−１」または「２５５」を割り当てる。「Ｐｒｏｆｉｌｅｓ」要素１５０のプロファイルおよびレベル表示属性のいずれかが、ストリング値「ｕｎｓｐｅｃｉｆｉｅｄ」を有する場合に、「ｍｐ４ｆｉｏｄｓ」要素２３６０の同一の名前を有する属性に、数値「−２」または「２５４」を割り当てる。「Ｐｒｏｆｉｌｅｓ」要素１５０のこれらの属性の他の英数字値が、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義され、これに含まれるテーブル内の数値に関係する。Ｐｒｏｆｉｌｅｓ要素１５０のプロファイルおよびレベル表示属性のいずれかの値が、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義された英数字プロファイルおよびレベル・ストリングの１つと一致する場合に、これらのテーブルで指定される対応する数値を、「ｍｐ４ｆｉｏｄｓ」要素２３６０の対応する属性に割り当てる。「Ｐｒｏｆｉｌｅｓ」要素１５０のプロファイルおよびレベル表示属性のいずれかの値が、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様に含まれるプロファイル値およびレベル値のテーブルのどの項目にも一致しない英数字ストリングからなる場合には、「ｍｐ４ｆｉｏｄｓ」要素２３６０の対応する属性に、値「−２」または「２５４」を割り当てる。動作３１７０が完了した後に、制御フローは、動作３１７６に移る。
【０１５１】
動作３１７６で、標準ＸＭＬ手段を使用して、「ＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素１３０に従属する「Ｄｅｓｃｒ」要素１６０を入手する。手順「Ｄｅｓｃｒ要素の処理」３１７６は、このＤｅｓｃｒ要素１６０に従属するｅｓＤｅｓｃｒ要素１７０を識別するために実行される。手順「ｅｓＤｅｓｃｒ要素の処理」３１８０は、このｅｓＤｅｓｃｒ要素に従属するＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素１８０および１９０それぞれを識別するために実行される。手順「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒの処理」３１８６および３１９０は、ｅｓＤｅｓｃｒ要素１７０に従属するＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素ごとに実行される。
【０１５２】
図８０からわかるように、手順「Ｄｅｓｃｒ要素の処理」３１７６は、インデックス「ｉ」に値「０」を割り当てることによって開始される３２００。この手順のインデックス「ｉ」の値を、量「ｎｕｍＤｅｓｃｒＣｈｉｌｄｒｅｎ」の値と比較する３２１０。量ｎｕｍＤｅｓｃｒＣｈｉｌｄｒｅｎの値は、Ｄｅｓｃｒ要素１６０によって所有される従属要素の個数を示す。インデックス「ｉ」の値が、ｎｕｍＤｅｓｃｒＣｈｉｌｄｒｅｎの値と等しい場合に、手順「Ｄｅｓｃｒ要素の処理」３１７６が完了し３２６０、手順「ＸＭＴ−Ａヘッダの処理」３１１６が完了し、手順「ＸＭＴ−Ａ文書の処理」は、下で説明するパス１  ＸＭＴ−Ａ  Ｂｏｄｙ処理動作３１２０に進む。
【０１５３】
インデックス「ｉ」の値が、ｎｕｍＤｅｓｃｒＣｈｉｌｄｒｅｎの値と比といくない場合に、標準ＸＭＬ手段を使用して、Ｄｅｓｃｒ要素１６０に従属するｉ番目の要素を入手し、結果の従属要素を「ＤｅｓｃｒＣｈｉｌｄ」として識別する３２２０。ＤｅｓｃｒＣｈｉｌｄの要素名が「ｅｓＤｅｓｃｒ」である場合に、手順「ｅｓＤｅｓｃｒ要素の処理」を実行する３２４０。その後、インデックス「ｉ」の値を１つ増分し３２５０、この「ｉ」の値のｎｕｍＤｅｓｃｒＣｈｉｌｄｒｅｎとの比較３２１０を繰り返す。各Ｄｅｓｃｒ要素が、単一の従属ｅｓＤｅｓｃｒ要素を作ると期待される。
【０１５４】
図８１からわかるように、手順「ｅｓＤｅｓｃｒ要素の処理」３１８０は、インデックス「ｉ」に値「０」を割り当てることによって開始される３３００。このインデックス「ｉ」は、手順「Ｄｅｓｃｒ要素の処理」３１７６内で定義される類似する量と別個である。この手順のインデックス「ｉ」の値を、量「ｎｕｍＥｓＤｅｓｃｒＣｈｉｌｄｒｅｎ」と比較する３３１０。量ｎｕｍＥｓＤｅｓｃｒＣｈｉｌｄｒｅｎの値は、ｅｓＤｅｓｃｒ要素１７０が所有する従属要素の個数を示す。インデックス「ｉ」の値が、ｎｕｍＥｓＤｅｓｃｒＣｈｉｌｄｒｅｎの値と等しい場合には、手順「ｅｓＤｅｓｃｒ要素の処理」３１８０が完了し３３６０、手順「Ｄｅｓｃｒ要素の処理」３１７６は、その手順のインデックス「ｉ」の値を増分すること３２５０によって継続される。
【０１５５】
インデックス「ｉ」の値が、ｎｕｍＤｅｓｃｒＣｈｉｌｄｒｅｎの値と等しくない場合には、標準ＸＭＬ手段を使用して、ｅｓＤｅｓｃｒ要素１７０に従属するｉ番目の要素を入手し、結果の従属要素を「ｅｓＤｅｓｃｒＣｈｉｌｄ」として識別する３３２０。ｅｓＤｅｓｃｒＣｈｉｌｄの要素名が、「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」である場合には、手順「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒの処理」を実行する３３４０。手順「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒの処理」は、図８２に示されており、この手順の動作は、下の「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒの処理」で説明する。
【０１５６】
その後、インデックス「ｉ」の値を１つ増分し３３５０、「ｉ」の値と量ｎｕｍＥｓＤｅｓｃｒＣｈｉｌｄｒｅｎの比較３３１０を繰り返す。
【０１５７】
ＩｎｉｔｉａｌＯｂｊｅｃｔｏｒＤｅｓｃｒｉｐｔｏｒ１３０に従属するＤｅｓｃｒ要素１６０に従属するｅｓＤｅｓｃｒ要素１７０のそれぞれが、１つまたは２つのＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素１８０および１９０（ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ（ｓｄｓｍ）に関するＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素１８０および多分ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ（ｏｄｓｍ）に関するＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素１９０）を作ると期待される。ｏｄｓｍのＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素１９０は、ＸＭＴ−Ａ文書１００にオーディオ・オブジェクト、ビジュアル・オブジェクト、または他のオブジェクトが含まれる場合に、必ず期待される。各ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素１８０および１９０が、手順「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒの処理」を使用して処理される。この手順は、下で説明する。
【０１５８】
７．１．５  ＸＭＴ−Ａ  Ｂｏｄｙ要素の処理（パス１）
動作３１２０で、ＸＭＴ−Ａ文書１００のＢｏｄｙ要素１２０で定義された、すべてのメディア・オブジェクト、再利用可能ＢＩＦＳノード、および再利用可能Ｒｏｕｔｅを列挙するテーブルの組を作る。これらのテーブルは、メディア・オブジェクトの個数、ＢＩＦＳノードの個数、およびＲｏｕｔｅの個数を判定するのに使用される。これらのテーブルは、メディア・オブジェクトのあるプロパティを判定し、メディア・オブジェクト、ＢＩＦＳノード、およびＲｏｕｔｅへの参照を解決するのにも使用される。
【０１５９】
各メディア・オブジェクトは、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２４０によって定義される。各ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２４０は、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅコマンド要素２２０に含まれ、このコマンド要素は、ＸＭＴ−Ａ文書１００のＢｏｄｙ要素１２０内の「ｐａｒ」要素１４０および２００に含まれる。メディア・オブジェクトのプロパティに、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ（ＯＤＩＤ）１３０、オブジェクト開始時刻、オブジェクト終了時刻、およびオブジェクト持続時間が含まれる。ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤは、「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素２４０の「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」属性として指定される英数字ストリングである。
【０１６０】
オブジェクト開始時刻は、それを囲む「ｐａｒ」要素２００の「ｂｅｇｉｎ」属性によって決定される。
【０１６１】
オブジェクト終了時刻は、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅコマンド要素２５０を囲む「ｐａｒ」要素２００の「ｂｅｇｉｎ」属性によって決定される。ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅコマンド要素２５０で指定されるＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ（ＯＤＩＤ）属性の値は、対応するＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２４０で指定されるＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ属性の値と一致しなければならない。オブジェクト持続時間は、オブジェクト終了時刻とオブジェクト開始時刻の間の差である。
【０１６２】
ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤストリングならびに関連する開始時刻および終了時刻の値は、図８８に示されたＯｂｊｅｃｔテーブルに保管される。このテーブルは、５つの列、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ  ３９１０、ＯｄＩｄ  ３９２０、ｓｔａｒｔＴｉｍｅ  ３９３０、ｓｔｏｐＴｉｍｅ  ３９４０、およびＥｓＩｄ  ３９５０を有する。各列の個々の項目は、このテーブルの各行を識別する「ｐｏｓｉｔｉｏｎ」値３９００によって示される。
【０１６３】
再利用可能なＢＩＦＳノードは、「ＤＥＦ」属性の値を指定するＸＭＴ−Ａ  ＢＩＦＳノード要素によって定義される。この属性の値は、英数字ストリングである。再利用可能ＢＩＦＳノードＤＥＦストリングの値は、図８９に示されたテーブルに保管される。このテーブルは、１つの列、ＮｏｄｅＳｔｒｉｎｇ  ３９６６を有する。この列の個々の項目は、このテーブルの各行を識別する「ｐｏｓｉｔｉｏｎ」値３９６０によって示される。
【０１６４】
再利用可能なＲｏｕｔｅは、「ＤＥＦ」属性の値を指定するＸＭＴ−Ａ  Ｒｏｕｔｅ要素によって定義される。この属性の値は、英数字ストリングである。再利用可能Ｒｏｕｔｅ  ＤＥＦストリングの値は、図９０に示されたテーブルに保管される。このテーブルは、１つの列、ＲｏｕｔｅＳｔｒｉｎｇ  ３９７６を有する。この列の個々の項目は、このテーブルの各行を識別する「ｐｏｓｉｔｉｏｎ」値３９７０によって示される。
【０１６５】
第４のテーブルに、ＲｅｐｌａｃｅＳｃｅｎｅコマンドの時刻値が記録される。このテーブルは、１つの列、ＲｅｐｌａｃｅＳｃｅｎｅＴｉｍｅ  ３９８６を有する。この列の個々の項目は、このテーブルの各行を識別する「ｐｏｓｉｔｉｏｎ」値３９８０によって示される。
【０１６６】
これらのテーブルは、図９３に示されたＸＭＴ−Ａ「Ｂｏｄｙ」要素内の従属要素をトラバースすることによって構築される。この手順は、値「０」をインデックス「ｉ」に割り当てることによって、動作４０００で開始される。動作４０００が完了した後に、制御は、動作４０１０に移る。
【０１６７】
動作４０１０では、インデックス「ｉ」の値を、量「ｎｕｍＢｏｄｙＣｈｉｌｄｒｅｎ」の値と比較する。量ｎｕｍＢｏｄｙＣｈｉｌｄｒｅｎの値は、ＸＭＴ−Ａ  Ｂｏｄｙ要素１２０によって所有される従属要素の個数を示す。
【０１６８】
動作４０１０が完了した後に、インデックス「ｉ」の値がｎｕｍＢｏｄｙＣｈｉｌｄｒｅｎの値と等しい場合に、この手順が完了し４０６０、処理は、ｏｄｓｍのｅｄｉｔ  ｌｉｓｔ作成に関して継続される。
【０１６９】
インデックス「ｉ」の値がｎｕｍＢｏｄｙＣｈｉｌｄｒｅｎの値と等しくない場合には、制御は、動作４０２０に移り、ここで、標準ＸＭＬ手段を使用して、Ｂｏｄｙ要素１２０に従属するｉ番目の要素を入手し、結果の従属要素を「ｂｏｄｙＣｈｉｌｄ」として識別する。要素ｂｏｄｙＣｈｉｌｄの要素名は、ストリング量「ｃｈｉｌｄＮａｍｅ」によって識別される。
【０１７０】
動作４０２０が完了した後に、制御は、動作４０３０に移り、ここで、ストリング量ｃｈｉｌｄＮａｍｅの値をストリング「ｐａｒ」と比較する。ｃｈｉｌｄＮａｍｅの値が「ｐａｒ」である場合に、処理動作４０４０で、値「０」を量「ｐａｒＴｉｍｅ」に割り当て、親要素として現在のｂｏｄｙＣｈｉｌｄ要素を使用して、手順「ＸＭＴ−Ａ  ｐａｒ要素の処理（パス１）」４０４０を実行する。手順「ＸＭＴ−Ａ  ｐａｒ要素の処理（パス１）」は、下で説明する。
【０１７１】
動作４０４０が完了した後に、制御は、動作４０５０に移り、ここで、インデックス「ｉ」の値を後に１つ増分し、「ｉ」の値のｎｕｍＢｏｄｙＣｈｉｌｄｒｅｎとの比較４０１０を繰り返す。
【０１７２】
７．１．５．１  ＸＭＴ−Ａ  ｐａｒ要素の処理（パス１）
ＸＭＴ−Ａ「ｐａｒ」要素１４０および２００は、ＸＭＴ−Ａ  Ｂｏｄｙ要素１２０または別のＸＭＴ−Ａ「ｐａｒ」要素２００に従属する可能性がある。各ＸＭＴ−Ａ「ｐａｒ」要素２００は、図９４に示されているように処理される。
【０１７３】
動作４１００で、現在の「ｐａｒ」要素２００の「ｂｅｇｉｎ」属性の値を、量「ｐａｒＴｉｍｅ」４０４０および４１３６の現在の値に加算し、その結果を量「ｔｉｍｅ」に割り当てる。
【０１７４】
動作４１０６で、値「０」をインデックス「ｉ」に割り当てる。このインデックスは、他の手順で使用される類似するインデックス値と別個である。
【０１７５】
動作４１１０で、インデックス「ｉ」の値を、量「ｎｕｍＰａｒＣｈｉｌｄｒｅｎ」の値と比較する。量ｎｕｍＰａｒＣｈｉｌｄｒｅｎの値は、現在の「親」要素によって所有される従属要素の個数を示す。
【０１７６】
インデックス「ｉ」の値がｎｕｍＰａｒＣｈｉｌｄｒｅｎの値と等しい場合に、動作４１１６で、この手順が完了し、処理は、この「親」要素がＢｏｄｙ要素１２０に従属する場合には動作４０５０、またはこの「親」要素が別の「ｐａｒ」要素２００に従属する場合には動作４１２６で継続される。
【０１７７】
動作４１２０で、インデックス「ｉ」の値がｎｕｍＰａｒＣｈｉｌｄｒｅｎの値と等しくない場合に、標準ＸＭＬ手段を使用して、現在の親要素に従属するｉ番目の要素を入手し、その結果の従属要素を、「ｐａｒＣｈｉｌｄ」要素として識別する。ｐａｒＣｈｉｌｄ要素の要素名は、ストリング量「ｃｈｉｌｄＮａｍｅ」によって識別される。
【０１７８】
動作４１３０で、ストリング量ｃｈｉｌｄＮａｍｅの値をストリング「ｐａｒ」と比較する。
【０１７９】
ｃｈｉｌｄＮａｍｅの値が「ｐａｒ」である場合に、動作４１３６で、量「ｔｉｍｅ」の値を量「ｐａｒＴｉｍｅ」に割り当て、現在のｐａｒＣｈｉｌｄ要素を「親」要素として使用して、手順「ＸＭＴ−Ａ  ｐａｒ要素の処理（パス１）」を再帰的に実行する。この手順が完了した後に、処理は、下で説明するステップ４１２６で継続される。
【０１８０】
動作４１４０で、ストリング量ｃｈｉｌｄＮａｍｅの値を、ストリング「Ｄｅｌｅｔｅ」と比較する。ｃｈｉｌｄＮａｍｅの値が「Ｄｅｌｅｔｅ」である場合には、何も行われず、処理は動作４１２６で継続される。
【０１８１】
動作４１５０では、ストリング量ｃｈｉｌｄＮａｍｅの値を、ストリング「Ｉｎｓｅｒｔ」と比較する。
【０１８２】
動作４１６０では、ストリング量ｃｈｉｌｄＮａｍｅの値を、ストリング「Ｒｅｐｌａｃｅ」と比較する。
【０１８３】
ｃｈｉｌｄＮａｍｅの値が「Ｉｎｓｅｒｔ」または「Ｒｅｐｌａｃｅ」である場合に、動作４１６６で、現在のｐａｒＣｈｉｌｄ要素を「親」要素として使用して、手順「ＸＭＴ−Ａコマンド要素の処理（パス１）」を実行する。この手順は、下で説明する。この手順が完了した後に、処理は、動作４１２６で継続される。
【０１８４】
動作４１７０で、ストリング量ｃｈｉｌｄＮａｍｅの値を、ストリング「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅ」と比較する。
【０１８５】
ｃｈｉｌｄＮａｍｅの値が「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅ」である場合に、動作４１７６で、現在のｐａｒＣｈｉｌｄ要素を「親」要素として使用して、手順「ＯＤＵｐｄａｔｅ  ｃｍｎｄ−１の処理」を実行する。この手順は、下で説明する。この手順が完了した後に、処理は、動作４１２６で継続される。
【０１８６】
動作４１８０で、ストリング量ｃｈｉｌｄＮａｍｅの値を、ストリング「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅ」と比較する。
【０１８７】
ｃｈｉｌｄＮａｍｅの値が「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅ」である場合に、動作４１８６で、現在のｐａｒＣｈｉｌｄ要素を「親」要素として使用して、手順「ＯＤＲｅｍｏｖｅ  ｃｍｎｄの処理」を実行する。この手順は、下で説明する。
【０１８８】
動作４１２６で、インデックス「ｉ」の値を、その後、「１」だけ増分し、動作４１１０での「ｉ」の値のｎｕｍＰａｒＣｈｉｌｄｒｅｎの値との比較を繰り返す。
【０１８９】
７．１．５．２  ＸＭＴ−Ａコマンド要素の処理（Ｐａｓｓ１）
手順「ＸＭＴ−Ａコマンド要素の処理（パス１）」は、手順「ＸＭＴ−Ａ  ｐａｒ要素の処理（パス１）」の一部４１６６または再帰的に手順「ＢＩＦＳコマンド要素の処理（パス１）」の一部４２７０のいずれかとして実行することができる。図９５に示されているように、この手順は、値「０」をインデックス「ｉ」（他の手順で使用される類似するインデックス値と別個）に割り当てることによって、動作４２００で開始される。
【０１９０】
動作４２０６で、インデックス「ｉ」の値を、量「ｎｕｍＣｍｄＣｈｉｌｄｒｅｎ」の値と比較する。量ｎｕｍＣｍｄＣｈｉｌｄｒｅｎの値は、現在の「親」要素２００によって所有される従属要素の個数を示す。
【０１９１】
インデックス「ｉ」の値がｎｕｍＣｍｄＣｈｉｌｄｒｅｎの値と等しい場合に、動作４２９０で、この手順が完了し、処理は、「親」要素がＢｏｄｙ要素１２０に従属する場合には動作４０５０、「親」要素が別の「ｐａｒ」要素２００に従属する場合には動作４１２６で継続される。
【０１９２】
インデックス「ｉ」の値がｎｕｍＣｍｄＣｈｉｌｄｒｅｎの値と等しくない場合に、動作４２１０で、標準ＸＭＬ手段を使用して、現在の親要素に従属するｉ番目の要素を入手し、結果の従属要素を「ｃｍｄＣｈｉｌｄ」要素として識別する。ｃｍｄＣｈｉｌｄ要素の要素名は、ストリング量「ｃｈｉｌｄＮａｍｅ」によって識別される。
【０１９３】
動作４２１６で、ストリング量ｃｈｉｌｄＮａｍｅの値を、ストリング「ＲＯＵＴＥ」と比較する。
【０１９４】
ｃｈｉｌｄＮａｍｅの値が「ＲＯＵＴＥ」である場合に、動作４２２０で、標準ＸＭＬ手段を使用して、ｃｍｄＣｈｉｌｄ要素の「ＤＥＦ」属性の値を入手する。「ＤＥＦ」属性が存在しない場合には、何も行わず、処理は動作４２８０で継続される。
【０１９５】
ｃｍｄＣｈｉｌｄ要素の「ＤＥＦ」属性の値が指定されている場合に、動作４２２６で、「ＤＥＦ」属性の値をストリング量「ｉｄＳｔｒｉｎｇ」に割り当てる。次に、ｉｄＳｔｒｉｎｇの値を、ＲｏｕｔｅＩＤテーブル３９７６の現在の項目のそれぞれと比較する。ｉｄＳｔｒｉｎｇの値が、このテーブルの現在の項目のいずれかと一致する場合に、処理は動作４２８０で継続される。
【０１９６】
ｉｄＳｔｒｉｎｇの値がＲｏｕｔｅＩＤテーブル３９７６の現在の項目のどれとも一致しない場合に、動作４２３０で、このテーブルに新しい項目を作成し、ｉｄＳｔｒｉｎｇの現在の値をその新しい項目に割り当てる。その後、処理は動作４２８０で継続される。
【０１９７】
動作４２４０で、ストリング量ｃｈｉｌｄＮａｍｅの値を、ストリング「Ｓｃｅｎｅ」と比較する。
【０１９８】
ｃｈｉｌｄＮａｍｅの値が「Ｓｃｅｎｅ」である場合に、動作４２４６で、ＲｅｐｌａｃｅＳｃｅｎｅｔｉｍｅテーブル３９８６に新しい項目を作成し、量「ｔｉｍｅ」の現在の値を、その新しい項目に割り当てる。その後、処理は動作４２７０で継続される。
【０１９９】
動作４２５０で、標準ＸＭＬ手段を使用して、ｃｍｄＣｈｉｌｄ要素の「ＤＥＦ」属性の値を入手する。「ＤＥＦ」属性が存在しない場合には、処理は動作４２７０で継続される。
【０２００】
ｃｍｄＣｈｉｌｄ要素の「ＤＥＦ」属性の値が指定されている場合に、動作４２５６で、「ＤＥＦ」属性の値を、ストリング量「ｉｄＳｔｒｉｎｇ」に割り当てる。次に、ｉｄＳｔｒｉｎｇの値を、ＮｏｄｅＩＤテーブル３９６６の現在の項目のそれぞれと比較する。ｉｄＳｔｒｉｎｇの値が、このテーブルの現在の項目のいずれかと一致する場合に、処理は動作４２７０で継続される。
【０２０１】
動作４２６０で、ｉｄＳｔｒｉｎｇの値が、ＮｏｄｅＩＤテーブル３９６６の現在の項目のどれとも一致しない場合に、このテーブルに新しい項目を作成し、ｉｄＳｔｒｉｎｇの現在の値を、その新しい項目に割り当てる。
【０２０２】
動作４２７０で、現在のｃｍｄＣｈｉｌｄ要素を親要素として使用して、現在の手順（ＢＩＦＳコマンド要素の処理（パス１））を再帰的に実行する。
【０２０３】
動作４２８０で、インデックス「ｉ」の値を、その後、「１」だけ増分し、動作４２０６での「ｉ」値とｎｕｍＣｍｄＣｈｉｌｄｒｅｎの値との比較を繰り返す。
【０２０４】
７．１．５．３  「ＯＤＵｐｄａｔｅ  ｃｏｍｍａｎｄ−１の処理」手順
標準ＸＭＬ手段を使用して、（親）ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅコマンド要素２２０に従属する「ＯＤ」要素２３０を入手する。次に、標準ＸＭＬ手段を使用して、その「ＯＤ」要素２３０に従属するＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２４０を入手する。ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２４０の「ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」属性（図４では「ＯＤＩＤ」と省略した）の値を、オブジェクト・テーブル（図８８）内のＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ列３９１０の項目と比較する。一致が見つかる場合に、量「ｔｉｍｅ」の現在値を、ｓｔａｒｔＴｉｍｅ列３９３０の対応する項目に割り当てる。
【０２０５】
「ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」属性の値が、オブジェクト・テーブルのＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ列３９１０の現在のどの項目とも一致しない場合に、オブジェクト・テーブルに新しい項目を追加し、「ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」属性の値を、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ列３９１０の新しい項目に割り当て、量「ｔｉｍｅ」の現在値を、ｓｔａｒｔＴｉｍｅ列３９３０の対応する項目に置き、値「−１．０」を、ｓｔｏｐＴｉｍｅ列３９４０の対応する項目に置く。オブジェクト・テーブルの項目数を、ＯｄＩｄ列３９２０の対応する項目に割り当てる。手順「ＸＭＴ−Ａ  Ｂｏｄｙ要素の処理（パス２）」の一部として、ＥｓＩｄ列３９５０の対応する項目に、値が割り当てられる。
【０２０６】
７．１．５．４  「ＯＤＲｅｍｏｖｅ  ｃｍｎｄの処理」手順
（親）ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅコマンド要素２５０の「ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」属性（図４では「ＯＤＩＤ」と省略した）の値を、オブジェクト・テーブルのＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ列３９１０の項目と比較する。一致が見つかる場合に、量「ｔｉｍｅ」の現在値を、ｓｔｏｐＴｉｍｅ列３９４０の対応する項目に割り当てる。
【０２０７】
「ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」属性の値が、オブジェクト・テーブルのＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ列３９１０の現在のどの項目とも一致しない場合に、新しい項目をオブジェクト・テーブルに追加し、「ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」属性の値を、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ列３９１０の新しい項目に割り当て、量「ｔｉｍｅ」の現在値を、ｓｔｏｐＴｉｍｅ列３９４０の対応する項目に置き、値「−１．０」を、ｓｔａｒｔＴｉｍｅ列３９３０の対応する項目に置く。オブジェクト・テーブルの項目数を、ＯｄＩｄ列３９２０の対応する項目に割り当てる。手順「ＸＭＴ−Ａ  Ｂｏｄｙ要素の処理（パス２）」の一部として、ＥｓＩｄ列３９５０の対応する項目に、値が割り当てられる。
【０２０８】
７．１．６  ｏｄｓｍのｅｄｉｔ  ｌｉｓｔ作成
ＸＭＴ−Ａ  Ｂｏｄｙ要素に対する第１パスの後に、オブジェクト・テーブル（図８８）のｓｔａｒｔＴｉｍｅ項目３９３０の値を比較して、最小のｓｔａｒｔＴｉｍｅ項目（ｓｔａｒｔＴｉｍｅＭｉｎ）を見つける。ｓｔｏｐＴｉｍｅ項目３９４０の対応する値を比較して、最大のｓｔｏｐＴｉｍｅ項目（ｓｔｏｐＴｉｍｅＭａｘ）を判定する。ｓｔｏｐＴｉｍｅＭａｘの値とｓｔａｒｔＴｉｍｅＭｉｎの値の間の差を、量「ｄｕｒａｔｉｏｎ」に割り当てる。
【０２０９】
最小のｓｔａｒｔＴｉｍｅ値が０を超える場合に、ｅｄｉｔ  ｌｉｓｔ（「ｅｄｔｓ」）要素２６４４を、ｏｄｓｍ（ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ）に関連するｔｒａｋ要素２６００に挿入する。これは、次のように達成される。
【０２１０】
１．標準ＸＭＬ手段を使用して、ｍｐ４−ｆｉｌｅ文書２３００内のｍｏｏｖ要素２３２０を入手する。
【０２１１】
２．標準ＸＭＬ手段を使用して、ｍｏｏｖ要素２３２０内の各ｔｒａｋ要素２３５０を入手する。
【０２１２】
３．各ｔｒａｋ要素２３５０のｔｒａｃｋＩＤ属性の値を、量ｔｒａｃｋＩｄＦｏｒＯｄｓｍの値と比較する。この値は、ｏｄｓｍのｔｒａｋ要素２３５０が作成された時に割り当てられたものである。
【０２１３】
４．特定のｔｒａｋ要素２６００のｔｒａｃｋＩＤ属性の値が、ｔｒａｃｋＩｄＦｏｒＯｄｓｍの値と一致する場合に、下記のステップを実行する。
【０２１４】
５．標準ＸＭＬ手段を使用して、新しいｅｄｔｓ要素２６４４を作成し、これを選択されたｔｒａｋ要素２６００に挿入する。
【０２１５】
６．標準ＸＭＬ手段を使用して、新しいｅｌｓｔ要素（２６４８）を作成し、これを新しいｅｄｔｓ要素２６４４に挿入する。
【０２１６】
７．標準ＸＭＬ手段を使用して、新しいｓｅｇｍｅｎｔ要素を作成し、これを新しいｅｌｓｔ要素２６４８に挿入する。
【０２１７】
値「−１」を、この「ｓｅｇｍｅｎｔ」要素の「ｓｔａｒｔＴｉｍｅ」属性に割り当てる。値「１．０」を、この「ｓｅｇｍｅｎｔ」要素の「ｒａｔｅ」属性に割り当てる。「ｍｏｏｖ」要素２３２０の「ｔｉｍｅＳｃａｌｅ」属性とｓｔａｒｔＴｉｍｅＭｉｎの値の積を、この新しい「ｓｅｇｍｅｎｔ」要素の「ｄｕｒａｔｉｏｎ」属性に割り当てる。
【０２１８】
８．標準ＸＭＬ手段を使用して、第２の新しいｓｅｇｍｅｎｔ要素を作成し、これを新しいｅｌｓｔ要素２６４８に挿入する。
【０２１９】
値「０」を、第２「ｓｅｇｍｅｎｔ」要素の「ｓｔａｒｔＴｉｍｅ」属性に割り当てる。値「１．０」を、第２「ｓｅｇｍｅｎｔ」要素の「ｒａｔｅ」属性に割り当てる。量「ｄｕｒａｔｉｏｎ」の値と「ｍｏｏｖ」要素２３２０の「ｔｉｍｅＳｃａｌｅ」属性の値の積を、第２「ｓｅｇｍｅｎｔ」要素の「ｄｕｒａｔｉｏｎ」属性に割り当てる。
【０２２０】
７．１．７  ＸＭＴ−Ａ  Ｂｏｄｙ要素の処理（パス２）
このステップでは、図９３に示されているように、ＸＭＴ−Ａ「Ｂｏｄｙ」要素の従属要素をもう一度トラバースする。このトラバースで見つかった各従属「ｐａｒ」要素を、図９６に示された手順「ＸＭＴ−Ａ  ｐａｒ要素の処理（パス２）」を使用して処理する４０４０。この手順が完了した後に、処理は、ステップ８「ｍｐ４ｂｉｆｓ文書へのコマンド・フレームの挿入」で継続される。
【０２２１】
７．１．７．１  ＸＭＴ−Ａ  ｐａｒ要素の処理（パス２）
動作４３００で、現在の「親」要素２００の「ｂｅｇｉｎ」属性の値を、量「ｐａｒＴｉｍｅ」４０４０の現在値に加算し、その結果を量「ｔｉｍｅ」に割り当てる。
【０２２２】
動作４３０６で、値「０」をインデックス「ｉ」に割り当てる。このインデックスは、他の手順で使用される類似するインデックス値と別個である。
【０２２３】
動作４３１０で、インデックス「ｉ」の値を、量「ｎｕｍＰａｒＣｈｉｌｄｒｅｎ」の値と比較する。量ｎｕｍＰａｒＣｈｉｌｄｒｅｎの値は、現在の「親」要素によって所有される従属要素の個数を示す。
【０２２４】
インデックス「ｉ」の値がｎｕｍＰａｒＣｈｉｌｄｒｅｎの値と等しい場合に、動作４３１６で、この手順が完了し、処理は、「親」要素がＢｏｄｙ要素１２０に従属する場合には動作４０５０、「親」要素が別の「ｐａｒ」要素２００に従属する場合には動作４３３６で継続される。
【０２２５】
インデックス「ｉ」の値がｎｕｍＰａｒＣｈｉｌｄｒｅｎの値と等しくない場合に、動作４３２０で、標準ＸＭＬ手段を使用して、現在の親要素に従属するｉ番目の要素を入手し、結果の従属要素を「ｐａｒＣｈｉｌｄ」要素として識別する。ｐａｒＣｈｉｌｄ要素の要素名は、ストリング量「ｃｈｉｌｄＮａｍｅ」によって識別される。
【０２２６】
動作４３３０で、標準ＸＭＬ手段を使用して、新しいｃｏｍｍａｎｄＦｒａｍｅ要素２８２０および２８３０を作成する。
【０２２７】
動作４３４０で、ストリング量ｃｈｉｌｄＮａｍｅの値を、ストリング「ｐａｒ」と比較する。
【０２２８】
ｃｈｉｌｄＮａｍｅの値が「ｐａｒ」である場合に、動作４３４６で、量「ｔｉｍｅ」の値を量「ｐａｒＴｉｍｅ」に割り当て、現在のｐａｒＣｈｉｌｄ要素を「親」要素として使用して、手順「ＸＭＴ−Ａ  ｐａｒ要素の処理（パス２）」を再帰的に実行する。この手順が完了した後に、処理は、下で説明するステップ４３３６で継続される。
【０２２９】
動作４３５０で、ストリング量ｃｈｉｌｄＮａｍｅの値をストリング「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅ」と比較する。
【０２３０】
ｃｈｉｌｄＮａｍｅの値が「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅ」である場合に、動作４３５６で、現在のｐａｒＣｈｉｌｄ要素を「親」要素として使用して、手順「ＯＤＵｐｄａｔｅ  ｃｏｍｍａｎｄ−２の処理」を実行する。この手順は、下で説明する。この手順が完了した時に、処理は４１２６で継続される。
【０２３１】
動作４３６０で、ストリング量ｃｈｉｌｄＮａｍｅの値を、ストリング「Ｉｎｓｅｒｔ」と比較する。
【０２３２】
ｃｈｉｌｄＮａｍｅの値が「Ｉｎｓｅｒｔ」である場合に、動作４３６６で、現在のｐａｒＣｈｉｌｄ要素を「親」要素として使用して、手順「Ｉｎｓｅｒｔコマンドの処理」を実行する。この手順は、下で説明する。この手順が完了した時に、処理は、下で説明するステップ４３３６で継続される
【０２３３】
動作４３７０で、ストリング量ｃｈｉｌｄＮａｍｅの値を、ストリング「Ｄｅｌｅｔｅ」と比較する。
【０２３４】
ｃｈｉｌｄＮａｍｅの値が「Ｄｅｌｅｔｅ」である場合に、動作４３７６で、現在のｐａｒＣｈｉｌｄ要素を「親」要素として使用して、手順「Ｄｅｌｅｔｅコマンドの処理」を実行する。この手順は、下で説明する。この手順が完了した時に、処理は、下で説明するステップ４３３６で継続される
【０２３５】
動作４３８０で、ストリング量ｃｈｉｌｄＮａｍｅの値を、ストリング「Ｒｅｐｌａｃｅ」と比較する。
【０２３６】
ｃｈｉｌｄＮａｍｅの値が「Ｒｅｐｌａｃｅ」である場合に、動作４３８６で、現在のｐａｒＣｈｉｌｄ要素を「親」要素として使用して、手順「Ｒｅｐｌａｃｅコマンドの処理」を実行する。この手順は、下で説明する。
【０２３７】
動作４３３６で、４３３０で作成された現在のｃｏｍｍａｎｄＦｒａｍｅ要素２８３０を、ｃｏｍｍａｎｄＦｒａｍｅ要素の一時的順序付きリストに挿入する。これは、各新しいｃｏｍｍａｎｄＦｒａｍｅ要素を、新しいｃｏｍｍａｎｄＦｒａｍｅ要素のｔｉｍｅ属性の値より大きい値を有するｔｉｍｅ属性を有する、このリストの最初のメンバの前の点でこのリストに挿入し、あるいは、このリストの現在のメンバのどれもが新しいｃｏｍｍａｎｄＦｒａｍｅ要素のｔｉｍｅ属性の値より大きい値を有するｔｉｍｅ属性を有しない場合に、このリストの末尾に挿入することによって達成される。動作４３３６を、動作４３２６の直前（図９６に示されているように）ではなく、動作４３３０の直後に実行することも可能である。どちらの場合でも、動作４３３０および４３３６は、コマンドを含まない空のｃｏｍｍａｎｄＦｒａｍｅ要素および他のｃｏｍｍａｎｄＦｒａｍｅと同一のｔｉｍｅ属性を有する複数のｃｏｍｍａｎｄＦｒａｍｅ要素を作成することができる。動作３１３６で、空のｃｏｍｍａｎｄＦｒａｍｅ要素が除去され、同一のｔｉｍｅ属性を有する複数のコマンド・フレームが、組み合わされる。
【０２３８】
動作４３２６で、インデックス「ｉ」の値を、その後、「１」だけ増分し、「ｉ」の値のｎｕｍＰａｒＣｈｉｌｄｒｅｎの値との比較４３１０を繰り返す。
【０２３９】
７．１．７．２  ＯＤＵｐｄａｔｅ  ｃｏｍｍａｎｄ−２の処理
標準ＸＭＬ手段を使用して、（親）ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅコマンド要素２２０に従属する「ＯＤ」要素２３０を入手する。標準ＸＭＬ手段を使用して、「ＯＤ」要素２３０に従属するＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２４０を入手する。標準ＸＭＬ手段を使用して、「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素６００に従属する「Ｄｅｓｃｒ」要素６１０を入手する。「Ｄｅｓｃｒ」要素６１０を、図８０に示されているように処理して、従属「ｅｓＤｅｓｃｒ」要素６２０を入手する。この「ｅｓＤｅｓｃｒ」要素６２０を、図８１に示されているように処理して、従属「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」要素６３０を入手する。下で説明する手順「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒの処理」を、この形で入手された「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」要素６３０ごとに実行する。
【０２４０】
７．１．７．３  Ｉｎｓｅｒｔコマンドの処理
「Ｉｎｓｅｒｔ」コマンド要素を処理するのに使用されるステップを、図９７に示す。この手順の親要素は、ＸＭＴ−Ａ  Ｉｎｓｅｒｔコマンド要素３００である。このコマンド要素は、ＸＭＴ−Ａ「ｐａｒ」要素２００またはＣｏｎｄｉｔｉｏｎａｌ  ノード要素３０４０の「ｂｕｆｆｅｒ」属性要素４１０に従属する場合がある。Ｉｎｓｅｒｔコマンド要素が、ＸＭＴ−Ａ「ｐａｒ」要素２００に従属する場合に、ｍｐ４ｂｉｆｓ「ターゲット」要素は、４３３０で作成されたｃｏｍｍａｎｄＦｒａｍｅ要素２８２０および２８３０である。Ｉｎｓｅｒｔコマンド要素が、Ｃｏｎｄｉｔｉｏｎａｌ  ノード要素３０４０の「ｂｕｆｆｅｒ」属性要素に従属する場合に、ｍｐ４−ｂｉｆｓ「ターゲット」要素は、ｍｐ４−ｂｉｆｓ  Ｃｏｎｄｉｔｉｏｎａｌ  ｎｏｄｅ要素である。
【０２４１】
まず、値「偽」を、２つのｂｏｏｌｅａｎ値、ｂＩｎｓｅｒｔＮｏｄｅおよびｂＩｎｓｅｒｔＶａｌｕｅに割り当てる。
【０２４２】
動作４４００で、親要素の「ａｔＮｏｄｅ」属性の値を、量「ＮｏｄｅＩｄ」に割り当てる。「ａｔＮｏｄｅ」属性の値が指定されていない場合には、この手順は、動作４４４６で継続される。
【０２４３】
「ａｔＮｏｄｅ」属性の値が指定されている場合に、動作４４０６で、親要素の「ａｔＦｉｅｌｄ」属性の値を、量「ＦｉｅｌｄＮａｍｅ」に割り当てる。
【０２４４】
「ａｔＦｉｅｌｄ」属性の値が指定されている場合に、動作４４１６で、量「ＦｉｅｌｄＮａｍｅ」の値をストリング「ｃｈｉｌｄｒｅｎ」と比較する。
【０２４５】
「ａｔＦｉｅｌｄ」属性の値が指定されていない場合、または量「ＦｉｅｌｄＮａｍｅ」の値が「ｃｈｉｌｄｒｅｎ」である場合に、動作４４１０で、値「真」をｂｏｏｌｅａｎ量「ｂＩｎｓｅｒｔＮｏｄｅ」に割り当て、この手順は、動作４４４６で継続される。
【０２４６】
「ａｔＦｉｅｌｄ」属性の値が指定されており、量「ＦｉｅｌｄＮａｍｅ」の値が「ｃｈｉｌｄｒｅｎ」でない場合に、動作４４２０で、標準ＸＭＬ手段を使用して、新しいｍｐ４−ｂｉｆｓ  ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅコマンド要素（「ｎｅｗＣｏｍｍａｎｄ」）を作成する。次に、標準ＸＭＬ手段を使用して、ｎｅｗＣｏｍｍａｎｄ要素を現在のｍｐ４−ｂｉｆｓターゲット要素に付加する。
【０２４７】
動作４４２６で、親要素の「ｖａｌｕｅ」属性の値を、量「ｖａｌｕｅ」に割り当てる。
【０２４８】
ＸＭＴ−Ａ  ＢＩＦＳコマンド要素の「ｖａｌｕｅ」属性の値が指定されている場合に、動作４４３０で、新しいｍｐ４ｂｉｆｓ  ｎｅｗＣｏｍｍａｎｄ要素の「ｖａｌｕｅ」属性に値を割り当てる。ほとんどの場合に、新しいｍｐ４ｂｉｆｓ  ｎｅｗＣｏｍｍａｎｄ要素の「ｖａｌｕｅ」属性に割り当てられる値は、ＸＭＴ−Ａ  ＢＩＦＳコマンド要素の「ｖａｌｕｅ」属性の値と等しい。下で識別されるいくつかの場合（データ・フォーマット変換）に、新しいｍｐ４ｂｉｆｓ  ｎｅｗＣｏｍｍａｎｄ要素の「ｖａｌｕｅ」属性に割り当てられる値は、ＸＭＴ−Ａ  ＢＩＦＳコマンド要素の「ｖａｌｕｅ」属性の値から導出される。
【０２４９】
この場合に、この手順は完了し、処理は、動作４３３６またはＸＭＴ−Ａ  Ｃｏｎｄｉｔｉｏｎａｌ  ｎｏｄｅ要素の処理４８９０で継続される。
【０２５０】
「ｖａｌｕｅ」属性の値が指定されていない場合に、動作４４３６で、値「真」を、ｂｏｏｌｅａｎ量「ｂＩｎｓｅｒｔＶａｌｕｅ」に割り当てる。現在の親要素に直接に従属するすべての要素の要素名のリストからなるストリング量「ｃｈｉｌｄＮａｍｅｓ」を作成する。
【０２５１】
動作４４４０で、ストリング量「ｃｈｉｌｄＮａｍｅｓ」の値を、新しいｍｐ４−ｂｉｆｓ要素「ｎｅｗＣｏｍｍａｎｄ」の「ｖａｌｕｅ」属性に割り当てる。
【０２５２】
動作４４４６で、「０」の値を、他所で定義される他のインデックス値と別個であるインデックス値「ｉ」に割り当てる。
【０２５３】
動作４４５０で、インデックス「ｉ」の値を、量「ｎｕｍＣｍｄＣｈｉｌｄｒｅｎ」の値と比較する。量ｎｕｍＣｍｄＣｈｉｌｄｒｅｎの値は、現在の「親」要素によって所有される従属要素の個数を示す。
【０２５４】
インデックス「ｉ」の値が、ｎｕｍＣｍｄＣｈｉｌｄｒｅｎの値と等しい場合に、動作４４５６で、この手順が完了し、処理は、動作４３３６またはＸＭＴ−Ａ  Ｃｏｎｄｉｔｉｏｎａｌ  ｎｏｄｅ要素の処理４８９０で継続される。
【０２５５】
インデックス「ｉ」の値が、ｎｕｍＣｍｄＣｈｉｌｄｒｅｎの値と等しくない場合に、動作４４６０で、標準ＸＭＬ手段を使用して、現在の親要素に従属するｉ番目の要素を入手し、結果の従属要素を「ｉｎｓｅｒｔＣｈｉｌｄ」要素として識別する。ｉｎｓｅｒｔＣｈｉｌｄ要素の要素名は、ストリング量「ｃｈｉｌｄＮａｍｅ」によって識別される。
【０２５６】
動作４４７０で、ストリング量ｃｈｉｌｄＮａｍｅの値をストリング「ＲＯＵＴＥ」と比較する。
【０２５７】
ストリング量ｃｈｉｌｄＮａｍｅの値が「ＲＯＵＴＥ」である場合に、動作４４７６で、手順「ＩｎｓｅｒｔＲｏｕｔｅコマンドの処理」を実行する。次に、標準ＸＭＬ手段を使用して、結果のｎｅｗＣｏｍｍａｎｄ要素を現在のｍｐ４−ｂｉｆｓターゲット要素に付加する。この手順は、その後、動作４４６６で継続される。
【０２５８】
ストリング量ｃｈｉｌｄＮａｍｅの値が「ＲＯＵＴＥ」でない場合に、動作４４８０で、ｂｏｏｌｅａｎ量ｂＩｎｓｅｒｔＮｏｄｅの値を値「真」と比較する。
【０２５９】
ｂｏｏｌｅａｎ量ｂＩｎｓｅｒｔＮｏｄｅの値が「真」である場合に、動作４４８６で、手順「ＩｎｓｅｒｔＮｏｄｅコマンドの作成」を実行する。その後、標準ＸＭＬ手段を使用して、結果のｎｅｗＣｏｍｍａｎｄ要素を現在のｍｐ４−ｂｉｆｓターゲット要素に付加する。この手順は、その後、動作４４９６で継続される。
【０２６０】
ｂｏｏｌｅａｎ量ｂＩｎｓｅｒｔＮｏｄｅの値が「真」でない場合に、動作４４９０で、ｂｏｏｌｅａｎ量ｂＩｎｓｅｒｔＶａｌｕｅの値を値「真」と比較する。
【０２６１】
ｂｏｏｌｅａｎ量ｂＩｎｓｅｒｔＶａｌｕｅの値が「真」である場合に、またはｂｏｏｌｅａｎ量ｂＩｎｓｅｒｔＮｏｄｅの値が「真」である場合に、動作４４９６で、現在のｉｎｓｅｒｔＣｈｉｌｄ要素を親要素として使用して、手順「ＸＭＴ−Ａ  ＢＩＦＳノードの処理」を実行する。その後、標準ＸＭＬ手段を使用して、結果のｍｐ４−ｂｉｆｓノード要素をｎｅｗＣｏｍｍａｎｄ要素に付加する。処理は、動作４４６６で継続される。
【０２６２】
ｂｏｏｌｅａｎ量ｂＩｎｓｅｒｔＶａｌｕｅの値が「真」でない場合に、動作４４９８で、ＸＭＴ−Ａ文書が有効でなく、エラーを報告する。現在のｉｎｓｅｒｔＣｈｉｌｄ要素を親要素として使用して、手順「ＸＭＴ−Ａ  ＢＩＦＳノードの処理」を、実行する。その後、標準ＸＭＬ手段を使用して、結果のｍｐ４−ｂｉｆｓノード要素を現在のｍｐ４−ｂｉｆｓターゲット要素に付加する。処理は、動作４４６６で継続される。
【０２６３】
動作４４６６で、インデックス「ｉ」の値を「１」だけ増分し、ｎｕｍＣｍｄＣｈｉｌｄｒｅｎとの比較４４５０を繰り返す。
【０２６４】
７．１．７．４  「ＩｎｓｅｒｔＲｏｕｔｅコマンドの作成」手順
標準ＸＭＬ手段を使用して、新しいｍｐ４−ｂｉｆｓ  ＩｎｓｅｒｔＲｏｕｔｅコマンド要素（「ｎｅｗＣｏｍｍａｎｄ」）を作成する。
【０２６５】
ＸＭＴ−Ａ親要素の「ｆｒｏｍＮｏｄｅ」属性の値を、ＢＩＦＳ  ＮｏｄｅＩｄテーブル（図８９）の項目３９６６と比較する。一致する項目の「ｐｏｓｉｔｉｏｎ」３９６０の値を、整数量ｆｒｏｍＮｏｄｅＩｄに割り当て、結果を「１」だけ増分する。その後、結果を、ｎｅｗＣｏｍｍａｎｄ要素の「ｄｅｐａｒｔｕｒｅＮｏｄｅ」属性に割り当てる。
【０２６６】
ＸＭＴ−Ａ親要素の「ｆｒｏｍＦｉｅｌｄ」属性の値を、ｎｅｗＣｏｍｍａｎｄ要素の「ｄｅｐａｒｔｕｒｅＦｉｅｌｄＮａｍｅ」属性に割り当てる。
【０２６７】
ＸＭＴ−Ａ親要素の「ｔｏＮｏｄｅ」属性の値を、ＢＩＦＳ  ＮｏｄｅＩｄテーブル（図８９）の項目３９６６と比較する。一致する項目の「ｐｏｓｉｔｉｏｎ」３９６０の値を、整数量ｆｒｏｍＮｏｄｅＩｄに割り当て、結果を「１」だけ増分する。その結果を、ｎｅｗＣｏｍｍａｎｄ要素の「ａｒｒｉｖａｌＮｏｄｅ」属性に割り当てる。
【０２６８】
ＸＭＴ−Ａ親要素の「ｔｏＦｉｅｌｄ」属性の値を、ｎｅｗＣｏｍｍａｎｄ要素の「ａｒｒｉｖａｌＦｉｅｌｄＮａｍｅ」属性に割り当てる。
【０２６９】
ＸＭＴ−Ａ親要素の「ＤＥＦ」属性の値が指定されている場合に、この属性の値を、ＢＩＦＳ  ＲｏｕｔｅＩｄテーブル（図９０）の項目３９７６と比較する。一致する項目の「ｐｏｓｉｔｉｏｎ」３９７０の値を、整数量ｒｏｕｔｅＩｄに割り当て、結果を「１」だけ増分する。その結果をｎｅｗＣｏｍｍａｎｄ要素の「ｒｏｕｔｅＩｄ」属性に割り当てる。ｂｏｏｌｅａｎ量ｂＵｓｅＮａｍｅｓの値が真である場合に、「ＤＥＦＳ」属性の値を、ｎｅｗＣｏｍｍａｎｄ要素の「ｎａｍｅ」属性に割り当てる。ｂＵｓｅＮａｍｅｓの値は、「シーン置換」コマンドを処理している間に確立される。
【０２７０】
７．１．７．５  「ＩｎｓｅｒｔＮｏｄｅコマンドの作成」手順
標準ＸＭＬ手段を使用して、新しいｍｐ４−ｂｉｆｓ  ＩｎｓｅｒｔＮｏｄｅコマンド要素（「ｎｅｗＣｏｍｍａｎｄ」）を作成する。
【０２７１】
量「ＮｏｄｅＩｄ」の値を、ＢＩＦＳ  ＮｏｄｅＩｄテーブル（図８９）の項目３９６６と比較する。一致する項目の「ｐｏｓｉｔｉｏｎ」３９６０の値を、整数量ａｔＮｏｄｅＩｄに割り当て、結果を「１」だけ増分する。その結果を、ｎｅｗＣｏｍｍａｎｄ要素の「ｐａｒｅｎｔＩｄ」属性に割り当てる。
【０２７２】
ＸＭＴ−Ａ親要素の「ｐｏｓｉｔｉｏｎ」属性の値が「ＢＥＧＩＮ」である場合に、値「２」をｎｅｗＣｏｍｍａｎｄ要素の「ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ」属性に割り当てる。
【０２７３】
ＸＭＴ−Ａ親要素の「ｐｏｓｉｔｉｏｎ」属性の値が「ＥＮＤ」である場合には、値「３」を、ｎｅｗＣｏｍｍａｎｄ要素の「ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ」属性に割り当てる。
【０２７４】
ＸＭＴ−Ａ親要素の「ｐｏｓｉｔｉｏｎ」属性の値が「ＢＥＧＩＮ」でも「ＥＮＤ」でもない場合には、値「０」を、ｎｅｗＣｏｍｍａｎｄ要素の「ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ」属性に割り当て、ＸＭＴ−Ａ親要素の「ｐｏｓｉｔｉｏｎ」属性の値を、ｎｅｗＣｏｍｍａｎｄ要素の「ｐｏｓｉｔｉｏｎ」属性に割り当てる。
【０２７５】
７．１．７．６  Ｄｅｌｅｔｅコマンドの処理
「Ｄｅｌｅｔｅ」コマンド要素の処理に使用されるステップを、図９８に示す。この手順の親要素は、ＸＭＴ−Ａ  Ｄｅｌｅｔｅコマンド要素３１０である。このコマンド要素は、ＸＭＴ−Ａ「ｐａｒ」要素２００か、Ｃｏｎｄｉｔｉｏｎａｌ  ノード要素３０４０の「ｂｕｆｆｅｒ」属性要素４１０に従属する場合がある。Ｄｅｌｅｔｅコマンド要素が、ＸＭＴ−Ａ「ｐａｒ」要素２００に従属する場合に、ｍｐ４ｂｉｆｓ「ターゲット」要素は、４３３０で作成されたｃｏｍｍａｎｄＦｒａｍｅ要素２８２０および２８３０である。Ｄｅｌｅｔｅコマンド要素がＣｏｎｄｉｔｉｏｎａｌ  ノード要素３０４０の「ｂｕｆｆｅｒ」属性要素４１０に従属する場合に、ｍｐ４−ｂｉｆｓ「ターゲット」要素は、ｍｐ４−ｂｉｆｓ  Ｃｏｎｄｉｔｉｏｎａｌ  ｎｏｄｅ要素である。
【０２７６】
動作４５００で、親要素の「ａｔＲｏｕｔｅ」属性の値を、量「ＲｏｕｔｅＩｄ」に割り当てる。
【０２７７】
「ａｔＲｏｕｔｅ」属性の値が指定されている場合に、動作４５１０で、標準ＸＭＬ手段を使用して、新しいｍｐ４−ｂｉｆｓ  ＤｅｌｅｔｅＲｏｕｔｅコマンド要素（「ｎｅｗＣｏｍｍａｎｄ」）を作成し、量「ＲｏｕｔｅＩｄ」の値を、ｎｅｗＣｏｍｍａｎｄ要素の「ｒｏｕｔｅＩｄ」属性に割り当てる。次に、標準ＸＭＬ手段を使用して、このｎｅｗＣｏｍｍａｎｄ要素を現在のｍｐ４−ｂｉｆｓターゲット要素に付加する。
【０２７８】
動作４５２０で、親要素の「ａｔＮｏｄｅ」属性の値を量「ＮｏｄｅＩｄ」に割り当てる。
【０２７９】
「ａｔＮｏｄｅ」属性の値が指定されていない場合に、動作４５３０で、ＸＭＴ−Ａ文書が有効でない。
【０２８０】
「ａｔＮｏｄｅ」属性の値が指定されている場合に、動作４５４０で、親要素の「ａｔＦｉｅｌｄ」属性の値を、量「ＦｉｅｌｄＮａｍｅ」に割り当てる。「ａｔＦｉｅｌｄ」属性の値が指定されている場合に、量「ＦｉｅｌｄＮａｍｅ」の値をストリング「ｃｈｉｌｄｒｅｎ」と比較する。
【０２８１】
「ａｔＦｉｅｌｄ」属性の値の値が指定されており、量「ＦｉｅｌｄＮａｍｅ」の値が「ｃｈｉｌｄｒｅｎ」でない場合に、動作４５６０で、標準ＸＭＬ手段を使用して、新しいｍｐ４−ｂｉｆｓ  ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅコマンド要素（ｎｅｗＣｏｍｍａｎｄ）を作成する。量ａｔＦｉｅｌｄの値を、ｎｅｗＣｏｍｍａｎｄ要素の「ｉｎＦｉｅｌｄＮａｍｅ」属性に割り当てる。
【０２８２】
ＸＭＴ−Ａ親要素の「ｐｏｓｉｔｉｏｎ」属性の値が「ＢＥＧＩＮ」である場合に、値「２」を、ｎｅｗＣｏｍｍａｎｄ要素の「ｄｅｌｅｔｉｏｎＰｏｓｉｔｉｏｎ」属性に割り当てる。
【０２８３】
ＸＭＴ−Ａ親要素の「ｐｏｓｉｔｉｏｎ」属性の値が「ＥＮＤ」である場合に、値「３」を、ｎｅｗＣｏｍｍａｎｄ要素の「ｄｅｌｅｔｉｏｎＰｏｓｉｔｉｏｎ」属性に割り当てる。
【０２８４】
ＸＭＴ−Ａ親要素の「ｐｏｓｉｔｉｏｎ」属性の値が「ＢＥＧＩＮ」でも「ＥＮＤ」でもない場合には、値「０」をｎｅｗＣｏｍｍａｎｄ要素の「ｄｅｌｅｔｉｏｎＰｏｓｉｔｉｏｎ」属性に割り当て、ＸＭＴ−Ａ親要素の「ｐｏｓｉｔｉｏｎ」属性の値を、ｎｅｗＣｏｍｍａｎｄ要素の「ｐｏｓｉｔｉｏｎ」属性に割り当てる。
【０２８５】
その後、標準ＸＭＬ手段を使用して、ｎｅｗＣｏｍｍａｎｄ要素を現在のｍｐ４−ｂｉｆｓターゲット要素に付加する。
【０２８６】
「ａｔＦｉｅｌｄ」属性の値が指定されていないか、量「ＦｉｅｌｄＮａｍｅ」の値が「ｃｈｉｌｄｒｅｎ」である場合に、動作４５８０で、標準ＸＭＬ手段を使用して、新しいｍｐ４−ｂｉｆｓ  ＤｅｌｅｔｅＮｏｄｅコマンド要素（「ｎｅｗＣｏｍｍａｎｄ」）を作成する。
【０２８７】
量「ＮｏｄｅＩｄ」の値を、ＢＩＦＳ  ＮｏｄｅＩｄテーブル（図８９）の項目３９６６と比較する。一致する項目の「ｐｏｓｉｔｉｏｎ」３９６０の値を、整数量ａｔＮｏｄｅＩｄに割り当て、結果を「１」だけ増分する。その結果を、ｎｅｗＣｏｍｍａｎｄ要素の「ｎｏｄｅＩｄ」属性に割り当てる。
【０２８８】
その後、標準ＸＭＬ手段を使用して、ｎｅｗＣｏｍｍａｎｄ要素を現在のｍｐ４−ｂｉｆｓターゲット要素に付加する。
【０２８９】
７．１．７．７  Ｒｅｐｌａｃｅコマンドの処理
ＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素を処理するのに使用されるステップを、図９９に示す。この手順の親要素は、ＸＭＴ−Ａ  Ｒｅｐｌａｃｅコマンド要素３２０である。このコマンド要素は、ＸＭＴ−Ａ「ｐａｒ」要素２００またはＣｏｎｄｉｔｉｏｎａｌ  ノード要素３０４０の「ｂｕｆｆｅｒ」属性要素４１０に従属する場合がある。Ｒｅｐｌａｃｅコマンド要素が、ＸＭＴ−Ａ「ｐａｒ」要素２００に従属する場合に、ｍｐ４ｂｉｆｓ「ターゲット」要素は、４３３０で作成されたｃｏｍｍａｎｄＦｒａｍｅ要素２８２０および２８３０である。Ｒｅｐｌａｃｅコマンド要素がＣｏｎｄｉｔｉｏｎａｌ  ｎｏｄｅ要素３０４０の「ｂｕｆｆｅｒ」属性要素４１０に従する場合に、ｍｐ４−ｂｉｆｓ「ターゲット」要素は、ｍｐ４−ｂｉｆｓ  Ｃｏｎｄｉｔｉｏｎａｌ  ｎｏｄｅ要素である。
【０２９０】
まず、値「偽」を、２つのｂｏｏｌｅａｎ値、ｂＲｅｐｌａｃｅＮｏｄｅおよびｂＲｅｐｌａｃｅＶａｌｕｅに割り当てる。
【０２９１】
動作４６００で、親要素の「ａｔＮｏｄｅ」属性の値を、量「ＮｏｄｅＩｄ」に割り当てる。「ａｔＮｏｄｅ」属性の値が指定されていない場合には、この手順は、動作４６３６で継続される。
【０２９２】
「ａｔＮｏｄｅ」属性の値が指定されている場合に、動作４６０４で、親要素の「ａｔＦｉｅｌｄ」属性の値を、量「ＦｉｅｌｄＮａｍｅ」に割り当てる。
【０２９３】
「ａｔＦｉｅｌｄ」属性の値が指定されていない場合に、動作４６１２で、標準ＸＭＬ手段を使用して、新しいｍｐ４−ｂｉｆｓ  ＲｅｐｌａｃｅＮｏｄｅコマンド要素（「ｎｅｗＣｏｍｍａｎｄ」）を作成する。量「ＮｏｄｅＩｄ」の値を、ＢＩＦＳ  ＮｏｄｅＩｄテーブル（図８９）の項目３９６６と比較する。一致する項目の「ｐｏｓｉｔｉｏｎ」３９６０の値を、整数量ａｔＮｏｄｅＩｄに割り当て、結果を「１」だけ増分する。その結果を、ｎｅｗＣｏｍｍａｎｄ要素の「ｎｏｄｅＩｄ」属性に割り当てる。
【０２９４】
標準ＸＭＬ手段を使用して、ｎｅｗＣｏｍｍａｎｄ要素をｍｐ４−ｂｉｆｓターゲット要素に付加する。値「真」を、ｂｏｏｌｅａｎ量「ｂＲｅｐｌａｃｅＮｏｄｅ」に割り当て、この手順は、動作４６３６で継続される。
【０２９５】
「ａｔＦｉｅｌｄ」属性の値が指定されている場合に、動作４６１６で、標準ＸＭＬ手段を使用して、新しいｍｐ４−ｂｉｆｓ  ＲｅｐｌａｃｅＦｉｅｌｄコマンド要素（「ｎｅｗＣｏｍｍａｎｄ」）を作成する。量「ＮｏｄｅＩｄ」の値を、ＢＩＦＳ  ＮｏｄｅＩｄテーブル（図８９）の項目３９６６と比較する。一致する項目の「ｐｏｓｉｔｉｏｎ」３９６０の値を、整数量ａｔＮｏｄｅＩｄに割り当て、結果を「１」だけ増分する。その結果を、ｎｅｗＣｏｍｍａｎｄ要素の「ｎｏｄｅＩｄ」属性に割り当てる。
【０２９６】
量「ＦｉｅｌｄＮａｍｅ」の値を、ｎｅｗＣｏｍｍａｎｄ要素の「ｉｎＦｉｅｌｄＮａｍｅ」属性に割り当てる。その後、標準ＸＭＬ手段を使用して、ｎｅｗＣｏｍｍａｎｄ要素を現在のｍｐ４−ｂｉｆｓターゲット要素に付加する。
【０２９７】
動作４６２０で、親要素の「ｖａｌｕｅ」属性の値を量「ｖａｌｕｅ」に割り当てる。
【０２９８】
ＸＭＴ−Ａ  ＢＩＦＳコマンド要素の「ｖａｌｕｅ」属性の値が指定されている場合に、動作４６２４で、新しいｍｐ４ｂｉｆｓ  ｎｅｗＣｏｍｍａｎｄ要素の「ｖａｌｕｅ」属性に値を割り当てる。ほとんどの場合に、新しいｍｐ４ｂｉｆｓ  ｎｅｗＣｏｍｍａｎｄ要素の「ｖａｌｕｅ」属性に割り当てられる値は、ＸＭＴ−Ａ  ＢＩＦＳコマンド要素の「ｖａｌｕｅ」属性の値と等しい。下で識別されるいくつかの場合（データ・フォーマット変換）に、新しいｍｐ４ｂｉｆｓ  ｎｅｗＣｏｍｍａｎｄ要素の「ｖａｌｕｅ」属性に割り当てられる値は、ＸＭＴ−Ａ  ＢＩＦＳコマンド要素の「ｖａｌｕｅ」属性の値から導出される。この場合に、この手順が完了し、処理は、動作４３３６またはＸＭＴ−Ａ  Ｃｏｎｄｉｔｉｏｎａｌ  ｎｏｄｅ要素の処理４８９０で継続される。
【０２９９】
「ｖａｌｕｅ」属性の値が指定されていない場合に、動作４６２８で、値「真」をｂｏｏｌｅａｎ量「ｂＲｅｐｌａｃｅＦｉｅｌｄ」に割り当てる。現在の親ノードに直接に従属するすべての要素の要素名のリストからなるストリング量「ｃｈｉｌｄＮａｍｅｓ」を作成する。
【０３００】
動作４６３２で、ストリング量「ｃｈｉｌｄＮａｍｅｓ」の値を、新しいｍｐ４−ｂｉｆｓ要素「ｎｅｗＣｏｍｍａｎｄ」の「ｖａｌｕｅ」属性に割り当てる。
【０３０１】
動作４６３６で、値「０」を、他所で定義される他のインデックス値と別個であるインデックス値「ｉ」に割り当てる。
【０３０２】
動作４６４０で、インデックス「ｉ」の値を、量「ｎｕｍＣｍｄＣｈｉｌｄｒｅｎ」の値と比較する。量ｎｕｍＣｍｄＣｈｉｌｄｒｅｎの値は、現在の「親」要素によって所有される従属要素の個数を示す。
【０３０３】
インデックス「ｉ」の値がｎｕｍＣｍｄＣｈｉｌｄｒｅｎ」の値と等しい場合に、動作４６４４で、この手順が完了し、処理は、動作４３３６またはＸＭＴ−Ａ  Ｃｏｎｄｉｔｉｏｎａｌ  ｎｏｄｅ要素の処理４８９０で継続される。
【０３０４】
インデックス「ｉ」の値がｎｕｍＣｍｄＣｈｉｌｄｒｅｎ」の値と等しくない場合に、動作４６４８で、標準ＸＭＬ手段を使用して、現在の親要素に従属するｉ番目の要素を入手し、結果の従属要素を「ｒｅｐｌａｃｅＣｈｉｌｄ」要素として識別する。ｒｅｐｌａｃｅＣｈｉｌｄ要素の要素名は、ストリング量「ｃｈｉｌｄＮａｍｅ」によって識別される。"
【０３０５】
動作４６５２で、ストリング量ｃｈｉｌｄＮａｍｅの値を、ストリング「Ｓｃｅｎｅ」と比較する。ストリング量ｃｈｉｌｄＮａｍｅの値が「Ｓｃｅｎｅ」である場合に、動作４６５６で、手順「ＲｅｐｌａｃｅＳｃｅｎｅコマンドの作成」を実行する。その後、標準ＸＭＬ手段を使用して、結果のｎｅｗＣｏｍｍａｎｄ要素を現在のｍｐ４−ｂｉｆｓターゲット要素に付加する。その後、この手順は、動作４６９６で継続される。
【０３０６】
ストリング量ｃｈｉｌｄＮａｍｅの値が「Ｓｃｅｎｅ」でない場合に、動作４６６０で、ストリング量ｃｈｉｌｄＮａｍｅの値をストリング「ＲＯＵＴＥ」と比較する。ストリング量ｃｈｉｌｄＮａｍｅの値が「ＲＯＵＴＥ」である場合に、動作４６６４で、手順「ＲｅｐｌａｃｅＲｏｕｔｅコマンドの作成」を実行する。その後、標準ＸＭＬ手段を使用して、結果のｎｅｗＣｏｍｍａｎｄ要素を現在のｍｐ４−ｂｉｆｓターゲット要素に付加する。その後、この手順は、動作４６９６で継続される。
【０３０７】
ストリング量ｃｈｉｌｄＮａｍｅの値が「ＲＯＵＴＥ」でない場合に、動作４６６８で、ｂｏｏｌｅａｎ量ｂＲｅｐｌａｃｅＮｏｄｅの値を「真」と比較する。
【０３０８】
ｂｏｏｌｅａｎ量ｂＲｅｐｌａｃｅＮｏｄｅの値が「真」である場合に、動作４６７２で、現在のｒｅｐｌａｃｅＣｈｉｌｄ要素を親要素として使用して、手順「ＸＭＴ−Ａ  ＢＩＦＳノードの処理」を実行する。その後、標準ＸＭＬ手段を使用して、結果のｍｐ４−ｂｉｆｓノード要素を現在のｍｐ４−ｂｉｆｓターゲット要素に付加する。処理は、動作４６９６で継続される。
【０３０９】
ｂｏｏｌｅａｎ量ｂＲｅｐｌａｃｅＮｏｄｅの値が「真」でない場合に、動作４６８０で、ｂｏｏｌｅａｎ量ｂＲｅｐｌａｃｅＦｉｅｌｄの値を値「真」と比較する。
【０３１０】
ｂｏｏｌｅａｎ量ｂＲｅｐｌａｃｅＦｉｅｌｄの値が「真」である場合に、動作４６８４で、現在のｒｅｐｌａｃｅＣｈｉｌｄを親要素として使用して、手順「ＸＭＴ−Ａ  ＢＩＦＳノードの処理」を実行する。その後、標準ＸＭＬ手段を使用して、結果のｍｐ４−ｂｉｆｓノード要素をｎｅｗＣｏｍｍａｎｄ要素に付加する。処理は、動作４６９６で継続される。
【０３１１】
ｂｏｏｌｅａｎ量ｂＲｅｐｌａｃｅＮｏｄｅの値が「真」でない場合に、動作４６９０で、ＸＭＴ−Ａ文書が有効でない。現在のｒｅｐｌａｃｅＣｈｉｌｄを親要素として使用して、手順「ＸＭＴ−Ａ  ＢＩＦＳノードの処理」を実行する。その後、標準ＸＭＬ手段を使用して、結果のｍｐ４−ｂｉｆｓノード要素を現在のｍｐ４−ｂｉｆｓターゲット要素に付加する。処理は、動作４６９６で継続される。
【０３１２】
動作４６９６では、インデックス「ｉ」の値を「１」だけ増分し、動作４６４０でのｎｕｍＣｍｄＣｈｉｌｄｒｅｎとの比較を繰り返す。
【０３１３】
７．１．７．８  「ＲｅｐｌａｃｅＲｏｕｔｅコマンド作成」手順
標準ＸＭＬ手段を使用して、新しいｍｐ４−ｂｉｆｓ  ＲｅｐｌａｃｅＲｏｕｔｅ要素（「ｎｅｗＣｏｍｍａｎｄ」）を作成する。
【０３１４】
ＸＭＴ−Ａ親要素の「ｆｒｏｍＮｏｄｅ」属性の値を、ＢＩＦＳ  ＮｏｄｅＩｄテーブル（図８９参照）の項目３９６６と比較する。一致する項目の「ｐｏｓｉｔｉｏｎ」３９６０の値を、整数量「ｆｒｏｍＮｏｄｅＩｄ」に割り当て、結果を「１」だけ増分する。その結果を、ｎｅｗＣｏｍｍａｎｄ要素の「ｄｅｐａｒｔｕｒｅＮｏｄｅ」属性に割り当てる。
【０３１５】
ＸＭＴ−Ａ親要素の「ｆｒｏｍＦｉｅｌｄ」属性の値を、ｎｅｗＣｏｍｍａｎｄ要素の「ｄｅｐａｒｔｕｒｅＦｉｅｌｄＮａｍｅ」属性に割り当てる。
【０３１６】
ＸＭＴ−Ａ親要素の「ｔｏＮｏｄｅ」属性の値を、ＢＩＦＳ  ＮｏｄｅＩｄテーブル（図８９参照）の項目３９６６と比較する。一致する項目の「ｐｏｓｉｔｉｏｎ」３９６０の値を、整数量ｆｒｏｍＮｏｄｅＩｄに割り当て、結果を「１」だけ増分する。その結果を、ｎｅｗＣｏｍｍａｎｄ要素の「ａｒｒｉｖａｌＮｏｄｅ」属性に割り当てる。
【０３１７】
ＸＭＴ−Ａ親要素の「ｔｏＦｉｅｌｄ」属性の値を、ｎｅｗＣｏｍｍａｎｄ要素の「ａｒｒｉｖａｌＦｉｅｌｄＮａｍｅ」属性に割り当てる。
【０３１８】
ＸＭＴ−Ａ親要素の「ａｔＲｏｕｔｅ」属性の値を、ＢＩＦＳ  ＲｏｕｔｅＩｄテーブル（図９０参照）の項目３９７６と比較する。一致する項目の「ｐｏｓｉｔｉｏｎ」３９７０の値を、整数量ｒｏｕｔｅＩｄに割り当て、結果を「１」だけ増分する。その結果をｎｅｗＣｏｍｍａｎｄ要素の「ｒｏｕｔｅＩｄ」属性に割り当てる。ＸＭＴ−Ａ親要素のａｔＲｏｕｔｅ属性の値が指定されていない場合に、そのＸＭＴ−Ａ文書は無効である。
【０３１９】
７．１．７．９  「ＲｅｐｌａｃｅＳｃｅｎｅコマンド作成」手順
ｍｐ４−ｂｉｆｓ「ＲｅｐｌａｃｅＳｃｅｎｅ」コマンド要素を作成するのに使用されるステップを、図１００に示す。この手順のＸＭＴ−Ａ親要素は、ＸＭＴ−Ａ  Ｓｃｅｎｅコマンド要素３７０である。このコマンド要素は、必ずＸＭＴ−Ａ「Ｒｅｐｌａｃｅ」要素３２０に従属する。
【０３２０】
動作４７００で、標準ＸＭＬ手段を使用して、新しいｍｐ４−ｂｉｆｓ「ＲｅｐｌａｃｅＳｃｅｎｅコマンド要素２９３０（ｎｅｗＣｏｍｍａｎｄ）を作成する。標準ＸＭＬ手段を使用して、この新しいコマンド要素を現在のｍｐ４−ｂｉｆｓターゲット要素に付加する。ｍｐ４−ｂｉｆｓターゲット要素は、ｍｐ４−ｂｉｆｓ  ｃｏｍｍａｎｄＦｒａｍｅ要素２８３０またはｍｐ４−ｂｉｆｓ  Ｃｏｎｄｉｔｉｏｎａｌ  ｎｏｄｅ要素でなければならない。値「偽」を、ｂｏｏｌｅａｎ量「ｂＨａｖｅＲｏｕｔｅｓ」に割り当てる。
【０３２１】
動作４７１０で、ＸＭＴ−Ａ「Ｓｃｅｎｅ」要素の「ｕｓｅＮａｍｅｓ」属性の値を、ｂｏｏｌｅａｎ量「ＵＳＥＮＡＭＥＳ」に割り当てる。
【０３２２】
ＸＭＴ−Ａ「Ｓｃｅｎｅ」要素の「ｕｓｅＮａｍｅｓ」属性の値が指定されている場合に、動作４７１６で、ｂｏｏｌｅａｎ量「ＵＳＥＮＡＭＥＳ」の値を値「真」と比較する。
【０３２３】
ＸＭＴ−Ａ「Ｓｃｅｎｅ」要素の「ｕｓｅＮａｍｅｓ」属性の値が指定されていない場合、またはｂｏｏｌｅａｎ量「ＵＳＥＮＡＭＥＳ」の値が「真」でない場合に、動作４７２０で、値「偽」をｂｏｏｌｅａｎ量「ｂＵｓｅＮａｍｅｓ」に割り当てる。
【０３２４】
ｂｏｏｌｅａｎ量「ＵＳＥＮＡＭＥＳ」の値が「真」である場合に、動作４７２６で、値「真」をｂｏｏｌｅａｎ量「ｂＵｓｅＮａｍｅｓ」に割り当てる。
【０３２５】
動作４７３０で、値「０」を、他所で定義される他のインデックス値と別個であるインデックス値「ｉ」に割り当てる。
【０３２６】
動作４７４０で、インデックス「ｉ」の値を量「ｎｕｍＳｃｅｎｅＣｈｉｌｄｒｅｎ」の値と比較する。量ｎｕｍＳｃｅｎｅＣｈｉｌｄｒｅｎの値は、このＸＭＴ−Ａ  Ｓｃｅｎｅ要素によって所有される従属要素の個数を示す。
【０３２７】
インデックス「ｉ」の値がｎｕｍＳｃｅｎｅＣｈｉｌｄｒｅｎの値と等しい場合に、動作４７４６で、この手順が完了し、処理は、動作４６５６で継続される。
【０３２８】
インデックス「ｉ」の値がｎｕｍＳｃｅｎｅＣｈｉｌｄｒｅｎの値と等しくない場合に、動作４７５０で、標準ＸＭＬ手段を使用して、ＸＭＴ−Ａ  Ｓｃｅｎｅ要素に従属するｉ番目の要素を入手し、結果の従属要素を「ｓｃｅｎｅＣｈｉｌｄ」要素として識別する。ｓｃｅｎｅＣｈｉｌｄ要素の要素名は、ストリング量「ｃｈｉｌｄＮａｍｅ」によって識別される。
【０３２９】
動作４７６０で、ストリング量ｃｈｉｌｄＮａｍｅの値をストリング「ＲＯＵＴＥ」と比較する。
【０３３０】
ストリング量ｃｈｉｌｄＮａｍｅの値が「ＲＯＵＴＥ」である場合に、動作４７６６で、ｂｏｏｌｅａｎ量ｂＨａｖｅＲｏｕｔｅｓの値を値「真」と比較する。
【０３３１】
ｂｏｏｌｅａｎ量ｂＨａｖｅＲｏｕｔｅｓの値が「真」でない場合に、動作４７７０で、標準ＸＭＬ手段を使用して、新しいｍｐ４−ｂｉｆｓ「Ｒｏｕｔｅｓ」要素を作成する。標準ＸＭＬ手段を使用して、結果のｍｐ４−ｂｉｆｓ「Ｒｏｕｔｅｓ」要素をｎｅｗＣｏｍｍａｎｄ要素に付加する。値「真」を、ｂｏｏｌｅａｎ量「ｂＨａｖｅＲｏｕｔｅｓ」に割り当てる。
【０３３２】
動作４７７６で、標準ＸＭＬ手段を使用して、新しいｍｐ４−ｂｉｆｓ「Ｒｏｕｔｅ」要素を作成する。標準ＸＭＬ手段を使用して、結果のｍｐ４−ｂｉｆｓ「Ｒｏｕｔｅ」要素をｍｐ４−ｂｉｆｓ「Ｒｏｕｔｅｓ」要素に付加する。
【０３３３】
ＸＭＴ−Ａ親要素の「ｆｒｏｍＮｏｄｅ」属性の値を、ＢＩＦＳ  ＮｏｄｅＩｄテーブル（図８９参照）の項目３９６６と比較する。一致する項目の「ｐｏｓｉｔｉｏｎ」３９６０の値を、整数量ｆｒｏｍＮｏｄｅＩｄに割り当て、結果を「１」だけ増分する。その結果を、ｍｐ４−ｂｉｆｓ  Ｒｏｕｔｅ要素の「ｆｒｏｍＮｏｄｅ」属性に割り当てる。
【０３３４】
ＸＭＴ−Ａ親要素の「ｆｒｏｍＦｉｅｌｄ」属性の値を、ｍｐ４−ｂｉｆｓ  Ｒｏｕｔｅ要素の「ｆｒｏｍＦｉｅｌｄＮａｍｅ」属性に割り当てる。
【０３３５】
ＸＭＴ−Ａ親要素の「ｔｏＮｏｄｅ」属性の値を、ＢＩＦＳ  ＮｏｄｅＩｄテーブル（図８９参照）の項目３９６６と比較する。一致する項目の「ｐｏｓｉｔｉｏｎ」３９６０の値を、整数量ｆｒｏｍＮｏｄｅＩｄに割り当て、結果を「１」だけ増分する。その結果を、ｍｐ４−ｂｉｆｓ  Ｒｏｕｔｅ要素の「ｔｏＮｏｄｅ」属性に割り当てる。
【０３３６】
ＸＭＴ−Ａ親要素の「ｔｏＦｉｅｌｄ」属性の値を、ｍｐ４−ｂｉｆｓ  Ｒｏｕｔｅ要素の「ｔｏＦｉｅｌｄＮａｍｅ」属性に割り当てる。
【０３３７】
ＸＭＴ−Ａ親要素の「ＤＥＦ」属性の値が指定されている場合に、この属性の値を、ＢＩＦＳ  ＲｏｕｔｅＩｄテーブル（図９０参照）の項目３９７６と比較する。一致する項目の「ｐｏｓｉｔｉｏｎ」３９７０の値を、整数量ｒｏｕｔｅＩｄに割り当て、結果を「１」だけ増分する。その結果をｍｐ４−ｂｉｆｓ  Ｒｏｕｔｅ要素の「ｒｏｕｔｅＩｄ」属性に割り当てる。ｂｏｏｌｅａｎ量ｂＵｓｅＮａｍｅｓの値が真である場合に、「ＤＥＦＳ」属性の値を、ｍｐ４−ｂｉｆｓ  Ｒｏｕｔｅ要素の「ｎａｍｅ」属性に割り当てる。
【０３３８】
ストリング量ｃｈｉｌｄＮａｍｅの値が「ＲＯＵＴＥ」でない場合に、動作４７８０で、現在のｓｃｅｎｅＣｈｉｌｄ要素を親要素として使用して、手順「ＸＭＴ−Ａ  ＢＩＦＳノードの処理」を実行する。標準ＸＭＬ手段を使用して、結果のｍｐ４−ｂｉｆｓノード要素をｎｅｗＣｏｍｍａｎｄ要素に付加する。処理は、動作４７９０で継続される。
【０３３９】
動作４７９０では、インデックス「ｉ」の値を「１」だけ増分し、動作４７４０でのｎｕｍＳｃｅｎｅＣｈｉｌｄｒｅｎとの比較を繰り返す。
【０３４０】
７．１．７．１０  「ＸＭＴ−Ａ  ＢＩＦＳノードの処理」手順
１００タイプを超えるＢＩＦＳノードが、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されている。各ＭＰＥＧ−４  ＢＩＦＳノードは、特定のノード名および１組の名前付きプロパティ・フィールドを有する。各名前付きプロパティ・フィールドは、ｂｏｏｌｅａｎ、ｉｎｔｅｇｅｒ、ｆｌｏａｔ、ｓｔｒｉｎｇ、「ｎｏｄｅ」、または「ｂｕｆｆｅｒ」などの特定のデータ型を有する。ＭＰＥＧ−４  ＢＩＦＳノードのタイプごとに、対応する同一の名前のノード要素が、ＸＭＴＡ文書およびｍｐ４ｂｉｆｓ文書で定義される。ｍｐ４ｂｉｆｓ文書について定義された各ノード要素は、対応するＭＰＥＧ−４  ＢＩＦＳノードのプロパティ・フィールドの名前と一致する名前を有する属性の組を所有する。
【０３４１】
図７５から７７からわかるように、データ型「ｎｏｄｅ」または「ｂｕｆｆｅｒ」を有する各ＭＰＥＧ−４  ＢＩＦＳプロパティ・フィールドは、ｍｐ４ｂｉｆｓノード要素の１つまたは複数の従属要素によって表すこともでき、ｍｐ４ｂｉｆｓノード要素の対応する属性は、このプロパティ・フィールドに関連する従属要素の要素名のリストからなる。これらの従属要素は、ノード要素またはコマンド要素とすることができる。この形で、各ｍｐ４ｂｉｆｓノード要素の構造は、対応するＭＰＥＧ−４  ＢＩＦＳノードの構造を模倣する。
【０３４２】
ＸＭＴ−Ａ文書について定義されたノード要素は、ｍｐ４ｂｉｆｓ文書について定義されたノード要素に類似するが、ＸＭＴ−Ａノード要素ごとに定義される属性に、「ｎｏｄｅ」または「ｂｕｆｆｅｒ」のデータ型を有しないプロパティだけが含まれる点が異なる。「ｎｏｄｅ」または「ｂｕｆｆｅｒ」のデータ型を有するＭＰＥＧ−４  ＢＩＦＳノードのプロパティごとに、ＸＭＴ−Ａ仕様では、属性を有しない同一の名前の従属属性要素が定義され、対応するプロパティ・フィールドは、これらの属性要素に従属するノード要素またはコマンド要素によって表される。
【０３４３】
図１０１からわかるように、ＸＭＴ−Ａ  ＢＩＦＳノード要素の変換処理は、ＸＭＴ−Ａノード要素の「ＵＳＥ」属性の値をストリング量「ｎｏｄｅＲｅｆ」に割り当てることによって、動作４８００で開始される。ＸＭＴ−Ａノード要素の「ＵＳＥ」属性の値が指定されている場合には、動作４８０６で、標準ＸＭＬ手段を使用して、新しいｍｐ４ｂｉｆｓ  ＲｅｕｓｅｄＮｏｄｅ要素を作成する。標準ＸＭＬ手段を使用して、新しいＲｅｕｓｅｄＮｏｄｅ要素を現在のｍｐ４ｂｉｆｓターゲット要素に挿入する。
【０３４４】
動作４８１０で、ストリング量「ｎｏｄｅＲｅｆ」の値を、ＢＩＦＳ  ＮｏｄｅＩｄテーブル（図８９参照）の項目３９６６と比較する。一致する項目の「ｐｏｓｉｔｉｏｎ」３９６０の値を、整数量ｎｏｄｅＩｄに割り当て、結果を「１」だけ増分する。その結果を、ｎｅｗＣｏｍｍａｎｄ要素の「ｎｏｄｅＲｅｆ」属性に割り当てる。このＸＭＴ−Ａノード要素の処理は、動作４８１６で完了し、処理は、ＸＭＴ−Ａ  ＢＩＦＳコマンド要素またはこのＸＭＴ−Ａノード要素を所有した親ＸＭＴ−Ａ  ＢＩＦＳノード要素で継続される。
【０３４５】
ＸＭＴ−Ａノード要素の「ＵＳＥ」属性の値が指定されていない場合に、動作４８２０で、標準ＸＭＬ手段を使用して、新しいｍｐ４ｂｉｆｓ  ＮｏｄｅＮａｍｅ要素を作成するが、「ＮｏｄｅＮａｍｅ」は、現在のＸＭＴ−Ａ  ＢＩＦＳノード要素の名前を表す。標準ＸＭＬ手段を使用して、新しい「ＮｏｄｅＮａｍｅ」要素を現在のｍｐ４ｂｉｆｓターゲット要素に挿入する。たとえば、現在のＸＭＴ−Ａ  ＢＩＦＳノード要素の要素名が「Ｇｅｏｍｅｔｒｙ」である場合に、新しいｍｐ４ｂｉｆｓ「Ｇｅｏｍｅｔｒｙ」要素を作成し、現在のｍｐ４ｂｉｆｓターゲット要素に挿入する。
【０３４６】
ＸＭＴ−Ａ  ＢＩＦＳノード要素の「ＤＥＦ」属性の値が指定されている場合に、「ＤＥＦ」属性の値を、ＢＩＦＳ  ＮｏｄｅＩｄテーブル（図８９参照）の項目３９６６と比較する。一致する項目の「ｐｏｓｉｔｉｏｎ」３９６０の値を、整数量ｎｏｄｅＩｄに割り当て、結果を「１」だけ増分する。その結果を、ｍｐ４ｂｉｆｓ「ＮｏｄｅＮａｍｅ」要素の「ｎｏｄｅＩｄ」属性に割り当てる。ｂｏｏｌｅａｎ量「ｂＵｓｅＮａｍｅｓ」が真である場合に、ＸＭＴ−Ａ  ＢＩＦＳノード要素の「ＤＥＦ」属性の値を、ｍｐ４ｂｉｆｓ  ＮｏｄｅＮａｍｅ要素の「ｎａｍｅ」属性に割り当てる。
【０３４７】
ＸＭＴ−Ａ  ＢＩＦＳノード要素の他のすべての属性の値が、新しいｍｐ４−ｂｉｆｓ  ＮｏｄｅＮａｍｅ要素の同一の名前の属性に値を割り当てるのに使用される。ほとんどの場合に、ｍｐ４ｂｉｆｓ  ＮｏｄｅＮａｍｅ要素の各属性に割り当てられる値は、ＸＭＴ−Ａ  ＢＩＦＳノード要素の対応する属性の値と等しい。下で識別されるいくつかの場合（データ・フォーマット変換）に、ｍｐ４ｂｉｆｓ  ＮｏｄｅＮａｍｅ要素の属性に割り当てられる値は、ＸＭＴ−Ａ  ＢＩＦＳノード要素の対応する属性の値から導出される。
【０３４８】
動作４８２６で、値「０」を、他所で定義される他のインデックス値と別個であるインデックス値「ｉ」に割り当てる。
【０３４９】
動作４８３０で、インデックス「ｉ」の値を、量「ｎｕｍＮｏｄｅＣｈｉｌｄｒｅｎ」の値と比較する。量ｎｕｍＮｏｄｅＣｈｉｌｄｒｅｎの値は、現在のＸＭＴ−Ａ  ＢＩＦＳノード要素によって所有される従属要素の個数を示す。ｎｕｍＮｏｄｅＣｈｉｌｄｒｅｎの非０の値は、「Ｎｏｄｅ」または「Ｃｏｍｍａｎｄ  Ｂｕｆｆｅｒ」のフィールド・データ型を有する１つまたは複数のデータ・フィールドを有するＭＰＥＧ−４  ＢＩＦＳノードを表すＸＭＴ−Ａ  ＢＩＦＳノード要素に限って可能である。
【０３５０】
インデックス「ｉ」の値がｎｕｍＮｏｄｅＣｈｉｌｄｒｅｎの値と等しい場合に、動作４８３６で、この手順が完了し、処理は、ＸＭＴ−Ａ  ＢＩＦＳコマンド要素またはこのＸＭＴ−Ａノード要素を所有した親ＸＭＴ−Ａ  ＢＩＦＳノード要素で継続される。
【０３５１】
インデックス「ｉ」の値がｎｕｍＮｏｄｅＣｈｉｌｄｒｅｎの値と等しくない場合に、動作４８４０で、標準ＸＭＬ手段を使用して、現在の親要素に従属するｉ番目の要素を入手し、結果の従属要素を「ｎｏｄｅＣｈｉｌｄ」要素として識別する。ｎｏｄｅＣｈｉｌｄ要素の要素名は、ストリング量「ｃｈｉｌｄＮａｍｅ」によって識別される。量「ｃｈｉｌｄＮａｍｅ」の値は、「Ｎｏｄｅ」または「Ｃｏｍｍａｎｄ  Ｂｕｆｆｅｒ」のフィールド・データ型を有するＭＰＥＧ−４  ＢＩＦＳノード・データ・フィールドのフィールド名と一致する。
【０３５２】
動作４８４６で、標準ＸＭＬ手段を使用して、ｎｏｄｅＣｈｉｌｄ要素に従属するすべての要素の要素名を得る。これらの要素名のそれぞれの値を、空白スペースで区切って一緒に連結して、ストリング量「ＮａｍｅＬｉｓｔ」に割り当てる。結果のストリング量「ＮａｍｅＬｉｓｔ」の値を、現在のｍｐ４ｂｉｆｓ  ＮｏｄｅＮａｍｅ要素のｃｈｉｌｄＮａｍｅ属性に割り当てる。たとえば、ｃｈｉｌｄＮａｍｅの値が「ｃｈｉｌｄｒｅｎ」である場合に、ＸＭＴ−Ａ「ｃｈｉｌｄｒｅｎ」要素に従属するＸＭＴ−Ａ要素の要素名のリストが、現在のｍｐ４ｂｉｆｓ  ＮｏｄｅＮａｍｅ要素の「ｃｈｉｌｄｒｅｎ」属性に割り当てられる。
【０３５３】
動作４８５０で、値「０」を、他所で定義される他のインデックス値と別個であるインデックス値「ｊ」に割り当てる。
【０３５４】
動作４８５６で、インデックス「ｊ」の値を、量「ｎｕｍＮｏｄｅＣｈｉｌｄＣｈｉｌｄｒｅｎ」の値と比較する。量ｎｕｍＮｏｄｅＣｈｉｌｄＣｈｉｌｄｒｅｎの値は、現在の「ｎｏｄｅＣｈｉｌｄ」要素によって所有される従属要素の個数を示す。
【０３５５】
インデックス「ｊ」の値が、量ｎｕｍＮｏｄｅＣｈｉｌｄＣｈｉｌｄｒｅｎの値と等しい場合に、動作４８６０で、インデックス「ｉ」の値を「１」だけ増分し、動作４８３０でのｎｕｍＮｏｄｅＣｈｉｌｄｒｅｎとの比較を繰り返す。
【０３５６】
インデックス「ｊ」の値が、量「ｎｕｍＮｏｄｅＣｈｉｌｄＣｈｉｌｄｒｅｎ」の値と等しくない場合に、動作４８６６で、標準ＸＭＬ手段を使用して、現在のｎｏｄｅＣｈｉｌｄ要素に従属するｊ番目の要素を入手し、結果の従属要素を「ａｔｔｒｉｂｕｔｅＣｈｉｌｄ」要素として識別する。ａｔｔｒｉｂｕｔｅＣｈｉｌｄ要素の要素名は、ストリング量「ａｔｔｒｉｂｕｔｅＣｈｉｌｄＮａｍｅ」によって識別される。
【０３５７】
動作４８６６で、ストリング量ｃｈｉｌｄＮａｍｅの値を、ストリング「ｂｕｆｆｅｒ」と比較する。
【０３５８】
ストリング量ｃｈｉｌｄＮａｍｅの値が「ｂｕｆｆｅｒ」である場合に、動作４８７０で、手順「ＸＭＴ−Ａコマンドの処理」を実行する。その後、標準ＸＭＬ手段を使用して、結果のｎｅｗＣｏｍｍａｎｄ要素を現在のｍｐ４−ｂｉｆｓ  ＮｏｄｅＮａｍｅ要素に付加する。手順「ＸＭＴ−Ａコマンドの処理」は、ｃｈｉｌｄＮａｍｅの値としてａｔｔｒｉｂｕｔｅＣｈｉｌｄＮａｍｅの値を使用する、図９６に示された手順「ＸＭＴ−Ａ  ｐａｒ要素の処理（パス２）」の動作４３６０から４３８６と同等である。これは、現在の手順が、必ず手順「ＸＭＴ−Ａ  ｐａｒ要素の処理（パス２）」に従属するので、再帰処理である。その後、この手順は、動作４８９０で継続される。
【０３５９】
ストリング量ｃｈｉｌｄＮａｍｅの値が「ｂｕｆｆｅｒ」でない場合に、動作４８８０で、手順「ＸＭＴ−Ａ  ＢＩＦＳノードの処理」を再帰的に実行する。その後、標準ＸＭＬ手段を使用して、結果のＮｏｄｅＮａｍｅ要素を現在のｍｐ４−ｂｉｆｓ  ＮｏｄｅＮａｍｅ要素に付加する。
【０３６０】
動作４８９０で、インデックス「ｊ」の値を「１」だけ増分し、動作４８５６でのｎｕｍＮｏｄｅＣｈｉｌｄＣｈｉｌｄｒｅｎとの比較を繰り返す。
【０３６１】
７．１．７．１１  データ・フォーマット変換
データ・フォーマット変換は、ＸＭＴ−Ａ  ＢＩＦＳノードの次のプロパティ・フィールド属性に適用される。これらの変換は、ＸＭＴ−Ａ  Ｉｎｓｅｒｔコマンド要素動作４４３０およびＸＭＴ−Ａ  Ｒｅｐｌａｃｅコマンド要素動作４６２４の「ｖａｌｕｅ」属性の値にも適用される。ＸＭＴ−Ａ  ＩｎｓｅｒｔコマンドおよびＸＭＴ−Ａ  Ｒｅｐｌａｃｅコマンドの場合に、データ型は、対応するａｔＦｉｅｌｄ属性の値によって決定される。
【０３６２】
１．データ型「ｃｏｌｏｒ」を有するフィールド・プロパティの各ＸＭＴ−Ａ属性値は、６桁の１６進ストリング「＃ＲＲＧＧＢＢ」によって表される。これは、３部分の１０進表現「ｒｒｒ  ｇｇｇ  ｂｂｂ」に変換され、「ｒｒｒ」は、１６進数値０ｘＲＲを２５６で割ったものの１０進表現、「ｇｇｇ」は、１６進数値０ｘＧＧを２５６で割ったものの１０進表現、「ｂｂｂ」は、１６進数値０ｘＢＢを２５６で割ったものの１０進表現である。
【０３６３】
２．データ型「ｓｔｒｉｎｇ」を有するフィールド・プロパティの各ＸＭＴ−Ａ属性値は、ＸＭＴ−Ａについて定義された引用符付きストリング・フォーマットから、ｍｐ４ｂｉｆｓによって使用される代替フォーマットに変換される。この変換には、バックスラッシュ文字（＼）が前につかない場合の「引用符」文字（”）の除去、ストリング内の空白スペースおよび他の「特殊」文字のパーセント文字（％）およびそれに続く２桁の１６進数コードへの置換、ならびに空白スペースによる複数ストリングの分離が含まれる。「特殊」文字に、空白スペース、引用符、パーセント（％）、アンパサンド（＆）、大なり（＞）、３２未満の数値を有する文字、および１２８以上の数値を有する文字が含まれる。空白スペースは、複数のストリングからなる属性フィールド内の個々のストリングを区切るのに使用される。このストリング属性の変換は、本発明に必要ではなく、本発明の代替実施形態では省略することができる。
【０３６４】
３．データ型「ｕｒｌ」を有するフィールド・プロパティのＸＭＴ−Ａ属性値が、「ｏｄ：／／」または「ｏｄｉｄ：／／」から始まる場合に、対応するｍｐ４ｂｉｆｓ属性に割り当てられる値は、「Ｏｄｉｄ：」と、それに続く、ＸＭＴ−Ａ  ｕｒｌ属性値の残り（「ｏｄ：／／」または「ｏｄｉｄ：／／」に続く）と一致するＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ  ３９１０を有するオブジェクト・テーブル（図８８参照）内の項目３９００のインデックスによって与えられる。
【０３６５】
７．１．８  ｍｐ４ｂｉｆｓ文書へのコマンド・フレームの挿入
ＸＭＴ−Ａ  Ｂｏｄｙ要素１２０の要素に対する第２パス動作３１３０が完了した後に、ｃｏｍｍａｎｄＦｒａｍｅ要素２８３０の一時的に順序付けられたリストの内容を、ｍｐ４ｂｉｆｓ文書２８００に挿入する。空のｃｏｍｍａｎｄＦｒａｍｅが破棄され、「ｔｉｍｅ」属性の同一の値を有す複数のｃｏｍｍａｎｄＦｒａｍｅ要素が、単一のｃｏｍｍａｎｄＦｒａｍｅ要素に合併される。
【０３６６】
ｍｐ４ｆｉｌｅ文書の「ｍｏｏｖ」要素の「ｄｕｒａｔｉｏｎ」属性の値が、最後のｃｏｍｍａｎｄＦｒａｍｅ要素２８３０のｔｉｍｅ値に基づいて更新される。この属性に割り当てられる値は、最後のｃｏｍｍａｎｄＦｒａｍｅ要素から入手された秒単位の値と、「ｍｏｏｖ」要素２３２０のｔｉｍｅＳｃａｌｅ属性の積によって決定される。ｓｄｓｍデータのｔｒａｋ要素２３５０および２６００の「ｄｕｒａｔｉｏｎ」属性およびこのｔｒａｋ要素２６００に従属する「ｍｄｉａ」要素２６０４の「ｄｕｒａｔｉｏｎ」属性のそれぞれが、類似する形で更新される。
【０３６７】
７．１．９  ｏｄｓｍのｍｄａｔ要素へのＯＤコマンドの挿入
ＸＭＴ−Ａ文書にメディア・オブジェクトが含まれることがわかった場合に、ＸＭＴ−Ａ「Ｂｏｄｙ」要素動作の第１パス３１２０で作成されたオブジェクト・テーブル（図８８参照）を使用して、ｏｄｓｍ（ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ）のＸＭＬ記述を構成する。このテーブルが項目を有しない場合には、ｏｄｓｍが存在せず、このステップはスキップされる。オブジェクト・テーブルに少なくとも１つの項目がある場合には、このテーブルを使用して、図９２に示されている、ソート済みオブジェクト・テーブルを作成する。
【０３６８】
ソート済みオブジェクト・テーブルの各ｅｎｔｒｙ（行）３９９０は、オブジェクト・テーブル内のＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ項目３９２０に対応するＯｄＩｄ値３９９２、ｔｉｍｅ値３９９４、およびｂｏｏｌｅａｎフラグ（ｓｔａｒｔ）３９９６からなる。
【０３６９】
ソート済みオブジェクト・テーブルに、オブジェクト・テーブル内の項目３９００ごとに２つのｅｎｔｒｙ  ３９９０が含まれる。ＯｄＩｄ列３９９２の各項目の値は、オブジェクト・テーブル内の対応する項目３９２０にある値のコピーである。ｔｉｍｅ列３９９４の項目の値は、オブジェクト・テーブル内のｓｔａｒｔＴｉｍｅ列３９３０またはｓｔｏｐＴｉｍｅ列３９４０のいずれかの対応する項目の値のコピーである。ソート済みオブジェクト・テーブルのｔｉｍｅ列３９９４の項目が、オブジェクト・テーブルのｓｔａｒｔＴｉｍｅ列３９３０の対応する項目から導出された場合に、値「真」が、ソート済みオブジェクト・テーブルのｓｔａｒｔ列３９９６の対応する項目に割り当てられる。そうでない場合には、値「偽」が、ソート済みオブジェクト・テーブルのｓｔａｒｔ列３９９６の対応する項目に割り当てられる。
【０３７０】
ソート済みオブジェクト・テーブルの項目は、ｔｉｍｅ列３９９４の昇順でソートされる。ソート済みオブジェクト・テーブルの作成の後に、ｏｄｓｍのＸＭＬ表現が、図１０２に示されているように作成される。
【０３７１】
動作４９００で、値「０」を整数量「ｎｕｍＳａｍｐｌｅｓ」、「ｏｄｓｍＳｉｚｅ」、および「ｓａｍｐｌｅＳｉｚｅ」に割り当てる。負の値を、浮動小数点量「ｐｒｅｖＴｉｍｅ」に割り当てる。
【０３７２】
動作４９０６で、標準ＸＭＬ手段を使用して、ｏｄｓｍの「ｍｄａｔ」要素２３１０および２４００内の「ｏｄｓｍＣｈｕｎｋ」要素２４７０を突き止める。標準ＸＭＬ手段を使用して、ｏｄｓｍについて前に作成された「ｔｒａｋ」要素２３５０および２６００内の「ｓｔｔｓ」要素２６６０、「ｓｔｓｚ」要素２６６８、および「ｓｔｓｃ」要素２６５６を突き止める。標準ＸＭＬ手段を使用して、この「ｓｔｓｃ」要素２６５６に従属する「ｓａｍｐｌｅＴｏＣｈｕｎｋ」要素を突き止める。これらの要素は、すべて、前にＸＭＴ−Ａ「ヘッダ」要素の処理３１１６中に作成されたものである。
【０３７３】
動作４９１０で、値「０」を、他所で定義される他のインデックス値と別個であるインデックス値「ｉ」に割り当てる。
【０３７４】
動作４９１６で、インデックス「ｉ」の値を、量「ｎｕｍＥｎｔｒｉｅｓ」の値と比較する。量ｎｕｍＥｎｔｒｉｅｓの値は、ソート済みオブジェクト・テーブルの行数３９９０を示す。
【０３７５】
インデックス「ｉ」の値がｎｕｍＥｎｔｒｉｅｓの値と等しくない場合に、動作４９４０で、ソート済みオブジェクト・テーブルのｔｉｍｅ列３９９４のｉ番目の項目の値を、量ｐｒｅｖＴｉｍｅの現在値と比較する。
【０３７６】
ソート済みオブジェクト・テーブルのｔｉｍｅ列３９９４のｉ番目の項目の値が量ｐｒｅｖＴｉｍｅの現在値より大きい場合に、動作４９４６で、標準ＸＭＬ手段を使用して、新しいｍｐ４ｆｉｌｅ  ｏｄｓｍＳａｍｐｌｅ要素を作成する。そうでない場合には、処理は動作４９７０で継続される。
【０３７７】
次に、標準ＸＭＬ手段を使用して、新しいｏｄｓｍＳａｍｐｌｅ要素を、動作４９０６で得られたｏｄｓｍＣｈｕｎｋ要素に挿入する。量ｏｄｓｍＳｉｚｅの現在値を、新しいｏｄｓｍＳａｍｐｌｅ要素の「ｏｆｆｓｅｔ」属性に割り当て、ソート済みオブジェクト・テーブルの現在の項目（「ｉ」）の「ｔｉｍｅ」列３９９４の値を、新しいｏｄｓｍＳａｍｐｌｅ要素の「ｔｉｍｅ」属性に割り当てる。
【０３７８】
動作４９５０で、インデックス「ｉ」の値を「０」と比較する。
【０３７９】
インデックス「ｉ」の値が０を超える場合に、動作４９５６で、標準ＸＭＬ手段を使用して、新しいｍｐ４ｆｉｌｅ  ｔｉｍｅＴｏＳａｍｐｌｅ要素を作成する。そうでない場合には、処理は動作４９６６で継続される。
【０３８０】
次に、標準ＸＭＬ手段を使用して、新しいｔｉｍｅＴｏＳａｍｐｌｅ要素を、動作４９０６で得られたｓｔｔｓ要素に挿入する。ソート済みオブジェクト・テーブルの現在の項目のｔｉｍｅ値３９９４と量「ｐｒｅｖＴｉｍｅ」の値との間の差を、新しいｔｉｍｅＴｏＳａｍｐｌｅ要素の「ｄｕｒａｔｉｏｎ」属性に割り当てる。値「１」を、新しい「ｔｉｍｅＴｏＳａｍｐｌｅ」要素の「ｎｕｍＳａｍｐｌｅｓ」属性に割り当てる。
【０３８１】
標準ＸＭＬ手段を使用して、新しいｍｐ４ｆｉｌｅ  ｓａｍｐｌｅＳｉｚｅ要素を作成する。次に、標準ＸＭＬ手段を使用して、新しいｓａｍｐｌｅＳｉｚｅ要素を、動作４９０６で得られたｓｔｓｚ要素に挿入する。量ｓａｍｐｌｅＳｉｚｅの値を、新しい「ｓａｍｐｌｅＳｉｚｅ」要素の「ｓｉｚｅ」属性に割り当てる。
【０３８２】
動作４９６０で、量ｏｄｓｍＳｉｚｅの値を量ｓａｍｐｌｅＳｉｚｅの値だけ増分し、値「０」を量ｓａｍｐｌｅＳｉｚｅの値に割り当て、量ｎｕｍＳａｍｐｌｅｓの値を「１」だけ増分する。
【０３８３】
動作４９６６で、ソート済みオブジェクト・テーブルのｔｉｍｅ列３９９４のｉ番目の項目の値を、量「ｐｒｅｖＴｉｍｅ」に割り当てる。
【０３８４】
動作４９７０で、ソート済みオブジェクト・テーブルのｓｔａｒｔ列３９９６のｉ番目の項目の値を、値「真」と比較する。
【０３８５】
ソート済みオブジェクト・テーブルのｓｔａｒｔ列３９９６のｉ番目の項目の値が値「真」と等しい場合に、動作４９８０で、標準ＸＭＬ手段を使用して、新しいｍｐ４ｆｉｌｅ  ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅ要素２５４０を作成する。次に、標準ＸＭＬ手段を使用して、新しいＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅ要素２５４０を、動作４９４６で作成されたｏｄｓｍＳａｍｐｌｅ要素２５１０に挿入する。
【０３８６】
標準ＸＭＬ手段を使用して、新しいｍｐ４ｆｉｌｅ  ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２５５０を作成する。次に、標準ＸＭＬ手段を使用して、新しいＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２５５０を新しいＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅ要素２５４０に挿入する。ソート済みオブジェクト・テーブルの現在の項目に関連する量「ＯｄＩｄ」３９９２の値を、新しいＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２５５０の「ＯｄＩｄ」属性に割り当てる。
【０３８７】
標準ＸＭＬ手段を使用して、新しいｍｐ４ｆｉｌｅ  ＥｓＩｄＲｅｆ要素２５６０を作成する。次に、標準ＸＭＬ手段を使用して、新しいＥｓＩｄＲｅｆ要素２５６０を新しいＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素２５５０に挿入する。ソート済みオブジェクト・テーブルの現在の項目のＯｄＩｄ値３９９２と一致する「ＯｄＩｄ」値３９２０に関連するオブジェクト・テーブル（図８８参照）内の「ＥｓＩｄ」項目３９５０の値を、「ＥｓＩｄＲｅｆ」要素２５６０の「ＥｓＩｄ」属性に割り当てる。
【０３８８】
動作４９８６で、量ｓａｍｐｌｅＳｉｚｅの値を「１０」だけ増分する。
【０３８９】
ソート済みオブジェクト・テーブルのｓｔａｒｔ列３９９６のｉ番目の項目の値が値「真」を有しない場合に、動作４９９０で、標準ＸＭＬ手段を使用して、新しいｍｐ４ｆｉｌｅ  ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅ要素２５７０を作成する。次に、標準ＸＭＬ手段を使用して、新しいＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅ要素２５７０を、動作４９４６で作成されたｏｄｓｍＳａｍｐｌｅ要素２５１０に挿入する。ソート済みオブジェクト・テーブルの現在の項目に関連する量「ＯｄＩｄ」３９９２の値を、新しいＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅ要素２５７０の「ＯｄＩｄ」属性に割り当てる。
【０３９０】
動作４９９６で、量ｓａｍｐｌｅＳｉｚｅの値を「４」だけ増分する。
【０３９１】
動作４９３６で、インデックス「ｉ」の値を「１」だけ増分し、インデックス「ｉ」の値ｎｕｍＥｎｔｒｉｅｓとの比較を繰り返す。
【０３９２】
インデックス「ｉ」の値がｎｕｍＥｎｔｒｉｅｓの値と等しい場合に、動作４９２０で、量「ｏｄｓｍＳｉｚｅ」の値をｓａｍｐｌｅＳｉｚｅの値だけ増分し、量ｎｕｍＳａｍｐｌｅｓの値を「１」だけ増分する。
【０３９３】
動作４９２６で、標準ＸＭＬ手段を使用して、新しいｍｐ４ｆｉｌｅ  ｔｉｍｅＴｏＳａｍｐｌｅ要素を作成する。次に、標準ＸＭＬ手段を使用して、新しいｔｉｍｅＴｏＳａｍｐｌｅ要素を、動作４９０６で得られたｓｔｔｓ要素に挿入する。ソート済みオブジェクト・テーブルの現在の項目のｔｉｍｅ値３９９４と量「ｐｒｅｖＴｉｍｅ」の値との間の差を、新しいｔｉｍｅＴｏＳａｍｐｌｅ要素の「ｄｕｒａｔｉｏｎ」属性に割り当てる。値「１」を、新しい「ｔｉｍｅＴｏＳａｍｐｌｅ」要素の「ｎｕｍＳａｍｐｌｅｓ」属性に割り当てる。
【０３９４】
標準ＸＭＬ手段を使用して、新しいｍｐ４ｆｉｌｅ  ｓａｍｐｌｅＳｉｚｅ要素を作成する。次に、標準ＸＭＬ手段を使用して、新しいｓａｍｐｌｅＳｉｚｅ要素を、動作４９０６で得られたｓｔｓｚ要素に挿入する。量ｓａｍｐｌｅＳｉｚｅの値を、新しい「ｓａｍｐｌｅＳｉｚｅ」要素の「ｓｉｚｅ」属性に割り当てる。
【０３９５】
動作４９３０で、量「ｎｕｍＳａｍｐｌｅｓ」の値を「ｓａｍｐｌｅＴｏＣｈｕｎｋ」要素に割り当てる。量ｏｄｓｍＳｉｚｅの値を「ｏｄｓｍＣｈｕｎｋ」要素の「ｓｉｚｅ」属性に割り当てる。
【０３９６】
７．１．１０  ｍｐ４−ｂｉｆｓ文書およびｍｐ４−ｆｉｌｅ文書のｂｉｆｓＣｏｎｆｉｇの更新
ＢＩＦＳ  ＮｏｄｅＩＤテーブル（図８９参照）の項目数を表すのに必要な最小のビット数を判定し、量「ｎｕｍＮｏｄｅＩｄＢｉｔｓ」に割り当てる。これは、２の「ｎ」乗がこのテーブルの項目数より大きくなる、最小の数「ｎ」である。量ｎｕｍＮｏｄｅＩｄＢｉｔｓの値を、ステップ２で作成された「ｂｉｆｓＣｏｎｆｉｇ」要素（２８１０）の「ｎｏｄｅＩｄＢｉｔｓ」属性に割り当てる。この値は、ステップ４で作成されたｓｄｓｍ（ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ）の「ｔｒａｋ」要素２３５０および２６００に含まれる「ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」要素２７２０の「ｎｏｄｅＩｄＢｉｔｓ」属性にも割り当てられる。
【０３９７】
類似する形で、ＢＩＦＳ  ＲｏｕｔｅｅＩＤテーブル（図９０参照）の項目数を表すのに必要な最小のビット数を判定し、量「ｎｕｍＲｏｕｔｅＩｄＢｉｔｓ」に割り当てる。量ｎｕｍＲｏｕｔｅＩｄＢｉｔｓの値を、ステップ２で作成された「ｂｉｆｓＣｏｎｆｉｇ」要素２８１０のｒｏｕｔｅＩｄＢｉｔｓ属性に割り当てる。この値は、ステップ４で作成されたｓｄｓｍ（ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ）の「ｔｒａｋ」要素２３５０および２６００に含まれる「ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」要素２７２０のｒｏｕｔｅＩｄＢｉｔｓ属性にも割り当てられる。
【０３９８】
このステップによって、ｍｐ４−ｆｉｌｅ文書およびｍｐ４−ｂｉｆｓ文書の作成が完了する。ｍｐ４バイナリ・ファイルを作成する処理は、「３．ｂ．  Ｃｒｅａｔｉｏｎ  ｏｆ  ａｎ  ｍｐ４  ｂｉｎａｒｙ  ｆｉｌｅ  ｂａｓｅｄ  ｏｎ  ｔｈｅ  ｉｎｔｅｒｍｅｄｉａｔｅ  ＸＭＬ  ｄｏｃｕｍｅｎｔｓ」で継続される。
【０３９９】
７．１．１０．１  ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒの処理
各「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」要素は、図８２に示されているように処理される。この手順は、ＸＭＴ−Ａ文書１００のＢｏｄｙ要素１２０に含まれるＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素６３０ならびにＸＭＴ−Ａ文書１００のＨｅａｄｅｒ要素１１０に含まれるＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素１８０および１９０の処理に使用される。
【０４００】
各「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」要素は、「ＥＳ＿ＩＤ」という名前の属性を所有し、この属性の値が、ストリング量「ＥＳ＿ＤｅｓｃｒｉｐｔｏｒＩｄ」に割り当てられる。
【０４０１】
手順「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒの処理」は、動作３４００の手順「ｄｅｃＣｏｎｆｉｇＤｅｓｃｒ要素の処理」から始まる。この手順は、次の４ステップからなる。
【０４０２】
１．標準ＸＭＬ手段を使用して、ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素６４０に従属するｄｅｃＣｏｎｆｉｇＤｅｓｃｒ要素６４６を入手する。
【０４０３】
２．標準ＸＭＬ手段を使用して、ｄｅｃＣｏｎｆｉｇＤｅｓｃｒ要素６４６に従属するＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０を入手する。
【０４０４】
３．ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素６５０の「ｓｔｒｅａｍＴｙｐｅ」属性の値を使用して、このＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素によって記述されるデータ・ストリームのｓｔｒｅａｍＴｙｐｅプロパティの数値を確立する。「ｓｔｒｅａｍＴｙｐｅ」属性の値は、数値または、ＭＰＥＧ−４  ｓｙｓｔｅｍｓ仕様のテーブルで定義された英数字ストリングの組の１つからなるものとすることができる。これらの定義済みストリングに、「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」、「ＳｃｅｎｅＤｅｓｃｒｉｐｔｉｏｎ」、「Ｖｉｓｕａｌ」、「Ａｕｄｉｏ」などが含まれる。「ｓｔｒｅａｍＴｙｐｅ」属性の値が、これらのストリングの１つと一致する場合に、ＭＰＥＧ−４テーブルの関連する項目に基づいて、数値がｓｔｒｅａｍＴｙｐｅに割り当てられる。たとえば、「ｓｔｒｅａｍＴｙｐｅ」属性の値が「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」である場合に、値１がｉＳｔｒｅａｍＴｙｐｅに割り当てられる。それ以外の場合に、「ｓｔｒｅａｍＴｙｐｅ」属性の値は、数値を表さなければならず、この数値が、このストリームのｓｔｒｅａｍＴｙｐｅプロパティに割り当てられる。
【０４０５】
４．ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ要素の「ｏｂｊｅｃｔＴｙｐｅＩｎｄｉｃａｔｉｏｎ」属性の値を使用して、このＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素によって記述されるデータ・ストリームの「ｏｂｊｅｃｔＴｙｐｅ」プロパティの数値を確立する。「ｏｂｊｅｃｔＴｙｐｅＩｎｄｉｃａｔｉｏｎ」属性の値は、数値またはＭＰＥＧ−４  ｓｙｓｔｅｍｓ仕様のテーブルで定義された英数字ストリングの組の１つからなるものとすることができる。この定義済みストリングに、「ＭＰＥＧ４Ｓｙｓｔｅｍｓ１」、「ＭＰＥＧ４Ｖｉｓｕａｌ」、「ＭＰＥＧ４Ａｕｄｉｏ」、「Ｕｎｓｐｅｃｉｆｉｅｄ」などが含まれる。「ｏｂｊｅｃｔＴｙｐｅＩｎｄｉｃａｔｉｏｎ」属性の値が、これらのストリングの１つと一致する場合に、ＭＰＥＧ−４テーブルの関連する項目に基づいて、数値がｉＯｂｊｅｃｔＴｙｐｅに割り当てられる。たとえば、「ｏｂｊｅｃｔＴｙｐｅＩｎｄｉｃａｔｉｏｎ」属性の値が「Ｕｎｓｐｅｃｉｆｉｅｄ」である場合に、値２５５がｉＯｂｊｅｃｔＴｙｐｅに割り当てられる。そうでない場合に、「ｏｂｊｅｃｔＴｙｐｅＩｎｄｉｃａｔｉｏｎ」属性の値は、数値を表さなければならず、この数値が、このストリームのｏｂｊｅｃｔＴｙｐｅプロパティに割り当てられる。
【０４０６】
手順「ｄｅｃＣｏｎｆｉｇＤｅｓｃｒ要素の処理」（３４００）の次に、手順「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒの処理」は、動作３４１０の手順「ｓｌＣｏｎｆｉｇＤｅｓｃｒ要素の処理」で継続する。この手順は、次の３ステップからなる。
【０４０７】
１．標準ＸＭＬ手段を使用して、「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」要素６４０に従属する「ｓｌＣｏｎｆｉｇＤｅｓｃｒ」要素６６０を入手する。
【０４０８】
２．次に、標準ＸＭＬ手段を使用して、「ｓｌＣｏｎｆｉｇＤｅｓｃｒ」要素６６０に従属する「ＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素６６６を入手する。
【０４０９】
３．「ＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」６６６の「ｔｉｍｅＳｔａｍｐＲｅｓｏｌｕｔｉｏｎ」属性の値を使用して、このストリームのｔｉｍｅＳｃａｌｅプロパティに数値を割り当てる。「ｔｉｍｅＳｔａｍｐＲｅｓｏｌｕｔｉｏｎ」属性の値が指定されていない場合には、デフォルト値をｔｉｍｅＳｃａｌｅに割り当てる。このデフォルト値は、ＭＰＥＧ−４ビジュアル（ｉＳｔｒｅａｍＴｙｐｅ＝４かつｉＯｂｊｅｃｔＴｙｐｅ＝３２）を除くすべてのストリームについて１０００であり、ＭＰＥＧ−４ビジュアルの場合には、デフォルトｔｉｍｅＳｃａｌｅ値は３０である。
【０４１０】
動作３４１０の手順「ｓｌＣｏｎｆｉｇＤｅｓｃｒ要素の処理」に続いて、手順「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒの処理」は、動作３４２０の手順「ＳｔｒｅａｍＳｏｕｒｃｅ要素の処理」で継続される。
【０４１１】
ＸＭＴ−Ａ  Ｂｏｄｙ要素１２０に含まれるＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ６３０の場合に、手順「ＳｔｒｅａｍＳｏｕｒｃｅ要素の処理」は、次の２ステップからなる。
【０４１２】
１．標準ＸＭＬ手段を使用して、「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」要素に従属する「ＳｔｒｅａｍＳｏｕｒｃｅ」要素を入手する。
【０４１３】
２．この「ＳｔｒｅａｍＳｏｕｒｃｅ」要素の「ｕｒｌ」属性の値を、「ｍｅｄｉａＦｉｌｅＮａｍｅ」という名前の量に割り当てる。
【０４１４】
ＸＭＴ−Ａ  Ｈｅａｄｅｒ要素１１０に含まれるＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ１８０および１９０の場合に、ＳｔｒｅａｍＳｏｕｒｃｅ要素は、存在せず、量「ｓｄｓｍＦｉｌｅＮａｍｅ」の値が、量「ｍｅｄｉａＦｉｌｅＮａｍｅ」に割り当てられる。
【０４１５】
動作３４２０の手順「ＳｔｒｅａｍＳｏｕｒｃｅ要素の処理」に続いて、手順「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒの処理」は、動作３４３０の手順「指定されたストリームのｍｄａｔ要素の作成」で継続される。図８３からわかるように、手順「指定されたストリームのｍｄａｔ要素の作成」３４３０は、次のステップからなる。
【０４１６】
１．動作３５００：標準ＸＭＬを使用して、新しい「ｍｄａｔ」要素２３１０を作成し、ｍｐ４ｆｉｌｅ文書２３００内で前に作成された「ｍｏｏｖ」要素２３２０の前に挿入する。
【０４１７】
２．動作３５０６：量「ｎｅｘｔＴｒａｃｋＩｄ」の現在値を、新しいｍｄａｔ要素２３１０の「ｍｄａｔＩｄ」属性に割り当てる。この要素の「ｓｉｚｅ」属性に、０の値を割り当てる。
【０４１８】
３ａ．動作３５１０：手順「ｄｅｃＣｏｎｆｉｇＤｅｓｃｒ要素の処理」動作３４００によって確立されたｓｔｒｅａｍＴｙｐｅプロパティを値「１」と比較する。
【０４１９】
４ａ．ｓｔｒｅａｍＴｙｐｅプロパティの値が「１」である場合に、動作３５１６で、新しい「ｏｄｓｍ」要素２４２０および２４６０を作成し、新しい「ｍｄａｔ」要素２３１０および２４００に挿入し、動作３５２０で、量「ｎｅｘｔＴｒａｃｋＩｄ」の現在値を、この新しい「ｏｄｓｍ」要素２４２０の「ｔｒａｃｋＩＤ」属性に割り当て、動作３５２６で、新しい「ｏｄｓｍＣｈｕｎｋ」要素２４７０を作成し、新しい「ｏｄｓｍ」要素２４６０に挿入し、動作３５３０で、値０を新しい「ｏｄｓｍＣｈｕｎｋ」要素２４７０の「ｏｆｆｓｅｔ」属性に割り当てる。
【０４２０】
３ｂ．動作３５４０：ｓｔｒｅａｍＴｙｐｅプロパティの値が「１」でない場合に、ｓｔｒｅａｍＴｙｐｅプロパティの値を値「３」と比較する。
【０４２１】
４ｂ．ｓｔｒｅａｍＴｙｐｅプロパティの値が「３」である場合に、動作３５４６で、新しい「ｓｄｓｍ」要素２４１０および２４４０を作成し、「ｍｄａｔ」要素２３１０および２４００に挿入する。動作３５５０で、量「ｎｅｘｔＴｒａｃｋＩｄ」の現在値を、この新しいｓｄｓｍ要素２４１０の「ｔｒａｃｋＩＤ」属性に割り当て、量「ｍｅｄｉａＦｉｌｅＮａｍｅ」の値を、新しいｓｄｓｍ要素２４１０の「ｘｍｌＦｉｌｅ」属性に割り当てる。動作３５５６で、新しい「チャンク」要素２４５０を作成し、新しい「ｓｄｓｍ」要素２４４０に挿入する。動作３５６０で、値０を、新しい「チャンク」要素２４５０の「ｏｆｆｓｅｔ」属性に割り当てる。
【０４２２】
４ｃ．動作３５６６：ｓｔｒｅａｍＴｙｐｅプロパティの値が「１」でも「３」でもない場合に、新しい「ｍｅｄｉａＦｉｌｅ」要素２４３０および２４８０を作成し、新しい「ｍｄａｔ」要素２３１０および２４００に挿入する。動作３５７０で、量「ｎｅｘｔＴｒａｃｋＩｄ」の現在値を新しい「ｍｅｄｉａＦｉｌｅ」要素２４３０の「ｔｒａｃｋＩＤ」属性に割り当てる。動作３５７６で、新しい「チャンク」要素２４９０を作成し、新しい「ｍｅｄｉａＦｉｌｅ」要素２４８０に挿入する。動作３５８０で、値０を、新しい「チャンク」要素２４９０の「ｏｆｆｓｅｔ」属性に割り当てる。
【０４２３】
値０を「ｏｆｆｓｅｔ」属性に割り当てる動作３５３０、３５６０、および３５８０の処理によって、手順「指定されたストリームのｍｄａｔ要素の作成」３４３０が完了する。この手順３４３０に続いて、手順「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒの処理」は、手順「指定されたストリームのｔｒａｋ要素の作成」３４４０で継続される。この手順は、下の「ｔｒａｋ要素の作成」で説明する。この手順３４４０に続いて、手順「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒの処理」３３４０は、テスト「指定されたストリームはｓｄｓｍまたはｏｄｓｍか」３４５０で継続される。
【０４２４】
現在のストリームがｏｄｓｍ（ｓｔｒｅａｍＴｙｐｅの値が１）またはｓｄｓｍ（ｓｔｒｅａｍＴｙｐｅの値が３）である場合に、動作３４６０で、新しい「ＥｓＩｄＩｎｃ」要素２３８０を作成し、ｍｐ４ｆｉｌｅ文書２３００の「ｍｐ４ｆｉｏｄｓ」要素２３６０に付加する。次に、量「ｎｅｘｔＴｒａｃｋＩＤ」の値を、新しい「ＥｓＩｄＩｎｃ」要素２３８０の「ｔｒａｃｋＩＤ」属性２３９０に割り当てる。
【０４２５】
そうでない場合（量「ｓｔｒｅａｍＴｙｐｅ」の値が「１」でも「３」でもない）に、動作３４７０で、量「ｎｅｘｔＴｒａｃｋＩＤ」の値を、ｏｄｓｍの「ｔｒａｋ」要素２６００の「ｔｒｅｆ」要素２６３６内の「ｍｐｏｄ」要素２６４０の「ｔｒａｃｋＩＤ」要素の値に割り当てる。量「ｎｅｘｔＴｒａｃｋＩＤ」の値は、ＸＭＴ−Ａ「Ｂｏｄｙ」要素に対する第１パスで作成されたオブジェクト・テーブルの「ＯｄＩｄ」列３９２０の項目にも割り当てられる。この項目は、「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」項目３９１０の値が、この「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」要素６３０を含む「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素６００の「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」属性６０６と一致する行に対応する。量「ｎｅｘｔＥｓＩｄ」の値を、このテーブルの同一の行の「ＥｓＩｄ」項目３９５０に割り当てる。その後、量「ｎｅｘｔＥｓＩｄ」の値を１つ増分する。
【０４２６】
どちらの場合でも、動作３４８０で、量ｎｅｘｔＴｒａｃｋＩＤの値を１つ増分し、量ｎｅｘｔＴｒａｃｋＩＤの新しい値を、「ｍｏｏｖ」要素２３２０の「ｎｅｘｔＴｒａｃｋＩＤ」属性に割り当てる。
【０４２７】
これで、図８２に示された「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」要素の処理が完了する。この手順は、ＸＭＴ−Ａ文書１００の「Ｈｅａｄｅｒ」要素１１０内の「ＩｎｉｔｉａｌＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素１３０内の「Ｄｅｓｃｒ」１６０要素内にある「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」要素１８０および１９０ごとに実行される。この処理は、ＸＭＴ−Ａ文書１００の「Ｂｏｄｙ」要素１２０内にある「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素６００内の「Ｄｅｓｃｒ」６１０要素内の「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」要素６３０ごとにも実行される。
【０４２８】
この手順（ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒの処理）の完了に続いて、ｍｐ４ｆｉｌｅ文書２２５０作成の処理は、図８１に示された手順「ｅｓＤｅｓｃｒ要素の処理」の動作３３５０のインデックス「ｉ」の値の増分のステップで継続される。
【０４２９】
７．１．１０．２  ｔｒａｋ要素の作成
図８４からわかるように、手順「指定されたストリームのｔｒａｋ要素の作成」３４４０は、次の１１個のステップからなる。
【０４３０】
１．動作３６００で、標準ＸＭＬ手段を使用して、新しい「ｔｒａｋ」要素２３５０および２６００を作成し、ｍｐ４ｆｉｌｅ文書２３００の「ｍｏｏｖ」要素２３２０に挿入する。
【０４３１】
新しいｔｒａｋ要素２６００の次の属性に、値が割り当てられる。値「１」が、「ｆｌａｇｓ」属性に割り当てられる。１９０４年１月１日からの秒数と等しい値が、「ｃｒｅａｔｉｏｎＴｉｍｅ」属性および「ｍｏｄｉｆｙＴｉｍｅ」属性に割り当てられる。量ｎｅｘｔＴｒａｃｋＩｄの値が、ｔｒａｃｋＩＤ属性に割り当てられる。値「２４０」が、「ｔｒａｃｋＨｅｉｇｈｔ」属性に割り当てられる。値「３２０」が、「ｔｒａｃｋＷｉｄｔｈ」属性に割り当てられる。
【０４３２】
ｓｔｒｅａｍＴｙｐｅプロパティの値が「１」または「３」である場合に、値「０」が、ｄｕｒａｔｉｏｎ属性に割り当てられる。これらは、後で決定される訂正された値によって置換される、予備的な値にすぎない。それ以外では、囲むＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ要素６００のｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤが、ＸＭＴ−Ａ文書１００のＢｏｄｙ要素１２０に対する第１パス動作３１２０中に構成されるテーブルから対応するメディア持続時間値を入手するのに使用される。メディア持続時間値（秒単位）は、「ＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素６６６から導出されるｔｉｍｅＳｃａｌｅ値をかけられ、整数値に丸められる。
【０４３３】
ｓｔｒｅａｍＴｙｐｅプロパティの値が「１」である（ｏｂｊｅｃｔ  ｄｅｓｃｒｉｐｔｏｒ  ｓｔｒｅａｍ）場合に、ｔｒａｃｋＩＤ属性の値が、量ｔｒａｃｋＩｄＦｏｒＯｄｓｍに割り当てられる。ｓｔｒｅａｍＴｙｐｅプロパティの値が「３」である（ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ）場合に、ｔｒａｃｋＩＤ属性の値が、量ｔｒａｃｋＩｄＦｏｒＳｄｓｍに割り当てられる。
【０４３４】
２．動作３６０６で、標準ＸＭＬ手段を使用して、新しい「ｍｄｉａ」要素２６０４を作成し、ステップ１で作成した新しい「ｔｒａｋ」要素２６００に挿入する。
【０４３５】
この新しい「ｍｄｉａ」要素２６０４の次の属性に、値を割り当てる。１９０４年１月１日からの秒数と等しい値を、「ｃｒｅａｔｉｏｎＴｉｍｅ」属性および「ｍｏｄｉｆｙＴｉｍｅ」属性に割り当てる。これは、親ｔｒａｋ要素２６００の対応する属性に使用されるものと同一の値である。「ＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素６６６から導出されるｔｉｍｅＳｃａｌｅ値が、「ｔｉｍｅＳｃａｌｅ」属性に割り当てられる。親ｔｒａｋ要素２６００に割り当てられた持続時間値が、ｄｕｒａｔｉｏｎ属性に割り当てられる。
【０４３６】
３．動作３６１０で、標準ＸＭＬ手段を使用して、新しい「ｈｄｌｒ」要素２６０８を作成し、ステップ２で作成された新しい「ｍｄｉａ」要素２６０４に挿入する。
【０４３７】
「ｈｄｌｒ」要素の次の属性に、値が割り当てられる：「ｈａｎｄｌｅｒＴｙｐｅ」および「ｎａｍｅ」。「ｈａｎｄｌｅｒＴｙｐｅ」属性に割り当てられる値は、ｓｔｒｅａｍＴｙｐｅに依存する。ｓｔｒｅａｍＴｙｐｅが、１（ｏｓｄｍ）、３（ｓｄｓｍ）、４（ビジュアル・ストリーム）、または５（オーディオ・ストリーム）と等しい場合に、値「ｏｄｓｍ」、「ｓｄｓｍ」、「ｓｏｕｎ」、または「ｖｉｄｅ」が、「ｈａｎｄｌｅｒＴｙｐｅ」属性に割り当てられる。そうでない場合には、値「ｎｏｎｅ」が「ｈａｎｄｌｅｒＴｙｐｅ」属性に割り当てられる。「ｎａｍｅ」属性に割り当てられる値は、囲むＸＭＴ−Ａ  ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素１８０、１９０、または６３０のＥＳ＿ＩＤ属性によって決定されるストリング「Ｅｓ＿ＤｅｓｃｒｉｐｔｏｒＩｄ」のコピーである。この「ｎａｍｅ」属性の選択は、必要ではないが、この選択によって、ｍｐ４文書および後続ファイルでＥＳ＿ＩＤ属性ストリングの値を保持し、伝搬させることが可能になる。
【０４３８】
４．動作３６１６で、標準ＸＭＬ手段を使用して、新しい「ｍｉｎｆ」要素２６１２を作成し、ステップ２で作成された新しい「ｍｄｉａ」要素２６０４に挿入する。
【０４３９】
５．動作３６２０で、標準ＸＭＬ手段を使用して、新しい「ｄｉｎｆ」要素２６１６を作成し、ステップ４で作成された新しい「ｍｉｎｆ」要素２６１２に挿入する。
【０４４０】
６．動作３６２６で、標準ＸＭＬ手段を使用して、新しい「ｄｒｅｆ」要素２６２０を作成し、ステップ５で作成された新しい「ｄｉｎｆ」要素２６１６に挿入する。
【０４４１】
７．動作３６３０で、標準ＸＭＬ手段を使用して、新しい「ｕｒｌＤａｔａ」要素２６２４を作成し、ステップ６で作成された新しい「ｄｒｅｆ」要素２６２０に挿入する。「１」の値を、「ｕｒｌＤａｔａ」要素２６２４の「ｆｌａｇｓ」属性に割り当てる。
【０４４２】
８．動作３６３６で、標準ＸＭＬ手段を使用して、新しい「ｓｔｂｌ」要素２６２８および２６５２を作成し、ステップ４で作成された新しい「ｍｉｎｆ」要素２６１２に挿入する。要素であるサンプル・テーブル要素の予備的な形が、下の「予備的サンプル・テーブル要素の作成」で説明するように作成される。
【０４４３】
９．動作３６４０で、標準ＸＭＬ手段を使用して、新しいメディア・ヘッダ要素２６３２を作成し、ステップ４で作成した「ｍｉｎｆ」要素２６１２に挿入する。メディア・ヘッダ要素の要素名は、このストリームのｓｔｒｅａｍＴｙｐｅプロパティに依存する。
【０４４４】
ｓｔｒｅａｍＴｙｐｅプロパティが１（ｏｄｓｍ）または３（ｓｄｓｍ）の場合に、メディア・ヘッダ要素は、属性なしの「ｎｍｈｄ」要素である。
【０４４５】
ｓｔｒｅａｍＴｙｐｅが４（ビジュアル・ストリーム）である場合に、メディア・ヘッダ要素は、「０」の値を有する属性「ｔｒａｎｓｆｅｒＭｏｄｅ」を有する「ｖｍｈｄ」要素である。
【０４４６】
ｓｔｒｅａｍＴｙｐｅプロパティが５（オーディオ・ストリーム）である場合に、メディア・ヘッダ要素は、「０」の値を有する属性「ｂａｌａｎｃｅ」を有する「ｓｍｈｄ」要素である。
【０４４７】
そうでない場合には、メディア・ヘッダ要素は、値「０」の属性「ｔｒａｎｓｆｅｒＭｏｄｅ」および値「０」の属性「ｂａｌａｎｃｅ」を有する「ｇｍｈｄ」要素である。
【０４４８】
１０．動作３６４６で、ｓｔｒｅａｍＴｙｐｅプロパティの値を値４および５と比較し、量ｓｔａｒｔＴｉｍｅの値を０と比較する。
【０４４９】
オーディオ・ストリームまたはビデオ・ストリームの場合に、この動作は、手順「ＸＭＴ−Ａ  Ｂｏｄｙ要素の処理（パス２）」３１３０中に実行される。この場合に、量「ｓｔａｒｔＴｉｍｅ」の値が、手順「ＸＭＴ−Ａ  Ｂｏｄｙ要素の処理（パス１）」３１２０で作成されたオブジェクト・テーブル（図８８参照）から入手される。この値は、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ列の項目が、この「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」要素を含む「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素の「ｏｂｊｅｃｔＤｅｓｃｒｐｔｏｒＩｄ」属性と一致する行のｓｔａｒｔＴｉｍｅ列の項目によって決定される。
【０４５０】
ｏｄｓｍおよびｓｄｓｍの場合に、この動作は、手順「ＸＭＴ−Ａ  Ｈｅａｄｅｒ要素の処理」３１１６中に実行される。量ｓｔａｒｔＴｉｍｅの値を確立するのに使用されるオブジェクト・テーブルは、まだこのストリームについて作成されていない。その結果、ｏｄｓｍストリームのｓｔａｒｔＴｉｍｅ値に関する対応するテストが、別々のステップ「ｏｄｓｍのｅｄｉｔ  ｌｉｓｔの作成」３１２６の一部として実行される。ｓｄｓｍは、必ず時刻０から始まる。
【０４５１】
ｓｔｒｅａｍＴｙｐｅプロパティの値が４（ビジュアル・ストリーム）または５（オーディオ・ストリーム）であり、ストリームの量「ｓｔａｒｔＴｉｍｅ」の値が０でない場合に、動作３６５０で、標準ＸＭＬ手段を使用して、新しい「ｅｄｔｓ」（ｅｄｉｔ  ｌｉｓｔ）要素２６４４を作成し、現在のｔｒａｋ要素２６００に挿入する。標準ＸＭＬ要素を使用して、新しい「ｅｌｓｔ」要素２６４８を作成し、新しい「ｅｄｔｓ」要素２６４４に挿入する。その後、２つの新しい「ｓｅｇｍｅｎｔ」要素を作成し、「ｅｌｓｔ」要素２６４８に挿入する。
【０４５２】
各「ｓｅｇｍｅｎｔ」要素は、「ｓｔａｒｔＴｉｍｅ」、「ｄｕｒａｔｉｏｎ」、および「ｒａｔｅ」という名前の属性を割り当てられる。値「−１」が、第１のｓｅｇｍｅｎｔ要素の「ｓｔａｒｔＴｉｍｅ」属性に割り当てられる。値「０」が、第２のｓｅｇｍｅｎｔ要素の「ｓｔａｒｔＴｉｍｅ」属性に割り当てられる。値「１．０」が、両方のｓｅｇｍｅｎｔ要素の「ｒａｔｅ」属性に割り当てられる。第１のセグメントの「ｄｕｒａｔｉｏｎ」属性の値は、このストリームのｓｔａｒｔＴｉｍｅ値と、これを囲むｍｏｏｖ要素の「ｔｉｍｅＳｃａｌｅ」属性の値の積によって決定される値を割り当てられる。第２のセグメントの「ｄｕｒａｔｉｏｎ」属性の値は、このストリームのｄｕｒａｔｉｏｎ値とこれを囲むｍｏｏｖ要素の「ｔｉｍｅＳｃａｌｅ」属性の値の積によって決定される値を割り当てられる。このストリームのｄｕｒａｔｉｏｎ値は、ＸＭＴ−Ａ「Ｂｏｄｙ」要素に対する第１パスで作成されたオブジェクト・テーブル（図８８参照）から得られる「ｓｔｏｐＴｉｍｅ」値と「ｓｔａｒｔＴｉｍｅ」値の間の差によって決定される。これらの値は、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ列の項目が、この「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ」要素を含む「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素の「ｏｂｊｅｃｔＤｅｓｃｒｐｔｏｒＩｄ」属性と一致する行の対応する列の項目によって決定される。
【０４５３】
１１．動作３６５６で、ｓｔｒｅａｍＴｙｐｅプロパティの値を「１」と比較する。ｓｔｒｅａｍＴｙｐｅが１（ｏｄｓｍ）である場合に、動作３６６０で、標準ＸＭＬ手段を使用して、新しい「ｔｒｅｆ」要素２６３６を作成し、ステップ１で作成された「ｔｒａｋ」要素２６００に挿入する。新しい「ｍｐｏｄ」要素２６４０を作成し、新しい「ｔｒｅｆ」要素２６３６に挿入する。値「−１」を、「ｍｐｏｄ」要素２６４０の「ｔｒａｃｋＩＤ」属性に割り当てる。これは、後に得られるデータによって置換される一時的な値である。
【０４５４】
このステップ３６５６で、手順「指定されたストリームのｔｒａｋ要素の作成」３４４０が完了する。この手順に続いて、手順「ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒの処理」３３４０は、テスト「指定されたストリームはｓｄｓｍまたはｏｄｓｍか」３４５０で継続される。
【０４５５】
７．１．１０．３  予備的サンプル・テーブル要素の作成
最終的なｍｐ４バイナリ・ファイル２２３０のサンプル・テーブルのそれぞれに、バイナリ形式のｓｄｓｍ、ｏｄｓｍ、およびメディア・データ・ファイルに依存する情報が含まれる。これらのテーブルの値を決定するのに必要な情報は、この時点では入手可能でない。その結果、図８５に示されているように、これらのテーブルの予備的な表現を生成して、実際のｍｐ４バイナリ・ファイル２２３０が作成される時に最終的な値が置かれる場所を示す。
【０４５６】
動作３６６６で、標準ＸＭＬ手段を使用して、新しい「ｓｔｓｃ」要素２６５６を作成し、現在の「ｔｒａｋ」要素２６００の「ｓｔｂｌ」要素２６２８および２６５２に挿入する。標準ＸＭＬ手段を使用して、新しい「ｓａｍｐｌｅＴｏＣｈｕｎｋ」要素を作成し、新しい「ｓｔｓｃ」要素２６５６に挿入する。「１」の値を、新しい「ｓａｍｐｌｅＴｏＣｈｕｎｋ」要素の「ｓａｍｐｌｅＤｅｓｃ」属性に割り当てる。「１」の値を、新しい「ｓａｍｐｌｅＴｏＣｈｕｎｋ」要素の「ｆｉｒｓｔＣｈｕｎｋ」属性に割り当てる。このストリームのｓｔｒｅａｍＴｙｐｅプロパティが１または３（ｏｄｓｍまたはｓｄｓｍ）である場合に、「０」の値を、新しい「ｓａｍｐｌｅＴｏＣｈｕｎｋ」要素の「ｎｕｍＳａｍｐｌｅｓ」属性に割り当てる。このストリームのｏｂｊｅｃｔＴｙｐｅプロパティが１０８（ＪＰＥＧイメージ）である場合に、「１」の値を、新しい「ｓａｍｐｌｅＴｏＣｈｕｎｋ」要素の「ｎｕｍＳａｍｐｌｅｓ」属性に割り当てる。そうでない場合には、「−１」の値を、新しい「ｓａｍｐｌｅＴｏＣｈｕｎｋ」要素の「ｎｕｍＳａｍｐｌｅｓ」属性に割り当てる。
【０４５７】
動作３６７０で、標準ＸＭＬ手段を使用して、新しい「ｓｔｔｓ」要素２６６０を作成し、現在のｔｒａｋ要素２６００の「ｓｔｂｌ」要素２６２８および２６５２に挿入する。現在のｓｔｒｅａｍＴｙｐｅプロパティが１（ｏｄｓｍ）でも３（ｓｄｓｍ）でもない場合に、標準ＸＭＬ手段を使用して、新しい「ｔｉｍｅＴｏＳａｍｐｌｅ」要素を作成し、新しい「ｓｔｔｓ」要素２６６０に挿入する。「ｔｒａｋ」要素で指定される持続時間値を、この「ｔｉｍｅＴｏＳａｍｐｌｅ」要素の「ｄｕｒａｔｉｏｎ」属性に割り当てる。このストリームのｏｂｊｅｃｔＴｙｐｅプロパティが１０８（ＪＰＥＧイメージ）である場合に、「１」の値を、この「ｔｉｍｅＴｏＳａｍｐｌｅ」要素の「ｎｕｍＳａｍｐｌｅｓ」属性に割り当てる。そうでない場合には、「−１」の値を、新しい「ｔｉｍｅＴｏＳａｍｐｌｅ」要素の「ｎｕｍＳａｍｐｌｅｓ」属性に割り当てる。
【０４５８】
動作３６７６で、標準ＸＭＬ手段を使用して、新しい「ｓｔｃｏ」要素２６６４を作成し、現在のｔｒａｋ要素２６００の「ｓｔｂｌ」要素２６２８および２６５２に挿入する。標準ＸＭＬ手段を使用して、新しい「ｃｈｕｎｋＯｆｆｓｅｔ」要素を作成し、新しい「ｓｔｃｏ」要素２６６４に挿入する。ｎｅｘｔＴｒａｃｋＩｄの現在値を、この「ｃｈｕｎｋＯｆｆｓｅｔ」要素の「ｍｄａｔＩｄ」属性に割り当てる。「０」の値を、この「ｃｈｕｎｋＯｆｆｓｅｔ」要素の「ｍｄａｔＯｆｆｓｅｔ」属性に割り当てる。「８」の値を、この「ｃｈｕｎｋＯｆｆｓｅｔ」要素の「ｏｆｆｓｅｔ」属性に割り当てる。
【０４５９】
動作３６８０で、標準ＸＭＬ手段を使用して、新しい「ｓｔｓｚ」要素２６６８を作成し、現在のｔｒａｋ要素２６００の「ｓｔｂｌ」要素２６２８および２６５２に挿入する。このストリームのｓｔｒｅａｍＴｙｐｅプロパティが１（ｏｄｓｍ）でも３（ｓｄｓｍ）でもない場合に、新しい「ｓｔｓｚ」要素２６６８の「ｎｕｍＳａｍｐｌｅｓ」属性に値を割り当てる。このストリームのｏｂｊｅｃｔＴｙｐｅプロパティが１０８（ＪＰＥＧイメージ）である場合に、「１」の値を、新しい「ｓｔｓｚ」要素２６６８の「ｎｕｍＳａｍｐｌｅｓ」属性に割り当てる。そうでない場合に、「−１」の値を、新しい「ｓｔｓｚ」要素２６６８の「ｎｕｍＳａｍｐｌｅｓ」属性に割り当てる。
【０４６０】
動作３６８６で、ｓｔｒｅａｍＴｙｐｅプロパティが１（ｏｄｓｍ）または３（ｓｄｓｍ）である場合に、標準ＸＭＬ手段を使用して、新しい「ｓｔｓｓ」要素（２６７２）を作成し、現在のｔｒａｋ要素２６００の「ｓｔｂｌ」要素２６２８および２６５２に挿入する。ｓｔｒｅａｍＴｙｐｅプロパティが１である場合に、値「１」を、新しい「ｓｔｓｓ」要素２６７２の「ｎｕｍＥｎｔｒｉｅｓ」属性に割り当て、新しい「ｓｙｎｃＳａｍｐｌｅ」要素を作成し、新しい「ｓｔｓｓ」要素２６７２に挿入する。値「０」を、この「ｓｙｎｃＳａｍｐｌｅ」要素の「ｓａｍｐｌｅＮｕｍｂｅｒ」属性に割り当てる。ｓｔｒｅａｍＴｙｐｅプロパティが３の場合には、値「０」を、新しい「ｓｔｓｓ」要素２６７２の「ｎｕｍＥｎｔｒｉｅｓ」属性に割り当てる。
【０４６１】
ｓｔｒｅａｍＴｙｐｅプロパティが４であり、ｏｂｊｅｃｔＴｙｐｅプロパティが３２である（ＭＰＥＧ−４ビデオ）場合に、標準ＸＭＬ手段を使用して、新しい「ｓｔｓｓ」要素２６７２を作成し、現在のｔｒａｋ要素２６００の「ｓｔｂｌ」要素２６２８および２６５２に挿入し、値「−１」を、新しい「ｓｔｓｓ」要素２６７２の「ｎｕｍＥｎｔｒｉｅｓ」属性に割り当てる。
【０４６２】
動作３６９０で、標準ＸＭＬ手段を使用して、新しい「ｓｔｓｄ」要素２６７６を作成し、現在のｔｒａｋ要素２６００の「ｓｔｂｌ」要素２６２８および２６５２に挿入する。新しい「ｓｔｓｄ」要素２６７６内の従属要素を、図８６に示されているように作成する。
【０４６３】
動作３７００で、標準ＸＭＬ手段を使用して、新しい「ｅｓｄｓ」要素２６８４を作成する。
【０４６４】
動作３７０６で、ｓｔｒｅａｍＴｙｐｅプロパティの値を「１」および「３」と比較する。
【０４６５】
ｓｔｒｅａｍＴｙｐｅプロパティの値が「１」または「３」である場合に、動作３７１０で、標準ＸＭＬ手段を使用して、新しい「ｍｐ４ｓ」要素２６８０を作成し、現在の「ｓｔｓｄ」要素２６７６に挿入する。新しい「ｅｓｄｓ」要素２６８４を、新しい「ｍｐ４ｓ」要素２６８０に挿入し、値「１」を、新しい「ｍｐ４ｓ」要素２６８０の「ｄａｔａＲｅｆＩｎｄｅｘ」属性に割り当てる。
【０４６６】
ｓｔｒｅａｍＴｙｐｅプロパティの値が「１」でも「３」でもない場合に、動作３７１６で、ｓｔｒｅａｍＴｙｐｅプロパティを「４」と比較する。
【０４６７】
ｓｔｒｅａｍＴｙｐｅプロパティの値が「４」である場合に、動作３７２０で、標準ＸＭＬ手段を使用して、新しい「ｍｐ４ｖ」要素２６８０を作成し、現在の「ｓｔｓｄ」要素２６７６に挿入する。新しい「ｅｓｄｓ」要素２６８４を新しい「ｍｐ４ｖ」要素２６８０に挿入し、値「−１」、「１」、「１」、「７２．０」、「７２．０」、「２４」、「２４０」、および「３２０」を、それぞれ、新しい「ｍｐ４ｖ」要素２６８０の属性「ｃｏｌｏｒＴａｂｌｅ」、「ｄａｔａＲｅｆＩｎｄｅｘ」、「ｆｒａｍｅＣｏｕｎｔ」、「ｈｏｒｉｚｏｎｔａｌＲｅｓ」、「ｖｅｒｔｉｃａｌＲｅｓ」、「ｐｉｘｅｌＤｅｐｔｈ」、「ｈｅｉｇｈｔ」、および「ｗｉｄｔｈ」に割り当てる。
【０４６８】
ｓｔｒｅａｍＴｙｐｅプロパティの値が「４」でない場合に、動作３７２６で、ｓｔｒｅａｍＴｙｐｅプロパティを「５」と比較する。ｓｔｒｅａｍＴｙｐｅプロパティの値が「５」でない場合には、この手順（動作３６９０）が完了する。
【０４６９】
ｓｔｒｅａｍＴｙｐｅプロパティの値が「５」である場合に、動作３７３０で、標準ＸＭＬ手段を使用して、新しい「ｍｐ４ａ」要素２６８０を作成し、現在の「ｓｔｓｄ」要素２６７６に挿入する。新しい「ｅｓｄｓ」要素２６８４を新しい「ｍｐ４ａ」要素２６８０に挿入し、値「１」、「−１」、および「−１」を、それぞれ、新しい「ｍｐ４ａ」要素２６８０の属性「ｄａｔａＲｅｆＩｎｄｅｘ」、「ｎｕｍＣｈａｎｎｅｌｓ」、および「ｓａｍｐｌｅＳｉｚｅ」に割り当てる。
【０４７０】
追加のｓｔｒｅａｍＴｙｐｅの事例を容易に処理することができるが、これらの事例（１、３、４、５）だけが、現在の実施形態で必要である。ｓｔｒｅａｍＴｙｐｅプロパティの値が１、３、４、および５のどれでもない場合に、ｓｔｓｄ要素２６７６についてそれ以上の処理は実行されない。
【０４７１】
動作３７３６で、ｓｔｒｅａｍＴｙｐｅプロパティの値が、「１」、「３」、「４」、または「５」である場合に、標準ＸＭＬ手段を使用して、新しい「ＥＳ＿Ｄｅｓｃｒ」要素２６８８を作成し、現在の「ｅｓｄｓ」要素２６８４に挿入する。値「０」を、新しい「ＥＳ＿Ｄｅｓｃｒ」要素２６８８の「ＥＳ＿ＩＤ」属性に割り当てる。値「０」を、新しい「ＥＳ＿Ｄｅｓｃｒ」要素２６８８の「ｐｒｉｏｒｉｔｙ」属性に割り当てる。
【０４７２】
動作３７４０で、標準ＸＭＬ手段を使用して、新しい「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」（Ｄ−Ｃ−Ｄ）要素２７１０を作成し、現在の「ＥＳ＿Ｄｅｓｃｒ」要素２６８８に挿入する。「ｂｕｆｆｅｒＳｉｚｅＤＢ」属性、「ａｖｇＢｉｔｒａｔｅ」属性、および「ｍａｘＢｉｔｒａｔｅ」属性の値を、このストリームのＸＭＴ−Ａ「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」６５０から入手し、これらの属性の値を、新しい「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０の「ｂｕｆｆｅｒＳｉｚｅ」属性、「ａｖｇＢｉｔｒａｔｅ」属性、および「ｍａｘＢｉｔＲａｔｅ」属性に割り当てる。現在のストリームのｓｔｒｅａｍＴｙｐｅプロパティおよびｏｂｊｅｃｔＴｙｐｅプロパティの値を、新しい「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０の「ｓｔｒｅａｍＴｙｐｅ」属性および「ｏｂｊｅｃｔＴｙｐｅ」属性に割り当てる。
【０４７３】
動作３７４６で、標準ＸＭＬ手段を使用して、新しい「ＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」（ＳＬＣ−Ｄ）要素２７６０を作成し、現在の「ＥＳ＿Ｄｅｓｃｒ」要素２６８８に挿入する。値「２」を、新しい「ＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７６０の「ｐｒｅｄｅｆｉｎｅｄ」属性に割り当てる。
【０４７４】
ｓｔｒｅａｍＴｙｐｅプロパティおよびｏｂｊｅｃｔＴｙｐｅプロパティの値に応じて、デコーダ固有情報要素を「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０に挿入することができる。ｓｔｒｅａｍＴｙｐｅプロパティの値が１（ｏｄｓｍ）の場合に、デコーダ固有情報は不要である。
【０４７５】
動作３７５０で、ｓｔｒｅａｍＴｙｐｅプロパティの値を「３」と比較する。
【０４７６】
ｓｔｒｅａｍＴｙｐｅプロパティの値が３（ｓｄｓｍ）である場合に、動作３７５６で、手順「ＢＩＦＳ構成の処理」を実行する。この手順は、下で説明する。
【０４７７】
動作３７６０で、ｏｂｊｅｃｔＴｙｐｅプロパティの値を「３２」と比較する。
【０４７８】
ｏｂｊｅｃｔＴｙｐｅプロパティの値が３２（ＭＰＥＧ−４ビデオ）の場合に、動作３７６６で、標準ＸＭＬ手段を使用して、新しい「ＶｉｓｕａｌＣｏｎｆｉｇ」要素２７４０を作成し、現在の「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０に挿入する。
【０４７９】
動作３７７０で、ｏｂｊｅｃｔＴｙｐｅプロパティの値を「６４」と比較する。
【０４８０】
ｏｂｊｅｃｔＴｙｐｅプロパティの値が６４（ＭＰＥＧ−４オーディオ）である場合に、動作３７７６で、標準ＸＭＬ手段を使用して、新しい「ＡｕｄｉｏＣｏｎｆｉｇ」要素を作成し、現在の「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０に挿入する。
【０４８１】
動作３７８０で、ｏｂｊｅｃｔＴｙｐｅプロパティの値を「１０８」と比較する。
【０４８２】
ｏｂｊｅｃｔＴｙｐｅプロパティの値が１０８（ＪＰＥＧイメージ）である場合に、動作３７８６で、標準ＸＭＬ手段を使用して、「ＪＰＥＧ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」要素２７３０を作成し、現在の「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０に挿入する。
【０４８３】
追加のｓｔｒｅａｍＴｙｐｅおよびｏｂｊｅｃｔＴｙｐｅの事例を簡単に処理することができるが、上記の事例だけが、現在の実施形態に必要である。
【０４８４】
「ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」要素２７２０を除いて、上で指定したデコーダ固有情報要素２７３０、２７４０、および２７５０は、単なるスタブまたはプレースホルダである。ｓｔｒｅａｍＴｙｐｅプロパティの値が３（ｓｄｓｍ）である場合に、下で説明する手順「ＢＩＦＳ構成の処理」が実行される。そうでない場合に、ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素６３０の処理は、処理「ｔｒａｋ要素の作成」３４４０のステップ９（動作３６４０）で継続される。
【０４８５】
７．１．１０．４  ＢＩＦＳ構成の処理
手順「ＢＩＦＳ構成の処理」を図８７に示す。
【０４８６】
動作３８００で、標準ＸＭＬ手段を使用して、新しい「ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」要素２７２０を作成し、「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０に挿入する。
【０４８７】
動作３８１０で、標準ＸＭＬ手段を使用して、ｍｐ４ｂｉｆｓ文書２８００内へ「ｂｉｆｓＣｏｎｆｉｇ」要素２８１０を入手する。
【０４８８】
動作３８２０で、標準ＸＭＬ手段を使用して、ｓｄｓｍの「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素６５０に従属する「ｄｅｃＳｐｅｃｉｆｉｃＩｎｆｏ」要素６５６および６８０を入手する。次に、標準ＸＭＬ手段を使用して、この「ｄｅｃＳｐｅｃｉｆｉｃＩｎｆｏ」要素６８０に従属する「ＢＩＦＳＣｏｎｆｉｇ」要素６８６を入手する。
【０４８９】
動作３８３０で、値「０」を「ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」要素２７２０の「ｎｏｄｅＩｄＢｉｔｓ」属性および「ｂｉｆｓＣｏｎｆｉｇ」要素２８１０の対応する属性に割り当てる。値「０」を、「ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」要素２７２０の「ｒｏｕｔｅＩｄＢｉｔｓ」属性および「ｂｉｆｓＣｏｎｆｉｇ」要素２８１０の対応する属性に割り当てる。
【０４９０】
動作３８４０で、ｏｂｊｅｃｔＴｙｐｅプロパティの現在値を「２」と比較する。
【０４９１】
ｏｂｊｅｃｔＴｙｐｅプロパティの現在値が「２」である場合に、動作３８４６で、値「０」をＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０の「ｐｒｏｔｏＩｄＢｉｔｓ」属性およびｂｉｆｓＣｏｎｆｉｇ要素２８１０の対応する属性に割り当て、ＢＩＦＳＣｏｎｆｉｇ要素６８６の「ｕｓｅ３ＤＭｅｓｈＣｏｄｉｎｇ」および「ｕｓｅＰｒｅｄｉｃｔｉｖｅＭＦＦｉｅｌｄ」属性によって決定される値を、ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０およびｂｉｆｓＣｏｎｆｉｇ要素２８１０の同一の名前の属性に割り当てる。
【０４９２】
動作３８５０で、標準ＸＭＬ手段を使用して、ＢＩＦＳＣｏｎｆｉｇ要素（６８６）に従属するｃｏｍｍａｎｄＳｔｒｅａｍ要素６９０を入手する。
【０４９３】
ＢＩＦＳＣｏｎｆｉｇ要素６８６に、従属するｃｏｍｍａｎｄＳｔｒｅａｍ要素６９０が含まれない場合に、動作３８５６で、標準ＸＭＬ手段を使用して、ＢＩＦＳＣｏｎｆｉｇ要素６８６に従属するａｎｉｍＭａｓｋ要素を入手する。ＢＩＦＳＣｏｎｆｉｇ要素が、従属するａｎｉｍＭａｓｋ要素を所有しない場合に、ＸＭＴ−Ａ文書は無効であり、動作３８６０でエラーを報告する。
【０４９４】
ＢＩＦＳＣｏｎｆｉｇ要素６８６が従属するａｎｉｍＭａｓｋ要素を所有する場合に、動作３８６６で、値「偽」を、ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０のｃｏｍｍａｎｄＳｔｒｅａｍ属性に割り当てる。
【０４９５】
ＢＩＦＳＣｏｎｆｉｇ要素６８６が、従属するｃｏｍｍａｎｄＳｔｒｅａｍ要素６９０を所有する場合に、動作３８７０で、値「真」を、ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０のｃｏｍｍａｎｄＳｔｒｅａｍ属性に割り当てる。ｃｏｍｍａｎｄＳｔｒｅａｍ要素６９０のｐｉｘｅｌＭｅｔｒｉｃ属性の値を、ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０のｐｉｘｅｌＭｅｔｒｉｃ属性に割り当てる。ｃｏｍｍａｎｄＳｔｒｅａｍ要素６９０のｐｉｘｅｌＭｅｔｒｉｃ属性の値が指定されていない場合には、「偽」のデフォルト値を、ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０のｐｉｘｅｌＭｅｔｒｉｃ属性に割り当てる。
【０４９６】
動作３８８０で、標準ＸＭＬ手段を使用して、ｃｏｍｍａｎｄＳｔｒｅａｍ要素６９０に従属する「ｓｉｚｅ」要素６９６を入手する。
【０４９７】
ｃｏｍｍａｎｄＳｔｒｅａｍ要素６９０が従属するｓｉｚｅ要素６９６を所有しない場合に、動作３８８６で、値「０」を、ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０の「ｐｉｘｅｌＨｅｉｇｈｔ」および「ｐｉｘｅｌＷｉｄｔｈ」属性に割り当てる。
【０４９８】
ｃｏｍｍａｎｄＳｔｒｅａｍ要素６９０が、従属するｓｉｚｅ要素６９６を所有する場合に、動作３８９０で、「ｓｉｚｅ」要素６９６の「ｐｉｘｅｌＨｅｉｇｈｔ」および「ｐｉｘｅｌＷｉｄｔｈ」属性の値を、ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素２７２０の「ｐｉｘｅｌＨｅｉｇｈｔ」および「ｐｉｘｅｌＷｉｄｔｈ」属性に割り当てる。
【０４９９】
これらのステップが完了した後に、ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒ要素６４０の処理は、処理「ｔｒａｋ要素の作成」３４４０のステップ９（動作３６４０）で継続される。
【０５００】
７．２  中間ＸＭＬ文書に基づくｍｐ４バイナリ・ファイルの作成
中間ＸＭＬ文書２２５０および２２６０の作成の後に、中間ＸＭＬ文書２２５０および２２６０ならびに関連するメディア・データ・ファイル２２２０を使用して、オリジナルのＸＭＴ−Ａ文書２２１０で指定された情報を表す新しいｍｐ４バイナリ・ファイル２２３０を作成する。この新しいｍｐ４ファイルを、「出力ｍｐ４ファイル」または「ｍｐ４ファイル」と呼ぶ。この新しいｍｐ４ファイルを作成するのに使用される手段は、次の６つのステップからなる。
１．入力文書および出力宛先の確立
２．作業配列の作成
３．「ｍｄａｔ」要素２３１０の処理
４．「ｍｏｏｖ」要素２３２０の処理
５．任意選択のユーザ・データ要素２３４０の処理
６．ｏｄｓｍバッファ・サイズの更新
【０５０１】
これらのステップのそれぞれを、下で説明する。
【０５０２】
７．２．１  入力文書および出力宛先の確立
これらのステップの最初のステップは、上で作成されたｍｐ４ｆｉｌｅ文書２２５０およびｍｐ４ｂｉｆｓ文書２２６０を表すＸＭＬデータ構造への参照を得ることからなる。このステップには、出力ｍｐ４バイナリ・ファイル２２３０のファイル名を指定するデータ構造を受け取ることも含まれる。指定されたファイル名が既存のファイルに対応する場合に、そのファイルは削除される。その後、新しい空の出力ファイルが、指定されたファイル名を使用して作成される。
【０５０３】
空の出力ファイルを作成した後に、標準ＸＭＬ手段を使用して、ｍｐ４ｆｉｌｅ文書のトップ・レベル要素を入手する。ｍｐ４ｂｉｆｓ文書のトップ・レベル要素もこの時点で入手することができるが、これは、後になるまで必要でない。
【０５０４】
新しい出力ファイル（「ｍｐ４ファイル」）は、「ｍｐ４アトム」および「ｍｐ４オブジェクト構造」と呼ばれるデータ構造の階層セットからなる。現在の実施形態では、各ｍｐ４アトムが、３２ビット「ｓｉｚｅ」値、３２ビット「アトムＩＤ」、および１組のプロパティ値からなる。ｍｐ４アトムに、１つまたは複数の従属するｍｐ４アトムまたはｍｐ４オブジェクト構造を含めることもできる。サイズ値は、サイズおよびアトムＩＤを含む完全なｍｐ４アトムのバイト数を指定する。ｍｐ４オブジェクト構造は、１バイトのオブジェクト構造タグ、可変サイズのサイズ値、１組のプロパティ値、および１組の０個以上の従属するｍｐ４オブジェクト構造からなる。この場合に、サイズ値は、オブジェクト構造タグおよびサイズ値を除くオブジェクト構造のバイト数を指定する。
【０５０５】
各アトムを生成する全般的な手順を、図１０３に示す。オブジェクト構造を作成する、対応する手順を、図１０４に示す。これらの手順は、出力ｍｐ４ファイルの「ファイル位置」を制御する能力を必要とする。「ファイル位置」は、ファイルの先頭から、次のバイトが書き込まれる点までのバイト数と定義される。ファイル位置を制御する必要のゆえに、この新しいファイルは、「ランダム・アクセス」または「読み取り／書き込み」のタイプのファイルとしてオープンされなければならない。
【０５０６】
７．２．１．１  ｍｐ４アトム作成の処理
ｍｐ４アトムを作成する処理は、次のステップからなる。
【０５０７】
１．動作５０００で、出力ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。量「ｓｉｚｅＰｏｓ」の値は、各ｍｐ４アトムまたはオブジェクト構造に一意である。
【０５０８】
２．動作５０１０で、値０の３２ビット整数を出力ファイルに書き込む。
【０５０９】
３．動作５０２０で、３２ビット・アトムＩＤ値を出力ファイルに書き込む。たとえば、「ｍｄａｔ」アトムの場合に、文字「ｍ」、「ｄ」、「ａ」、および「ｔ」のａｓｃｉｉ値を表す４バイトを、出力ファイルに書き込む。
【０５１０】
４．動作５０３０で、現在のｍｐ４アトムによって表されるｍｐ４ｆｉｌｅ要素の属性を解釈する。各ｍｐ４アトムによって所有される属性の特定の組は、ＭＰ４ファイル・フォーマットに関するＭＰＥＧ−４仕様に示されているように、アトムＩＤによって決定される。ｍｐ４ｆｉｌｅ文書で指定されない属性については、デフォルト値を提供する。
【０５１１】
５．動作５０４０で、現在のｍｐ４アトムの属性の値を出力ファイルに書き込む。各属性値を表すのに使用されるビット数は、ＭＰ４ファイル・フォーマットに関するＭＰＥＧ−４仕様に示されている。
【０５１２】
６．動作５０５０で、現在のｍｐ４ｆｉｌｅ要素が従属要素を所有する場合に、各そのような従属要素を処理する。従属要素が、ｍｐ４ｆｉｌｅアトム要素に対応する場合に、現在の手順を再帰的に繰り返す。従属要素が、ｍｐ４ｆｉｌｅオブジェクト要素に対応する場合に、図１０４に示された手順を実行する。
【０５１３】
７．動作５０６０で、現在のファイル位置を量「ｅｎｄＰｏｓ」に割り当てる。
【０５１４】
８．動作５０７０で、量「ｅｎｄＰｏｓ」の値と量「ｓｉｚｅＰｏｓ」の値の間の差を、量「ｓｉｚｅ」に割り当てる。
【０５１５】
９．動作５０８０で、出力ファイルのファイル位置を、量「ｓｉｚｅＰｏｓ」の値によって示される位置に変更する。
【０５１６】
１０．動作５０９０で、量「ｓｉｚｅ」の値を表す３２ビット整数を出力ファイルに書き込む。
【０５１７】
１１．動作５０９５で、出力ファイルのファイル位置を、量「ｅｎｄＰｏｓ」の値によって指定される位置に変更する。
【０５１８】
７．２．１．２  ｍｐ４オブジェクト構造の作成の処理
ｍｐ４オブジェクト構造を作成する処理は、次のステップからなる。
【０５１９】
１．動作５１００で、１バイトのオブジェクト構造タグを出力ファイルに書き込む。オブジェクト構造タグの値は、ｍｐ４オブジェクト構造によって表されるｍｐ４ｆｉｌｅ要素の要素名と、ＭＰＥＧ−４仕様で提供されるテーブルによって決定される。
【０５２０】
２．動作５１１０で、出力ファイルの現在ファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。量「ｓｉｚｅＰｏｓ」の値は、各ｍｐ４アトムまたはオブジェクト構造に一意である。
【０５２１】
３．動作５１２０で、ｍｐ４オブジェクト構造を表すのに必要なバイト数の推定値または上限に基づいて、量「ｎｕｍＳｉｚｅＢｙｔｅｓ」に値を割り当てる。ｍｐ４オブジェクト構造を表すのに必要なバイト数が１２８未満の場合には、値「１」を量「ｎｕｍＳｉｚｅＢｙｔｅｓ」に割り当てる。ほとんどの場合に、これで十分である。
【０５２２】
４．動作５１３０で、１バイト値のシーケンスを出力ファイルに書き込む。この１バイト値の個数は、量「ｎｕｍＳｉｚｅＢｙｔｅｓ」の値によって指定される。この１バイト量の値は、後で上書きされるので、未決定である。このバイトのそれぞれに値０を使用することができる。
【０５２３】
５．動作５１３５で、現在のｍｐ４オブジェクト要素によって表されるｍｐ４ｆｉｌｅ要素の属性を解釈する。各ｍｐ４オブジェクト要素によって所有される属性の特定の組は、ＭＰＥＧ−４  ｓｙｓｔｅｍｓ仕様に示されているように、オブジェクト・タグによって決定される。ｍｐ４ｆｉｌｅ文書で指定されていない属性については、デフォルト値を提供する。
【０５２４】
６．動作５１４０で、現在のｍｐ４オブジェクト構造の属性の値を出力ファイルに書き込む。各属性値を表すのに使用されるビット数は、ＭＰＥＧ−４  ｓｙｓｔｅｍｓ仕様に示されている。
【０５２５】
７．動作５１５０で、現在のｍｐ４ｆｉｌｅ要素が従属要素を所有する場合に、各そのような従属要素を、図１０４に示された手順に従って処理する（再帰的に）。
【０５２６】
８．動作５１６０で、現在のファイル位置を量「ｅｎｄＰｏｓ」に割り当てる。
【０５２７】
９．動作５１６５で、量「ｅｎｄＰｏｓ」の値と量「ｓｉｚｅＰｏｓ」の値の間の差を、量「ｓｉｚｅ」に割り当てる。
【０５２８】
１０．動作５１７０で、量「ｎｕｍＳｉｚｅＢｙｔｅｓ」の値を、量「ｓｉｚｅ」の値から引く。
【０５２９】
１１．動作５１８０で、出力ファイルのファイル位置を、量「ｓｉｚｅＰｏｓ」の値によって指定される位置に変更する。
【０５３０】
１２．動作５１９０で、量「ｓｉｚｅ」の値を表す１バイト値のシーケンスを出力ファイルに書き込む。この１バイト値の個数は、量「ｎｕｍＳｉｚｅＢｙｔｅｓ」の値によって指定される。この１バイト値のそれぞれの下位７ビットは、量「ｓｉｚｅ」の値の対応する７ビット部分によって決定される。この１バイト値のそれぞれの上位ビットの値は、最後の１バイト値を除いて「１」である。このシーケンスの最後の１バイトの上位ビットの値は、「０」である。
【０５３１】
１３．動作５１９５で、出力ファイルのファイル位置を、量「ｅｎｄＰｏｓ」の値によって指定される位置に変更する。
【０５３２】
７．２．２  作業配列の作成
上で識別された第２ステップは、ｍｐ４ｆｉｌｅ文書２２５０および２３００で表される、「ｔｒａｋ」要素２３５０の個数、チャンク要素２４５０および２４９０の個数、ならびにｏｄｓｍＳａｍｐｌｅ要素２５１０の個数に基づく、複数の作業配列の作成からなる。
【０５３３】
次の手段が、量「ＭａｘＮｕｍＴｒａｃｋｓ」の値を決定するのに使用される。
【０５３４】
標準ＸＭＬ手段を使用して、ｍｐ４ｆｉｌｅ文書２３００のトップ・レベル要素に従属するすべての要素２３１０および２３２０を識別する。これらの従属要素の１つが、「ｍｏｏｖ」要素２３２０になる。この「ｍｏｏｖ」要素２３２０の「ｎｅｘｔＴｒａｃｋＩＤ」属性の値が、「ｍｏｏｖ」要素２３２０に従属する「ｔｒａｋ」要素２３５０の個数の上限を与える。ｍｐ４ｆｉｌｅ文書が、上で示したように作成される場合に、「ｎｅｘｔＴｒａｃｋＩＤ」属性の値は、「ｍｏｏｖ」要素２３２０に従属する「ｔｒａｋ」要素２３５０の個数を指定する。「ｎｅｘｔＴｒａｃｋＩＤ」属性の値を、量「ＭａｘＮｕｍＴｒａｃｋｓ」に割り当てる。
【０５３５】
次の９つのリストが、これらのリストのそれぞれの項目数を指定するために、量「ＭａｘＮｕｍＴｒａｃｋｓ」の値を使用して作成される。
１．ＭｅｄｉａＳａｍｐｌｅｓ
２．ＭｅｄｉａＤａｔａＦｉｌｅ（「Ｆｉｌｅ」オブジェクトの配列）
３．ＭｅｄｉａＨｅａｄｅｒＳｉｚｅ
４．ＭｅｄｉａＨｅａｄｅｒ（位置値の配列）
５．ＥｓＤｅｓｃｒＳｉｚｅ
６．ＴｒａｃｋＩｄＦｏｒＴｒａｃｋ
７．ＳｔｒｅａｍＴｙｐｅＦｏｒＴｒａｃｋ
８．ＯｂｊｅｃｔＴｙｐｅＦｏｒＴｒａｃｋ
９．ＴｒａｃｋＩｄｆｏｒ  ＯｄＩｄ
【０５３６】
ＭｅｄｉａＤａｔａＦｉｌｅリストおよびＭｅｄｉａＨｅａｄｅｒリストを除く、これらのリストのそれぞれが、整数の配列である。
【０５３７】
９つのリストのこの組を作成した後に、値０を、量「ＴｒａｃｋＮｕｍ」、「ＭａｘＮｕｍＣｈｕｎｋｓ」、および「ＭａｘＮｕｍＯｄｓｍＳａｍｐｌｅｓ」に割り当てる。
【０５３８】
次の手段を使用して、リストＴｒａｃｋＩｄＦｏｒＴｒａｃｋ、ＳｔｒｅａｍＴｙｐｅＦｏｒＴｒａｃｋ、およびＯｂｊｅｃｔＴｙｐｅＦｏｒＴｒａｃｋの項目を決定する。
【０５３９】
標準ＸＭＬ手段を使用して、「ｍｏｏｖ」要素２３２０に従属するすべての要素を識別する。型「ｔｒａｋ」２３５０のこのような従属要素ごとに、「ｔｒａｃｋＩＤ」属性の値をＴｒａｃｋＩｄＦｏｒＴｒａｃｋリストの項目ＴｒａｃｋＮｕｍに割り当てる。標準ＸＭＬ手段を使用して、この「ｔｒａｋ」要素に従属する（９レベルまでの）「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０を識別する。この要素２７１０の「ｓｔｒｅａｍＴｙｐｅ」属性の値を、リストＳｔｒｅａｍＴｙｐｅＦｏｒＴｒａｃｋの項目ＴｒａｃｋＮｕｍに割り当てる。この要素２７１０の「ｏｂｊｅｃｔＴｙｐｅ」属性の値を、リストＯｂｊｅｃｔＴｙｐｅＦｏｒＴｒａｃｋの項目ＴｒａｃｋＮｕｍに割り当てる。その後、量ＴｒａｃｋＮｕｍの値を１つ増分する。
【０５４０】
次の手段を使用して、量「ＭａｘＮｕｍＣｈｕｎｋｓ」および「ＭａｘＮｕｍＯｄｓｍＳａｍｐｌｅｓ」の値を決定する。
【０５４１】
標準ＸＭＬ手段を使用して、ｍｐ４ｆｉｌｅ文書２３００のトップ・レベル要素に従属するすべての「ｍｄａｔ」要素２３１０を識別する。標準ＸＭＬ手段を使用して、各「ｍｄａｔ」要素２３１０および２４００に従属するすべての要素を識別する。結果の従属要素に、「ｍｅｄｉａＦｉｌｅ」要素２４３０、「ｓｄｓｍ」要素２４１０、および「ｏｄｓｍ」要素２４２０が含まれる可能性がある。標準ＸＭＬ手段を使用して、各「ｍｄａｔ」要素２４００に従属する要素２４１０、２４２０、および２４３０のそれぞれに従属する各「チャンク」要素２４５０および２４９０ならびに「ｏｄｓｍＣｈｕｎｋ」要素２４７０を識別する。
【０５４２】
量ＭａｘＮｕｍＣｈｕｎｋｓの値を、各「ｍｄａｔ」要素２４００に従属する要素２４１０、２４２０、および２４３０のそれぞれに従属する「チャンク」要素２４５０および２４９０ごとにならびに「ｏｄｓｍＣｈｕｎｋ」要素２４７０ごとに１つ増分する。
【０５４３】
標準ＸＭＬ手段を使用して、各「ｏｄｓｍＣｈｕｎｋ」要素２４７０および２５００に従属する各「ｏｄｓｍＳａｍｐｌｅ」要素２５１０を識別する。量ＭａｘＮｕｍＯｄｓｍＳａｍｐｌｅｓの値を、各「ｏｄｓｍＣｈｕｎｋ」要素２５００に従属する「ｏｄｓｍＳａｍｐｌｅ」要素２５１０ごとに１つ増分する。
【０５４４】
次の４つのリストを、これらのリストのそれぞれの項目数を指定するために、量「ＭａｘＮｕｍＣｈｕｎｋｓ」の値を使用して作成する。
１．ＭｄａｔＩｄＦｏｒＣｈｕｎｋ
２．ＴｒａｃｋＩｄＦｏｒＣｈｕｎｋ
３．ＯｆｆｓｅｔＦｏｒＣｈｕｎｋ
４．ＭｅｄｉａＤａｔａＳｉｚｅ
【０５４５】
これらのリストのそれぞれが、整数の配列である。これらのリストを作成した後に、値０を量ＮｕｍＣｈｕｎｋｓに割り当てる。
【０５４６】
量「ＭａｘＮｕｍＯｄｓｍＳａｍｐｌｅｓ」の値が、０を超える場合に、次の２つのリストを、これらのリストのそれぞれの項目数を指定するために、量「ＭａｘＮｕｍＯｄｓｍＳａｍｐｌｅｓ」の値を使用して作成する。
１．ＯｄｓｍＳａｍｐｌｅＳｉｚｅ
２．ＯｄｓｍＳａｍｐｌｅＴｉｍｅ
【０５４７】
これらのリストのそれぞれが、整数の配列である。これらのリストを作成した後に、値０を量ＮｕｍＯｄｓｍＳａｍｐｌｅｓに割り当てる。
【０５４８】
７．２．３  「ｍｄａｔ」要素の処理
出力ｍｐ４ファイル２２３０の作成の第３ステップは、ｍｐ４ｆｉｌｅ文書２３００に含まれるｍｄａｔ要素２３１０のそれぞれを処理することが含まれる。
【０５４９】
標準ＸＭＬ手段を使用して、図５９に示された、ｍｐ４ｆｉｌｅ文書２３００のトップ・レベル要素に従属する各ｍｄａｔ要素２３１０を識別する。この「ｍｄａｔ」要素２３１０のそれぞれを、図１０５に示された手段を使用して処理する。図１０５に示された手順は、図１０３に示された処理の例である。
【０５５０】
動作５２００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５２１２で、値０の３２ビット整数を出力ｍｐ４ファイル７２４に書き込む。動作５２２４で、文字「ｍ」、「ｄ」、「ａ」、および「ｔ」に対応するＡＳＣＩＩ値を表す４バイトを、出力ｍｐ４ファイル７３０に書き込む。このｍｄａｔ要素の「ｍｄａｔＩｄ」属性の値を、量「ｍｄａｔＩｄ」に割り当てる。プロパティ値は、出力ｍｐ４ファイルに書き込まれない。
【０５５１】
動作５２３６で、値０をインデックス「ｉ」に割り当てる。動作５２４２で、インデックス「ｉ」の値を量「ｎｕｍＭｄａｔＣｈｉｌｄｒｅｎ」の値と比較するが、量「ｎｕｍＭｄａｔＣｈｉｌｄｒｅｎ」は、現在のｍｄａｔ要素によって所有される従属要素の個数を示す。インデックス「ｉ」の値が量「ｎｕｍＭｄａｔＣｈｉｌｄｒｅｎ」の値と等しい場合に、動作５２４８で、ｍｄａｔアトムのサイズ７２４を、図１０３の最後の５つの部分（動作５０６０から５０９５）に示されているように更新する。
【０５５２】
インデックス「ｉ」の値が量「ｎｕｍＭｄａｔＣｈｉｌｄｒｅｎ」の値と等しくない場合に、動作５２５４で、標準ＸＭＬ手段を使用して、現在のｍｄａｔ要素に従属する各ＸＭＬ要素を入手する。現在のｍｄａｔ要素に従属するｉ番目のＸＭＬ要素を、「ｍｄａｔＣｈｉｌｄ」によって表し、要素ｍｄａｔＣｈｉｌｄの要素名を、「ｃｈｉｌｄＮａｍｅ」によって表す。
【０５５３】
動作５２６０で、ＸＭＬ要素ｍｄａｔＣｈｉｌｄの名前を、ストリング「ｍｅｄｉａＦｉｌｅ」と比較する。ＸＭＬ要素ｍｄａｔＣｈｉｌｄの名前がストリング「ｍｅｄｉａＦｉｌｅ」と一致する場合に、動作５２６６で、手順「メディア・ファイル・データの挿入」を実行する。手順「メディア・ファイル・データの挿入」を実行した後に、インデックス「ｉ」の値を１つ増分し５２９６、量「ｎｕｍＭｄａｔＣｈｉｌｄｒｅｎ」の値とのインデックス「ｉ」の値の比較動作５２４２を繰り返す。
【０５５４】
ＸＭＬ要素ｍｄａｔＣｈｉｌｄの名前がストリング「ｍｅｄｉａＦｉｌｅ」と一致しない場合に、動作５２７２で、ＸＭＬ要素ｍｄａｔＣｈｉｌｄの名前をストリング「ｏｄｓｍ」と比較する。ＸＭＬ要素ｍｄａｔＣｈｉｌｄの名前がストリング「ｏｄｓｍ」と一致する場合に、動作５２７８で、手順「Ｏｄｓｍデータの挿入」を実行する。手順「Ｏｄｓｍデータの挿入」を実行した後に、インデックス「ｉ」の値を１つ増分し動作５２９６で、量「ｎｕｍＭｄａｔＣｈｉｌｄｒｅｎ」の値とのインデックス「ｉ」の値の比較動作５２４２を繰り返す。
【０５５５】
ＸＭＬ要素ｍｄａｔＣｈｉｌｄの名前がストリング「ｏｄｓｍ」と一致しない場合に、動作５２８４で、ＸＭＬ要素ｍｄａｔＣｈｉｌｄの名前をストリング「ｓｄｓｍ」と比較する。ＸＭＬ要素ｍｄａｔＣｈｉｌｄの名前がストリング「ｓｄｓｍ」と一致する場合に、動作５２９０で、手順「Ｓｄｓｍデータの挿入」を実行する。手順「Ｓｄｓｍデータの挿入」を実行した後に、インデックス「ｉ」の値を１つ増分し動作５２９６で、量「ｎｕｍＭｄａｔＣｈｉｌｄｒｅｎ」の値とのインデックス「ｉ」の値の比較動作５２４２を繰り返す。
【０５５６】
ＸＭＬ要素ｍｄａｔＣｈｉｌｄの名前がストリング「ｓｄｓｍ」と一致しない場合に、動作５２９６でインデックス「ｉ」の値を１つ増分し、量「ｎｕｍＭｄａｔＣｈｉｌｄｒｅｎ」の値とのインデックス「ｉ」の値の比較動作５２４２を繰り返す。
【０５５７】
７．２．３．１  メディア・ファイル・データの挿入
図１０６の手順「メディア・ファイル・データの挿入」５２２６は、「ｍｄａｔ」要素２４００に従属する「ｍｅｄｉａＦｉｌｅ」要素２４３０を処理するのに使用される。動作５３００で、「ｍｅｄｉａＦｉｌｅ」要素２４３０の「ｔｒａｃｋＩｄ」属性の値を、量「ｔｒａｃｋＩｄ」に割り当てる。動作５３０６で、「ｍｅｄｉａＦｉｌｅ」要素２４３０の「ｎａｍｅ」属性の値を、量「ｍｅｄｉａＦｉｌｅＮａｍｅ」に割り当てる。
【０５５８】
動作５３１２で、量「ｔｒａｃｋＩｄ」の値と一致するＴｒａｃｋＩｄＦｏｒＴｒａｃｋリストの項目のインデックスによって、量「ｔｒａｃｋＮｕｍ」の値を決定する。動作５３１８で、リストＳｔｒｅａｍＴｙｐｅＦｏｒＴｒａｃｋおよびリストＯｂｊｅｃｔＴｙｐｅＦｏｒＴｒａｃｋの対応する項目（インデックスｔｒａｃｋＮｕｍを有する）の値を、量「ｓｔｒｅａｍＴｙｐｅ」および「ｏｂｊｅｃｔＴｙｐｅ」に割り当てる。
【０５５９】
動作５３２４で、ｍｅｄｉａＦｉｌｅＮａｍｅ量の値によって識別されるメディア・データ・ファイルの新しい「Ｆｉｌｅ」オブジェクトを作成する。動作５３３０で、このオブジェクトを、量ｔｒａｃｋＮｕｍの値によって決定されるインデックスを有する、ＭｅｄｉａＤａｔａＦｉｌｅリストの項目として保管する。動作５３３６で、このメディア・データ・ファイルを含むバイト数と定義されるこのメディア・データ・ファイルのサイズを、この新しいＦｉｌｅオブジェクトのｌｅｎｇｔｈプロパティとして入手する。このサイズ値を、量「ｍｅｄｉａＦｉｌｅＳｉｚｅ」に割り当てる。動作５３４２で、量「ＭｅｄｉａＨｅａｄｅｒＳｉｚｅ」の値を、０に初期化する。
【０５６０】
動作５３４８で、値０をインデックス「ｉ」に割り当てる。動作５３５４で、インデックス「ｉ」の値を、量「ｎｕｍＭｅｄｉａＦｉｌｅＣｈｉｌｄｒｅｎ」の値と比較するが、値を、量「ｎｕｍＭｅｄｉａＦｉｌｅＣｈｉｌｄｒｅｎ」の値は、現在のｍｅｄｉａＦｉｌｅ要素２４３０に従属するＸＭＬ要素の個数によって決定される。
【０５６１】
インデックス「ｉ」の値が量「ｎｕｍＭｅｄｉａＦｉｌｅＣｈｉｌｄｒｅｎ」の値と等しい場合に、動作５３６０で、メディア・データ・ファイル内のサンプルの個数を数える。メディア・データ・ファイル内のサンプルを数えるのに使用される手段は、「ｓｔｒｅａｍＴｙｐｅ」および「ｏｂｊｅｃｔＴｙｐｅ」の値と、メディア・データ・ファイルの各特定のタイプの詳細なファイル構造詳細に依存する。これらの手段は、本発明に固有ではなく、本明細書では提示しない。動作５３６６で、メディア・データ・ファイル内のサンプルの個数を数えた後に、結果のサンプル・カウントを、量ｔｒａｃｋＮｕｍの値によって決定されるインデックスを有する、ＭｅｄｉａＳａｍｐｌｅｓリストの項目として保管する。
【０５６２】
量「ｉ」の値が量「ｎｕｍＭｅｄｉａＦｉｌｅＣｈｉｌｄｒｅｎ」の値と等しくない場合に、動作５３７２で、標準ＸＭＬ手段を使用して、現在のｍｅｄｉａＦｉｌｅ要素２４８０に従属する各ＸＭＬ要素を入手する。現在のｍｅｄｉａＦｉｌｅ要素に従属するｉ番目のＸＭＬ要素を、「ｍｅｄｉａＦｉｌｅＣｈｉｌｄ」によって表し、要素ｍｅｄｉａＦｉｌｅＣｈｉｌｄの要素名を、「ｃｈｉｌｄＮａｍｅ」によって表す。
【０５６３】
動作５３８４で、ＸＭＬ要素ｍｅｄｉａＦｉｌｅＣｈｉｌｄの名前をストリング「ｃｈｕｎｋ」と比較する。
【０５６４】
ＸＭＬ要素ｍｅｄｉａＦｉｌｅＣｈｉｌｄの名前がストリング「ｃｈｕｎｋ」と一致する場合に、動作５３９０で、手順「メディア・データ・チャンクの挿入」を実行する。手順「メディア・データ・チャンクの挿入」を実行した後に、動作５３９６でインデックス「ｉ」の値を１つ増分し、量「ｎｕｍＭｅｄｉａＦｉｌｅＣｈｉｌｄｒｅｎ」の値とのインデックス「ｉ」の値の比較の動作５３５４を繰り返す。
【０５６５】
ＸＭＬ要素ｍｅｄｉａＦｉｌｅＣｈｉｌｄの名前がストリング「ｃｈｕｎｋ」と一致しない場合に、動作５３９６でインデックス「ｉ」の値を１つ増分し、量「ｎｕｍＭｅｄｉａＦｉｌｅＣｈｉｌｄｒｅｎ」の値とのインデックス「ｉ」の値の比較の動作５３５４を繰り返す。
【０５６６】
７．２．３．２  メディア・データ・チャンクの挿入
手順「メディア・データ・チャンクの挿入」５３９０は、主に、メディア・データ・ファイル２２２０の内容を出力ｍｐ４ファイル２２３０に付加することからなる。量「ｓｔｒｅａｍＴｙｐｅ」および「ｏｂｊｅｃｔＴｙｐｅ」の値によって決定されるあるタイプのメディア・データは、最初の「ヘッダ」データ・セクションから始まるものとすることができる。これには、「ＭＰＥＧ−４ビデオ」（ｓｔｒｅａｍＴｙｐｅ＝４かつｏｂｊｅｃｔＴｙｐｅ＝３２）が含まれる。特定のタイプのメディア・データのヘッダ・データ・セクションを識別するのに必要な正確な手段は、メディア・データ・ファイルの各タイプの詳細な仕様に依存する。これらのファイル仕様は、本発明の範囲の外であり、本明細書には含まれない。ＭＰＥＧ−４ビデオ・ストリームの説明については、ＩＳＯ／ＩＥＣ文書１４４９６−２（１９９９年、２０００年修正）「情報テクノロジ−オーディオ・ビジュアル・オブジェクトのコーディング−第２部：ビジュアル（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）」］。これらの仕様および関連するデータ変換は、本発明の範囲の外であり、本明細書には含まれない。
【０５７６】
８．量「ｎｕｍＣｈｕｎｋｓ」の値を１つ増分する。
【０５７７】
７．２．３．３  ｏｄｓｍデータの挿入
手順「ｏｄｓｍデータの挿入」５２７８は、「ｍｄａｔ」要素２４００に従属する「ｏｄｓｍ」要素２４２０を処理するのに使用される。この手順は、現在のｏｄｓｍ要素２４６０に従属する「ｏｄｓｍＣｈｕｎｋ」要素２４７０ごとに、出力ｍｐ４ファイルに新しいチャンク７３６を作る。
【０５７８】
「ｏｄｓｍ」要素２４２０の「ｔｒａｃｋＩｄ」属性の値を、量「ｔｒａｃｋＩｄ」に割り当てる。標準ＸＭＬ手段を使用して、「ｏｄｓｍ」要素２４２０および２４６０に従属する各「ｏｄｓｍＣｈｕｎｋ」要素２４７０を入手する。
【０５７９】
現在の「ｏｄｓｍ」要素２４６０に従属する「ｏｄｓｍＣｈｕｎｋ」要素２４７０ごとに、次の動作が実行される。
【０５８０】
１．動作５２３０で決定された量「ｍｄａｔＩｄ」の値を、リスト「ＭｄａｔＩｄＦｏｒＣｈｕｎｋ」の項目「ＮｕｍＣｈｕｎｋｓ」に割り当てる。
【０５８１】
２．量「ｔｒａｃｋＩｄ」の値を、リスト「ＴｒａｃｋＩｄＦｏｒＣｈｕｎｋ」の項目「ＮｕｍＣｈｕｎｋｓ」に割り当てる。
【０５８２】
３．出力ｍｐ４ファイルの現在のファイル位置の値を、リスト「ＯｆｆｓｅｔＦｏｒＣｈｕｎｋ」の項目「ＮｕｍＣｈｕｎｋｓ」に割り当てる。
【０５８３】
４．値「−１」を、リスト「ＭｅｄｉａＤａｔａＳｉｚｅ」の項目「ＮｕｍＣｈｕｎｋｓ」に割り当てる。
【０５８４】
５．量「ｎｕｍＣｈｕｎｋｓ」の値を１つ増分する。
【０５８５】
６．標準ＸＭＬ手段を使用して、「ｏｄｓｍＣｈｕｎｋ」要素２５００に従属する各「ｏｄｓｍＳａｍｐｌｅ」要素２５１０を入手する。
【０５８６】
ステップ６で識別された「ｏｄｓｍＳａｍｐｌｅ」要素２５１０ごとに、現在のｍｐ４ファイル位置を量「ｓａｍｐｌｅＳｔａｒｔ」に割り当て、「ｓｉｚｅ」属性の値を量「ｓａｍｐｌｅＳｉｚｅ」に割り当て、「ｔｉｍｅ」属性の値を量「ｓａｍｐｌｅＴｉｍｅ」に割り当てる。量「ｓａｍｐｌｅＴｉｍｅ」の値を、リスト「ＯｄｓｍＳａｍｐｌｅＴｉｍｅ」の項目ｎｕｍＯｄｓｍＳａｍｐｌｅｓに割り当てる。「ｓａｍｐｌｅＳｉｚｅ」の値は、結果のバイナリｏｄｓｍサンプルの推定値として扱われる。これは、最終的なファイル位置と「ｓａｍｐｌｅＳｔａｒｔ」の値との間の差によって決定される正確な値に置換される。
【０５８７】
標準ＸＭＬ手段を使用して、「ｏｄｓｍＳａｍｐｌｅ」要素２５２０に従属する各ＸＭＬ要素２５３０を入手する。これらの従属要素は、「ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ」２５４０または「ＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅ」２５７０の要素名を有すると期待される。これらの事例のそれぞれが、下で示すように処理される。
【０５８８】
「ｏｄｓｍＳａｍｐｌｅ」要素２５２０に従属するすべてのＸＭＬ要素２５３０の処理が完了した後に、出力ｍｐ４ファイルの結果のファイル位置と量「ｓａｍｐｌｅＳｔａｒｔ」の間の差が、量「ｓａｍｐｌｅＳｉｚｅ」に割り当てられる（対応する属性値から導出された推定値と置換される）。この値を、リスト「ＯｄｓｍＳａｍｐｌｅＳｉｚｅ」の項目「ｎｕｍＯｄｓｍＳａｍｐｌｅｓ」に割り当てる。その後、量「ｎｕｍＯｄｓｍＳａｍｐｌｅｓ」の値を１つ増分する。
【０５８９】
７．２．３．４  ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ要素
「ｏｄｓｍＳａｍｐｌｅ」要素２５２０に従属する「ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ」要素２５４０ごとに、図１０４に示された手順を使用して、出力ｍｐ４ファイル内にＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅオブジェクト構造２０００を作成する。構造タグ「ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅＴａｇ」（値＝１）２０１０を、動作５１００で、８ビット整数として出力ｍｐ４ファイルに書き込む。動作５１１０で、出力ｍｐ４ファイルの現在のファイル位置を量「ｓｉｚｅＰｏｓ」に割り当て、「ｓｉｚｅＰｏｓ」の値を、量「ｆｉｌｅＰｏｓ１」に割り当てる。動作５１２０で、値「１」を、量「ｎｕｍＳｉｚｅＢｙｔｅｓ」に割り当てる。動作５１３０で、値０を、予備的なサイズ値２０２０として出力ｍｐ４ファイルに書き込む。
【０５９０】
「ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ」要素２５４０は、属性を有しないので、動作５１３５および５１４０では何も行わない。
【０５９１】
標準ＸＭＬ手段を使用して、「ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ」要素２５４０に従属する各ＸＭＬ要素２５５０を入手する。これらの従属要素は、「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」２５５０の要素名を有すると期待される。下の動作５１５０に記載されているように各従属「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素２５５０を処理した後に、ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ構造のサイズ２０２０を、図１０４（動作５１６０から５１９５）に示されているように更新する。
【０５９２】
「ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ」要素２５４０に従属する「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素２５５０ごとに、図１０４に示された手順を使用して、出力ｍｐ４ファイル内でＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒｓオブジェクト構造２０３０および２１００を作成する。動作５１００で、構造タグ「ＭＰ４＿ＯＤ＿Ｔａｇ」（値＝１７）２１０８を、８ビット整数として出力ｍｐ４ファイルに書き込む。動作５１１０で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当て、「ｓｉｚｅＰｏｓ」の値を、量「ｆｉｌｅＰｏｓ２」に割り当てる。動作５１２０で、値「１」を量「ｎｕｍＳｉｚｅＢｙｔｅｓ」に割り当てる。動作５１３０で、値０を、予備的サイズ値２１１６として出力ｍｐ４ファイルに書き込む。
【０５９３】
「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素２５５０の「ＯｄＩｄ」属性の値を、量「ＯｄＩｄ」に割り当てる。量「ＯｄＩｄ」の数値に、６４をかけ（左に６ビットだけシフトする）、値「３１」を結果に足して、量「ＯｄＩｄ」の変更された値を決定する。値「３１」は、ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒオブジェクト構造２１００内の「予約済みフィールド」２１４０を表す。
【０５９４】
「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素２５５０の「ｕｒｌ」属性が指定されている場合に、値「３２」を、変更された「ＯｄＩｄ」値に加算する。結果の値を、１６ビット整数としてｍｐ４ファイルに書き込む。「ｕｒｌ」属性の値の文字数を示す１バイトを、ｍｐ４ファイルに書き込む。次に、「ｕｒｌ」属性の値を、文字のシーケンスとしてｍｐ４ファイルに書き込む。
【０５９５】
「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素２５５０の「ｕｒｌ」属性が指定されていない場合には、変更された「ＯｄＩｄ」値を、１６ビット整数２１２４、２１３２、および２１４０としてｍｐ４ファイルに書き込む。
【０５９６】
次に、標準ＸＭＬ手段を使用して、「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素２５５０に従属する各ＸＭＬ要素２５６０を入手する。これらの従属要素は、「ＥｓＩｄＲｅｆ」という名前の要素２５６０を有すると期待される。
【０５９７】
現在の「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素２５５０に従属する「ＥｓＩｄＲｅｆ」要素２５６０ごとに、図１０４に示された手順を使用して、出力ｍｐ４ファイル内でＥｓＩｄＲｅｆオブジェクト構造２１４８および２１６０を作成する。動作５１００で、構造タグ「ＥｓＩｄＲｅｆＴａｇ」（値＝１５）２１７０を、８ビット整数として出力ｍｐ４ファイルに書き込む。動作５１１０で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５１２０で、値「１」を、量「ｎｕｍＳｉｚｅＢｙｔｅｓ」に割り当てる。動作５１３０で、値０を、予備的サイズ値２１８０として出力ｍｐ４ファイルに書き込む。
【０５９８】
動作５１３５で、「ＥｓＩｄＲｅｆ」要素２５６０の「ＥｓＩｄ」属性の値を、量「ＥｓＩｄ」に割り当てる。次に、動作５１４０で、量「ＥｓＩｄ」の数値を、１６ビット整数２１９０として出力ｍｐ４ファイルに書き込む。ＥｓＩｄＲｅｆ要素２５６０は、従属要素を有しない５１５０。
【０５９９】
「ＥｓＩｄ」値２１９０の処理の後に、ＥｓＩｄＲｅｆオブジェクト構造のサイズ２１８０を、図１０４（動作５１６０から５１９５）に示されているように更新する。
【０６００】
「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素２５５０の処理の後に、ｆｉｌｅＰｏｓ２の値を量「ｓｉｚｅＰｏｓ」に割り当て、ＭＰ４＿ＯＤオブジェクト構造２１００のサイズ２１１６を、図１０４（動作５１６０から５１９５）に示されているように更新する。
【０６０１】
「ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ」要素２５４０の処理の後に、ｆｉｌｅＰｏｓ１の値を、量「ｓｉｚｅＰｏｓ」に割り当て、ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅオブジェクト構造２０００のサイズ２０２０を、図１０４（動作５１６０から５１９６）に示されているように更新する。
【０６０２】
７．２．３．５  ＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅ要素
現在の「ｏｄｓｍＳａｍｐｌｅ」要素２５２０に従属する「ＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅ」要素２５７０ごとに、図１０４に示された手順を使用して、出力ｍｐ４ファイル内にＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅオブジェクト構造２０４０を作成する。動作５１００で、構造タグ「ＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅＴａｇ」（値＝２）２０５０を、８ビット整数として出力ｍｐ４ファイルに書き込む。動作５１１０で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当て、「ｓｉｚｅＰｏｓ」の値を、量「ｆｉｌｅＰｏｓ１」に割り当てる。動作５１２０で、値「１」を量「ｎｕｍＳｉｚｅＢｙｔｅｓ」に割り当てる。動作５１３０で、値０を、予備的サイズ値２０６０として出力ｍｐ４ファイルに書き込む。
【０６０３】
「ＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅ」要素２５７０の「ＯｄＩｄ」属性の値を、量「ＯｄＩｄＬｉｓｔ」に割り当てる。
【０６０４】
量「ＯｄＩｄＬｉｓｔ」は、「ホワイト・スペース」（空白スペースおよび他の非数字文字）によって区切られた１つまたは複数の整数を表す文字ストリングからなる。「ＯｄＩｄＬｉｓｔ」内の数字文字の各シーケンスは、整数として解釈され、結果の値が、１０ビットのｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩｄ値２０７０としてｍｐ４ファイルに書き込まれる。ｍｐ４ファイルに書き込まれる連続するｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩｄ値２０７０は、バイト整列されない。ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩｄ値２０７０のシーケンスによって占められる総バイト数（ｎＢｉｔｓ）が、８の倍数でない場合には、ｎＰａｄ個の０ビット２０８０がｍｐ４ファイルに書き込まれ、ｎＰａｄの値は、ｎＢｉｔｓ  ｍｏｄｕｌｏ  ８によって与えられる。
【０６０５】
「ＯｄＩｄＬｉｓｔ」量の処理の後に、ＯｂｊｅｃｔＤｅｓｃｒＲｅｍｏｖｅオブジェクト構造２０４０のサイズ２０６０が、図１０４（動作５１６０から５１９５）に示されているように更新される。
【０６０６】
７．２．３．６  ｓｄｓｍデータの挿入
手順「Ｓｄｓｍデータの挿入」は、「ｍｄａｔ」要素２４００に従属する「ｓｄｓｍ」要素２４１０を処理するのに使用される。「ｓｄｓｍ」要素２４１０および２４４０の「ｔｒａｃｋＩｄ」属性の値を、量「ｔｒａｃｋＩｄ」に割り当てる。任意選択の属性「ｘｍｌＦｉｌｅ」を設けることができる。この属性は、ｍｐ４ｂｉｆｓ文書２８００を表す入力ＸＭＬファイルの名前を指定するのに使用することができる。その代わりに、ＸＭＴ−Ａ文書に基づくｍｐ４ｆｉｌｅ文書およびｍｐ４ｂｉｆｓ文書の作成に関して上で説明した処理など、別の処理の結果としてｍｐ４ｂｉｆｓ文書２８００を入手することができる。その後、標準ＸＭＬ手段を使用して、ｍｐ４ｂｉｆｓ文書２８００のトップ・レベル要素を入手する。
【０６０７】
図７１からわかるように、ｍｐ４ｂｉｆｓ文書２８００は、単一の従属する「ｂｉｆｓＣｏｎｆｉｇ」要素２８１０および１つまたは複数の従属する「ｃｏｍｍａｎｄＦｒａｍｅ」要素２８２０を有するｍｐ４ｂｉｆｓトップレベル要素からなる。各「ｃｏｍｍａｎｄＦｒａｍｅ」要素２８２０は、ｓｃｅｎｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｓｔｒｅａｍ（ｓｄｓｍ）の「サンプル」を表す。ｍｐ４ｂｉｆｓ文書２８００の解釈の準備で、ｓｄｓｍサンプルの数を、ｍｐ４ｂｉｆｓトップ要素２８００に従属する「ｃｏｍｍａｎｄＦｒａｍｅ」要素２８２０の個数を数えることによって決定することができる。結果の値を、量「ＭａｘＮｕｍＳｄｓｍＳａｍｐｌｅｓ」に割り当て、それぞれがＭａｘＮｕｍＳｄｓｍＳａｍｐｌｅｓ個の項目を有する２つのリストを作成する。このリストの一方「ＳｄｓｍＳａｍｐｌｅＳｉｚｅ」は、整数値のリストである。第２のリスト「ＳｄｓｍＳａｍｐｌｅＴｉｍｅ」は、浮動小数点値、好ましくは倍精度浮動小数点値（項目あたり６４ビット）のリストである。値０を、量「ＮｕｍＳａｍｐｌｅｓ」に割り当てる。
【０６０８】
標準ＸＭＬ手段を使用して、「ｓｄｓｍ」要素２４４０に従属する各「チャンク」要素２４５０を入手する。「ｓｄｓｍ」要素２４４０ごとに、多くとも１つの従属する「チャンク」要素２４５０が期待される。次の動作が、「チャンク」要素２４５０に対して実行される。
【０６０９】
１．動作５２３０で決定された量「ｍｄａｔＩｄ」の値を、リスト「ＭｄａｔＩｄＦｏｒＣｈｕｎｋ」の項目「ＮｕｍＣｈｕｎｋｓ」に割り当てる。
【０６１０】
２．量「ｔｒａｃｋＩｄ」の値を、リスト「ＴｒａｃｋＩｄＦｏｒＣｈｕｎｋ」の項目「ＮｕｍＣｈｕｎｋｓ」に割り当てる。
【０６１１】
３．現在のファイル位置の値を、リスト「ＯｆｆｓｅｔＦｏｒＣｈｕｎｋ」の項目「ＮｕｍＣｈｕｎｋｓ」に割り当てる。
【０６１２】
４．値「−１」を、リスト「ＭｅｄｉａＤａｔａＳｉｚｅ」の項目「ＮｕｍＣｈｕｎｋｓ」に割り当てる。
【０６１３】
５．量「ｎｕｍＣｈｕｎｋｓ」の値を１つ増分する。
【０６１４】
次に、ｍｐ４ｂｉｆｓ文書２８００を、下で説明するように解釈する。この文書が解釈される時に、データ値が、出力ｍｐ４ファイル７００に書き込まれ、値が、リスト「ＳｄｓｍＳａｍｐｌｅＳｉｚｅ」および「ＳｄｓｍＳａｍｐｌｅＴｉｍｅ」に入力される。オブジェクト指向実施形態では、これが、新しいＳｄｓｍＥｎｃｏｄｅｒオブジェクトを作成し、このオブジェクトのメソッド「ｅｎｃｏｄｅＳｄｓｍ」を呼び出すことによって達成される。このメソッドは、完成したリスト「ＳｄｓｍＳａｍｐｌｅＳｉｚｅ」および「ＳｄｓｍＳａｍｐｌｅＴｉｍｅ」を返し、ｓｄｓｍのバイナリ・エンコーディングを表すデータを出力ｍｐ４ファイル７００に付加する。
【０６１５】
標準ＸＭＬ手段を使用して、ｍｐ４ｂｉｆｓトップ・レベル要素２８００に従属する「ｂｉｆｓＣｏｎｆｉｇ」要素２８１０を入手する。この要素の「ｒｏｕｔｅＩｄＢｉｔｓ」属性の値を、量「ＲｏｕｔｅＩｄＢｉｔｓ」に割り当てる。この要素の「ｎｏｄｅＩｄＢｉｔｓ」属性の値を、量「ＮｏｄｅＩｄＢｉｔｓ」に割り当てる。２の「ＮｏｄｅＩｄＢｉｔｓ」乗（または左にＮｏｄｅＩｄＢｉｔｓだけシフトされた「１」）の値を、量ＭａｘＵｐｄａｔｅａｂｌｅＮｏｄｅｓに割り当てる。整数の２つの新しいリスト「ＵｐｄａｔｅａｂｌｅＮｏｄｅＩｄ」および「ＵｐｄａｔｅａｂｌｅＮｏｄｅＮｕｍｂｅｒ」を作成する。これらのリストのそれぞれの項目数は、「ＭａｘＵｐｄａｔｅａｂｌｅＮｏｄｅｓ」の値によって決定される。値０を、量「ＮｕｍＵｐｄａｔｅａｂｌｅＮｏｄｅｓ」に割り当てる。値「偽」を、ｂｏｏｌｅａｎ量「ｂＵｓｅＮａｍｅｓ」に割り当てる。
【０６１６】
次に、標準ＸＭＬ手段を使用して、ｍｐ４ｂｉｆｓトップ・レベル要素２８００に従属する各「ｃｏｍｍａｎｄＦｒａｍｅ」要素２８２０を入手する。次の手段を使用して、各そのような「ｃｏｍｍａｎｄＦｒａｍｅ」要素２８２０を処理する。
【０６１７】
１．出力ｍｐ４ファイルの現在のファイル位置の値を、量「ＦｉｌｅＰｏｉｎｔｅｒＡｔＳｔａｒｔ」に割り当てる。
【０６１８】
２．「ｃｏｍｍａｎｄＦｒａｍｅ」要素２８２０の「ｔｉｍｅ」属性の値を、量「Ｔｉｍｅ」に割り当てる。量「Ｔｉｍｅ」の値を、リスト「ＳｄｓｍＳａｍｐｌｅＴｉｍｅ」の項目「ＮｕｍＳａｍｐｌｅｓ」に割り当てる。
【０６１９】
３．標準ＸＭＬ手段を使用して、「ｃｏｍｍａｎｄＦｒａｍｅ」要素２８３０に従属するｂｉｆｓＣｏｍｍａｎｄ要素２８４０のそれぞれを入手する。そのような従属要素のそれぞれを、下で説明するように処理する。
【０６２０】
４．出力ｍｐ４ファイルの現在のファイル位置の値を、量「ＦｉｌｅＰｏｉｎｔｅｒＡｔＥｎｄ」に割り当て、量「ＦｉｌｅＰｏｉｎｔｅｒＡｔＥｎｄ」の値と量「ＦｉｌｅＰｏｉｎｔｅｒＡｔＳｔａｒｔ」の値の間の差を、リスト「ＳｄｓｍＳａｍｐｌｅＳｉｚｅ」の項目「ＮｕｍＳａｍｐｌｅｓ」に割り当てる。
【０６２１】
５．量「ＮｕｍＳａｍｐｌｅｓ」の値を１つ増分する。
【０６２２】
図７２からわかるように、各「ｃｏｍｍａｎｄＦｒａｍｅ」要素２８３０に、１つまたは複数の従属するｂｉｆｓＣｏｍｍａｎｄ要素２８４０が含まれる。各ｂｉｆｓＣｏｍｍａｎｄ要素２９１０は、ｓｄｓｍデータでエンコードできる１１個の可能なＢＩＦＳコマンドの１つを表す。これには、３つの挿入コマンド（「ＩｎｓｅｒｔＮｏｄｅ」、「ＩｎｓｅｒｔＲｏｕｔｅ」、および「ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ」）、３つの削除コマンド（「ＤｅｌｅｔｅＮｏｄｅ」、「ＤｅｌｅｔｅＲｏｕｔｅ」、および「ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ」）、および５つの置換コマンド（「ＲｅｐｌａｃｅＮｏｄｅ」、「ＲｅｐｌａｃｅＲｏｕｔｅ」、「ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ」、「ＲｅｐｌａｃｅＦｉｅｌｄ」、および「ＲｅｐｌａｃｅＳｃｅｎｅ」）が含まれる。図７３からわかるように、ＢＩＦＳコマンド要素２９１０は、ＢＩＦＳノードを表す従属要素２９２０を有することができる。図７４からわかるように、ＲｅｐｌａｃｅＳｃｅｎｅコマンドを表すｂｉｆｓＣｏｍｍａｎｄ要素２９３０に、１つまたは複数のＲｏｕｔｅ要素２９６０を含む単一の従属するＲｏｕｔｅｓ要素２９５０も含めることができる。
【０６２３】
特定の「ｃｏｍｍａｎｄＦｒａｍｅ」要素２８３０に従属するｂｉｆｓＣｏｍｍａｎｄ要素２８４０のバイナリ表現を生成する前に、各従属ｂｉｆｓＣｏｍｍａｎｄ要素２９１０を「スキャン」して、「ＮｏｄｅＩｄ」属性３０１０の値が指定されているすべての従属するＮｏｄｅ要素２９２０および３０００を識別する。この「スキャン」動作は、標準ＸＭＬ手段を使用して、現在の「ｃｏｍｍａｎｄＦｒａｍｅ」要素２８３０に従属するｂｉｆｓＣｏｍｍａｎｄ要素２８４０のそれぞれを入手することによって達成される。この動作は、１つまたは複数の従属するＢＩＦＳ  Ｎｏｄｅ要素２９２０および２９４０を含む可能性がある６つのｂｉｆｓＣｏｍｍａｎｄ要素（「ＩｎｓｅｒｔＮｏｄｅ」、「ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ」、「ＲｅｐｌａｃｅＮｏｄｅ」、「ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ」、「ＲｅｐｌａｃｅＦｉｅｌｄ」、および「ＲｅｐｌａｃｅＳｃｅｎｅ」）２９１０だけに適用される。
【０６２４】
この「スキャン」動作を実行するのに使用される手順は、出力ｍｐ４ファイルに対して何も行われないことと、「ｎｏｄｅＩｄ」属性およびフィールド・データ型「ｎｏｄｅ」または「ｃｏｍｍａｎｄ  ｂｕｆｆｅｒ」を有する属性以外のすべての属性が無視されることとを除いて、下で説明する後続ＢＩＦＳコマンド解釈手順に使用されるものと同等である。「ＮｏｄｅＩｄ」属性が指定されたノードごとに、「ＮｏｄｅＩｄ」属性の値を、リスト「ＵｐｄａｔｅａｂｌｅＮｏｄｅＩｄ」の項目「ｎｕｍＵｐｄａｔｅａｂｌｅＮｏｄｅｓ」に割り当てる。このノードの「ｎｏｄｅ  ｎｕｍｂｅｒ」プロパティの値を、「ＵｐｄａｔｅａｂｌｅＮｏｄｅＮｕｍｂｅｒ」リストの対応する項目に割り当てる。特定のノード要素の「ｎｏｄｅ  ｎｕｍｂｅｒ」プロパティは、このノード要素の要素名と一致する、ノード名のテーブル内の項目のインデックスによって決定される。ノード名のテーブルは、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様書で定義されている。その後、量「ＮｕｍＵｐｄａｔｅａｂｌｅＮｏｄｅｓ」の値を１つ増分する。
【０６２５】
従属するｂｉｆｓＣｏｍｍａｎｄ要素２８４０をスキャンした後に、標準ＸＭＬ手段を再度使用して、現在の「ｃｏｍｍａｎｄＦｒａｍｅ」要素２８３０に従属する各ＸＭＬ要素２８４０を入手する。図２８からわかるように、各ＢＩＦＳコマンド１１２０に、「継続」ビット１１３０および１１４０が続く。「ｃｏｍｍａｎｄＦｒａｍｅ」要素２８３０に従属する各ｂｉｆｓＣｏｍｍａｎｄ要素２８４０を処理する前に（最初のそのようなコマンドを除いて）、値「１」を有する単一のビットを出力ｍｐ４ファイルに書き込んで、「継続＝１」１１３０を指定する。従属するｂｉｆｓＣｏｍｍａｎｄ要素２８４０のそれぞれを、下で説明するように処理する。すべての従属要素を処理した後に、値「０」を有する単一のビットを出力ｍｐ４ファイルに書き込んで、「継続＝０」（コマンド・フレームの終り）１１４０を指定する。バイナリ形式でこのコマンド・フレームを表すのに使用されるビットの総数が、８の倍数でない場合には、最後のバイトを０  １１５０でパディングして、ビットの総数を８の倍数にする。
【０６２６】
次に、次の手段を使用して、現在のｃｏｍｍａｎｄＦｒａｍｅ要素２８３０に従属するｂｉｆｓＣｏｍｍａｎｄ要素２８４０ごとに、出力ｍｐ４ファイルにバイナリＢＩＦＳコマンド・データ構造を付加する。
【０６２７】
ｂｉｆｓＣｏｍｍａｎｄ要素２８４０が、３つの挿入コマンドのうちの１つを表す場合に、２ビットの挿入コード（バイナリ値＝００）１２０６が、出力ｍｐ４ファイルに書き込まれる。ＢＩＦＳＣｏｍｍａｎｄ要素２８４０が、３つの削除コマンドのうちの１つを表す場合に、２ビットの削除コード（バイナリ値＝０１）１２２０が、出力ｍｐ４ファイルに書き込まれる。ＢＩＦＳＣｏｍｍａｎｄ要素２８４０が、４つの置換コマンドのうちの１つ（ＲｅｐｌａｃｅＳｃｅｎｅ以外）を表す場合に、２ビットの置換コード（バイナリ値＝１０）１２４０が、出力ｍｐ４ファイルに書き込まれる。ＢＩＦＳＣｏｍｍａｎｄ要素２８４０が、ＲｅｐｌａｃｅＳｃｅｎｅコマンドを表す場合に、２ビットのｓｃｅｎｅ置換コード（バイナリ値＝１１）１２８０が、出力ｍｐ４ファイルに書き込まれる。
【０６２８】
７．２．３．７  ノード挿入ＢＩＦＳコマンド
「ＩｎｓｅｒｔＮｏｄｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０および２９１０の場合に、図３３に示されたＮｏｄｅ  Ｉｎｓｅｒｔｉｏｎ  ＢＩＦＳコマンド１３００を、出力ｍｐ４ファイルに付加する。「ノード」の２ビットのパラメータ型コード（バイナリ値＝００）１３０８を、挿入コード１３０４に続いて出力ｍｐ４ファイルに書き込む。ＩｎｓｅｒｔＮｏｄｅ要素の「ｐａｒｅｎｔＩｄ」属性の値を、量「ｎｏｄｅＩＤ」に割り当て、この量１３１２の整数値を、ｍｐ４ファイルに書き込む。量「ｎｏｄｅＩＤ」の値をエンコードするのに使用されるビット数は、量「ｎｏｄｅＩｄＢｉｔｓ」の値によって指定される。ＩｎｓｅｒｔＮｏｄｅ要素の「ｐａｒｅｎｔＩＤ」属性の値は、ＵｐｄａｔｅａｂｌｅＮｏｄｅＩｄリストの項目の１つと一致しなければならない。ＵｐｄａｔｅａｂｌｅＮｏｄｅＮｕｍｂｅｒリストの対応する項目は、従属するＮｏｄｅ要素の親ノードの「ｎｏｄｅ  ｎｕｍｂｅｒ」プロパティの値を指定する。
【０６２９】
ＩｎｓｅｒｔＮｏｄｅ要素の「ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ」属性の値を、量「ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ」に割り当て、この量１３１６の整数値を表す２ビットを、ｍｐ４ファイルに書き込む。量「ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ」の値が０である場合に、ＩｎｓｅｒｔＮｏｄｅ要素の「ｐｏｓｉｔｉｏｎ」属性の値を、量「ｐｏｓｉｔｉｏｎ」に割り当て、この量１３２０の整数値を表す８ビットを、ｍｐ４ファイルに書き込む。
【０６３０】
各ＩｎｓｅｒｔＮｏｄｅ要素に、従属するＮｏｄｅ要素２９２０が含まれる。このＮｏｄｅ要素のバイナリＳＦＮｏｄｅ表現１３２４を、挿入位置１３１６および１３２０を表すデータに続いて、出力ｍｐ４ファイルに付加する。ＳＦＮｏｄｅ構造のフォーマットは、図４４から４８に示されている。このＳＦＮｏｄｅ構造を作成するのに使用される手順を、下で説明する。
【０６３１】
７．２．３．８  Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｉｎｓｅｒｔｉｏｎ  ＢＩＦＳコマンド
「ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０および２９１０の場合に、図３４に示されたＩｎｄｅｘｅｄＶａｌｕｅ  Ｉｎｓｅｒｔｉｏｎ  ＢＩＦＳコマンド１３２８を、出力ｍｐ４ファイルに付加する。「ｉｎｄｅｘｅｄ  ｖａｌｕｅ」の２ビットのパラメータ型コード（バイナリ＝１０）１３３６を、挿入コード１３３２に続いてｍｐ４ファイルに書き込む。ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ要素の「ｎｏｄｅＩｄ」属性の値を、量「ｎｏｄｅＩＤ」に割り当て、この量１３４０の整数値をｍｐ４ファイルに書き込む。量「ｎｏｄｅＩＤ」の値のエンコードに使用されるビット数は、量「ｎｏｄｅＩｄＢｉｔｓ」の値によって指定される。
【０６３２】
ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ要素の「ｎｏｄｅＩｄ」属性の値は、ＵｐｄａｔｅａｂｌｅＮｏｄｅＩｄリストの項目の１つと一致しなければならない。ＵｐｄａｔｅａｂｌｅＮｏｄｅＮｕｍｂｅｒリストの対応する項目は、このＢＩＦＳコマンドに関連するフィールド値によって変更されるＢＩＦＳノードの「ｎｏｄｅ  ｎｕｍｂｅｒ」プロパティの値を指定する。
【０６３３】
このＢＩＦＳコマンドの「ｆｉｅｌｄ  ｉｎｄｅｘ」プロパティの値は、ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ要素の「ｉｎＦｉｅｌｄＮａｍｅ」属性の値と一致する値を有する、このノード番号のフィールド名のリストの項目のインデックスによって決定される。このフィールド名のリストは、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されている。このフィールドのｉｎＦｉｅｌｄＩＤプロパティの値は、ノード番号の値、フィールド・インデックスの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルの組によって決定される。量「ｎｕｍＢｉｔｓ」の値は、ノード番号の値、ｉｎＦｉｅｌｄＩＤの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルによって決定される。次に、量ｉｎＦｉｅｌｄＩＤの整数値を、ｎｕｍＢｉｔｓ個のビットを使用してｍｐ４ファイルに書き込む１３４４。
【０６３４】
ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ要素の「ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ」属性の値を、量「ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ」に割り当て、この量の整数値を表す２ビットを、ｍｐ４ファイルに書き込む１３４８。量「ｉｎｓｅｒｔｉｏｎＰｏｓｉｔｉｏｎ」の値が０である場合に、ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ要素の「ｐｏｓｉｔｉｏｎ」属性の値を、量「ｐｏｓｉｔｉｏｎ」に割り当て、この量の整数値を表す１６ビットを、ｍｐ４ファイルに書き込む１３５２。
【０６３５】
各ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ要素に、「ｖａｌｕｅ」属性が含まれる。この値属性の解釈は、ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ要素のｉｎＦｉｅｌｄＮａｍｅ属性によって識別されるプロパティ・フィールドの「フィールド・データ型」プロパティに依存する。フィールド・データ型プロパティは、ノード番号の値、フィールド・インデックス、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されるテーブルの組によって決定される。フィールド・データ型プロパティが「ＳＦＮｏｄｅ」である場合に、「ｖａｌｕｅ」属性の値が、従属するＮｏｄｅ要素の名前を指定する。そうでない場合に、「ｖａｌｕｅ」属性の値は、「フィールド値」の値を直接に指定する。どちらの場合でも、下の「ＳＦＦｉｅｌｄ構造」で説明する手段を使用して、値属性を解釈し、値属性によって指定されるフィールド値のバイナリ表現を作成し、その結果を出力ｍｐ４ファイルに付加する１３５６。
【０６３６】
７．２．３．９  Ｒｏｕｔｅ  Ｉｎｓｅｒｔｉｏｎ  ＢＩＦＳコマンド
「ＩｎｓｅｒｔＲｏｕｔｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０および２９１０の場合に、図３５に示されたＲｏｕｔｅ  Ｉｎｓｅｒｔｉｏｎ  ＢＩＦＳコマンド１３６０を、出力ｍｐ４ファイルに付加する。「ｒｏｕｔｅ」の２ビットのパラメータ型コード（バイナリ値＝１１）１３６８を、挿入コード１３６４に続けてｍｐ４ファイルに書き込む。ＩｎｓｅｒｔＲｏｕｔｅ要素の「ｒｏｕｔｅＩｄ」属性の値が指定されていない場合に、値「０」を有する単一ビットを、「ｉｓＵｐｄａｔｅａｂｌｅ」値１３７２として出力ｍｐ４ファイルに書き込む。そうでない場合には、値「１」を、「ｉｓＵｐｄａｔｅａｂｌｅ」値１３７２として出力ｍｐ４ファイルに書き込み、これに続けて、ＩｎｓｅｒｔＲｏｕｔｅ要素の「ｒｏｕｔｅＩｄ」属性によって指定される値１３７６を書き込む。ｒｏｕｔｅＩｄ属性の整数値を表すのに使用されるビット数は、量ＲｏｕｔｅＩｄＢｉｔｓの値によって指定される。
【０６３７】
ＩｎｓｅｒｔＲｏｕｔｅ要素の「ｄｅｐａｒｔｕｒｅＮｏｄｅ」属性の値を、量「ｄｅｐａｒｔｕｒｅＮｏｄｅＩＤ」に割り当て、この値をｍｐ４ファイルに書き込む１３８０。量「ｄｅｐａｒｔｕｒｅＮｏｄｅＩＤ」の整数値を表すのに使用されるビット数は、量「ＮｏｄｅＩｄＢｉｔｓ」の値によって指定される。
【０６３８】
ＩｎｓｅｒｔＲｏｕｔｅ要素の「ｄｅｐａｒｔｕｒｅＮｏｄｅ」属性の値は、ＵｐｄａｔｅａｂｌｅＮｏｄｅＩｄリストの項目の１つと一致しなければならない。ＵｐｄａｔｅａｂｌｅＮｏｄｅＮｕｍｂｅｒリストの対応する項目は、「ｄｅｐａｒｔｕｒｅ  ｎｏｄｅ」の「ｎｏｄｅ  ｎｕｍｂｅｒ」プロパティの値を指定する。
【０６３９】
ｄｅｐａｒｔｕｒｅ  ｎｏｄｅの「ｆｉｅｌｄ  ｉｎｄｅｘ」プロパティの値は、ＩｎｓｅｒｔＲｏｕｔｅ要素の「ｄｅｐａｒｔｕｒｅＦｉｅｌｄＮａｍｅ」属性の値と一致する値を有する、このノード番号のフィールド名のリストの項目のインデックスによって決定される。このフィールド名のリストは、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されている。このフィールドのｄｅｐａｒｔｕｒｅＦｉｅｌｄＩＤプロパティの値は、ｄｅｐａｒｔｕｒｅ  ｎｏｄｅのノード番号の値、ｄｅｐａｒｔｕｒｅ  ｎｏｄｅのフィールド・インデックスの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルの組によって決定される。量「ｎｕｍＢｉｔｓ」の値は、ｄｅｐａｒｔｕｒｅ  ｎｏｄｅのノード番号の値、ｄｅｐａｒｔｕｒｅＦｉｅｌｄＩＤの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルによって決定される。その後、量ｄｅｐａｒｔｕｒｅＦｉｅｌｄＩＤの値を、ｎｕｍＢｉｔｓ個のビットを使用してｍｐ４ファイルに書き込む１３８４。
【０６４０】
ＩｎｓｅｒｔＲｏｕｔｅ要素の「ａｒｒｉｖａｌＮｏｄｅ」属性の値を、量「ａｒｒｉｖａｌＮｏｄｅＩＤ」に割り当て、この値をｍｐ４ファイルに書き込む１３８８。量「ａｒｒｉｖａｌＮｏｄｅＩＤ」の整数値を表すのに使用されるビット数は、量「ＮｏｄｅＩｄＢｉｔｓ」の値によって指定される。
【０６４１】
ＩｎｓｅｒｔＲｏｕｔｅ要素の「ａｒｒｉｖａｌＮｏｄｅ」属性の値は、ＵｐｄａｔｅａｂｌｅＮｏｄｅＩｄリストの項目の１つと一致しなければならない。ＵｐｄａｔｅａｂｌｅＮｏｄｅＮｕｍｂｅｒリストの対応する項目は、「ａｒｒｉｖａｌ  ｎｏｄｅ」の「ｎｏｄｅ  ｎｕｍｂｅｒ」プロパティの値を指定する。
【０６４２】
ａｒｒｉｖａｌ  ｎｏｄｅの「ｆｉｅｌｄ  ｉｎｄｅｘ」プロパティの値は、ＩｎｓｅｒｔＲｏｕｔｅ要素の「ａｒｒｉｖａｌＦｉｅｌｄＮａｍｅ」属性の値と一致する値を有する、このノード番号のフィールド名のリストの項目のインデックスによって決定される。このフィールド名のリストは、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されている。このフィールドのａｒｒｉｖａｌＦｉｅｌｄＩＤプロパティの値は、ａｒｒｉｖａｌ  ｎｏｄｅのノード番号の値、ａｒｒｉｖａｌ  ｎｏｄｅのフィールド・インデックスの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルの組によって決定される。量「ｎｕｍＢｉｔｓ」の値は、ａｒｒｉｖａｌ  ｎｏｄｅのノード番号の値、ａｒｒｉｖａｌＦｉｅｌｄＩＤの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルによって決定される。その後、量ａｒｒｉｖａｌＦｉｅｌｄＩＤの整数値を、ｎｕｍＢｉｔｓ個のビットを使用してｍｐ４ファイルに書き込む１３９２。
【０６４３】
７．２．３．１０  Ｎｏｄｅ  Ｄｅｌｅｔｉｏｎコマンド
「ＤｅｌｅｔｅＮｏｄｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０および２９１０の場合に、図３６に示されたＮｏｄｅ  Ｄｅｌｅｔｉｏｎ  ＢＩＦＳコマンド１４００を、出力ｍｐ４ファイルに付加する。この場合に、「ｎｏｄｅ」の２ビットのパラメータ型コード（バイナリ値＝００）１４１２を、削除コード１４０６に続けてｍｐ４ファイルに書き込む。「ｎｏｄｅＩｄ」属性の値を、量「ｎｏｄｅＩｄ」に割り当て、この値を表す整数を、ｍｐ４ファイルに書き込む１４１８。量「ｎｏｄｅＩｄ」の整数値を表すのに使用されるビット数は、量「ＮｏｄｅＩｄＢｉｔｓ」の値によって指定される。
【０６４４】
７．２．３．１１  Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｄｅｌｅｔｉｏｎ  ＢＩＦＳコマンド
「ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０および２９１０の場合に、図３７に示されたＩｎｄｅｘｅｄＶａｌｕｅ  Ｄｅｌｅｔｉｏｎ  ＢＩＦＳコマンド１４２４を、出力ｍｐ４ファイルに付加する。「ｉｎｄｅｘｅｄ  ｖａｌｕｅ」の２ビットのパラメータ型コード（バイナリ値＝１０）１４３６を、削除コード１４３０に続けてｍｐ４ファイルに書き込む。「ｎｏｄｅＩｄ」属性の値を、量「ｎｏｄｅＩｄ」に割り当て、この値を、ｍｐ４ファイルに書き込む１４４２。量「ｎｏｄｅＩｄ」の整数値を表すのに使用されるビット数は、量「ｎｏｄｅＩｄＢｉｔｓ」の値によって指定される。
【０６４５】
ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ要素の「ｎｏｄｅＩｄ」属性の値は、ＵｐｄａｔｅａｂｌｅＮｏｄｅＩｄリストの項目の１つと一致しなければならない。ＵｐｄａｔｅａｂｌｅＮｏｄｅＮｕｍｂｅｒリストの対応する項目は、このＢＩＦＳコマンドに関連するＢＩＦＳノードの「ｎｏｄｅ  ｎｕｍｂｅｒ」プロパティの値を指定する。
【０６４６】
このＢＩＦＳコマンドの「ｆｉｅｌｄ  ｉｎｄｅｘ」プロパティの値は、ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ要素の「ｉｎＦｉｅｌｄＮａｍｅ」属性の値と一致する値を有する、このノード番号のフィールド名のリストの項目のインデックスによって決定される。このフィールド名のリストは、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されている。このフィールドのｉｎＦｉｅｌｄＩＤプロパティの値は、ノード番号の値、フィールド・インデックスの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルの組によって決定される。量「ｎｕｍＢｉｔｓ」の値は、ノード番号の値、ｉｎＦｉｅｌｄＩＤの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルによって決定される。その後、量ｉｎＦｉｅｌｄＩＤの整数値を、ｎｕｍＢｉｔｓ個のビットを使用してｍｐ４ファイルに書き込む１４４８。
【０６４７】
ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ要素の「ｄｅｌｅｔｉｏｎ  Ｐｏｓｉｔｉｏｎ」属性の値を、量「ｄｅｌｅｔｉｏｎＰｏｓｉｔｉｏｎ」に割り当て、この量の整数値を表す２ビットを、ｍｐ４ファイルに書き込む１４５４。量「ｄｅｌｅｔｉｏｎＰｏｓｉｔｉｏｎ」の値が０である場合に、ＤｅｌｅｔｅＩｎｄｅｘｅｄＶａｌｕｅ要素の「ｐｏｓｉｔｉｏｎ」属性の値を、量「ｐｏｓｉｔｉｏｎ」に割り当て、この量の整数値を表す１６ビットを、ｍｐ４ファイルに書き込む１４６０。
【０６４８】
７．２．３．１２  Ｒｏｕｔｅ  Ｄｅｌｅｔｉｏｎ  ＢＩＦＳコマンド
「ＤｅｌｅｔｅＲｏｕｔｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０および２９１０の場合に、図３８に示されたＲｏｕｔｅ  Ｄｅｌｅｔｉｏｎ  ＢＩＦＳコマンド１４６６を、出力ｍｐ４ファイルに付加する。「ｒｏｕｔｅ」の２ビットのパラメータ型コード（バイナリ値＝１１）１４７８を、削除コード１４７２に続けてｍｐ４ファイルに書き込む。ＤｅｌｅｔｅＲｏｕｔｅ要素の「ｒｏｕｔｅＩｄ」属性の値を、量「ｒｏｕｔｅＩｄ」に割り当て、この値の整数表現を、ｍｐ４ファイルに書き込む１４８４。量「ｒｏｕｔｅＩｄ」の整数値を表すのに使用されるビット数は、量「ＲｏｕｔｅＩｄＢｉｔｓ」の値によって指定される。
【０６４９】
７．２．３．１３  Ｎｏｄｅ  Ｒｅｐｌａｃｅｍｅｎｔ  ＢＩＦＳコマンド
「ＲｅｐｌａｃｅＮｏｄｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０および２９１０の場合に、図３９に示されたＮｏｄｅ  Ｒｅｐｌａｃｅｍｅｎｔコマンド１５００を、出力ｍｐ４ファイルに付加する。「ｎｏｄｅ」の２ビットのパラメータ型コード（バイナリ値＝００）１５０８を、置換コード１５０４に続けてｍｐ４ファイルに書き込む。ＲｅｐｌａｃｅＮｏｄｅ要素の「ｎｏｄｅＩｄ」属性の値を、量「ｎｏｄｅＩｄ」に割り当て、この値をｍｐ４ファイルに書き込む１５１０。量「ｎｏｄｅＩｄ」の整数値を表すのに使用されるビット数は、量「ＮｏｄｅＩｄＢｉｔｓ」の値によって指定される。
【０６５０】
各ＲｅｐｌａｃｅＮｏｄｅ要素に、従属するＮｏｄｅ要素２９２０が含まれる。このＮｏｄｅ要素のバイナリＳＦＮｏｄｅ表現１５１４を、ｎｏｄｅＩＤ値１５１０を表すデータに続けて、出力ｍｐ４ファイルに付加する。ＳＦＮｏｄｅ構造のフォーマットは、図４４から４８に示されている。このＳＦＮｏｄｅ構造を作成するのに使用される手順を、下で説明する。
【０６５１】
７．２．３．１４  Ｆｉｅｌｄ  Ｒｅｐｌａｃｅｍｅｎｔ  ＢＩＦＳコマンド
「ＲｅｐｌａｃｅＦｉｅｌｄ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０および２９１０の場合に、図４０に示されたＦｉｅｌｄ  Ｒｅｐｌａｃｅｍｅｎｔ  ＢＩＦＳコマンド１５２０を、出力ｍｐ４ファイルに付加する。「ｆｉｅｌｄ」の２ビットのパラメータ型コード（バイナリ値＝０１）１５２８を、置換コード１５２４に続けてｍｐ４ファイルに書き込む。ＲｅｐｌａｃｅＦｉｅｌｄ要素の「ｎｏｄｅＩｄ」属性の値を、量「ｎｏｄｅＩｄ」に割り当て、この値をｍｐ４ファイルに書き込む１５３０。量「ｎｏｄｅＩｄ」の整数値を表すのに使用されるビット数は、量「ＮｏｄｅＩｄＢｉｔｓ」の値によって指定される。
【０６５２】
ＲｅｐｌａｃｅＦｉｅｌｄ要素の「ｎｏｄｅＩｄ」属性の値は、ＵｐｄａｔｅａｂｌｅＮｏｄｅＩｄリストの項目の１つと一致しなければならない。ＵｐｄａｔｅａｂｌｅＮｏｄｅＮｕｍｂｅｒリストの対応する項目は、このＢＩＦＳコマンドに関連するフィールド値によって変更されるＢＩＦＳノードの「ｎｏｄｅ  ｎｕｍｂｅｒ」プロパティの値を指定する。
【０６５３】
このＢＩＦＳコマンドの「ｆｉｅｌｄ  ｉｎｄｅｘ」プロパティの値は、ＲｅｐｌａｃｅＦｉｅｌｄ要素の「ｉｎＦｉｅｌｄＮａｍｅ」属性の値と一致する値を有する、このノード番号のフィールド名のリストの項目のインデックスによって決定される。このフィールド名のリストは、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されている。このフィールドのｉｎＦｉｅｌｄＩＤプロパティの値は、ノード番号の値、フィールド・インデックスの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルの組によって決定される。量「ｎｕｍＢｉｔｓ」の値は、ノード番号の値、ｉｎＦｉｅｌｄＩＤの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルによって決定される。その後、量ｉｎＦｉｅｌｄＩＤの値を、ｎｕｍＢｉｔｓ個のビットを使用してｍｐ４ファイルに書き込む１５３４。
【０６５４】
各ＲｅｐｌａｃｅＦｉｅｌｄ要素に、「ｖａｌｕｅ」属性が含まれる。この値属性の解釈は、ＲｅｐｌａｃｅＦｉｅｌｄ要素のｉｎＦｉｅｌｄＮａｍｅ属性によって識別されるプロパティ・フィールドの「フィールド・データ型」プロパティに依存する。フィールド・データ型プロパティは、ノード番号の値、フィールド・インデックス、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されるテーブルの組によって決定される。フィールド・データ型プロパティが「ＳＦＮｏｄｅ」である場合に、「ｖａｌｕｅ」属性の値が、従属するＮｏｄｅ要素の名前を指定する。そうでない場合に、「ｖａｌｕｅ」属性の値は、「フィールド値」の値を直接に指定する。どちらの場合でも、下の「ＳＦＦｉｅｌｄ構造」で説明する手段を使用して、値属性を解釈し、値属性によって指定されるフィールド値のバイナリ表現を作成し、その結果を出力ｍｐ４ファイルに付加する１５３８。
【０６５５】
７．２．３．１５  Ｉｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｒｅｐｌａｃｅｍｅｎｔ  ＢＩＦＳコマンド
「ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０および２９１０の場合に、図４１に示されたＩｎｄｅｘｅｄ  Ｖａｌｕｅ  Ｒｅｐｌａｃｅｍｅｎｔ  ＢＩＦＳコマンド１５４０を、出力ｍｐ４ファイルに付加する。「ｉｎｄｅｘｅｄ  ｖａｌｕｅ」の２ビットのパラメータ型コード（バイナリ値＝１０）１５４８を、置換コード１５４４に続けてｍｐ４ファイルに書き込む。「ｎｏｄｅＩｄ」属性の値を、量「ｎｏｄｅＩｄ」に割り当て、この値をｍｐ４ファイルに書き込む１５５０。量「ｎｏｄｅＩｄ」の整数値を表すのに使用されるビット数は、量「ＮｏｄｅＩｄＢｉｔｓ」の値によって指定される。
【０６５６】
ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ要素の「ｎｏｄｅＩｄ」属性の値は、ＵｐｄａｔｅａｂｌｅＮｏｄｅＩｄリストの項目の１つと一致しなければならない。ＵｐｄａｔｅａｂｌｅＮｏｄｅＮｕｍｂｅｒリストの対応する項目は、このＢＩＦＳコマンドに関連するフィールド値によって変更されるＢＩＦＳノードの「ｎｏｄｅ  ｎｕｍｂｅｒ」プロパティの値を指定する。
【０６５７】
このＢＩＦＳコマンドの「ｆｉｅｌｄ  ｉｎｄｅｘ」プロパティの値は、ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ要素の「ｉｎＦｉｅｌｄＮａｍｅ」属性の値と一致する値を有する、このノード番号のフィールド名のリストの項目のインデックスによって決定される。このフィールド名のリストは、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されている。このフィールドのｉｎＦｉｅｌｄＩＤプロパティの値は、ノード番号の値、フィールド・インデックスの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルの組によって決定される。量「ｎｕｍＢｉｔｓ」の値は、ノード番号の値、ｉｎＦｉｅｌｄＩＤの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルによって決定される。その後、量ｉｎＦｉｅｌｄＩＤの値を、ｎｕｍＢｉｔｓ個のビットを使用してｍｐ４ファイルに書き込む１５５４。
【０６５８】
ＩｎｓｅｒｔＩｎｄｅｘｅｄＶａｌｕｅ要素の「ｒｅｐｌａｃｅｍｅｎｔＰｏｓｉｔｉｏｎ」属性の値を、量「ｒｅｐｌａｃｅｍｅｎｔＰｏｓｉｔｉｏｎ」に割り当て、この量の値を表す２ビットを、ｍｐ４ファイルに書き込む１５５８。量「ｒｅｐｌａｃｅｍｅｎｔＰｏｓｉｔｉｏｎ」の値が０である場合には、ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ要素の「ｐｏｓｉｔｉｏｎ」属性の値を、量「ｐｏｓｉｔｉｏｎ」に割り当て、この量の整数値を表す１６ビットを、ｍｐ４ファイルに書き込む１５６０。
【０６５９】
各ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ要素に、「ｖａｌｕｅ」属性が含まれる。この値属性の解釈は、ＲｅｐｌａｃｅＩｎｄｅｘｅｄＶａｌｕｅ要素のｉｎＦｉｅｌｄＮａｍｅ属性によって識別されるプロパティ・フィールドの「フィールド・データ型」プロパティに依存する。フィールド・データ型プロパティは、ノード番号の値、フィールド・インデックス、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されるテーブルの組によって決定される。フィールド・データ型プロパティが「ＳＦＮｏｄｅ」である場合に、「ｖａｌｕｅ」属性の値が、従属するＮｏｄｅ要素の名前を指定する。そうでない場合に、「ｖａｌｕｅ」属性の値は、「フィールド値」の値を直接に指定する。どちらの場合でも、下の「ＳＦＦｉｅｌｄ構造」で説明する手段を使用して、値属性を解釈し、値属性によって指定されるフィールド値のバイナリ表現を作成し、その結果を出力ｍｐ４ファイルに付加する１５６４。
【０６６０】
７．２．３．１６  Ｒｏｕｔｅ  Ｒｅｐｌａｃｅｍｅｎｔ  ＢＩＦＳコマンド
「ＲｅｐｌａｃｅＲｏｕｔｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２８４０および２９１０の場合に、図４２に示されたＲｏｕｔｅ  Ｒｅｐｌａｃｅｍｅｎｔ  ＢＩＦＳコマンド１５７０を、出力ｍｐ４ファイルに付加する。「ｒｏｕｔｅ」の２ビットのパラメータ型コード（バイナリ値＝１１）１５７８を、置換コード１５７４に続けてｍｐ４ファイルに書き込む。ＲｅｐｌａｃｅＲｏｕｔｅ要素の「ｒｏｕｔｅＩｄ」属性の値を、量「ｒｏｕｔｅＩｄ」に割り当て、この値の整数表現を、ｍｐ４ファイルに書き込む１５８０。量「ｒｏｕｔｅＩｄ」の整数値を表すのに使用されるビット数は、量「ＲｏｕｔｅＩｄＢｉｔｓ」の値によって指定される。
【０６６１】
ＲｅｐｌａｃｅＲｏｕｔｅ要素の「ｄｅｐａｒｔｕｒｅＮｏｄｅ」属性の値を、量「ｄｅｐａｒｔｕｒｅＮｏｄｅＩＤ」に割り当て、この値をｍｐ４ファイルに書き込む１５８４。量「ｄｅｐａｒｔｕｒｅＮｏｄｅＩＤ」の整数値を表すのに使用されるビット数は、量「ＮｏｄｅＩｄＢｉｔｓ」の値によって指定される。
【０６６２】
ＲｅｐｌａｃｅＲｏｕｔｅ要素の「ｄｅｐａｒｔｕｒｅＮｏｄｅ」属性の値は、ＵｐｄａｔｅａｂｌｅＮｏｄｅＩｄリストの項目の１つと一致しなければならない。ＵｐｄａｔｅａｂｌｅＮｏｄｅＮｕｍｂｅｒリストの対応する項目は、「ｄｅｐａｒｔｕｒｅ  ｎｏｄｅ」の「ｎｏｄｅ  ｎｕｍｂｅｒ」プロパティの値を指定する。
【０６６３】
ｄｅｐａｒｔｕｒｅ  ｎｏｄｅの「ｆｉｅｌｄ  ｉｎｄｅｘ」プロパティの値は、ＲｅｐｌａｃｅＲｏｕｔｅ要素の「ｄｅｐａｒｔｕｒｅＦｉｅｌｄＮａｍｅ」属性の値と一致する値を有する、このノード番号のフィールド名のリストの項目のインデックスによって決定される。このフィールド名のリストは、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されている。このフィールドのｄｅｐａｒｔｕｒｅＦｉｅｌｄＩＤプロパティの値は、ｄｅｐａｒｔｕｒｅ  ｎｏｄｅのノード番号の値、ｄｅｐａｒｔｕｒｅ  ｎｏｄｅのフィールド・インデックスの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルの組によって決定される。量「ｎｕｍＢｉｔｓ」の値は、ｄｅｐａｒｔｕｒｅ  ｎｏｄｅのノード番号の値、ｄｅｐａｒｔｕｒｅＦｉｅｌｄＩＤの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルによって決定される。その後、量ｄｅｐａｒｔｕｒｅＦｉｅｌｄＩＤの値を、ｎｕｍＢｉｔｓ個のビットを使用してｍｐ４ファイルに書き込む１５８８。
【０６６４】
ＲｅｐｌａｃｅＲｏｕｔｅ要素の「ａｒｒｉｖａｌＮｏｄｅ」属性の値を、量「ａｒｒｉｖａｌＮｏｄｅＩＤ」に割り当て、この値をｍｐ４ファイルに書き込む１５９０。量「ａｒｒｉｖａｌＮｏｄｅＩＤ」の整数値を表すのに使用されるビット数は、量「ＮｏｄｅＩｄＢｉｔｓ」の値によって指定される。
【０６６５】
ＲｅｐｌａｃｅＲｏｕｔｅ要素の「ａｒｒｉｖａｌＮｏｄｅ」属性の値は、ＵｐｄａｔｅａｂｌｅＮｏｄｅＩｄリストの項目の１つと一致しなければならない。ＵｐｄａｔｅａｂｌｅＮｏｄｅＮｕｍｂｅｒリストの対応する項目は、「ａｒｒｉｖａｌ  ｎｏｄｅ」の「ｎｏｄｅ  ｎｕｍｂｅｒ」プロパティの値を指定する。
【０６６６】
ａｒｒｉｖａｌ  ｎｏｄｅの「ｆｉｅｌｄ  ｉｎｄｅｘ」プロパティの値は、ＲｅｐｌａｃｅＲｏｕｔｅ要素の「ａｒｒｉｖａｌＦｉｅｌｄＮａｍｅ」属性の値と一致する値を有する、このノード番号のフィールド名のリストの項目のインデックスによって決定される。このフィールド名のリストは、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されている。このフィールドのａｒｒｉｖａｌＦｉｅｌｄＩＤプロパティの値は、ａｒｒｉｖａｌ  ｎｏｄｅのノード番号の値、ａｒｒｉｖａｌ  ｎｏｄｅのフィールド・インデックスの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルの組によって決定される。量「ｎｕｍＢｉｔｓ」の値は、ａｒｒｉｖａｌ  ｎｏｄｅのノード番号の値、ａｒｒｉｖａｌＦｉｅｌｄＩＤの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルによって決定される。その後、量ａｒｒｉｖａｌＦｉｅｌｄＩＤの整数値を、ｎｕｍＢｉｔｓ個のビットを使用してｍｐ４ファイルに書き込む１５９４。
【０６６７】
７．２．３．１７  Ｓｃｅｎｅ  Ｒｅｐｌａｃｅｍｅｎｔ  ＢＩＦＳコマンド
「ＲｅｐｌａｃｅＳｃｅｎｅ」ｂｉｆｓＣｏｍｍａｎｄ要素２９３０の場合に、シーン置換ＢＩＦＳコマンド１２７０を、出力ｍｐ４ファイルに付加する。図３２からわかるように、シーン置換ＢＩＦＳコマンド１２７０は、２ビットの置換コード（バイナリ値＝１１）１２８０と、それに続くＢＩＦＳシーン・データ構造１２９０および１６００からなる。ＢＩＦＳシーン構造１６００の構成要素を、図４３に示す。
【０６６８】
２ビットのシーン置換コード１２８０を書き込んだ後に、６ビットの０の値（「予約済み」）１６１０を出力ｍｐ４ファイルに書き込む。
【０６６９】
ＲｅｐｌａｃｅＳｃｅｎｅ要素の「ＵＳＥＮＡＭＥＳ」属性の値は、ｂｏｏｌｅａｎ量ｂＵｓｅＮａｍｅｓの値を決定するのに使用される。「ＵＳＥＮＡＭＥＳ」属性の値が「真」である場合に、値「真」を「ｂＵｓｅＮａｍｅｓ」に割り当て、単一の「１」ビットをｍｐ４ファイルに書き込む１６２０。そうでない場合には、「真」をｂＵｓｅＮａｍｅｓに割り当て、単一の「０」ビットをｍｐ４ファイルに書き込む１６２０。次に、単一の「０」ビットをｍｐ４ファイルに書き込んで、このｍｐ４ファイルに「ｐｒｏｔｏＬｉｓｔ」１６３０がないことを示す。
【０６７０】
ｐｒｏｔｏＬｉｓｔビット１６３０に、「ＳＦＴｏｐＮｏｄｅ」構造が続く。これは、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたノードのサブセットのメンバだけが許容される点を除いて、下で説明する「ＳＦＮｏｄｅ」構造と同等である。ＳＦＴｏｐＮｏｄｅ構造の記述は、ＲｅｐｌａｃｅＳｃｅｎｅコマンド要素２９３０に従属するｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素２９４０によって指定される。
【０６７１】
必要な従属Ｎｏｄｅ要素のほかに、ｍｐ４ｂｉｆｓ  ＲｅｐｌａｃｅＳｃｅｎｅ要素２９３０は、単一の従属する「Ｒｏｕｔｅｓ」要素２９５０も有することができる。ＲｅｐｌａｃｅＳｃｅｎｅ要素２９３０が、従属する「Ｒｏｕｔｅｓ」要素２９５０を有しない場合に、単一の「０」ビットが、「ｈａｓＲｏｕｔｅｓ」ビット１６５０としてｍｐ４ファイルに書き込まれ、これによって、ＢＩＦＳシーン置換コマンド１２７０の終りが示される。ＲｅｐｌａｃｅＳｃｅｎｅコマンド要素２９３０が、従属する「Ｒｏｕｔｅｓ」要素２９５０を有する場合には、単一の「１」ビットが、「ｈａｓＲｏｕｔｅｓ」ビット１６５０としてｍｐ４ファイルに書き込まれ、これに、図４９から５１に記載のＲｏｕｔｅｓ構造１６６０が続く。
【０６７２】
Ｒｏｕｔｅｓ構造１６６０は、２つの形すなわち、図４９に示されたリスト形式１８００または図５０に示されたベクトル形式１８３０のいずれかを有することができる。これらは、リスト形式の「１」１８０５またはベクトル形式の「０」１８３５である第１ビットの値によって区別される。本発明の１実施形態では、必ずリスト形式が選択される。その結果、「ｈａｓＲｏｕｔｅｓ」１６５０に「１」がセットされている場合に、次のビット１８０５にも「１」がセットされる。リスト形式対ベクトル形式の選択は、重要でなく、本発明は、Ｒｏｕｔｅｓ構造のベクトル形式１８３０を同等によく使用することができる。
【０６７３】
ｍｐ４ｂｉｆｓ「Ｒｏｕｔｅｓ」要素２９５０は、１つまたは複数の従属する「Ｒｏｕｔｅ」要素２９６０を有することができる。ある「Ｒｏｕｔｅｓ」要素２９５０に従属する「Ｒｏｕｔｅ」要素２９６０ごとに、単一の「１」ビット１８０５および１８１５が、出力ｍｐ４ファイルに書き込まれ、それにＲｏｕｔｅ要素２９６０のバイナリ記述１８１０および１８６０が続く。単一の「０」ビット１８２０が、「Ｒｏｕｔｅｓ」要素２９５０に従属する最後の「Ｒｏｕｔｅ」要素２９６０の記述の後に出力ｍｐ４ファイルに書き込まれる。最初の従属する「Ｒｏｕｔｅ」要素２９６０のバイナリ記述１８１０の前の「１」ビット１８０５は、バイナリＲｏｕｔｅｓデータ構造２９５０の「リスト形式」１８００が使用されていることを指定する。後続の「１」ビット１８１５は、「ｍｏｒｅＲｏｕｔｅｓ＝真」を指定する。最後の「０」ビット１８２０は、「ｍｏｒｅＲｏｕｔｅｓ＝偽」であることを指定し、Ｒｏｕｔｅｓ構造１８００および２９５０の終りを示す。
【０６７４】
各Ｒｏｕｔｅ要素のバイナリ記述１８６０の構造を、図５１に示す。各Ｒｏｕｔｅ要素のバイナリ記述１８６０を作成するのに使用される手段を、下の「Ｒｏｕｔｅ構造」で説明する。
【０６７５】
７．２．３．１８  Ｒｏｕｔｅ構造
バイナリＲｏｕｔｅ構造１８６０を、ＲｅｐｌａｃｅＳｃｅｎｅ要素２９３０に従属するＲｏｕｔｅｓ要素２９５０に従属するＲｏｕｔｅ要素２９６０ごとに出力ｍｐ４ファイルに付加する。Ｒｏｕｔｅ要素２９６０の「ｒｏｕｔｅＩｄ」属性の値が指定されていない場合には、値「０」を有する単一のビットを、「ｉｓＵｐｄａｔｅａｂｌｅ」値１８６５として出力ｍｐ４ファイルに書き込む。そうでない場合には、値「１」を「ｉｓＵｐｄａｔｅａｂｌｅ」値１８６５として出力ｍｐ４ファイルに書き込み、これに、Ｒｏｕｔｅ要素２９６０の「ｒｏｕｔｅＩｄ」属性によって指定される値１８７０を続ける。ｒｏｕｔｅＩｄ属性の整数値を表すのに使用されるビット数は、量ＲｏｕｔｅＩｄＢｉｔｓの値によって指定される。
【０６７６】
Ｒｏｕｔｅ要素２９６０の「ｒｏｕｔｅＩｄ」属性の値が指定されており、対応するＲｅｐｌａｃｅＳｃｅｎｅ要素２９３０のＵＳＥＮＡＭＥＳ属性の値が「真」である場合に、Ｒｏｕｔｅ要素２９６０の「ｎａｍｅ」属性の値が、ヌル終端ストリング１８７５として出力ｍｐ４ファイルに付加される。Ｒｏｕｔｅ要素２９６０の「ｎａｍｅ」属性の値は、対応するＸＭＴ−Ａ  ＲＯＵＴＥ要素３９０のＤＥＦ属性のコピーである。
【０６７７】
Ｒｏｕｔｅ要素の「ｔｏＮｏｄｅ」属性の値を、量「ｏｕｔＮｏｄｅＩＤ」に割り当て、この値をｍｐ４ファイルに書き込む１８８０。量「ｏｕｔＮｏｄｅＩＤ」の整数値を表すのに使用されるビット数は、量「ＮｏｄｅＩｄＢｉｔｓ」の値によって指定される。
【０６７８】
Ｒｏｕｔｅ要素の「ｏｕｔＮｏｄｅＩＤ」属性の値は、ＵｐｄａｔｅａｂｌｅＮｏｄｅＩｄリストの項目の１つと一致しなければならない。ＵｐｄａｔｅａｂｌｅＮｏｄｅＮｕｍｂｅｒリストの対応する項目は、「ｄｅｐａｒｔｕｒｅ  ｎｏｄｅ」の「ｎｏｄｅ  ｎｕｍｂｅｒ」プロパティの値を指定する。
【０６７９】
ｄｅｐａｒｔｕｒｅ  ｎｏｄｅの「ｆｉｅｌｄ  ｉｎｄｅｘ」プロパティの値は、Ｒｏｕｔｅ要素の「ｔｏＦｉｅｌｄＮａｍｅ」属性の値と一致する値を有する、対応するノード番号のフィールド名のリストの項目のインデックスによって決定される。このフィールド名のリストは、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されている。このフィールドのｏｕｔＦｉｅｌｄＲｅｆプロパティの値は、ｄｅｐａｒｔｕｒｅ  ｎｏｄｅのノード番号の値、ｄｅｐａｒｔｕｒｅ  ｎｏｄｅのフィールド・インデックスの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルの組によって決定される。量「ｎｕｍＢｉｔｓ」の値は、ｄｅｐａｒｔｕｒｅ  ｎｏｄｅのノード番号の値、ｏｕｔＦｉｅｌｄＲｅｆプロパティの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルによって決定される。その後、量ｏｕｔＦｉｅｌｄＲｅｆの値を、ｎｕｍＢｉｔｓ個のビットを使用してｍｐ４ファイルに書き込む１８８５。
【０６８０】
Ｒｏｕｔｅ要素２９６０の「ｆｒｏｍＮｏｄｅ」属性の値を、量「ｉｎＮｏｄｅＩＤ」に割り当て、この値をｍｐ４ファイルに書き込む１８９０。量「ｉｎＮｏｄｅＩＤ」の整数値を表すのに使用されるビット数は、量「ＮｏｄｅＩｄＢｉｔｓ」の値によって指定される。
【０６８１】
Ｒｏｕｔｅ要素２９６０の「ｉｎＮｏｄｅＩＤ」属性の値は、ＵｐｄａｔｅａｂｌｅＮｏｄｅＩｄリストの項目の１つと一致しなければならない。ＵｐｄａｔｅａｂｌｅＮｏｄｅＮｕｍｂｅｒリストの対応する項目は、「ａｒｒｉｖａｌ  ｎｏｄｅ」の「ｎｏｄｅ  ｎｕｍｂｅｒ」プロパティの値を指定する。
【０６８２】
ａｒｒｉｖａｌ  ｎｏｄｅの「ｆｉｅｌｄ  ｉｎｄｅｘ」プロパティの値は、Ｒｏｕｔｅ要素の「ｆｒｏｍＦｉｅｌｄＮａｍｅ」属性の値と一致する値を有する、このノード番号のフィールド名のリストの項目のインデックスによって決定される。このフィールド名のリストは、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されている。このフィールドのｉｎＦｉｅｌｄＲｅｆプロパティの値は、ａｒｒｉｖａｌ  ｎｏｄｅのノード番号の値、ａｒｒｉｖａｌ  ｎｏｄｅのフィールド・インデックスの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルの組によって決定される。量「ｎｕｍＢｉｔｓ」の値は、ａｒｒｉｖａｌ  ｎｏｄｅのノード番号の値、ｉｎＦｉｅｌｄＲｅｆの値、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルによって決定される。その後、量ｉｎＦｉｅｌｄＲｅｆの整数値を、ｎｕｍＢｉｔｓ個のビットを使用してｍｐ４ファイルに書き込む１８９５。
【０６８３】
７．２．３．１９  ＳＦＮｏｄｅ構造
ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素３０００、３０４０、および３０８０は、ＩｎｓｅｒｔＮｏｄｅ要素、ＲｅｐｌａｃｅＮｏｄｅ要素、ＲｅｐｌａｃｅＳｃｅｎｅ要素、または別のｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素３０００の従属要素として現れることができる。各ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素３０００、３０４０、および３０８０は、図７５、図７６、または図７７に示された構造を有する。１００個を超えるタイプのｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素がある。これらのそれぞれが、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたＢＩＦＳノードの１つに対応する。各ＢＩＦＳノードは、指定されたノード名（文字ストリング）およびプロパティ・フィールドの順序付きの組を有する。各プロパティ・フィールドは、指定された名前（文字ストリング）、指定されたデータ型（ｂｏｏｌｅａｎ、ｉｎｔｅｇｅｒ、ｆｌｏａｔなど）、および他の特性を有する。ＢＩＦＳノードの各タイプは、同一の名前のｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素によって表され、ＢＩＦＳノードの各プロパティ・フィールドは、対応するｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素の同一の名前の属性によって表される。
【０６８４】
ｂｏｏｌｅａｎ、ｉｎｔｅｇｅｒ、ｆｌｏａｔ、ｃｏｌｏｒ、およびｓｔｒｉｎｇを含むほとんどのＢＩＦＳノード・プロパティ・フィールド・データ型について、関連するデータ値は、ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素の対応する属性の値によって表される。２つの例外すなわち、フィールド・データ型「ｎｏｄｅ」および「ｂｕｆｆｅｒ」がある。フィールド・データ型「ｎｏｄｅ」および「ｂｕｆｆｅｒ」の場合に、関連するデータ値は、従属するｍｐ４ｂｉｆｓ要素３０３０および３０７０によって表され、対応する属性に、関連する従属要素の名前の順序付きリストが含まれる。この名前の順序付きリストは、複数の属性がｎｏｄｅまたはｂｕｆｆｅｒのフィールド・データ型を有する場合にｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素の各属性に関連する特定の従属要素を決定するのに使用することができる。
【０６８５】
ＢＩＦＳノードの各タイプに一意のプロパティ・フィールドのほかに、すべてのＢＩＦＳノードは、１組の共通プロパティを有する。これには、再利用状態、更新可能状態、およびマスク・アクセス状態が含まれる。プロパティ・フィールドおよび共通プロパティの結果の組合せを、図４４から４８に示す。
【０６８６】
次の手段を使用して、ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素によって表されるバイナリＳＦＮｏｄｅ構造を作成する。
【０６８７】
第１ステップは、ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素の任意選択の「ｎｏｄｅＲｅｆ」属性の存在を検査することである。この属性の値が指定されている場合に、この属性の値を、量「ｎｏｄｅＩＤｒｅｆ」に割り当てる。この場合に、そのノードは、「再利用される」ノードとして分類され、結果のＢＩＦＳノードは、図４４に示された構造を有する。この場合に、値「１」を有する単一のビット１７０４を、ｍｐ４ファイルに書き込む。このビットは、条件「ｉｓＲｅｕｓｅｄ＝真」を指定する。このビットに、量「ｎｏｄｅＩＤｒｅｆ」１７０８の値が続く。量「ｎｏｄｅＩＤｒｅｆ」の値を表すのに使用されるビット数は、量「ＮｏｄｅＩｄＢｉｔｓ」の値によって与えられる。従属要素または他の属性は、この場合には許容されない。
【０６８８】
ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素の「ｎｏｄｅＲｅｆ」属性の値が指定されていない場合に、単一の「０」ビット１７１２および１７３２をｍｐ４ファイルに書き込む。このビットは、条件「ｉｓＲｅｕｓｅｄ＝偽」を指定する。結果のＢＩＦＳ  ＳＦＮｏｄｅは、図４５（マスク・ノード）１７１０または図４６（リスト・ノード）１７３０に示された構造を有することができる。本発明のこの実施形態では、必ずマスク・ノード形式１７１０が選択される。リスト・ノードではなくマスク・ノードを選択することは、重要でなく、本発明は、ＳＦＮｏｄｅのリスト・ノード形式１７３０を使用して同等によく実施することができる。
【０６８９】
次に、ｍｐ４ｂｉｆｓ  Ｎｏｄｅノード要素３０００の要素名（ＮｏｄｅＮａｍｅ）を、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたＢＩＦＳノード名のリストの項目と比較して、対応するＢＩＦＳノードの「ノード番号」の値を決定する。この「ノード番号」の値、ＢＩＦＳノードの「ノード・データ型」、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルの組を使用して、このＢＩＦＳノードの「ｌｏｃａｌＮｏｄｅＴｙｐｅ」の値およびこの値を表すのに使用されるビット数を決定する。この「ｌｏｃａｌＮｏｄｅＴｙｐｅ」の値を、指定されたビット数を使用して、ｍｐ４ファイルに書き込む１７１４。
【０６９０】
ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素が、ＲｅｐｌａｃｅＳｃｅｎｅ  ｂｉｆｓＣｏｍｍａｎｄ要素に従属する場合に、対応するＢＩＦＳノードの「ノード・データ型」を「ＳＦＷｏｒｌｄＮｏｄｅ」として定義する。そうでない場合に、ＢＩＦＳノードの「ノード・データ型」は、「親ノード」のノード番号、親ノードの関連するプロパティ・フィールドのフィールド・インデックス、およびＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されたテーブルの組によって決定される。ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素が、別のｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素に従属する場合に、「親ノード」は、それが従属するｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素によって定義される。ｍｐ４ｂｉｆｓ  Ｎｏｄｅが、ｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｍｍａｎｄ要素に従属する場合に、「親ノード」は、それが従属するｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｍｍａｎｄ要素の「ＮｏｄｅＩｄ」属性または「ｐａｒｅｎｔＩｄ」属性によって決定される。
【０６９１】
次に、任意選択の「ＮｏｄｅＩｄ」属性３０１０の存在について、ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素を検査する。このＮｏｄｅ要素の「ＮｏｄｅＩｄ」属性の値が指定されていない場合に、単一の「０」ビットをｍｐ４ファイルに書き込んで、条件「ｉｓＵｐｄａｔｅａｂｌｅ＝偽」１７１６を示す。そうでない（すなわち、このＮｏｄｅ要素のＮｏｄｅＩｄ属性の値が指定されている）場合には、ＮｏｄｅＩｄ属性３０１０の値を、量「ｎｏｄｅＩＤ」に割り当て、このノードを「更新可能」ノードとして分類し、単一の「１」ビットをｍｐ４ファイルに書き込む１７１６。これに、量「ｎｏｄｅＩＤ」１７１８の値が続く。量「ｎｏｄｅＩＤ」の整数値を表すのに使用されるビット数は、量「ＮｏｄｅＩｄＢｉｔｓ」の値によって指定される。ｂｏｏｌｅａｎ量「ｂＵｓｅＮａｍｅｓ」の値が「真」である場合に、Ｎｏｄｅ要素の「ｎａｍｅ」属性３０１６の値を文字単位でｍｐ４ファイルにコピーし、これにヌル・バイト（８ビットのゼロ）１７２０を続ける。
【０６９２】
次に、単一の「１」ビットをｍｐ４ファイルに書き込んで、ＢＩＦＳノードの「マスク・ノード」形式が選択されたことを示す１７２２。これに、マスク・ビット１７２６のシーケンスと、多分プロパティ・フィールド値１７２８が続く。各マスク・ビット１７２６は、ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素の要素名によって指定されるＢＩＦＳノードのタイプの「公開された」プロパティ・フィールドに対応する。公開されたプロパティ・フィールドは、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様のテーブルによって定義される。指定されたＢＩＦＳノードのプロパティ・フィールドの順序付きの組の各メンバは、順番であるとみなされる。公開されたプロパティ・フィールドの１つに対応し、その属性値がｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素で指定されるプロパティ・フィールドごとに、値「１」を有するマスク・ビットをｍｐ４ファイルに書き込み、これに、関連する属性値のバイナリ表現を続ける。各そのような属性値を表すのに使用される手段を、下で説明する。公開されたプロパティ・フィールドの１つに対応し、その属性値がｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素で指定されないプロパティ・フィールドごとに、値「０」を有するマスク・ビットをｍｐ４ファイルに書き込む。
【０６９３】
指定されたプロパティ・フィールド名および指定されたプロパティ・フィールド・データ型のほかに、ＢＩＦＳノードの各タイプの各プロパティ・フィールドは、指定された特性を有し、この指定された特性によって、そのプロパティ・フィールドが、指定されたデータ型の単一の値からなる（ＳＦＦｉｅｌｄプロパティ）か、指定されたデータ型の複数の値からなる（ＭＦＦｉｅｌｄプロパティ・フィールド）かが決定される。各ＭＦＦｉｅｌｄプロパティ・フィールドは、図４７（１７６０）および図４８（１７８０）からわかるように、０個以上のＳＦＦｉｅｌｄを含む。本発明のこの実施形態では、図４７に示されたリスト形式（１７６０）が、必ず選択される。リスト形式またはベクトル形式の選択は、重要でなく、本発明は、ＭＦＦｉｅｌｄ構造にベクトル形式１７８０を使用して同等によく実施することができる。
【０６９４】
７．２．３．２０  ＳＦＦｉｅｌｄ構造
各ＳＦＦｉｅｌｄデータ構造は、指定されたデータ型を表す。サポートされるデータ型に、ｂｏｏｌｅａｎ、ｉｎｔ、ｆｌｏａｔ、ｓｔｒｉｎｇ、およびｃｏｌｏｒなどの「単純データ型」と、「複合データ型」が含まれる。複合データ型は、データ型「ｎｏｄｅ」および「ｂｕｆｆｅｒ」からなる。単純データ型を有する各プロパティ・フィールドのバイナリ表現は、ｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素の同一の名前の属性の値によって決定される。たとえば、「ｂｏｏｌｅａｎ」プロパティ・フィールドは、単一のビットによって表される。「ｉｎｔｅｇｅｒ」プロパティ・フィールドは、３２ビット整数値によって表されるなどである。プロパティ・フィールドの各型を表すのに使用されるビット数は、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されている。
【０６９５】
型「ｎｏｄｅ」のプロパティ・フィールドの場合に、そのプロパティ・フィールドの値は、従属するｍｂ４ｂｉｆｓ  Ｎｏｄｅ要素によって表される。このプロパティ・フィールドに関連する属性の値は、従属するｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素の要素名のリストからなる。各そのような従属するＮｏｄｅ要素のバイナリ表現は、上でｍｐ４ｂｉｆｓ  Ｎｏｄｅ要素に関して指定した手順（ＳＦＮｏｄｅ構造）を再帰的に適用することによって作成される。
【０６９６】
型「ｂｕｆｆｅｒ」のプロパティ・フィールドの場合に、従属要素は、ｍｂ４ｂｉｆｓ  ｂｉｆｓＣｏｍｍａｎｄ要素からなる。このプロパティ・フィールドに関連する属性の値は、従属するｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｍｍａｎｄ要素の要素名のリストからなる。各そのような従属するｂｉｆｓＣｏｍｍａｎｄ要素のバイナリ表現は、上でｍｐ４ｂｉｆｓ  ｃｏｍｍａｎｄＦｒａｍｅ要素に関して指定したものと同一の手順を再帰的に適用することによって作成される。
【０６９７】
７．２．４  「ｍｏｏｖ」要素の処理
出力ｍｐ４ファイル２２３０の作成の第４ステップは、ｍｐ４ｆｉｌｅ文書２３００に含まれる単一のｍｏｏｖ要素２３２０の処理からなる。
【０６９８】
標準ＸＭＬ手段を使用して、図５９に示されたｍｐ４ｆｉｌｅ文書２３００のトップ・レベル要素に従属する単一の「ｍｏｏｖ」要素２３２０を入手する。図１０３に示された手順を使用して、出力ｍｐ４ファイル内にアトムＩＤ「ｍｏｏｖ」を有するアトム７１２および７５８を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値７６０の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、ａｔｏｍＩｄ「ｍｏｏｖ」７６６を出力ｍｐ４ファイルに書き込む。「ｓｉｚｅＰｏｓ」の値を量「ｍｏｏｖＳｉｚｅＰｏｓ」に割り当てる。
【０６９９】
次の属性が、ｍｐ４ｂｉｆｓ「ｍｏｏｖ」要素について定義されている：ｖｅｒｓｉｏｎ、ｆｌａｇｓ、ｃｒｅａｔｉｏｎＴｉｍｅ、ｍｏｄｉｆｙＴｉｍｅ、ｔｉｍｅＳｃａｌｅ、ｄｕｒａｔｉｏｎ、およびｎｅｘｔＴｒａｃｋＩＤ。これらの属性のそれぞれについて指定された値を、同一の名前の量（「プロパティ値」）に割り当てる。これらのプロパティ値のどれもが、「ｍｖｈｄ」アトム７７２が作成されるまで、出力ｍｐ４ファイルに書き込まれない。
【０７００】
図１０３に示された手順を使用して、アトムＩＤ「ｍｖｈｄ」を有するアトム７７２を出力ｍｐ４ファイル内に作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩｄ「ｍｖｈｄ」を出力ｍｐ４ファイルに書き込む。「ｓｉｚｅＰｏｓ」の値を量「ｍｖｈｄＳｉｚｅＰｏｓ」に割り当てる。
【０７０１】
動作５０４０で、「ｍｏｏｖ」要素の属性から導出される次のプロパティ値を、出力ｍｐ４ファイルに書き込む。
１．ｖｅｒｓｉｏｎ（８ビット整数）
２．ｆｌａｇｓ（２４ビット整数）
３．ｃｒｅａｔｉｏｎＴｉｍｅ（３２ビット整数）
４．ｍｏｄｉｆｙＴｉｍｅ（３２ビット整数）
５．ｔｉｍｅＳｃａｌｅ（３２ビット整数）
６．ｄｕｒａｔｉｏｎ（３２ビット整数）
７．ｒｅｓｅｒｖｅｄ（７６バイト)
８．ｎｅｘｔＴｒａｃｋＩＤ（３２ビット整数）
【０７０２】
「ｒｅｓｅｒｖｅｄ」データ値は、バイト１、４、１７、および３３が値「１」を有し、バイト４８が値「４」を有することを除いて、すべて０である。
【０７０３】
ｍｖｈｄアトム７７２は、従属アトムを有しない５０５０。
【０７０４】
ｍｖｈｄアトム７７２のプロパティ・フィールドを書き込んだ後に、ｍｐ４ファイル内のｍｖｈｄアトム７７２のアトム・サイズの値を、図１０３（動作５０６０から５０９５）に示されているように更新する。
【０７０５】
ｍｖｈｄアトム７７２を完了した後に、量「ｔｒａｃｋＮｕｍ」の値に０をセットする。次に、標準ＸＭＬ手段を使用して、「ｍｏｏｖ」要素２３２０に従属するｍｐ４ｆｉｌｅ要素のそれぞれを入手する。図５９および６０からわかるように、これらの従属要素に、単一の「ｍｐ４ｆｉｏｄｓ」要素２３３０、任意選択の「ｕｄｔａ」（ユーザ・データ）要素２３４０、および１つまたは複数の「ｔｒａｋ」要素２３５０が含まれる可能性がある。これらの従属要素のそれぞれを、下で説明するように動作５０５０で処理する。
【０７０６】
「ｍｏｏｖ」要素２３２０に従属するすべてのｍｐ４ｆｉｌｅ要素の処理を完了した後に、量「ｍｏｏｖＳｉｚｅＰｏｓ」の値を「ｓｉｚｅＰｏｓ」に割り当て、ｍｏｏｖアトム７５８のアトム・サイズ７６０の値を、図１０３（動作５０６０から５０９５）に示されているように更新する。
【０７０７】
７．２．４．１  ｍｐ４ｆｉｏｄｓ要素の処理
標準ＸＭＬ手段を使用して、図５９に示された「ｍｏｏｖ」要素２３２０に従属する「ｍｐ４ｆｉｏｄｓ」要素２３３０を入手する。図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｉｏｄｓ」を有するアトム７７８および８００を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値８０４の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩｄ「ｉｏｄｓ」８０８を出力ｍｐ４ファイルに書き込む。「ｓｉｚｅＰｏｓ」の値を量「ｉｏｄｓＳｉｚｅＰｏｓ」に割り当てる。
【０７０８】
次の属性が、「ｍｐ４ｉｏｄｓ」要素について定義されている：ｖｅｒｓｉｏｎ、ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ  ２３７０、ｕｒｌ、ｉｎｃｌｕｄｅＩｎｌｉｎｅＰｒｏｆｉｌｅｓＦｌａｇ、ＯＤＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ、ｓｃｅｎｅＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ、ａｕｄｉｏＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ、ｖｉｓｕａｌＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ、およびｇｒａｐｈｉｃｓＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ。これらの属性のそれぞれについて指定される値を、同一の名前の量（プロパティ値）に割り当てる。
【０７０９】
量「ｖｅｒｓｉｏｎ」の値を、３２ビット整数８１２および８１６としてｍｐ４ファイルに書き込む。この値は、ｉｏｄｓアトムの「バージョン」値８１２および「フラグ」値８１６の両方を表す。
【０７１０】
図１０４に示された手順を使用して、出力ｍｐ４ファイル内でＭｐ４ｆＩｎｉｔＯｂｊＤｅｓｃｒオブジェクト構造８２４を作成する。動作５１００で、構造タグ「ＭＰ４＿ＩＯＤ＿ＴＡＧ」（値＝１６）８２８を８ビット整数として出力ｍｐ４ファイルに書き込む。動作５１１０で、出力ｍｐ４ファイルの現在のファイル位置を量「ｓｉｚｅＰｏｓ」に割り当て、「ｓｉｚｅＰｏｓ」の値を量「ｍｐ４ｆｉｏｄＰｏｓ」に割り当てる。動作５１２０で、値「１」を、量「ｎｕｍＳｉｚｅＢｙｔｅｓ」に割り当てる。動作５１３０で、値０を、予備的なサイズ値８３２として出力ｍｐ４ファイルに書き込む。
【０７１１】
量「ｏｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＩＤ」の値を、１０ビット整数８３６としてｍｐ４ファイルに書き込む。「ｕｒｌ」属性の値が指定されている場合に、単一の「１」ビットを、ｍｐ４ファイルに書き込む８４０。そうでない場合に、単一の「０」ビットをｍｐ４ファイルに書き込む８４０。量「ｉｎｃｌｕｄｅＩｎｌｉｎｅＰｒｏｆｉｌｅｓＦｌａｇ」の値が真である場合に、単一の「１」ビットをｍｐ４ファイルに書き込む８４４。そうでない場合に、単一の「０」ビットをｍｐ４ファイルに書き込む８４４。値「１５」を、４ビット整数（バイナリ値＝１１１１）８４８としてｍｐ４ファイルに書き込む。
【０７１２】
「ｕｒｌ」属性の値が指定されている場合に、量「ｕｒｌ」の値を、「Ｐａｓｃａｌストリング」（文字数の１バイトと、それに続く指定された個数の文字バイト）としてｍｐ４ファイルに書き込む。そうでない場合に、動作５１４０で、量ＯＤＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ  ８５２、ｓｃｅｎｅＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ  ８５６、ａｕｄｉｏＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ  ８６０、ｖｉｓｕａｌＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ  ８６４、およびｇｒａｐｈｉｃｓＰｒｏｆｉｌｅＬｅｖｅｌＩｎｄｉｃａｔｉｏｎ  ８６８の値を、それぞれ８ビット整数としてｍｐ４ファイルに書き込む。
【０７１３】
次に、標準ＸＭＬ手段を使用して、動作５０５０で、「ｍｐ４ｆｉｏｄｓ」要素に従属する各要素を入手する。図６０からわかるように、「ｍｐ４ｆｉｏｄｓ」要素２３６０は、１つまたは複数の従属する「ＥｓＩｄＩｎｃ」要素２３８０を有すると期待され、各「ＥｓＩｄＩｎｃ」要素２３８０は、「ｔｒａｃｋＩＤ」属性を有する。
【０７１４】
「ｍｐ４ｆｉｏｄｓ」要素２３６０に従属する「ＥｓＩｄＩｎｃ」要素２３８０ごとに、次の値からなるＥＳ＿ＩＤ＿Ｉｎｃデータ構造８７２を、出力ｍｐ４ファイルに付加する。
１．「ＥＳ＿ＩＤ＿ＩｎｃＴａｇ」（値＝１４）８８０の値を表す１バイト
２．値「４」（「ｎｕｍＢｙｔｅｓ」）８８４を表す１バイト
３．３２ビット整数（「ＥＳ＿ＩＤ」）８８８として「ｔｒａｃｋＩＤ」属性の値を表す４バイト
【０７１５】
動作５０５０で「ｍｐ４ｆｉｏｄｓ」要素２３６０に従属するすべての「ＥｓＩｄＩｎｃ」要素２３８０の処理を完了した後に、ＭＰ４＿ＩＯＤサイズ８３２の値を、図１０４（動作５１６０から５１９５）に示されているように更新する。次に、量「ｉｏｄｓＳｉｚｅＰｏｓ」の値を量「ｓｉｚｅＰｏｓ」に割り当て、ｉｏｄｓアトム８００のアトム・サイズ８０４を、図１０３（動作５０６０から５０９５）に示されているように更新する。
【０７１６】
７．２．４．２  各ｔｒａｋ要素の処理
標準ＸＭＬ手段を使用して、図５９に示された「ｍｏｏｖ」要素２３２０に従属する「ｔｒａｋ」要素２３５０のそれぞれを入手する。図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｔｒａｋ」を有するアトム７９０および９００を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値９０３の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩｄ「ｔｒａｋ」９０６を出力ｍｐ４ファイルに書き込む。「ｓｉｚｅＰｏｓ」の値を量「ｔｒａｋＳｉｚｅＰｏｓ」に割り当てる。
【０７１７】
次の要素が、「ｔｒａｋ」要素について定義されている：ｖｅｒｓｉｏｎ、ｆｌａｇｓ、ｃｒｅａｔｉｏｎＴｉｍｅ、ｍｏｄｉｆｙＴｉｍｅ、ｔｒａｃｋＩＤ、およびｄｕｒａｔｉｏｎ。これらの属性のそれぞれについて指定される値を、同一の名前の量（プロパティ値）に割り当てる。これらのプロパティ値のどれもが、「ｔｋｈｄ」アトム９１０が作成されるまで、出力ｍｐ４ファイルに書き込まれない。
【０７１８】
図１０３に示された手順を使用して、出力ｍｐ４ファイル内にアトムＩＤ「ｔｋｈｄ」を有するアトム９１０を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｔｋｈｄ」を出力ｍｐ４ファイルに書き込む。「ｓｉｚｅＰｏｓ」の値を量「ｔｋｈｄＳｉｚｅＰｏｓ」に割り当てる。
【０７１９】
動作５０４０で、次の量の値をｍｐ４ファイルに書き込む。
１．ｖｅｒｓｉｏｎ（８ビット整数）
２．ｆｌａｇｓ（２４ビット整数）
３．ｃｒｅａｔｉｏｎＴｉｍｅ（３２ビット整数）
４．ｍｏｄｉｆｙＴｉｍｅ（３２ビット整数）
５．ｔｒａｃｋＩＤ（３２ビット整数）
６．ｒｅｓｅｒｖｅｄ１（３２ビット、０）ここでファイル位置を「ｄｕｒａｔｉｏｎＰｏｓ」として保存する
７．ｄｕｒａｔｉｏｎ（３２ビット整数）
８．ｒｅｓｅｒｖｅｄ２（５６バイト）
９．ｒｅｓｅｒｖｅｄ３（３２ビット、値＝０ｘ０１４０００００)
１０．ｒｅｓｅｒｖｅｄ４（３２ビット、値＝０ｘ００ｆ０００００)
【０７２０】
「ｒｅｓｅｒｖｅｄ２」データ値は、値「１」を有するバイト１７および３３と、値「４」を有するバイト４８を除いて、すべて０である。
【０７２１】
ｔｋｈｄアトム９１０は、従属アトムを有しない。動作５０４０で、ｔｋｈｄアトム９１０のプロパティ・フィールドを書き込んだ後に、ｍｐ４バイナリ・ファイル内のｔｋｈｄアトム９１０のアトム・サイズの値を、図１０３（動作５０６０から５１９５）に示されているように更新する。
【０７２２】
ｔｋｈｄアトム９１０を完了した後に、標準ＸＭＬ手段を使用して、「ｔｒａｋ」要素２６００に従属するｍｐ４ｆｉｌｅ要素のそれぞれを入手する。図６８および６９に示されているように、これらの従属要素に、単一の「ｍｄｉａ」要素２６０４、可能な「ｔｒｅｆ」（ｔｒａｃｋ  ｒｅｆｅｒｅｎｃｅ）要素２６３６、および可能な「ｅｄｔｓ」（ｅｄｉｔ  ｌｉｓｔ）要素２６４４を含めることができる。これらの従属要素のそれぞれを、下で説明するように動作５０５０で処理する。
【０７２３】
「ｔｒａｋ」要素２６００に従属するすべてのｍｐ４ｆｉｌｅ要素の処理を完了した後に、量「ｔｒａｋＳｉｚｅＰｏｓ」の値を「ｓｉｚｅＰｏｓ」に割り当て、ｔｒａｋアトム９００のアトム・サイズ９０３の値を、図１０３（動作５０６０から５０９５）に示されているように更新する。量「ｔｒａｃｋＮｕｍ」の値を１つ増分する。
【０７２４】
７．２．４．３  ｍｄｉａ要素の処理
標準ＸＭＬ手段を使用して、図６８に示された各「ｔｒａｋ」要素２６００に従属する単一の「ｍｄｉａ」要素２６０４を入手する。図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｍｄｉａ」を有するアトム９１２を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｍｄｉａ」を出力ｍｐ４ファイルに書き込む。「ｓｉｚｅＰｏｓ」の値を量「ｍｄｉａＳｉｚｅＰｏｓ」に割り当てる。
【０７２５】
次の属性が、「ｍｄｉａ」要素について定義されている：ｖｅｒｓｉｏｎ、ｆｌａｇｓ、ｃｒｅａｔｉｏｎＴｉｍｅ、ｍｏｄｉｆｙＴｉｍｅ、ｔｉｍｅＳｃａｌｅ、ｄｕｒａｔｉｏｎ、ｌａｎｇｕａｇｅ、およびｑｕａｌｉｔｙ。これらの属性のそれぞれについて指定された値を、同一の名前の量（プロパティ値）に割り当てる。これらのプロパティ値のどれもが、「ｍｄｈｄ」アトム９１５が作成されるまで、出力ｍｐ４ファイルに書き込まれない。
【０７２６】
図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｍｄｈｄ」を有するアトム９１５を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０４０で、次の量の値をｍｐ４ファイルに書き込む。
１．ｖｅｒｓｉｏｎ（８ビット整数）
２．ｆｌａｇｓ（２４ビット整数）
３．ｃｒｅａｔｉｏｎＴｉｍｅ（３２ビット整数）
４．ｍｏｄｉｆｙＴｉｍｅ（３２ビット整数）
５．ｔｉｍｅＳｃａｌｅ（３２ビット整数）
６．ｄｕｒａｔｉｏｎ（３２ビット整数）
７．ｌａｎｇｕａｇｅ（１６ビット整数）
８．ｑｕａｌｉｔｙ（１６ビット整数）
【０７２７】
ｍｄｈｄアトム９１５は、従属アトムを有しない。動作５０４０で、ｍｄｈｄアトム９１５のプロパティ・フィールドを書き込んだ後に、ｍｐ４ファイル内のｍｄｈｄアトム９１５のアトム・サイズの値を、図１０３（動作５０６０から５０９５）に示されているように更新する。
【０７２８】
次に、メディア・データ２２２０を調べて、各「サンプル」（「アクセス単位」とも称する）のサイズおよび持続時間を決定する。リストＳｔｒｅａｍＴｙｐｅＦｏｒＴｒａｃｋの量ｔｒａｃｋＮｕｍの値によって指定される項目の値を、量ｓｔｒｅａｍＴｙｐｅに割り当てる。リストＯｂｊｅｃｔＴｙｐｅＦｏｒＴｒａｃｋの量ｔｒａｃｋＮｕｍの値によって指定される項目の値を、量ｏｂｊｅｃｔＴｙｐｅに割り当てる。
【０７２９】
量ｓｔｒｅａｍＴｙｐｅの値が「４」である場合に、ｓａｍｐｌｅＳｉｚｅ、ｓａｍｐｌｅＴｉｍｅ、およびｓｙｎｃＳａｍｐｌｅという名前の３つの新しいリストを作成する。各リストの項目数は、リストＭｅｄｉａＳａｍｐｌｅｓの量ｔｒａｃｋＮｕｍの値によって指定される項目の値によって決定される。次に、メディア・データ・ファイルのデータを媒体依存の形で調べて、各サンプルのサイズおよび持続時間を判定する。その結果を、リストｓａｍｐｌｅＳｉｚｅおよびｓａｍｐｌｅＴｉｍｅの項目に割り当てる。「ランダム・アクセス・サンプル」と決定された各サンプルのインデックスを、リスト「ｓｙｎｃＳａｍｐｌｅ」の項目に割り当てる。
【０７３０】
量ｓｔｒｅａｍＴｙｐｅの値が「５」である場合に、ｓａｍｐｌｅＳｉｚｅおよびｓａｍｐｌｅＴｉｍｅという名前の２つの新しいリストを作成する。各リストの項目数は、リストＭｅｄｉａＳａｍｐｌｅｓの量ｔｒａｃｋＮｕｍの値によって指定される項目の値によって決定される。次に、メディア・データ・ファイル内のデータを媒体依存の形で調べて、各サンプルのサイズおよび持続時間を判定する。その結果を、リストｓａｍｐｌｅＳｉｚｅおよびｓａｍｐｌｅＴｉｍｅの項目に割り当てる。
【０７３１】
他の場合に（ｓｔｒｅａｍＴｙｐｅが「４」でも「５」でもない）、メディア・データ・ストリーム全体が、１つの巨大なサンプルになると定義される。
【０７３２】
次に、標準ＸＭＬ手段を使用して、「ｍｄｉａ」要素２６０４に従属する各要素を入手する。図６８からわかるように、この従属要素に、単一の「ｈｄｌｒ」（ｈａｎｄｌｅｒ）要素２６０８、単一の「ｍｉｎｆ」（ｍｅｄｉａ  ｉｎｆｏ）要素２６１２、単一の「ｓｔｂｌ」（ｓａｍｐｌｅ  ｔａｂｌｅ）要素２６２８、およびメディア・ヘッダ（「＊ｍｈｄ」）要素２６３２が含まれる。これらの従属要素のそれぞれを、下で説明するように動作５０５０で処理する。
【０７３３】
「ｍｄｉａ」要素２６０４に従属するすべてのｍｐ４ｆｉｌｅ要素の処理が完了した後に、量「ｍｄｉａＳｉｚｅＰｏｓ」の値を「ｓｉｚｅＰｏｓ」に割り当て、メディア・アトム９１２のアトム・サイズの値を、図１０３（動作５０６０から５０９５）に示されているように更新する。
【０７３４】
７．２．４．４  ｈｄｌｒ要素の処理
標準ＸＭＬ手段を使用して、図６８に示された「ｍｄｉａ」要素２６０４に従属する単一の「ｈｄｌｒ」要素２６０８を入手する。図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｈｄｌｒ」を有するアトム９１８を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｈｄｌｒ」を出力ｍｐ４ファイルに書き込む。
【０７３５】
次の属性が、「ｈｄｌｒ」要素２６０８について定義されている：ｖｅｒｓｉｏｎ、ｆｌａｇｓ、ｈａｎｄｌｅｒＴｙｐｅ、およびｎａｍｅ。これらの属性のそれぞれについて指定された値を、同一の名前の量に割り当てる。次に、動作５０４０で、次の量の値をｍｐ４ファイルに書き込む。
１．ｖｅｒｓｉｏｎ（８ビット整数）
２．ｆｌａｇｓ（２４ビット整数）
３．ｈａｎｄｌｅｒＴｙｐｅ（３２ビット整数）
４．ｒｅｓｅｒｖｅｄ（１２バイト、すべて０）
５．ｎａｍｅ（ヌル終端文字ストリング）
【０７３６】
ｈｄｌｒ要素２６０８は、従属する要素を有しない５０５０。ｈｄｌｒアトム９１８のプロパティ・フィールドを書き込んだ後に、ｈｄｌｒアトム９１８のアトム・サイズの値を、図１０３（動作５０６０から５０９５）に示されているように更新する。
【０７３７】
７．２．４．５  ｍｉｎｆ要素の処理
標準ＸＭＬ手段を使用して、図６８に示された「ｍｄｉａ」要素２６０４に従属する単一の「ｍｉｎｆ」要素２６１２を入手する。図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｍｉｎｆ」を有するアトム９２０を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｍｉｎｆ」を出力ｍｐ４ファイルに書き込む。「ｓｉｚｅＰｏｓ」の値を、量「ｍｉｎｆＳｉｚｅＰｏｓ」に割り当てる。
【０７３８】
「ｍｉｎｆ」要素２６１２の属性はなく、ｍｉｎｆアトム９２０のプロパティ・フィールドはない（動作５０３０および５０４０参照）。
【０７３９】
次に、動作５０５０で、標準ＸＭＬ手段を使用して、「ｍｉｎｆ」要素２６１２に従属するすべての要素を入手する。図６８からわかるように、この従属する要素に、「ｄｉｎｆ」要素２６１６、「ｓｔｂｌ」要素２６２８、およびメディア・ヘッダ（＊ｍｈｄ）要素２６３２が含まれる可能性がある。「ｓｔｂｌ」要素２６２８およびメディア・ヘッダ（＊ｍｈｄ）要素２６３２を処理するのに使用される手段を、下で説明する。
【０７４０】
「ｄｉｎｆ」要素２６１６の場合に、図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｄｉｎｆ」を有するアトム９２４を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｄｉｎｆ」を出力ｍｐ４ファイルに書き込む。「ｓｉｚｅＰｏｓ」の値を、量「ｄｉｎｆＳｉｚｅＰｏｓ」に割り当てる。
【０７４１】
「ｄｉｎｆ」要素２６１６の属性はなく、ｄｉｎｆアトム９２４のプロパティ・フィールドはない（動作５０３０参照）。
【０７４２】
次に、動作５０４０で、標準ＸＭＬ手段を使用して、「ｄｉｎｆ」要素２６１６に従属するすべての要素を入手する。図６８からわかるように、この従属する要素に、「ｄｒｅｆ」要素２６２０が含まれる可能性がある。
【０７４３】
「ｄｉｎｆ」要素２６１６が、従属する「ｄｒｅｆ」要素２６２０を所有する場合に、図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｄｒｅｆ」を有するアトム９２７を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｄｒｅｆ」を出力ｍｐ４ファイルに書き込む。「ｓｉｚｅＰｏｓ」の値を、量「ｄｒｅｆＳｉｚｅＰｏｓ」に割り当てる。「ｄｒｅｆ」要素の属性はなく、ｄｒｅｆアトムのプロパティ・フィールドはない。
【０７４４】
次に、標準ＸＭＬ手段を使用して、「ｄｒｅｆ」要素２６２０に従属するすべての要素を入手する。図６８からわかるように、この従属する要素に、「ｕｒｌＤａｔａ」要素２６２４が含まれる可能性がある。
【０７４５】
「ｄｒｅｆ」要素２６２０が、従属する「ｕｒｌＤａｔａ」要素２６２４を所有する場合に、図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｕｒｌ  」を有するアトム９３０を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、４文字アトムＩＤ「ｕｒｌ  」（ｕ−ｒ−ｌ−スペース）を出力ｍｐ４ファイルに書き込む。
【０７４６】
動作５０３０で、「ｕｒｌＤａｔａ」要素の「ｖｅｒｓｉｏｎ」、「ｆｌａｇｓ」、および「ｌｏｃａｔｉｏｎ」属性の値を、同一の名前の量に割り当てる。
【０７４７】
動作５４００で、次の値を出力ｍｐ４ファイルに書き込む。
１．量「ｖｅｒｓｉｏｎ」の値を表す８ビット整数
２．量「ｆｌａｇｓ」の値を表す２４ビット整数
３．量「ｌｏｃａｔｉｏｎ」の値を表すヌル終端文字ストリング
【０７４８】
「ｕｒｌＤａｔａ」要素２６２４は、従属要素を有しない（動作５０５０参照）。これらのプロパティ値を出力ｍｐ４ファイルに書き込んだ後に、「ｕｒｌ  」アトム９３０のアトム・サイズの値を、図１０３（動作５０６０から５０９５）に示されているように更新する。
【０７４９】
量「ｄｒｅｆＳｉｚｅＰｏｓ」の値を、「ｓｉｚｅＰｏｓ」に割り当て、ｄｒｅｆアトム９２７のアトム・サイズの値を、図１０３（動作５０６０から５０９５）に示されているように更新する。
【０７５０】
量「ｄｉｎｆＳｉｚｅＰｏｓ」の値を、「ｓｉｚｅＰｏｓ」に割り当て、ｄｉｎｆアトム９２４のアトム・サイズの値を、図１０３（動作５０６０から５０９５）に示されているように更新する。
【０７５１】
「ｍｉｎｆ」要素２６１２に従属するすべてのｍｐ４ｆｉｌｅ要素の処理を完了した後に、量「ｍｉｎｆＳｉｚｅＰｏｓ」の値を量「ｓｉｚｅＰｏｓ」に割り当て、ｍｉｎｆアトム９２０のアトム・サイズの値を、図１０３（動作５０６０から５０９５）に示されているように更新する。
【０７５２】
７．２．４．６  ｓｔｂｌ要素の処理
標準ＸＭＬ手段を使用して、図６８に示された「ｍｉｎｆ」要素２６１２に従属する単一の「ｓｔｂｌ」要素２６２８を入手する。図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｓｔｂｌ」を有するアトム９３３および９５０を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値９５４の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｓｔｂｌ」９５７を出力ｍｐ４ファイルに書き込む。「ｓｉｚｅＰｏｓ」の値を量「ｓｔｂｌＳｉｚｅＰｏｓ」に割り当てる。
【０７５３】
「ｓｔｂｌ」要素２６２８の属性はなく、ｓｔｂｌアトムのプロパティ・フィールドはない（動作５０３０および５０４０参照）。
【０７５４】
次に、標準ＸＭＬ手段を使用して、「ｓｔｂｌ」要素２６５２に従属するすべての要素を入手する。図６９からわかるように、この従属要素に、「ｓｔｓｃ」要素２６５６、「ｓｔｔｓ」要素２６６０、「ｓｔｃｏ」要素２６６４、「ｓｔｓｚ」要素２６６８、「ｓｔｓｓ」要素２６７２、および「ｓｔｓｄ」要素２６７６が含まれる可能性がある。単一インスタンスが任意選択である「ｓｔｓｓ」要素２６７２を除いて、これらの要素のそれぞれの１つが必要である。これらの要素のそれぞれを処理するのに使用される手段を、下の動作５０５０で説明する。
【０７５５】
「ｓｔｂｌ」要素２６５２に従属するすべてのｍｐ４ｆｉｌｅ要素の処理が完了した後に、量「ｓｔｂｌＳｉｚｅＰｏｓ」の値を「ｓｉｚｅＰｏｓ」に割り当て、ｓｔｂｌアトム９５０のアトム・サイズ９５４の値を、図１０３（動作５０６０から５０９５）に示されているように更新する。
【０７５６】
７．２．４．７  ｓｔｓｃ要素の処理
標準ＸＭＬ手段を使用して、図６９に示された「ｓｔｂｌ」要素２６５２に従属する単一の「ｓｔｓｃ」要素２６５６を入手する。図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｓｔｓｃ」を有するアトム９６０を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｓｔｓｃ」を出力ｍｐ４ファイルに書き込む。
【０７５７】
「ｓｔｓｃ」要素２６５６は、属性「ｖｅｒｓｉｏｎ」および「ｆｌａｇｓ」を有する。動作５０３０で、これらの属性のそれぞれの値を、同一の名前の量に割り当てる。動作５０４０で、量「ｖｅｒｓｉｏｎ」の値を、８ビット整数としてｍｐ４ファイルに書き込み、量「ｆｌａｇｓ」の値を、２４ビット整数としてｍｐ４ファイルに書き込む。
【０７５８】
ｍｐ４ファイルのファイル位置を、量「ｎｕｍＥｎｔｒｉｅｓＰｏｓ」に割り当て、３２ビットの０の値をｍｐ４ファイルに書き込み、値０を量「ｎｕｍＥｎｔｒｉｅｓ」に割り当てる。
【０７５９】
次に、動作５０５０で、標準ＸＭＬ手段を使用して、「ｓｔｓｃ」要素２６５６に従属するすべての要素を入手する。これらの従属要素は、１つまたは複数の「ｓａｍｐｌｅＴｏＣｈｕｎｋ」要素からなる。各「ｓａｍｐｌｅＴｏＣｈｕｎｋ」要素は、属性「ｆｉｒｓｔＣｈｕｎｋ」、「ｎｕｍＳａｍｐｌｅｓ」、および「ｓａｍｐｌｅＤｅｓｃ」を所有する。
【０７６０】
次の動作を、「ｓｔｓｃ」要素２６５６に従属する「ｓａｍｐｌｅＴｏＣｈｕｎｋ」要素ごとに実行する。
（１）「ｆｉｒｓｔＣｈｕｎｋ」属性の値を、３２ビット整数としてｍｐ４ファイルに書き込む。
（２）「ｎｕｍＳａｍｐｌｅｓ」属性の値を、３２ビット整数としてｍｐ４ファイルに書き込む。
（３）「ｓａｍｐｌｅＤｅｓｃ」属性の値を、３２ビット整数としてｍｐ４ファイルに書き込む。
（４）量「ｎｕｍＥｎｔｒｉｅｓ」の値を１つ増分する。
【０７６１】
「ｓｔｓｃ」要素２６５６に従属する要素のすべての処理を完了した後に、動作５０６０で、ｍｐ４ファイルのファイル位置を量「ｅｎｄＰｏｓ」に割り当てる。ｍｐ４ファイルのファイル位置を、量「ｎｕｍＥｎｔｒｉｅｓＰｏｓ」によって指定される値に変更し、量「ｎｕｍＥｎｔｒｉｅｓ」の値を、３２ビット整数としてｍｐ４ファイルに書き込む。次に、ｓｔｓｃアトム９６０のアトム・サイズの値を、図１０３（動作５０７０から５０９５）に示されているように更新する。
【０７６２】
７．２．４．８  ｓｔｔｓ要素の処理
標準ＸＭＬ手段を使用して、図６９に示された「ｓｔｂｌ」要素２６５２に従属する単一の「ｓｔｔｓ」要素２６６０を入手する。図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｓｔｔｓ」を有するアトム９６３を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｓｔｔｓ」を出力ｍｐ４ファイルに書き込む。
【０７６３】
「ｓｔｔｓ」要素２６６０は、属性「ｖｅｒｓｉｏｎ」および「ｆｌａｇｓ」を有する。動作５０３０で、これらの属性のそれぞれの値を、同一の名前の量に割り当てる。動作５０４０で、量「ｖｅｒｓｉｏｎ」の値を、８ビット整数としてｍｐ４ファイルに書き込み、量「ｆｌａｇｓ」の値を、２４ビット整数としてｍｐ４ファイルに書き込む。
【０７６４】
ｍｐ４ファイルのファイル位置を、量「ｎｕｍＥｎｔｒｉｅｓＰｏｓ」に割り当て、３２ビットの０の値をｍｐ４ファイルに書き込み、値０を量「ｎｕｍＥｎｔｒｉｅｓ」に割り当てる。
【０７６５】
リストＳｔｒｅａｍＴｙｐｅＦｏｒＴｒａｃｋの項目「ｔｒａｃｋＮｕｍ」の値を、量「ｓｔｒｅａｍＴｙｐｅ」に割り当てる。リストＯｂｊｅｃｔＴｙｐｅＦｏｒＴｒａｃｋの項目「ｔｒａｃｋＮｕｍ」の値を、量「ｏｂｊｅｃｔＴｙｐｅ」に割り当てる。量「ｔｒａｃｋＮｕｍ」の値は、手順「ｔｒａｋ要素の処理」の一部として決定されたものである。
【０７６６】
量「ｓｔｒｅａｍＴｙｐｅ」の値が「１」である場合に、ｏｄｓｍデータがｏｄｓｍのｍｄａｔアトムに入力された時に作成されたｏｄｓｍサンプル時間値（ＯｄｓｍＳａｍｐｌｅＴｉｍｅ）のリストを使用して、各ｏｄｓｍサンプルの持続時間値を決定する。各ｏｄｓｍサンプルの持続時間は、このリストの連続する項目の値の間の差によって決定される。これらの値は、トラック時間単位で指定される。
【０７６７】
量「ｓｔｒｅａｍＴｙｐｅ」の値が「３」である場合に、ｓｄｓｍデータがｓｄｓｍのｍｄａｔアトムに入力された時に作成されたｓｄｓｍサンプル時間値（ＳｄｓｍＳａｍｐｌｅＴｉｍｅ）のリストを使用して、各ｓｄｓｍサンプルの持続時間を決定する。各ｓｄｓｍサンプルの持続時間は、このリストの連続する項目の値の間の差によって決定される。秒単位の結果の持続時間に、この「ｓｔｔｓ」要素を含む「ｔｒａｋ」要素の「ｔｉｍｅＳｃａｌｅ」属性の値をかけて、トラック時間単位の持続時間値を決定する。
【０７６８】
量「ｓｔｒｅａｍＴｙｐｅ」の値が「４」である場合、または量「ｓｔｒｅａｍＴｙｐｅ」の値が「５」かつ量ｏｂｊｅｃｔＴｙｐｅの値が「６４」または「１０７」である場合に、対応するメディア・データがｍｄａｔアトムに入力された時に作成されたメディア・サンプル時間値（ｓａｍｐｌｅＴｉｍｅ）のリストを使用して、各メディア・サンプルの持続時間値を決定する。各メディア・サンプルの持続時間は、このリストの対応する項目によって指定される。これらの値は、トラック時間単位で指定される。
【０７６９】
前の３つの場合のそれぞれで、同一の持続時間を有する連続するサンプルの個数を、量「ｎｕｍＳａｍｐｌｅｓ」に割り当てる。サンプルの持続時間の値が前のサンプルの持続時間と異なるたびに、「ｎｕｍＳａｍｐｌｅｓ」の値を３２ビット整数としてｍｐ４ファイルに書き込み、前のサンプルの持続時間の値を３２ビット整数としてｍｐ４ファイルに書き込み、値１を値「ｎｕｍＳａｍｐｌｅｓ」に割り当て、量「ｎｕｍＥｎｔｒｉｅｓ」の値を１つ増分する。
【０７７０】
そうでない場合に、標準ＸＭＬ手段を使用して、「ｓｔｔｓ」要素２６６０に従属するすべての要素を入手する。この従属要素に、１つまたは複数の「ｔｉｍｅＴｏＳａｍｐｌｅ」要素が含まれる。各「ｔｉｍｅＴｏＳａｍｐｌｅ」要素は、属性「ｎｕｍＳａｍｐｌｅｓ」および「ｄｕｒａｔｉｏｎ」を所有する。
【０７７１】
次の動作を、「ｓｔｔｓ」要素２６６０に従属する「ｔｉｍｅＴｏＳａｍｐｌｅ」要素ごとに繰り返す。
（１）「ｎｕｍＳａｍｐｌｅｓ」属性の値を、３２ビット整数としてｍｐ４ファイルに書き込む。
（２）「ｄｕｒａｔｉｏｎ」属性の値を、３２ビット整数としてｍｐ４ファイルに書き込む。
（３）量「ｎｕｍＥｎｔｒｉｅｓ」の値を１つ増分する。
【０７７２】
「ｓｔｔｓ」要素２６６０に従属するすべての要素の処理を完了した後に、動作５０６０で、ｍｐ４ファイルのファイル位置を量「ｅｎｄＰｏｓ」に割り当てる。ｍｐ４ファイルのファイル位置を、量「ｎｕｍＥｎｔｒｉｅｓＰｏｓ」によって指定される値に変更し、量「ｎｕｍＥｎｔｒｉｅｓ」の値を、３２ビット整数としてｍｐ４ファイルに書き込む。次に、ｓｔｔｓアトム９６３のアトム・サイズの値を、図１０３（動作５０７０から５０９５）に示されているように更新する。
【０７７３】
７．２．４．９  ｓｔｃｏ要素の処理
標準ＸＭＬ手段を使用して、図６９に示された「ｓｔｂｌ」要素２６５２に従属する単一の「ｓｔｃｏ」要素２６６４を入手する。図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｓｔｃｏ」を有するアトム９６６を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｓｔｃｏ」を出力ｍｐ４ファイルに書き込む。
【０７７４】
「ｓｔｃｏ」要素２６６４は、属性「ｖｅｒｓｉｏｎ」および「ｆｌａｇｓ」を有する。動作５０３０で、これらの属性のそれぞれの値を、同一の名前の量に割り当てる。動作５０４０で、量「ｖｅｒｓｉｏｎ」の値を、８ビット整数としてｍｐ４ファイルに書き込み、量「ｆｌａｇｓ」の値を、２４ビット整数としてｍｐ４ファイルに書き込む。
【０７７５】
ｍｐ４ファイルのファイル位置を、量「ｎｕｍＥｎｔｒｉｅｓＰｏｓ」に割り当て、３２ビットの０の値をｍｐ４ファイルに書き込み、値０を量「ｎｕｍＥｎｔｒｉｅｓ」に割り当てる。
【０７７６】
次に、動作５０５０で、標準ＸＭＬ手段を使用して、「ｓｔｃｏ」要素２６６４に従属するすべての要素を入手する。これらの従属要素は、１つまたは複数の「ｃｈｕｎｋＯｆｆｓｅｔ」要素からなる。「ｃｈｕｎｋＯｆｆｓｅｔ」要素について、次の２つの属性が定義されている：「ｍｄａｔＩｄ」および「ｍｄａｔＯｆｆｓｅｔ」
【０７７７】
次の動作を、「ｓｔｃｏ」要素２６６４に従属する「ｃｈｕｎｋＯｆｆｓｅｔ」要素ごとに繰り返す。
（１）「ｍｄａｔＩｄ」属性および「ｍｄａｔＯｆｆｓｅｔ」属性について指定された値を、同一の名前の量に割り当てる。
（２）量「ｃｈｕｎｋ」の値を、次の３つの条件によって決定する：
ａ．リストｍｄａｔＩｄＦｏｒＣｈｕｎｋの対応する項目が、量ｍｄａｔＩｄの値と一致し、
ｂ．リストｔｒａｃｋＩｄＦｏｒＣｈｕｎｋの対応する項目が、量ｔｒａｃｋＩｄの値と一致し、
ｃ．ｎｕｍＥｎｔｒｉｅｓの値が、前の２つの条件を満足する項目の個数と一致する
（３）リストｏｆｆｓｅｔＦｏｒＣｈｕｎｋの項目「ｃｈｕｎｋ」の値を、量「ｃｈｕｎｋＯｆｆｓｅｔ」に割り当てる。
（４）量「ｃｈｕｎｋＯｆｆｓｅｔ」の値を、３２ビット整数としてｍｐ４ファイルに書き込む。
（５）量「ｎｕｍＥｎｔｒｉｅｓ」の値を１つ増分する。
【０７７８】
「ｓｔｃｏ」要素２６６４に従属するすべての要素の処理を完了した後に、動作５０６０で、ｍｐ４ファイルのファイル位置を量「ｅｎｄＰｏｓ」に割り当てる。ｍｐ４ファイルのファイル位置を、量「ｎｕｍＥｎｔｒｉｅｓＰｏｓ」によって指定される値に変更し、量「ｎｕｍＥｎｔｒｉｅｓ」の値を、３２ビット整数としてｍｐ４ファイルに書き込む。次に、ｓｔｃｏアトム９６６のアトム・サイズの値を、図１０３（動作５０７０から５０９５）に示されているように更新する。
【０７７９】
７．２．４．１０  ｓｔｓｚ要素の処理
標準ＸＭＬ手段を使用して、図６９に示された「ｓｔｂｌ」要素２６５２に従属する単一の「ｓｔｓｚ」要素２６６８を入手する。図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｓｔｓｚ」を有するアトム９７０を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｓｔｓｚ」を出力ｍｐ４ファイルに書き込む。
【０７８０】
「ｓｔｓｚ」要素２６６８は、属性「ｖｅｒｓｉｏｎ」、「ｆｌａｇｓ」、「ｓｉｚｅＦｏｒＡｌｌ」、および「ｎｕｍＳａｍｐｌｅｓ」を有する。動作５０３０で、これらの属性のそれぞれの値を、同一の名前の量に割り当てる。動作５０４０で、量「ｖｅｒｓｉｏｎ」の値を、８ビット整数としてｍｐ４ファイルに書き込み、量「ｆｌａｇｓ」の値を、２４ビット整数としてｍｐ４ファイルに書き込む。
【０７８１】
リストＳｔｒｅａｍＴｙｐｅＦｏｒＴｒａｃｋの項目「ｔｒａｃｋＮｕｍ」の値を、量「ｓｔｒｅａｍＴｙｐｅ」に割り当てる。リストＯｂｊｅｃｔＴｙｐｅＦｏｒＴｒａｃｋの項目「ｔｒａｃｋＮｕｍ」の値を、量「ｏｂｊｅｃｔＴｙｐｅ」に割り当てる。量「ｔｒａｃｋＮｕｍ」の値は、手順「ｔｒａｋ要素の処理」の一部として決定されたものである。
【０７８２】
量「ｓｔｒｅａｍＴｙｐｅ」の値が「１」であり、量「ｎｕｍＯｄｓｍＳａｍｐｌｅｓ」の値が「１」である場合に、値「１」を量「ｎｕｍＳａｍｐｌｅｓ」に割り当て、リストＯｄｓｍＳａｍｐｌｅＳｉｚｅの最初の項目の値を、量「ｓｉｚｅＦｏｒＡｌｌ」に割り当てる。
【０７８３】
量「ｓｔｒｅａｍＴｙｐｅ」の値が「３」であり、リストＳｄｓｍＳａｍｐｌｅＳｉｚｅの第２項目が負である場合に、値「１」を、量「ｎｕｍＳａｍｐｌｅｓ」に割り当て、リストＳｄｓｍＳａｍｐｌｅＳｉｚｅの第１項目の値を、量「ｓｉｚｅＦｏｒＡｌｌ」に割り当てる。リストＳｄｓｍＳａｍｐｌｅＳｉｚｅの負の項目は、このリストの終りを示す。
【０７８４】
量「ｓｔｒｅａｍＴｙｐｅ」の値が「５」であり、量「ｏｂｊｅｃｔＴｙｐｅ」の値が「１９３」であり、量「ｓｉｚｅＦｏｒＡｌｌ」の値が１未満である場合に、値「２４」を量「ｎｕｍＳａｍｐｌｅｓ」に割り当て、リストＳｄｓｍＳａｍｐｌｅＳｉｚｅの第１項目の値を、量「ｓｉｚｅＦｏｒＡｌｌ」に割り当てる。２４バイトは、「１９３」のｏｂｊｅｃｔＴｙｐｅによって定義されるオーディオ・ストリームの各サンプルのサイズである。
【０７８５】
ｍｐ４ファイルのファイル位置を、量「ｓｉｚｅＦｏｒＡｌｌＰｏｓ」に割り当て、量「ｓｉｚｅＦｏｒＡｌｌ」の値を、３２ビット整数としてｍｐ４ｆｉｌｅに書き込む。ｍｐ４ファイルのファイル位置を、量「ｎｕｍＥｎｔｒｉｅｓＰｏｓ」に割り当て、量「ｎｕｍＳａｍｐｌｅｓ」の値を、３２ビット整数としてｍｐ４ｆｉｌｅに書き込む。値０を、量「ｎｕｍＥｎｔｒｉｅｓ」に割り当てる。
【０７８６】
「ｓｔｓｚ」要素２６６８は、従属する「ｓａｍｐｌｅＳｉｚｅ」要素を有する場合があるが、この要素に含まれるデータ値が、現在のメディア・データ・ストリームと必ずしも一貫しないので、これらは無視される。その代わりに、すべてのサイズ値が、ストリームが作成される時（ｏｄｓｍおよびｓｄｓｍ）またはｍｄｉａアトムが作成される時（オーディオ・ストリームおよびビデオ・ストリーム）に、再計算されている。結果のサンプル・サイズ値が、リストＯｄｓｍＳａｍｐｌｅＳｉｚｅ、ＳｄｓｍＳａｍｐｌｅＳｉｚｅ、またはｓａｍｐｌｅＳｉｚｅのいずれか１つに入力されている。メディア・データが均一のサンプル・サイズを有する場合に、各サンプルの値は、量「ｓｉｚｅＦｏｒＡｌｌ」によって指定される。
【０７８７】
量「ｓｔｒｅａｍＴｙｐｅ」の値が「１」（ｏｄｓｍ）であり、量「ｎｕｍＯｄｓｍＳａｍｐｌｅｓ」の値が１を超える場合に、量「ｎｕｍＯｄｓｍＳａｍｐｌｅｓ」の値を量「ｎｕｍＥｎｔｒｉｅｓ」に割り当てる。量「ｎｕｍＯｄｓｍＳａｍｐｌｅｓ」の値は、リストＯｄｓｍＳａｍｐｌｅＳｉｚｅの項目数を示す。リストＯｄｓｍＳａｍｐｌｅＳｉｚｅの各項目の値を、３２ビット整数としてｍｐ４ファイルに書き込む。量「ｎｕｍＯｄｓｍＳａｍｐｌｅｓ」の値が量「ｎｕｍＳａｍｐｌｅｓ」の値と同一でない場合に、ｍｐ４ファイルのファイル位置を、量「ｍｐ４ＦｉｌｅＰｏｓ」に割り当て、ファイル位置を、量「ｎｕｍＥｎｔｒｉｅｓＰｏｓ」によって指定される値に変更し、量「ｎｕｍＯｄｓｍＳａｍｐｌｅｓ」の値を、３２ビット整数としてｍｐ４ファイルに書き込み、ファイル位置を、量「ｍｐ４ＦｉｌｅＰｏｓ」によって指定される値に復元する。
【０７８８】
量「ｓｔｒｅａｍＴｙｐｅ」の値が「３」（ｓｄｓｍ）であり、リストＳｄｓｍＳａｍｐｌｅＳｉｚｅの第２項目が負でない場合に、リストＳｄｓｍＳａｍｐｌｅＳｉｚｅの各項目の値を、負の項目が見つかるまで、３２ビット整数としてｍｐ４ファイルに書き込む。リストＳｄｓｍＳａｍｐｌｅＳｉｚｅの負でない項目ごとに、量「ｎｕｍＥｎｔｒｉｅｓ」の値を１つ増分する。このリストの最後の負の値は、ｍｐ４ファイルに書き込まれない。量「ｎｕｍＥｎｔｒｉｅｓ」の値が、量「ｎｕｍＳａｍｐｌｅｓ」の値と同一でない場合には、ｍｐ４ファイルのファイル位置を、量ｍｐ４ＦｉｌｅＰｏｓに割り当て、ファイル位置を、量「ｎｕｍＥｎｔｒｉｅｓＰｏｓ」によって指定される値に変更し、量「ｎｕｍＥｎｔｒｉｅｓ」の値を、３２ビット整数としてｍｐ４ファイルに書き込み、ファイル位置を、量「ｍｐ４ＦｉｌｅＰｏｓ」によって指定される値に復元する。
【０７８９】
量「ｓｔｒｅａｍＴｙｐｅ」の値が「１」でも「３」でもなく、量「ｓｉｚｅＦｏｒＡｌｌ」の値が正でなく、量「ｎｕｍＳａｍｐｌｅｓ」の値が正でない場合に、量「ｎｕｍＭｅｄｉａＳａｍｐｌｅｓ」の値を、量「ｎｕｍＳａｍｐｌｅｓ」に割り当てる。この事例に、変化するサンプル・サイズを有するビデオ・メディア・データおよびオーディオ・メディア・データのほとんどが含まれる。量「ｎｕｍＭｅｄｉａＳａｍｐｌｅｓ」は、ｍｄｉａアトムが作成された時に作成されたリスト「ｓａｍｐｌｅＳｉｚｅ」の項目数を指定する。リストｓａｍｐｌｅＳｉｚｅの各項目の値を、３２ビット整数としてｍｐ４ファイルに書き込む。ｍｐ４ファイルのファイル位置を、量「ｍｐ４ＦｉｌｅＰｏｓ」に割り当て、ファイル位置を、量「ｎｕｍＥｎｔｒｉｅｓＰｏｓ」によって指定される値に変更し、量「ｎｕｍＭｅｄｉａＳａｍｐｌｅｓ」の値を３２ビット整数としてｍｐ４ファイルに書き込み、ファイル位置を、量「ｍｐ４ＦｉｌｅＰｏｓ」によって指定される値に復元する。
【０７９０】
量「ｓｔｒｅａｍＴｙｐｅ」の値が「１」でも「３」でもなく、量「ｓｉｚｅＦｏｒＡｌｌ」の値が正であり、量「ｎｕｍＳａｍｐｌｅｓ」の値が０である場合に、量「ｎｕｍＳａｍｐｌｅｓ」の値を、このトラックのメディア・データのサイズを量「ｓｉｚｅＦｏｒＡｌｌ」の値で割ることによって決定する。この事例に、均一のサンプル・サイズを有するいくつかのオーディオ・メディア・データが含まれる。ｍｐ４ファイルのファイル位置を、量「ｍｐ４ＦｉｌｅＰｏｓ」に割り当て、ファイル位置を、量「ｎｕｍＥｎｔｒｉｅｓＰｏｓ」によって指定される値に変更し、量「ｎｕｍＳａｍｐｌｅｓ」の値を３２ビット整数としてｍｐ４ファイルに書き込み、ファイル位置を、量「ｍｐ４ＦｉｌｅＰｏｓ」によって指定される値に復元する。
【０７９１】
量「ｓｔｒｅａｍＴｙｐｅ」の値が、「１」でも「３」でもなく、量「ｓｉｚｅＦｏｒＡｌｌ」の値が、０であり、量「ｎｕｍＳａｍｐｌｅｓ」の値が正である場合に、量「ｓｉｚｅＦｏｒＡｌｌ」の値を、このトラックのメディア・データのサイズを量「ｎｕｍＳａｍｐｌｅｓ」の値で割ることによって決定する。この事例に、単一のイメージを表すメディア・データなど、均一なサンプル・サイズおよび通常は「１」である既知のサンプル・カウントを有するあるメディア・データが含まれる。ｍｐ４ファイルのファイル位置を、量「ｍｐ４ＦｉｌｅＰｏｓ」に割り当て、ファイル位置を、量「ｓｉｚｅＦｏｒＡｌｌＰｏｓ」によって指定される値に変更し、量「ｓｉｚｅＦｏｒＡｌｌ」の値を３２ビット整数としてｍｐ４ファイルに書き込み、ファイル位置を、量「ｍｐ４ＦｉｌｅＰｏｓ」によって指定される値に復元する。
【０７９２】
どの場合でも、「ｓｔｓｚ」要素２６６８の処理は、図１０３（動作５０６０から５０９５）に示されているように、ｓｔｓｚアトム９７０のアトム・サイズの値を更新することによって完了する。
【０７９３】
７．２．４．１１  ｓｔｓｓ要素の処理
「ｓｔｓｓ」要素２６７２が存在する場合に、この要素に「ｓｙｎｃ  ｓａｍｐｌｅ  ｔａｂｌｅ」が含まれる。このテーブルは、ＭＰＥＧ−４ビデオ・ストリームなどの、あるタイプのメディア・データ・ストリームに必要である。「ｓｔｂｌ」要素２６５２に、必要な場合に限って、従属する「ｓｔｓｓ」要素２６７２が含まれる。標準ＸＭＬ手段を使用して、従属する「ｓｔｓｓ」要素２６７２が「ｓｔｂｌ」要素２６５２内に存在するかどうかを判定する。
【０７９４】
従属する「ｓｔｓｓ」要素２６７２が存在する場合に、標準ＸＭＬ手段を使用して、この要素を入手する。図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｓｔｓｓ」を有するアトム９７４を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｓｔｓｓ」を出力ｍｐ４ファイルに書き込む。
【０７９５】
「ｓｔｓｓ」要素２６７２は、属性「ｖｅｒｓｉｏｎ」、「ｆｌａｇｓ」、および「ｎｕｍＥｎｔｒｉｅｓ」を有する。動作５０３０で、これらの属性のそれぞれの値を、同一の名前の量に割り当てる。動作５０４０で、量「ｖｅｒｓｉｏｎ」の値を、８ビット整数としてｍｐ４ファイルに書き込み、量「ｆｌａｇｓ」の値を、２４ビット整数としてｍｐ４ファイルに書き込む。
【０７９６】
ｍｐ４ファイルのファイル位置を、量「ｎｕｍＥｎｔｒｉｅｓＰｏｓ」に割り当て、３２ビットの０の値をｍｐ４ファイルに書き込む。
【０７９７】
図１０７に示された手段を使用して、出力ｍｐ４ファイル内でｓｙｎｃ  ｓａｍｐｌｅ  ｔａｂｌｅを構成する。この手順によれば、動作５４００で、リスト「ＭｅｄｉａＳａｍｐｌｅｓ」の項目「ｔｒａｋＮｕｍ」に量「ｉＭｅｄｉａＳａｍｐｌｅｓ」の値を割り当てる。この量は、現在のｔｒａｋアトム７９０および９００に関連するメディア・データ・ストリームを表すサンプル（または「アクセス単位」）の個数を示す。この量の値は、リスト「ｓｙｎｃＳａｍｐｌｅ」の項目数の上限も提供する。リスト「ｉＳｙｎＳａｍｐｌｅ」は、サンプル・インデックス番号の単調増加する組からなり、メディア・データ・ストリームの最初のサンプルが、サンプル・インデックス値「１」によって表される。このリストの項目数がｉＭｅｄｉａＳａｍｐｌｅｓの値未満である場合に、ストリームの最後のサンプル・インデックス値に、値０を有する項目が続く。
【０７９８】
動作５４１０で、値０を量「ｉＳｙｎｃＳａｍｐｌｅ」および「ｎｕｍＳｙｎｃＳａｍｐｌｅｓ」の値に割り当てる。
【０７９９】
動作５４２０で、ｎｕｍＳｙｎｃＳａｍｐｌｅｓの値をｉＭｅｄｉａＳａｍｐｌｅｓの値と比較する。
【０８００】
量「ｎｕｍＳｙｎｃＳａｍｐｌｅｓ」の値が量「ｉＭｅｄｉａＳａｍｐｌｅｓ」の値未満でない場合に、この処理は、動作５４３０で完了する。
【０８０１】
そうでない場合すなわち、量「ｎｕｍＳｙｎｃＳａｍｐｌｅｓ」の値が量「ｉＭｅｄｉａＳａｍｐｌｅｓ」の値未満である場合に、動作５４４０で、量「ｉＳｙｎｃＳａｍｐｌｅ」の値を量「ｐｒｅｖｉｏｕｓＳａｍｐｌｅ」の値に割り当てる。動作５４５０で、項目「ｎｕｍＳｙｎｃＳａｍｐｌｅｓ」の値を量「ｉＳｙｎｃＳａｍｐｌｅ」に割り当て、動作５４６０で、量「ｉＳｙｎｃＳａｍｐｌｅ」の結果の値を量「ｉＳｙｎｃＳａｍｐｌｅ」の値と比較する。
【０８０２】
量「ｉＳｙｎｃＳａｍｐｌｅ」の値が量「ｉＳｙｎｃＳａｍｐｌｅ」の値を超えない場合に、この処理は、動作５４７０で完了する。そうではなく、量「ｉＳｙｎｃＳａｍｐｌｅ」の値が量「ｉＳｙｎｃＳａｍｐｌｅ」の値を超える場合に、動作５４８０で、量「ｉＳｙｎｃＳａｍｐｌｅ」の値を３２ビット整数として出力ｍｐ４ファイルに書き込む。動作５４９０で、量「ｎｕｍＳｙｎｃＳａｍｐｌｅｓ」の値を１つ増分し、動作５４２０での量「ｎｕｍＳｙｎｃＳａｍｐｌｅｓ」の値と量「ｉＭｅｄｉａＳａｍｐｌｅｓ」の値の比較を繰り返す。
【０８０３】
図１０７に示された手順を完了した後に、動作５０６０で、ｍｐ４ファイルのファイル位置を量「ｅｎｄＰｏｓ」に割り当てる。ｍｐ４ファイルのファイル位置を、量「ｎｕｍＥｎｔｒｉｅｓＰｏｓ」によって指定される値に変更し、量「ｎｕｍＳｙｎｃＳａｍｐｌｅｓ」の値を、３２ビット整数としてｍｐ４ファイルに書き込む。次に、ｓｔｓｓアトム９７４のアトム・サイズの値を、図１０３（動作５０７０から５０９５）に示されているように更新する。
【０８０４】
７．２．４．１２  ｓｔｓｄ要素の処理
標準ＸＭＬ手段を使用して、図６９に示された「ｓｔｂｌ」要素２６５２に従属する単一の「ｓｔｓｄ」要素２６７６を入手する。図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｓｔｓｄ」を有するアトム９７８を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｓｔｓｄ」を出力ｍｐ４ファイルに書き込む。
【０８０５】
「ｓｔｓｄ」要素２６７６は、属性「ｖｅｒｓｉｏｎ」および「ｆｌａｇｓ」を有する。動作５０３０で、これらの属性のそれぞれの値を、同一の名前の量に割り当てる。動作５０４０で、量「ｖｅｒｓｉｏｎ」の値を、８ビット整数としてｍｐ４ファイルに書き込み、量「ｆｌａｇｓ」の値を、２４ビット整数としてｍｐ４ファイルに書き込む。
【０８０６】
ｍｐ４ファイルのファイル位置を、量「ｎｕｍＥｎｔｒｉｅｓＰｏｓ」に割り当て、３２ビットの０の値をｍｐ４ファイルに書き込み、値０を、量「ｎｕｍＥｎｔｒｉｅｓ」に割り当てる。量「ｓｉｚｅＰｏｓ」の値を、量「ｓｔｓｄＳｉｚｅＰｏｓ」に割り当てる。
【０８０７】
動作５０５０で、標準ＸＭＬ手段を使用して、「ｓｔｓｄ」要素２６７６に従属するすべての要素を入手する。そのような従属要素の組は、型「ｍｐ４ｓ」、「ｍｐ４ａ」、または「ｍｐ４ｖ」の単一の要素からなると期待される。これらの要素型を、図６９に示されているように、集合的に「ｍｐ４＊」２６８０と記述する。これらの従属要素のそれぞれは、「サンプル記述テーブル」の１項目を表し、量「ｎｕｍＥｎｔｒｉｅｓ」の値を、そのような従属要素ごとに１つ増分する。
【０８０８】
要素のこれらの型（「ｍｐ４ｓ」、「ｍｐ４ａ」、または「ｍｐ４ｖ」）のそれぞれが、「ｄａｔａＲｅｆＩｎｄｅｘ」という名前の単一の属性を有する。
【０８０９】
型「ｍｐ４ｓ」の従属要素ごとに、図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｍｐ４ｓ」を有するアトム９８２を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当て、量「ｓｉｚｅＰｏｓ」の値を、量「ｍｐ４ｘＳｉｚｅＰｏｓ」に割り当てる。５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｍｐ４ｓ」を出力ｍｐ４ファイルに書き込む。
【０８１０】
値０を、量「ｄａｔａＲｅｆＩｎｄｅｘ」に割り当てる。動作５０３０で、ｍｐ４ｓ要素の「ｄａｔａＲｅｆＩｎｄｅｘ」属性の値が指定されている場合に、この属性の値を量「ｄａｔａＲｅｆＩｎｄｅｘ」に割り当てる。動作５０４０で、次の値をｍｐ４ファイルに書き込む。
１．値０の６つのバイト
２．量「ｄａｔａＲｅｆＩｎｄｅｘ」の値を表す１６ビット整数
【０８１１】
型「ｍｐ４ａ」の従属要素ごとに、図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｍｐ４ａ」を有するアトム９８２を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当て、量「ｓｉｚｅＰｏｓ」の値を、量「ｍｐ４ｘＳｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｍｐ４ａ」を出力ｍｐ４ファイルに書き込む。
【０８１２】
値０を、量「ｄａｔａＲｅｆＩｎｄｅｘ」に割り当てる。動作５０３０で、ｍｐ４ａ要素の「ｄａｔａＲｅｆＩｎｄｅｘ」属性の値が指定されている場合に、この属性の値を量「ｄａｔａＲｅｆＩｎｄｅｘ」に割り当てる。動作５０４０で、次の値をｍｐ４ファイルに書き込む。
１．値０の６つのバイト
２．量「ｄａｔａＲｅｆＩｎｄｅｘ」の値を表す１６ビット整数
３．値０の２つの３２ビット整数
４．値「２」を表す１６ビット整数
５．値「１６」を表す１６ビット整数
６．値０を有する３２ビット整数
７．「ｍｄｉａ」要素２６０４の対応する属性から得られた量「ｔｉｍｅＳｃａｌｅ」の値を表す１６ビット整数
８．値０を有する１６ビット整数
【０８１３】
型「ｍｐ４ｖ」の従属要素ごとに、図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｍｐ４ｖ」を有するアトム９８２を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当て、量「ｓｉｚｅＰｏｓ」の値を、量「ｍｐ４ｘＳｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｍｐ４ｖ」を出力ｍｐ４ファイルに書き込む。
【０８１４】
値０を、量「ｄａｔａＲｅｆＩｎｄｅｘ」に割り当てる。動作５０３０で、ｍｐ４ｖ要素の「ｄａｔａＲｅｆＩｎｄｅｘ」属性の値が指定されている場合に、この属性の値を量「ｄａｔａＲｅｆＩｎｄｅｘ」に割り当てる。動作５０４０で、次の値をｍｐ４ファイルに書き込む。
１．値０の６つのバイト
２．量「ｄａｔａＲｅｆＩｎｄｅｘ」の値を表す１６ビット整数
３．値０を有する４つの３２ビット整数
４．値「３２０」を有する１６ビット整数
５．値「２４０」を有する１６ビット整数
６．値「７２」を有する１６ビット整数
７．値０を有する１６ビット整数
８．値「７２」を有する１６ビット整数
９．値０を有する１６ビット整数
１０．値０を有する３２ビット整数
１１．値「１」を有する１６ビット整数
１２．値０を有する３２ビット整数
１３．値「２４」を有する１６ビット整数
１４．値「−１」を有する１６ビット整数
【０８１５】
型「ｍｐ４ｓ」、「ｍｐ４ａ」、または「ｍｐ４ｖ」２６８０の各要素は、図６９に示されているように、型「ｅｓｄｓ」の単一の従属する要素２６８４を有すると期待される。型「ｅｓｄｓ」の従属要素ごとに、図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｅｓｄｓ」を有するアトム９８６を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当て、量「ｓｉｚｅＰｏｓ」の値を、量「ｅｓｄｓＳｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｅｓｄｓ」を出力ｍｐ４ファイルに書き込む。
【０８１６】
型「ｅｓｄｓ」の要素は、属性「ｖｅｒｓｉｏｎ」および「ｆｌａｇｓ」を有する。動作５０３０で、これらの属性のそれぞれの値を、同一の名前の量に割り当てる。動作５０４０で、量「ｖｅｒｓｉｏｎ」の値を、８ビット整数としてｍｐ４ファイルに書き込み、量「ｆｌａｇｓ」の値を、２４ビット整数としてｍｐ４ファイルに書き込む。
【０８１７】
型「ｅｓｄｓ」の各要素は、図６９に示されているように、型「ＥＳ＿Ｄｅｓｃｒ」の単一の従属する要素２６８８を有すると期待される。この従属「ＥＳ＿Ｄｅｓｃｒ」要素を、下で説明する手段を使用して、動作５０５０で処理する。
【０８１８】
「ｅｓｄｓ」要素２６８４に従属する「ＥＳ＿Ｄｅｓｃｒ」要素２６８８の処理を完了した後に、動作５０６０で、ｍｐ４ファイルのファイル位置を量「ｅｎｄＰｏｓ」に割り当てる。量「ｅｓｄｓＳｉｚｅＰｏｓ」の値を、量「ｓｉｚｅＰｏｓ」に割り当て、ｅｓｄｓアトム９８６のアトム・サイズ値を、図１０３（動作５０７０から５０９５）に示されているように更新する。
【０８１９】
量「ｍｐ４ｘＳｉｚｅＰｏｓ」の値を、量「ｓｉｚｅＰｏｓ」に割り当て、「ｍｐ４ｓ」、「ｍｐ４ａ」、または「ｍｐ４ｖ」のアトム・サイズの値を、図１０３（動作５０７０から５０９５）に示されているように更新する。
【０８２０】
ｍｐ４ファイルのファイル位置を、量「ｎｕｍＥｎｔｒｉｅｓＰｏｓ」によって指定される値に変更し、量「ｎｕｍＥｎｔｒｉｅｓ」の値を、３２ビット整数としてｍｐ４ファイルに書き込む。量「ｓｔｓｄＳｉｚｅＰｏｓ」の値を、「ｓｉｚｅＰｏｓ」に割り当てる。ｓｔｓｄアトム９７８のアトム・サイズの値を、図１０３（動作５０７０から５０９５）に示されているように更新する。
【０８２１】
７．２．４．１３  ＥＳ＿Ｄｅｓｃｒ要素の処理
「ｅｓｄｓ」要素２６８４に従属する「ＥＳ＿Ｄｅｓｃｒ」要素２６８８および２７００ごとに、図１０４に示された手順を使用して、出力ｍｐ４ファイル内でＥＳ＿Ｄｅｓｃｒ構造９９０および１０００を作成する。動作５１００で、構造タグ「ＥＳ＿ＤｅｓｃｒＴａｇ」（値＝３）１００４を８ビット整数として出力ｍｐ４ファイルに書き込む。動作５１１０で、出力ｍｐ４ファイルの現在のファイル位置を量「ｓｉｚｅＰｏｓ」に割り当て、「ｓｉｚｅＰｏｓ」の値を量「ｆｉｌｅＰｏｓ１」に割り当てる。動作５１２０で、値「１」を、量「ｎｕｍＳｉｚｅＢｙｔｅｓ」に割り当てる。動作５１３０で、値０を、予備的なサイズ値１００８として出力ｍｐ４ファイルに書き込む。
【０８２２】
次の属性が、「ＥＳ＿Ｄｅｓｃｒ」要素について定義されている：「ＥＳ＿ＩＤ」および「ｐｒｉｏｒｉｔｙ」。０の値を、「ＥＳ＿ＩＤ」および「ｐｒｉｏｒｉｔｙ」という名前の量に割り当てる。どちらかの属性について値が指定されている場合には、動作５１３５で、指定された値を、同一の名前の量に割り当てる。
【０８２３】
動作５１４０で、次の値をｍｐ４ファイルに書き込む。
１．量「ＥＳ＿ＩＤ」の値を表す１６ビット整数
２．値０を有する３ビット整数
３．量「ｐｒｉｏｒｉｔｙ」の値を表す５ビット整数
【０８２４】
次に、標準ＸＭＬ手段を使用して、「ＥＳ＿Ｄｅｓｃｒ」要素２６８８および２７００に従属する各ＸＭＬ要素を入手する。これらの従属要素は、図７０に示されているように、「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」という名前の１つの要素２７１０と、「ＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」という名前の１つの要素２７６０を含むと期待される。
【０８２５】
「ＥＳ＿Ｄｅｓｃｒ」要素２７００に従属する「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０ごとに、図１０４に示された手順を使用して、出力ｍｐ４ファイル内でＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒオブジェクト構造１０２４および１０３２を作成する。動作５１００で、構造タグ「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒＴａｇ」（値＝４）１０３６を８ビット整数として出力ｍｐ４ファイルに書き込む。動作５１１０で、出力ｍｐ４ファイルの現在のファイル位置を量「ｓｉｚｅＰｏｓ」に割り当て、「ｓｉｚｅＰｏｓ」の値を量「ｆｉｌｅＰｏｓ２」に割り当てる。動作５１２０で、値「１」を、量「ｎｕｍＳｉｚｅＢｙｔｅｓ」に割り当てる。動作５１３０で、値０を、予備的なサイズ値１０４０として出力ｍｐ４ファイルに書き込む。
【０８２６】
次の属性が、「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０について定義されている：「ｏｂｊｅｃｔＴｙｐｅ」、「ｓｔｒｅａｍＴｙｐｅ」、「ｕｐｓｔｒｅａｍ」、「ｍａｘＢｉｔｒａｔｅ」、および「ａｖｇＢｉｔｒａｔｅ」。これらの属性のいずれかについて値が指定されている場合に、動作５１３５で、各指定された値を同一の名前の量に割り当てる。
【０８２７】
量「ｂｕｆｆｅｒＳｉｚｅ」の値を、対応するメディア・データ・ストリーム内の最大のサンプルのサイズによって決定する。量「ｓｔｒｅａｍＴｙｐｅ」の値が「１」である場合に、リスト「ＯｄｓｍＳａｍｐｌｅＳｉｚｅ」の最大の項目の値を、量「ｂｕｆｆｅｒＳｉｚｅ」に割り当てる。量「ｓｔｒｅａｍＴｙｐｅ」の値が「３」である場合に、リスト「ＳｄｓｍＳａｍｐｌｅＳｉｚｅ」の最大の項目の値を、量「ｂｕｆｆｅｒＳｉｚｅ」に割り当てる。量「ｓｔｒｅａｍＴｙｐｅ」の値が「４」であり、量「ｏｂｊｅｃｔＴｙｐｅ」の値が「３２」であるか、量「ｓｔｒｅａｍＴｙｐｅ」の値が「５」であり、量「ｏｂｊｅｃｔＴｙｐｅ」の値が「６４」であるか、量「ｓｔｒｅａｍＴｙｐｅ」の値が「５」であり、量「ｏｂｊｅｃｔＴｙｐｅ」の値が「１０７」である場合に、リスト「ｓａｍｐｌｅＳｉｚｅ」の最大の項目の値を、量「ｂｕｆｆｅｒＳｉｚｅ」に割り当てる。量「ｓｔｒｅａｍＴｙｐｅ」の値が「５」であり、量「ｏｂｊｅｃｔＴｙｐｅ」の値が「１９３」である場合に、値「２４００」を、量「ｂｕｆｆｅｒＳｉｚｅ」に割り当てる。そうでない場合に、メディア・データの値は、リストｍｅｄｉａＤａｔａＳｉｚｅの項目のうちで、リストｔｒａｃｋＩｄＦｏｒＣｈｕｎｋの対応する項目が現在のトラックの量「ｔｒａｃｋＩｄ」の値と一致するものの合計によって決定される。
【０８２８】
次に、動作５１４０で、次の値をｍｐ４ファイルに書き込む。
１．量「ｏｂｊｅｃｔＴｙｐｅ」１０４４の整数値を表す１バイト
２．量「ｓｔｒｅａｍＴｙｐｅ」１０４８の整数値を表す６バイト
３．量「ｕｐＳｔｒｅａｍ」１０５２のｂｏｏｌｅａｎ値を表す１ビット（「真」の場合に「１」、そうでない場合に「０」）
４．値「１」を有する（「予約済み」としての）１ビット１０５６
５．量「ｂｕｆｆｅｒＳｉｚｅ」１０６０（「ｂｕｆｆｅｒＳｉｚｅＤＢ」としての）の整数値を表す３バイト
６．量「ｍａｘＢｉｔｒａｔｅ」１０６４の値を表す３２ビット整数
７．量「ａｖｇＢｉｔｒａｔｅ」１０６８の値を表す３２ビット整数
【０８２９】
次に、標準ＸＭＬ手段を使用して、「ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７１０に従属するすべての要素を入手する。これには、図７０に示されているように次の型の要素の１つが含まれる可能性がある：「ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」２７２０、「ＪＰＥＧ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」２７３０、「ＶｉｓｕａｌＣｏｎｆｉｇ」２７４０、または「ＡｕｄｉｏＣｏｎｆｉｇ」２７５０。これらの従属要素のいずれか１つが見つかった場合に、図１０４に示された手順を使用して、出力ｍｐ４ファイル内でＤｅｃｏｄｅｒＳｐｅｃｉｆｉｃＩｎｆｏオブジェクト構造１０７２および１０７６を作成する。動作５１００で、構造タグ「ＤｅｃｏｄｅｒＳｐｅｃｉｆｉｃＩｎｆｏＴａｇ」（値＝５）１０８０を８ビット整数として出力ｍｐ４ファイルに書き込む。動作５１１０で、出力ｍｐ４ファイルの現在のファイル位置を量「ｓｉｚｅＰｏｓ」に割り当てる。動作５１２０で、値「１」を、量「ｎｕｍＳｉｚｅＢｙｔｅｓ」に割り当てる。動作５１３０で、値０を、予備的なサイズ値１０８４として出力ｍｐ４ファイルに書き込む。
【０８３０】
デコーダ固有情報要素の各型のプロパティを、下で説明する。動作５１５０で、これらのプロパティを処理した後に、ＤｅｃｏｄｅｒＳｐｅｃｉｆｉｃＩｎｆｏオブジェクト構造１０７６のサイズ値（ｎｕｍＢｙｔｅｓ）１０８４を、図１０４（動作５１６０から５１９５）に示されているように更新する。次に、量「ｆｉｌｅＰｏｓ２」の値を量「ｓｉｚｅＰｏｓ」に割り当て、ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒオブジェクト構造１０３２のサイズ値（ｎｕｍＢｙｔｅｓ）１０４０を、図１０４（動作５１６０から５１９５）に示されているように更新する。
【０８３１】
「ＥＳ＿Ｄｅｓｃｒ」要素２７００に従属する「ＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７６０ごとに、次の手順を使用して、出力ｍｐ４ファイル内でＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒオブジェクト構造１０２８および１０８８を作成する。次の属性が、「ＳＬＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒ」要素２７６０について定義されている：「ｐｒｅｄｅｆｉｎｅｄ」。属性「ｐｒｅｄｅｆｉｎｅｄ」の値が指定されている場合に、この属性の値を、量「ｐｒｅｄｅｆｉｎｅｄ」に割り当てる。そうでない場合に、値「２」を、量「ｐｒｅｄｅｆｉｎｅｄ」に割り当てる。
【０８３２】
次の値を、ｍｐ４ファイルに書き込む。
１．「ＳＬＣｏｎｆｉｇＤｅｓｃｒＴａｇ」（値＝６）１０９０の値を有する１バイト
２．値「１」（ｎｕｍＢｙｔｅｓ）１０９４を有する１バイト
３．量「ｐｒｅｄｅｆｉｎｅｄ」１０９８の値を表す１バイト
【０８３３】
これらの従属要素のそれぞれを処理した後に、量「ｆｉｌｅＰｏｓ１」の値を、量「ｓｉｚｅＰｏｓ」に割り当て、ＥＳ＿Ｄｅｓｃｒ構造１０００のサイズ値（ｎｕｍＢｙｔｅｓ）１００８を、図１０４（動作５１６０から５１９５）に示されているように更新する。
【０８３４】
７．２．４．１４  ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素の処理
「ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」要素２７２０は、量「ｏｂｊｅｃｔＴｙｐｅ」の値に応じて、「ｖｅｒｓｉｏｎ  １」プロパティまたは「ｖｅｒｓｉｏｎ  ２」プロパティを有することができる。量「ｏｂｊｅｃｔＴｙｐｅ」の値が「２」でない場合に、次の属性が、「ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」要素（ｖｅｒｓｉｏｎ  １）について定義される：「ｎｏｄｅＩｄＢｉｔｓ」、「ｒｏｕｔｅＩｄＢｉｔｓ」、「ｐｉｘｅｌＭｅｔｒｉｃ」、「ｐｉｘｅｌＷｉｄｔｈ」、および「ｐｉｘｅｌＨｅｉｇｈｔ」。
【０８３５】
動作５１３５で、これらの属性のそれぞれについて指定された値を、同一の名前の量に割り当てる。次に、動作５１４０で、次の値をｍｐ４ファイルに書き込む。
１．量「ｎｏｄｅＩｄＢｉｔｓ」の整数値を表す５ビット
２．量「ｒｏｕｔｅＩｄＢｉｔｓ」の整数値を表す５ビット
３．値「１」を有する１ビット
４．量「ｐｉｘｅｌＭｅｔｒｉｃ」のｂｏｏｌｅａｎ値によって決定される１ビット（「真」の場合に「１」、そうでない場合に「０」）
５．値「１」を有する１ビット
６．量「ｐｉｘｅｌＷｉｄｔｈ」の整数値を有する１６ビット整数
７．量「ｐｉｘｅｌＨｅｉｇｈｔ」の整数値を有する１６ビット整数
８．値０を有する３ビット
【０８３６】
量「ｏｂｊｅｃｔＴｙｐｅ」の値が「２」である場合に、次の属性が「ＢＩＦＳ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」要素（ｖｅｒｓｉｏｎ  ２）について定義される。「ｎｏｄｅＩｄＢｉｔｓ」、「ｒｏｕｔｅＩｄＢｉｔｓ」、「ｐｒｏｔｏＩｄＢｉｔｓ」、「ｕｓｅ３ＤＭｅｓｈＣｏｄｉｎｇ」、「ｕｓｅＰｒｅｄｉｃｔｉｖｅＭＦＦｉｅｌｄ」、「ｐｉｘｅｌＭｅｔｒｉｃ」、「ｐｉｘｅｌＷｉｄｔｈ」、および「ｐｉｘｅｌＨｅｉｇｈｔ」。
【０８３７】
動作５１３５で、これらの属性のそれぞれについて指定された値を、同一の名前の量に割り当てる。次に、動作５１４０で、次の値をｍｐ４ファイルに書き込む。
１．量「ｕｓｅ３ＤＭｅｓｈＣｏｄｉｎｇ」のｂｏｏｌｅａｎ値によって決定される１ビット（「真」の場合に「１」、そうでない場合に「０」）
２．量「ｕｓｅＰｒｅｄｉｃｔｉｖｅＭＦＦｉｅｌｄ」のｂｏｏｌｅａｎ値によって決定される１ビット（「真」の場合に「１」、そうでない場合に「０」）
３．量「ｎｏｄｅＩｄＢｉｔｓ」の整数値を表す５ビット
４．量「ｒｏｕｔｅＩｄＢｉｔｓ」の整数値を表す５ビット
５．量「ｐｒｏｔｏＩｄＢｉｔｓ」の整数値を表す５ビット
６．値「１」を有する１ビット
７．量「ｐｉｘｅｌＭｅｔｒｉｃ」のｂｏｏｌｅａｎ値によって決定される１ビット（「真」の場合に「１」、そうでない場合に「０」）
８．値「１」を有する１ビット
９．量「ｐｉｘｅｌＷｉｄｔｈ」の整数値を有する１６ビット整数
１０．量「ｐｉｘｅｌＨｅｉｇｈｔ」の整数値を有する１６ビット整数
１１．値０を有する４ビット
【０８３８】
７．２．４．１５  ＪＰＥＧ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ要素の処理
次の属性が、「ＪＰＥＧ＿ＤｅｃｏｄｅｒＣｏｎｆｉｇ」要素について定義されている：「ｈｅａｄｅｒＬｅｎｇｔｈ」、「Ｘｄｅｎｓｉｔｙ」、および「Ｙｄｅｎｓｉｔｙ」。
【０８３９】
同一の名前の量に、０、１、および１のデフォルト値を割り当てる。動作５１３５で、これらの属性のそれぞれについて指定された値を、同一の名前の量に割り当てる。
【０８４０】
「１」または「３」の値を、このトラックに関連するメディア・データの内容に基づいて、量「ｎｕｍＣｏｍｐｏｎｅｎｔｓ」に割り当てる。動作５１３５で、関連するメディア・データがグレイスケール・イメージを表す場合に、値「１」を量「ｎｕｍＣｏｍｐｏｎｅｎｔｓ」に割り当て、そうでない場合には、値「３」を量「ｎｕｍＣｏｍｐｏｎｅｎｔｓ」に割り当てる。
【０８４１】
動作５１４０で、次の値をｍｐ４ファイルに書き込む。
１．量「ｈｅａｄｅｒＬｅｎｇｔｈ」の値を表す１６ビット整数
２．量「Ｘｄｅｎｓｉｔｙ」の値を表す１６ビット整数
３．量「Ｙｄｅｎｓｉｔｙ」の値を表す１６ビット整数
４．量「ｎｕｍＣｏｍｐｏｎｅｎｔｓ」の整数値を表す１バイト
【０８４２】
７．２．４．１６  ＶｉｓｕａｌＣｏｎｆｉｇ要素の処理
次の属性が、「ＶｉｓｕａｌＣｏｎｆｉｇ」要素について定義されている：「ｐｒｏｆｉｌｅ＿ａｎｄ＿ｌｅｖｅｌ＿ｉｎｄｉｃａｔｉｏｎ」
【０８４３】
同一の名前の属性に、１のデフォルト値を割り当てる。この属性の値が指定されている場合には、動作５１３５で、指定された値を、同一の名前の量に割り当てる。
【０８４４】
このタイプのデコーダ固有情報のさらなる処理は、このトラックのｍｄａｔアトムが作成された時に対応するメディア・データから抽出された「ｍｅｄｉａＨｅａｄｅｒ」データに依存する。
【０８４５】
メディア・ヘッダ・データが、このトラックについて入手可能である場合に、「ビジュアル・オブジェクト・シーケンス開始コード」（０ｘ０００００１ｂ０）および「ビジュアル・オブジェクト・シーケンス終了コード」（０ｘ０００００１ｂ１）の存在について、メディア・データをテストする。
【０８４６】
メディア・ヘッダ・データが、このトラックについて入手可能であるが、メディア・データに、「ビジュアル・オブジェクト・シーケンス開始コード」が含まれない場合、またはメディア・ヘッダ・データが、このトラックについて入手可能でない場合に、動作５１４０で、次の値をｍｐ４ファイルに書き込む。
１．値０ｘ０００００１ｂ０（ビジュアル・オブジェクト・シーケンス開始コード）を有する３２ビット整数
２．量「ｐｒｏｆｉｌｅ＿ａｎｄ＿ｌｅｖｅｌ＿ｉｎｄｉｃａｔｉｏｎ」の値を表す１バイト
３．値０ｘ０００００１ｂ５（ビジュアル・オブジェクト開始コード）を表す３２ビット整数
４．  値「９」を有する１バイト
【０８４７】
メディア・ヘッダ・データが、このトラックについて入手可能でない場合に、動作５１４０で、次の値をｍｐ４ファイルに書き込む。
５．値０ｘ０００００１００（ビジュアル・オブジェクト開始コード）を有する３２ビット整数
【０８４８】
メディア・ヘッダ・データが、このトラックについて入手可能であり、メディア・ヘッダ・データの最後の４バイトが、「ビジュアル・オブジェクト・シーン終了コード」でない場合に、動作５１４０で、メディア・ヘッダ・データの残りをｍｐ４ファイルにコピーする。
【０８４９】
メディア・ヘッダ・データが、このトラックについて入手可能であり、メディア・ヘッダ・データの最後の４バイトが、「ビジュアル・オブジェクト・シーケンス終了コード」からなる場合に、動作５１４０で、最後の４バイトを除くメディア・ヘッダ・データの残りを、ｍｐ４ファイルにコピーする。
【０８５０】
７．２．４．１７  ＡｕｄｉｏＣｏｎｆｉｇ要素の処理
動作５１３５で、「ＡｕｄｉｏＣｏｎｆｉｇ」要素の属性は指定されない。ｍｐ４ファイルに書き込まれるすべてのデータ値は、このトラックのメディア・データから導出されたメディア・ヘッダ・データから導出される。
【０８５１】
メディア・ヘッダ・データの第１バイトを、量「ａｕｄｉｏＯｂｊｅｃｔＴｙｐｅ」に割り当てる。メディア・ヘッダ・データの第２バイトを、量「ｓａｍｐｌｅＲａｔｅＩｎｄｅｘ」に割り当てる。メディア・ヘッダ・データの第３バイトを、量「ｃｈａｎｎｅｌＣｏｎｆｉｇ」に割り当てる。動作５１４０で、次の値をｍｐ４ファイルに書き込む。
１．量「ａｕｄｉｏＯｂｊｅｃｔＴｙｐｅ」の整数値を表す５ビット
２．量「ｓａｍｐｌｅＲａｔｅＩｎｄｅｘ」の整数値を表す４ビット
３．量「ｃｈａｎｎｅｌＣｏｎｆｉｇ」の整数値を表す４ビット
４．値０を有する３ビット
【０８５２】
量「ｃｈａｎｎｅｌＣｏｎｆｉｇ」の値が０である場合に、「プログラム構成要素」（ＰＣＥ）を、デコーダ固有情報に追加する。ＰＣＥの構造は、オーディオ・データのエンコードに関してＭＰＥＧ−４仕様で定義されている。ＰＣＥを作成するのに必要なデータは、メディア・ヘッダ・データ配列に含まれる。このデータは、対応するｍｄａｔアトムが作成された時にこの配列に保管されたデータである。
【０８５３】
７．２．４．１８  メディア・ヘッダ要素の処理
標準ＸＭＬ手段を使用して、図６８に示された「ｍｄｉａ」要素２６０４に従属する単一のメディア・ヘッダ（「＊ｍｈｄ」）要素２６３２を入手する。メディア・ヘッダ要素２６３２は、「ｎｍｈｄ」要素（ｓｄｓｍまたはｏｄｓｍ）、「ｓｍｈｄ」要素（オーディオ・ストリーム）、または「ｖｍｈｄ」要素（ビデオ・ストリーム）である可能性がある。
【０８５４】
メディア・ヘッダ要素２６３２が「ｎｍｈｄ」要素である場合に、図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｎｍｈｄ」を有するアトム９３６を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｎｍｈｄ」を出力ｍｐ４ファイルに書き込む。
【０８５５】
「ｎｍｈｄ」要素は、属性「ｖｅｒｓｉｏｎ」および「ｆｌａｇｓ」を有する。動作５０３０で、これらの属性のそれぞれの値を、同一の名前の量に割り当てる。
【０８５６】
動作５０４０で、次の量の値を出力ｍｐ４ファイルに書き込む。
１．量「ｖｅｒｓｉｏｎ」の値を表す８ビット整数
２．量「ｆｌａｇｓ」の値を表す２４ビット整数
【０８５７】
メディア・ヘッダ要素２６３２が「ｓｍｈｄ」要素である場合に、図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｓｍｈｄ」を有するアトム９３６を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｓｍｈｄ」を出力ｍｐ４ファイルに書き込む。
【０８５８】
「ｓｍｈｄ」要素は、属性「ｖｅｒｓｉｏｎ」、「ｆｌａｇｓ」、および「ｂａｌａｎｃｅ」を有する。動作５０３０で、これらの属性のそれぞれの値を、同一の名前の量に割り当てる。
【０８５９】
動作５０４０で、次の量の値を出力ｍｐ４ファイルに書き込む。
１．量「ｖｅｒｓｉｏｎ」の値を表す８ビット整数
２．量「ｆｌａｇｓ」の値を表す２４ビット整数
３．量「ｂａｌａｎｃｅ」の値を表す１６ビット整数
４．０の値を有する１６ビット整数。
【０８６０】
メディア・ヘッダ要素２６３２が「ｖｍｈｄ」要素である場合に、図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｖｍｈｄ」を有するアトム９３６を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｖｍｈｄ」を出力ｍｐ４ファイルに書き込む。
【０８６１】
「ｖｍｈｄ」要素は、属性「ｖｅｒｓｉｏｎ」、「ｆｌａｇｓ」、「ｔｒａｎｓｆｅｒＭｏｄｅ」、「ｏｐＣｏｌｏｒＲｅｄ」、「ｏｐＣｏｌｏｒＧｒｅｅｎ、および「ｏｐＣｏｌｏｒＢｌｕｅ」を有する。動作５０３０で、これらの属性のそれぞれの値を、同一の名前の量に割り当てる。
【０８６２】
動作５０４０で、次の量の値を出力ｍｐ４ファイルに書き込む。
１．量「ｖｅｒｓｉｏｎ」の値を表す８ビット整数
２．量「ｆｌａｇｓ」の値を表す２４ビット整数
３．量「ｔｒａｎｓｆｅｒＭｏｄｅ」の値を表す１６ビット整数
４．量「ｏｐＣｏｌｏｒＲｅｄ」の値を表す１６ビット整数
５．量「ｏｐＣｏｌｏｒＧｒｅｅｎ」の値を表す１６ビット整数
６．量「ｏｐＣｏｌｏｒＢｌｕｅ」の値を表す１６ビット整数
【０８６３】
動作５０５０で、メディア・ヘッダ要素２６３２は、従属要素を有しない。メディア・ヘッダ・アトムのプロパティ値を書き込んだ後に、メディア・ヘッダ・アトム９３６のアトム・サイズの値を、図１０３（動作５０６０から５０９５）に示されているように更新する。
【０８６４】
７．２．４．１９  ｔｒｅｆ要素の処理
標準ＸＭＬ手段を使用して、図６８に示された「ｔｒａｋ」要素２６００におそらく従属する単一の「ｔｒｅｆ」要素２６３６を入手する。図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｔｒｅｆ」を有するアトム９４０を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｔｒｅｆ」を出力ｍｐ４ファイルに書き込む。「ｓｉｚｅＰｏｓ」の値を、量「ｔｒｅｆＳｉｚｅＰｏｓ」に割り当てる。
【０８６５】
動作５０３０および５０４０で、「ｔｒｅｆ」要素は属性を有しない。
【０８６６】
標準ＸＭＬ手段を使用して、「ｔｒｅｆ」要素２６３６に従属する各要素を入手する。これには、図６８に示された、「ｍｐｏｄ」要素２６４０が含まれる可能性がある。「ｄｐｎｄ」要素または「ｓｙｎｃ」要素あるいはこの両方を含む他のタイプの要素も、「ｔｒｅｆ」要素２６３６への従属要素として現れる可能性がある。
【０８６７】
「ｔｒｅｆ」要素２６３６に従属する「ｍｐｏｄ」、「ｄｐｎｄ」、または「ｓｙｎｃ」要素２６４０ごとに、図１０３に示された手順を使用して、出力ｍｐ４ファイル内で同一の値のアトムＩＤを有するアトム９４２を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｍｐｏｄ」、「ｄｐｎｄ」、または「ｓｙｎｃ」を出力ｍｐ４ファイルに書き込む。
【０８６８】
各「ｍｐｏｄ」、「ｄｐｎｄ」、または「ｓｙｎｃ」要素は、「ｔｒａｃｋＩＤ」という名前の１つの属性を有する。この属性は、動作５０３０で、ｔｒａｃｋＩＤ値のリストからなる。動作５０４０で、このリストの各ｔｒａｃｋＩＤ値のそれぞれを、３２ビット整数として出力ｍｐ４ファイルに書き込む。また、「ｍｐｏｄ」要素の場合に、各ｔｒａｃｋＩＤ値を、リスト「ＴｒａｃｋＩｄＦｏｒＯｄＩｄ」の項目に割り当てる。
【０８６９】
「ｍｐｏｄ」、「ｄｐｎｄ」、または「ｓｙｎｃ」要素は、動作５０５０で、従属要素を有しない。この要素のｔｒａｃｋＩＤ属性を処理した後に、ｍｐ４ファイルの対応するアトム９４２のアトム・サイズの値を、図１０３（動作５０６０から５０９５）に示されているように更新する。
【０８７０】
「ｔｒｅｆ」要素２６３６に従属するすべての要素２６４０の処理を完了した後に、量「ｔｒｅｆＳｉｚｅＰｏｓ」の値を「ｓｉｚｅＰｏｓ」に割り当て、ｔｒｅｆアトム９４０のアトム・サイズの値を、図１０３（動作５０６０から５０９５）に示されているように更新する。
【０８７１】
７．２．４．２０  ｅｄｔｓ要素の処理
標準ＸＭＬ手段を使用して、図６８に示された「ｔｒａｋ」要素２６００におそらく従属する単一の「ｅｄｔｓ」要素２６４４を入手する。図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｅｄｔｓ」を有するアトム９４５を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｅｄｔｓ」を出力ｍｐ４ファイルに書き込む。「ｓｉｚｅＰｏｓ」の値を量「ｅｄｔｓＳｉｚｅＰｏｓ」に割り当てる。
【０８７２】
「ｅｄｔｓ」要素２６４４は、動作５０３０および５０４０で属性を有しない。
【０８７３】
標準ＸＭＬ手段を使用して、図６８に示された「ｅｄｔｓ」要素２６４４に従属する単一の「ｅｌｓｔ」要素２６４８を入手する。図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｅｌｓｔ」を有するアトム９４８を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｅｌｓｔ」を出力ｍｐ４ファイルに書き込む。
【０８７４】
「ｅｌｓｔ」要素は、属性「ｖｅｒｓｉｏｎ」および「ｆｌａｇｓ」を有する。動作５０３０で、これらの属性のそれぞれの値を、同一の名前の量に割り当てる。
【０８７５】
動作５０４０で、次の量の値を出力ｍｐ４ファイルに書き込む。
１．量「ｖｅｒｓｉｏｎ」の値を表す８ビット整数
２．量「ｆｌａｇｓ」の値を表す２４ビット整数
【０８７６】
次に、標準ＸＭＬ手段を使用して、「ｅｌｓｔ」要素２６４８に従属する各要素を入手する。「ｅｌｓｔ」要素２６４８に従属する要素の組は、２つの「ｓｅｇｍｅｎｔ」要素からなると期待される。各「ｓｅｇｍｅｎｔ」要素は、３つの属性「ｄｕｒａｔｉｏｎ」、「ｓｔａｒｔＴｉｍｅ」、および「ｒａｔｅ」を有する。
【０８７７】
「ｅｌｓｔ」要素２６４８に従属するｓｅｇｍｅｎｔ要素ごとに、次の動作を実行する。
１．属性「ｄｕｒａｔｉｏｎ」、「ｓｔａｒｔＴｉｍｅ」、および「ｒａｔｅ」のそれぞれの値を、同一の名前の量に割り当てる
２．量「ｄｕｒａｔｉｏｎ」の値を、３２ビット整数として出力ｍｐ４ファイルに書き込む
３．量「ｓｔａｒｔＴｉｍｅ」の値を、３２ビット整数として出力ｍｐ４ファイルに書き込む
４．量「ｒａｔｅ」の浮動小数点値に、２５６＊２５６をかけ、整数に変換し、その結果を３２ビット整数としてｍｐ４ファイルに書き込む。
【０８７８】
「ｅｌｓｔ」要素２６４８に従属するすべての「ｓｅｇｍｅｎｔ」要素を処理した後に、ｅｌｓｔアトム９４８のアトム・サイズの値を、図１０３（動作５０６０から５０９５）に示されているように更新する。
【０８７９】
量「ｅｄｔｓＳｉｚｅＰｏｓ」の値を「ｓｉｚｅＰｏｓ」に割り当て、ｅｄｔｓアトム９４５のアトム・サイズの値を、図１０３（動作５０６０から５０９５）に示されているように更新する。
【０８８０】
７．２．５  任意選択のユーザ・データ要素の処理
出力ｍｐ４ファイル２２３０作成の第５ステップは、「ｍｏｏｖ」要素２３２０に含まれるすべての任意選択の「ユーザ・データ」（ｕｄｔａ）要素２３４０の処理からなる。標準ＸＭＬ手段を使用して、図５９に示されたｍｐ４ｆｉｌｅ文書２３００の「ｍｏｏｖ」要素２３２０に従属するすべての「ｕｄｔａ」要素２３４０を入手する。次の手段を使用して、各そのような「ｕｄｔａ」要素を処理する。
【０８８１】
図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｕｄｔａ」を有するアトム７８４を作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｕｄｔａ」を出力ｍｐ４ファイルに書き込む。「ｓｉｚｅＰｏｓ」の値を、量「ｕｄｔａＳｉｚｅＰｏｓ」に割り当てる。
【０８８２】
「ｕｄｔａ」要素は、動作５０３０および５０４０で属性を有しない。
【０８８３】
各「ｕｄｔａ」要素は、ｍｐ４ファイルに著作権メッセージを埋め込むのに使用できる「ｃｐｒｔ」要素などの従属要素を有する場合がある。認識されない従属要素は、すべて無視することができる。
【０８８４】
「ｕｄｔａ」要素が、従属する「ｃｐｒｔ」要素を有することがわかった場合に、図１０３に示された手順を使用して、出力ｍｐ４ファイル内でアトムＩＤ「ｃｐｒｔ」を有するアトムを作成する。動作５０００で、出力ｍｐ４ファイルの現在のファイル位置を、量「ｓｉｚｅＰｏｓ」に割り当てる。動作５０１０で、アトム・サイズ値の代わりに、値０を出力ｍｐ４ファイルに書き込む。動作５０２０で、アトムＩＤ「ｃｐｒｔ」を出力ｍｐ４ファイルに書き込む。
【０８８５】
「ｃｐｒｔ」要素は、「ｖｅｒｓｉｏｎ」、「ｆｌａｇｓ」、および「ｌａｎｇｕａｇｅ」という名前の属性を所有することができる。これらの属性のそれぞれの値を、動作５０３０で同一の名前の量に割り当てる。動作５０４０で、「ｃｐｒｔ」要素は、メッセージを著すテキスト・ストリングを含む従属する「テキスト・ノード」も所有する。
【０８８６】
動作５０４０で、次の量の値を出力ｍｐ４ファイルに書き込む。
１．量「ｖｅｒｓｉｏｎ」の値を表す８ビット整数
２．量「ｆｌａｇｓ」の値を表す２４ビット整数
３．量「ｌａｎｇｕａｇｅ」の値を表す１６ビット整数
４．従属するテキスト・ノードの値を表す文字のシーケンスと、それに続くヌル・バイト
【０８８７】
「ｃｐｒｔ」要素の属性を完了した後に、ｃｐｒｔアトムのアトム・サイズの値を、図１０３（動作５０６０から５０９５）に示されているように更新する。
【０８８８】
「ｕｄｔａ」要素２３４０に従属するすべてのｍｐ４ｆｉｌｅ要素の処理を完了した後に、量「ｕｄｔａＳｉｚｅＰｏｓ」の値を「ｓｉｚｅＰｏｓ」に割り当て、対応するｕｄｔａアトム７８４のアトム・サイズの値を、図１０３（動作５０６０から５０９５）に示されているように更新する。
【０８８９】
７．２．６  ｏｄｓｍバッファ・サイズの更新
出力ｍｐ４ファイル２２３０作成の最後のステップは、ｏｄｓｍバッファ・サイズの更新からなる。
【０８９０】
出力ｍｐ４ファイル２３００に、メディア・ストリームごとのｔｒａｋアトム７９０が含まれる。図２１および２２からわかるように、各ｔｒａｋアトム９００に、ＥＳ＿Ｄｅｓｃｒオブジェクト構造９９０が含まれる。各ＥＳ＿Ｄｅｓｃｒオブジェクト構造９９０および１０００に、ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒオブジェクト構造１０２４および１０３２が含まれる。図２３から２６からわかるように、各ＤｅｃｏｄｅｒＣｏｎｆｉｇＤｅｓｃｒｉｐｔｏｒオブジェクト構造に、プロパティ「ｂｕｆｆｅｒＳｉｚｅＤＢ」１０６０が含まれる。ほとんどの場合に、このプロパティの値は、関連するメディア・データ・ストリームの最大のサンプルのサイズによって決定される。ｏｄｓｍ１９００の場合に、各サンプル１９２０および１９４０に、ＥＳ＿Ｄｅｓｃｒ構造１０００への参照を有するＥｓＩｄＲｅｆ構造２１６０を含めることができ、ｏｄｓｍサンプル・バッファは、埋め込まれたＥｓＩｄＲｅｆ２１６０構造のそれぞれを対応するＥＳ＿Ｄｅｓｃｒ構造１０００に置換できるようにするのに十分なサイズを有しなければならない。ＥＳ＿Ｄｅｓｃｒ構造１０００を含むバイト数は、一般に、対応するＥｓＩｄＲｅｆ構造２１６０より多い。その結果、ｏｄｓｍの最小バッファ・サイズを増やして、ＥｓＩｄＲｅｆ構造２１６０を対応するＥＳ＿Ｄｅｓｃｒ構造１０００によって置換できるようにしなければならない。これは、下で説明する手段によって達成される。
【０８９１】
これらの動作を実行する前に、各ｔｒａｋアトム９００が、上で説明したように構成されている。ｏｄｓｍのｔｒａｋアトムに、ｂｕｆｆｅｒＳｉｚｅＤＢプロパティの予備的な値が含まれる。この予備的な値を出力ｍｐ４ファイルに書き込む前に、ｍｐ４ファイル位置の値が、量「ＯｄｓｍＢｕｆｆｅｒＳｉｚｅＰｏｓ」に割り当てられた。さらに、上で説明した動作の一部として、各ｏｄｓｍサンプルのサイズが、リスト「ＯｄｓｍＳａｍｐｌｅＳｉｚｅ」の項目に割り当てられ、各ｔｒａｋアトムのＥＳ＿Ｄｅｓｃｒ構造のサイズが、リスト「ＥｓＤｅｓｃｒＳｉｚｅＦｏｒＴｒａｃｋ」の項目に割り当てられ、各ｔｒａｋアトムの「ｔｒａｃｋＩＤ」プロパティの値が、リスト「ＴｒａｃｋＩｄＦｏｒＴｒａｃｋ」の項目に割り当てられ、各オブジェクトに関連するｔｒａｃｋＩＤの値が、リスト「ＴｒａｃｋＩｄＦｏｒＯｄＩｄ」の項目に割り当てられた。
【０８９２】
上で説明した先行ステップを完了した後に、次の手段を使用して、ｏｄｓｍのプロパティｂｕｆｆｅｒＳｉｚｅＤＢ１０６０の値を改訂する。
１．標準ＸＭＬ手段を使用して、ｍｐ４ｆｉｌｅ文書２３００の各「ｍｄａｔ」要素２３１０を入手する。
２．標準ＸＭＬ手段を使用して、各「ｍｄａｔ」要素２３１０および２４００に従属する各「ｏｄｓｍ」要素２４２０を入手する
３．標準ＸＭＬ手段を使用して、各「ｏｄｓｍ」要素２４２０および２４６０に従属する各「ｏｄｓｍＣｈｕｎｋ」要素２４７０を入手する。
４．標準ＸＭＬ手段を使用して、各「ｏｄｓｍＣｈｕｎｋ」要素２４７０および２５００に従属する各「ｏｄｓｍＳａｍｐｌｅ」要素（２５１０）を入手する。
５．量「ｉｔｈＯｄｓｍＳａｍｐｌｅ」を用いて各「ｏｄｓｍＳａｍｐｌｅ」要素２５１０を列挙する。
６．標準ＸＭＬ手段を使用して、各「ｏｄｓｍＳａｍｐｌｅ」要素２５２０および２５１０に従属する各「ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ」ｏｄｓｍ−ｃｏｍｍａｎｄ要素２５３０および２５４０を入手する。
７．標準ＸＭＬ手段を使用して、各「ＯｂｊｅｃｔＤｅｓｃｒＵｐｄａｔｅ」要素２５４０に従属する各「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素２５５０を入手する。
８．「ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒ」要素２５５０の「ＯＤＩＤ」属性の値を、量「ＯｄＩｄ」に割り当てる。
９．リスト「ＴｒａｃｋＩｄＦｏｒＯｄＩｄ」の項目ＯｄＩｄ−１の値を、量「ｔｒａｃｋＩＤ」に割り当てる。
１０．リスト「ＴｒａｃｋＩｄＦｏｒＴｒａｃｋ」を使用して、「ｔｒａｃｋＩＤ」のこの値の「トラック」インデックスを決定する。
１１．リスト「ＥｓＤｅｓｃｒＳｉｚｅＦｏｒＴｒａｃｋ」の項目「ｔｒａｃｋ」の値を、量「ＥｓＤｅｓｃｒＳｉｚｅ」の値に割り当てる。
１２．量「ＥｓＤｅｓｃｒＳｉｚｅ」の値を、リスト「ＯｄｓｍＳａｍｐｌｅＳｉｚｅ」の項目「ＩｔｈＯｄｓｍＳａｍｐｌｅ」に加算する。
１３．リスト「ＯｄｓｍＳａｍｐｌｅＳｉｚｅ」の最大の項目を判定し、その結果を量ＯｄｓｍＢｕｆｆｅｒＳｉｚｅに割り当てる。
１４．現在のｍｐ４ファイル位置を、量「ｍｐ４ＦｉｌｅＰｏｓ」に割り当てる。
１５．現在のｍｐ４ファイル位置を、量「ＯｄｓｍＢｕｆｆｅｒＳｉｚｅＰｏｓ」によって指定される値に変更する。
１６．量ＯｄｓｍＢｕｆｆｅｒＳｉｚｅの値を２４ビット整数として表す３バイトを、出力ｍｐ４ファイルに書き込む。
１７．ｍｐ４ファイル位置を、量「ｍｐ４ＦｉｌｅＰｏｓ」によって指定される値に復元する。
【０８９３】
量ＯｄｓｍＢｕｆｆｅｒＳｉｚｅの値は、ｏｄｓｍバッファ・サイズに必要な値を過大評価する可能性があるが、これは許容可能である。この手段によって、出力ｍｐ４ファイルの作成が完了する。
【０８９４】
本発明の前述の説明は、例示および説明のために提示されたものである。網羅的であることまたは本発明を開示された形態に制限することは意図されておらず、他の修正形態および変形形態が、上の教示に鑑みて可能である。たとえば、ＸＭＴ−Ａファイルの正確な定義が、時と共に変化または進化する可能性がある。同様に、ＭＰＥＧ−４  Ｉｎｔｅｒｍｅｄｉａ  Ｆｏｒｍａｔの正確な定義が、時と共に変化または進化する可能性がある。本明細書に記載の発明は、上に示した文書で指定される特定の定義に制限されない。したがって、本発明の原理は、他の関連しないデータ構造にも適用することができる。ＳＦＮｏｄｅデータ構造の他の拡張形式も、ＭＰＥＧ−４  Ｓｙｓｔｅｍｓ仕様で定義されている。そのような事例を含むために次の実施形態で説明されるように本発明を拡張する手段が、当業者に明白になる。したがって、開示された実施形態は、本発明の原理およびその実用的な応用例を最もよく説明し、これによって、当業者が、企図される特定の使用に適するようにさまざまな実施形態およびさまざまな修正形態で本発明を最もよく利用できるようにするために、選択され、説明された。請求項が、従来技術によって制限される範囲を除いて、本発明の他の代替実施形態を含むように解釈されることが意図されている。
【図面の簡単な説明】
【０８９５】
【図１】本発明の１実施形態によって使用される例示的なＸＭＴ−Ａ文書を示す図である。
【図２】例示的なＸＭＴ−Ａ  Ｉｎｉｔｉａｌ  Ｏｂｊｅｃｔ  Ｄｅｓｃｒｉｐｔｏｒを示す図である。
【図３】例示的なＸＭＴ−Ａ  ｐａｒ要素を示す図である。
【図４】例示的なＸＭＴ−Ａ  ｏｄｓｍコマンド要素を示す図である。
【図５】例示的なＸＭＴ−Ａ  Ｉｎｓｅｒｔコマンドを示す図である。
【図６】例示的なＸＭＴ−Ａ  Ｄｅｌｅｔｅコマンドを示す図である。
【図７】例示的なＸＭＴ−Ａ  Ｒｅｐｌａｃｅコマンドを示す図である。
【図８】例示的なＸＭＴ−Ａ  ＢＩＦＳ  Ｎｏｄｅ要素を示す図である。
【図９】例示的なＸＭＴ−Ａ  ＢＩＦＳ  Ｎｏｄｅを示す図である。
【図１０】例示的な再利用されるＸＭＴ−Ａ  ＢＩＦＳ  Ｎｏｄｅを示す図である。
【図１１】例示的なＸＭＴ−Ａ  ＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒを示す図である。
【図１２】例示的なＸＭＴ−Ａ  ＥＳ＿Ｄｅｓｃｒｉｐｔｏｒを示す図である。
【図１３】ｓｄｓｍ（ＢＩＦＳ）に関する例示的なＤｅｃｏｄｅｒＳｐｅｃｉｆｉｃＩｎｆｏを示す図である。
【図１４】本発明の１実施形態によって生成される例示的なｍｐ４バイナリ・ファイルを示す図である。
【図１５】例示的なｍｄａｔアトムを示す図である。
【図１６】例示的なチャンクを示す図である。
【図１７】例示的なｍｏｏｖアトムを示す図である。
【図１８】例示的なｍｐ４ファイルｉｏｄｓアトムを示す図である。
【図１９】例示的なＭｐ４ｆＩｎｉｔＯｂｊｅｃｔＤｅｓｃｒを示す図である。
【図２０】例示的なＥＳ＿ＩＤ＿Ｉｎｃを示す図である。
【図２１】例示的なｔｒａｋアトムを示す図である。
【図２２】例示的なｓａｍｐｌｅ  ｔａｂｌｅｓアトムを示す図である。
【図２３】例示的なバイナリＥＳ記述子を示す図である。
【図２４】例示的なデコーダ構成記述子を示す図である。
【図２５】例示的なデコーダ固有情報記述子を示す図である。
【図２６】例示的なバイナリＳＬ構成記述子を示す図である。
【図２７】例示的なｓｄｓｍバイナリ・チャンクを示す図である。
【図２８】例示的なｓｄｓｍコマンド・フレームを示す図である。
【図２９】例示的なＢＩＦＳ挿入コマンドを示す図である。
【図３０】例示的なＢＩＦＳ削除コマンドを示す図である。
【図３１】例示的なＢＩＦＳ置換コマンドを示す図である。
【図３２】例示的なＢＩＦＳシーン置換コマンドを示す図である。
【図３３】例示的なＮｏｄｅ挿入コマンドを示す図である。
【図３４】例示的なＩｎｄｅｘｅｄＶａｌｕｅ挿入コマンドを示す図である。
【図３５】例示的なＲｏｕｔｅ挿入コマンドを示す図である。
【図３６】例示的なＮｏｄｅ削除コマンドを示す図である。
【図３７】例示的なＩｎｄｅｘｅｄＶａｌｕｅ削除コマンドを示す図である。
【図３８】例示的なＲｏｕｔｅ削除コマンドを示す図である。
【図３９】例示的なＮｏｄｅ置換コマンドを示す図である。
【図４０】例示的なＦｉｅｌｄ置換コマンドを示す図である。
【図４１】例示的なＩｎｄｅｘｅｄＶａｌｕｅ置換コマンドを示す図である。
【図４２】例示的なＲｏｕｔｅ置換コマンドを示す図である。
【図４３】例示的なＢＩＦＳ  Ｓｃｅｎｅを示す図である。
【図４４】例示的なＳＦＮｏｄｅ（再利用される）を示す図である。
【図４５】例示的なＳＦＮｏｄｅ（マスク・ノード）を示す図である。
【図４６】例示的なＳＦＮｏｄｅ（リスト・ノード）を示す図である。
【図４７】例示的なＭＦＦｉｅｌｄ（リスト形式）を示す図である。
【図４８】例示的なＭＦＦｉｅｌｄ（ベクトル形式）を示す図である。
【図４９】例示的なＲｏｕｔｅｓ（リスト形式）を示す図である。
【図５０】例示的なＲｏｕｔｅｓ（ベクトル形式）を示す図である。
【図５１】例示的なＲｏｕｔｅを示す図である。
【図５２】例示的なｏｄｓｍバイナリ・チャンクを示す図である。
【図５３】例示的なｏｄｓｍバイナリ・サンプルを示す図である。
【図５４】例示的なＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＵｐｄａｔｅコマンドを示す図である。
【図５５】例示的なＯｂｊｅｃｔＤｅｓｃｒｉｐｔｏｒＲｅｍｏｖｅコマンドを示す図である。
【図５６】例示的なバイナリ・オブジェクト記述子を示す図である。
【図５７】例示的なバイナリＥｓＩｄＲｅｆ記述子を示す図である。
【図５８】本発明によって企図される、例示的なＸＭＴ−ＡからＭＰＥＧ−４への中間ファイル・コンバータを示す図である。
【図５９】例示的なｍｐ４ｆｉｌｅ文書を示す図である。
【図６０】例示的なｍｐ４ｆｉｏｄｓ文書を示す図である。
【図６１】例示的なｍｄａｔ要素を示す図である。
【図６２】例示的なｓｄｓｍ要素を示す図である。
【図６３】例示的なｏｄｓｍ要素を示す図である。
【図６４】例示的なｍｅｄｉａＦｉｌｅ要素を示す図である。
【図６５】例示的なｏｄｓｍＣｈｕｎｋ要素を示す図である。
【図６６】例示的なｏｄｓｍＳａｍｐｌｅ要素を示す図である。
【図６７】例示的なｏｄｓｍコマンド要素を示す図である。
【図６８】例示的なｔｒａｋ要素を示す図である。
【図６９】例示的なｓｔｂｌ要素を示す図である。
【図７０】例示的なＥＳ＿Ｄｅｓｃｒを示す図である。
【図７１】例示的なｍｐ４ｂｉｆｓ文書を示す図である。
【図７２】例示的なｍｐ４ｂｉｆｓ  ｃｏｍｍａｎｄＦｒａｍｅ要素を示す図である。
【図７３】例示的なｍｐ４ｂｉｆｓ  ｂｉｆｓＣｏｍｍａｎｄ要素を示す図である。
【図７４】例示的なｍｐ４ｂｉｆｓ  ＲｅｐｌａｃｅＳｃｅｎｅ要素を示す図である。
【図７５】例示的なｍｐ４ｂｉｆｓのオリジナルＮｏｄｅ要素を示す図である。
【図７６】例示的なｍｐ４ｂｉｆｓ  Ｃｏｎｄｉｔｉｏｎａｌ  Ｎｏｄｅ要素を示す図である。
【図７７】例示的なｍｐ４ｂｉｆｓの再利用されるＮｏｄｅ要素を示す図である。
【図７８】ＸＭＴ−Ａ文書の例示的な処理を示す流れ図である。
【図７９】ＸＭＴ−Ａ  Ｈｅａｄｅｒの例示的な処理を示す流れ図である。
【図８０】ＸＭＴ−Ａ  Ｄｅｓｃｒ要素の例示的な処理を示す流れ図である。
【図８１】ＸＭＴ−Ａ  ｅｓＤｅｓｃｒ要素の例示的な処理を示す流れ図である。
【図８２】ＸＭＴ−Ａ  ＥＳ＿Ｄｅｓｃｒの例示的な処理を示す流れ図である。
【図８３】例示的なｍｄａｔ要素作成を示す流れ図である。
【図８４】例示的なｔｒａｋ要素作成を示す流れ図である。
【図８５】例示的なｓｔｂｌ要素作成を示す流れ図である。
【図８６】例示的なｅｓｄｓ要素作成を示す流れ図である。
【図８７】例示的なＢＩＦＳ構成処理を示す流れ図である。
【図８８】例示的なオブジェクト・テーブルを示す図である。
【図８９】例示的なＢＩＦＳ  ＮｏｄｅＩＤテーブルを示す図である。
【図９０】例示的なＢＩＦＳ  ＲｏｕｔｅＩＤテーブルを示す図である。
【図９１】例示的なＲｅｐｌａｃｅＳｃｅｎタイム・テーブルを示す図である。
【図９２】例示的なソート済みオブジェクト・テーブルを示す図である。
【図９３】ＸＭＴ−Ａ  Ｂｏｄｙ要素の例示的な処理（パス１またはパス２）を示す流れ図である。
【図９４】ＸＭＴ−Ａ  ｐａｒ要素の例示的な処理（パス１）を示す流れ図である。
【図９５】ＸＭＴ−Ａコマンド要素の例示的な処理（パス１）を示す流れ図である。
【図９６】ＸＭＴ−Ａ  ｐａｒ要素の例示的な処理（パス２）を示す流れ図である。
【図９７】Ｉｎｓｅｒｔコマンドの例示的な処理を示す流れ図である。
【図９８】Ｄｅｌｅｔｅコマンドの例示的な処理を示す流れ図である。
【図９９】Ｒｅｐｌａｃｅコマンドの例示的な処理を示す流れ図である。
【図１００】ｃｒｅａｔｅ  ＲｅｐｌａｃｅＳｃｅｎｅコマンドの例示的な処理を示す流れ図である。
【図１０１】ＸＭＴ−Ａ  ＢＩＦＳノードの例示的な処理を示す流れ図である。
【図１０２】ｏｄｓｍのＸＭＬ表現の例示的な処理を示す流れ図である。
【図１０３】例示的なｍｐ４アトム構造作成の流れ図である。
【図１０４】例示的なｍｐ４オブジェクト構造作成の流れ図である。
【図１０５】ｍｄａｔ要素の例示的な処理を示す流れ図である。
【図１０６】ｍｅｄｉａＦｉｌｅ要素の例示的な処理を示す流れ図である。
【図１０７】例示的なｓｙｎｃ  ｓａｍｐｌｅ  ｔａｂｌｅ作成を示す流れ図である。
【図１】
2006514354.tif 000003
【図２】
2006514354.tif 000004
【図３】
2006514354.tif 000005
【図４】
2006514354.tif 000006
【図５】
2006514354.tif 000007
【図６】
2006514354.tif 000008
【図７】
2006514354.tif 000009
【図８】
2006514354.tif 000010
【図９】
2006514354.tif 000011
【図１０】
2006514354.tif 000012
【図１１】
2006514354.tif 000013
【図１２】
2006514354.tif 000014
【図１３】
2006514354.tif 000015
【図１４】
2006514354.tif 000016
【図１５】
2006514354.tif 000017
【図１６】
2006514354.tif 000018
【図１７】
2006514354.tif 000019
【図１８】
2006514354.tif 000020
【図１９】
2006514354.tif 000021
【図２０】
2006514354.tif 000022
【図２１】
2006514354.tif 000023
【図２２】
2006514354.tif 000024
【図２３】
2006514354.tif 000025
【図２４】
2006514354.tif 000026
【図２５】
2006514354.tif 000027
【図２６】
2006514354.tif 000028
【図２７】
2006514354.tif 000029
【図２８】
2006514354.tif 000030
【図２９】
2006514354.tif 000031
【図３０】
2006514354.tif 000032
【図３１】
2006514354.tif 000033
【図３２】
2006514354.tif 000034
【図３３】
2006514354.tif 000035
【図３４】
2006514354.tif 000036
【図３５】
2006514354.tif 000037
【図３６】
2006514354.tif 000038
【図３７】
2006514354.tif 000039
【図３８】
2006514354.tif 000040
【図３９】
2006514354.tif 000041
【図４０】
2006514354.tif 000042
【図４１】
2006514354.tif 000043
【図４２】
2006514354.tif 000044
【図４３】
2006514354.tif 000045
【図４４】
2006514354.tif 000046
【図４５】
2006514354.tif 000047
【図４６】
2006514354.tif 000048
【図４７】
2006514354.tif 000049
【図４８】
2006514354.tif 000050
【図４９】
2006514354.tif 000051
【図５０】
2006514354.tif 000052
【図５１】
2006514354.tif 000053
【図５２】
2006514354.tif 000054
【図５３】
2006514354.tif 000055
【図５４】
2006514354.tif 000056
【図５５】
2006514354.tif 000057
【図５６】
2006514354.tif 000058
【図５７】
2006514354.tif 000059
【図５８】
2006514354.tif 000060
【図５９】
2006514354.tif 000061
【図６０】
2006514354.tif 000062
【図６１】
2006514354.tif 000063
【図６２】
2006514354.tif 000064
【図６３】
2006514354.tif 000065
【図６４】
2006514354.tif 000066
【図６５】
2006514354.tif 000067
【図６６】
2006514354.tif 000068
【図６７】
2006514354.tif 000069
【図６８】
2006514354.tif 000070
【図６９】
2006514354.tif 000071
【図７０】
2006514354.tif 000072
【図７１】
2006514354.tif 000073
【図７２】
2006514354.tif 000074
【図７３】
2006514354.tif 000075
【図７４】
2006514354.tif 000076
【図７５】
2006514354.tif 000077
【図７６】
2006514354.tif 000078
【図７７】
2006514354.tif 000079
【図７８】
2006514354.tif 000080
【図７９】
2006514354.tif 000081
【図８０】
2006514354.tif 000082
【図８１】
2006514354.tif 000083
【図８２】
2006514354.tif 000084
【図８３】
2006514354.tif 000085
【図８４】
2006514354.tif 000086
【図８５】
2006514354.tif 000087
【図８６】
2006514354.tif 000088
【図８７】
2006514354.tif 000089
【図８８】
2006514354.tif 000090
【図８９】
2006514354.tif 000091
【図９０】
2006514354.tif 000092
【図９１】
2006514354.tif 000093
【図９２】
2006514354.tif 000094
【図９３】
2006514354.tif 000095
【図９４】
2006514354.tif 000096
【図９５】
2006514354.tif 000097
【図９６】
2006514354.tif 000098
【図９７】
2006514354.tif 000099
【図９８】
2006514354.tif 000100
【図９９】
2006514354.tif 000101
【図１００】
2006514354.tif 000102
【図１０１】
2006514354.tif 000103
【図１０２】
2006514354.tif 000104
【図１０３】
2006514354.tif 000105
【図１０４】
2006514354.tif 000106
【図１０５】
2006514354.tif 000107
【図１０６】
2006514354.tif 000108
【図１０７】
2006514354.tif 000109
【国際調査報告】
2006514354.tif 000110
2006514354.tif 000111