JP2006517309A - MPEG−4IntermediaFormatからMPEG−4TextualRepresentationを作成する効率的な手段 - Google Patents

MPEG−4IntermediaFormatからMPEG−4TextualRepresentationを作成する効率的な手段 Download PDF

Info

Publication number
JP2006517309A
JP2006517309A JP2004557437A JP2004557437A JP2006517309A JP 2006517309 A JP2006517309 A JP 2006517309A JP 2004557437 A JP2004557437 A JP 2004557437A JP 2004557437 A JP2004557437 A JP 2004557437A JP 2006517309 A JP2006517309 A JP 2006517309A
Authority
JP
Japan
Prior art keywords
value
file
atom
structured document
data structure
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2004557437A
Other languages
English (en)
Other versions
JP2006517309A5 (ja
Inventor
ルケン、ウィリアム
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2006517309A publication Critical patent/JP2006517309A/ja
Publication of JP2006517309A5 publication Critical patent/JP2006517309A5/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/85Assembly of content; Generation of multimedia applications
    • H04N21/854Content authoring
    • H04N21/8543Content authoring using a description language, e.g. Multimedia and Hypermedia information coding Expert Group [MHEG], eXtensible Markup Language [XML]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/80Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
    • G06F16/84Mapping; Conversion
    • G06F16/88Mark-up to mark-up conversion
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/85Assembly of content; Generation of multimedia applications
    • H04N21/854Content authoring
    • H04N21/85406Content authoring involving a specific file format, e.g. MP4 format
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99942Manipulating data structure, e.g. compression, compaction, compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Processing Or Creating Images (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Document Processing Apparatus (AREA)

Abstract

【課題】バイナリMPEG−4(mp4)バイナリ・ファイルをXMT(Extensible MPEG−4 Textual)ファイルに変換する方法、システム、およびコンピュータ・プログラム製品を提供すること。
【解決手段】本発明に、mp4バイナリ・ファイルを表す少なくとも1つの中間構造化文書を生成することが含まれる。トランスレータが、中間文書を入力し、XMT構造化文書を生成するように構成される。次に、XMLシリアライザを使用して、XMT構造化文書に基づいてXMTファイルを作成する。

Description

本発明は、全般的にはマルチメディア情報のデータ表現に関し、具体的には、「MPEG−4 Intermedia Format」と称するマルチメディア情報表現の1つの形の、「MPEG−4 Textual Representation」と称するマルチメディア情報表現の別の形への変換に関する。
コンピュータは、一般に、イメージ、オーディオ・サンプル(サウンド)、およびビデオ・メディアを含むさまざまなディジタル・メディアならびにテキストおよび幾何形状を表すのに使用される。これらのメディア・タイプのそれぞれを、個別に提示することができ、あるいは、複数のそのようなメディア要素を、コンポジット・マルチメディア・プレゼンテーション(composite multimedia presentation)と称するもので一緒に提示することができる。
コンポジット・マルチメディア・プレゼンテーションを作成し、配布する能力は、さまざまなメディア・タイプに基づく情報の散布に非常に重要である。さらに、コンポジット・マルチメディア・プレゼンテーションを提示する標準化された手段が作成されて、多数の作成者が、パーソナル・コンピュータ、セットトップ・ボックス、および他のデバイスなどのさまざまなコンピュータ・プラットフォームで再生できるプレゼンテーションを作成できるようになった。
MPEG(Motion Pictures Experts Group)によって開発されたコンポジット・マルチメディア・プレゼンテーションの2つの周知の標準化されたフォーマットが、XMT(Extensible MPEG−4 Textual)フォーマットおよびバイナリ・コーディングされたMPEG−4(mp4)フォーマットである。XMTフォーマットは、コンポジット・マルチメディア・プレゼンテーションのオーサリングによく適し、mp4フォーマットは、コンポジット・マルチメディア・プレゼンテーションのコンパクトな保管および伝送によく適する。
http://www.w3.org/TR/2000/REC-XML-20001006 http://mpeg.telecomitalialab.com/working_documents.htm ISO-IEC文書ISO/IEC 14496-1:2001、2001年8月、第9章 http://mpeg.telecomitalialab.com/documents.htm http://developer.apple.com/techpubs/quicktime/qtdevdocs/REF/refFileFormat96.htm http://developer.apple.com/techpubs/quicktime/qtdevdocs/PDF/QTFileFormat.pdf ISO/IEC文書14496−2(1999年、2000年修正)「情報テクノロジ−オーディオ・ビジュアル・オブジェクトのコーディング−第2部:ビジュアル(Information Technology-Coding of Audio-Visual Objects - Part 2:Visual)」 ISO/IEC文書13818−7(1997年)「情報テクノロジ−動画および関連するオーディオ情報の包括的コーディング−第7部:高度なオーディオ・コーディング(Information Technology - Generic Coding of Moving Pictures andAssociated Audio Information - Part 7: Advanced Audio Coding)」
したがって、XMTフォーマットされたプレゼンテーションをmp4フォーマットされたプレゼンテーションに効率的に変換することが望ましい。
下で説明するように、本発明は、バイナリ・コーディングされたMPEG−4(mp4)フォーマットをXMT(Extensible MPEG−4 Textual)フォーマットに変換する方法、システム、および装置である。本発明は、比較的少量のソフトウェアからなる、mp4フォーマットからXMTフォーマットへのコンポジット・マルチメディア・プレゼンテーション変換を達成するのに適度なリソースだけを必要とする効率的な機能を使用する。
したがって、本発明の一態様に、MPEG−4(mp4)バイナリ・ファイルをXMT(Extensible MPEG−4 Textual)ファイルに変換する方法が含まれる。この方法に、mp4バイナリ・ファイルを表すデータ構造の組を生成する生成動作が含まれる。第1変換動作が、データ構造の組を少なくとも1つの中間構造化文書に変換し、第2変換動作が、中間構造化文書をXMT構造化文書に変換する。その後、作成動作が、XMT構造化文書に基づいてXMTファイルを作成する。
本発明のもう1つの態様は、MPEG−4(mp4)バイナリ・ファイルをXMT(Extensible MPEG−4 Textual)ファイルに変換するシステムである。このシステムには、mp4バイナリ・ファイルを入力し、mp4バイナリ・ファイルを表すデータ構造の組を生成するように構成されたバイナリ・ファイル・デコーダが含まれる。第1トランスレータが、データ構造の組を入力し、少なくとも1つの中間構造化文書を作成するように構成される。第2トランスレータが、中間構造化文書を入力し、XMT構造化文書を生成するように構成される。XMTシリアライザが、XMT構造化文書を入力し、XMTファイルを生成するように構成される。
本発明のもう1つの態様は、MPEG−4(mp4)バイナリ・ファイルをXMT(Extensible MPEG−4 Textual)ファイルに変換する、有形の媒体で実施されたコンピュータ・プログラム製品である。このコンピュータ・プログラムは、mp4バイナリ・ファイルを表すデータ構造の組を生成する動作と、データ構造の組を少なくとも1つの中間構造化文書に変換する動作と、中間構造化文書をXMT構造化文書に変換する動作と、XMT構造化文書に基づいてXMTファイルを作成する動作とを実行する。
本発明の前述および他の特徴、有用性、および利益は、添付図面に示された本発明のさまざまな実施形態の次の詳細な説明から明白になる。
見出しの一覧
MPEG−4 Textual Representation 1.0
MPEG−4 Intermedia Formatファイル 2.0
Scene Description Stream(sdsm) 3.0
Object Descriptor Stream (odsm) 4.0
mp4−file文書 5.0
mp4−bifs文書 6.0
mp4−xmtaコンバータ 7.0
本発明は、XMT(Extensible MPEG−4 Textual)フォーマット(本明細書では、XMT−A文書およびMPEG−4 Textual Representationとも称する)をバイナリ・コーディングされたMPEG−4(mp4)フォーマット(MPEG−4 intermedia binaryフォーマットとも称する)に変換する方法、システム、およびコンピュータ・プログラムである。本発明は、比較的少量のソフトウェアおよび適度なリソースだけを必要とする、XMT−Aからmp4への変換を達成する新規の手法を使用する。本発明を、本明細書で、図1から135を参照して説明する。
1.0 MPEG−4 Textual Representation
MPEG−4 Textual Representationは、マルチメディア・プレゼンテーションの構造を表す「テキスト・ファイル」からなる。マルチメディア・プレゼンテーションは、サウンド、静止画像、ビデオ・クリップ、および他の要素の同期化された組合せまたはシーケンスからなる。テキスト・ファイルは、文字、数字、および句読点のバイナリ・コードのシーケンスからなる電子データ構造である。一般に、テキスト・ファイルは、一般に「テキスト・エディタ」と称するソフトウェアを使用して解釈することができる。Windows(R)オペレーティング・システムに基づくコンピュータ用の「Notepad.exe」と称するソフトウェアおよび集合的にUNIXと称するさまざまなオペレーティング・システムを使用するコンピュータ用の「vi」を含む、テキスト・エディタの多数の例がある。Windowsは、米国ワシントン州レッドモンドのMicrosoft Corporation社の登録商標である。MPEG−4 Textual Representationを含むタイプのテキスト・ファイルを「XMT−A」ファイルと称する。
テキスト・ファイルの範囲内で、XMT−Aファイルは、XML(Extensible Markup Language)ファイルの例である。XMLファイルは、World Wide Web Consortiumによって指定される原理に基づく構造化文書である(http://www.w3.org/TR/2000/REC-XML-20001006を参照されたい)。XMT−Aファイルは、国際標準化機構および国際電気標準会議によって指定される、XMLファイルの特定の実施形態を表す(http://mpeg.telecomitalialab.com/working_documents.htmおよび、スイス国ジュネーブ20、CH−1211、1、rue de Varembe、Case postal 56の国際標準化機構(ISO)から入手可能なISO/IEC文書14496−1:2000 Amd.2、2000年10月を参照されたい)。XMT−A仕様のすべての部分の完全な記述は、膨大な量になる。したがって、XMT−Aファイルの次の説明は、その仕様のうちで、本発明を説明するのに必要な部分に限られる。XMT−Aファイル構造の完全な説明については、上で示したXMT仕様書を調査されたい。
XMLファイルと同様に、XMT−Aファイルは、「要素」の階層的な組からなる。各要素に、子要素と称する従属要素を含めることができる。さらに、各要素は、「属性」と称するデータ値の組を所有することができる。各属性は、名前および値を有する。特定の要素によって所有される、特定の属性名および可能な子要素は、その要素の型に依存する。各属性値の解釈は、対応する属性名およびその属性を所有する要素に依存する。
図1からわかるように、XMT−Aファイル100は、2つの部分すなわち、Header要素110およびBody要素120からなる。Header要素110に、InitialObjectDescriptor要素130と定義された単一の子要素が含まれる。Body要素120に、子要素として1つまたは複数の「par」要素140が含まれる。
InitialObjectDescriptor 130は、1つの属性、ObjectDescriptorID(ODID)を有し、その値は、文字ストリングである。図2からわかるように、この要素は、2つの子すなわち、Profiles要素150およびDescr要素160を有する。Profiles要素150は、子要素を有しない。Profiles要素150は、「includeInclineProfileLevelFlag」、「sceneProfileLevelIndication」、「ODProfileLevelIndication」、「audioProfileLevelIndication」、「visualProfileLevelIndication」、および「graphicsProfileLevelIndication」を含む複数の属性を所有する。
Descr要素160は、複数の型の子要素を有することができる。本発明に必須の唯一の型が、単一の「esDescr」要素170である。esDescr要素170は、1つまたは複数の「ES_Descriptor」子要素180および190を所有することができる。ES_Descriptor要素は、MPEG−4ドキュメンテーションで定義される概念である「エレメンタリ・ストリーム(elementary stream)」のあるプロパティを指定する。ES_Descriptor要素の構造を、下で示す。
InitialObjectDescriptor要素130に従属するesDescr要素170は、1つまたは2つのES_Descriptor要素180および190を所有することができる。どの場合でも、「sdsm」または「scene description stream」として定義されたエレメンタリ・ストリームのES_Descriptor 180が存在しなければならない。さらに、「odsm」または「object descriptor stream」として定義されたエレメンタリ・ストリームの第2のES_Descriptor 190を設けることができる。odsmのES_Descriptor要素190は、オーディオ・データ、ビジュアル・データ、またはsdsm内で指定されない他のタイプのメディア・データに依存するXMT−Aファイルに限って必要である。
図3からわかるように、各par要素140および200に、1つまたは複数の「par−child」要素210が含まれる。「par−child」要素は、別のpar要素、odsmコマンド、またはbifsコマンドとすることができる。各par要素に、名前「begin」を有する属性も含まれる。begin属性の値は、par要素内のodsmコマンドまたはbifsコマンドが実行される時を指定する。par要素のbegin属性によって決定される時間値は、親によって暗示される時間値に関して計算され、Body要素120は、0の開始時刻を暗示する。
par−child要素210に、図4に示されているように、2つの型のodsmコマンド要素のインスタンスを含めることができる。これには、ObjectDescriptorUpdate要素220およびObjectDescriptorRemove要素250が含まれる。ObjectDescriptorUpdate要素220には、単一のOD子要素230が含まれ、OD要素230には、単一のObjectDescriptor子要素240が含まれる。ObjectDescriptor要素240は、下で詳細に説明する。ObjectDescriptorRemove要素250は、1つの属性を有し、子要素を有しない。ObjectDescriptorRemove要素250の属性は、「ODID」という名前を有する。
図5から7に示されているように、par−child要素210に、3つの型のbifsコマンド要素のインスタンスを含めることができる。これには、Insert要素300、Delete要素310、およびReplace要素320が含まれる。図5からわかるように、Insert要素30は、「xmtaBifsNode」子要素330または「ROUTE」子要素340のいずれかを有することができる。Delete要素310は、子を有しない。Replace要素320は、「xmtaBifsNode」350子要素、「ROUTE」子要素360、または「Scene」子要素370を有することができる。Scene要素は、「xmtaTopNode」子要素380を有する。Scene要素は、1つまたは複数のROUTE子要素390も有することができる。
ROUTE要素340および390は、子を有しない。ROUTE要素340および390の属性に、「fromNode」、「fromField」、「toNode」、および「toField」が含まれる。
用語「xmtaBifsNode要素」330は、約100個の定義済みBIFS Node要素のいずれか1つを表す。これらのそれぞれが、図8に示された全体的な構造400を有する。各xmtaBifsNode要素400は、MPEG−4 Systems仕様書(ISO-IEC文書ISO/IEC 14496-1:2001、2001年8月、第9章)で定義されたバイナリ・データ構造体であるBIFS Nodeを表す。この文書に関する情報は、http://mpeg.telecomitalialab.com/documents.htmおよびスイス国ジュネーブ20、CH−1211、1、rue de Varembe、Case postal 56の国際標準化機構(ISO)で入手可能である。各xmtaBifsNode要素400の要素タグは、MPEG−4 Systems仕様で定義された対応するNodeNameに基づく。いくつかの型のxmtaBifsNode要素は、対応するBIFS Nodeのあるプロパティに基づいて従属(子)要素を有することができる。これを、nodeField要素410と呼ぶ。各nodeField要素は、さらなるxmtaBifsNode要素420からなる1つまたは複数の従属要素を有することができる。この配置を、BIFSノードの階層木を記述するために再帰的に繰り返すことができる。この階層の深さに制限はない。
各BIFS Nodeは、「フィールド」と称する複数のプロパティを有する。これらのフィールドのそれぞれが、定義されたフィールド名(ストリング)およびフィールド・データ型(boolean、integer、floatなど)を有する。フィールド・データ型の1つが、「Node」である。Node以外のフィールド・データ型のすべてが、xmtaBifsNode要素400の同一の名前の属性によって表される。型「Node」を有する各フィールドは、xmtaBifsNode要素400の同一の名前の子要素410によって表される。xmtaBifsNode要素400の各子要素410は、子要素として1つまたは複数のxmtaBifsNode要素420(xmtaBifsNode親要素400の孫)を有することができる。
XMT−A BIFS NodeのXML表現を、図9から10に示す。各XMT−A BIFS Node要素は、100個を超える可能な型のXMT−A BIFSノードの1つを一意に識別するNodeNameタグ500および570によって識別される。各ノード要素は、オリジナルのノード要素500または再利用されるノード要素570とすることができる。オリジナルのノード要素500の場合に、任意選択の属性「DEF」510を使用して、特定のノードの一意の英数字記述を提供することができる。この属性が設けられる場合に、そのノードは、「再利用可能」として分類される。
オリジナルのXMT−A BIFSノード要素は、フィールド属性520の組も所有し、各プロパティ・フィールドの1つのフィールド属性が、型NodeNameであり、「node」または「buffer」以外のノード・データ型を有するノードについて定義される。これらの属性は、図9では「field0」、「field2」、「field3」、および「field5」として識別される。これらの属性のそれぞれの実際の名前は、型「NodeName」のノードに関するMPEG−4 Systems仕様で定義された対応するプロパティ・フィールド名によって決定される。これらの属性のそれぞれに割り当てられる値は、MPEG−4 Systems仕様で定義されたノード・データ型(boolean、integer、floatなど)を有するデータ値を表さなければならない。
さらに、オリジナルのXMT−A BIFSノード要素500は、「node」または「buffer」のデータ型を有するプロパティ・フィールドのフィールド名に対応する要素タグを有する1つまたは複数のフィールド−値子要素530および540を有することができる。各そのようなフィールド−値要素は、開始タグ530および終了タグ540を有する。そのようなフィールド−値要素530および540の例が、図9の要素タグ<field1>…</field1>および<field4>…</field4>によって表されている。
データ型「node」を有するプロパティ・フィールドの場合に、フィールド−値要素に、BIFS−Node要素550に対応する1つまたは複数の子要素を含めることができる。そのようなBIFS−Node子の例が、要素タグ<NodeName1 … />、<NodeName2 … />、および<NodeName3 … />によって表される。
データ型「buffer」を有するプロパティ・フィールドの場合に、フィールド−値要素に、BIFSコマンド要素300、310、および320に対応する1つまたは複数の子要素を含めることができる。
XMT−A BIFS Node要素に、フィールド−値子要素が含まれる場合に、そのNode要素は、標準的なXMLの原理に従って、</NodeName>終了タグ560によって終端される。
XMT−A BIFSノード要素の前述の定義は、従属BIFSノード要素(<NodeName1>など)のそれぞれに再帰的に適用され、ノードの階層木を作成できるようになる。XMT−A BIFSノード要素のこの木の深さに制限はない。
再利用されるノード570の場合に、ノード要素は、1つの属性だけを有し、子を有しない。唯一の属性は、「USE」属性580であり、その値590は、ノードIDストリングである。USE属性の値として提供されるノードIDストリングは、同一のNodeNameを有するオリジナルのノード要素500のDEF属性510として指定されたノードIDストリングと一致しなければならない。
用語「xmtaTopNode」は、Scene要素に対する子要素としてサービスすることを許容されるxmtaBifsNode要素の定義されたサブセットの1つを表す。
図11からわかるように、ObjectDescriptor要素240および600(ObjectDescriptorUpdate要素220の孫)は、上で説明したInitialObjectDescriptor要素130に類似する。InitialObjectDescriptor要素130と異なって、ObjectDescriptor要素240および600には、Profiles子要素150が欠けている。InitialObjectDescriptor要素130と同様に、ObjectDescriptor要素240および600は、「ObjectDescriptorID」(ODID)属性606を有する。通常のObjectDescriptor要素240および600は、単一のDescr子要素610を有し、Descr要素610は、単一のesDescr子要素620を有し、esDescr要素620は、単一のES_Descriptor子要素630を有する。Descr要素610、esDescr要素620、およびES_Descriptor要素630は、InitialObjectDescriptor要素130の対応する子160、170、180、および190に類似する。
ES_Descriptor要素180、190、および630を、ObjectDescriptor要素600またはInitialObjectDescriptor要素130のいずれかに含めることができる。どちらの場合でも、ES_Descriptor要素180、190、および630は、図12に示された構造640を有する。ES_Descriptor要素640の「ES_ID」属性636の値は、各ストリームに固有の英数字ストリングである。ES_Descriptor640要素は、必ず、decConfigDescr子要素646およびslConfigDescr子要素660を有する。ES_Descriptor要素630および640が、ObjectDescriptor要素600に従属する場合に、そのES_Descriptor要素630および640は、StreamSource子要素670も有する。ES_Descriptor要素180、190、および640が、InitialObjectDescriptor要素130に属する場合に、そのES_Descriptor要素180、190、および640は、StreamSource子要素670を有しない。
decConfigDescr要素646は、DecoderConfigDescriptor子要素650を有する。DecoderConfigDescriptor要素650は、親のES_Description要素640が、オーディオ、ビジュアル、sdsm、odsm、または他のタイプのメディアのどれを表すかを示す、「streamType」および「objectTypeIndication」を含む複数の属性を有する。DecoderConfigDescription要素650は、streamTypeおよびobjectTypeIndicationの値に応じて、decSpecificInfo子要素656も有することができる。
sdsm(scene description stream)のES_Descriptor要素180の場合に、DecoderConfigDescriptor650要素は、decSpecificInfo子要素656を有する。図13からわかるように、decSpecificInfo680要素は、BIFSConfig子要素686を有する。BIFSConfig要素686は、BIFS Nodeをエンコードする形を指定する複数の属性を有する。BIFSConfig要素686は、commandStream要素690も所有し、commandStream要素690は、「size」要素696を所有する。
slConfig要素660は、SLConfigDescriptor子要素666を有する。SLConfigDescriptor要素666は、「predefined」という名前の1つの属性を有し、子要素を有しない。「predefined」属性は、必ず「2」の値を有する。
StreamSource要素670は、1つの属性「url」を有し、子要素を有しない。url属性の値は、特定のストリームの実際のサウンド、イメージなどを定義するオーディオ・データ、ビジュアル・データ、または他のデータを含むメディア・データ・ファイルの位置を示す、ファイル名またはインターネット・アドレス(URL、Uniform Resource Locator)のいずれかを指定する。StreamSource要素670は、sdsm(scene description stream)またはodsm(object descriptor stream)の場合には存在しない。というのは、これらのストリームの両方が、XMT−Aファイルによって決定されるからである。
2.0 MPEG−4 Intermedia Formatファイル
MPEG−4 Intermedia Formatファイルは、MPEG−4 Systems仕様書、ISO-IEC文書ISO/IEC 14496-1:2001、2001年8月の第13章で定義された構造および構成を有する電子データの1形式である。電子データ構造のこの形式は、一般に「バイナリ・ファイル」と称するものの例である。というのは、これが、文字、数字、および句読点の表現に制限されないバイナリ・データ値のシーケンスからなるからである。これによって、XMT−Aファイルなどの通常のテキスト・ファイルによって可能になるものよりコンパクトなデータ構造が可能になる。MPEG−4 Intermedia Formatによって定義された構造を有する電子データの保管された形が、「mp4バイナリ・ファイル」である。XMT−Aファイルと異なって、mp4バイナリ・ファイルは、ほとんどのテキスト編集ソフトウェアによって解釈することができない。
MPEG−4 Intermedia Formatは、1996にアップル・コンピュータ(Apple Computers, Inc.)社によって定義された、http://developer.apple.com/techpubs/quicktime/qtdevdocs/REF/refFileFormat96.htmおよびhttp://developer.apple.com/techpubs/quicktime/qtdevdocs/PDF/QTFileFormat.pdfでオンラインで入手できるQuickTime(R)ファイル・フォーマットから派生した。QuickTimeは、アップル・コンピュータ社の登録商標である。
QuickTime(R)の継承のゆえに、MPEG−4 Intermedia Formatは、QuickTime(R)仕様から派生した複数の特性を保持する。この特性に、データ構造の単位としての「アトム」の概念が含まれる。各アトムは、2つの部分すなわち、ヘッダおよび本体を有する。ヘッダには、ヘッダを含むアトムを構成するバイト数を指定するアトム・サイズ値が含まれる。ヘッダには、アトムの型を指定するatomIdも含まれる。アトムの本体には、アトムによって伝えられるデータが含まれる。このデータに、従属アトムを含めることができる。その最も基本的な形で、アトムは、4バイト(符号なし整数)からなるアトム・サイズ値と、やはり4バイト(文字)からなるatomIdを有する。4バイトを超えるアトム・サイズ値およびatomIdを有する、アトムの拡張された形も、MPEG−4仕様で定義されている。
図14からわかるように、mp4バイナリ・ファイル700は、1つまたは複数の「mdat」アトム706および1つの「moov」アトム712からなる。moovアトム712は、mdatアトム706の前または後に置くことができる。図15からわかるように、各mdatアトム718は、アトム・サイズ値724と、それに続く4バイトのatomId「mdat」730と、「チャンク」736と呼ばれるデーバ・ブロックのシーケンスからなる。図16からわかるように、各チャンク742は、メディア・データ「サンプル」748のシーケンスからなる。各サンプル748は、単一のメディア・ストリームに関する、特定の時点に関連するデータのブロックを指定する。単一のチャンク内のすべてのサンプルが、同一のメディア・データ・ストリームを表さなければならない。mdatアトム700の観察から、個々のサンプル748またはチャンク736および742を識別することは、必ずしも可能でない。各サンプル748ならびにチャンク736および742は、mp4バイナリ・ファイル内の他の場所に保管されたテーブルを使用して識別することができる。
図17からわかるように、moovアトム758は、アトム・サイズ値760と、それに続く4バイトのatomId「moov」766ならびに「mvhd」(moov header)アトム772、「iods」(initial object descriptor)アトム778、および1つまたは複数の「trak」アトム790を含む複数の従属アトムからなる。「moov」アトム712および758には、データ・ストリームごとに1つの「trak」アトム790が含まれ、この「trak」アトム790には、存在する場合にsdsm(scene description stream)およびodsm(object descriptor stream)が含まれる。「moov」アトム712および758に、任意選択の「udta」(user data)アトム784も含めることができる。「udta」アトム784は、著作権メッセージなどの任意選択の情報をmp4バイナリ・ファイルに埋め込むのに使用することができる。
mvhdアトム772は、アトム・サイズ値と、それに続く4バイトのatomId「mvhd」ならびに日付時刻スタンプ、時間スケール値、およびファイル持続時間値を含む複数のデータ値からなる。mvhdアトムのアトム・サイズ値は、必ず108である。日付時刻スタンプは、ファイルが作成された時を示す。時間スケール値は、そのファイルの時間値を表すのに使用される毎秒のティック数を示す。ファイル持続時間値は、時間スケール値で指定される時間単位での、ファイル内の材料を表現するのに必要な総時間を示す。
図18からわかるように、iodsアトム800は、アトム・サイズ値804と、それに続く4バイトのatomId「iods」808、8ビットのバージョン値812、24ビットのフラグ値816、およびMp4fInitObjDescrデータ構造820からなる。図19からわかるように、Mp4fInitObjDescrデータ構造824は、1バイトのMP4_IOD_TAG値828、後続データ・ブロックのバイト数832、10ビットのObjectDescriptorID 836、2つのフラグ・ビット840および844、4つの予約済みビット848、ならびに5つのプロファイル・レベル表示値852、856、860、864、および868からなる。プロファイル・レベル表示値の後に、1つまたは2つのMPEG−4 ES_ID_Incデータ構造872が続く。1つのES_ID_Inc構造は、sdsm(scene description stream)に対応するtrakアトム790のES_ID値を示す。第2のES_ID_Inc構造は、存在する場合に、odsm(object descriptor stream)に対応するtrakアトム790のES_IDを示す。第2のES_ID_Inc構造は、odsmが存在する場合に限って存在する。図20からわかるように、各ES_ID_Incデータ構造は、1バイトのES_ID_IncTag値880、後続データ内のバイト数884(必ず4)、および32ビットのES_ID値888からなる。
図21からわかるように、各trakアトム900は、アトム・サイズ値903と、それに続く4バイトのatomId「trak」906、「tkhd」(track header)アトム910、および「mdia」(media)アトム912からなる。odsm(object descriptor stream)を表すtrakアトムの場合に、trakアトムに、「tref」(track reference)アトム940も含まれる。遅れた開始を有するトラックの場合に、「edts」(edit list)アトム945が、トラックを開始する時を示すために設けられる。mdiaアトム912は、「mdhd」(media header)アトム915、「hdlr」(handler)アトム918、「minf」(media information)アトム920、「stbl」(sample tables)アトム933、およびメディア情報ヘッダ・アトム936からなる。ラベル「*mhd」は、「nmhd」(sdsmトラックおよびodsmトラック)、「smhd」(オーディオ・トラック)、「vmhd」(ビジュアル・トラック)などを含む複数のメディア情報ヘッダ・アトム型のいずれか1つを表す。
tkhdアトム910、mdhdアトム915、およびhdlrアトム918に、trackId番号、時刻日付スタンプ、メディア時間スケール、およびメディア持続時間値を含む複数のデータ値が含まれる。各トラックは、それ自体の時間スケールを有し、この時間スケールは、mvhdアトム772で指定されるグローバル時間スケールと異なるものとすることができる。
図22からわかるように、sample tablesアトム950は、アトム・サイズ値954と、それに続く、4バイトのatomId「stbl」957、一連のサンプル・テーブル・アトム960、963、966、970、974、および978からなる。さまざまなサンプル・テーブル・アトムは、任意の順序とすることができる。これには、「stsc」(sample−to−chunk table)アトム960、「stts」(time−to−sample table)アトム963、「stco」(chunk offset table)アトム966、「stsz」(sample size table)アトム970、可能な「stss」(sync sample table)アトム974、および「stsd」(sample description table)アトム978が含まれる。これらのサンプル・テーブル・アトムのそれぞれに、関連するmdatアトム706および718に保管されたバイナリ・メディア・データ736および748のプロパティを記述するデータが含まれる。
sample−to−chunk tableアトム(stscアトム)960は、アトム・サイズ値、4バイトのatomId(「stsc」)、32ビット符号なし整数(numStscEntries)、およびsample−to−chunkデータ・レコードのシーケンスが含まれる。numStscEntriesの値は、sample−to−chunkデータ・レコードのシーケンスの項目数を指定する。各sample−to−chunkデータ・レコードは、開始チャンク番号、チャンクごとのサンプル数、およびサンプル記述インデックスを指定する、3つの32ビット符号なし整数からなる。サンプル記述インデックスは、sample description table978内の項目へのインデックスである。チャンクごとのサンプル数は、開始チャンク番号によって指定されるチャンク736内および次の項目によって指定される開始チャンクの前のすべての後続チャンク内のサンプル748の個数を指定する。
time−to−sample tableアトム(sttsアトム)963は、アトム・サイズ値、4バイトのatomId(「stts」)、32ビット符号なし整数(numSttsEntries)、およびtime−to−sampleデータ・レコードのシーケンスからなる。numSttsEntriesの値は、time−to−sampleデータ・レコードのシーケンス内の項目数を指定する。各time−to−sampleデータ・レコードは、サンプル・カウントおよびトラック時間スケール単位でのサンプル持続時間を指定する、2つの32ビット符号なし整数からなる。サンプル・カウント値は、対応するサンプル持続時間を有する連続するサンプル748の個数を指定する。
chunk offset tableアトム(stcoアトム)966は、アトム・サイズ値、4バイトのatomId(「stco」)、32ビット符号なし整数(numStcoEntries)、およびチャンク・オフセット値のシーケンスからなる。numStcoEntriesの値は、チャンク・オフセット値のシーケンス内の項目の個数を指定する。このシーケンスの各項目は、mp4ファイルの先頭と、mdatアトム718内の対応するチャンク736の先頭との間のバイト数を指定する1つの32ビット符号なし整数からなる。
sample size tableアトム(stszアトム)970は、アトム・サイズ値、4バイトのatomId(「stsz」)、このtrakアトム900に関連するすべてのメディア・データ・サンプル748のサイズを指定する32ビット符号なし整数(iSampleSize)からなる。このtrakアトムに関連するメディア・データ・サンプルが、サイズにおいてすべて同一ではない場合に、iSampleSizeの値は、0と指定され、その次に、32ビット符号なし整数(numStszEntries)およびサンプル・サイズ値のシーケンスが続く。numStszEntriesの値は、サンプル・サイズ値のシーケンス内の項目の個数を指定する。このシーケンスの各項目は、このtrakアトム900に関連するメディア・データ718内の対応するサンプル748内のバイト数を指定する1つの32ビット符号なし整数からなる。
sync sample tableアトム(stssアトム)974は、存在する場合に、アトム・サイズ値、4バイトのatomId(「stss」)、32ビット符号なし整数(numStssEntries)、およびサンプル・インデックス値のシーケンスからなる。numStssEntriesの値は、サンプル・インデックス値のシーケンス内の項目の個数を指定する。このシーケンスの各項目は、「ランダム・アクセス・サンプル」のサンプル・インデックスを指定する1つの32ビット符号なし整数からなる。ランダム・アクセス・サンプル・インデックスは、このtrakアトム900に関連するメディア・データ内の、メディア・プレイヤが前のサンプルに無関係にメディア・データの処理を開始できる点に対応するメディア・データ・サンプル748を識別する。このテーブルのサンプル・インデックス値は、単調に増加しなければならない。
sample description tableアトム(stsdアトム)978は、アトム・サイズ値、4バイトのatomId(「stsd」)、32ビット符号なし整数(numStsdEntries)、およびサンプル記述データ・レコードのシーケンスからなる。numStsdEntriesの値は、サンプル記述データ・レコードのシーケンス内の項目の個数を指定する。各サンプル記述データ・レコードは、sample−to−chunkデータ・レコード内の対応するインデックスによって指定されるメディア・データ・サンプルをエンコードするのに使用された手段を指定する。サンプル記述データ・レコードのシーケンスは、通常、単一の項目を有し(numStsdEntries=1)、この項目は、メディアのタイプ(オーディオ、ビジュアル、sdsm、odsm)、オーディオ・サンプルおよびビデオ・サンプルに使用された圧縮アルゴリズムなどを指定する。各サンプル記述テーブル項目は、「mp4*」アトム982に含まれ、この「mp4*」は、「mp4s」(sdsmサンプルおよびodsmサンプル)、「mp4a」(オーディオ・サンプル)、および「mp4v」(ビジュアル・サンプル)の包括的な代理である。各「mp4*」アトム982に、「esds」(elementary stream descriptor)アトム986が含まれ、各esdsアトム986に、MPEG−4エレメンタリ・ストリーム記述子(Es_Descr)データ構造990が含まれる。
MPEG−4エレメンタリ・ストリーム記述子1000の構造を、図23に示す。このデータ構造は、1バイトのタグ(ES_DescrTag)1004と、それに続く、このデータ構造の残りのバイト数の表示1008、16ビットのES_ID値(通常は0)1012、3つの1ビット・フラグ(streamDependenceFlag、URL_Flag、およびOCRstreamFlag)1016、および5ビットのストリーム優先順位値1020からなる。3つのフラグ1016のいずれかが非0である場合に、追加のデータ値(図示せず)をストリーム優先順位値1020に続けることができる。これらの任意選択のデータ値は、本発明に必要でない。
ストリーム優先順位値1020に、デコーダ構成記述子データ構造1024および同期レイヤ構成記述子データ構造1028が続く。デコーダ構成記述子1024の構造1032を、図24に示す。このデータ構造は、1バイトのタグ(DecoderConfigDescrTag)1036と、それに続く、このデータ構造の残りのバイト数の表示1040、および一連のデータ値からなり、このデータ値には、objectType 1044、streamType 1048、upStreamビット1052、予約済みビット1056、bufferSizeDB 1060、maxBitrate 1064、およびavgBitrate 1068が含まれる。これらの値の後に、streamTypeおよびobjectTypeに依存するデコーダ固有情報データ構造1072を続けることができる。デコーダ固有情報データ構造1072は、sdsmに必要であるが、odsmには不要である。ほとんどのオーディオおよびビジュアルのメディア・データ・ストリームも、デコーダ構成記述子1032内にデコーダ固有情報データ構造を有する。
デコーダ固有情報1072の構造1076を、図25に示す。このデータ構造は、1バイトのタグ(DecoderSpecificInfoTag)1080と、それに続く、このデータ構造の残りのバイト数の表示1084からなる。残りのバイトは、objectTypeおよびstreamTypeに依存する。sdsm(scene description streamまたはBIFS)の場合に、デコーダ固有情報1072および1076に、nodeID値のエンコードに使用されたビット数の表示と、routeID値のエンコードに使用されたビット数の表示が含まれる。これらの値のそれぞれが、5ビットの符号なし整数によって表される。
同期レイヤ構成記述子1028の構造1088を、図26に示す。このデータ構造は、1バイトのタグ(SLConfigDescrTag)1090と、それに続く、このデータ構造の残りのバイト数の表示1094(必ず1)および単一のデータ・バイト(値2すなわち「predefined」)1098からなり、このデータ・バイトは、同期レイヤに事前定義の構成が使用されなければならないことを示す。
3.0 Scene Description Stream(sdsm)
特定のタイプのオーディオ・データ・ストリームおよびビジュアル・データ・ストリームのエンコードまたはデコードに使用される手段は、XMT−A仕様およびMPEG−4 Intermedia File仕様によって決定されず、したがってこれらのストリームをエンコードする形の詳細には、本明細書では触れない。XMT−A文書に、stream description stream(sdsm)およびobject description stream(odsm)の内容に関する詳細な情報が含まれる。その結果、各XMT−A文書は、MPEG−4 Intermedia Fileに含まれるsdsmストリームおよびodsmストリームに密接に関連する。このセクションでは、sdsmデータの構造を説明し、次のセクションで、odsmデータの構造を説明する。
他のメディア・データ・ストリームと同様に、sdsmデータは、1つまたは複数のチャンクからなり、各チャンクは、1つまたは複数のサンプルからなる。図27からわかるように、sdsmバイナリ・チャンク1100内の各サンプルは、「コマンド・フレーム」1110として定義される。各コマンド・フレーム1110は、バイト整列される。図28からわかるように、各コマンド・フレーム1110は、1つまたは複数の「BIFSコマンド」1120からなる。BIFSは、「BInary Format for Streams」の略である。各BIFSコマンド1120に、継続ビット1130および1140が続く。継続ビットの値が(1)1130である場合に、もう1つのBIFSコマンドが続く。そうでない場合1140に、継続ビットに、最後のバイトを完了するのに十分な個数のヌル・パディング・ビット1150が続く。個々のBIFSコマンド1120は、コマンド・フレームの最初のBIFSコマンドを除いて、一般にバイト整列されない。
図29から32からわかるように、4タイプのBIFSコマンドすなわち「挿入」、「削除」、「置換」、「シーン置換」がある。BIFS挿入コマンド1200は、2ビットの挿入コード(値=「00」)1206と、それに続く2ビットのパラメータ型コード1210および挿入コマンド・データ1216からなる。BIFS削除コマンド1220は、2ビットの削除コード(値=「01」)1226と、それに続く2ビットのパラメータ型コード1230および削除コマンド・データ1236からなる。BIFS置換コマンド1240は、2ビットの置換コード(値=「10」)1244と、それに続く2ビットのパラメータ型コード1250および置換コマンド・データ1260からなる。BIFSシーン置換コマンド1270は、2ビットのシーン置換コード(値=「11」)1280と、それに続くBIFSシーン・データ構造1290からなる。
図33から35からわかるように、3タイプのBIFS挿入コマンドすなわち、(a)Node Insertionコマンド、(b)Indexed Value Insertionコマンド、および(c)Route Insertionコマンドがある。挿入コマンドのタイプは、パラメータ型値1210によって決定される。Node Insertionコマンド1300は、2ビットの挿入コード(値=「00」)1304と、それに続く、2ビットのパラメータ型コード(値=「01」、型=Node)1308、nodeID値1312、2ビットの挿入位置コード1316、およびSFNodeデータ構造1324からなる。挿入位置コード1316の値が0である場合には、8ビットの位置値1320が、挿入位置コード1316に続く。nodeID値1312は、BIFSコマンドの他所で定義された更新可能なノードの組の1つを指定する。これおよび他のnodeID値をエンコードするのに使用されるビット数は、sdsmストリームのデコーダ固有情報1072で指定される。SFNodeデータ構造1324の構造は、下で説明する。
Indexed Value Insertionコマンド1328は、2ビットの挿入コード(値=「00」)1332と、それに続く、2ビットのパラメータ型コード(値=「10」、型=IndexedValue)1336、nodeID値1340、inFieldID値1344、2ビットの挿入位置コード1348、およびフィールド値データ構造1356からなる。挿入位置コード1348の値が0である場合に、8ビットの位置値1352が、挿入位置コード1348に続く。nodeID値1340は、BIFSコマンドの他所で定義された更新可能なノードの組の1つを指定する。nodeID値1340のエンコードに使用されるビット数は、sdsmストリームのデコーダ固有情報1072で指定される。inFieldID値1344は、nodeID1340の値によって指定されるBIFSノードのデータ・フィールドの1つを識別する。inFieldID値1344をエンコードするのに使用されるビット数は、MPEG−4 Systems仕様に含まれるテーブルに依存する。
フィールド値データ構造の内容は、指定されたBIFSノードの指定されたデータ・フィールドのフィールド・データ型(boolean、integer、float、string、nodeなど)に依存する。これは、1ビットのように単純なものまたはSFNodeデータ構造のように複雑なものとすることができる。各BIFSノードの各データ・フィールドのフィールド・データ型は、MPEG−4 Systems仕様に含まれるテーブルで指定される。
Route Insertionコマンド1360は、2ビットの挿入コード(値=「00」)1364と、それに続く、2ビットのパラメータ型コード(値=「11」、型=Route)1368、「isUpdateable」ビット1372、departureNodeID値1380、departureFieldID値1384、arrivalNodeID値1388、およびarrivalFieldID値1392からなる。「isUpdateable」ビットの値が(1)である場合に、routeID値1376が、「isUpdateable」ビット1372に続く。departureNodeID値1380およびarrivalNodeID値1388のエンコードに使用されるビット数は、sdsmストリームのデコーダ固有情報1072で指定される。departureFieldID値1384のエンコードに使用されるビット数およびarrivalFieldID値1392のエンコードに使用されるビット数は、MPEG−4 Systems仕様に含まれるテーブルに依存する。
図36から38からわかるように、3タイプのBIFS削除コマンドすなわち(a)Node Deletionコマンド、(b)Indexed Value Deletionコマンド、および(c)Route Deletionコマンドがある。削除コマンドのタイプは、パラメータ型値1230によって決定される。Node Deletionコマンド1400は、2ビットの削除コード(値=「00」)1406と、それに続く、2ビットのパラメータ型コード(値=「00」、型=Node)1412およびnodeID値1418からなる。nodeID値1418は、BIFSコマンドの他所で定義された更新可能なノードの組の1つを指定する。nodeID値1418のエンコードに使用されるビット数は、sdsmストリームのデコーダ固有情報1072で指定される。
Indexed Value Deletionコマンド1424は、2ビットの削除コード(値=「01」)1430と、それに続く、2ビットのパラメータ型コード(値=「10」、型=Indexed Value)1436、nodeID値1442、inFieldID値1448、および2ビットの削除位置値1454からなる。nodeID値1418は、BISFコマンドの他所で定義された更新可能なノードの組の1つを指定する。nodeID値1418のエンコードに使用されるビット数は、sdsmストリームのデコーダ固有情報1072で指定される。
Route Deletionコマンド1466は、2ビットの削除コード(値=「10」)1472と、それに続く、2ビットのパラメータ型コード(値=「11」、型=Route)1478およびrouteID値1484からなる。routeID値1484は、BISFコマンドの他所で定義された更新可能なノードの組の1つを指定する。routeID値1484のエンコードに使用されるビット数は、sdsmストリームのデコーダ固有情報1072で指定される。
図39から42からわかるように、4タイプの置換コマンドすなわち、(a)Node Replacementコマンド、(b)Field Replacementコマンド、(c)Indexed Value Replacementコマンド、および(d)Route Replacementコマンドがある。置換コマンドのタイプは、パラメータ型値1250によって決定される。Node Replacementコマンド1500は、2ビットの置換コード(値=「10」)1504と、それに続く、2ビットのパラメータ型コード(値=「01」、型=Node)1508、nodeID値1510、およびSFNodeデータ構造1514からなる。nodeID値1510は、BIFSコマンドの他所で定義された更新可能なノードの組の1つを指定する。nodeID値1510のエンコードに使用されるビット数は、sdsmストリームのデコーダ固有情報1072で指定される。SFNodeデータ構造1514の構造は、下で説明する。
Field Replacementコマンド1520は、2ビットの置換コード(値=「10」)1524と、それに続く、2ビットのパラメータ型コード(値=「01」、型=Field)1528、nodeID値1530、inFieldID値1534、およびフィールド値データ構造1538からなる。nodeID値1530は、BIFSコマンドの他所で定義された更新可能なノードの組の1つを指定する。nodeID値1530のエンコードに使用されるビット数は、sdsmストリームのデコーダ固有情報1072で指定される。inFieldID値1534は、nodeID1530の値によって指定されるBIFSノードのデータ・フィールドの1つを識別する。inFieldID値1534のエンコードに使用されるビット数は、MPEG−4 Systems仕様に含まれるテーブルに依存する。
Indexed Value Replacementコマンド1540は、2ビットの置換コード(値=「10」)1544と、それに続く、2ビットのパラメータ型コード(値=「10」、型=IndexedValue)1548、nodeID値1550、inFieldID値1554、2ビットの置換位置コード1558、およびフィールド値データ構造1564からなる。置換位置コード1558の値が0である場合に、8ビットの位置値1560が、置換位置コード1558に続く。nodeID値1550は、BIFSコマンドの他所で定義された更新可能なノードの組の1つを指定する。nodeID値1550のエンコードに使用されるビット数は、sdsmストリームのデコーダ固有情報1072で指定される。inFieldID値1554は、nodeID1550の値によって指定されるBIFSノードのデータ・フィールドの1つを識別する。inFieldID値1554のエンコードに使用されるビット数は、MPEG−4 Systems仕様に含まれるテーブルに依存する。
Route Replacementコマンド1570は、2ビットの置換コード(値=「10」)1574と、それに続く、2ビットのパラメータ型コード(値=「11」、型=Route)1578、routeID値1580、departureNodeID値1584、departureFieldID値1588、arrivalNodeID値1590、およびarrivalFieldID値1594からなる。routeID値1580は、BIFSコマンドの他所で定義された更新可能なノードの組の1つを指定する。routeID値1580のエンコードに使用されるビット数は、sdsmストリームのデコーダ固有情報1072で指定される。departureNodeID値1584およびarrivalNodeID値1590のエンコードに使用されるビット数は、sdsmストリームのデコーダ固有情報1072で指定される。departureFieldID値1588のエンコードに使用されるビット数およびarrivalFieldID値1594のエンコードに使用されるビット数は、MPEG−4 Systems仕様に含まれるテーブルに依存する。
図32からわかるように、BIFSシーン置換コマンド1270は、2ビットのシーン置換コード(値=「11」)1280と、それに続くBIFSシーン・データ構造1290からなる。図43からわかるように、BIFSシーン・データ構造1600は、6ビットの予約済みフィールド1610、2つの1ビット・フラグ(USENAMES 1620およびprotoList 1630)、SFTopNodeデータ構造1640、および1ビット・フラグ(hasRoutes)1650からなる。protoListフラグ1630が真(1)の場合に、MPEG−4 Systems仕様で定義された追加データが、protoListフラグに続く。SFTopNodeデータ構造1640は、図44から48に示されたSFNodeデータ構造の特殊な例である。hasRoutesフラグ1650が真(1)の場合に、Routesデータ構造1660が、hasRoutesフラグに続く。Routesデータ構造の構造を、図49から51に示す。
図44、45、および46に示されているように、SFNodeデータ構造は、3つの形すなわち、(a)再利用、(b)マスク・ノード、および(c)リスト・ノードの1つを有することができる。3つの形のすべてが、1ビットのフラグ(isReused)から始まる。再利用されるSFNode1700の場合に、isReusedフラグの値は「1」(真)1704であり、SFNodeデータ構造の残りは、nodeIDref値1708からなる。nodeIDref1708の値は、sdsmデータの他所で定義された更新可能なSFNodeのnodeID値と一致しなければならない。
isReusedFlagが偽(0)1712および1732の場合に、SFNode型は、maskAccessフラグ・ビット1722および1742の値に応じて、図45および46に示された2つの形の1つを有することができる。どちらの場合でも、SFNodeのデータに、ローカル・ノード型値(localNodeType)1714および1734、1ビットのフラグ(isUpdateable)1716および1736、ならびに第2の1ビットのフラグ(maskAccess)1722および1742が含まれる。ローカル・ノード型1714および1734のエンコードに使用されるビット数は、MPEG−4 Systems仕様で指定されるテーブルに依存する。isUpdateableフラグ1716および1736が真(1)の場合に、nodeID値1718および1738がisUpdateableフラグに続く。isUpdateableフラグ1716および1736が真(1)であり、関連するBIFSシーン・データ構造1600のUSENAMESフラグ1620も真(1)である場合に、ヌル終端ストリング(「name」)1720および1740が、nodeID値1718および1738に続く。
maskAccessビットが真(1)1722の場合に、SFNodeは、「マスク・ノード」構造1710を有する。この場合に、図45に示されているように、maskAccessビット1722に、localNodeType 1714の値によって与えられるノード型を有するBIFSノードのMPEG−4仕様で定義されたnFieldsプロパティ・フィールドごとに1つの、マスク・ビット1726の順序付きシーケンスが続く。これらのマスク・ビットのうちの1つが真(1)である場合のそれぞれで、マスク・ビットに、localNodeType1734によって決定されるフィールド・データ型(integer、boolean、string、nodeなど)に従ってエンコードされたバイナリ・フィールド値1728、フィールド番号(マスク・ビットのシーケンス内の位置)、およびMPEG−4仕様で定義されたテーブルが続く。
maskAccessビットが偽(0)である場合1742に、SFNodeは、「リスト・ノード」構造1730を有する。この場合に、図46に示されているように、maskAccessビット1742に、1つまたは複数のフィールド参照レコードが続く。各フィールド参照レコードは、1ビットの終了フラグ1744および1750から始まる。終了フラグが偽(0)である場合1744に、終了フラグ1744に、ローカル・ノード型1734について定義されたプロパティ・フィールドのフィールド参照インデックス番号(fieldRef)1746が続き、fieldRef値1746に、ローカル・ノード型1734によって決定されるフィールド・データ型(integer、boolean、string、nodeなど)およびfieldRef値1746によって示されるプロパティ・フィールドに従ってエンコードされたバイナリ・フィールド値1748が続く。fieldRef値1746のエンコードに使用されるビット数は、MPEG−4 Systems仕様で定義されたテーブルによって決定される。終了フラグが真(1)である場合1750に、フィールド値のリストが終了する。
SFNode構造に含まれる各プロパティ・フィールド値は、単一のデータ値(SFFieldデータ構造)または複数のデータ値(MFFieldデータ構造)からなるものとすることができる。各MFFieldデータ構造に、0個以上のSFFieldコンポーネントが含まれる。図47および図48からわかるように、MFField構造には、isListビット1766および1786の値に基づいて、リスト形式1760およびベクトル形式1780の2つの形がある。両方の形式が、1ビットの予約済みビット1762および1782と、それに続くisListビット1766および1786から始まる。
isListビットが、値(1)を有する場合1766に、MFFieldデータ構造は、リスト形式1760を有する。この場合に、isListビット1766に、1ビットのendFlag値1770および1772のシーケンスが続く。endFlagビットの値が「0」である場合1770に、endFlagビットに、SFFieldデータ構造1774が続く。endFlagビットの値が「1」である場合1772に、MFFieldデータ構造が終わる。
isListビットが、値(0)を有する場合1786に、MFFieldデータ構造は、ベクトル形式1780を有する。この場合に、isListビットに1786、5ビットのフィールド(nBits)1790が続き、このフィールドは、次のフィールド・カウント値(nFields)1792のビット数を指定する。これに、nFields個のSFField構造1796のシーケンスが続く。
各SFField値の構造は、MPEG−4 Systems仕様で指定されるテーブルによって示されるように、対応するプロパティ・フィールドに関連する特定のフィールド・データ型に依存する。たとえば、booleanフィールドは、単一ビットからなる。integer、float、string、SFNodeを含む他の事例が、MPEG−4 Systems仕様で定義され、説明されている。
BIFSシーン・データ構造1600の最後のコンポーネントが、任意選択のRoutesデータ構造1660である。図49および50からわかるように、Routesデータ構造には、リスト形式1800およびベクトル形式1830の2つの形がある。Routesデータ構造の両方の形式が、1ビットのリスト・フラグ1805および1835から始まる。リスト・フラグの値が真(1)である場合1805に、Routesデータ構造は、リスト形式1800を有する。この場合に、リスト・ビット1805に、1つまたは複数のRouteデータ構造1810が続き、各Routeデータ構造1810に、1ビットのmoreRoutesフラグ1815および1820が続く。moreRoutesフラグの値が真(1)の場合1815に、もう1つのRouteデータ構造1810が続く。moreRoutesフラグの値が偽(0)の場合1820に、Routesデータ構造1800が終了する。
Routesデータ構造のリスト・フラグの値が偽(0)である場合1835に、Routesデータ構造は、ベクトル形式1830を有する。この場合に、リスト・ビット1835に、5ビットのnBitsフィールド1840が続く。nBitsフィールドに含まれる符号なし整数値は、それに続くnumRoutes値1845のエンコードに使用されたビット数を指定する。numRoutes値1845でエンコードされた符号なし整数は、numRoutes値1845に続くRouteデータ構造1850の個数を指定する。
図51からわかるように、Routeデータ構造1860は、1ビットのフラグ(isUpdateable)1865、outNodeID値1880、outFieldRef値1885、inNodeID値1890、およびinFieldRef値1895からなる。isUpdateableフラグ1865の値が真(1)である場合に、isUpdateableフラグ1865に、routeID値1870が続く。isUpdateableフラグ1865の値が真(1)であり、対応するBIFSシーン・データ構造1600のUSENAMESフラグ1620の値も真(1)である場合に、routeID値1870に、ヌル終端ストリング(routeName)1875が続く。outNodeID値、inNodeID値、およびrouteID値のエンコードに使用されるビット数は、sdsmストリームのデコーダ固有情報1072で指定される。outFieldRefおよびinFieldRefのエンコードに使用されるビット数は、MPEG−4 Systems仕様で定義されるテーブルによって決定される。
4.0 Object Descriptor Stream(odsm)
他のMPEG−4エレメンタリ・ストリームと同様に、odsm(object descriptor stream)は、1つまたは複数のチャンク736のシーケンスに含まれる。図52から53からわかるように、各odsmチャンク1900は、odsmサンプル1920のシーケンスからなり、各odsmサンプル1940は、odsmコマンド1960のシーケンスからなる。各odsmチャンク1900のodsmサンプル1920の個数は、object descriptor streamのtrakアトム790および900のsample−to−chunk tableアトム(stsc)960の内容によって決定される。各odsmサンプル1940のodsmコマンド1960の個数は、object descriptor streamのtrakアトム790および900のsample size tableアトム(stsz)970によって決定される。
2つの可能なodsmコマンドすなわち、ObjectDescriptorUpdateコマンドおよびObjectDescriptorRemoveコマンドがある。図54からわかるように、ObjectDescriptorUpdateコマンド2000は、1バイトのObjectDescriptorUpdateTag 2010、コマンドの残りのバイト数の表示(numBytes)2020、およびObjectDescriptors 2030のシーケンスからなる。ObjectDescriptorの構造を、図56から57に要約した。図55からわかるように、ObjectDescriptorRemoveコマンド2040は、1バイトのObjectDescriptorRemoveTag 2050、コマンドの残りのバイト数の表示(numBytes)2060、objectDescriptorId値2070のシーケンス、および2ビットから6ビットのパディング・ビット2080からなる。
各numBytes値2020および2060は、odsmコマンドの残りのバイト数を指定する。numBytesの値が128未満である場合に、この値は、単一のバイトでエンコードされる。そうでない場合には、numBytesの値は、サイズ・バイトのシーケンスでエンコードされる。各サイズ・バイトの上位ビットは、別のサイズ・バイトが続くかどうかを示す。この上位ビットが「1」である場合には、次のサイズ・バイトが続く。各サイズ・バイトの残りの7ビットは、numBytesの結果の符号なし整数値の7ビットを指定する。
各objectDescriptorId値2070は、10ビットでエンコードされ、ObjectDescriptorRemoveコマンド2040で見つかる10ビットのobjectDesciptorId値のシーケンスは、バイトのシーケンスにパックされる。objectDescriptorId値の個数が4の倍数でない場合には、このコマンドの最後のバイトを充てんするために、2個、4個、または6個のヌル・ビット2080が、最後のobjectDescriptorId値に続く。
図56からわかるように、ObjectDescriptorUpdateコマンド2000内のObjectDescriptor 2100は、1バイトのMP4_OD_Tag 2108と、それに続く、numBytes値2116、10ビットのObjectDescriptorID値2124、1ビットのURL_Flag値2132、5ビットの予約済みフィールド(0x1f)2140、およびES_Descrデータ構造またはEsIdRefデータ構造2148のいずれかからなる。ObjectDescriptorのこの形式では、URL_Flag 2132の値が、必ず偽(0)である。numBytes値2116は、このオブジェクト記述子の残りを含むバイト数を指定し、これは、ObjectDescriptorUpdateコマンド2000またはObjectDescriptorRemoveコマンド2040に見られるnumBytes値2020および2060について指定されたものと同一の形でエンコードされる。
ES_Descrデータ構造1000の構造を、図23に示した。図57からわかるように、EsIdRefデータ構造2160は、1バイトのES_ID_RefTag 2170、numBytes値2180、および16ビットのエレメンタリ・ストリームID(ES_ID)値2190からなる。この場合に、numBytesの値は、必ず「2」であり、この値は、8ビット整数として指定される。
本発明の動作を、全般的に図58に示す。処理2200は、MPEG−4 Intermediaファイル2210の内容に基づいて、XMT−A文書2220および1組のメディア・データ・ファイル2230を作成する。入力MPEG−4 Intermediaファイル2210を、「mp4バイナリ・ファイル」または「mp4ファイル」とも称する場合がある。出力XMT−A文書は、XMT−A仕様ISO/IEC 14496−1:2000 Amd.2に基づくテキスト・ファイル、またはそのようなファイルを表すデータ構造の組からなるものとすることができる。出力メディア・データ・ファイル2230は、mp4ファイル2210に含まれるオーディオ・データ、ビデオ・データ、およびイメージ・データを表す。出力メディア・データ・ファイルのそれぞれは、出力XMT−A文書2220に含まれるStreamSource参照670によって識別される。メディア・データ・ファイル2230の個数は、0とすることができる。
本発明2200によって実行される論理動作は、(1)コンピュータ・システムで稼動するコンピュータ実施されるステップのシーケンスとして、または(2)コンピューティング・システム内の相互接続された機械モジュールとして、あるいはその両方として実施することができる。実施形態は、本発明を適用するシステムの性能要件に依存する選択の問題である。したがって、本明細書で説明する本発明の実施形態を構成する論理動作を、その代わりに動作、ステップ、またはモジュールと呼ぶ。
さらに、本発明によって実行される動作を、コンピュータ可読媒体として実施されたコンピュータ可読プログラムとすることができる。制限ではなく例として、コンピュータ可読媒体に、コンピュータ記憶媒体および通信媒体が含まれる。コンピュータ可読媒体に、コンピュータ可読命令、データ構造、プログラム・モジュール、または他のデータなどの情報の保管の方法または技術で実施された、揮発性および不揮発性の、取外し可能および取り外し不能の媒体が含まれる。コンピュータ記憶媒体に、RAM、ROM、EEPROM、フラッシュ・メモリ、または他のメモリ技術、CD−ROM、ディジタル多用途ディスク(DVD)、または他の光ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージ、または他の磁気記憶デバイス、あるいは所望の情報の保管に使用でき、コンピュータによってアクセス可能な他のすべての媒体が含まれるが、これに制限はされない。通信媒体は、通常、搬送波または他のトランスポート機構などの変調されたデータ信号内でコンピュータ可読命令、データ構造、プログラム・モジュール、または他のデータを実施し、通信媒体には、すべての情報配信媒体が含まれる。用語「変調されたデータ信号」は、信号内で情報をエンコードする形で、その特性の1つまたは複数を設定または変更された信号を意味する。制限ではなく例として、通信媒体に、有線接続または直接配線接続などの有線媒体と、音響、RF、赤外線、および他の無線媒体などの無線媒体が含まれる。上記のいずれかの組合せも、コンピュータ可読媒体の範囲に含まれなければならない。
図58からわかるように、出力XMT−A文書2220およびメディア・データ・ファイル2230を作成する処理は、2ステップで達成される。第1ステップでは、mp4ファイル−中間文書コンバータ2240が、入力mp4ファイル2210を解釈し、中間文書2245の組およびメディア・データ・ファイル2230の組を作成する。中間文書2245の組は、mp4−file文書2250およびmp4−bifs文書2260からなる。第2ステップでは、中間文書−XMT−Aコンバータ2270が、中間文書2245に基づいて、出力XMT−A2220を生成する。
この処理2200をこの2つのステップに分割する理由の1つが、入力mp4ファイル2210が、出力XMT−A文書2220およびメディア・データ・ファイル2230によって表されるものと同一の情報を表すが、入力mp4ファイル2210の編成および構造が、出力XMT−A文書の編成および構造と大きく異なることである。たとえば、mp4ファイル2210の構造は、Quicktimeメディア・データ・ファイルの構造に密接に関連するが、XMT−A文書2220の構造は、Quicktimeメディア・データ・ファイルの特性を全く有しない。XMT−A文書2220には、scene description stream(sdsm)およびobject descriptor stream(odsm)の記述が含まれるが、これらを任意の順序で混合することができる。mp4ファイル2210にも、sdsmおよびodsmの記述が含まれるが、これらのそれぞれが、時間的に順序付けられたサンプルの別々のストリームとして表される。
mp4ファイル2210の構造および編成が、XMT−A文書2220の構造および編成と非常に異なるので、mp4ファイル2210に基づいてXMT−A文書2220を作成する処理を、2つのステップ(a)デコードおよび(b)再編成に分割することが有利である。第1ステップで、mp4ファイルにエンコードされたバイナリ情報が、解釈され、mp4ファイル、sdsm、およびodsmの構造および編成を表す構造化文書の組を作成するのに使用される。他のバイナリ・データは、単に新しいメディア・データ・ファイルにコピーされる。このステップは、XMT−A文書の定義にかまわずに実行することができる。第2ステップでは、第1ステップで作成された構造化文書を使用して、XMT−A文書を作成する。このステップは、この情報がmp4ファイルのバイナリ形式で表現された形にかまわずに実行することができる。
mp4ファイル2210に基づいてXMT−A文書2220を作成する処理をこの2つのステップ2240および2270に分割するという目的を達成するために、(a)mp4ファイルの構造および編成、(b)mp4ファイルで表されるstream description stream(sdsm)の構造および編成、ならびに(c)mp4ファイルで表されるobject descriptor stream(odsm)の構造および編成を表す新しい構造化文書2245を定義する必要がある。これは、3つの新しいタイプの構造化文書すなわち、mp4ファイルを表す構造間文書、sdsmを表す構造化文書、およびodsmを表す構造化文書を定義することによって達成することができる。もちろん、mp4ファイルおよびsdsmを表すのに必要な構造化文書は、比較的複雑であるが、odsmを表すのに必要な構造化文書は、非常に単純である。その結果、odsmの記述を、mp4ファイルを表すのに使用される構造化文書に組み込むことが便利である。その結果、本発明のこの実施形態で、mp4ファイルおよびodsmの構造化文書とsdsmの構造化文書という2つの新しい構造化文書が導入される。この2つの構造化文書は、mp4−file文書2250およびmp4−bifs文書2260として識別される。この構造化文書を、集合的に中間文書2245と呼ぶ。
2つのタイプの構造化文書の使用が、便利さの問題として選択されたことに留意されたい。同一の目的を、3タイプの構造化文書(mp4ファイルだけ、odsmだけ、およびsdsmだけ)を定義することによって達成することができ、3タイプの情報のすべてを、単一の合成構造化文書に合併することができる。
本発明の一実施形態で、再編成された情報を表現するために作成される構造化文書の特定のタイプは、「XML」(eXtensible Markup Language)技術に基づく。これが有利なのは、下記の理由による。
(a)XMT−A文書の定義が、XML技術に基づく
(b)XML技術は、構造化文書を表す標準化された手段を提供する
(c)XML技術に基づく構造化文書を扱う標準化されたソフトウェア・ツールが存在する
したがって、本発明の一実施形態で、XMT−Aファイルに含まれる情報を再編成する処理が、XMLからXMLへの変換になる。さらに、XMLファイルを扱う標準化されたソフトウェアの存在によって、同一の機能を実行する新しい特殊化されたソフトウェアを開発する必要なしに、入力XMT−A文書ならびに中間文書を管理することが可能になる。
この実施形態は、中間文書を表すのにXML技術を使用することに基づくが、他のタイプの構造化文書を使用する、本発明の代替実施形態を作成することが可能である。
次の材料で、(1)mp4−file文書2250の構造、(2)mp4−bifs文書2260の構造、(3)XMT−A−中間文書コンバータ2240の動作、および(4)中間文書−mp4ファイル・コンバータ2270の動作を説明する。
5.0 mp4−file文書
図59からわかるように、mp4−file文書2300の構造は、mp4バイナリ・ファイル700の構造に非常に似ている。mp4file文書2300には、1つまたは複数のメディア・データ(mdat)要素2310の組と、単一のmoov要素2320が含まれる。moov要素2320に、mp4fiods(mp4 file initial object descriptor)要素2330と、1つまたは複数のtrak要素2350が含まれる。moov要素2320に、任意選択のユーザ・データ(udta)要素2340を含めることもできる。udta要素2340は、著作権表示などの情報を含めるのに使用される。mvhdアトム772のプロパティは、moov要素2320の属性によって表される。
図60からわかるように、mp4fiods要素2360は、objectDescriptorID属性2370を所有する。mp4fiods要素2360は、図60に示されていない他の複数の属性も所有する。これらの追加の属性に、boolean属性「includeInlineProfilesFlag」、integer属性「sceneProfileLevelIndication」、「ODProfileLevelIndication」、「audioProfileLevelIndication」、「visualProfileLevelIndication」、および「graphicsProfileLevelIndication」が含まれる。mp4fiods要素2360に、1つまたは複数のEsIdInc要素2380も含まれる。各EsIdInc要素2380は、関連するtrak要素2350のtrackID属性と一致するtrackID属性2390を所有する。
図61からわかるように、各mdat要素2400に、sdsm要素2410、odsm要素2420、およびmediaFile要素2430のうちの1つまたは複数を含めることができる。これらの要素のそれぞれは、関連するtrak要素2350のtrackID属性と一致する独自の「trackID」属性を所有する。各mediaFile要素2430は、関連するメディア・データ(オーディオ・データ、ビジュアル・データなど)を含む外部バイナリ・ファイルのファイル名を指定する「name」属性を有する。各sdsm要素2410は、関連するmp4−bifs文書2260を表すXMLファイルの名前を指定する「xmlFile」属性を有する。一実施形態で、mp4−file文書またはmp4−bifs文書あるいはその両方を表すXMLファイルの作成が、診断目的に有用である場合があるが、そのようなファイルは、本発明の動作に必要ではない。
図62および64からわかるように、各sdsm要素2440および各mediaFile要素2480に、1つまたは複数のチャンク要素2450および2490が含まれる。各チャンク要素2450および2490は、既知の場合にバイナリ・データの関連するブロックのバイト数を示す「size」属性を所有する。各チャンク要素2450および2490は、既知の場合に、バイナリsdsmデータ・ファイルまたはメディア・データ・ファイルの先頭と、そのバイナリsdsmデータ・ファイルまたはメディア・データ・ファイル内の現在のチャンクのデータの先頭との間のバイト数を示す「offset」属性も所有する。scene description stream(sdsm)を記述する追加情報が、mp4−bifs文書に含まれる。
図63からわかるように、各odsm要素2460に、1つまたは複数のodsmChunk2470要素が含まれる。各odsmChunk要素2470は、既知の場合にobject descriptor streamの関連する部分のバイト数を示す「size」属性を所有する。各odsmChunk要素2470は、既知の場合に、関連するobject descriptor streamのバイナリ・データの先頭と、そのストリーム内の現在のチャンクのデータの先頭との間のバイト数を示す「offset」属性も所有する。
図65からわかるように、各odsmChunk要素2500に、1つまたは複数のodsmSample要素2510が含まれる。図66からわかるように、各odsmSample要素2520に、1つまたは複数のodsm−command要素2530が含まれる。図67からわかるように、各odsm−command要素は、ObjectDescrUpdate要素2540またはObjectDescrRemove要素2570とすることができる。各ObjectDescrUpdate要素2540に、ObjectDescriptor要素2550が含まれ、ObjectDescrUpdate要素2540に含まれる各ObjectDescriptor要素2550に、EsIdRef要素2560が含まれる。
各odsmSample要素2510および2520は、odsmSample要素2510および2520に含まれるコマンドが実行される時を秒単位で指定する「time」属性を所有する。各ObjectDescriptor要素2550および各ObjectDescrRemove要素2570は、数値のオブジェクト記述子IDを指定する「ODID」属性2555、2575を所有する。各EsIdRef要素2560は、数値エレメンタリ・ストリームIDを指定する「EsId」属性2565を所有する。
図68に示されたtrak要素2350の構造2600は、mp4ファイル700内のtrakアトム790および900の構造に非常に類似する。各trak要素2600に、mdia要素2604が含まれる。trak要素2600に、tref(track reference)要素2636またはedts(edit list)要素2644あるいはその両方も含まれる。mp4ファイルのtkhdアトム910に類似するtkhd要素はない。その代わりに、tkhdアトム910に含まれるプロパティが、trak要素2600の属性として表現される。
mdia要素2604に、hdlr要素2608およびminf要素2612が含まれる。mdhdアトム915のプロパティは、mdia要素2604の属性として表される。minf要素2612に、dinf要素2616、stbl要素2628、およびメディア・ヘッダ要素2632が含まれる。メディア・ヘッダ要素(「*mhd」)2632は、関連するデータ・ストリームのデータの型に依存する複数の形式の1つを有することができる。sdsmまたはodsmに関連するtrak要素内のメディア・ヘッダ要素2632は、「nmhd」要素によって表される。オーディオ・ストリームに関連するtrak要素内のメディア・ヘッダ要素2632は、「smhd」要素によって表され、ビジュアル・ストリームに関連するtrak要素内のメディア・ヘッダ要素2632は、「vmhd」要素によって表される。
図69からわかるように、stbl(sample tables)要素2628および2652に、stsc(sample−to−chunk table)要素2656、stts(time−to−sample table)要素2660、stco(chunk offset table)要素2664、stsz(sample size table)要素2668、およびstsd(sample description table)要素2676が含まれる。stbl要素2652に、ストリーム・タイプまたはメディア・タイプに応じて、stss(sync sample table)要素2672も含めることができる。stsd要素2676に、図69で「mp4*要素」2680と表された、複数のタイプの従属要素の1つを含めることができる。sdsmストリームまたはodsmストリームに関連するtrak要素2600に含まれるstsd要素2676の場合に、stsd要素2680に、「mp4s」要素が含まれる。オーディオ・ストリームに関連するtrak要素2600に含まれるstsd要素2680の場合に、stsd要素2680に、「mp4a」要素が含まれる。ビジュアル・ストリームに関連するtrak要素2600に含まれるstsd要素2680の場合に、stsd要素2680に、「mp4v」要素が含まれる。どの場合でも、「mp4*」要素2680には、esds要素2684が含まれ、esds要素2684に、ES_Descr要素2688が含まれる。
図70からわかるように、ES_Descr要素2700に、DecoderConfigDescriptor要素2710およびSLConfigDescriptor要素2760が含まれる。DecoderConfigDescriptor要素2710に、BIFS_DecoderConfig要素2720、JPEG_DecoderConfig 2730、VisualConfig 2740、またはAudioConfig 2750を含む複数のタイプのデコーダ固有情報要素の1つを含めることができる。さまざまなタイプのデコーダ固有情報要素のそれぞれは、バイナリDecoderConfigDescriptor構造1032に含まれるDecoderSpecificInfoデータ構造1072の形式を表す。バイナリES_Descr構造1000、DecoderConfigDescriptor構造1032、SLConfigDescriptor構造1088、およびDecoderSpecificInfo構造1076のプロパティは、mp4−file文書2300の対応する要素2700、2710、2760、2720、2730、2740、および2750の属性によって表される。
6.0 mp4−bifs文書
図71からわかるように、mp4−bifs文書2800に、単一のbifsConfig要素2810と、それに続く1つまたは複数のcommandFrame要素2820のシーケンスが含まれる。図72からわかるように、各commandFrame要素2830に、1つまたは複数のmp4bifs bifsCommand要素2840が含まれる。各commandFrame要素2820および2830は、commandFrame要素に含まれるコマンドが実行される時を秒単位で指定する属性「time」を所有する。
各mp4bifs bifsCommand要素2840は、11個の可能なMPEG−4 BIFSコマンドすなわち、InsertNode、InsertIndexedValue、InsertRoute、DeleteNode、DeleteIndexedValue、DeleteRoute、ReplaceNode、ReplaceField、ReplaceIndexedValue、ReplaceRoute、およびReplaceSceneのうちの1つを表す。図73からわかるように、mp4bifs bifsCommand要素2910に、1つまたは複数のmp4bifs Node要素2920を含めることができる。11タイプのbifsCommandのうちで、InsertNode、InsertIndexedValue、ReplaceNode、ReplaceField、ReplaceIndexedValue、およびReplaceSceneに、従属mp4bifs Node要素2920を含めることができる。bifsCommand要素InsertIndexedValue、ReplaceIndexedValue、およびReplaceFieldは、従属bifsCommand要素2910を有することができる。
図74からわかるように、ReplaceScene bifsCommand要素2930に、単一の従属mp4bifs Node要素だけをを含めることができ、これは、「TopNode」要素2940でなければならない。TopNode要素2940は、MPEG−4 BIFSノードの特定のサブセットのメンバに対応する。このサブセットは、MPEG−4 Systems仕様で定義されている。さらに、ReplaceScene bifsCommand要素2930に、従属する「Routes」要素2950も含めることができ、「Routes」要素2950に、1つまたは複数の従属する「Route」要素2960を含めることができる。mp4bifs Route要素2960は、属性「routeId」、「arrivalNodeId」、「arrivalField」、「departureNodeId」、および「departureField」を有する。
可能な従属mp4bifs Node要素のほかに、各タイプのmp4bifs bifsCommand要素は、次の属性値を所有する。
1.InsertNode:「parentId」、「insertionPosition」、および「position」
2.InsertIndexedValue:「nodeId」、「inFieldName」、「insertionPosition」、「position」、および「value」
3.InsertRoute:「RouteId」、「departureNode」、「departureField」、「arrivalNode」、および「arrivalField」
4.DeleteNode:「nodeId」
5.DeleteIndexedValue:「nodeId」、「inFieldName」、「deletionPosition」、および「position」
6.DeleteRoute:「routeId」
7.ReplaceNode:「parentId」
8.ReplaceField:「nodeId」、「inFieldName」、および「value」
9.ReplaceIndexedValue:「nodeId」、「inFieldName」、「insertionPosition」、「position」、および「value」
10.ReplaceRoute:「routeId」、「departureNode」、「departureField」、「arrivalNode」、および「arrivalField」
11.ReplaceScene:「USENAMES」(boolean値)
bifsCommand要素InsertIndexedValue、ReplaceField、およびReplaceIndexedValueに関して、「inFieldName」属性によって指定されるプロパティ・フィールドが、「Node」のノード・データ型を有する(MPEG−4仕様に従って)場合に、この要素に、1つまたは複数の従属するmp4bifs Node要素2920が含まれ、「value」属性に、従属するNode要素のそれぞれに関連するノード名のリストが含まれる。
mp4bifs Node要素2920は、多数のタイプのMPEG−4 BIFSノード・データ構造の1つを表す。100個以上の異なるタイプのBIFSノードが、MPEG−4システム仕様で定義されている。MPEG−4 BIFSノードの各タイプが、特定のNodeNameおよび1組のプロパティ・フィールドを有する。
mp4bifs Node要素には、オリジナルNode要素および再利用されるNode要素という2つの基本的なタイプがある。図75からわかるように、mp4bifsオリジナルNode要素3000は、MPEG−4 Systems仕様で定義されたBIFSノードの1つのNodeNameプロパティに対応する「NodeName」によって指定される。
mp4bifsオリジナルNode要素3000は、任意選択のNodeId属性3010を有することができる。NodeId属性3010の値が指定される場合に、Node要素3000は、「再利用可能Node」として分類される。NodeId属性3010の値は、指定される場合に、1から現在のシーンで定義された再利用可能Nodeの個数までの範囲の整数である。NodeId属性3010の値が指定され、関連するReplaceSceneコマンドの「USENAMES」属性の値が「真」である場合に、そのNode要素は、「name」属性3016も有する。
NodeId属性3010およびname属性3016の他に、各オリジナルNode要素は、複数のプロパティ・フィールド属性3020を有する。各プロパティ・フィールド属性3020は、特定のNode要素のNodeNameによって識別されるノード・タイプのMPEG−4 Systems仕様で定義されたプロパティ・フィールドの1つに対応する。各プロパティ・フィールドは、boolean、integer、floatなど、定義されたフィールド・データ型を有する。可能なフィールド・データ型の組に、「SFNode」および「MFNode」が含まれる。特定のオリジナルNode要素のNodeNameが、フィールド・データ型「SFNode」および「MFNode」を有する1つまたは複数のプロパティ・フィールドを有するMPEG−4 BIFSノードに対応する場合に、そのNode要素は、1つまたは複数の従属するNode要素3030を所有することができる。そうである場合に、対応するプロパティ・フィールド属性の値は、そのプロパティ・フィールドに関連する各従属Node要素のNodeNameストリングからなる。
たとえば、NodeName「Group」を有する特定のmp4bifs Node要素が、「children」属性に関連する、NodeName「Transform2D」、「Valuator」、および「TimeSensor」を有する従属mp4bifs Node要素を所有する場合に、「children」属性の値は、「Transform2D Valuator TimeSensor」になる。
Conditional BIFSノードの特別な例で、プロパティ・フィールドの1つが、「buffer」というプロパティ・フィールド名を有し、「buffer」プロパティ・フィールドのフィールド・データ型が、「command buffer」であり、「buffer」プロパティ・フィールドの値が、1つまたは複数のBIFSコマンドからなる。この場合に、対応するmp4bifs Node要素3040のNodeNameは、「Conditional」になる。Conditional Node要素3040のNodeId属性3050およびname属性3056の値は、他のmp4bifsオリジナルNode要素3000と同様に指定することができる。従属するNode要素3030の代わりに、Conditional Node要素は、1つまたは複数の従属するbifsCommand要素3070を有し、「buffer」属性の値は、従属するbifsCommand要素3070のコマンド名の順序付きリストからなる。
たとえば、特定のConditional Node要素が、従属InsertRoute bifsCommand要素とそれに続く従属DeleteNode bifsCommand要素を所有する場合に、「buffer」属性の値は、「InsertRoute DeleteNode」になる。
オリジナルNode要素の、従属するNode要素またはbifsCommand要素を所有する能力は、BIFSコマンドおよびNode要素の階層的集合に対して再帰的に繰り返すことができる。
図77からわかるように、再利用されるNode要素3080は、「ReusedNode」というNodeNameを有する。ReusedNode要素3080は、従属する要素を有しない。ReusedNode要素3080は、「nodeRef」3090という名前の単一の属性を有する。nodeRef属性3090の値は、再利用可能なオリジナルNode要素3000および3040の一方のNodeId属性3010および3050の値と一致しなければならない。
7.0 mp4−xmtaコンバータ
図58からわかるように、処理2200は、MPEG−4 Intermediaバイナリ・ファイル(「mp4ファイル」)2210に基づいて、XMT−A文書2220および0個以上のバイナリ・メディア・データ・ファイル2230の組を作成する。
この処理は、次の2つの主ステップからなる。
a.mp4バイナリ・ファイル2210に基づく、中間xml文書の対2240および2250およびメディア・データ・ファイル2230の組の作成2240。
b.中間xml文書の対2250および2260に基づくxmta xml文書2220の作成2270。
これらのステップのそれぞれを、下で説明する。
mp4バイナリ・ファイルに基づく中間xml文書の対およびメディア・データ・ファイルの組の作成
mp4バイナリ・ファイル2210に基づいて中間xml文書の対2250および2260ならびにメディア・データ・ファイル2230の組を作成する処理2240は、次の2つの部分からなる。
(1)mp4バイナリ・ファイル2210の内容に基づいて、QtInfoデータ構造3100を作成する。
(2)結果のQtInfoデータ構造3100に基づいて、メディア・データ・ファイル2230の組および中間xml文書の対2250および2260を作成する。メディア・データ・ファイル2230の組は、空とすることができる。
本発明の代替実施形態で、この2つの部分を単一の処理に組み合わせることができ、この単一の処理では、中間xml文書2250および2260とメディア・データ・ファイル2230が、QtInfoデータ構造3100を作成せずに、mp4バイナリ・ファイル2210から直接に作成される。図14からわかるように、mp4バイナリ・ファイル700は、moovアトム712および1つまたは複数のmdatアトム706からなる。mdatアトム706は、メディア・データ・ファイル2230を作成するのに必要なデータを含むが、moovアトム712で指定される情報なしで解釈することはできない。その結果、中間xml文書2250および2260ならびにメディア・データ・ファイル2230を作成する前に、mp4バイナリ・ファイル2210の内容を表すQtInfoデータ構造3100などの一時的データ構造を作成することが有利である。
QtInfoデータ構造
QtInfoデータ構造は、mp4バイナリ・ファイル700の内容を表す。図78からわかるように、QtInfoデータ構造3100は、次のコンポーネントからなる。
1.maxNumTracks 3103:mdat配列3113およびtrak配列3120の項目数を指定する整数
2.Mp4fInitObjectDescr 3106:このQtInfoデータ構造3100によって表されるmp4バイナリ・ファイル700に含まれるmoovアトム712および754に含まれるiodsアトム778のプロパティを表すMp4fInitObjectDescrデータ構造3130のアドレス
3.mediaDataSize 3108:このQtInfoデータ構造3100によって表されるmp4バイナリ・ファイル700内のすべてのmdatアトム706および718のサイズ724の合計を指定する整数
4.numMdatAtoms 3110:このQtInfoデータ構造3100によって表されるmp4バイナリ・ファイル700に含まれるmdatアトム706の個数を指定する整数
5.mdat配列3113:maxNumTracks 3103個のmdat構造3160のシーケンスのアドレス。代替案として、これによって、mdat構造3160のmaxNumTracks 3103個のアドレスのシーケンスのアドレスを指定することができる。この配列の最初のnumMdatAtoms個のmdat構造のそれぞれは、このQtInfoデータ構造3100によって表されるmp4バイナリ・ファイル700に含まれるmdatアトム706の1つを表す
6.MoovHeader 3116:このQtInfoデータ構造3100によって表されるmp4バイナリ・ファイル700に含まれるmoovアトム712および754に含まれるmvhdアトム772のプロパティを表すMoovHeaderデータ構造3170のアドレス
7.numTracks 3118:このQtInfoデータ構造3100によって表されるmp4バイナリ・ファイル700のtrakアトム790の個数を指定する整数
8.trak配列3120:maxNumTracks 3103個のtrak構造3200のシーケンスのアドレス。代替案として、これによって、trak構造3200のmaxNumTracks 3103個のアドレスのシーケンスのアドレスを指定することができる。この配列の最初のnumTrakAtoms個のtrak構造のそれぞれは、このQtInfoデータ構造3100によって表されるmp4バイナリ・ファイル700に含まれるmoovアトム712および754に含まれるtrakアトム790の1つを表す
9.(UserData):このQtInfoデータ構造3100によって表されるmp4バイナリ・ファイル700のmoovアトム712の外の可能なudtaアトムを表す任意選択のデータ構造のアドレス
Mp4fInitObjectDescrデータ構造3130は、iodsアトム778および800のプロパティを表す。図79からわかるように、Mp4fInitObjectDescrデータ構造3130は、次のコンポーネントからなる。
1.size 3133:iodsアトム778のバイト数を示す整数
2.version 3136:iodsアトム800のversionプロパティ812およびflagsプロパティ816の値を示す整数
3.ObjectDescrID 3138:iodsアトム800に含まれるMp4fInitObjectDescrオブジェクト824のObjectDescriptorIDプロパティ836の値を示す整数
4.urlFlag 3140:iodsアトム800に含まれるMp4fInitObjectDescrオブジェクト824のURL_Flagプロパティ840の値を示すboolean値
5.urlString 3143:量「urlFlag」の値が「偽」である場合に、量「urlString」の値は0(ヌル)である。そうでない場合に、この量の値は、文字ストリングを表すヌル終端シーケンス・バイトのアドレスを指定する
6.inLineProfiles 3146:iodsアトム800に含まれるMp4fInitObjectDescrオブジェクト824のincludeInlineProfilesFlagプロパティ844の値を表すboolean値
7.ProfileLevels 3148:5つの整数の組、ODProfileLevel、sceneProfileLevel、audioProfileLevel、visualProfileLevel、およびgraphicsProfileLevelであり、iodsアトム800に含まれるMp4fInitObjectDescrオブジェクト824のプロパティ、ODProfileLevelIndication 852、sceneProfileLevelIndication 856、audioProfileLevelIndication 860、visualProfileLevelIndication 864、およびgraphicsProfileLevelIndication 868の値を示す
8.maxNumEsIdIncs 3150:EsIdInc配列3156の項目数を示す整数(「2」の値で十分である)
9.numEsIdIncs 3153:iodsアトム800に含まれるMp4fInitObjectDescrオブジェクト824のES_ID_Incオブジェクト872の個数を示す整数
10.EsIdInc配列3156:maxNumEsIdIncs個のEsIdInc構造のシーケンス、またはmaxNumEsIdIncs個のEsIdInc構造のシーケンスのアドレス
URL_Flagプロパティ840の値が「0」の場合に、値「偽」が、コンポーネント「urlFlag」3140に割り当てられ、そうでない場合には、値「真」が、量「urlFlag」3140に割り当てられる。URL_Flagプロパティ840は、「0」であると期待される。
includeInlineProfilesFlagプロパティ844の値が「0」である場合に、値「偽」が、コンポーネント「inLineProfiles」3146に割り当てられ、そうでない場合に、値「真」が、量「inLineProfiles」3146に割り当てられる。
EsIdInc構造は、2つの整数「size」および「trackID」からなる。これらの整数は、Mp4fInitObjectDescrオブジェクト824内の対応するES_ID_Incオブジェクト872および876の量「numBytes」884および「ES_ID」888の値を表す。
各mdat構造3160は、mdatアトム706および718のプロパティを表す。図80からわかるように、mdat構造3160は、次のコンポーネントからなる。
1.size 3163:mdatアトム706を含むバイト数。これは、mdatアトム718の「アトム・サイズ」プロパティ724と同一である。
2.start 3166:これは、mp4バイナリ・ファイル700の先頭とmdatアトム706の第1バイトとの間のバイト数を指定する。
3.MediaData 3168:これは、mdatアトム706に含まれるチャンク736の組のコピーを含む(size−8)バイトの配列のアドレスである。
MoovHeader構造3170は、mvhdアトム772のプロパティを表す。図81からわかるように、MoovHeader構造3170は、次の値からなる。
1.size 3173:mvhdアトム772のバイト数を示す整数
2.version & flags 3176:mvhdアトム772の「version」プロパティおよび「flags」プロパティの値を示す整数の対
3.creationTime 3178:mvhdアトム772の「creationTime」プロパティの値を示す整数
4.modifiedTime 3180:mvhdアトム772の「modificationTime」プロパティの値を示す整数
5.timeScale 3183:mvhdアトム772の「timeScale」プロパティの値を示す整数
6.duration 3186:mvhdアトム772の「duration」プロパティの値を示す整数
7.nextTrackID 3188:mvhdアトム772の「nextTrackID」プロパティの値を示す整数
各trak構造3200は、trakアトム790および900のプロパティを表す。図82からわかるように、各trak構造3200に、次のコンポーネントを含めることができる。
1.size 3202:trakアトム900のバイト数903を示す整数
2.TrackHeader 3204:このtrak構造3200によって表されるtrakアトム900に含まれるtkhdアトム910のプロパティを表すTrackHeaderデータ構造3212のアドレス
3.TrackMedia 3206:このtrak構造3200によって表されるtrakアトム900に含まれるmdiaアトム912のプロパティを表すTrackMediaデータ構造3226のアドレス
4.TrackEdit 3208:このtrak構造3200によって表されるtrakアトム900に含まれる任意選択のedtsアトム945のプロパティを表す任意選択のTrackEditデータ構造3236のアドレス
5.TrackReference 3210:このtrak構造3200によって表されるtrakアトム900に含まれる任意選択のtrefアトム940のプロパティを表す任意選択のTrackReferenceデータ構造3264のアドレス
TrackHeaderデータ構造3212は、tkhdアトム910のプロパティを表す。図83からわかるように、TrackHeaderデータ構造3212は、次のコンポーネントからなる。
1.size 3214:tkhdアトム910のバイト数を示す整数
2.version & flags 3216:tkhdアトム910の「version」プロパティおよび「flags」プロパティの値を示す整数の対
3.creationTime 3218:tkhdアトム910の「creationTime」プロパティの値を示す整数
4.modifiedTime 3220:tkhdアトム910の「modificationTime」プロパティの値を示す整数
5.duration 3222:tkhdアトム910の「duration」プロパティの値を示す整数
6.trackID 3224:tkhdアトム910の「trackID」プロパティの値を示す整数
TrackMedia構造3226は、mdiaアトム912のプロパティを表す。図84からわかるように、TrackMedia構造3226は、次のコンポーネントからなる。
1.size 3228:mdiaアトム912のバイト数を示す整数
2.MediaHeader 3230:mdiaアトム912に含まれるmdhdアトム915のプロパティを表すMediaHeader構造3300のアドレス
3.Handler 3232:mdiaアトム912に含まれるhdlrアトム918のプロパティを表すHandler構造3320のアドレス
4.MediaInfo 3234:mdiaアトム912に含まれるminfアトム920を表すMediaInfo構造3333のアドレス
TrackEdit構造3236は、edtsアトム945のプロパティを表す。図85からわかるように、TrackEdit構造3236に、次のコンポーネントが含まれる。
1.size 3238:edtsアトム945のバイト数を示す整数
2.version & flags 3240:edtsアトム945の「version」プロパティおよび「flags」プロパティの値を示す整数の対
3.EditList 3242:edtsアトム945に含まれるelstアトム948を表すEditList構造3244のアドレス
EditList構造3244は、elstアトム948のプロパティを表す。図86からわかるように、EditList構造3244は、次のコンポーネントからなる。
1.size 3246:elstアトム948のバイト数を示す整数
2.version & flags 3248:elstアトム948の「version」プロパティおよび「flags」プロパティの値を示す整数の対
3.numSegments 3250:EditSegment配列3252内のEditSegment構造3256の個数を指定する整数
4.EditSegment配列3252:これは、numSegments個のEditSegment構造3256のシーケンス、またはEditSegment構造3256のnumSegments個のアドレスのシーケンスとすることができる
各EditSegment構造3256は、このEditSegment構造3256を含むEditList構造3244によって表されるelstアトム948に含まれる「editセグメント」のプロパティを表す。図87からわかるように、各EditSegment構造3256は、3つの整数すなわち、startTime 3258、duration 3260、およびrelativeRate 3262からなる。これらの整数のそれぞれは、対応するeditセグメントの同一の名前のプロパティを表す。
TrackReference構造3264は、trefアトム940のプロパティを表す。図88からわかるように、TrackReference構造3264は、次のコンポーネントからなる。
1.size 3266:trefアトム940のバイト数を示す整数
2.Mpod 3268:trefアトム940に含まれるmpodアトム942を表すMpod構造3270のアドレス
Mpod構造3270は、mpodアトム942のプロパティを表す。図89からわかるように、Mpod構造3270は、次のコンポーネントからなる。
1.size 3272:mpodアトム942のバイト数を示す整数
2.numEntries 3274:trackID配列3276の項目数を指定する整数
3.trackID配列3276:numEntries個の整数のシーケンスのアドレス。これらの整数のそれぞれが、mpodアトム942で指定されるtrackID値の1つを表す。
UserData構造3280は、udtaアトム784のプロパティを表す。図90からわかるように、UserData構造3280は、次のコンポーネントからなる。
1.size 3282:udtaアトム784のバイト数を示す整数
2.numCprt 3284:cprt配列3286のメンバ数を指定する整数
3.cprt配列3286:cprt構造3290のシーケンスのアドレス、またはcprt構造3290のアドレスのシーケンス
cprt構造3290は、cprtアトムのプロパティを表す。図91からわかるように、cprt構造3290は、次のコンポーネントからなる。
1.size 3292:cprtアトムのバイト数を指定する整数
2.version & flags 3294:cprtアトムの「version」プロパティおよび「flags」プロパティの値を示す整数の対
3.language 3296:cprtアトムの「language」プロパティの値を示す整数
4.notice 3298:cprtアトムで指定されるメッセージを示すヌル終端ストリング
MediaHeader構造3300は、mdhdアトム915のプロパティを表す。図92からわかるように、MediaHeader構造3300に、次の値が含まれる。
1.size 3303:mdhdアトム915のバイト数を示す整数
2.version & flag 3306:mdhdアトム915の「version」プロパティおよび「flags」プロパティの値を示す整数の対
3.creationTime 3308:mdhdアトム915の「creationTime」プロパティの値を示す整数
4.modifiedTime 3310:mdhdアトム915の「modificationTime」プロパティの値を示す整数
5.timeScale 3313:mdhdアトム915の「timeScale」プロパティの値を示す整数
6.duration 3316:mdhdアトム915の「duration」プロパティの値を示す整数
7.language 3318:mdhdアトム915の「language」プロパティの値を示す整数
Handler構造3320は、hdlrアトム918のプロパティを表す。図93からわかるように、Handler構造3320に、次の値が含まれる。
1.size 3323:hdlrアトム918のバイト数を示す整数
2.version & flags 3326:hdlrアトム918の「version」プロパティおよび「flags」プロパティの値を示す整数の対
3.handlerType 3328:hdlrアトム918のハンドラ型プロパティを指定する4文字タグ
4.name 3330:記述または診断のために提供されるヌル終端ストリングのアドレス
MediaInfo構造3333は、minfアトム920のプロパティを表す。図94からわかるように、MediaInfo構造3333に、MediaDataInfo構造3338および3350のアドレス、SampleTables構造3340および3400のアドレス、ならびにMediaInfoHeader構造3343のアドレスが含まれる。MediaInfoHeader構造3343は、次のメディア情報ヘッダ・アトム936の1つを表す。
1.nmhdアトム(scene description stream(sdsm)またはobject descriptor stream(odsm)の)
2.vmhdアトム(ビジュアル・ストリームの)、または
3.smhdアトム(オーディオ・ストリームの)
MediaInfoHeader構造3343に、次の値が含まれる。
1.size:メディア情報ヘッダ・アトム936のバイト数を示す整数
2.version & flags:メディア情報ヘッダ・アトム936の「version」プロパティおよび「flags」プロパティの値を示す整数の対
MediaDataInfo構造3350は、dinfアトム924のプロパティを表す。図95からわかるように、MediaDataInfo構造3350に、次のコンポーネントが含まれる。
1.size 3353:dinfアトム924のバイト数を示す整数
2.version & flags 3356:dinfアトム924の「version」プロパティおよび「flags」プロパティの値を示す整数の対
3.DataRefTable 3358:DataRefTableデータ構造3360のアドレス
DataRefTable構造3360は、drefアトム927のプロパティを表す。図96からわかるように、DataRefTable構造3360に、次のコンポーネントが含まれる。
1.size 3363:drefアトム927のバイト数を示す整数
2.version & flags 3366:drefアトム927の「version」プロパティおよび「flags」プロパティの値を示す整数の対
3.numDataRefs 3368:dataRef配列3370の項目数を示す整数
4.dataRef配列3370:dataRefデータ構造3380のシーケンスのアドレス
dataRef構造3380は、データ参照テーブルの項目を表す。図97からわかるように、dataRef構造3380に、次のコンポーネントが含まれる。
1.size 3383:このdataRef構造3380によって表されるデータ参照構造のバイト数を示す整数
2.version & flags 3386:データ参照構造の「version」プロパティおよび「flags」プロパティの値を示す整数の対
3.dataRefType 3388:このdataRef構造3380によって表されるデータ参照構造の型を示す4文字のシーケンス
4.dataRefData 3390:データ参照構造の残りを表すsize−12バイトのシーケンスのアドレス
SampleTables構造3400は、stblアトム933および950のプロパティを表す。図98からわかるように、SampleTables構造3400に、次のコンポーネントが含まれる。
1.size 3403:stblアトム950のバイト数954を示す整数
2.SampleToChunkTable 3406:stscアトム960の内容を表すデータ構造のアドレス
3.ChunkOffsetTable 3408:stcoアトム966の内容を表すデータ構造のアドレス
4.TimeToSampleTable 3410:sttsアトム963の内容を表すデータ構造のアドレス
5.SampleSizeTable 3413:stszアトム970の内容を表すデータ構造のアドレス
6.SyncSampleTable 3416:stssアトム974の内容を表すデータ構造のアドレス
7.SampleDescriptionTable 3418:stsdアトム978の内容を表すデータ構造のアドレス
SampleSizeTable 3413を除いて、SampleTables構造3400に含まれるサンプル・テーブルのそれぞれは、図99の3420に示されているように、次のメンバを有する。
1.size 3423:このデータ構造によって表されるサンプル・テーブル・アトムのバイト数を示す整数
2.version & flags 3426:このデータ構造によって表されるサンプル・テーブル・アトムの「version」プロパティおよび「flags」プロパティの値を示す整数の対
3.numEntries 3428:table配列3430の項目数を示す整数
4.table配列3430:整数またはデータ構造の配列のアドレス
図100からわかるように、SampleSizeTable構造3440は、すべてのサンプルの固定サンプル・サイズを指定する整数である追加メンバ「sampleSize」3450を含むことを除いて、他のサンプル・テーブルに類似する。メンバ「sampleSize」3450の値が非0である場合に、メンバ「table配列」3456は省略される。
メンバ「table配列」の構造は、サンプル・テーブルのタイプに依存する。ChunkOffsetTable構造3408、SampleSizeTable構造3413、およびSyncSampleTable構造3416の場合に、このメンバは、32ビット整数のシーケンスを表す。
SampleToChunkTable構造3406の場合に、テーブル配列は、SampleToChunkデータ構造3460の配列を表す。図101からわかるように、各SampleToChunkデータ構造3460は、3つの整数メンバ、「firstChunk」3463、「numSamples」3466、および「description」3468からなる。
TimeToSampleTable構造3410の場合に、テーブル配列は、TimeToSampleデータ構造3470の配列を表す。図102からわかるように、各TimeToSampleデータ構造3470は、2つの整数メンバ、「count」3473および「duration」3476からなる。
SampleDescriptionTable構造3418の場合に、table配列は、SampleDescriptionデータ構造3480の配列を表す。図103からわかるように、各SampleDescriptionデータ構造3480は、次の6つのメンバからなる。
1.size 3483:このSampleDescription構造3480によって表されるサンプル記述テーブルエントリのバイト数を示す整数
2.dataFormat 3486:このSampleDescriptionデータ構造3480によって表されるmp4アトム982の型を指定する4文字識別子(「mp4s」、「mp4a」、または「mp4v」)
3.dataReference 3488:このSampleDescription構造3480によって表されるmp4アトム982のdataReferenceプロパティを表す整数
4.esdVersion 3490:このSampleDescription構造3480によって表されるmp4アトム982に含まれる「esds」アトム986のversionプロパティを示す整数
5.esdSize 3493:このSampleDescription構造3480によって表されるmp4アトム982に含まれる「esds」アトム986のバイト数を示す整数
6.esdData 3496:このSampleDescription構造3480によって表されるmp4アトム982に含まれる「esds」アトム986に含まれるES_Descrオブジェクト構造990のコピーを含むバイトの配列のアドレス
mp4バイナリ・ファイルに基づくQtInfo構造の作成
mp4バイナリ・ファイルに基づくQtInfoデータ構造の作成の処理は、量「maxNumTracks」の特定の値に基づく新しい空のQtInfoデータ構造の作成から始まる。量「maxNumTracks」の値は、特定のmp4ファイルのトラックの実際の個数を超えるのに十分に大きい128などの所定の定数とすることができ、あるいは、mp4バイナリ・ファイルをオープンし、このファイルに含まれるtrakアトムの数を数えることによって決定することができる。新しい空のQtInfo構造を作成した後に、mp4ファイルを、図104に示されているように解釈する。この処理は、次のステップからなる。
1.mp4バイナリ・ファイルをオープンする(読み取りのために)動作3500。
2.mp4ファイルから32ビット整数を読み取り、この整数の値を量「atomSize」に割り当てる動作3510。次に、mp4ファイルから第2の32ビット整数を読み取り、この整数の値を量「atomId」に割り当てる。
3.量「atomId」の値を値「mdat」と比較する動作3520。
4.量「atomId」の値が「mdat」に対応する場合に、手順「mdatアトムの処理」を実行する動作3525。
5.量「atomId」の値を値「moov」と比較する動作3530。
6.量「atomId」の値が「moov」に対応する場合に、手順「moovアトムの処理」を実行する動作3535。
7.量「atomId」の値を値「udta」と比較する動作3540。
8.量「atomId」の値が「udta」に対応する場合に、手順「udtaアトムの処理」を実行し、下の動作3570を続ける動作3545。
9.そうでない場合に、mp4ファイルのatomSize−8バイトをスキップする動作3560。すなわち、このバイト数をmp4ファイルから読み取るが、結果の値に関して何もしない。
10.mp4バイナリ・ファイル700の現在のファイル位置をテストする動作3570。
11.mp4バイナリ・ファイル700の現在のファイル位置がファイルの終り状態に対応する(読み取られたバイト数がmp4ファイル全体のバイト数と等しい)場合に、処理を終了する動作3580。そうでない場合には、動作3510から動作3570を繰り返す。
図105からわかるように、手順「mdatアトムの処理」3525は、次のステップからなる。
1.新しいMediaData構造「newMediaData」3160を作成する動作3600。
2.この新しいMediaData構造3160のアドレスをQtInfo構造3100のmdat配列3113の項目numMdatAtomsに割り当てる動作3610。
3.numMdatAtoms 3110の値を1つ増分する動作3620。
4.量「atomSize」の値を新しいMediaData構造3160のメンバ「size」3163に割り当てる動作3630。
5.現在のファイル・ポインタ(−8)を新しいMediaData構造3160のメンバ「start」3166に割り当てる動作3640。
6.(atomSize−8)バイトの新しいバイト配列を作成し、このバイト配列のアドレスを新しいMediaData構造3160のメンバ「MediaData」3168に割り当てる動作3650。
7.mp4バイナリ・ファイルから(atomSize−8)バイトを読み取り、その結果を新しいMediaData構造3160のメンバ「MediaData」3168によって指定される新しいバイト配列にコピーする動作3660。
図106からわかるように、手順「moovアトムの処理」3535は、次のステップからなる。
1.値0をQtInfo構造3100のメンバ「numTracks」3118に割り当てる動作3700。
2.mp4ファイルから32ビット整数を読み取り、この整数の値を量「atomSize」に割り当てる動作3710。次に、mp4ファイルから第2の32ビット整数を読み取り、この整数の値を量「atomId」に割り当てる。
3.量「atomId」の値を値「mvhd」と比較する動作3720。
4.量「atomId」の値が「mvhd」に対応する場合に、手順「mvhdアトムの処理」を実行する動作3725。その後、下の動作3770で継続する。
5.量「atomId」の値を値「iods」と比較する動作3730。
6.量「atomId」の値が「iods」に対応する場合に、手順「iodsアトムの処理」を実行する動作3735。その後、下の動作3770で継続する。
7.量「atomId」の値を値「trak」と比較する動作3740。
8.量「atomId」の値が「trak」に対応する場合に、手順「trakアトムの処理」を実行する動作3745。その後、下の動作3770で継続する。
9.そうでない場合に、mp4ファイルでatomSize−8バイトをスキップする動作3760。すなわち、このバイト数をmp4ファイルから読み取るが、結果の値について何もしない。
10.moovアトム754の終りに達したかどうかを検査する動作3770。moovアトム754の終りに達したという条件は、moovアトム754の先頭以降にmp4ファイルから読み取られたデータ・バイト数が、動作3710で決定された量atomSizeと等しい場合に満足される。
11.moovアトム(754)の終りに達した場合に、この処理を終了する動作3780。そうでない場合に、動作3710から動作3770を繰り返す。
手順「ユーザ・データ・アトムの処理」を使用して、UserData構造3280の任意選択のudtaアトム784の内容を表すことができる。この情報は、最終的なXMT−Aファイルには不要であり、その結果、udtaアトム784の残りの部分(atomSize−8バイト)を単にスキップすることで十分である。
代替案では、次のステップを使用して、udtaアトム784の内容を解釈することができる。
1.新しいUserDataデータ構造3280を作成する。
2.この新しいUserDataデータ構造3280のアドレスを、QtInfo構造3100のメンバUserData 3123に割り当てる。
3.量「atomSize」の値を、この新しいUserDataデータ構造3280のメンバ「size」3282に割り当てる。
4.値「0」を、UserData構造3280のメンバ「numCprt」3284に割り当てる。
5.udtaアトム784の終りに達するまで、手順「Copyrightアトムの読取」を繰り返す。udtaアトム784の終りに達したという条件は、udtaアトム784の先頭以降でmp4ファイルから読み取ったデータ・バイト数が、メンバ「size」3282の値と等しい場合に満足される。
手順「Copyrightアトムの読取」は、次のステップからなる。
1.mp4ファイルから32ビット整数を読み取り、この整数の値を量「atomSize」に割り当てる。次に、mp4ファイルから第2の32ビット整数を読み取り、この整数の値を量「atomId」に割り当てる。
2.量「atomId」の値を値「cprt」と比較する。
3.量「atomId」の値が「cprt」に対応しない場合に、mp4ファイルのatomSize−8バイトのデータをスキップし、ステップ5の手順「ユーザ・データ・アトムの処理」で継続する。そうでない場合には、次のステップを実行する。
4.新しいcprt構造「newCprt」3290を作成する。
5.この新しいcprt構造のアドレスを、UserData構造3280のcprt配列メンバ3286の項目numCprtに割り当てる。
6.量「atomSize」の値を新しいcprt構造3290のメンバ「size」(3292)に割り当てる。
7.mp4ファイルから32ビット整数を読み取り、この整数の値を新しいcprt構造3290のメンバ「version & flags」3294に割り当てる。
8.mp4ファイルから16ビット整数を読み取り、この整数の値を新しいcprt構造3290のメンバ「language」3296に割り当てる。
9.mp4ファイルからバイトのヌル終端シーケンスを読み取り、これらのバイトを新しいストリング量「newNotice」にコピーする。
10.新しいストリング量「newNotice」のアドレスを、新しいcprt構造3290のメンバ「notice」3298に割り当てる。
11.UserData構造3280のメンバ「numCprt」3284の値を1つ増分する。
手順「mvhdアトムの処理」3725は、次のステップからなる。
1.新しいMoovHeaderデータ構造3170を作成する。
2.この新しいMoovHeaderデータ構造3170のアドレスを、QtInfo構造3100のメンバMoovHeader 3116に割り当てる。
3.量「atomSize」の値を、この新しいMoovHeaderデータ構造3170のメンバ「size」3173に割り当てる。
4.mp4ファイルから32ビット整数を読み取り、その結果をMoovHeader構造3170のメンバ「version & flags」3176に割り当てる。
5.mp4ファイルから32ビット整数を読み取り、その結果をMoovHeader構造3170のメンバ「creationTime」3178に割り当てる。
6.mp4ファイルから32ビット整数を読み取り、その結果をMoovHeader構造3170のメンバ「modifiedTime」3180に割り当てる。
7.mp4ファイルから32ビット整数を読み取り、その結果をMoovHeader構造3170のメンバ「timeScale」3183に割り当てる。
8.mp4ファイルから32ビット整数を読み取り、その結果をMoovHeader構造3170のメンバ「duration」3186に割り当てる。
9.mp4ファイルから76バイトを読み取り、その結果の値を無視する。
10.mp4ファイルから32ビット整数を読み取り、その結果をMoovHeader構造3170のメンバ「nextTrackID」3188に割り当てる。
手順「iodsアトムの処理」は、次のステップからなる。
1.新しいMp4fInitObjectDescrデータ構造3130を作成する。
2.この新しいMp4fInitObjectDescrデータ構造3130のアドレスを、QtInfo構造3100のメンバMp4fInitObjectDescr 3106に割り当てる。
3.量「atomSize」の値をMp4fInitObjectDescr構造3130のメンバ「size」3133に割り当てる。
4.mp4ファイルから32ビット整数812、816を読み取り、その結果をMp4fInitObjectDescr構造3130のメンバ「version」3136に割り当てる。
5.mp4ファイルから8ビット整数828を読み取り、その結果が期待される値「16」(MP4_IOD_Tag)を有することを検証する。
6.mp4ファイルから8ビット整数832を読み取り、その結果を量「objSize」に割り当てる。
7.objSizeの値が127を超える場合に、ステップ6を繰り返す。
8.mp4ファイルから16ビット整数836から848を読み取り、その結果を量「odidandflags」に割り当てる。
9.値「odidandflags」836の上位10ビットの値を、Mp4fInitObjectDescr構造3130のメンバ「ObjectDescriptorID」3138に割り当てる。
10.論理演算((「odidandflags」の値) and 32)の結果が0である場合に、値0をMp4fInitObjectDescr構造3130のメンバ「urlFlag」3140に割り当てる。そうでない場合には、値「1」をMp4fInitObjectDescr構造3130のメンバ「urlFlag」3140に割り当てる。
11.論理演算((「odidandflags」の値) and 16)の結果が0である場合に、値「0」をMp4fInitObjectDescr構造3130のメンバ「inlineProfiles」3146に割り当てる。そうでない場合に、値「1」をMp4fInitObjectDescr構造3130のメンバ「inlineProfiles」3146に割り当てる。
12.値「2」を、Mp4fInitObjectDescr構造3130のメンバ「maxNumEsIdIncs」3150に割り当てる。
13.値0を、Mp4fInitObjectDescr構造3130のメンバnumEsIdIncs 3153に割り当てる。
14.maxNumEsIdIncs個のアドレス値の配列を作成する。
15.この配列のアドレスを、Mp4fInitObjectDescr構造3130のメンバ「EsIdInc配列」3156に割り当てる。
16.メンバurlFlagの値が「1」である場合に、手順「URLストリングの処理」を実行する。そうでない(urlFlagの値が「0」である)場合に、手順「プロファイルレベル・インジケータの処理」を実行する。
手順「URLストリングの処理」は、次のステップからなる。
1.バイトのヌル終端シーケンスをmp4ファイルから読み取る。
2.これらのバイトを新しいバイト配列に保管する。
3.この新しいバイト配列のアドレスを、Mp4fInitObjectDescr構造3130のメンバurlString 3143に割り当てる。
手順「プロファイルレベル・インジケータの処理」は、次のステップからなる。
1.値0を、Mp4fInitObjectDescr構造3130の量urlString 3143に割り当てる。
2.5つのプロファイルレベル・表示値852から868をmp4ファイルから読み取り、それぞれをMp4fInitObjectDescr構造3130の対応するメンバに割り当てる。これらのプロファイルレベル値のそれぞれは、単一のバイトからなり、この5つの値は、Mp4fInitObjectDescr構造3130の「ProfileLevels」3148によって表される。
3.iodsアトム800の終りに達するまで、手順「EsIdIncオブジェクトの処理」を繰り返す。iodsアトム800の終りに達したという条件は、iodsアトム800の先頭以降でmp4ファイルから読み取られたデータ・バイト数が、iodsアトム800のサイズ804、3133と等しい場合に満足される。
手順「EsIdIncオブジェクトの処理」は、次のステップからなる。
1.mp4ファイルから1バイトのオブジェクト・タグ880を読み取る。
2.オブジェクト・タグの値が期待される値(14、「EsIdIncTag」)であることを検証する。
3.新しいEsIdInc構造を作成する。この構造には、2つのメンバ値、「size」および「trackID」が含まれる。
4.この新しいEsIdInc構造のアドレスを、Mp4fInitObjectDescr構造3130のEsIdInc配列3156の項目numEsIdIncsに割り当てる。
5.EsIdIncオブジェクトの残りを含むバイト数884を読み取り、その結果を新しいEsIdInc構造のメンバ「size」に割り当てる。
6.mp4ファイルから32ビット整数888を読み取り、その結果を新しいEsIdInc構造のメンバ「trackID」に割り当てる。
7.メンバnumEsIdIncs 3153の値を1つ増分する。
図107からわかるように、手順「trakアトムの処理」動作3745は、次のステップからなる。
1.新しいtrakデータ構造3200を作成する動作3800。この新しいtrak構造のアドレスを、現在のQtInfo構造3100のtrak配列メンバ3120の項目numTracksに割り当てる。量「AtomSize」の値を、新しいtrak構造3200のメンバ「size」3202に割り当てる。
2.mp4ファイルから32ビット整数を読み取り、この整数の値を量「atomSize」に割り当てる。次に、mp4ファイルから第2の32ビット整数を読み取り、この整数の値を量「atomId」に割り当てる動作3810。
3.量「atomId」の値を値「tkhd」と比較する動作3820。
4.量「atomId」の値が「tkhd」に対応する場合に、手順「track header(tkhd)アトムの処理」を実行する動作3825。その後、動作3870で継続する。
5.量「atomId」の値を値「mdia」と比較する動作3830。
6.量「atomId」の値が「mdia」に対応する場合に、手順「track media(mdia)アトムの処理」を実行する動作3835。その後、動作3870で継続する。
7.量「atomId」の値を値「edts」と比較する動作3840。
8.量「atomId」の値が「edts」に対応する場合に、手順「track edit(edts)アトムの処理」を実行する動作3845。その後、動作3870で継続する。
9.量「atomId」の値を値「tref」と比較する動作3850。
10.量「atomId」の値が「tref」に対応する場合に、手順「track reference(tref)アトムの処理」を実行する手動作3855。その後、動作3870で継続する。
11.そうでない場合に、mp4ファイルのatomSize−8バイトをスキップする動作3860。すなわち、atomSize−8バイトをmp4ファイルから読み取り、結果の値を無視する。
12.trakアトム900の終りに達したかどうかを検査する動作3870。trakアトム900の終りに達したという条件は、trakアトム900の先頭以降でmp4ファイルから読み取られたデータ・バイト数が、現在のtrak構造3200のメンバ「size」3202の値と等しい場合に満足される。
13.trakアトム900の終りに達した場合に、numTracksの値を1つ増分する動作3880。そうでない場合には、動作3810から動作3870を繰り返す。
手順「track headerアトムの処理」は、次のステップからなる。
1.新しいTrackHeaderデータ構造3212を作成する。
2.この新しいTrackHeaderデータ構造3212のアドレスを、現在のtrak構造3200のメンバTrackHeader 3204に割り当てる。
3.量「atomSize」の値を、TrackHeader構造3212のメンバ「size」3214に割り当てる。
4.mp4ファイルから32ビット整数を読み取り、その結果をTrackHeader構造3212のメンバ「version & flags」3216に割り当てる。
5.mp4ファイルから32ビット整数を読み取り、その結果をTrackHeader構造3212のメンバ「creationTime」3218に割り当てる。
6.mp4ファイルから32ビット整数を読み取り、その結果をTrackHeader構造3212のメンバ「modifiedTime」3220に割り当てる。
7.mp4ファイルから32ビット整数を読み取り、この値を量「trackID」に割り当てる。量「trackID」の値を、TrackHeader構造3212のメンバ「trackID」3224に割り当てる。
8.mp4ファイルから4バイトを読み取り、結果の値を無視する。
9.mp4ファイルから32ビット整数を読み取り、その結果をTrackHeader構造3212のメンバ「duration」3222に割り当てる。
10.mp4ファイルから60バイトを読み取り、結果の値を無視する。
図39からわかるように、手順「track mediaアトムの処理」は、次のステップからなる。
1.新しいTrackMediaデータ構造3226を作成する動作3900。このTrackMedia構造3226のアドレスを、現在のtrak構造3200のメンバTrackMedia 3206に割り当てる。「atomSize」の値を、新しいTrackMedia構造3226のメンバ「size」3228に割り当てる。
2.mp4ファイルから32ビット整数を読み取り、この整数の値を量「atomSize」に割り当てる動作3910。次に、mp4ファイルから第2の32ビット整数を読み取り、この整数の値を量「atomId」に割り当てる。
3.量「atomId」の値を値「mdhd」と比較する動作3920。
4.量「atomId」の値が「mdhd」に対応する場合に、手順「media header(mdhd)アトムの処理」を実行する動作3925。その後、下の動作3970で継続する。
5.量「atomId」の値を値「hdlr」と比較する動作3930。
6.量「atomId」の値が「hdlr」に対応する場合に、手順「handler(hdlr)アトムの処理」を実行する動作3935。その後、下の動作3970で継続する。
7.量「atomId」の値を値「minf」と比較する動作3940。
8.量「atomId」の値が「minf」に対応する場合に、手順「media info(minf)アトムの処理」を実行する動作3945。その後、下の動作3970で継続する。
9.そうでない場合に、mp4ファイルのatomSize−8バイトをスキップする動作3960。すなわち、このバイト数をmp4ファイルから読み取るが、結果の値について何もしない。
10.mdiaアトム912の終りに達したかどうかを検査する動作3970。mdiaアトム912の終りに達したという条件は、mdiaアトム912の先頭以降でmp4ファイルから読み取られたデータ・バイト数が、現在のTrackMedia構造3226のメンバ「size」3228の値と等しい場合に満足される。
11.mdiaアトム912の終りに達した場合に、この手順を終了し、動作3870で処理を継続させる動作3980。そうでない場合には、動作3910から動作3970を繰り返す。
手順「track editアトムの処理」は、edtsアトム945のデータの終りに達するまで次のステップを繰り返すことからなる。edtsアトム945の終りに達したという条件は、edtsアトム945の先頭以降でmp4ファイルから読み取られたデータ・バイト数が、edtsアトムのサイズと等しい場合に満足される。単一のelstアトム948が、edtsアトム945内で見つかると期待される。
1.新しいTrackEdit構造3236を作成する。
2.この新しいTrackEdit構造3236のアドレスを、現在のtrak構造3200のメンバTrackEdit 3208に割り当てる。
3.「atomSize」の値を、新しいTrackEdit構造3236のメンバ「size」3238に割り当てる。
4.mp4ファイルから32ビット整数を読み取り、その結果をTrackEdit構造3236のメンバ「version & flags」3240に割り当てる。
5.mp4ファイルから32ビット整数を読み取り、この整数の値を量「atomSize」に割り当てる。次に、mp4ファイルから第2の32ビット整数を読み取り、この整数の値を量「atomId」に割り当てる。
6.量「atomId」の値を値「elst」と比較する。
7.量「atomId」の値が「elst」に対応する場合に、手順「編集リスト・アトムの処理」を実行する。そうでない場合に、mp4ファイルでatomSize−8バイトをスキップする。すなわち、mp4ファイルからatomSize−8バイトを読み取り、結果の値を無視する。
8.edts(track edit)アトム945の終りに達したかどうかを検査する。edtsアトム945の終りに達したという条件は、edtsアトム945の先頭以降でmp4ファイルから読み取られたデータ・バイト数が、TrackEdit構造3236のメンバ「size」3238の値と等しい場合に満足される。
9.edtsアトム945の終りに達している場合に、この手順を終了する。そうでない場合には、ステップ5から8を繰り返す。
手順「編集リスト・アトムの処理」は、次のステップからなる。
1.新しいEditList構造3244を作成する。
2.この新しいEditList構造3244のアドレスを、現在のTrackEdit構造3236のメンバ「EditList」3242に割り当てる。
3.「atomSize」の値を、新しいEditList構造3244のメンバ「size」3246に割り当てる。
4.mp4ファイルから32ビット整数を読み取り、その結果を、EditList構造3244のメンバ「version & flags」3248に割り当てる。
5.mp4ファイルから32ビット整数を読み取り、この値を、量「numSegments」に割り当てる。
6.量「numSegments」の値を、EditList構造3244のメンバ「numSegments」3250に割り当てる。
7.numSegments個のEditSegment構造3256の配列を作成し、この配列のアドレスを、EditList構造3244のメンバ「EditSegment配列」に割り当てる。
8.値0を、量「segment」に割り当てる。
9.次のステップ(10から13)を、numSegments回(量「segment」の値が量「numSegments」と等しくなるまで)繰り返す。
10.mp4ファイルから32ビット整数を読み取り、結果をEditSegment構造の配列3252の項目「segment」のメンバ「startTime」3258に割り当てる。
11.mp4ファイルから32ビット整数を読み取り、結果をEditSegment構造の配列3252の項目「segment」のメンバ「duration」3260に割り当てる。
12.mp4ファイルから32ビット整数を読み取り、結果をEditSegment構造の配列3252の項目「segment」のメンバ「relativeRate」3262に割り当てる。
13.量「segment」の値を1つ増分する。
手順「track referenceアトムの処理」は、次のステップからなる。単一のmpodアトム942が、trefアトム940内で見つかると期待される。
1.新しいTrackReference構造3264を作成する。
2.この新しいTrackReference構造3264のアドレスを、現在のtrak構造3200のメンバ「TrackReference」に割り当てる。
3.atomSizeの値を、この新しいTrackReference構造3264のメンバ「size」3266に割り当てる。
4.trefアトム940のデータの終りに達するまで、次のステップを繰り返す。trefアトム940の終りに達したという条件は、trefアトム940の先頭以降でmp4ファイルから読み取られたデータ・バイト数が、trefアトム940のサイズと等しい場合に満足される。
5.mp4ファイルから32ビット整数を読み取り、この整数の値を量「atomSize」に割り当てる。mp4ファイルから第2の32ビット整数を読み取り、この整数の値を量「atomId」に割り当てる。
6.量「atomId」の値を値「mpod」と比較する。
7.量「atomId」の値が「mpod」に対応する場合に、手順「mpodアトムの処理」を実行する。そうでない場合には、mp4ファイルでatomSize−8バイトをスキップする。すなわち、mp4ファイルからatomSize−8バイトを読み取り、結果の値を無視する。
8.tref(track reference)アトム940の終りに達したかどうかを検査する。trefアトム940の終りに達したという条件は、trefアトム940の先頭以降でmp4ファイルから読み取られたデータ・バイト数が、TrackReference構造3264のメンバ「size」3266の値と等しい場合に満足される。
9.trefアトム940の終りに達している場合には、この手順を終了する。そうでない場合には、ステップ5から8を繰り返す。
手順「mpodアトムの処理」は、次のステップからなる。
1.新しいMpodデータ構造3270を作成する。
2.この新しいMpodデータ構造3270のアドレスを、TrackReferenceデータ構造3264のメンバ「Mpod」3268に割り当てる。
3.atomSizeの値を、この新しいMpodデータ構造のメンバ「size」3272に割り当てる。
4.Mpodメンバ「size」の値から8を引き、その結果を4で割り、その結果を量「numEntries」に割り当てる。
5.「numEntries」の値を、新しいMpodデータ構造3270のメンバ「numEntries」3274に割り当てる。
6.「numEntries」個の項目を有する整数の配列を作成し、この配列のアドレスを、新しいMpodデータ構造3270のメンバ「trackID配列」3276に割り当てる。
7.値0を、量「entry」に割り当てる。
8.次のステップ(9から10)を、numEntries回(量「entry」の値が量「numEntries」の値と等しくなるまで)繰り返す。
9.mp4ファイルから32ビット整数を読み取り、その結果を現在のMpodデータ構造3270の配列「trackID配列」3276の項目「entry」に割り当てる。
10.量「entry」の値を1つ増分する。
手順「media headerアトムの処理」は、次のステップからなる。
1.新しいMediaHeader構造3300を作成する。
2.この新しいMediaHeader構造3300のアドレスを、現在のTrackMedia構造3226のメンバ「MediaHeader」3230に割り当てる。
3.量「atomSize」の値を、MediaHeader構造3300のメンバ「size」3303に割り当てる。
4.mp4ファイルから32ビット整数を読み取り、その結果をMediaHeader構造3300のメンバ「version & flag」3306に割り当てる。
5.mp4ファイルから32ビット整数を読み取り、その結果をMediaHeader構造3300のメンバ「creationTime」3308に割り当てる。
6.mp4ファイルから32ビット整数を読み取り、その結果をMediaHeader構造3300のメンバ「modifiedTime」3310に割り当てる。
7.mp4ファイルから32ビット整数を読み取り、その結果をMediaHeader構造3300のメンバ「timeScale」3313に割り当てる。
8.mp4ファイルから32ビット整数を読み取り、その結果をMediaHeader構造3300のメンバ「duration」3316に割り当てる。
9.mp4ファイルから16ビット整数を読み取り、その結果をMediaHeader構造3300のメンバ「language」3318に割り当てる。
10.mp4ファイルから2バイトを読み込み、結果の値を無視する。
手順「handlerアトムの処理」は、次のステップからなる。
1.新しいHandler構造3320を作成する。
2.この新しいHandler構造3320のアドレスを、現在のTrackMedia構造3226のメンバ「Handler」3232に割り当てる。
3.量「atomSize」の値を、Handler構造3320のメンバ「size」3323に割り当てる。
4.mp4ファイルから32ビット整数を読み取り、その結果をHandler構造3320のメンバ「version & flags」3326に割り当てる。
5.mp4ファイルから32ビット整数を読み取り、その結果をHandler構造3320のメンバ「handlerType」3328に割り当てる。
6.mp4ファイルの12バイトを読み取り、結果の値を無視する。
7.mp4ファイルから文字のヌル終端ストリングを読み取り、結果の文字のシーケンスを文字の配列に保管し、この文字の配列のアドレスを、Handler構造3320のメンバ「name」3330に割り当てる。
図109からわかるように、手順「media infoアトムの処理」は、次のステップからなる。
1.新しいMediaInfoデータ構造3333を作成する動作4000。この新しいMediaInfoデータ構造3333のアドレスを、現在のTrackMediaデータ構造3226のメンバMediaInfo 3234に割り当てる。量「atomSize」の値を、MediaInfoデータ構造3333のメンバ「size」3336に割り当てる。
2.mp4ファイルから32ビット整数を読み取り、この整数の値を量「atomSize」に割り当てる動作4010。次に、mp4ファイルから第2の32ビット整数を読み取り、この整数の値を量「atomId」に割り当てる。
3.量「atomId」の値を値「dinf」と比較する動作4020。
4.量「atomId」の値が「dinf」に対応する場合に、手順「media data info(dinf)アトムの処理」を実行する動作4025。その後、動作4080で継続する。
5.量「atomId」の値を値「stbl」と比較する動作4030。
6.量「atomId」の値が「stbl」に対応する場合に、手順「サンプル・テーブル・アトムの処理」を実行する動作4035。その後、動作4080で継続する。
7.量「atomId」の値を値「nmhd」と比較する動作4040。
8.量「atomId」の値が「nmhd」に対応する場合に、手順「mpeg4メディア・ヘッダ・アトムの処理」を実行する動作4045。その後、動作4080で継続する。
9.量「atomId」の値を値「smhd」と比較する動作4050。
10.量「atomId」の値が「smhd」に対応する場合に、手順「サウンド・メディア・ヘッダ・アトムの処理」を実行する動作4055。その後、動作4080で継続する。
11.量「atomId」の値を値「vmhd」と比較する動作4060。
12.量「atomId」の値が「vmhd」に対応する場合に、手順「ビデオ・メディア・ヘッダ・アトムの処理」を実行する動作4065。その後、動作4080で継続する。
13.そうでない場合に、mp4ファイルのatomSize−8バイトをスキップする動作4070。すなわち、mp4ファイルからatomSize−8バイトを読み取り、結果の値を無視する。
14.minfアトム920の終りに達したかどうかを検査する動作4080。minfアトム920の終りに達したという条件は、minfアトム920の先頭以降でmp4ファイルから読み取られたデータ・バイト数が、MediaInfoデータ構造3333のメンバ「size」3336の値と等しい場合に満足される。
15.minfアトム920の終りに達している場合にこの手順を終了する動作4090。そうでない場合には、動作4010から動作4080を繰り返す。
手順「media data info(dinf)アトムの処理」は、次の手順からなる。
1.新しいMediaDataInfo構造3350を作成する。
2.この新しいMediaDataInfo構造3350のアドレスを、現在のMediaInfo構造3333のメンバ「MediaDataInfo」3338に割り当てる。
3.量「atomSize」の値を、MediaDataInfo構造3350のメンバ「size」3353に割り当てる。
4.mp4ファイルから32ビット整数を読み取り、その結果をMediaDataInfo構造3350のメンバ「version & flags」3356に割り当てる。
5.dinfアトム924のデータの終りに達するまで、次のステップを繰り返す。dinfアトム924の終りに達したという条件は、dinfアトム924の先頭以降でmp4ファイルから読み取られたデータ・バイト数が、MediaDataInfo構造3350のメンバ「size」の値と等しい場合に満足される。
6.mp4ファイルから32ビット整数を読み取り、この整数の値を量「atomSize」に割り当てる。
7.mp4ファイルから32ビット整数を読み取り、この整数の値を量「atomId」に割り当てる。
8.量「atomId」の値が「dref」に対応する場合に、手順「データ参照テーブル・アトムの処理」を実行する。そうでない場合には、mp4ファイルのatomSize−8バイトをスキップする。すなわち、mp4ファイルからatomSize−8バイトを読み取り、結果の値を無視する。
9.dinfアトム924の終りに達したかどうかを検査する。dinfアトム924の終りに達している場合には、この手順を終了する。そうでない場合には、ステップ2から9を繰り返す。
手順「データ参照テーブル・アトムの処理」は、次のステップからなる。
1.新しいDataRefTableデータ構造3360を作成する。
2.この新しいDataRefTableデータ構造3360のアドレスを、現在のMediaDataInfoデータ構造3350のメンバDataRefTable3358に割り当てる。
3.量「atomSize」の値を、DataRefTableデータ構造3360のメンバ「size」3363に割り当てる。
4.mp4ファイルから32ビット整数を読み取り、その結果をDataRefTable構造3360のメンバ「version & flags」3366に割り当てる。
5.mp4ファイルから32ビット整数を読み取り、この値を量「numDataRefs」に割り当てる。
6.量「numDataRefs」の値を、DataRefTable構造3360のメンバ「numDataRefs」3368に割り当てる。
7.「numDataRefs」個の項目を有するアドレスの配列を作成し、この配列のアドレスを、新しいDataRefTableデータ構造3360のメンバ「dataRef配列」3370に割り当てる。
8.値0を、量「entry」に割り当てる。
9.次のステップを、numDataRefs回(量「entry」の値が量「numDataRefs」の値と等しくなるまで)繰り返す。
10.新しいdataRefデータ構造3380を作成する。
11.この新しいdataRefデータ構造3380のアドレスを、DataRefTableデータ構造3360のdataRef配列メンバ3370の項目「entry」に割り当てる。
12.mp4ファイルから32ビット整数を読み取り、その値を量「drefSize」に割り当てる。
13.量「drefSize」の値を、この新しいdataRefデータ構造3380のメンバ「size」3383に割り当てる。
14.mp4ファイルから32ビット整数を読み取り、その結果を現在のdataRefデータ構造3380のメンバ「version & flags」3386に割り当てる。
15.mp4ファイルから32ビット整数を読み取り、その結果をこの新しいdataRefデータ構造3380のメンバ「dataRefType」3388に割り当てる。量「type」の値は、4つのテキスト文字のシーケンスとして解釈することができる。
16.(drefSize−12)バイトの配列を作成し、この配列のアドレスを、現在のdataRefデータ構造3380のメンバ「dataRefData」3390に割り当てる。
17.mp4ファイルから(drefSize−12)バイトのシーケンスを読み取り、これらを、配列「dataRefData」3390の連続する項目にコピーする。
18.量「entry」の値を1つ増分する。
手順「mpeg4メディア・ヘッダ・アトムの処理」は、次のステップからなる。
1.新しいMpeg4MediaHeaderデータ構造を作成する。Mpeg4MediaHeaderデータ構造に、メンバ「size」および「version & flags」が含まれる。
2.この新しいMpeg4MediaHeaderデータ構造のアドレスを、現在のMediaInfoデータ構造3333のメンバMediaInfoHeader 3343に割り当てる。
3.量「atomSize」の値を、この新しいMpeg4MediaHeaderデータ構造のメンバ「size」に割り当てる。
4.mp4ファイルから32ビット整数を読み取り、その結果をこの新しいMpeg4MediaHeaderデータ構造のメンバ「verFlags」に割り当てる。
5.mpeg4 media header(nmhd)アトム936に含まれるすべての残りのデータをスキップする(atomSizeが12を超える場合に)。
手順「サウンド・メディア・ヘッダ・アトムの処理」は、次のステップからなる。
1.新しいSoundMediaHeaderデータ構造を作成する。SoundMediaHeaderデータ構造に、メンバ「size」、「version & flags」、および「balance」が含まれる。
2.この新しいSoundMediaHeaderデータ構造のアドレスを、現在のMediaInfoデータ構造3333のメンバMediaInfoHeader 3343に割り当てる。
3.量「atomSize」の値を、この新しいSoundMediaHeaderデータ構造のメンバ「size」に割り当てる。
4.mp4ファイルから32ビット整数を読み取り、その結果を新しいSoundMediaHeader構造のメンバ「version & Flags」に割り当てる。
5.mp4ファイルから32ビット整数を読み取り、その結果を新しいSoundMediaHeaderデータ構造のメンバ「balance」に割り当てる。
6.sound media header(smhd)アトム936に含まれる残りのすべてのデータをスキップする(atomSizeが16を超える場合に)。
手順「ビデオ・メディア・ヘッダ・アトムの処理」は、次のステップからなる。
1.新しいVideoMediaHeaderデータ構造を作成する。VideoMediaHeaderデータ構造に、メンバ「size」、「version & flags」、「mode」、「opRed」、「opGreen」、および「opBlue」が含まれる。
2.この新しいVideoMediaHeaderデータ構造のアドレスを、現在のMediaInfoデータ構造3333のメンバMediaInfoHeader 3343に割り当てる。
3.atomSizeの値を、この新しいVideoMediaHeaderデータ構造のメンバ「size」に割り当てる。
4.mp4ファイルから32ビット整数を読み取り、その結果を新しいVideoMediaHeader構造のメンバ「version & Flags」に割り当てる。
5.mp4ファイルから16ビット整数を読み取り、その結果を新しいVideoMediaHeader構造のメンバ「mode」に割り当てる。
6.mp4ファイルから16ビット整数を読み取り、その結果を現在のVideoMediaHeader構造のメンバ「opRed」に割り当てる。
7.mp4ファイルから16ビット整数を読み取り、その結果を現在のVideoMediaHeader構造のメンバ「opGreen」に割り当てる。
8.mp4ファイルから16ビット整数を読み取り、その結果を現在のVideoMediaHeader構造のメンバ「opBlue」に割り当てる。
9.video media header(vmhd)アトム936に含まれる残りのすべてのデータをスキップする(atomSizeが20を超える場合に)。
図110からわかるように、手順「サンプル・テーブル・アトムの処理」は、次のステップからなる。
1.新しいSampleTablesデータ構造3400を作成する動作4100。この新しいSampleTablesデータ構造3400のアドレスを、現在のMediaInfoデータ構造3333のメンバSampleTables 3340に割り当てる。「atomSize」の値を、この新しいSampleTablesデータ構造3400のメンバ「size」3403に割り当てる。
2.mp4ファイルから32ビット整数を読み取り、この整数の値を量「atomSize」に割り当てる動作4110。その後、mp4ファイルから第2の32ビット整数を読み取り、この整数の値を量「atomId」に割り当てる。
3.量「atomId」の値を値「stsc」と比較する動作4120。
4.量「atomId」の値が「stsc」に対応する場合に、手順「sample to chunk table(stsc)アトムの処理」を実行する動作4125。その後、動作4190で継続する。
5.量「atomId」の値を値「stco」と比較する動作4130。
6.量「atomId」の値が「stco」に対応する場合に、手順「chunk offset table(stco)アトムの処理」を実行する動作4135。その後、動作4190で継続する。
7.量「atomId」の値を値「stts」と比較する動作4140。
8.量「atomId」の値が「stts」に対応する場合に、手順「time to sample table(stts)アトムの処理」を実行する動作4145。その後、動作4190で継続する。
9.量「atomId」の値を値「stsz」と比較する動作4150。
10.量「atomId」の値が「stsz」に対応する場合に、手順「sample size table(stsz)アトムの処理」を実行する動作4155。その後、動作4190で継続する。
11.量「atomId」の値を値「stss」と比較する動作4160。
12.量「atomId」の値が「stss」に対応する場合に、手順「sync sample table(stss)アトムの処理」を実行する動作4165。その後、動作4190で継続する。
13.量「atomId」の値を値「stsd」と比較する動作4170。
14.量「atomId」の値が「stsd」に対応する場合に、手順「sample description table(stsd)アトムの処理」を実行する動作4175。その後、動作4190で継続する。
15.そうでない場合に、mp4ファイルでatomSize−8バイトをスキップする動作4180。すなわち、mp4ファイルからatomSize−8バイトを読み取り、結果の値を無視する。
16.stblアトム950の終りに達したかどうかを検査する動作4190。stblアトム950の終りに達したという条件は、stblアトム950の先頭以降でmp4ファイルから読み取られたデータ・バイト数が、SampleTablesデータ構造3400のメンバ「size」3403の値と等しい場合に満足される。
17.stblアトム950の終りに達した場合に、この手順を終了する動作4195。そうでない場合には、動作4110から動作4190を繰り返す。
手順「sample to chunk table(stsc)アトムの処理」は、次のステップからなる。
1.新しいサンプル・テーブル・データ構造3420を作成する。
2.この新しいサンプル・テーブル・データ構造3420のアドレスを、現在のSampleTablesデータ構造3400のメンバSampleToChunkTable 3406に割り当てる。
3.量「atomSize」の値を、新しいサンプル・テーブル・データ構造3420のメンバ「size」3423に割り当てる。
4.mp4ファイルから32ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造3420のメンバ「version & flags」3426に割り当てる。
5.mp4ファイルから32ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造3420のメンバ「numEntries」3428に割り当てる。
6.numEntries個の項目を有するアドレスの配列を作成し、この配列のアドレスを、新しいサンプル・テーブル・データ構造3420のメンバ「table配列」3430に割り当てる。
7.値0を、量「entry」に割り当てる。
8.次のステップを、numEntries回(量「entry」の値がメンバ「numEntries」3428の値と等しくなるまで)繰り返す。
9.新しいSampleToChunkデータ構造3460を作成する。
10.この新しいSampleToChunkデータ構造3460のアドレスを、新しいサンプル・テーブル・データ構造3420のメンバ「table配列」3430の項目「entry」に割り当てる。
11.mp4ファイルから32ビット整数を読み取り、その結果を新しいSampleToChunkデータ構造3460のメンバ「firstChunk」3463に割り当てる。
12.mp4ファイルから32ビット整数を読み取り、その結果を新しいSampleToChunkデータ構造3460のメンバ「numSamples」3466に割り当てる。
13.mp4ファイルから32ビット整数を読み取り、その結果をSampleToChunkデータ構造3460のメンバ「description」3468に割り当てる。
14.量「entry」の値を1つ増分する。
手順「chunk offset table(stco)アトムの処理」は、次のステップからなる。
1.新しいサンプル・テーブル・データ構造3420を作成する。
2.この新しいサンプル・テーブル・データ構造3420のアドレスを、現在のSampleTablesデータ構造3400のメンバChunkOffsetTable 3408に割り当てる。
3.量「atomSize」の値を、新しいサンプル・テーブル・データ構造3420のメンバ「size」3423に割り当てる。
4.mp4ファイルから32ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造3420のメンバ「version & flags」3426に割り当てる。
5.mp4ファイルから32ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造3420のメンバ「numEntries」3428に割り当てる。
6.numEntries個の項目を有する整数の配列を作成し、この配列のアドレスを、新しいサンプル・テーブル・データ構造3420のメンバ「table配列」3430に割り当てる。
7.値0を、量「entry」に割り当てる。
8.次のステップを、numEntries回(量「entry」の値がメンバ「numEntries」3428の値と等しくなるまで)繰り返す。
9.mp4ファイルから32ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造3420の配列「table配列」3430の項目「entry」に割り当てる。
10.量「entry」の値を1つ増分する。
手順「time to sample table(stts)アトムの処理」は、次のステップからなる。
1.新しいサンプル・テーブル・データ構造3420を作成する。
2.この新しいサンプル・テーブル・データ構造3420のアドレスを、現在のSampleTablesデータ構造3400のメンバTimeToSampleTable 3410に割り当てる。
3.量「atomSize」の値を、新しいサンプル・テーブル・データ構造3420のメンバ「size」3423に割り当てる。
4.mp4ファイルから32ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造3420のメンバ「version & flags」3426に割り当てる。
5.mp4ファイルから32ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造3420のメンバ「numEntries」3428に割り当てる。
6.numEntries個の項目を有する整数の配列を作成し、この配列のアドレスを、新しいサンプル・テーブル・データ構造3420のメンバ「table配列」3430に割り当てる。
7.値0を、量「entry」に割り当てる。
8.次のステップを、numEntries回(量「entry」の値がメンバ「numEntries」3428の値と等しくなるまで)繰り返す。
9.新しいTimeToSampleデータ構造3470を作成する。
10.この新しいTimeToSampleデータ構造3470のアドレスを、サンプル・テーブル・データ構造3420のメンバ「table配列」3430の項目「entry」に割り当てる。
11.新しいTimeToSampleデータ構造3470を作成する。
12.この新しいTimeToSampleデータ構造3470のアドレスを、サンプル・テーブル・データ構造3420の配列「table配列」3430の項目「entry」に割り当てる。
13.mp4ファイルから32ビット整数を読み取り、その結果を新しいTimeToSampleデータ構造3470のメンバ「count」3473に割り当てる。
14.mp4ファイルから32ビット整数を読み取り、その結果を新しいTimeToSampleデータ構造3470のメンバ「duration」3476に割り当てる。
15.量「entry」の値を1つ増分する。
手順「sample size table(stsz)アトムの処理」は、次のステップからなる。
1.新しいSampleSizeTableデータ構造3440を作成する。
2.この新しいSampleSizeTableデータ構造3420のアドレスを、現在のSampleTablesデータ構造3400のメンバSampleSizeTable 3413に割り当てる。
3.量「atomSize」の値を、新しいSampleSizeTableデータ構造3440のメンバ「size」3443に割り当てる。
4.mp4ファイルから32ビット整数を読み取り、その結果を新しいSampleSizeTableデータ構造3440のメンバ「version & Flags」3446に割り当てる。
5.mp4ファイルから32ビット整数を読み取り、その結果を新しいSampleSizeTableデータ構造3440のメンバ「sampleSize」3450に割り当てる。新しいSampleSizeTableデータ構造3440のメンバsampleSize 3450の値が0である場合には、次のステップを実行し、そうでない場合には、値0を、新しいSampleSizeTableデータ構造3440のメンバ「numEntries」3453および「table配列」3456に割り当てる。
6.mp4ファイルから32ビット整数を読み取り、その結果を新しいSampleSizeTableデータ構造3440のメンバ「numEntries」3453に割り当てる。
7.numEntries個の項目を有する整数の配列を作成し、この配列のアドレスを、新しいSampleSizeTableデータ構造3440のメンバ「table配列」3456に割り当てる。
8.値0を、量「entry」に割り当てる。
9.次のステップを、numEntries回(量「entry」の値がメンバ「numEntries」3453の値と等しくなるまで)繰り返す。
10.mp4ファイルから32ビット整数を読み取り、その結果をSampleSizeTableデータ構造3440のメンバ「table配列」3456の項目「entry」に割り当てる。
11.量「entry」の値を1つ増分する。
手順「sync sample table(stss)アトムの処理」は、次のステップからなる。
1.新しいサンプル・テーブル・データ構造3420を作成する。
2.この新しいサンプル・テーブル・データ構造3420のアドレスを、現在のSampleTablesデータ構造3400のメンバSyncSampleTable 3416に割り当てる。
3.量「atomSize」の値を、新しいサンプル・テーブル・データ構造3420のメンバ「size」3423に割り当てる。
4.mp4ファイルから32ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造3420のメンバ「version & Flags」3426に割り当てる。
5.mp4ファイルから32ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造3420のメンバ「numEntries」3428に割り当てる。
6.numEntries個の項目を有する整数の配列を作成し、この配列のアドレスを、新しいサンプル・テーブル・データ構造3420のメンバ「table配列」3430に割り当てる。
7.値0を、量「entry」に割り当てる。
8.次のステップを、numEntries回(量「entry」の値がメンバ「numEntries」3428の値と等しくなるまで)繰り返す。
9.mp4ファイルから32ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造3420の配列「table配列」3430の項目「entry」に割り当てる。
10.項目「entry」の値を1つ増分する。
手順「sample description table(stsd)アトム」は、次のステップからなる。
1.新しいサンプル・テーブル・データ構造3420を作成する。
2.この新しいサンプル・テーブル・データ構造3440のアドレスを、現在のSampleTablesデータ構造3400のメンバSampleDescriptionTable 3418に割り当てる。
3.量「atomSize」の値を、新しいサンプル・テーブル・データ構造3420のメンバ「size」3423に割り当てる。
4.mp4ファイルから32ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造3420のメンバ「version & Flags」3426に割り当てる。
5.mp4ファイルから32ビット整数を読み取り、その結果を新しいサンプル・テーブル・データ構造3420のメンバ「numEntries」3428に割り当てる。
6.numEntries個の項目を有する整数の配列を作成し、この配列のアドレスを、新しいサンプル・テーブル・データ構造3420のメンバ「table配列」3430に割り当てる。
7.値0を、量「entry」に割り当てる。
8.次のステップを、numEntries回(量「entry」の値がメンバ「numEntries」3428の値と等しくなるまで)繰り返す。
9.新しいSampleDescriptionデータ構造3480を作成する。
10.この新しいSampleDescriptionデータ構造3480のアドレスを、新しいサンプル・テーブル・データ構造3420のメンバ「table配列」3430の項目「entry」に割り当てる。
11.mp4ファイルから32ビット整数を読み取り、その結果をSampleDescriptionデータ構造3480のメンバ「size」3483に割り当てる。
12.mp4ファイルから32ビット整数を読み取り、その結果をSampleDescriptionデータ構造3480のメンバ「dataFormat」3486に割り当てる。メンバ「dataFormat」の値は、4文字シーケンス、「mp4a」、「mp4v」、および「mp4s」の1つを表す可能性がある。
13.mp4ファイルから6バイトを読み取り、結果の値を無視する。
14.mp4ファイルから16ビット整数を読み取り、その結果をSampleDescriptionデータ構造3480のメンバ「dataReference」3488に割り当てる。
15.量「dataFormat」の値が、ストリング「mp4a」に対応する場合に、mp4ファイルから20バイトを読み取り、結果の値を無視する。
16.量「dataFormat」の値が、ストリング「mp4v」に対応する場合に、mp4ファイルから70バイトを読み取り、結果の値を無視する。
17.mp4ファイルから32ビット整数を読み取り、結果を量「atomSize」に割り当てる。
18.mp4ファイルから32ビット整数を読み取り、結果を量「atomId」に割り当てる。
19.量「atomId」の値が「esds」に対応する場合に、手順「esdsアトムの処理」を実行する。そうでない場合に、mp4ファイルから(atomSize−8)バイトを読み取り、この値を無視する。
手順「esdsアトムの処理」は、次のステップからなる。
1.mp4ファイルから32ビット整数を読み取り、その結果をSampleDescriptionデータ構造3480のメンバ「esdVersion」3490に割り当てる。
2.量「atomSize」の値から12を引き、その結果を現在のSampleDescriptionデータ構造3480のメンバ「esdSize」3493に割り当てる。
3.esdSize 3493個の項目を有するバイトの新しい配列を作成し、この配列のアドレスを、現在のSampleDescriptionデータ構造3480のメンバ「esdData」3496に割り当てる。
4.mp4ファイルからesdSize 3493個のバイトのシーケンスを読み取り、これらの値を、配列「esdData」3496の連続する項目にコピーする。
QtInfoデータ構造に基づく中間xml文書およびメディア・データ・ファイルの作成
mp4バイナリ・ファイル700および2210に基づくQtInfoデータ構造3100の作成の後に、QtInfoデータ構造3100を使用して、メディア・データ・ファイル2230の組ならびに中間xml文書2250および2260の対を作成する。これらのxml文書に、「mp4file」文書2250および2300と、「mp4bifs」文書2260および2800が含まれる。mp4file文書2250および2300の構造を、図23から27に示す。mp4bifs文書2260および2800の構造を、図28から30に示す。
この処理は、次の2つのステップに分割される。
1.QtInfoデータ構造3100内で表された(3113、3160)media data(mdat)アトム706のxml表現2310を形成し、関連するメディア・データ3168をxml文書またはバイナリ・メディア・データ・ファイル2230に保管する。
2.QtInfoデータ構造3100で表されたmoovアトム712のxml表現2320を形成する。
これらのステップのそれぞれを、下で説明する。
ステップ1.QtInfoデータ構造内で表されたmedia dataアトムのxml表現を形成し、関連するメディア・データをxml文書またはバイナリ・メディア・データ・ファイルに保管する
このステップでは、QtInfoデータ構造3100で表された各mdatアトム706を、mp4file文書2300内のmdat要素2310によって表す。オーディオ・ストリームまたはビジュアル・ストリーム(存在する場合に)に関連するメディア・データ3168は、新しいバイナリ・メディア・データ・ファイル2230に転送される。scene description stream(sdsmまたはBIFS)に関連するメディア・データ3168は、mp4bifs文書2260および2800の形で表される。object descriptor stream(存在する場合に)に関連するメディア・データ3168は、mp4file文書2300内のxml形式2500で表される。
図111からわかるように、このステップは、次の手順を用いて達成される。
1.動作4200で、値0を、量「iMdat」、「numVisual」、および「numAudio」に割り当てる。
2.動作4210で、量「iMdat」の値を、QtInfo構造3100のメンバ「numMdatAtoms」3110の値と比較する。
3.量「iMdat」の値が、メンバ「numMdatAtoms」の値と等しい場合に、動作4220で、このステップを終了する。そうでない場合には、下の手順で継続する。
4.動作4230で、QtInfo構造3100のメンバ「mdat配列」3113の項目「iMdat」の値を、mdatデータ構造3160のアドレスを表す量「mdatAtom」に割り当てる。
5.動作4240で、mdatデータ構造「mdatAtom」3160のメンバ「start」3166の値を、量「mdatStart」に割り当てる。
6.動作4250で、mdatAtomメンバ「size」3163の値と量「mdatStart」の値の合計を、量「nextMdat」に割り当てる。
7.動作4260で、新しい「mdat」要素2310を作成し、mp4file文書2300のトップ・レベル要素に付加する。量「iMdat」の値を、新しいmdat要素の属性「mdatID」に割り当て、量「mdatSize」の値を新しいmdat要素の属性「size」に割り当て、mdatデータ構造「mdatAtom」のメンバ「MediaData」の値を、量「mediaData」に割り当てる。
8.動作4270で、手順「メディア・データの処理」を実行する。
9.動作4280で、量「iMdat」の値を1つ増分し、動作4210を繰り返す。
手順「メディア・データの処理」
手順「メディア・データの処理」4270は、図112に示されているように、次のステップからなる。
1.値0を、量「iTrack」に割り当てる動作4300。
2.量「iTrack」の値をQtInfo構造3100のメンバ「numTracks」3118と比較する動作4310。
3.量「iTrack」の値がQtInfo構造3100のメンバ「numTracks」3118の値と等しい場合に、この処理を終了する動作4315。
4.QtInfo構造3100のメンバ「trak配列」3120の項目「iTrack」の値をtrakデータ構造3200のアドレス「trakAtom」に割り当てる動作4320。データ構造「trakAtom」3200のメンバTrackMedia 3206のメンバMediaInfo 3234のメンバSampleTables 3340のメンバChunkOffsetTable 3408のメンバ「table配列」3430によって指定される整数の配列の最初の項目(項目0)の値を、量「chunkOffset」に割り当てる。
5.量「chunkOffset」の値が0より大きく、量「mdatStart」の値以上であり、量「nextMdat」未満である場合に、次のステップを実行する動作4330。そうでない場合には、量「iTrack」の値を1つ増分する(動作4390)。
6.手順「ストリーム・タイプの発見」を実行する動作4340。
7.量「streamType」の値を値「1」と比較する動作4350。
8.量「streamType」の値が「1」である場合に、手順「OdsmDataToXml」を実行する動作4355。
9.量「streamType」の値を値「3」と比較する動作4360。
10.量「streamType」の値が「3」である場合に、手順「SdsmDataToXml」を実行する動作4365。
11.量「streamType」の値を値「4」と比較する動作4370。
12.量「streamType」の値が「4」である場合に、手順「VisualDataToXml」を実行し、その後、「numVisual」の値を1つ増分する動作4375。
13.量「streamType」の値を値「5」と比較する動作4380。
14.量「streamType」の値が「5」である場合に、手順「AudioDataToXml」を実行し、その後、「numAudio」の値を1つ増分する動作4385。
15.量「iTrack」の値を1つ増分する動作4390。
手順「ストリーム・タイプの発見」
手順「ストリーム・タイプの発見」は、図113からわかるように、次のステップからなる。
1.データ構造「trakAtom」のメンバTrackMedia 3206のメンバMediaInfo 3234のメンバSampleTables 3340のメンバSampleDescriptionTable 3418の値を、サンプル・テーブル・データ構造3420のアドレスを表す量「stsdAtom」に割り当てる動作4400。
2.量「stsdAtom」の値によって指定されるサンプル・テーブル・データ構造3420のメンバ「table配列」3430の第1項目(項目0)によって指定されるSampleDescriptionデータ構造3480のメンバ「esdData」3496の値を、バイトの配列を表す量「esdData」に割り当てる動作4410。
3.量「stsdAtom」の値によって指定されるサンプル・テーブル・データ構造3420のメンバ「table配列」の第1項目(項目0)によって指定されるSampleDescriptionデータ構造3480のメンバ「esdSize」の値を、量「esdSize」に割り当てる動作4420。
4.値0を量「esdPos」に割り当てる動作4430。
5.手順「デコーダ構成記述子の発見」を実行する動作4440。
6.手順「タグ・サイズの取得」を実行する動作4450。
7.配列「esdData」の項目「esdPos」の値を量「objectType」に割り当てる動作4460。
8.量「esdPos」の値を1つ増分する動作4470。
9.配列「esdData」の項目「esdPos」の値を入手し、その結果を2ビット右にシフトし(4で割り)、その結果を量「streamType」に割り当てる動作4480。
量「esdPos」の値が、ステップ5から10で量「esdSize」以上である場合に、値0を量「streamType」および「objectType」に割り当て、この処理を終了する。
手順「デコーダ構成記述子の発見」
手順「デコーダ構成記述子の発見」は、図114からわかるように、次のステップからなる。
1.配列「esdData」の項目「esdPos」の値を量「esdTag」に割り当てる動作4500。
2.量「esdTag」の値を値「3」と比較する動作4510。
3.量「esdTag」の値が「3」でない場合に、量「esdSize」の値を量「esdPos」に割り当てる動作4520と、この手順を終了する動作4525。そうでない場合には、次のステップを実行する。
4.量「esdPos」の値を1つ増分する動作4530。
5.手順「タグ・サイズの取得」を実行する動作4535。
6.量「esdPos」の値を「4」だけ増分する動作4540。
7.配列「esdData」の項目「esdPos」の値を量「esdTag」に割り当てる動作4550。
8.量「esdTag」の値を値「4」と比較する動作4560。
9.量「esdTag」の値が「4」でない場合に、量「esdPos」の値を1つ増分する動作4565、手順「タグサイズの取得」を実行する動作4570、量「tagSize」の値を量「esdPos」の値に加算する動作4575と、その後の動作4550の繰り返し。
10.そうでない場合に、量「esdPos」の値を1つ増分する動作4580。
11.この手順を終了し、手順「ストリーム・タイプの発見」で継続する動作4585。
手順「タグ・サイズの取得」
手順「タグ・サイズの取得」は、次のステップからなる。
1.値0を量「tagSize」に割り当てる動作4600。
2.配列「esdData」の項目「esdPos」の値を量「sizeByte」に割り当てる動作4610。
3.量「sizeByte」の値を値128と比較する動作4620。量「sizeByte」の値が128以上である場合には、次の動作を実行する。
4.量「sizeByte」の値から128を引く(または、量「sizeByte」の値をこの値の下位7ビットと置換する)動作4630。
5.量「tagSize」の値に128をかける(または、この値を左に7ビットだけシフトする)動作4640。
6.量「sizeByte」の値を量「tagSize」の値に加算する動作4650。
7.量「esdPos」の値を値「1」だけ増分する動作4660。
8.動作4610を繰り返す。量「sizeByte」が128未満の場合に、下の動作を実行する。
9.量「tagSize」の値に128をかける(左に7ビットだけシフトする)動作4670。
10.量「sizeByte」の値を量「tagSize」の値に加算する動作4680。
11.量「esdPos」の値を値「1」だけ増分する動作4690。
12.動作4695で、この手順が終了し、この手順を呼び出した手順で継続する。
手順「OdsmDataToXml」
手順「OdsmDataToXml」4355は、mdat構造「mdatAtom」に含まれるodsmデータ・ストリーム(object descriptor stream)のxml表現を作成する。図116からわかるように、次の動作を使用して、このodsmデータ・ストリームのxml表現を作成する。
1.動作4700で、mdat構造「mdatAtom」のメンバ「MediaData」3168の値を、バイトの配列のアドレスを表す量「OdsmData」に割り当てる。mdat構造「mdatAtom」のメンバ「size」3163の値を、整数量「OdsmSize」に割り当てる。
2.動作4705で、新しい「odsm」要素2460を作成し、現在のmdat要素2400に付加する。trak構造3200「trakAtom」に含まれるTrackHeader構造3212、3204のメンバtrackID 3224の値を、新しい「odsm」要素の属性「trackID」に割り当てる。
3.動作4710で、ChunkOffsetTable 3408のサンプル・テーブル構造3420のメンバnumEntries 3428の値を、量「numChunks」に割り当てる。SampleToChunkTable 3406のサンプル・テーブル構造3420のメンバnumEntries 3428の値を、量「numStscEntries」に割り当てる。サンプル・テーブル構造ChunkOffsetTable、SampleToChunkTableなどは、trak構造3200「trakAtom」のメンバ「TrackMedia」3206によって表されるTrackMediaデータ構造3226のメンバ「MediaInfo」3234によって表されるMediaInfoデータ構造3333のメンバ「SampleTables」3340によって表されるSampleTables構造3400のメンバである。
4.動作4715で、値0を量「sttsIndex」に割り当てる。TimeToSampleTable 3410のサンプル・テーブル構造3420に含まれるtable配列3430の最初の項目の値を、TimeToSample構造3470のアドレスを表す量sttsEntryに割り当てる。TimeToSample構造sttsEntryのメンバ「count」の値を、量「count」に割り当てる。TimeToSample構造sttsEntryのメンバ「duration」の値を、量「duration」に割り当てる。
5.動作4720で、値0を量「stscIndex」に割り当てる。SampleToChunkTable 3406のサンプル・テーブル構造3420に含まれるtable配列3430の最初の項目の値を、SampleToChunk構造3460のアドレスを表す量stscEntryに割り当てる。SampleToChunk構造stscEntryのメンバ「firstChunk」の値から1を引いたものを、整数量「firstChunk」に割り当てる。
6.動作4725で、値0を整数量「time」、「sample」、および「chunk」に割り当てる。
7.動作4730で、量「chunk」の値を量「numChunks」の値と比較する。
8.動作4735で、量「chunk」の値が量「numChunks」の値と等しい場合に、手順「OdsmDataToXml」が終了する。
9.動作4740で、量「chunk」の値が量「numChunks」の値と等しくない場合に、mdat構造3160 mdatAtomのメンバ「start」の値に「8」を加算し、その結果を、ChunkOffsetTable 3408のサンプル・テーブル構造3420に含まれるtable配列3430の項目「chunk」の値から引き、その結果を整数量「offset」に割り当てる。
10.動作4745で、量「chunk」の値を量「firstChunk」の値と比較する。
11.動作4750で、量「chunk」の値が量「firstChunk」の値と等しい場合に、SampleToChunk構造3460 stscEntryのメンバ「numSamples」3466の値を、量「numSamples」に割り当てる。量「stscIndex」の値を1つ増分する。量「stscIndex」の値が、量「numStscEntries」の値より小さい場合に、SampleToChunkTable 3406のサンプル・テーブル構造3420に含まれるtable配列3430の項目「stscIndex」の値を、SampleToChunk構造3460 stscEntryに割り当て、SampleToChunk構造stscEntryのメンバ「firstChunk」の値から1を引いたものを、整数量「firstChunk」に割り当てる。そうでない場合に、量「numChunks」の値を、量「firstChunk」に割り当てる。
12.動作4755で、SampleSizeTable 3413のSampleSizeTable構造3440に含まれる整数の配列3456の項目「sample」から「sample+numSamples−1」までを合計することによって、量「chunkSize」の値を決定する。
13.動作4760で、新しい「odsmChunk」要素を作成し、動作4705で作成された新しい「odsm」要素に付加する。量「offset」の値を、新しい「odsmChunk」要素の属性「offset」に割り当てる。量「chunkSize」の値を、新しい「odsmChunk」要素の属性「size」に割り当てる。
14.動作4770で、図117に示された手順「odsmチャンクのデコード」を実行する。
15.動作4780で、量「chunk」の値を1つ増分し、動作4730を繰り返す。
手順「odsmチャンクのデコード」
図117からわかるように、手順「odsmチャンクのデコード」は、次のステップからなる。
1.量「chunkSize」の値を0と比較する動作4800。
2.量「chunkSize」の値が0を超えない場合に、手順「odsmチャンクのデコード」を終了し、動作4780で手順「OdsmDataToXml」を再開する動作4805。
3.量「chunkSize」の値が0を超える場合に、SampleSizeTable 3413のSampleSizeTable構造3440のメンバtable 3456の項目「sample」の値を整数量「sampleSize」に割り当てる動作4810。
4.新しいodsmSample要素を作成し、上の4760で作成されたodsmChunk要素に付加する動作4820。量「offset」の値を、新しいodsmSample要素の属性「offset」に割り当てる。量「sampleSize」の値を、新しいodsmSample要素の属性「size」に割り当てる。量「time」の値を新しいodsmSample要素の属性「time」に割り当てる。
5.量「time」の値を、量「duration」の値だけ増分する動作4825。量「count」の値を値「1」だけ減分する。
6.量「count」の値を0と比較する動作4830。
7.量「count」の値が0を超えない場合に、量「sttsIndex」の値を値「1」だけ増分する動作4835。TimeToSampleTable 3410のサンプル・テーブル構造3420に含まれるtable配列3430の項目「sttsIndex」の値を、TimeToSample構造3470sttsEntryに割り当てる。TimeToSample構造sttsEntryのメンバ「count」の値を、量「count」に割り当てる。TimeToSample構造sttsEntryのメンバ「duration」の値を、量「duration」に割り当てる。
8.量「chunkSize」の値を、量「sampleSize」の値だけ減分する動作4840。
9.量「sampleSize」の値を0と比較する動作4845。
10.量「sampleSize」の値が0を超えない場合に、量「sample」の値を「1」だけ増分し、動作4800で処理を継続する動作4850。
11.量「sampleSize」の値が0を超える場合に、バイトの配列「OdsmData」の項目「offset」の値を量「tag」に割り当てる動作4860。量「offset」の値を値「1」だけ増分し、量「sampleSize」の値を値「1」だけ減分する。
12.手順「タグ・サイズの取得」を実行する動作4865。これは、
(a)バイトの配列OdsmDataが、配列「esdData」の代わりに使用され、
(b)量「offset」が、量「esdPos」の代わりに使用され、
(c)量「offset」(esdPos)が1つ増分される(動作4660、4690)たびに、量「sampleSize」の値が、値「1」だけ減分される
ことを除いて、上で説明した手順「タグ・サイズの取得」と同等である。
13.量「tag」の値を、MPEG−4 Systems仕様で定義された量「ObjectDescrUpdateTag」の値と比較する動作4870。
14.量「tag」の値が量「ObjectDescrUpdateTag」の値と等しい場合に、手順「OdUpdateのデコード」を実行する動作4875。
15.そうでない場合に、量「tag」の値を、MPEG−4 Systems仕様で定義された量「ObjectDescrRemoveTag」の値と比較する動作4880。
16.量「tag」の値が量「ObjectDescrRemoveTag」の値と等しい場合に、手順「OdRemoveのデコード」を実行する動作4885。
17.そうでない場合に、量「offset」の値を量「tagSize」の値だけ増分する動作4890。
18.量「sampleSize」の値を量「tagSize」(動作4865で決定される)だけ減分する動作4895。
19.処理は、動作4845で継続される。
手順「OdUpdateのデコード」
odsmコマンドに関する動作4860でのコマンド・タグの値が、値「ObjectDescrUpdateTag」と等しい場合(動作4870、2000)に、図118に示されている、次のステップ4875が実行される。
1.動作4900で、新しいObjectDescrUpdate要素2540を作成し、現在のodsmSample要素2520に付加する。
2.動作4910で、手順「タグ・サイズの取得」を使用して、量「tagSize」の値(numBytes 2020)を入手する。これは、(a)バイトの配列OdsmDataが、配列「esdData」の代わりに使用され、(b)量「offset」が、量「esdPos」の代わりに使用されることを除いて、上で説明した手順「タグ・サイズの取得」と同等である。量「tagSize」の値を、量「residualSize」に割り当てる。
3.動作4920で、量「residualSize」の値を値「1」と比較する。
4.動作4925で、量「residualSize」の値が1未満である場合に、この手順が完了する。
5.動作4930で、量「residualSize」の値が1未満でない場合に、バイトの配列「OdsmData」の項目「offset」の値を、量「odTag」に割り当てる。量「offset」の値を「1」だけ増分し、量「residualSize」の値を「1」だけ減分する。
6.動作4940で、手順「タグ・サイズの取得」を使用して、量「tagSize」(numBytes 2116)の値を入手する。これは、(a)バイトの配列OdsmDataが、配列「esdData」の代わりに使用され、(b)量「offset」が、量「esdPos」の代わりに使用されることを除いて、上で説明した手順「タグ・サイズの取得」と同等である。量「tagSize」の値を、量「odSize」に割り当てる。
7.動作4950で、量「residualSize」の値を、量「odSize」の値だけ減分する。
8.動作4960で、量「odTag」の値を、MPEG−4 System仕様で定義された値「MP4_OD_Tag」と比較する。
9.動作4965で、量「odTag」の値が、「MP4_OD_Tag」と等しくない場合に、量「offset」の値を、量「tagSize」の値だけ増分し、動作4920を繰り返す。
10.動作4970で、量「odTag」の値が、「MP4_OD_Tag」2108と等しい場合に、新しい「ObjectDescriptor」要素2550を作成し、現在のObjectDescriptorUpdate要素2540に付加する。
11.動作4980で、量「ObjectDescriptorID」2124の値を決定し、その結果を新しいObjectDescriptor要素2550の属性「ODID」に割り当てる。
量「ObjectDescriptorID」の値は、次の動作によって決定することができる。
(a)バイトの配列「OdsmData」の項目offsetの値を整数量「temp1」に割り当て、
(b)量「offset」の値を1つ増分し、量「odSize」の値を1つ減分し、
(c)バイトの配列「OdsmData」の項目offsetの値を整数量「temp2」に割り当て、
(d)量「offset」の値を1つ増分し、量「odSize」の値を1つ減分し、
(e)量「temp1」の値に4をかけ(左に2ビットだけシフトし)、
(f)量「temp2」の値を64で割り(右に6ビットだけシフトし)、
(g)値「temp1」と「temp2」の合計を整数量「ObjectDescriptorID」に割り当てる。
12.動作4990で、下で説明する手順「decodeEsIdRef」を実行する。
手順「decodeEsIdRef」
図119からわかるように、手順「decodeEsIdRef」4990は、次のステップからなる。
1.動作5000で、量「odSize」の値を値「1」と比較する。
2.動作5010で、量「odSize」の値が「1」未満である場合に、この手順を終了する。
3.動作5020で、バイトの配列「OdsmData」の項目「offset」の値を、量「esdTag」に割り当て、量「offset」の値を「1」だけ増分し、量「odSize」の値を「1」だけ減分する。
4.動作5030で、手順「タグ・サイズの取得」を使用して、量「tagSize」(numBytes 2180)の値を入手する。これは、(a)バイトの配列OdsmDataが、配列「esdData」の代わりに使用され、(b)量「offset」が、量「esdPos」の代わりに使用されることを除いて、上で説明した手順「タグ・サイズの取得」と同等である。量「tagSize」の値を、量「esdSize」に割り当てる。
5.動作5040で、量「odSize」の値を、量「esdSize」の値だけ減分する。
6.動作5050で、量「esdTag」の値を、MPEG−4 System仕様で定義された値「ES_ID_RefTag」と比較する。
7.動作5060で、量「esdTag」の値が値「ES_ID_RefTag」と等しくない場合に、量「offset」の値を量「esdSize」の値だけ増分し、動作5000を繰り返す。
8.動作5070で、量「esdTag」の値が値「ES_ID_RefTag」と等しい場合に、新しい「EsIdRef」要素2560を作成し、これを現在のObjectDescriptor要素2550に付加する。
9.動作5080で、量「ES_ID」2190の値を決定し、その結果を新しいEsIdRef要素2560の属性「EsId」に割り当てる。
量「ES_ID」の値は、次の動作によって決定することができる。
(a)バイトの配列「OdsmData」の項目offsetの値を整数量「temp1」に割り当て、
(b)量「offset」の値を1つ増分し、
(c)バイトの配列「OdsmData」の項目offsetの値を整数量「temp2」に割り当て、
(d)量「offset」の値を1つ増分し、
(e)量「temp1」の値に256をかけ(左に8ビットだけシフトし)、
(f)値「temp1」と「temp2」の合計を整数量「ES_ID」に割り当てる。
手順「OdRemoveのデコード」
odsmコマンド1960のコマンド・タグの値が、値「ObjectDescrRemoveTag」2050と等しい場合に、次のステップを実行する4885。
1.新しいObjectDescrRemove要素2570を作成し、現在のodsmSample要素2520に付加する。
2.手順「タグ・サイズの取得」を使用して、量「tagSize」(numBytes 2060)を入手する。これは、(a)バイトの配列OdsmDataが、配列「esdData」の代わりに使用され、(b)量「offset」が、量「esdPos」の代わりに使用されることを除いて、上で説明した手順「タグ・サイズの取得」と同等である。
3.量「tagSize」の値に8をかけ、その結果を10で割り、その結果を量「numOdIds」に割り当てる。
4.新しいヌル・ストリング量「OdIdList」を作成する。
5.バイトの配列「OdsmData」を、項目「offset」から始まるビットのシーケンスとして扱う。このビットのシーケンスからnumOdId個の連続する10ビット整数値(objectDescriptorId 2070)を抽出する。
6.これらのobjectDescriptorId値 2070のそれぞれのストリング表現を作成する。連続する値を単一の空白スペース文字で区切って、これらのストリング値のそれぞれを、ストリング量「OdIdList」に連結する。
7.ストリング量「OdIdList」の結果の値を、新しいObjectDescrRemove要素2570の属性「ODID」に割り当てる。
手順「VisualDataToXml」
手順「VisualDataToXml」4375は、mdat構造「mdatAtom」に含まれるビジュアル・メディア・データ・ストリームを含むチャンクのxml表現を作成する。これらのチャンクに含まれるメディア・データは、外部メディア・データ・ファイルにもコピーされる。図120からわかるように、この手順は、次の動作からなる。
1.動作5100で、mdat構造「mdatAtom」のメンバ「MediaData」3168の値を、バイトの配列のアドレスを表す量「MediaData」に割り当てる。mdat構造「mdatAtom」のメンバ「size」3163の値を、整数量「MediaSize」に割り当てる。
2.動作5105で、新しい「mediaFile」要素2480を作成し、現在のmdat要素2400に付加する。そのような「mediaFile」要素2480のそれぞれは、2つの属性「trackID」および「name」を有する。属性「name」の値は、このストリームを含むメディア・データ・チャンクを含むメディア・データ・ファイル2230の名前を指定する。
trak構造「trakAtom」に含まれるTrackHeader構造3212、3204のメンバtrackID 3224の値を、新しい「mediaFile」要素2480の属性「trackID」の値に割り当てる。
「name」属性の値は、3つの文字のストリングすなわち、ファイル名スタブ、シーケンス番号、およびファイル・タイプ・サフィックスを連結することによって決定される。ファイル名スタブは、入力mp4ファイルの名前のコピーから、「.」(ドットまたはピリオド)文字の最後の出現とそれ以降の文字を除いたものによって決定することができる。シーケンス番号は、ビジュアル・オブジェクト・シーケンス番号「numVisual」の値のストリング表現から形成することができる。
ファイル・タイプ・サフィックスは、量objectTypeの値、またはメディア・データ・ストリームに含まれるファイル・フォーマット・インジケータ、あるいはその両方に依存するものとすることができる。たとえば、量objectTypeの値が「32」である場合に、ファイル・タイプ・サフィックスを、「.m4v」(MPEG−4ビデオ)と指定することができる。
3.動作5110で、新しいメディア・データ・ファイルを、書き込みのためにオープンする。この新しいメディア・データ・ファイルの名前は、動作5105で確立されたmediaFile要素2480の「name」属性の値によって決定される。
「MPEG−4ビデオ」(objectType 1044は「32」)の場合に、データの最初のブロックは、新しいメディア・データ・ファイルの先頭に置かなければならない。このデータのブロックは、量「iTrack」によって指定される値を有するtrackID値3224を有するtrak構造3200のSampleDescriptionデータ構造3480のメンバ「esdData」3496によって指定されるバイトの配列に含まれる「デコーダ固有情報」ブロック1072、1076に含まれる。SampleDescriptionデータ構造3480は、このtrak構造のSampleDescriptionsデータ構造3400のSampleDescriptionTableデータ構造3418のメンバtable 3430の最初の項目(項目0)によって決定される。「デコーダ固有情報」ブロック1072、1076は、このesdDataデータ・ブロック3496に含まれる「デコーダ構成記述子」データ・ブロック1024、1032に含まれる。
デコーダ構成記述子データ1032は、上で説明した手順「デコーダ構成記述子の発見」を使用して突き止めることができる。デコーダ固有情報データ・ブロック1072、1076は、デコーダ構成記述子1032内で、decoderConfigDescriptorTag 1036、デコーダ構成記述子サイズ値1040、および14バイトのデコーダ構成記述子データ1044から1068の後に配置される。デコーダ固有情報データ・ブロック1076は、1バイトのdecoderSpecificInfoTag 1080(値「5」)、デコーダ固有情報データ・ブロック・サイズ値(numBytes 1084)、およびnumBytesバイトのデコーダ固有情報データからなる。このnumBytes 1084バイトのシーケンスが、出力メディア・データ・ファイル2230にコピーされる。
4.動作5115で、ChunkOffsetTable 3408のサンプル・テーブル構造3420のメンバnumEntries 3428の値を、量「numChunks」に割り当てる。SampleToChunkTable 3406のサンプル・テーブルタ構造3420のメンバnumEntries 3428の値を、量「numStscEntries」に割り当てる。サンプル・テーブル構造ChunkOffsetTable、SampleToChunkTableなどは、trak構造3200 trakAtomのメンバ「TrackMedia」3206によって表されるTrackMediaデータ構造3226のメンバ「MediaInfo」3234によって表されるMediaInfoデータ構造3333のメンバ「SampleTables」3340によって表されるSampleTables構造3400のメンバである。
5.動作5120で、TimeToSample構造sttsEntryのメンバ「count」の値を、量「count」に割り当てる。
6.動作5125で、値0を、量「stscIndex」に割り当てる。SampleToChunkTable 3406のサンプル・テーブル構造3420に含まれるtable配列3430の最初の項目の値を、SampleToChunk構造3460のアドレスを表す量stscEntryに割り当てる。SampleToChunk構造stscEntryのメンバ「firstChunk」の値から1を引いたものを、整数量「firstChunk」に割り当てる。
7.動作5130で、値0を、整数量「chunk」に割り当てる。
8.動作5140で、量「chunk」の値を、量「numChunks」の値と比較する。
9.動作5145で、量「chunk」の値が量「numChunks」の値と等しい場合に、手順「VisualDataToXml」が終了する。
10.動作5150で、量「chunk」の値が量「numChunks」の値と等しくない場合に、値「8」をmdat構造3160 mdatAtomのメンバ「start」の値に加算し、その結果をChunkOffsetTable 3408のサンプル・テーブル構造3420に含まれるtable配列3430の項目「chunk」の値から引き、その結果を整数量「offset」に割り当てる。
11.動作5160で、量「chunk」の値を、量「firstChunk」の値と比較する。
12.動作5165で、量「chunk」の値が量「firstChunk」の値と等しい場合に、SampleToChunk構造3460 stscEntryのメンバ「numSamples」3466の値を、量「numSamples」に割り当てる。量「stscIndex」の値を1つ増分する。量「stscIndex」の値が、量「numStscEntries」より小さい場合に、SampleToChunkTable 3406のサンプル・テーブル構造3420に含まれるtable配列3430の項目「stscIndex」の値を、SampleToChunk構造3460 stscEntryに割り当て、SampleToChunk構造stscEntryのメンバ「firstChunk」の値から1を引いたものを、整数量「firstChunk」に割り当てる。そうでない場合には、量「numChunks」の値を、量「firstChunk」に割り当てる。
13.動作5170で、SampleSizeTable 3413のSampleSizeTable構造3440に含まれる整数の配列3456の項目「sample」から「sample+numSamples−1」までを合計することによって、量「chunkSize」の値を決定する。
14.動作5180で、新しい「chunk」要素を作成し、動作5105で作成された新しい「mediaFile」要素に付加する。量「offset」の値を、新しい「chunk」要素の属性「offset」に割り当てる。量「chunkSize」の値を、新しい「chunk」要素の属性「size」に割り当てる。
15.動作5185で、バイト配列MediaDataの先頭からoffsetバイトから始まるメディア・データのchunkSizeバイトを、動作5110でオープンされた出力メディア・データ・ファイルにコピーする。
16.動作5190で、量「chunk」の値を1つ増分し、動作5140を繰り返す。
手順「AudioDataToXml」
手順「AudioDataToXml」4385は、mdat構造「mdatAtom」に含まれるオーディオ・メディア・データ・ストリームを含むチャンクを表すxml表現を作成する。これらのチャンクに含まれるメディア・データは、外部メディア・データ・ファイルにもコピーされる。図120からわかるように、この手順は、次の相違を除いて上で説明した手順「VisualDataToXml」と同等である。
「name」属性の値を形成するのに使用されるシーケンス番号を、オーディオ・オブジェクト・シーケンス番号「numAudio」のストリング表現から形成することができる。
ファイル・タイプ・サフィックスは、量objectTypeの値またはメディア・データ・ストリームに含まれるファイル・フォーマット表示あるいはこの両方に依存するものとすることができる。たとえば、量objectTypeの値が「107」である場合に、ファイル・タイプ・サフィックスを、「.mp3」(MPEG−1 layer 3オーディオ)と指定することができる。
動作5145で、量「chunk」の値が量「numChunks」の値と等しい場合に、手順「AudioDataToXml」が終了する。
MPEG−2 AAC(Advanced Audio Coding)など、あるタイプのオーディオ・データは、本明細書で説明したものを超える追加処理を必要とする場合がある。そのような処理を実行する手段は、対応するメディア固有ファイル構造仕様に基づいて、当業者が考案することができる。各タイプのオーディオ・データを処理するのに使用される特定の手段は、本明細書には含まれない。
手順「SdsmDataToXml」
手順「SdsmDataToXml」4365は、現在のmdat構造「mdatAtom」に含まれるsdsm(BIFS)データ・ストリーム(scene description stream)のxml表現を作成する。この手順によって作成されるsdsmのxml表現は、次の2つの部分からなる。
(a)sdsmを含むメディア・データ・チャンク2450の要約を含むsdsm要素2440。このsdsm要素2440は、mp4file文書2300の一部を形成する現在のmdat要素に含まれる。
(b)sdsmメディア・データ・サンプル1100および1110のxml表現が、mp4bifs文書2260および2800内に作成される。
図121からわかるように、この手順は、次の動作からなる。
1.動作5200で、mdat構造「mdatAtom」のメンバ「MediaData」3168の値を、バイトの配列のアドレスを表す量「SdsmData」に割り当てる。mdat構造「mdatAtom」のメンバ「size」3163の値を、整数量「SdsmSize」に割り当てる。
2.動作5205で、新しい「sdsm」要素2410、2440を作成し、現在のmdat要素2400に付加する。各そのような「sdsm」要素2440は、2つの属性「trackID」および「xmlFile」を有する。属性「xmlFile」は、結果のmp4bifs文書2260、2800を表すのに使用できる任意選択のxml出力ファイルの名前を指定する。この任意選択のxml出力ファイルは、診断に有用である場合があるが、本発明の動作に必要ではない(mp4バイナリ・ファイルに基づくXMT−Aファイルの作成用)。
trak構造「trakAtom」に含まれるTrackHeader構造3212、3204のメンバtrackID 3224の値を、新しい「sdsm」要素2440の属性「trackID」の値に割り当てる。
属性「xmlFile」の値を、文字の2つのストリング、ファイル名スタブおよびファイル・タイプ・サフィックスの連結によって決定する。ファイル名スタブは、入力mp4ファイルの名前のコピーから、「.」(ドットまたはピリオド)文字の最後の出現とそれ以降の文字を除いたものによって決定することができる。ファイル・タイプ・サフィックスは、「Bifs.xml」である。
3.動作5210で、新しい「bifsConfig」要素2810を作成し、mp4bifs文書2260、2800のトップ要素に付加する。下で説明する手順「bifsConfig属性のセット」を使用して、「bifsConfig」要素2810の属性をセットする。
4.動作5215で、ChunkOffsetTable 3408のサンプル・テーブル構造3420のメンバnumEntries 3428の値を、量「numChunks」に割り当てる。SampleToChunkTable 3406のサンプル・テーブル構造3420のメンバnumEntries 3428の値を、量「numStscEntries」に割り当てる。サンプル・テーブル構造ChunkOffsetTable、SampleToChunkTableなどは、trak構造3200 trakAtomのメンバ「TrackMedia」3206によって表されるTrackMediaデータ構造3226のメンバ「MediaInfo」3234によって表されるMediaInfoデータ構造3333のメンバ「SampleTables」3340によって表されるSampleTables構造3400のメンバである。
5.動作5220で、値0を、量「sttsIndex」に割り当てる。TimeToSampleTable 3410のサンプル・テーブル構造3420に含まれるtable配列3430の最初の項目の値を、TimeToSample構造3470のアドレスを表す量sttsEntryに割り当てる。TimeToSample構造sttsEntryのメンバ「count」の値を、量「count」に割り当てる。TimeToSample構造sttsEntryのメンバ「duration」の値を、量「duration」に割り当てる。
6.動作5225で、値0を量「stscIndex」に割り当てる。SampleToChunkTable 3406のサンプル・テーブル構造3420に含まれるtable配列3430の最初の項目の値を、SampleToChunk構造3460のアドレスを表す量stscEntryに割り当てる。SampleToChunk構造stscEntryのメンバ「firstChunk」の値から1を引いたものを、整数量「firstChunk」に割り当てる。
7.動作5230で、値0を整数量「chunk」に割り当てる。
8.動作5240で、量「chunk」の値を量「numChunks」の値と比較する。
9.動作5245で、量「chunk」の値が量「numChunks」の値と等しい場合に、手順「SdsmDataToXml」を終了する。
10.動作5250で、量「chunk」の値が量「numChunks」の値と等しくない場合に、値「8」を、mdat構造3160 mdatAtomのメンバ「start」の値に加算し、その結果を、ChunkOffsetTable 3408のサンプル・テーブル構造3420に含まれるtable配列3430の項目「chunk」から引き、その結果を、整数量「offset」に割り当てる。
11.動作5260で、量「chunk」の値を量「firstChunk」の値と比較する。
12.動作5265で、量「chunk」の値が量「firstChunk」の値と等しい場合に、SampleToChunk構造3460 stscEntryのメンバ「numSamples」3466の値を、量「numSamples」に割り当てる。量「stscIndex」の値を1つ増分する。量「stscIndex」の値が、量「numStscEntries」の値未満である場合に、SampleToChunkTable 3406のサンプル・テーブル構造3420に含まれるtable配列3430の項目「stscIndex」の値を、SampleToChunk構造3460 stscEntryに割り当て、SampleToChunk構造stscEntryのメンバ「firstChunk」の値から1を引いたものを、整数量「firstChunk」に割り当てる。そうでない場合には、量「numChunks」の値を、量「firstChunk」に割り当てる。
13.動作5270で、SampleSizeTable 3413のSampleSizeTable構造3440に含まれる整数の配列3456の項目「sample」から「sample+numSamples−1」までを合計することによって、量「chunkSize」の値を決定する。
14.動作5275で、numSamples個の項目を有するタイム・スタンプのテーブルを、関連するtrak構造3200に含まれる、TimeToSampleTableデータ構造3410のtable配列メンバ3430の項目、TrackEditデータ構造3208、3236、ならびにMediaHeaderデータ構造3230の内容に基づいて作成する。このテーブルには、現在のチャンクのサンプルごとに1つの項目が含まれ、このテーブルの各項目は、ストリーム内のすべての先行するサンプルのduration値3476の合計に、存在する場合に任意選択のTrackEditデータ構造3208、3236で指定される初期遅延を加えたものを表す。当業者は、使用可能な情報からそのようなテーブルを生成する手段を作成することができる。
15.動作5280で、新しい「chunk」要素を作成し、ステップ2で作成された新しい「sdsm」要素に付加する。量「offset」の値を、新しい「chunk」要素の属性「offset」に割り当てる。量「chunkSize」の値を、新しい「chunk」要素の属性「size」に割り当てる。
16.動作5285で、図122に示された手順「sdsmチャンクのデコード」を実行する。
17.動作5290で、量「chunk」の値を1つ増分し、動作5240を繰り返す。
手順bifsConfig属性のセット
mp4bifs bifsConfig要素2810は、7つの属性、「nodeIdBits」、「routeIdBits」、「commandFrame」、「useBIFSv2Config」、「protoIdbits」、「use3DMeshCoding」、および「usePredictiveMFField」を有する。これらの属性の値は、現在のtrakデータ構造「trakAtom」のデコーダ固有情報データ1072の内容によって決定される。このデータ・ブロックは、現在のtrakAtomデータ構造に含まれるSampleTablesデータ構造3400のメンバSampleDescriptionTable 3418のメンバ「table配列」3430の項目0によって指定されるSampleDescriptionデータ構造3480のesdDataメンバ1000、3496内のデコーダ構成記述子1024、1032に含まれる。
量「objectType」の値が「2」である場合に、デコーダ固有情報データは、「バージョン2」BIFS構成を表す。この場合に、デコーダ固有情報ブロックの最初の3バイトは、次の内容を有する。
[uraaaaab bbbbpppp pcxxxxxx]
ただし、
u=「use3DMeshCoding」の1ビット値
r=「usePredictiveMFField」の1ビット値
aaaaa=「nodeIdBits」の5ビット符号なし整数値
bbbbb=「routeIdBits」の5ビット符号なし整数値
ppppp=「protoIdbits」の5ビット符号なし整数値
c=「commandFrame」の1ビット値
aaaaa、bbbbb、およびpppppによって指定される値は、示された属性に割り当てられる。
「aaaaa」によって指定される符号なし整数値は、mp4bifs bifsConfig要素2810の「nodeIdBits」属性に割り当てられる。「bbbbb」によって指定される符号なし整数値は、mp4bifs bifsConfig要素2810の「routeIdBits」属性に割り当てられる。「ppppp」によって指定される符号なし整数値は、mp4bifs bifsConfig要素2810の「protoIdbits」属性に割り当てられる。
「u」、「r」、または「c」の値が「0」の場合に、値「偽」が、mp4bifs bifsConfig要素2810の対応する属性に割り当てられる。「u」、「r」、または「c」の値が「1」の場合に、値「真」が、mp4bifs bifsConfig要素2810の対応する属性に割り当てられる。
量「objectType」の値が「2」でない場合に、デコーダ固有情報データは、「バージョン1」BIFS構成を表す。この場合に、デコーダ固有情報ブロックの最初の2バイトは、次の内容を有する。
[aaaaabbb bbcxxxxx]
ただし、
aaaaa=「nodeIdBits」の5ビット符号なし整数値
bbbbb=「routeIdBits」の5ビット符号なし整数値
c「commandFrame」の1ビット値
この場合に、「protoIdbits」、「use3DMeshCoding」、および「usePredictiveMFField」の値は不要である。
「aaaaa」によって指定される符号なし整数値は、mp4bifs bifsConfig要素2810の「nodeIdBits」属性に割り当てられる。「bbbbb」によって指定される符号なし整数値は、mp4bifs bifsConfig要素2810の「routeIdBits」属性に割り当てられる。
「c」の値が「0」である場合に、値「偽」が、mp4bifs bifsConfig要素2810の「commandFrame」属性に割り当てられる。そうでない(「c」の値が「1」である)場合に、値「真」が、mp4bifs bifsConfig要素2810の「commandFrame」属性に割り当てられる。
手順「sdsmチャンクのデコード」
図122からわかるように、手順「sdsmチャンクのデコード」は、次のステップからなる。
1.動作5300で、量「offset」の値を、整数量「sdsmPos」に割り当てる。量「chunkSize」の値を、量「offset」の値に加算し、その結果を整数量「sdsmEnd」に割り当てる。量「sdsmPos」の値は、バイトの配列「SdsmData」内のバイトの位置を指定する。
関連する整数量「sdsmBit」は、量sdsmPosの値によって指定されるバイト内のビットの位置を示す。当初、値0を、関連する量「sdsmBit」に割り当てる。その後、sdsmビットストリームから抽出されるビットごとに、sdsmBitを1つ増分する。sdsmBitの値が7を超える場合に、必ず、「sdsmBit」の値を8つ減分し、「sdsmPos」の値を1つ増分する。
2.動作5305で、値0を整数量「sample」に割り当て、値「偽」を、boolean量「frameOpen」に割り当てる。
3.動作5310で、量「sdsmPos」の値を、量「sdsmEnd」の値と比較する。
4.動作5315で、量「sdsmPos」の値が、量「sdsmEnd」の値未満でない場合に、この手順は終了する。
5.動作5320で、量「sdsmPos」の値が、量「sdsmEnd」の値未満である場合に、量「frameOpen」の値を、値「偽」と比較する。
6.動作5325で、量「frameOpen」の値が値「偽」と等しい場合に、新しい「commandFrame」要素2820を作成し、mp4bifs文書2800に付加する。タイム・スタンプのテーブルの項目「sample」の値を、新しいcommandFrame要素の「time」属性に割り当てる。値「真」を、boolean量「frameOpen」に割り当てる。
7.動作5330で、「sdsmPos」および「sdsmBit」の値によって指定される点から始まるsdsmビットストリームの次の2ビットを、量「cmdCode」に割り当てる。量「sdsmBit」の値を2つ増分し、量「cmdCode」の値を0と比較する。
8.動作5335で、量「cmdCode」の値が「0」1206と等しい場合に、手順「挿入コマンドのデコード」を実行する。
9.動作5340で、量「cmdCode」の値を「1」と比較する。
10.動作5345で、量「cmdCode」の値が「1」1226と等しい場合に、手順「削除コマンドのデコード」を実行する。
11.動作5350で、量「cmdCode」の値を「2」と比較する。
12.動作5355で、量「cmdCode」の値が「2」1244と等しい場合に、手順「置換コマンドのデコード」を実行する。
13.動作5360で、量「cmdCode」の値が「0」、「1」、または「2」でない場合に、この値は2ビットのデータによって決定されるので、この値は「3」でなければならない。その結果、このステップの結果は必ず「yes」である。
14.動作5365で、量「cmdCode」の値が「3」1280と等しい場合に、手順「ReplaceSceneコマンドのデコード」を実行する。
手順「ReplaceSceneコマンドのデコード」には、新しい「ReplaceScene」bifsCommand要素2930を作成し、現在の「commandFrame」要素2830に付加することが含まれる。シーン置換cmdCode 1280に続くBIFSシーン・データ構造1290、1600を、解釈し、必要に応じてsdsmBitおよびsdsmByteの値を増やす。
「reserved」コンポーネント1610によって指定される値は、sdsmBitの値を増分することによってスキップされる。BIFSシーン・データ構造1600のUSENAMESコンポーネント1620およびprotoListコンポーネント1630によって指定される値が、判定され、新しい「ReplaceScene」要素の対応する属性に割り当てられる。
次に、手順「SFNodeのデコード」を使用して、BIFSシーン構造1600のSFTopNodeコンポーネント1640を解釈する。新しい「ReplaceScene」bifsCommand要素2930は、結果のTopNode BIFSノード要素2940の親として働く。
1ビット値「hasRoutes」1650を、boolean値「hasRoutes」に割り当てる。「hasRoutes」の値が「1」(「真」)である場合に、次のRoutesコンポーネント1660、1800、1830を解釈する。新しい「Routes」要素2950を作成し、新しい「ReplaceScene」要素2930に付加する。Routesコンポーネント1660に含まれるRoute構造1810または1850ごとに、新しい「Routes」要素2950を作成し、新しい「Routes」要素2950に付加する。各Route構造1860のコンポーネント、routeID 1870、routeName 1875、outNodeID 1880、outFieldRef 1885、inNodeID 1890、およびinFieldRef 1895によって指定される値を判定し、各新しい「Route」要素2960の対応する属性に割り当てる。
15.動作5370で、手順「挿入コマンドのデコード」、「削除コマンドのデコード」、「置換コマンドのデコード」、または「ReplaceSceneコマンドのデコード」の完了に続いて、sdsmビットストリームの次のビットを、boolean量「continue」1130または1140に割り当てる。量「continue」の結果の値が「1」(「真」)1130である場合に、この手順は、動作5310で継続される。
16.量「continue」の結果の値が「0」(「偽」)1140である場合に、sdsmビットストリームを、次のバイトの始めまで進める動作5375。すなわち、量sdsmBitの値が0である場合には、何も行わない。そうでない場合には、「sdsmBit」の値に0をセットし、sdsmByteの値を1つ増分する。このステップは、sdsmコマンド・フレーム1110の終りの「パディング・ビット」1150をスキップする。
17.動作5380で、boolean量「frameOpen」に「偽」をセットし、量「sample」の値を1つ増分し、この手順は、動作5310で継続される。
手順「挿入コマンドのデコード」
図123からわかるように、手順「挿入コマンドのデコード」は、次のステップからなる。
1.動作5400で、sdsmビットストリーム1210の次の2ビットを、量「paramType」に割り当てる。
2.動作5410で、量「paramType」の値を「0」と比較する。
3.動作5420で、量「paramType」の値が「0」1308である場合に、手順「InsertNodeコマンドのデコード」を実行する。
手順「InsertNodeコマンドのデコード」には、新しい「InsertNode」bifsCommand要素2840を作成することと、これを現在の親要素2830に付加することが含まれる。Node Insertionコマンド1300のコンポーネント、nodeID 1312、insertionPosition 1316、およびposition 1320によって指定される値を判定し、新しい「InsertNode」bifsCommand要素の対応する属性に割り当てる。
その後、手順「SFNodeのデコード」を使用して、Node Insertionコマンド1300のSFNodeコンポーネント1324を解釈する。
4.動作5430で、量「paramType」の値を「1」と比較する。
5.動作5440で、量「paramType」の値が「1」である場合に、エラーに出会っている。この値は、有効なsdsmデータ・ストリーム内で許容されない。sdsmビットストリームのデコードの処理を打ち切らなければならない。
6.動作5450で、量「paramType」の値を「2」と比較する。
7.動作5460で、量「paramType」の値が「2」1336である場合に、手順「InsertIdxValueコマンドのデコード」を実行する。
手順「InsertIdxValueコマンドのデコード」には、新しい「InsertIndexedValue」bifsCommand要素2840を作成することと、これを現在の親要素2830に付加することが含まれる。Indexed Value Insertionコマンド1328のコンポーネント、nodeID 1340、inFieldID 1344、insertionPosition 1348、およびposition 1320によって指定される値を判定し、新しい「InsertIndexedValue」bifsCommand要素の対応する属性に割り当てる。
コンポーネント「フィールド値」1356によって表されるデータの型(boolean、integer、stringなど)は、量「nodeID」、「inFieldID」、およびMPEG−4 Systems仕様で定義されたテーブルによって決定される。フィールド値のデータ型が、「SFNode」である場合に、手順「SFNodeのデコード」を使用して、Indexed Value Insertionコマンド1328の「フィールド値」コンポーネント1356を解釈し、「フィールド値」コンポーネントに含まれるBIFSノードの名前を、新しい「InsertIndexedValue」要素の「value」属性に割り当てる。そうでない場合には、「フィールド値」コンポーネント1356によって表される数値またはストリング値を、新しい「InsertIndexedValue」bifsCommand要素の「value」属性に割り当てる。
8.動作5470で、「paramType」の値が、「0」、「1」、または「2」でない場合に、この値は2ビットのデータによって決定されるので、値は「3」1368でなければならない。その結果、このステップの結果は、必ず「yes」になる。
9.動作5480で、手順「InsertRouteコマンドのデコード」を実行する。
手順「InsertRouteコマンドのデコード」には、新しい「InsertRoute」bifsCommand要素2840を作成することと、これを現在の親要素2830に付加することが含まれる。Route Insertionコマンド1360のコンポーネント、isUpdateable 1372、routeID 1376、departureNodeID 1380、departureFieldID 1384、arrivalNodeID 1388、およびarrivalFieldID 1392によって指定される値を判定し、新しい「InsertRoute」bifsCommand要素の対応する属性に割り当てる。
10.動作5490で、手順「InsertNodeコマンドのデコード」、「InsertIdxValueコマンドのデコード」、または「InsertRouteコマンドのデコード」の完了の後に、sdsmビットストリームの処理は、量「moreCommands」の値を用いて継続される。
手順「削除コマンドのデコード」
図124からわかるように、手順「削除コマンドのデコード」は、次のステップからなる。
1.動作5500で、sdsmビットストリームの次の2ビットを量「paramType」に割り当てる。
2.動作5510で、量「paramType」の値を「0」と比較する。
3.動作5520で、量「paramType」の値が「0」1412である場合に、手順「DeleteNodeコマンドのデコード」を実行する。
手順「DeleteNodeコマンドのデコード」には、新しい「DeleteNode」bifsCommand要素2840を作成することと、これを現在の親要素2830に付加することが含まれる。Node Deletionコマンド1400のコンポーネントnodeID 1418によって指定される値を、判定し、新しい「DeleteNode」bifsCommand要素の「nodeID」属性に割り当てる。
4.動作5550で、量「paramType」の値を「1」と比較する。
5.動作5540で、量「paramType」の値が1である場合に、エラーに出会っている。この値は、有効なsdsmデータ・ストリーム内で許容されない。sdsmビットストリームのデコードの処理を打ち切らなければならない。
6.動作5550で、量「paramType」の値を「2」と比較する。
7.動作5560で、量「paramType」の値が「2」1436である場合に、手順「DeleteIdxValueコマンドのデコード」を実行する。
手順「DeleteIdxValueコマンドのデコード」には、新しい「DeleteIndexedValue」bifsCommand要素2840を作成することと、これを現在の親要素2830に付加することが含まれる。Node Deletionコマンド1424のコンポーネントnodeID 1442、inFieldID 1448、deletionPosition 1454、およびposition 1460によって指定される値を判定し、新しい「DeleteIndexedValue」bifsCommand要素の対応する属性に割り当てる。
8.動作5570で、「paramType」の値が、「0」、「1」、または「2」でない場合に、この値は2ビットのデータによって決定されるので、値は「3」1478でなければならない。その結果、このステップの結果は、必ず「yes」になる。
9.動作5580で、手順「DeleteRouteコマンドのデコード」を実行する。
手順「DeleteRouteコマンドのデコード」には、新しい「DeleteRoute」bifsCommand要素2840を作成することと、これを現在の親要素2830に付加することが含まれる。Route Deletionコマンド1466のコンポーネントrouteID 1484によって指定される値を、新しい「DeleteRoute」bifsCommand要素の「routeID」属性に割り当てる。
10.動作5590で、手順「InsertNodeコマンドのデコード」、「InsertIdxValueコマンドのデコード」、または「InsertRouteコマンドのデコード」の完了の後に、sdsmビットストリームの処理は、量「moreCommands」の値を用いて継続される。
手順「置換コマンドのデコード」
図125からわかるように、手順「置換コマンドのデコード」は、次のステップからなる。
1.動作5600で、sdsmビットストリームの次の2ビットを量「paramType」に割り当てる。
2.動作5610で、量「paramType」の値を「0」と比較する。
3.動作5620で、量「paramType」の値が「0」1508である場合に、手順「ReplaceNodeコマンドのデコード」を実行する。
手順「ReplaceNodeコマンドのデコード」には、新しい「ReplaceNode」bifsCommand要素2840を作成することと、これを現在の親要素2830に付加することが含まれる。Node Replacementコマンド1500のコンポーネントnodeID 1510によって指定される値を、判定し、新しい「ReplaceNode」bifsCommand要素の「nodeID」属性に割り当てる。
その後、手順「SFNodeのデコード」を使用して、Node Replacementコマンド1500のSFNodeコンポーネント1514を解釈する。
4.動作5630で、量「paramType」の値を「1」と比較する。
5.動作5640で、量「paramType」の値が「1」1538である場合に、手順「ReplaceFieldコマンドのデコード」を実行する。
手順「ReplaceFieldコマンドのデコード」には、新しい「ReplaceField」bifsCommand要素2840を作成することと、これを現在の親要素2830に付加することが含まれる。Field Replacementコマンド1520のコンポーネント、nodeID 1530およびinFieldID 1534によって指定される値を、判定し、新しい「ReplaceField」bifsCommand要素の対応する属性に割り当てる。
コンポーネント「フィールド値」1538によって表されるデータの型(boolean、integer、stringなど)は、量「nodeID」、「inFieldID」、およびMPEG−4 Systems仕様で定義されたテーブルによって決定される。フィールド値のデータ型が、「SFNode」である場合に、手順「SFNodeのデコード」を使用して、Field Replacementコマンド1520の「フィールド値」コンポーネント1538を解釈し、「フィールド値」コンポーネントに含まれるBIFSノードの名前を、新しい「ReplaceField」要素の「value」属性に割り当てる。そうでない場合には、「フィールド値」コンポーネント1538によって表される数値またはストリング値を、新しい「ReplaceField」bifsCommand要素の「value」属性に割り当てる。
6.動作5650で、量「paramType」の値を「2」と比較する。
7.動作5560で、量「paramType」の値が「2」1548である場合に、手順「ReplaceIdxValueコマンドのデコード」を実行する。
手順「ReplaceIdxValueコマンドのデコード」には、新しい「ReplaceIndexedValue」bifsCommand要素2840を作成することと、これを現在の親要素2830に付加することが含まれる。Indexed Value Replacementコマンド1540のコンポーネント、nodeID 1550、inFieldID 1554、replacementPosition 1558、およびposition 1560によって指定される値を、判定し、新しい「ReplaceIndexedValue」bifsCommand要素の対応する属性に割り当てる。
「フィールド値」コンポーネント1564によって表されるデータの型(boolean、integer、stringなど)は、量「nodeID」、「inFieldID」、およびMPEG−4 Systems仕様で定義されたテーブルによって決定される。フィールド値のデータ型が、「SFNode」である場合に、手順「SFNodeのデコード」を使用して、Indexed Value Replacementコマンド1540の「フィールド値」コンポーネント1564を解釈し、「フィールド値」コンポーネントに含まれるBIFSノードの名前を、新しい「ReplaceIndexedValue」要素の「value」属性に割り当てる。そうでない場合には、「フィールド値」コンポーネント1564によって表される数値またはストリング値を、新しい「replaceIndexedValue」bifsCommand要素の「value」属性に割り当てる。
8.動作5670で、「paramType」の値が、「0」、「1」、または「2」でない場合に、この値は2ビットのデータによって決定されるので、値は「3」1578でなければならない。その結果、このステップの結果は、必ず「yes」になる。
9.動作5680で、手順「ReplaceRouteコマンドのデコード」を実行する。
手順「ReplaceRouteコマンドのデコード」には、新しい「ReplaceRoute」bifsCommand要素2840を作成することと、これを現在の「commandFrame」要素2830に付加することが含まれる。Route Replacementコマンド1570のコンポーネント、routeID 1580、departureNodeID 1584、departureFieldID 1588、arrivalNodeID 1590、およびarrivalFieldID 1594によって指定される値を、判定し、新しい「ReplaceRoute」bifsCommand要素の対応する属性に割り当てる。
10.動作5690で、手順「InsertNodeコマンドのデコード」、「InsertIdxValueコマンドのデコード」、または「InsertRouteコマンドのデコード」の完了の後に、sdsmビットストリームの処理は、量「moreCommands」の値を用いて継続される。
手順「SFNodeのデコード」
SFNodeデータ構造1700、1710、および1730の構図を、図44から48に要約した。各SFNodeデータ構造は、親データ構造に含まれる。親データ構造は、BIFSコマンド1120または別のSFNode構造のいずれかとすることができる。どちらの場合でも、mp4bifs文書内に、対応する親要素がある。BIFSコマンド親構造の場合に、mp4bifs親要素は、bifsCommand要素2910である。SFNode親構造の場合に、mp4bifs親要素は、BIFS Node要素になる。
図126からわかるように、手順「SFNodeのデコード」には、次のステップが含まれる。
1.動作5700で、sdsmビットストリームの次のビットを、boolean量「isReused」1704、1712、1732に割り当て、結果の値を値「真」(1)と比較する。
2.動作5710で、「isReused」の値が「真」(1)1704である場合に、新しい「ReusedNode」要素を作成し、現在のmp4bifs親要素に付加する。「nodeIDRef」コンポーネント1708の値を解釈し、結果の整数値を、新しい「ReusedNode」要素の「nodeRef」属性に割り当てる。「nodeIDRef」の値を指定するのに使用されるビット数は、mp4bifs文書2800の「bifsConfig」要素2810の「nodeIdBits」属性によって決定される。これによって、SFNode構造の処理が完了する。
3.動作5720で、「isReused」の値が「0」(「偽」)1712、1732である場合に、「localNodeType」1714、1734の値を、sdsmビットストリームから抽出する。この値を表すビット数は、親構造の識別およびMPEG−4 Systems仕様で定義されたテーブルによって決定される。
親構造の識別、「localNodeType」の値、およびMPEG−4 Systems仕様で定義されたテーブルを使用して、このSFNode構造によって表されるBIFSノードの特定の型の「nodeNumber」プロパティの整数値を決定する。整数量「nodeNumber」の値およびMPEG−4 Systems仕様で定義されたテーブルを使用して、このSFNode構造によって表されるBIFSノードの型を記述するストリング量「nodeName」の値を決定する。量「nodeName」の値によって指定される要素名を有する新しいBIFSノード要素を作成し、mp4bifs親要素に付加する。
4.動作5730で、sdsmビットストリームの次のビットをboolean量「isUpdateable」1716、1736に割り当て、結果の値を値「真」(1)と比較する。
5.動作5740で、「isUpdateable」の値が「1」である場合に、量「nodeID」の整数値をsdsmビットストリームから抽出する。値「nodeID」を指定するのに使用されるビット数は、mp4bifs文書2800の「bifsConfig」要素2810の「nodeIdBits」属性によって決定される。結果の値を、動作5720で作成された新しいBIFSノード要素の「nodeID」属性に割り当てる。
6.動作5750で、関連する「ReplaceScene」要素の「USENAMES」属性のboolean値を、値「真」(1)と比較する。
7.動作5760で、「USENAMES」の値が「真」である場合に、SFNode構造から英数字文字のヌル終端ストリング1720、1740を抽出し、結果のストリング値を、動作5720で作成された新しいBIFSノード要素の「name」属性に割り当てる。
8.動作5770で、sdsmビットストリームの次のビットを、boolean量「maskAccess」1722、1742に割り当て、結果の値を値「真」(1)と比較する。
9.動作5780で、「maskAccess」の値が1(「真」)である場合に、このSFNode構造は、図45に示された形を有する。この場合に、maskAccessビット1722に、マスク・ビット1726のシーケンスが続く。マスク・ビットの個数は、量「nFields」1728の値によって表される。量「nFields」の値は、動作5720での量「nodeNumber」の値とMPEG−4 Systems仕様で定義されたテーブルによって決定される。量「fieldIndex」には、「maskAccess」1722の値を解釈した後に0がセットされる。各マスク・ビット1726を解釈した後に、量「fieldIndex」の値を1つ増分する。「1」の値を有する各マスク・ビット1726に、量「nodeNumber」の値および量「fieldIndex」の値によって指定されるプロパティ・フィールドの値が続く。
各プロパティ・フィールドの値は、手順「フィールド値のデコード」によって決定される。
10.動作5790で、「maskAccess」の値が0(「偽」)である場合に、このSFNode構造は、図46に示された形を有する。この場合に、maskAccessビット1722に、endFlagビット1744が続く。endFlagビットの値が「1」1750である場合に、SFNode構造の終りに達している。endFlagビットの値が「0」1744である場合に、endFlagビットに、fieldRef値1746と、量「nodeNumber」の値および量「fieldIndex」の値によって指定されるプロパティ・フィールドの値1748が続く。
各プロパティ・フィールドの値は、手順「フィールド値のデコード」によって決定される。
手順「フィールド値のデコード」
各SFNode構造の各プロパティ・フィールドは、特定のフィールド・データ型プロパティおよび特定のfieldNameストリングを有する。フィールド・データ型プロパティは、boolean、integer、float、vector2d、vector3d、rotation、color、time、string、URL、node、またはbufferのうちの1つとすることができる。各プロパティ・フィールドは、SFField(単一値フィールド)またはMFField(複数値フィールド)としても定義される。
各プロパティ・フィールドのフィールド・データ型プロパティ、fieldNameストリング、およびMFField/SFFieldプロパティは、SFNode構造の「nodeNumber」量5720、プロパティ・フィールドの「fieldIndex」量または「fieldRef」量の値、およびMPEG−4 Systems仕様で定義されたテーブルによって決定される。
SFFieldプロパティ・フィールドの場合に、フィールド値を表すのに使用されるビットのシーケンスは、フィールド・データ型プロパティおよびMPEG−4 Systems仕様で提供される情報によって決定される。
MFFieldプロパティ・フィールドの場合に、フィールド値は、0個以上のSFField値の組によって決定される。MFFieldプロパティ・フィールド値を構成するSFField値の組は、図47または図48に示された形を有する。どちらの場合でも、最初のビット1762、1782は、0でなければならない。次のビットは、boolean量「isList」1766および1786の値を指定する。
量「isList」の値が「1」である場合に、MFFieldプロパティ・フィールドは、図47に示されたリスト形式を有する。この場合に、isListビット1766に、endFlagビット1770が続く。endFlagビットの値が「0」1770である場合に、endFlagビットに、現在のフィールド・データ型に従ってフォーマットされたSFField値1774が続く。そのようなSFField値1774のそれぞれに、もう1つのendFlagビット1770が続く。値「1」を有するendFlagビット1772によって、リスト形式のMFFieldが終了する。
量「isList」の値が「0」である場合に、MFFieldプロパティ・フィールドは、図48に示されたリスト形式を有する。この場合に、isListビット1766に、5ビットの整数値「numBits」1790が続く。「numBits」の値に、numBits個のビットからなる整数値「nFields」1792が続く。「nFields」の値に、それぞれが現在のフィールド・データ型に従ってフォーマットされたnFields個のSFField値が続く。
どの場合(SFField、リスト形式MFField、またはベクトル形式MFField)でも、各SFField値を、文字ストリングに変換する。そのような文字ストリングのそれぞれを、空白スペースによって区切られた連続して付加された値を有する属性ストリングに付加する。フィールド・データ型integer、float、vector2d、vector3d、rotation、color、およびtimeの場合に、標準的な手段を使用して、各数値を文字ストリングとして表す。フィールド・データ型booleanの場合に、値「0」および「1」が、文字ストリング「false」および「true」によって表される。フィールド・データ型stringおよびURLの場合に、各SFField値は、引用符で囲まれる。
フィールド・データ型「node」の場合に、各SFField値は、SFNode構造1700、1710、または1720を表す。そのようなSFNode構造のそれぞれを、「子ノード」と呼ぶ。そのような子ノードのそれぞれを、手順「SFNodeのデコード」の再帰的使用によって解釈する。そのような子ノードごとに決定されるストリング量「nodeName」の値を、現在の属性ストリングに付加する。さらに、ストリング量「nodeName」の値によって指定される要素名を有する新しいxml要素を作成し、手順「SFNodeのデコード」のステップ3で作成されたBIFSノード要素に付加する。
フィールド・データ型「buffer」の場合に、各SFField値は、sdsm BIFSコマンド1120を表す。各そのようなBIFSコマンドを、現在のノード要素を親要素として使用して、手順「sdsmチャンクのデコード」の動作5330から動作5365を使用して解釈する。各BIFSコマンドに関連するcommandNameストリング(たとえば「InsertNode」)を、現在の属性ストリングに付加する。さらに、commandNameストリングによって指定される要素名を有する新しいxml要素を作成し、手順「SFNodeのデコード」のステップ3で作成されたBIFSノード要素に付加する。
各フィールド・データ値の解釈を完了した後に、結果の属性ストリングを、対応するBIFSノード要素のfieldName属性に割り当てる。すなわち、結果の属性ストリングを、指定されたBIFSノードの指定されたプロパティ・フィールドのfieldNameストリングによって与えられる属性名を有する属性の属性値に割り当てる。
QtInfoデータ構造で表されたmoovアトムのxml表現の形成
QtInfoデータ構造3100に基づくmp4file文書2300の作成の第2ステップは、mp4バイナリ・ファイル700に含まれるmoovアトム712、754のxml表現の作成である。図127からわかるように、このステップは、次の動作からなる。
1.動作5800で、新しい「moov」要素2320を作成し、mp4file文書2300のトップ・レベル要素に付加する。
2.動作5805で、QtInfoデータ構造3100のMoovHeaderメンバ3116を処理する。図81からわかるように、MoovHeaderデータ構造3170には、量size 3173、version & flags 3176、creationTime 3178、modifiedTime 3180、timeScale 3183、duration 3186、およびnextTrackID 3188の値が含まれる。これらの値のそれぞれを、新しい「moov」要素2320の同一の名前の属性に割り当てる。
3.動作5810で、手順「Mp4fInitObjectDescrの処理」を実行する。
4.動作5820で、メンバUserData 3123の値が0でない場合に、手順「UserDataデータ構造の処理」を実行する。
5.動作5825で、値0を整数量「iTrack」に割り当てる。
6.動作5830で、量「iTrack」の値を、QtInfoメンバ「numTracks」3118と比較する。
7.動作5835で、量「iTrack」の値が、QtInfoメンバ「numTracks」の値と等しい場合に、このステップは完了する。この時点で、中間xmlファイル2250および2260を作成する処理が、完了している。最終的なXMT−A文書作成の処理は、「中間xml文書に基づくXMT−A xml文書の作成」で継続される。
8.動作5840で、量「iTrack」の値が、QtInfoメンバ「numTracks」の値と等しくない場合に、新しいtrak要素2350を作成し、動作5800で作成された新しいmoov要素2320に付加する。これが、「現在のtrak要素」である。
QtInfoメンバ「trak配列」3120の項目「iTrack」を、trak構造3200のアドレスを表す量「trakAtom」に割り当てる。値「trakAtom」によって表されるtrak構造が、「現在のtrak構造」である。
9.動作5850で、手順「TrakHeaderデータ構造の処理」を実行する。
10.動作5860で、手順「TrakMediaデータ構造の処理」を実行する。
11.動作5870で、現在のtrak構造のTrackEditメンバ3208が0でない場合に、手順「TrackEditデータ構造の処理」を実行する。
12.動作5880で、現在のtrak構造のTrackReferenceメンバ3210が0でない場合に、手順「TrackReferenceデータ構造の処理」を実行する。
13.動作5890で、量「iTrack」の値を1つ増分し、量「numTracks」の値との量「iTrack」の値の比較5830を繰り返す。
手順「Mp4InitObjectDescrの処理」
手順「Mp4InitObjectDescrの処理」は、次のステップからなる。
1.新しい「mp4fiods」要素2330を作成し、「moov」要素2320に付加する。
2.Mp4fInitObjectDescrメンバ「ObjectDescrID」3138の整数値を、新しい「mp4fiods」要素2360の「objectDescriptorID」属性2370に割り当てる。
3.メンバ「inlineProfiles」3146のboolean値を、新しいmp4fiods要素2360の「includeInlineProfilesFlag」属性に割り当てる。
4.メンバ「urlFlag」3140のboolean値が「真」である場合に、メンバ「urlString」3143によって表される文字ストリングを、「mp4fiods」要素2360の「url」属性に割り当て、Mp4fInitObjectDescrデータ構造3130の処理を完了する。メンバ「urlFlag」3140のboolean値が「偽」である場合には、ヌル・ストリングをmp4fiods要素2360の「url」属性に割り当てる。
5.Mp4fInitObjectDescrデータ構造3130の「ProfileLevels」メンバ3148の対応するメンバ(ODProfileLevel、sceneProfileLevel、audioProfileLevel、visualProfileLevel、およびgraphicsProfileLevel)に基づいて、mp4fiods要素2360の属性、「ODProfileLevelIndication」、「sceneProfileLevelIndication」、「audioProfileLevelIndication」、「visualProfileLevelIndication」、および「graphicsProfileLevelIndication」に整数値を割り当てる。
6.Mp4fInitObjectDescrデータ構造3130のEsIdInc配列3156のnumEsIdIncs 3153個の項目のそれぞれについて、新しいEsIdInc要素2380を作成する。各新しいEsIdInc要素2380を、mp4fiods要素2360に付加する。EsIdInc配列3156の各項目に、整数メンバ「trackID」が含まれる。メンバ「trackID」の値を、対応する新しいEsIdInc要素2380の「trackID」属性2390に割り当てる。
手順「UserDataデータ構造の処理」
手順「UserDataデータ構造の処理」は、次のステップからなる。
1.新しい「udta」要素2340を作成し、新しい「moov」要素2320に付加する。
UserDataデータ構造3280のメンバnumCprt 3284の値が0より大きい場合に、メンバcprt配列3286の項目ごとに、次のステップを繰り返す。
2.新しい「cprt」要素を作成し、新しい「udta」要素2340に付加する。
3.cprt配列3286の選択された項目によって表されるcprt構造3290のversion & flagsメンバ3294の値を、新しい「cprt」要素の「version」属性および「flags」属性に割り当てる。
4.「cprt」構造3290のメンバ「language」3296の値を、新しい「cprt」要素の「language」属性に割り当てる。
5.cprtデータ構造3290のメンバ「notice」3298に基づいて新しいxmlテキスト・ノードを作成し、この新しいテキスト・ノードを「cprt」要素に付加する。
手順「TrakHeaderデータ構造の処理」
手順「TrakHeaderデータ構造の処理」は、次のステップからなる。
1.現在のtrak構造のTrackHeaderメンバのメンバ「version」3216の値を、現在の「trak」要素2600の「version」属性に割り当てる。
2.現在のtrak構造のTrackHeaderメンバのメンバ「flags」3216の値を、現在の「trak」要素2600の「flags」属性に割り当てる。
3.現在の「trak」構造のTrackHeaderメンバのメンバ「creationTime」3218の値を、現在の「trak」要素2600の「creationTime」属性に割り当てる。
4.現在の「trak」構造のTrackHeaderメンバのメンバ「modifiedTime」3220の値を、現在の「trak」要素2600の「modifiedTime」属性に割り当てる。
5.現在の「trak」構造のTrackHeaderメンバのメンバ「duration」3222の値を、現在の「trak」要素2600「duration」属性に割り当てる。
6.現在の「trak」構造のTrackHeaderメンバのメンバ「trackID」3224の値を、現在の「trak」要素2600の「trackID」属性に割り当てる。
手順「TrakMediaデータ構造の処理」
手順「TrakMediaデータ構造の処理」は、次のステップからなる。
1.新しい「mdia」要素2604を作成し、現在の「trak」要素2600に付加する。
2.手順「MediaHeaderデータ構造の処理」を実行する。
3.手順「Handlerデータ構造の処理」を実行する。
4.手順「MediaInfoデータ構造の処理」を実行する。
手順「TrackEditデータ構造の処理」
手順「TrackEditデータ構造の処理」は、次のステップからなる。
1.新しいedts要素2644を作成し、現在のtrak要素に付加する。
現在のTrackEditデータ構造3208、3236のメンバEditList 3242が0でない場合に、下の追加ステップを実行する。
2.新しいelst要素2648を作成し、新しいedts要素2644に付加する。
3.現在のTrackEditデータ構造3208、3236のEditListメンバ3242によって表されるEditListデータ構造3244のメンバversion & flags 3248の値を、新しい「elst」要素2648の「version」属性および「flags」属性に割り当てる。
4.値0を量「segment」に割り当て、EditListデータ構造3244のメンバ「numSegments」3250の値を、量「numSegments」に割り当てる。量「numSegments」の値は、「2」になると期待される。
5.EditListデータ構造3244のEditSegment配列メンバ3252のnumSegments個の項目のそれぞれについて、次のステップを繰り返す。これらの項目のそれぞれが、EditSegment構造3256からなる。
6.新しい「segment」要素を作成し、新しい「elst」要素2648に付加する。
7.EditSegment構造3256のメンバ「startTime」3258の値を、新しい「segment」要素の「startTime」属性に割り当てる。
8.EditSegment構造3256のメンバ「duration」3260の値を、新しい「segment」要素の「duration」属性に割り当てる。
9.EditSegment構造3256のメンバ「relativeRate」3262の値を、新しい「segment」要素の「relativeRate」属性に割り当てる。
手順「TrackReferenceデータ構造の処理」
手順「TrackReferenceデータ構造の処理」は、次のステップからなる。
1.新しい「tref」要素2636を作成し、現在のtrak要素2600に付加する。
現在のTrackReferenceデータ構造3210、3264のメンバMpod 3268が0でない場合に、下の追加ステップを実行する。
2.新しい「mpod」要素2640を作成し、新しい「tref」要素2636に付加する。
3.値0を量「entry」に割り当て、Mpod構造3268、3270のメンバ「numEntries」3274の値を、量「numEntries」に割り当て、「trackIdList」という名前の新しい文字ストリングを(ヌル・ストリングとして)作成する。
4.量「numEntries」が0より大きい場合に、Mpod構造3270のメンバtrackID配列3276のnumEntries個の項目ごとに、下の3つのステップを繰り返す。
a.量「entry」が0より大きい場合に、文字ストリング「trackIdList」に空白スペースを付加する。
b.trackID配列3276の項目「entry」によって表される整数値の文字ストリング表現を作成し、その結果を文字ストリング「trackIdList」に付加する。
c.量「entry」の値を「1」だけ増分する。
5.文字ストリング「trackIdList」の値を、mpod要素2640のtrackID属性に割り当てる。
手順「MediaHeaderデータ構造の処理」
手順「MediaHeaderデータ構造の処理」は、次のステップからなる。
1.MediaHeader構造3230、3300のメンバ「version」3306の値を、現在の「mdia」要素2604の「version」属性に割り当てる。
2.MediaHeader構造3230、3300のメンバ「flags」3306の値を、現在の「mdia」要素2604の「flags」属性に割り当てる。
3.MediaHeader構造3230、3300のメンバ「creationTime」3308の値を、現在の「mdia」要素2604の「creationTime」属性に割り当てる。
4.MediaHeader構造3230、3300のメンバ「modifiedTime」3310の値を、現在の「mdia」要素2604の「modifiedTime」属性に割り当てる。
5.MediaHeader構造3230、3300のメンバ「timeScale」3313の値を、現在の「mdia」要素2604の「timeScale」属性に割り当てる。
6.MediaHeader構造3230、3300のメンバ「duration」3316の値を、現在の「mdia」要素2604の「duration」属性に割り当てる。
7.MediaHeader構造3230、3300のメンバ「language」3318の値を、現在の「mdia」要素2604の「language」属性に割り当てる。
手順「Handlerデータ構造の処理」
手順「Handlerデータ構造の処理」は、次のステップからなる。
1.新しい「hdlr」要素2608を作成し、現在の「mdia」要素2604に付加する。
2.Handler構造3232、3320のメンバ「version」3326の値を、新しい「hdlr」要素2608の「version」属性に割り当てる。
3.Handler構造3232、3320のメンバ「flags」3326の値を、新しい「hdlr」要素2608の「flags」属性に割り当てる。
4.Handler構造3232、3320のメンバ「handlerType」3328の値を、新しい「hdlr」要素2608の「handlerType」属性に割り当てる。
5.Handler構造3232、3320のメンバ「name」3330の値を、新しい「hdlr」要素2608の「name」属性に割り当てる。
手順「MediaInfoデータ構造の処理」
手順「MediaInfoデータ構造の処理」は、次のステップからなる。
1.新しい「minf」要素2612を作成し、現在の「mdia」要素2604に付加する。
2.手順「MediaDataInfoデータ構造の処理」を実行する。
3.手順「MediaInfoHeaderデータ構造の処理」を実行する。
4.手順「SampleTablesデータ構造の処理」を実行する。
手順「MediaDataInfoデータ構造の処理」
手順「MediaDataInfoデータ構造の処理」は、次のステップからなる。
1.新しい「dinf」要素2616を作成し、現在の「minf」要素2612に付加する。
2.MediaDataInfo構造3338、3350のメンバDataRefTable 3358が0でない場合に、次のステップを実行する。
3.新しい「dref」要素2620を作成し、新しい「dinf」要素2616に付加する。
4.MediaDataInfo構造3338、3350のメンバDataRefTable 3358によって表されるDataRefTable構造3360のメンバ「version」3366の値を、新しい「dref」要素2620の「version」属性に割り当てる。
5.DataRefTable構造3360のメンバ「flags」3366の値を、新しい「dref」要素2620の「flags」属性に割り当てる。
6.DataRefTable構造3360のメンバdataRef配列3370の項目ごとに、次のステップを繰り返す。
7.新しい「urlData」要素2624を作成し、新しい「dref」要素2620に付加する。
8.dataRef配列3370の選択された項目によって表されるdataRef構造3380のメンバ「version」3386の値を、新しい「urlData」要素2624の「version」属性に割り当てる。
9.dataRef構造3380のメンバ「flags」3386の値を、新しい「urlData」要素2624の「flags」属性に割り当てる。
10.dataRef構造3380のメンバ「flags」3386の値が「1」でなく、メンバ「dataRefType」3388の値が「url 」(すなわちu−r−l−スペース)である場合に、文字ストリングとしてメンバ「dataRefData」3390を解釈し、その結果を新しい「urlData」要素2624の「location」属性に割り当てる。
手順「MediaInfoHeaderデータ構造の処理」
所与のtrak構造に含まれるMediaInfoHeaderデータ構造は、そのtrak構造に関連するメディア・データのストリーム・タイプに応じて、3つのタイプのうちの1つになる可能性がある。
現在の「trak」構造が、scene description stream(sdsm)またはobject descriptor stream(odsm)に関連する場合に、MediaInfoHeader構造3343は、「Mpeg4MediaHeader」データ構造でなければならない。この構造は、メンバ「size」、「version」、および「flags」を有する。この場合に、手順「MediaInfoHeaderデータ構造の処理」は、次のステップからなる。
1.新しい「nmhd」要素2632を作成し、現在の「minf」要素2616に付加する。
2.MediaInfoHeader構造3343のメンバ「version」の値を、新しい「nmhd」要素2632の「version」属性に割り当てる。
3.MediaInfoHeader構造3343のメンバ「flags」の値を、新しい「nmhd」要素2632の「flags」属性に割り当てる。
現在の「trak」構造が、オーディオ・ストリームに関連する場合に、MediaInfoHeader構造3343は、「SoundMediaHeader」データ構造でなければならない。このデータ構造は、メンバ「size」、「version」、「flags」、および「balance」を有する。この場合に、手順「MediaInfoHeaderデータ構造の処理」は、次のステップからなる。
1.新しい「smhd」要素2632を作成し、現在の「minf」要素に付加する。
2.MediaInfoHeader構造3343のメンバ「version」の値を、新しい「smhd」要素2632の「version」属性に割り当てる。
3.MediaInfoHeader構造3343のメンバ「flags」の値を、新しい「smhd」要素2632の「flags」属性に割り当てる。
4.MediaInfoHeader構造3343のメンバ「balance」の値を、新しい「smhd」要素2632の「balance」属性に割り当てる。
現在の「trak」構造がビジュアル・ストリームに関連する場合に、MediaInfoHeader構造3343は、「VideoMediaHeader」データ構造でなければならない。このデータ構造は、メンバ「size」、「version」、「flags」、「graphMode」、「opRed」、「opGreen」、および「opBlue」を有する。この場合に、手順「MediaInfoHeaderデータ構造の処理」は、次のステップからなる。
1.新しい「vmhd」要素2632を作成し、現在の「minf」要素に付加する。
2.MediaInfoHeader構造3343のメンバ「version」の値を、新しい「vmhd」要素2632の「version」属性に割り当てる。
3.MediaInfoHeader構造3343のメンバ「flags」の値を、新しい「vmhd」要素2632の「flags」属性に割り当てる。
4.MediaInfoHeader構造3343のメンバ「graphMode」の値を、新しい「vmhd」要素2632の「transferMode」属性に割り当てる。
5.MediaInfoHeader構造3343のメンバ「opRed」の値を、新しい「vmhd」要素2632の「opColorRed」属性に割り当てる。
6.MediaInfoHeader構造3343のメンバ「opGreen」の値を、新しい「vmhd」要素2632の「opColorGreen」属性に割り当てる。
7.MediaInfoHeader構造3343のメンバ「opBlue」の値を、新しい「vmhd」要素2632の「opColorBlue」属性に割り当てる。
手順「SampleTablesデータ構造の処理」
手順「SampleTablesデータ構造の処理」は、次のステップからなる。
1.新しい「stbl」要素2628を作成し、現在の「minf」要素2612に付加する。
2.手順「SampleToChunkTableデータ構造の処理」を実行する。
3.手順「ChunkOffsetTableデータ構造の処理」を実行する。
4.手順「TimeToSampleTableデータ構造の処理」を実行する。
5.手順「SampleSizeTableデータ構造の処理」を実行する。
6.SampleTables3400のメンバSyncSampleTable 3416の値が0でない場合に、手順「SyncSampleTableデータ構造の処理」を実行する。
7.手順「SampleDescrTableデータ構造の処理」を実行する。
手順「SampleToChunkTableデータ構造の処理」
SampleToChunkTableデータ構造は、サンプル・テーブル・データ構造3420からなり、このサンプル・テーブル・データ構造3420では、メンバ「table配列」の各項目が、SampleToChunk構造3460からなる。手順「SampleToChunkTableデータ構造の処理」は、次のステップからなる。
1.新しい「stsc」要素2656を作成し、現在の「stbl」要素2628、2652に付加する。
2.SampleTablesのメンバSampleToChunkTable 3406を、サンプル・テーブル構造3420「SampleToChunkTable」に割り当てる。
3.SampleToChunkTableのメンバ「version」3426の値を、新しい「stsc」要素2656の「version」属性に割り当てる。
4.SampleToChunkTableのメンバ「flags」3426の値を、新しい「stsc」要素2656の「flags」属性に割り当てる。
5.SampleToChunkTableのメンバ「numEntries」3428の値を、量「numEntries」に割り当てる。値0を量「entry」に割り当て、量「entry」の値が量「numEntries」の値と等しくなるまで、次のステップを繰り返す。
6.新しい「sampleToChunk」要素を作成し、新しい「stsc」要素2656に付加する。
7.SampleToChunkTableのメンバ「table配列」3430の項目「entry」を、SampleToChunk構造3460「SampleToChunkTableEntry」に割り当てる。
8.SampleToChunkTableEntryのメンバ「firstChunk」3463の値を、新しい「sampleToChunk」要素の「firstChunk」属性に割り当てる。
9.SampleToChunkTableEntryのメンバ「numSamples」3466の値を、新しい「sampleToChunk」要素の「numSamples」属性に割り当てる。
10.SampleToChunkTableEntryのメンバ「description」3468の値を、新しい「sampleToChunk」要素の「sampleDesc」属性に割り当てる。
11.量「entry」の値を「1」だけ増分する。
手順「ChunkOffsetTableデータ構造の処理」
ChunkOffsetTableデータ構造3408は、メンバ「table配列」の各項目が整数のシーケンスからなるサンプル・テーブル・データ構造3420からなる。手順「ChunkOffsetTableデータ構造の処理」は、次のステップからなる。
1.新しい「stco」要素2664を作成し、現在の「stbl」要素2652に付加する。
2.SampleTablesメンバChunkOffsetTable 3408を、サンプル・テーブル構造3420「ChunkOffsetTable」に割り当てる。
3.ChunkOffsetTableメンバ「version」の値を、新しい「stco」要素2664の「version」属性に割り当てる。
4.ChunkOffsetTableメンバ「flags」の値を、新しい「stco」要素2664の「flags」属性に割り当てる。
5.ChunkOffsetTableメンバ「numEntries」3428の値を、量「numEntries」に割り当てる。値0を量「entry」に割り当て、量「entry」の値が量「numEntries」の値と等しくなるまで、次のステップを繰り返す。
6.新しい「chunkOffset」要素を作成し、新しい「stco」要素2664に付加する。
7.メンバ「table配列」の項目「entry」の値を量「offset」に割り当てる。
8.量「offset」の値を、新しい「chunkOffset」要素の「offset」属性に割り当てる。
9.量「offset」の値を、QtInfoメンバ「mdat配列」3113の各項目3160のメンバ「start」3166および「size」3163の値と比較して、指定されたオフセット値に関連するmdatアトム706のインデックス「mdatId」の値を決定する。量「mdatId」の値は、量「offset」の値が、メンバ「start」3166の値より大きく、メンバ「start」3166と「size」3163の合計より小さい、「mdat配列」3113の項目のインデックスによって決定される。
10.mdat配列項目「mdatId」のメンバ「size」3163の値を、量「mdatStart」に割り当てる。「mdatStart」の値に「8」を加え、その結果を量「offset」の値から引き、その結果を量「mdatOffset」に割り当てる。
11.量「mdatId」の値を、新しい「chunkOffset」要素の「mdatId」属性に割り当てる。
12.量「mdatOffset」の値を、新しい「chunkOffset」要素の「mdatOffset」属性に割り当てる。
13.量「entry」の値を「1」だけ増分する。
手順「TimeToSampleTableデータ構造の処理」
TimeToSampleTableデータ構造3410は、メンバ「table配列」の各項目がTimeToSample構造3470からなるサンプル・テーブル・データ構造3420からなる。手順「TimeToSampleTableデータ構造の処理」は、次のステップからなる。
1.新しい「stts」要素2660を作成し、現在の「stbl」要素に割り当てる。
2.SampleTablesメンバTimeToSampleTable 3410を、サンプル・テーブル構造3420「TimeToSampleTable」に割り当てる。
3.TimeToSampleTableメンバ「version」3426の値を、新しい「stts」要素2660の「version」属性に割り当てる。
4.TimeToSampleTableメンバ「flags」3426の値を、新しい「stts」要素2660の「flags」属性に割り当てる。
5.TimeToSampleTableメンバ「numEntries」3428の値を、量「numEntries」に割り当てる。値0を量「entry」に割り当て、量「entry」の値が量「numEntries」の値と等しくなるまで、次のステップを繰り返す。
6.新しい「timeToSample」要素を作成し、新しい「stts」要素2660に付加する。
7.TimeToSampleTableメンバ「table配列」3430の項目「entry」を、TimeToSample構造3470「TimeToSampleTableEntry」に割り当てる。
8.TimeToSampleTableEntryメンバ「count」3473の値を、新しい「timeToSample」要素の「count」属性に割り当てる。
9.TimeToSampleTableEntryメンバ「duration」3476の値を、新しい「timeToSample」要素の「duration」属性に割り当てる。
10.量「entry」の値を「1」だけ増分する。
手順「SampleSizeTableデータ構造の処理」
手順「SampleSizeTableデータ構造の処理」は、次のステップからなる。
1.新しい「stsz」要素2668を作成し、現在の「stbl」要素2652に付加する。
2.SampleTablesメンバSampleSizeTable 3413を、SampleSizeTable構造3440「SampleSizeTable」に割り当てる。
3.SampleSizeTableメンバ「version」3446の値を、新しい「stsz」要素2668の「version」属性に割り当てる。
4.SampleSizeTableメンバ「flags」3446の値を、新しい「stsz」要素2668の「flags」属性に割り当てる。
5.SampleSizeTableメンバ「numEntries」3453の値を、量「numEntries」に割り当てる。
6.量「numEntries」の値を、新しい「stsz」要素2668の「numSamples」属性に割り当てる。
7.SampleSizeTable構造3413、3440メンバ「sampleSize」3450の値が0でない場合に、SampleSizeTable構造3413、3440メンバ「sampleSize」3450の値を、新しい「stsz」要素の「sizeForAll」属性に割り当てる。この場合に、この処理は完了する。
8.SampleSizeTable構造3413、3440メンバ「sampleSize」3450が0である場合に、値0を量「entry」に割り当て、量「entry」の値が量「numEntries」の値と等しくなるまで、次のステップを繰り返す。
9.新しい「sampleSize」要素を作成し、新しい「stsz」要素2668に付加する。
10.SampleSizeTableメンバ「table配列」3456の項目「entry」の値を、新しい「sampleSize」要素の「size」属性に割り当てる。
11.量「entry」の値を「1」だけ増分する。
手順「SyncSampleTableデータ構造の処理」
SyncSampleTableデータ構造3416は、メンバ「table配列」の各項目が整数のシーケンスからなるサンプル・テーブル・データ構造3420からなる。手順「SyncSampleTableデータ構造の処理」は、次のステップからなる。
1.新しい「stss」要素2672を作成し、現在の「stbl」要素2652に付加する。
2.SampleTablesメンバSyncSampleTable 3416を、サンプル・テーブル構造3420「SyncSampleTable」に割り当てる。
3.SyncSampleTableメンバ「version」3426の値を、新しい「stss」要素2672の属性「version」に割り当てる。
4.SyncSampleTableメンバ「flags」3426の値を、新しい「stss」要素2672の属性「flags」に割り当てる。
5.SyncSampleTableメンバ「numEntries」3428の値を、量「numEntries」に割り当てる。値0を量「entry」に割り当て、量「entry」の値が量「numEntries」の値と等しくなるまで、次のステップを繰り返す。
6.新しい「syncSample」要素を作成し、新しい「stss」要素2672に割り当てる。
7.SyncSampleTableメンバ「table配列」3430の項目「entry」の値を、新しい「syncSample」要素の属性「sampleNumber」に割り当てる。
8.量「entry」の値を「1」だけ増分する。
手順「SampleDescrTableデータ構造の処理」
SampleDescrTableデータ構造3418は、メンバ「table配列」の各項目がSampleDescription構造3480からなるサンプル・テーブル・データ構造3420からなる。手順「SampleDescrTableデータ構造の処理」は、次のステップからなる。
1.新しい「stsd」要素2676を作成し、現在の「stbl」要素2652に付加する。
2.SampleTablesメンバSampleDescrTable 3418を、サンプル・テーブル構造3420「SampleDescrTable」に割り当てる。
3.SampleDescrTableメンバ「version」3426の値を、新しい「stsd」要素2676の属性「version」に割り当てる。
4.SampleDescrTableメンバ「flags」3426の値を、新しい「stsd」要素2676の属性「flags」に割り当てる。
5.SampleDescrTableメンバ「numEntries」3428の値を、量「numEntries」に割り当てる。値0を量「entry」に割り当て、量「entry」の値が量「numEntries」の値と等しくなるまで、次のステップを繰り返す。
6.SampleDescrTableメンバ「table配列」3430の項目「entry」を、SampleDescription構造3480「SampleDescription」に割り当てる。
7.SampleDescriptionメンバ「dataFormat」の値が「mp4a」に対応する場合に、新しい「mp4a」要素を作成し、新しい「stsd」要素2676に付加する。SampleDescriptionメンバ「dataFormat」の値が「mp4v」に対応する場合に、新しい「mp4v」要素を作成し、新しい「stsd」要素2676に付加する。SampleDescriptionメンバ「dataFormat」の値が「mp4s」に対応する場合に、新しい「mp4s」要素を作成し、新しい「stsd」要素2676に付加する。結果の要素(「mp4a」、「mp4v」、または「mp4s」)を、「mp4」要素2680と呼ぶ。
8.SampleDescriptionメンバ「dataReference」3488の値を、新しい「mp4」要素2680の属性「dataRefIndex」に割り当てる。
9.新しい「esds」要素2684を作成し、新しい「mp4」要素2680に付加する。
10.SampleDescriptionメンバ「esdVersion」3490の値を、新しい「esds」要素2684の属性「version」に割り当てる。
11.SampleDescriptionメンバ「esdData」3496の値を、バイトの配列を表す量「esdData」に割り当て、値0を量「esdPos」に割り当てる。
12.手順「esdData配列のデコード」を実行する。
13.量「entry」の値を「1」だけ増分する。
手順「esdData配列のデコード」
手順「esdData配列のデコード」は、次のステップからなる。
1.配列「esdData」の項目「esdPos」の値を、量「EsDescTag」に割り当て、量「esdPos」の値を「1」だけ増分する。
2.手順「タグ・サイズの取得」を使用して、量「numBytes」の値を得る。
3.量「EsDescTag」の値が、定数「ES_DescrTag」の値(3)と等しい場合に、次のステップを実行する。そうでない場合には、終了する。
4.新しい「ES_Descr」要素2688、2700を作成し、現在の「esds」要素2684に付加する。
5.量「numBytes」の値を、新しい「ES_Descr」要素2688、2700の属性「size」に割り当てる。
6.配列「esdData」の項目「esdPos」および「esdPos+1」の値を、16ビット整数に組み合わせ、その結果を新しい「ES_Descr」要素2688の「ES_ID」属性2700に割り当て、量「esdPos」の値を「2」だけ増分する。
7.配列「esdData」の項目「esdPos」の値を、量「flagsAndPriority」に割り当て、この値の上位5ビットを、量「priority」に割り当て、下位3ビットを、量「flags」に割り当て、量「esdPos」の値を、「1」だけ増分する。
8.量「priority」の値を、新しい「ES_Descr」要素2688、2700の属性「priority」に割り当てる。
9.量「flags」の値を、新しい「ES_Descr」要素2688、2700の属性「flags」に割り当てる。
10.量「flags」の最下位ビットが「1」である場合に、値「真」を新しい「ES_Descr」要素2688の属性「OCRstreamFlag」に割り当てる。
11.量「numBytes」の値が「1」未満になるまで、次のステップを繰り返す。
12.配列「esdData」の項目「esdPos」の値を量「descrTag」に割り当て、量「numBytes」の値を「1」だけ減分し、量「esdPos」の値を「1」だけ増分する。
13.手順「タグ・サイズの取得」を使用して、量「descrSize」の値を決定し、量「numBytes」の値を、この量の値を指定するのに使用されるバイト数だけ減分する。
14.量「numBytes」の値を、量「descrSize」の値だけ減分する。
15.量「descrTag」の値が、定数「DecoderConfigDescrTag」の値(4)の値と等しい場合に、手順「デコーダ構成記述子の処理」を実行する。
16.量「descrTag」の値が、定数「SLConfigDescrTag」の値(6)の値と等しい場合に、手順「sl構成記述子の処理」を実行する。
17.そうでない(すなわち、量「descrTag」の値が「DecoderConfigDescrTag」および「SLConfigDescrTag」のいずれとも等しくない)場合に、量「esdPos」の値を量「infoSize」の値だけ増分する。
手順「デコーダ構成記述子の処理」
手順「デコーダ構成記述子の処理」は、次のステップからなる。
1.新しい「DecoderConfigDescriptor」要素2710を作成し、現在の「ES_Descr」要素2700に付加する。
2.量「descrSize」の値を、新しい「DecoderConfigDescriptor」要素2710の「size」属性に割り当てる。
3.配列「esdData」の項目「esdPos」の値を、量「objectType」および新しい「DecoderConfigDescriptor」要素2710の属性「objectType」に割り当て、量「esdPos」の値を「1」だけ増分する。
4.配列「esdData」の項目「esdPos」の値を、量「streamType」に割り当て、量「esdPos」の値を「1」だけ増分する。
5.量「streamType」の第2ビット(「2」ビット)が、0でない場合に、値「真」を、新しい「DecoderConfigDescriptor」要素2710の属性「upStream」に割り当てる。
6.量「streamType」の値を4で割り(右に2ビットだけシフトし)、その結果を、量「streamType」および新しい「DecoderConfigDescriptor」要素2710の属性「streamType」に割り当てる。
7.配列「esdData」の次の3つの項目を、24ビット値に組み合わせ、その結果を、新しい「DecoderConfigDescriptor」要素2710の属性「bufferSize」に割り当て、量「esdPos」の値を「3」だけ増分する。
8.配列「esdData」の次の4つの項目を、32ビット値に組み合わせ、その結果を、新しい「DecoderConfigDescriptor」要素2710の属性「maxBitrate」に割り当て、量「esdPos」の値を「4」だけ増分する。
9.配列「esdData」の次の4つの項目を、32ビット値に組み合わせ、その結果を、新しい「DecoderConfigDescriptor」要素2710の属性「avgBitrate」に割り当て、量「esdPos」の値を「4」だけ増分する。
10.量「descrSize」の値を13だけ減分する。
11.量「descrSize」の値が1を超える場合に、量「descrSize」の値が1未満になるまで、次のステップを繰り返す。
12.配列「esdData」の次の項目を、量「infoTag」に割り当て、量「descrSize」の値を「1」だけ減分する。
13.手順「タグ・サイズの取得」を使用して、量「infoTag」に割り当てられた値に従うタグ・サイズの値を決定し、その結果を量「infoTag」に割り当て、量「descrSize」の値を、この量の値を指定するのに使用されるバイト数だけ減分する。
14.量「descrSize」の値を、量「infoSize」の値だけ減分する。
15.量「infoTag」の値が、定数「DecoderSpecificInfoTag」の値(5)と等しい場合に、手順「デコーダ固有情報の処理」を実行する。そうでない場合には、量「esdPos」の値を、量「infoSize」の値だけ増分する。
手順「sl構成記述子の処理」
手順「sl構成記述子の処理」は、次のステップからなる。
1.新しい「SLConfigDescriptor」要素2760を作成し、現在の「ES_Descr」要素2700に付加する。
2.配列「esdData」の項目「esdPos」の値を、新しい「SLConfigDescriptor」要素2760の属性「predefined」に割り当て、量「esdPos」の値を「1」だけ増分する。
手順「デコーダ固有情報の処理」
配列「esdData」内の、「DecoderSpecificInfoTag」に続く項目の内容は、量「streamType」および「objectType」の値に依存する。
量「streamType」の値が「3」である場合には、手順「BIFS構成の処理」を実行する。
量「streamType」の値が「4」であり、量「objectType」の値が「108」である場合には、手順「JPEG構成の処理」を実行する。
量「streamType」の値が「4」であり、量「objectType」の値が「108」でない場合には、手順「ビジュアル構成の処理」を実行する。
量「streamType」の値が「5」である場合には、手順「オーディオ構成の処理」を実行する。
手順「BIFS構成の処理」
手順「BIFS構成の処理」は、次のステップからなる。これらのステップは、「esdData」配列内の、項目「esdPos」から始まる、「infoSize」個の項目のシーケンスを、ビットのシーケンスとして扱う。
1.新しい「BIFS_DecoderConfig」要素2720を作成し、現在の「DecoderConfigDescriptor」要素2710に付加する。
2.量「objectType」の値が「2」である場合に、次の量の値を、配列「esdData」から(項目「esdPos」から始めて)抽出し、結果の値のそれぞれを、新しいBIFS_DecoderConfig要素の同一の名前の属性に割り当てる。
a.use3DMeshCoding(1ビット)
b.usePredictiveMFField(1ビット)
c.numNodeIdBits(5ビット)
d.numRouteIdBits(5ビット)
e.numPROTOIDbits(5ビット)
3.そうでない(すなわち、量「objectType」の値が「2」でない)場合に、次の量の値を、配列「esdData」から(項目「esdPos」から始めて)抽出し、結果の値のそれぞれを、新しいBIFS_DecoderConfig要素の同一の名前の属性に割り当てる。
a.numNodeIdBits(5ビット)
b.numRouteIdBits(5ビット)
4.配列「esdData」の次のビットの値を抽出する。結果が「0」の場合には、値「偽」を、新しいBIFS_DecoderConfig要素の属性「isCommandStream」に割り当て、ステップ8にスキップする。結果が「1」の場合には、値「真」を、属性「isCommandStream」に割り当て、次のステップを実行する。
5.配列「esdData」の次のビットの値を抽出する。結果が「0」の場合には、値「偽」を、新しいBIFS_DecoderConfig要素の属性「pixel metric」に割り当てる。そうでない場合には、値「真」を、属性「pixel metric」に割り当てる。
6.配列「esdData」の次のビットの値を抽出する。結果が「0」の場合には、値「偽」を、新しいBIFS_DecoderConfig要素の属性「hasSize」に割り当て、ステップ8にスキップする。結果が「1」の場合には、値「真」を、属性「hasSize」に割り当て、次のステップを実行する。
7.次の量を、配列「esdData」から(項目「esdPos」から始めて)抽出し、結果の値のそれぞれを、新しいBIFS_DecoderConfig要素の同一の名前の属性に割り当てる。
a.pixelWidth(16ビット)
b.pixelHeight(16ビット)
8.量「esdPos」の値を、量「infoSize」の値だけ増分する。
手順「JPEG構成の処理」
手順「JPEG構成の処理」は、次のステップからなる。
1.新しい「JPEG_DecoderConfig」要素2730を作成し、現在の「DecoderConfigDescriptor」要素2710に付加する。
2.量「infoSize」の値を、新しい「JPEG_DecoderConfig」要素2730の「size」属性に割り当てる。
3.配列「esdData」の次の2項目を、16ビット値に組み合わせ、その結果を新しい「JPEG_DecoderConfig」要素2730の属性「headerLength」に割り当て、量「esdPos」の値を、「2」だけ増分する。
4.配列「esdData」の次の2項目を、16ビット値に組み合わせ、その結果を新しい「JPEG_DecoderConfig」要素2730の属性「Xdensity」に割り当て、量「esdPos」の値を、「2」だけ増分する。
5.配列「esdData」の次の2項目を、16ビット値に組み合わせ、その結果を新しい「JPEG_DecoderConfig」要素2730の属性「Ydensity」に割り当て、量「esdPos」の値を、「2」だけ増分する。
6.配列「esdData」の項目「esdPos」の値を、新しい「JPEG_DecoderConfig」要素2730の属性「numComponents」に割り当て、量「esdPos」の値を、「1」だけ増分する。
手順「ビジュアル構成の処理」
手順「ビジュアル構成の処理」は、次のステップからなる。
1.新しい「VisualConfig」要素2740を作成し、現在の「DecoderConfigDescriptor」要素2710に付加する。
2.量「infoSize」の値を、新しい「VisualConfig」要素2740の「size」属性に割り当てる。
3.量「esdPos」の値を、量「infoSize」の値だけ増分する。
手順「オーディオ構成の処理」
手順「オーディオ構成の処理」は、次のステップからなる。
1.新しい「AudioConfig」要素2750を作成し、現在の「DecoderConfigDescriptor」要素2710に付加する。
2.量「infoSize」の値を、新しい「AudioConfig」要素2750の「size」属性に割り当てる。
3.量「esdPos」の値を、量「infoSize」の値だけ増分する。
中間xml文書の対に基づくXMT−A xml文書の作成
図128からわかるように、XMT−A文書100を作成する処理は、次のステップからなる。
1.動作5900で、標準xml手段を使用して、新しい空のXMT−A文書100を作成する。
2.動作5920で、手順XMT−A Headerの作成を実行する。
3.動作5940で、標準xml手段を使用して、新しい空のXMT−A Body要素120を作成し、新しいXMT−A文書100に付加する。
4.動作5960で、手順「ODコマンドのpar要素の作成」を実行する。
5.動作5980で、手順「BIFSコマンドのpar要素の作成」を実行する。
ステップ2、4、および5を、下で説明する。
これらのステップに備えて、mp4file文書に従属する「moov」要素の「timeScale」属性の値を、量「timeScale」に割り当てる。
手順XMT−A Header要素の作成
図129からわかるように、手順XMT−A Headerの作成は、次のステップからなる。
1.動作6000で、標準xml手段を使用して、新しいHeader要素110を作成し、XMT−A文書100に付加する。
2.動作6010で、手順「InitialObjectDescriptorの作成」を実行する。
3.動作6020で、手順「Profiles要素の作成」を実行する。
4.動作6030で、手順「Descr要素の作成」を実行する。
5.動作6040で、標準xml手段を使用して、mp4file文書2300内のmp4fiods要素2330、2360に従属する各要素を選択する。
6.動作6050で、mp4fiods要素2330、2360に従属するEsIdInc要素2380ごとに、手順「EsIdInc要素の処理」を実行する。
ステップ2の手順「InitialObjectDescriptorの作成」は、次の動作からなる。
a.標準xml手段を使用して、新しいInitialObjectDescriptor要素130を作成し、新しいHeader要素110に付加する。
b.標準xml手段を使用して、mp4file文書2300に含まれるmoov要素2320を突き止める。
c.標準xml手段を使用して、moov要素2320に含まれるmp4fiods要素2330、2360を突き止める。
d.プレフィックス「IODID:」と、それに続く、mp4fiods要素2360のobjectDescriptorID属性2370の値からなる新しいストリングを作成し、このストリングの値を、InitialObjectDescriptor要素130のODID属性に割り当てる。
ステップ3の手順「Profiles要素の作成」は、次の動作からなる。
a.標準xml手段を使用して、新しいProfiles要素150を作成し、新しいInitialObjectDescriptor要素130に付加する。
b.mp4fiods要素2360のincludeInlineProfilesFlag属性の値を、Profiles要素150のincludeInlineProfileLevelFlag属性に割り当てる。
c.mp4fiods要素2360の対応する属性の値に基づいて、Profiles要素150の次の属性に値を割り当てる。
i.sceneProfileLevelIndication
ii.ODProfileLevelIndication
iii.audioProfileLevelIndication
iv.visualProfileLevelIndication
v.graphicsProfileLevelIndication
Profiles要素150の属性に割り当てられる値は、mp4fiods要素2360の対応する属性によって表される特定の数値を表す英数字ストリングからなるものとすることができる。たとえば、ストリング「None」を使用して、数値「−1」または「255」を表すことができる。mp4fiods要素2360の属性について許容される他の数値を、MPEG−4 systems仕様で定義されたストリング値に置換することができる。
ステップ4の手順「Descr要素の作成」は、次の動作からなる。
a.標準xml手段を使用して、新しいDescr要素160を作成し、新しいInitialObjectDescriptor要素130に付加する。
b.標準xml手段を使用して、新しいesDescr要素170を作成し、新しいDescr要素160に付加する。
ステップ5は、標準xml手段を使用して、mp4file文書2300内のmp4fiods要素2330、2360に従属する各要素2380を選択することからなる。このステップで選択される要素は、EsIdInc要素2380であると期待される。手順「EsIdInc要素の処理」を、このステップで識別されたEsIdInc要素2380ごとに実行する。
手順「EsIdInc要素の処理」
次の動作を、mp4file文書2300内のmp4fiods要素2360に従属するEsIdInc要素2380ごとに実行する。
1.動作6100で、EsIdInc要素2380のtrackID属性2390の値を、量「trackID」に割り当てる。
2.動作6110で、標準xml手段を使用して、trak要素2350のtrackID属性の値が量「trackID」の値と一致する、mp4file文書2300内のmoov要素2320に従属するtrak要素2350を見つける。
3.動作6120で、標準xml手段を使用して、前のステップで識別されたtrak要素2350、2600に含まれるES_Descr要素2688を見つける。
4.動作6130で、標準xml手段を使用して、新しいES_Descriptor要素180、190を作成し、esDescr要素170に付加する。
5.動作6140で、ステップ「2」で決定されたストリング量「trackType」の値を、ストリング「sdsm」と比較する。
6.動作6150で、ストリング量「trackType」の値が「sdsm」である場合に、手順「scene description streamのDecoderConfigDescriptorの作成」を実行する。
7.動作6160で、手順「BIFSConfigの作成」を実行する。
8.動作6170で、ストリング量「trackType」の値が「sdsm」でない場合に、ストリング量「trackType」の値を、ストリング「odsm」と比較する。
9.動作6180で、ストリング量「trackType」の値が「odsm」である場合に、手順「object descriptor streamのDecoderConfigDescriptorの作成」を実行する。
10.動作6190で、手順「trakのtref要素からのmpodTrackIDsの取得」を実行する。
ステップ2に、選択されたtrak要素が識別された後に実行される次の動作が含まれる。
a.標準xml手段を使用して、指定されたtrak要素2600に従属するhdlr要素2608を見つける。
b.このhdlr要素の「name」属性の値を、ストリング量「trackName」に割り当てる。
c.このhdlr要素の「handlerType」属性の値を、ストリング量「trackType」に割り当てる。この量の値は、「sdsm」または「odsm」のいずれかであると期待される。
d.ストリング「IOD」に量「trackName」の値およびストリング「ESID:1」を連結することによって、新しいストリング量「ES_ID」を作成し、その結果を、新しいES_Descriptor要素180、190の「ES_ID」属性に割り当てる。
e.新しいdecConfigDescr要素646を作成し、ES_Descriptor要素180、190、640に付加する。
f.新しいDecoderConfigDescriptor要素650を作成し、decConfigDescr要素646に付加する。
g.新しいslConfigDescr要素660を作成し、ES_Descriptor要素640に付加する。
h.新しいSLConfigDescriptor要素666を作成し、slConfigDescr要素660に付加する。
i.新しい「predefined」要素を作成し、SLConfigDescriptor要素666に付加する。
j.値「2」を、「predefined」要素の「value」属性に割り当てる。
scene description streamのDecoderConfigDescriptorの作成
1.標準xml手段を使用して、mp4file文書2300内の選択されたtrak要素2600に含まれるES_Descr要素2688、2700に含まれるDecoderConfigDescriptor要素2710を見つける。
2.DecoderConfigDescriptor要素2710の「avgBitrate」属性および「maxBitrate」属性の値を、XMT−A文書100の新しいDecoderConfigDescriptor要素650の対応する属性に割り当てる。
3.DecoderConfigDescriptor要素2710の「bufferSize」属性の値を、新しいDecoderConfigDescriptor要素650の「bufferSizeDB」属性に割り当てる。
4.mp4file文書2300のDecoderConfigDescriptor要素2710の「streamType」属性の数値に基づいて、ストリング値を、新しいDecoderConfigDescriptor要素650の「streamType」属性に割り当てる。mp4file文書2300のDecoderConfigDescriptor要素2710の「streamType」属性の値は、図131の第1列6200の項目の1つと一致すると期待される。図131の第2列6220の対応する項目を、XMT−A文書100の新しいDecoderConfigDescriptor要素650の「streamType」属性に割り当てる。
この事例では、mp4file文書2300のDecoderConfigDescriptor要素2710のstreamType属性の値が、「3」と期待され、値「SceneDescription」が、XMT−A文書100の新しいDecoderConfigDescriptor要素650の「streamType」属性に割り当てられる。
5.mp4file文書2300のDecoderConfigDescriptor要素2710の「objectType」属性の数値に基づいて、XMT−A文書100の新しいDecoderConfigDescriptor要素650の「objectTypeIndication」属性に、ストリング値を割り当てる。mp4file文書2300のDecoderConfigDescriptor要素2710の「objectType」属性の値は、図132の第1列6240の項目の1つと一致すると期待される。図132の第2列6260の対応する項目を、XMT−A文書100の新しいDecoderConfigDescriptor要素650の「objectTypeIndication」属性に割り当てる。
6.新しいdecSpecificInfo要素656、680を作成し、DecoderConfigDescriptor要素650に付加する。
BIFSConfigの作成
手順「BIFSConfigの作成」は、次のステップからなる。
1.新しいBIFSConfig要素686を作成し、新しいdecSpecificInfo要素680に付加する。
2.標準xml手段を使用して、DecoderConfigDescriptor要素2710に従属するBIFS_DecoderConfig要素2720を見つける。
3.BIFS_DecoderConfig要素2720の「nodeIdBits」属性の値を、量nodeIdBitsおよびBIFSConfig要素686の「nodeIDbits」属性に割り当てる。
4.BIFS_DecoderConfig要素2720の「routeIdBits」属性の値を、BIFSConfig要素686の「routeIDbits」属性に割り当てる。
5.量「v2Config」の値が「真」である場合に、次の3つのステップを実行する。
a.BIFS_DecoderConfig要素2720の「protoIdBits」属性の値を、BIFSConfig要素686の「PROTOIDbits」属性に割り当てる。
b.BIFS_DecoderConfig要素2720の「use3DMeshCoding」属性の値を、BIFSConfig要素686の「use3DMeshCoding」属性に割り当てる。
c.BIFS_DecoderConfig要素2720の「usePredictiveMFField」属性の値を、BIFSConfig要素686の「usePredictiveMFField」属性に割り当てる。
6.BIFS_DecoderConfig要素2720の「commandStream」属性の値が「真」である場合に、次のステップを実行する。
a.新しい「commandStream」要素690を作成し、BIFSConfig要素686に付加する。
b.BIFS_DecoderConfig要素2720の「pixelMetric」属性の値を、commandStream要素690の「pixelMetric」属性に割り当てる。
c.新しい「size」要素696を作成し、commandStream要素690
d.BIFS_DecoderConfig要素2720の「pixelHeight」属性の値を、「size」要素696の「pixelHeight」属性に割り当てる。
e.BIFS_DecoderConfig要素2720の「pixelWidth」属性の値を、「size」要素696の「pixelWidth」属性に割り当てる。
object descriptor streamのDecoderConfigDescriptorの作成
1.標準xml手段を使用して、mp4file文書2300内の選択されたtrak要素2600に含まれるES_Descr要素2688、2700に含まれるDecoderConfigDescriptor要素2710を見つける。
2.DecoderConfigDescriptor要素2710の「avgBitrate」属性および「maxBitrate」属性の値を、XMT−A文書内の新しいDecoderConfigDescriptor要素650の対応する属性に割り当てる。
3.mp4file文書内のtrakアトムのDecoderConfigDescriptor要素の「bufferSize」属性の値を、新しいDecoderConfigDescriptor要素650の「bufferSizeDB」属性に割り当てる。
4.mp4file文書2300内のDecoderConfigDescriptor要素2710の「streamType」属性の数値に基づいて、XMT−A文書100の新しいDecoderConfigDescriptor要素650の「streamType」属性にストリング値を割り当てる。mp4file文書2300内のDecoderConfigDescriptor要素2710の「streamType」属性の値は、図131の第1列6200の項目の1つと一致すると期待される。図131の第2列6220の対応する項目を、XMT−A文書100の新しいDecoderConfigDescriptor要素650の「streamType」属性に割り当てる。
この事例では、mp4file文書2300内のDecoderConfigDescriptor要素2710のstreamType属性の値が、「1」になると期待され、値「ObjectDescriptor」が、XMT−A文書100の新しいDecoderConfigDescriptor要素650の「streamType」属性に割り当てられる。
5.mp4file文書2300内のDecoderConfigDescriptor要素2710の「objectType」属性の数値に基づいて、XMT−A文書100の新しいDecoderConfigDescriptor要素650の「objectTypeIndication」属性にストリング値を割り当てる。mp4file文書2300内のDecoderConfigDescriptor要素2710の「objectType」属性の値は、図132の第1列の項目の1つと一致すると期待される。図132の第2列6260の対応する項目を、XMT−A文書100の新しいDecoderConfigDescriptor要素650の「objectTypeIndication」属性に割り当てる。
trakのtref要素からのmpodTrackIDsの取得
手順「trakのtref要素からのmpodTrackIDsの取得」は、次のステップからなる。
1.標準xml手段を使用して、選択されたtrak要素2600に従属するtref要素2636を見つける。
2.標準xml手段を使用して、選択されたtref要素2636に従属するmpod要素2640を見つける。
3.「mpod」要素2640の「trackID」属性の値を、量「mpodTrackIds」に割り当てる。
手順「ODコマンドのpar要素の作成」
Object Descriptorコマンド要素を表すXMT−A「par」要素140は、Object Descriptor stream(odsm)を表すmp4file文書2300の要素2460から導出される。XMT−A文書100で提示される各Object Descriptorコマンドには、ES_Descriptor要素630も含まれ、このES_Descriptor要素630のそれぞれは、mp4file文書2300内のtrak要素2350、2600に含まれるES_Descriptor要素2688から導出される。
これらの「par」要素の作成に備えて、ストリング量「mpodTrackIds」を使用して、trackId値の配列、pMpodTrackIdを作成する。mpodTrackIdsの値は、対応するmp4ファイルについてObject Descriptor stream(odsm)が存在する場合に、XMT−A Header要素110の作成中に割り当てられたものである。この量に値が割り当てられていない場合には、Object Descriptor streamがなく、Object Descriptorコマンド要素を表す「par」要素が生成されず、このステップは終了する。対応するmp4ファイルに、sdsmおよびodsmを除いて1つまたは複数のメディア・データ・ストリームが含まれる場合に、量「mpodTrackIds」の値に、整数trackID値のシーケンスが含まれ、配列pMpodTrackIdの各要素が、このシーケンスの対応するメンバを表す。
図133からわかるように、Object Descriptorコマンドを表す「par」要素を作成する手順は、次のステップからなる。
1.動作6300で、標準xml手段を使用して、mp4file文書2300内のodsm要素2420のすべてを見つける。これを達成するには、まず標準xml手段を使用して、mp4file文書内の各mdat要素2310を選択する。次に、標準xml手段を使用して、各mdat要素2400内の各odsm要素2420を選択する。
2.動作6310で、標準xml手段を使用して、各odsm要素2460内の各odsmChunk要素2470を選択する。
3.動作6320で、標準xml手段を使用して、各odsmChunk要素2500内の各odsmSample要素2510を選択する。
4.動作6330で、標準xml手段を使用して、新しい空の「par」要素140を作成し、XMT−A Body要素120に付加する。
5.動作6340で、odsmSample要素2510、2520の「time」属性2515、2525の値を、量「timeScale」の値で割り、その結果を新しい「par」要素140の「begin」属性に割り当てる。
6.動作6350で、標準xml手段を使用して、各odsmSample要素2520に含まれる各odsmコマンド要素2530を選択する。
7.動作6360で、各odsmコマンド要素2530の要素名を、ストリング「ObjectDescrUpdate」と比較する。
8.動作6370で、odsmコマンド要素2530の要素名が「ObjectDescrUpdate」である場合に、手順「ObjectDescrUpdate要素の作成」を実行する。
9.動作6380で、odsmコマンド要素2530の要素名が「ObjectDescrUpdate」でない場合に、odsmコマンド要素2530の要素名を、ストリング「ObjectDescrRemove」と比較する。
10.動作6390で、odsmコマンド要素2530の要素名が「ObjectDescrRemove」である場合に、手順「ObjectDescrRemove要素の作成」を実行する。
ObjectDescriptorUpdate要素の作成
手順「ObjectDescriptorUpdate要素の作成」は、次のステップからなる。
1.標準xml手段を使用して、新しい「ObjectDescriptorUpdate」要素220を作成し、現在の「par」要素210に付加する。
2.標準xml手段を使用して、新しい「OD」要素230を作成し、現在の「ObjectDescriptorUpdate」要素220に付加する。
3.標準xml手段を使用して、ObjectDescrUpdate odsmコマンド要素2540に従属する「ObjectDescriptor」要素2550を見つける。
4.標準xml手段を使用して、新しい「ObjectDescriptor」要素240、600を作成し、現在の「OD」要素230に付加する。
5.ObjectDescriptor要素2550のODID属性2555の値を、ストリング量「ODID」に割り当てる。
6.ストリング量「ODID」の値に、プレフィックス「ODID:」を連結し、その結果を、新しいObjectDescriptor要素240、606のobjectDescriptorIDに割り当て、「objectDescriptorID」を「ODID」と表す。
7.標準xml手段を使用して、新しい「Descr」要素610を作成し、新しいObjectDescriptor要素600に付加する。
8.標準xml手段を使用して、新しい「esDescr」要素620を作成し、新しい「Descr」要素610に付加する。
9.標準xml手段を使用して、新しい「ES_Descriptor」要素630を作成し、現在の「esDescr」要素620に付加する。
10.標準xml手段を使用して、ObjectDescriptor要素2550に従属する「EsIdRef」要素2560を選択する。
11.「EsIdRef」要素2560の「EsId」属性2565の値を、量「EsId」に割り当てる。
12.標準xml手段を使用して、新しい「decConfigDescr」要素646を作成し、新しい「ES_Descriptor」要素630、640に割り当てる。
13.標準xml手段を使用して、新しい「DecoderConfigDescriptor」要素650を作成し、新しい「decConfigDescr」要素646に割り当てる。
14.配列pMpodTrackIdの項目(EsId−1)の値を、量「mpodTrackID」に割り当てる。たとえば、「EsId」の値が「1」である場合に、mpodTrackIDの値は、配列pMopdTrackIdの項目「0」すなわち最初の項目によって決定される。
15.標準xml手段を使用して、trackID属性の値が量「mpodTrackID」の値と一致するtrak要素2350を選択する。
16.標準xml手段を使用して、選択されたtrak要素2350、2600に従属するhdlr要素2608を選択する。
17.選択されたhdlr要素2608の「name」属性の値を、ストリング量「trackName」に割り当てる。
18.選択されたhdlr要素2608の「handlerType」属性の値を、ストリング量「trackType」に割り当てる。
19.ストリング「ESID:」に量「trackName」の値および量「EsId」の値を連結することによって新しいストリング量を作成し、その結果を新しい「ES_Descriptor」要素640の「ES_ID」属性636に割り当てる。
20.標準xml手段を使用して、新しい「slConfigDescr」要素660を作成し、現在の「ES_Descriptor」要素640に付加する。
21.標準xml手段を使用して、新しい「SLConfigDescriptor」要素666を作成し、新しい「slConfigDescr」要素660に付加する。
22.標準xml手段を使用して、新しい「predefined」要素を作成し、新しい「SLConfigDescriptor」要素666に付加する。
23.値「2」を、新しい「predefined」要素の「value」属性に割り当てる。
24.手順「メディア・データ・ストリームのDecoderConfigDescriptor要素の作成」を実行する。
25.手順「StreamSource要素の作成」を実行する。
メディア・データ・ストリームのDecoderConfigDescriptor要素の作成
手順「メディア・データ・ストリームのDecoderConfigDescriptor要素の作成」は、次のステップからなる。
1.標準xml手段を使用して、手順「ObjectDescriptorUpdate要素の作成」のステップ15で選択されたtrak要素2350に含まれるDecoderConfigDescriptor要素2710を選択する。
2.手順「ObjectDescriptorUpdate要素の作成」のステップ13で作成された新しいDecoderConfigDescriptor要素650の「streamType」属性に、ストリング値を割り当てる。このストリングの値は、図131の第2列6220の項目によって決定される。この項目は、第1列6200の、選択されたDecoderConfigDescriptor要素2710の「streamType」属性の数値と一致する項目に対応する。
3.手順「ObjectDescriptorUpdate要素の作成」のステップ13で作成された新しいDecoderConfigDescriptor要素650の「objectTypeIndication」属性に、ストリング値を割り当てる。このストリングの値は、図132の第2列6260の項目によって決定される。この項目は、第1列6240の、選択されたDecoderConfigDescriptor要素2710の「objectType」属性の数値と一致する項目に対応する。
4.選択されたDecoderConfigDescriptor要素2710の「avgBitrate」属性および「maxBitrate」属性の値を、XMT−A文書の新しいDecoderConfigDescriptor要素650の対応する属性に割り当てる。
5.選択されたDecoderConfigDescriptor要素2710の「bufferSize」属性の値を、XMT−A文書の新しいDecoderConfigDescriptor要素650の「bufferSizeDB」属性に割り当てる。
6.選択されたDecoderConfigDescriptor要素2710に、従属するJPEG_DecoderConfig要素2730、VisualConfig要素2740、またはAudioConfig要素2750が含まれる場合に、次のステップを実行する。
a.標準xml手段を使用して、新しい「decSpecificInfo」要素656を作成し、新しい「DecoderConfigDescriptor」要素650に付加する。
b.標準xml手段を使用して、新しい「DecoderSpecificInfo」要素を作成し、現在の「decSpecificInfo」要素656に付加する。
c.値「auto」を、新しいDecoderSpecificInfo要素の「type」属性に割り当てる。
StreamSource要素の作成
手順「StreamSource要素の作成」は、次のステップからなる。
1.標準xml手段を使用して、mp4file文書2300に含まれる各mdat要素2310を選択する。
2.標準xml手段を使用して、各mdat要素2310に含まれる各mediaFile要素2430、2480を選択する。
3.各選択されたmediaFile要素2480の「trackID」属性の値を、量「mdatTrackID」に割り当てる。
4.量「mdatTrackID」の値を、量「mpodTrackID」の現在の値と比較する。
5.量「mdatTrackID」の値が、量「mpodTrackID」の現在の値と一致する場合に、次のステップを実行する。
a.標準xml手段を使用して、新しい「StreamSource」要素670を作成し、現在の「ES_Descriptor」要素640に付加する。
b.選択されたmediaFile要素2480の「name」属性の値を、プレフィックス「file:///」に連結し、その結果を新しい「StreamSource」要素670の「url」属性に割り当てる。
ObjectDescriptorRemove要素の作成
手順「ObjectDescriptorRemove要素の作成」は、次のステップからなる。
1.標準xml手段を使用して、新しい「ObjectDescriptorRemove」要素250を作成し、現在の「par」要素210に付加する。
2.odsmサンプル要素2530の「ObjectDescriptorRemove」要素2570の「ODID」属性の値を、プレフィックス「ODID:」に連結し、その結果を、新しい「ObjectDescriptorRemove」要素250の「objectDescriptorId」属性に割り当てる。XMT−A「ObjectDescriptorRemove」要素の「objectDescriptorId」属性は、図4では「ODID」として表されている。
手順「BIFSコマンドのpar要素の作成」
図134からわかるように、手順「BIFSコマンドのpar要素の作成」は、次のステップからなる。
1.動作6400で、標準xml手段を使用して、mp4bifs文書2800のbifsConfig要素2810を選択する。「nodeIdBits」属性の値を、量「numNodeIdBits」に割り当てる。「pNodeNumber」という名前の整数の配列および「pNodeIdName」という名前のストリングの配列を作成する。これらの配列のそれぞれの要素数は、2のnumNodeIdBits乗によって指定される。
2.動作6410で、標準xml手段を使用して、mp4bifs文書2800の各「commandFrame」要素2820を選択する。
3.動作6420で、標準xml手段を使用して、新しい「par」要素140を作成し、XMT−A Body要素120に割り当てる。
4.動作6430で、commandFrame要素2820の「time」属性の値を、「par」要素140の「begin」属性に割り当てる。
5.動作6440で、現在のcommandFrame要素2820を使用して、手順「ノード番号の配列およびノード名の配列の作成」を実行する。
6.動作6450で、現在のcommandFrame要素2820を使用して、手順「XMT−A要素へのmp4bifs commandFrame要素の変換」を実行する。
ノード番号の配列およびノード名の配列の作成
手順「ノード番号の配列およびノード名の配列の作成」を、図135に要約する。この手順は、次のステップからなる。
1.動作6500で、標準xml手段を使用して、現在のmp4bifs commandFrame要素2830によって所有される各従属要素を選択する。そのような従属要素のそれぞれが、bifsCommand要素2840、2910に対応する。
2.動作6510で、標準xml手段を使用して、現在のbifsCommandコマンド要素によって所有される各従属要素を選択する。選択された従属要素が、bifsCommand要素に対応する場合に、この手順を再帰的に繰り返す。そうでない場合に、選択された従属要素は、mp4bifs Node要素に対応しなければならず、次のステップが実行される。
3.動作6520で、選択されたmp4bifs Node要素2920、3000の要素名を、ストリング「ReusedNode」と比較する。選択されたmp4bifs Node要素2920、3000の要素名が「ReusedNode」である場合に、次のmp4bifs Node要素6510、6590があるならば、それを選択することによって継続する。
4.動作6530で、選択されたmp4bifs Node要素2920、3000の要素名が「ReusedNode」でない場合に、標準xml手段を使用して、選択されたmp4bifs Node要素2920、3000の「NodeId」属性の値が指定されているかどうかを判定する。
5.動作6540で、選択されたmp4bifs Node要素2920、3000の「NodeId」属性の値が指定されている場合に、「NodeId」属性の数値を、整数量「nodeId」に割り当てる。
6.動作6550で、選択されたmp4bifs Node要素2920、3000の名前を、MPEG−4仕様で定義されたNode名の配列の各項目と比較する。MPEG−4 Node名の配列の一致する項目のインデックスを、整数量nodeNumberに割り当てる。整数量nodeNumberの値を、配列pNodeNumberの項目nodeIdに割り当てる。
7.動作6560で、標準xml手段を使用して、選択されたmp4bifs Node要素2920、3000の「name」属性の値が指定されているかどうかを判定する。
8.動作6570で、選択されたmp4bifs Node要素2920、3000の「name」属性の値が指定されている場合に、この「name」属性の値を、配列pNodeIdNameの項目nodeIdに割り当てる。
9.動作6580で、標準xml手段を使用して、選択されたmp4bifs Node要素2920、3000によって所有される各従属要素3030、3070を選択する。bifsCommand要素3070に対応する従属要素ごとに、ステップ2 6510を再帰的に繰り返す。
10.動作6590で、mp4bifs Node要素3030に対応する従属要素ごとに、ステップ3 6520を再帰的に繰り返す。
XMT−A要素へのmp4bifs commandFrame要素の変換
次の手順を使用して、mp4bifs commandFrame要素2830の内容を、XMT−A BIFSコマンド要素300、310、320に変換する。この場合に、「現在のmp4bifs要素」は、6410で選択されたmp4bifs commandFrame要素2830であり、「XMT−A親要素」は、6420で作成されたXMT−A「par」要素である。
同一の手順を使用して、mp4fbifs Conditional Node 3040を、XMT−A BIFSコマンド要素300、310、320に変換する。この場合に、「現在のmp4bifs要素」は、mp4bifsコマンド要素2910またはmp4bifs Node要素3000に従属するmp4bifs Conditional Node 3040であり、「XMT−A親要素」は、XMT−A BIFSコマンド要素300、310、320またはXMT−A CommandBuffer nodeField要素410である。
1.標準xml手段を使用して、現在のmp4bifs要素に従属する各mp4bifs要素を選択する。そのような従属要素のそれぞれを、下にステップの1つで説明されているように処理する。
2.選択された従属要素の要素名が「InsertNode」である場合に、手順「mp4bifs InsertNode要素のXMT−A要素への変換」を実行する。
3.選択された従属要素の要素名が「InsertIndexedValue」である場合に、手順「mp4bifs InsertIndexedValue要素のXMT−A要素への変換」を実行する。
4.選択された従属要素の要素名が「InsertRoute」である場合に、手順「mp4bifs InsertRoute要素のXMT−A要素への変換」を実行する。
5.選択された従属要素の要素名が「DeleteNode」である場合に、手順「mp4bifs DeleteNode要素のXMT−A要素への変換」を実行する。
6.選択された従属要素の要素名が「DeleteIndexedValue」である場合に、手順「mp4bifs DeleteIndexedValue要素のXMT−A要素への変換」を実行する。
7.選択された従属要素の要素名が「DeleteRoute」である場合に、手順「mp4bifs DeleteRoute要素のXMT−A要素への変換」を実行する。
8.選択された従属要素の要素名が「ReplaceNode」である場合に、手順「mp4bifs ReplaceNode要素のXMT−A要素への変換」を実行する。
9.選択された従属要素の要素名が「ReplaceIndexedValue」である場合に、手順「mp4bifs ReplaceIndexedValue要素のXMT−A要素への変換」を実行する。
10.選択された従属要素の要素名が「ReplaceField」である場合に、手順「mp4bifs ReplaceField要素のXMT−A要素への変換」を実行する。
11.選択された従属要素の要素名が「ReplaceRoute」である場合に、手順「mp4bifs ReplaceRoute要素のXMT−A要素への変換」を実行する。
12.選択された従属要素の要素名が「ReplaceScene」である場合に、手順「mp4bifs ReplaceScene要素のXMT−A要素への変換」を実行する。
mp4bifs InsertNode要素のXMT−A要素への変換
手順「mp4bifs InsertNode要素のXMT−A要素への変換」は、次のステップからなる。
1.新しいXMT−A「Insert」要素300を作成し、XMT−A親要素に付加する。
2.parentId属性を処理する。
a.mp4bifs「InsertNode」要素の「parentId」属性の値を、整数量「nodeId」に割り当てる。
b.配列pNodeIdNameの項目nodeIdの値を、ストリング量「nodeIdName」に割り当てる。
c.ストリング量「nodeIdName」の値がヌルであるか、内容を有しない(0の長さ)場合に、量「nodeId」の値をプレフィックス「nodeId:」に付加し、その結果を量「nodeIdName」に割り当てる。
d.量「nodeIdName」の値を、XMT−A「Insert」要素300の「atNode」属性に割り当てる。
3.insertionPosition属性を処理する。
a.mp4bifs「InsertNode」要素の「insertionPosition」属性の値を、ストリング量「position」に割り当てる。
b.量「position」の値が「0」である場合に、mp4bifs「InsertNode」要素の「position」属性の値を、XMT−A「Insert」要素300の「position」属性に割り当てる。
c.量「position」の値が「2」である場合に、値「BEGIN」を、XMT−A「Insert」要素300の「position」属性に割り当てる。
d.量「position」の値が「3」である場合に、値「END」を、XMT−A「Insert」要素300の「position」属性に割り当てる。
4.従属するmp4bifs Node要素を処理する。
a.標準xml手段を使用して、現在のbifsCommand要素2910によって所有される従属するNode要素2920のそれぞれを選択する。
b.そのような選択された従属するNode要素2920ごとに、手順「mp4bifs Node要素のXMT−A Node要素への変換」を実行する。
mp4bifs InsertIndexedValue要素のXMT−A要素への変換
手順「mp4bifs InsertIndexedValue要素のXMT−A要素への変換」は、次のステップからなる。
1.新しいXMT−A「Insert」要素300を作成し、現在のXMT−A親要素に付加する。
2.nodeId属性を処理する。
a.mp4bifs「InsertNode」要素の「nodeId」属性の値を、整数量「nodeId」に割り当てる。
b.配列pNodeNumberの項目nodeIdの値を、整数量「nodeNumber」に割り当てる。
c.配列pNodeIdNameの項目nodeIdの値を、ストリング量「nodeIdName」に割り当てる。
d.ストリング量「nodeIdName」の値が、ヌルであるか、内容を有しない(0の長さ)場合に、量「nodeId」の値をプレフィックス「nodeId:」に付加し、その結果を量「nodeIdName」に割り当てる。
e.量「nodeIdName」の値を、XMT−A「Insert」要素の「atNode」属性に割り当てる。
3.inFieldName属性およびvalue属性を処理する。
a.mp4bifs「InsertIndexedValue」要素の「inFieldName」属性の値を、XMT−A「Insert」要素の「atField」属性に割り当てる。
b.mp4bifs「InsertIndexedValue」要素の「value」属性の値を、XMT−A「Insert」要素の「value」属性に割り当てる。
4.insertionPosition属性を処理する。
a.mp4bifs「InsertIndexedValue」要素の「insertionPosition」属性の値を、ストリング量「position」に割り当てる。
b.量「position」の値が「0」である場合に、mp4bifs「InsertNode」要素の「position」属性の値を、XMT−A「Insert」要素300の「position」属性に割り当てる。
c.量「position」の値が「2」である場合に、値「BEGIN」を、XMT−A「Insert」要素300の「position」属性に割り当てる。
d.量「position」の値が「3」である場合に、値「END」を、XMT−A「Insert」要素300の「position」属性に割り当てる。
5.従属するmp4bifs Node要素を処理する。
a.標準xml手段を使用して、現在のbifsCommand要素2910によって所有される従属するNode要素2920のそれぞれを選択する。
b.そのような選択された従属するNode要素2920ごとに、手順「mp4bifs Node要素のXMT−A Node要素への変換」を実行する。
mp4bifs InsertRoute要素のXMT−A要素への変換
手順「mp4bifs InsertRoute要素のXMT−A要素への変換」は、次のステップからなる。
1.新しいXMT−A「Insert」要素300を作成し、現在のXMT−A親要素に付加する。
2.新しいXMT−A「Route」要素340を作成し、新しいXMT−A「Insert」要素300に付加する。
3.routeId属性を処理する。
a.mp4bifs「InsertRoute」要素の「routeId」属性の値を、ストリング量「iRoute」に割り当てる。
b.mp4bifs「InsertRoute」要素の「name」属性の値を、ストリング量「routeName」に割り当てる。
c.ストリング量「routeName」の値が、ヌルでなく、少なくとも1つの文字を含む場合に、量「routeName」を、XMT−A「Route」要素340の「DEF」属性に割り当てる。そうではなく、ストリング量「iRoute」の値が、ヌルでなく、少なくとも1つの文字を含む場合に、量「iRoute」の値をプレフィックス「route:」に付加し、その結果をXMT−A「Route」要素340の「DEF」属性に割り当てる。
4.mp4bifs「InsertRoute」要素に基づいて、手順「mp4bifs Route要素の属性のXMT−A ROUTE要素の属性への変換」を実行する
mp4bifs DeleteNode要素のXMT−A要素への変換
手順「mp4bifs DeleteNode要素のXMT−A要素への変換」は、次のステップからなる。
1.新しいXMT−A「Delete」要素310を作成し、現在のXMT−A親要素に付加する。
2.nodeId属性を処理する。
a.mp4bifs「DeleteNode」要素の「nodeId」属性の値を、整数量「nodeId」に割り当てる。
b.配列pNodeIdNameの項目nodeIdの値を、整数量「nodeIdName」に割り当てる。
c.ストリング量「nodeIdName」の値が、ヌルであるか、内容を有しない(0の長さ)場合に、量「nodeId」の値をプレフィックス「nodeId:」に付加し、その結果を量「nodeIdName」に割り当てる。
d.量「nodeIdName」の値を、XMT−A「Delete」要素310の「atNode」属性に割り当てる。
mp4bifs DeleteIndexedValue要素のXMT−A要素への変換
手順「mp4bifs DeleteIndexedValue要素のXMT−A要素への変換」は、次のステップからなる。
1.新しいXMT−A「Delete」要素310を作成し、現在のXMT−A親要素に付加する。
2.nodeId属性を処理する。
a.mp4bifs「DeleteIndexedValue」要素の「nodeId」属性の値を、整数量「nodeId」に割り当てる。
b.配列pNodeNumberの項目nodeIdの値を、整数量「nodeNumber」に割り当てる。
c.配列pNodeIdNameの項目nodeIdの値を、ストリング量「nodeIdName」に割り当てる。
d.ストリング量「nodeIdName」の値が、ヌルであるか、内容を有しない(0の長さ)場合に、量「nodeId」の値をプレフィックス「nodeId:」に付加し、その結果を量「nodeIdName」に割り当てる。
e.量「nodeIdName」の値を、XMT−A「Delete」要素310の「atNode」属性に割り当てる。
3.inField属性を処理する。
a.mp4bifs「DeleteIndexedValue」要素の「inField」属性の値を、整数量「field」に割り当てる。
b.インデックス「nodeNumber」を有するBIFSノードの、MPEG−4仕様で定義されたフィールド名の配列の項目「field」の値を、ストリング量「fieldName」に割り当てる。
c.量「fieldName」の値を、XMT−A「Delete」要素310の「atField」属性に割り当てる。
4.deletionPosition属性を処理する。
a.mp4bifs「DeleteIndexedValue」要素の「deletionPosition」属性の値を、ストリング量「position」に割り当てる。
b.量「position」の値が「0」である場合に、mp4bifs「InsertNode」要素の「position」属性の値を、XMT−A「Delete」要素310の「position」属性に割り当てる。
c.量「position」の値が「2」である場合に、値「BEGIN」を、XMT−A「Delete」要素310の「position」属性に割り当てる。
d.量「position」の値が「3」である場合に、値「END」を、XMT−A「Delete」要素310の「position」属性に割り当てる。
mp4bifs DeleteRoute要素のXMT−A要素への変換
手順「mp4bifs DeleteRoute要素のXMT−A要素への変換」は、次のステップからなる。
1.新しいXMT−A「Delete」要素310を作成し、現在のXMT−A親要素に付加する。
2.mp4bifs「DeleteRoute」要素の「routeId」属性の値をストリング量「routeId」に割り当てる。
3.量「routeId」の値をプレフィックス「route:」に付加し、その結果をXMT−A「Delete」要素310の「atRoute」属性に割り当てる。
mp4bifs ReplaceNode要素のXMT−A要素への変換
手順「mp4bifs ReplaceNode要素のXMT−A要素への変換」は、次のステップからなる。
1.新しいXMT−A「Replace」要素320を作成し、現在のXMT−A親要素に付加する。
2.nodeId属性を処理する。
a.mp4bifs「ReplaceNode」要素の「nodeId」属性の値を、整数量「nodeId」に割り当てる。
b.配列pNodeIdNameの項目nodeIdの値を、ストリング量「nodeIdName」に割り当てる。
c.ストリング量「nodeIdName」の値が、ヌルであるか、内容を有しない(0の長さ)場合に、量「nodeId」の値をプレフィックス「nodeId:」に付加し、その結果を量「nodeIdName」に割り当てる。
d.量「nodeIdName」の値を、XMT−A「Replace」要素320の「atNode」属性に割り当てる。
3.従属するmp4bifs Node要素を処理する。
a.標準xml手段を使用して、現在のbifsCommand要素2910によって所有される従属するNode要素2920のそれぞれを選択する。
b.そのような選択された従属するNode要素2920ごとに、手順「mp4bifs Node要素のXMT−A Node要素への変換」を実行する。
mp4bifs ReplaceIndexedValue要素のXMT−A要素への変換
手順「mp4bifs ReplaceIndexedValue要素のXMT−A要素への変換」は、次のステップからなる。
1.新しいXMT−A「Replace」要素320を作成し、現在のXMT−A親要素(図7)に付加する。
2.nodeId属性を処理する。
a.mp4bifs「ReplaceIndexedValue」要素の「nodeId」属性の値を、整数量「nodeId」に割り当てる。
b.配列pNodeNumberの項目nodeIdの値を、整数量「nodeNumber」に割り当てる。
c.配列pNodeIdNameの項目nodeIdの値を、ストリング量「nodeIdName」に割り当てる。
d.ストリング量「nodeIdName」の値が、ヌルであるか、内容を有しない(0の長さ)場合に、量「nodeId」の値をプレフィックス「nodeId:」に付加し、その結果を量「nodeIdName」に割り当てる。
e.量「nodeIdName」の値を、XMT−A「Replace」要素320の「atNode」属性に割り当てる。
3.inFieldName属性およびvalue属性を処理する。
a.mp4bifs「ReplaceIndexedValue」要素の「inFieldName」属性の値を、XMT−A「Replace」要素の「atField」属性に割り当てる。
b.mp4bifs「ReplaceIndexedValue」要素の「value」属性の値を、XMT−A「Replace」要素320の「value」属性に割り当てる。
4.replacementPosition属性を処理する。
a.mp4bifs「ReplaceIndexedValue」要素の「replacementPosition」属性の値を、ストリング量「position」に割り当てる。
b.量「position」の値が「0」である場合に、mp4bifs「InsertNode」要素の「position」属性の値を、XMT−A「Replace」要素320の「position」属性に割り当てる。
c.量「position」の値が「2」である場合に、値「BEGIN」を、XMT−A「Replace」要素320の「position」属性に割り当てる。
d.量「position」の値が「3」である場合に、値「END」を、XMT−A「Replace」要素320の「position」属性に割り当てる。
5.従属するmp4bifs Node要素を処理する。
a.標準xml手段を使用して、現在のbifsCommand要素2910によって所有される従属するNode要素2920のそれぞれを選択する。
b.そのような選択された従属するNode要素2920ごとに、手順「mp4bifs Node要素のXMT−A Node要素への変換」を実行する。
mp4bifs ReplaceField要素のXMT−A要素への変換
手順「mp4bifs ReplaceField要素のXMT−A要素への変換」は、次のステップからなる。
1.新しいXMT−A「Replace」要素320を作成し、現在のXMT−A親要素に付加する。
2.nodeId属性を処理する。
a.mp4bifs「ReplaceField」要素の「nodeId」属性の値を、整数量「nodeId」に割り当てる。
b.配列pNodeNumberの項目nodeIdの値を、整数量「nodeNumber」に割り当てる。
c.配列pNodeIdNameの項目nodeIdの値を、ストリング量「nodeIdName」に割り当てる。
d.ストリング量「nodeIdName」の値が、ヌルであるか、内容を有しない(0の長さ)場合に、量「nodeId」の値をプレフィックス「nodeId:」に付加し、その結果を量「nodeIdName」に割り当てる。
e.量「nodeIdName」の値を、XMT−A「Replace」要素の「atNode」属性に割り当てる。
3.inFieldName属性およびvalue属性を処理する。
a.mp4bifs「ReplaceField」要素の「inFieldName」属性の値を、XMT−A「Replace」要素の「atField」属性に割り当てる。
b.mp4bifs「ReplaceField」要素の「value」属性の値を、XMT−A「Replace」要素の「value」属性に割り当てる。
4.従属するmp4bifs Node要素を処理する。
a.標準xml手段を使用して、現在のbifsCommand要素2910によって所有される従属するNode要素2920のそれぞれを選択する。
b.そのような選択された従属するNode要素2920ごとに、手順「mp4bifs Node要素のXMT−A Node要素への変換」を実行する。
mp4bifs ReplaceRoute要素のXMT−A要素への変換
手順「mp4bifs ReplaceRoute要素のXMT−A要素への変換」は、次のステップからなる。
1.新しいXMT−A「Replace」要素320を作成し、現在のXMT−A親要素に付加する。
2.mp4bifs「ReplaceRoute」要素の「routeId」属性の値をストリング量「routeId」に割り当てる。
3.量「routeId」の値をプレフィックス「route:」に付加し、その結果をXMT−A「Replace」要素の「atRoute」属性に割り当てる。
4.mp4bifs「ReplaceRoute」要素に基づいて、手順「mp4bifs Route要素の属性のXMT−A ROUTE要素の属性への変換」を実行する。
mp4bifs ReplaceScene要素のXMT−A要素への変換
手順「mp4bifs ReplaceScene要素のXMT−A要素への変換」は、次のステップからなる。
1.新しいXMT−A「Replace」要素320を作成し、現在のXMT−A親要素に付加する。
2.新しいXMT−A「Scene」要素370を作成し、新しいXMT−A「Replace」要素320に付加する。
3.ReplaceScene要素2930の「USENAMES」属性の値を、ストリング量「useNames」に割り当てる。量useNamesの値が「真」である場合に、量useNamesの値を、新しいXMT−A Scene要素370の「USENAMES」属性に割り当てる。
4.標準xml手段を使用して、ReplaceScene要素2930によって所有される従属要素のそれぞれを選択する。そのような選択された従属要素ごとに、次の動作を実行する。
5.選択された従属要素の名前が、「Routes」2950である場合に、次のステップを実行する。そうでない場合には、手順「mp4bifs Node要素のXMT−A Node要素への変換」を実行する。
6.標準xml手段を使用して、選択された「Routes」要素2950によって所有される従属要素のそれぞれを選択する。そのような従属要素のそれぞれは、「Route」要素2960であると期待される。そのような「Route」要素2960ごとに、次のステップを実行する。
7.新しいXMT−A「ROUTE」要素390を作成し、XMT−A「Scene」要素370に付加する。
8.任意選択のrouteId属性を処理する。
a.選択された「Route」要素2960の「routeId」属性の値を、ストリング量「iRoute」に割り当てる。
b.mp4bifs「Route」要素2960の「name」属性の値を、ストリング量「routeName」に割り当てる。
c.ストリング量「routeName」の値が、ヌルでなく、少なくとも1つの文字を含む場合に、量「routeName」を、XMT−A「Route」要素390の「DEF」属性に割り当てる。そうではなく、ストリング量「iRoute」の値が、ヌルでなく、少なくとも1つの文字を含む場合に、量「iRoute」の値をプレフィックス「route:」に付加し、その結果をXMT−A「Route」要素390の「DEF」属性に割り当てる。
9.mp4bifs「Route」要素2960に基づいて、手順「mp4bifs Route要素の属性のXMT−A ROUTE要素の属性への変換」を実行する。
mp4bifs Route要素の属性のXMT−A ROUTE要素の属性への変換
手順「mp4bifs Route要素の属性のXMT−A ROUTE要素の属性への変換」は、次のステップからなる。
この手順で参照されるmp4bifs Route要素は、mp4bifs「Route」要素2960、mp4bifs「InsertRoute」bifsCommand要素2910、またはmp4bifs「ReplaceRoute」bifsCommand要素2910とすることができる。
1.departureNode値を処理する。
a.mp4bifs Route要素の「departureNode」属性の値を、整数量「nodeId」に割り当てる。
b.配列pNodeNumberの項目nodeIdの値を、整数量「nodeNumber」に割り当てる。
c.配列pNodeIdNameの項目nodeIdの値を、ストリング量「nodeIdName」に割り当てる。
d.ストリング量「nodeIdName」の値が、ヌルであるか、内容を有しない(0の長さ)場合に、量「nodeId」の値をプレフィックス「nodeId:」に付加し、その結果を量「nodeIdName」に割り当てる。
e.量「nodeIdName」の値を、XMT−A「ROUTE」要素360または390の「fromNode」属性に割り当てる。
2.departureField値を処理する。
a.mp4bifs Route要素の「departureField」属性の値を、整数量「field」に割り当てる。
b.インデックス「nodeNumber」を有するBIFSノードの、MPEG−4仕様で定義されたフィールド名の配列の項目「field」の値を、ストリング量「fieldName」に割り当てる。
c.量「fieldName」の値を、XMT−A「ROUTE」要素360または390の「fromField」属性に割り当てる。
3.arrivalNode値を処理する。
a.mp4bifs Route要素の「arrivalNode」属性の値を、整数量「nodeId」に割り当てる。
b.配列pNodeNumberの項目nodeIdの値を、整数量「nodeNumber」に割り当てる。
c.配列pNodeIdNameの項目nodeIdの値を、ストリング量「nodeIdName」に割り当てる。
d.ストリング量「nodeIdName」の値が、ヌルであるか、内容を有しない(0の長さ)場合に、量「nodeId」の値をプレフィックス「nodeId:」に付加し、その結果を量「nodeIdName」に割り当てる。
e.量「nodeIdName」の値を、XMT−A「ROUTE」要素360または390の「toNode」属性に割り当てる。
4.arrivalField値を処理する。
a.mp4bifs Route要素の「arrivalField」属性の値を、整数量「field」に割り当てる。
b.インデックス「nodeNumber」を有するBIFSノードの、MPEG−4仕様で定義されたフィールド名の配列の項目「field」の値を、ストリング量「fieldName」に割り当てる。
c.量「fieldName」の値を、XMT−A「ROUTE」要素360または390の「toField」属性に割り当てる。
mp4bifs Node要素のXMT−A Node要素への変換
各mp4bifs Node要素3000は、特定のXMT−A親要素に従属する新しいXMT−A Node要素400によって表される。このXMT−A親要素の識別は、mp4bifs Node 3000要素が従属するmp4bifs要素によって決定される。
a.mp4bifs Node要素2920が、InsertNode bifsCommand要素2910またはInsertIndexedValue bifsCommand要素2910に従属する場合に、XMT−A親要素は、対応するXMT−A「Insert」要素300によって定義される。
b.mp4bifs Node要素2920が、ReplaceNode bifsCommand要素2910、ReplaceField bifsCommand要素2910、またはReplaceIndexedValue bifsCommand要素2910に従属する場合に、XMT−A親要素は、対応するXMT−A「Replace」要素320によって定義される。
c.mp4bifs Node要素2920が、ReplaceScene bifsCommand要素2930に従属する場合に、XMT−A親要素は、対応するXMT−A「Scene」要素370によって定義される。
d.mp4bifs Node要素3030が、もう1つのmp4bifs Node要素3000またはInsertIndexedValue bifsCommand要素2910に従属する場合に、XMT−A親要素は、対応するXMT−A「nodeField」要素410によって定義される。
mp4bifs Node要素の要素名が、「ReusedNode」3080である場合には、手順「mp4bifs ReusedNode要素のXMT−A Node要素の作成」を実行する。そうでない場合には、次のステップを実行する。
1.整数量「nodeNumber」の値を決定する。この値は、示される項目の値が現在のmp4bifs Node要素3000のNodeNameと一致する、MPEG−4仕様で定義されたノード名の配列の項目番号によって決定される。
2.mp4bifs Node要素3000と同一の要素名(NodeName)を有する新しいXMT−A Node要素400を作成し、XMT−A親要素に付加する。この新しいXMT−A Node要素を、「現在のXMT−A Node要素」と定義する。
3.必要な場合に、「DEF」属性の値を決定する。
a.mp4bifs Node要素3000の「name」属性3016の値を、ストリング量「nodeIdName」に割り当てる。
b.量「nodeIdName」の値が、ヌルでなく、この量によって表されるストリングが、少なくとも1つの文字を有する場合に、量「nodeIdName」の値を、新しいXMT−A Node要素400の「DEF」属性に割り当てる。
c.量「nodeIdName」の値がヌルであるか、この量によって表されるストリングが、少なくとも1つの文字を有しない場合に、mp4bifs Node要素3000の「NodeId」属性3010の値を、ストリング量「nodeId」に割り当てる。
d.量「nodeId」の値が、ヌルでなく、この量によって表されるストリングが、少なくとも1つの文字を有する場合に、量「nodeId」の値をプレフィックス「nodeId:」に付加し、その結果を、新しいXMT−A Node要素400の「DEF」属性に割り当てる。
4.標準xml手段を使用して、現在のmp4bifs Node要素3000について指定されたプロパティ・フィールド属性値3020のそれぞれを選択する。
5.現在の属性値の名前の値を、ストリング量「attributeName」に割り当てる。
6.mp4bifs Node要素3000のプロパティ・フィールド属性値3020ごとに、次のステップを実行する。
7.フィールド・データ型を決定する。
a.整数量「field」の値を判定する。この値は、「attributeName」の値と一致するフィールド名のテーブルのメンバの項目番号の値と等しい。フィールド名のテーブルは、現在のmp4bifs Node要素に関連するノード名およびノード番号を有するBIFSノードに関するMPEG−4仕様によって定義される。
b.fieldDataType値のテーブルの項目「field」の値を、整数量「fieldDataType」に割り当てる。fieldDataType値のテーブルは、現在のmp4bifs Node要素3000に関連するノード名およびノード番号を有するBIFSノードに関するMPEG−4仕様によって定義される。
8.URLフィールド・データ型について検査する。フィールド・データ型が、「URL」フィールド・データ型を表すものとしてMPEG−4仕様で定義された値と等しい場合に、次の動作を実行する。
a.mp4bifs Node要素の「attributeName」属性の値をストリング量「urlString」に割り当てる。
b.量「urlString」によって表される文字ストリングの最初の5文字を、プレフィックス「odid://ODID:」に置換する。
c.結果のストリング値を、現在のXMT−A Node要素400の「attributeName」属性に割り当てる。
9.Nodeフィールド・データ型について検査する。フィールド・データ型が、「Node」フィールド・データ型を表すものとしてMPEG−4仕様で定義された値と等しい場合に、次の動作を実行する。
a.要素名「attributeName」を有する新しいXMT−A要素を作成し、現在のXMT−A Node要素に付加する。この要素を、「現在のXMT−A nodeField要素」と定義する。
b.標準xml手段を使用して、現在のmp4bifs Node要素によって所有される従属要素のそれぞれを選択する。これらの従属要素のそれぞれが、もう1つのmp4bifs Node要素であると期待される。これらの従属要素は、「子」要素と指定され、現在のmp4bifs Node要素は、「親」要素と指定される。
c.現在のXMT−A nodeField要素を「親」要素として使用して、各子要素に対して手順「mp4bifs Node要素のXMT−A Node要素への変換」を実行する。
10.Command Bufferフィールド・データ型について検査する。フィールド・データ型が、「Command Buffer」フィールド・データ型を表すものとしてMPEG−4仕様で定義された値と等しい場合に、次の動作を実行する。
a.要素名「attributeName」を有する新しいXMT−A要素を作成し、現在のXMT−A Node要素に付加する。この要素を、「現在のXMT−A nodeField要素」400と定義する。
b.現在のXMT−A nodeField要素を「親」要素として使用して、手順「mp4bifs commandFrame要素のXMT−A要素への変換」を実行する。
11.他の属性を処理する。フィールド・データ型が、前のステップで識別される値の1つでない場合に、次の動作を実行する。
a.mp4bifs Node要素の「attributeName」属性の値を、ストリング量「attributeValue」に割り当てる。
b.量「attributeValue」の値を、現在のXMT−A Node要素400の「attributeName」属性に割り当てる。
mp4bifs ReusedNode要素のXMT−A Node要素の作成
mp4bifs ReusedNode要素3080の場合に、nodeRef値3090が、必要な属性である。mp4bifs ReusedNode要素3080ごとに、次のステップを実行する。
1.nodeRef属性3090の値を、整数量「nodeId」に割り当てる。
2.配列pNodeNumbersの項目「nodeId」の値を、整数量「nodeNumber」に割り当てる。
3.MPEG−4仕様で定義されたノード名のテーブルの項目「nodeNumber」の値を、ストリング量「nodeName」に割り当てる。
4.型「nodeName」の新しいXMT−A node要素400を作成し、現在のXMT−A親要素に付加する。
5.量nodeIdの値を、新しいXMT−A node要素400の「USE」属性に割り当てる。
本発明の前述の説明は、例示および説明のために提示されたものである。網羅的であることまたは本発明を開示された形態に制限することは意図されておらず、他の修正形態および変形形態が、上の教示に鑑みて可能である。たとえば、XMT−Aファイルの正確な定義が、時と共に変化または進化する可能性がある。同様に、MPEG−4 Intermedia Formatの正確な定義が、時と共に変化または進化する可能性がある。本明細書に記載の発明は、上に示した文書で指定される特定の定義に制限されない。したがって、本発明の原理は、他の関連しないデータ構造にも適用することができる。SFNodeデータ構造の他の拡張形式も、MPEG−4 Systems仕様で定義されている。そのような事例を含むために次の実施形態で説明されるように本発明を拡張する手段が、当業者に明白になる。したがって、開示された実施形態は、本発明の原理およびその実用的な応用例を最もよく説明し、これによって、当業者が、企図される特定の使用に適するようにさまざまな実施形態およびさまざまな修正形態で本発明を最もよく利用できるようにするために、選択され、説明された。請求項が、従来技術によって制限される範囲を除いて、本発明の他の代替実施形態を含むように解釈されることが意図されている。
本発明の一実施形態によって使用される例示的なXMT−A文書を示す図である。 例示的なXMT−A Initial Object Descriptorを示す図である。 例示的なXMT−A par要素を示す図である。 例示的なXMT−A odsmコマンド要素を示す図である。 例示的なXMT−A Insertコマンドを示す図である。 例示的なXMT−A Deleteコマンドを示す図である。 例示的なXMT−A Replaceコマンドを示す図である。 例示的なXMT−A BIFS Node要素を示す図である。 例示的なXMT−A BIFS Nodeを示す図である。 例示的な再利用されるXMT−A BIFS Nodeを示す図である。 例示的なXMT−A ObjectDescriptorを示す図である。 例示的なXMT−A ES_Descriptorを示す図である。 sdsm(BIFS)に関する例示的なDecoderSpecificInfoを示す図である。 本発明の一実施形態によって生成される例示的なmp4バイナリ・ファイルを示す図である。 例示的なmdatアトムを示す図である。 例示的なチャンクを示す図である。 例示的なmoovアトムを示す図である。 例示的なmp4ファイルiodsアトムを示す図である。 例示的なMp4fInitObjectDescrを示す図である。 例示的なES_ID_Incを示す図である。 例示的なtrakアトムを示す図である。 例示的なsample tablesアトムを示す図である。 例示的なバイナリES記述子を示す図である。 例示的なデコーダ構成記述子を示す図である。 例示的なデコーダ固有情報記述子を示す図である。 例示的なバイナリSL構成記述子を示す図である。 例示的なsdsmバイナリ・チャンクを示す図である。 例示的なsdsmコマンド・フレームを示す図である。 例示的なBIFS挿入コマンドを示す図である。 例示的なBIFS削除コマンドを示す図である。 例示的なBIFS置換コマンドを示す図である。 例示的なBIFSシーン置換コマンドを示す図である。 例示的なNode挿入コマンドを示す図である。 例示的なIndexedValue挿入コマンドを示す図である。 例示的なRoute挿入コマンドを示す図である。 例示的なNode削除コマンドを示す図である。 例示的なIndexedValue削除コマンドを示す図である。 例示的なRoute削除コマンドを示す図である。 例示的なNode置換コマンドを示す図である。 例示的なField置換コマンドを示す図である。 例示的なIndexedValue置換コマンドを示す図である。 例示的なRoute置換コマンドを示す図である。 例示的なBIFS Sceneを示す図である。 例示的なSFNode(再利用される)を示す図である。 例示的なSFNode(マスク・ノード)を示す図である。 例示的なSFNode(リスト・ノード)を示す図である。 例示的なMFField(リスト形式)を示す図である。 例示的なMFField(ベクトル形式)を示す図である。 例示的なRoutes(リスト形式)を示す図である。 例示的なRoutes(ベクトル形式)を示す図である。 例示的なRouteを示す図である。 例示的なodsmバイナリ・チャンクを示す図である。 例示的なodsmバイナリ・サンプルを示す図である。 例示的なObjectDescriptorUpdateコマンドを示す図である。 例示的なObjectDescriptorRemoveコマンドを示す図である。 例示的なバイナリ・オブジェクト記述子を示す図である。 例示的なバイナリEsIdRef記述子を示す図である。 本発明によって企図される、例示的なMPEG−4からXMT−Aへの中間ファイル・コンバータを示す図である。 例示的なmp4file文書を示す図である。 例示的なmp4fiods文書を示す図である。 例示的なmdat要素を示す図である。 例示的なsdsm要素を示す図である。 例示的なodsm要素を示す図である。 例示的なmediaFile要素を示す図である。 例示的なodsmChunk要素を示す図である。 例示的なodsmSample要素を示す図である。 例示的なodsmコマンド要素を示す図である。 例示的なtrak要素を示す図である。 例示的なstbl要素を示す図である。 例示的なES_Descrを示す図である。 例示的なmp4bifs文書を示す図である。 例示的なmp4bifs commandFrame要素を示す図である。 例示的なmp4bifs bifsCommand要素を示す図である。 例示的なmp4bifs ReplaceScene要素を示す図である。 例示的なmp4bifsのオリジナルNode要素を示す図である。 例示的なmp4bifs Conditional Node要素を示す図である。 例示的なmp4bifsの再利用されるNode要素を示す図である。 例示的なQtInfo構造を示す図である。 例示的なMp4fInitObjectDescr要素を示す図である。 例示的なmdat構造を示す図である。 例示的なMoovHeaderを示す図である。 例示的なtrack構造を示す図である。 例示的なTrackHeader構造を示す図である。 例示的なTrackMedia構造を示す図である。 例示的なTrackEdit構造を示す図である。 例示的なEditList構造を示す図である。 例示的なEditSegment構造を示す図である。 例示的なTrackReference構造を示す図である。 例示的なMpod構造を示す図である。 例示的なUserData構造を示す図である。 例示的なcprt構造を示す図である。 例示的なMediaHeader構造を示す図である。 例示的なHandler構造を示す図である。 例示的なMediaInfo構造を示す図である。 例示的なMediaDataInfo構造を示す図である。 例示的なDataRefTable構造を示す図である。 例示的なdataRef構造を示す図である。 例示的なSampleTables構造を示す図である。 例示的なサンプル・テーブル構造を示す図である。 例示的なSampleSizeTable構造を示す図である。 例示的なSampleToChunk構造を示す図である。 例示的なTimeToSample構造を示す図である。 例示的なSampleDescription構造を示す図である。 例示的なmp4ファイル解釈を示す流れ図である。 例示的なmdatアトム処理を示す流れ図である。 例示的なmoovアトム処理を示す流れ図である。 例示的なtrakアトム処理を示す流れ図である。 例示的なtrack mediaアトム処理を示す流れ図である。 例示的なmedia infoアトム処理を示す流れ図である。 例示的なsample tablesアトム処理を示す流れ図である。 QtInfoデータ構造で表現されたメディア・データ・アトムのxml表現の形成を示す例示的な流れ図である。 例示的なメディア・データ処理を示す流れ図である。 ストリーム・タイプを見つける、例示的な流れ図である。 デコーダ構成記述子を見つける、例示的な流れ図である。 例示的なタグ・サイズ取得を示す流れ図である。 odsmデータ・ストリームからのxml表現作成を示す例示的な流れ図である。 例示的なodsmチャンク・デコードを示す流れ図である。 例示的なOdUpdateデコードを示す流れ図である。 例示的なdecodeEsIdRef手順を示す流れ図である。 メディア・ファイル作成とmdatアトムの表現を示す例示的な流れ図である。 例示的なSdsmDataToXml手順を示す流れ図である。 例示的なsdsmチャンク・デコード手順を示す流れ図である。 例示的な挿入コマンド・デコード手順を示す流れ図である。 例示的な削除コマンド・デコード手順を示す流れ図である。 例示的な置換コマンド・デコード手順を示す流れ図である。 例示的なSFNodeデコード手順を示す流れ図である。 moovアトムのxml表現作成を示す例示的な流れ図である。 XMT−A文書作成を示す例示的な流れ図である。 XMT−Aヘッダ作成を示す例示的な流れ図である。 EsIdInc要素の処理を示す例示的な流れ図である。 例示的なstreamType変換テーブルを示す図である。 例示的なobjectType−objectTypeIndicationテーブルを示す図である。 Object Descriptorコマンドを表す「par」を作成する手順を示す例示的な流れ図である。 commandFrame要素を表す「par」の作成を示す例示的な流れ図である。 ノード番号値およびnodeId名のテーブル作成を示す例示的な流れ図である。

Claims (30)

  1. MPEG−4(mp4)バイナリ・ファイルをXMT(Extensible MPEG−4 Textual)ファイルに変換する方法であって、
    前記mp4バイナリ・ファイルを表す少なくとも1つの中間構造化文書を生成することと、
    前記少なくとも1つの中間構造化文書をXMT構造化文書に変換することと、
    前記XMT構造化文書に基づいて前記XMTファイルを作成することと
    を含む方法。
  2. 前記中間構造化文書が、moovアトムおよび1つまたは複数のmdatアトムを表すデータ構造を含み、前記moovアトムが、iodsアトムおよび1つまたは複数のtrakアトムを含む、請求項1に記載の方法。
  3. 前記mdatアトムおよびtrakアトムを表すデータ構造に基づいて外部メディア・ファイルを生成することをさらに含む、請求項2に記載の方法。
  4. 前記中間構造化文書の変換が、mp4−file構造化文書を生成することを含む、請求項1に記載の方法。
  5. 前記mp4−file構造化文書が、eXtemsible Markup Languageに基づく、請求項4に記載の方法。
  6. 前記mp4−file構造化文書が、moov構造化要素および1つまたは複数のmdat構造化要素を含み、前記moov構造化要素が、前記moovアトムを表し、各mdat構造化要素が、前記中間構造化文書によって表される前記mdatアトムの1つを表す、請求項4に記載の方法。
  7. 前記moov構造化要素が、前記中間構造化文書の対応する部分を表すiods要素および1つまたは複数のtrak要素を含む、請求項6に記載の方法。
  8. 前記mp4−bifs構造化文書が、前記mp4−file構造化文書と別々の別個の文書である、請求項7に記載の方法。
  9. 前記mp4−bifs構造化文書が、object descriptor streamを表す要素を含む、請求項4に記載の方法。
  10. 前記mp4−bifs構造化文書が、scene description streamを表す要素を含む、請求項4に記載の方法。
  11. 前記中間構造化文書の生成が、
    前記mp4バイナリ・ファイルを表すデータ構造の組を生成することと、
    データ構造の前記組を前記中間構造化文書に変換することと
    を含む、請求項1に記載の方法。
  12. 前記中間構造化文書の変換が、scene description streamを表すmp4−bifs構造化文書を生成することを含む、請求項1に記載の方法。
  13. MPEG−4(mp4)バイナリ・ファイルをXMT(Extensible MPEG−4 Textual)ファイルに変換するシステムであって、
    前記mp4バイナリ・ファイルを入力し、前記mp4バイナリ・ファイルを表す少なくとも1つの中間構造化文書を生成するように構成されたバイナリ・ファイル・デコーダと、
    前記中間構造化文書を入力し、XMT構造化文書を生成するように構成されたトランスレータと、
    前記XMT構造化文書を入力し、前記XMTファイルを生成するように構成されたXMTシリアライザと
    を含むシステム。
  14. 前記少なくとも1つの中間構造化文書が、moovアトムおよび1つまたは複数のmdatアトムを表すデータ構造を含む、請求項13に記載のシステム。
  15. moovアトムを表すデータ構造が、iodsアトムおよび1つまたは複数のtrakアトムを表すデータ構造を含む、請求項14に記載のシステム。
  16. 前記mdatアトムおよびtrakアトムを表す前記データ構造に基づく1つまたは複数の外部メディア・ファイルをさらに含む、請求項15に記載のシステム。
  17. 前記少なくとも1つの中間構造化文書が、mp4−file構造化文書を含み、前記mp4−file構造化文書が、データ構造の前記組に基づいて、1つまたは複数のmdat要素、moov要素、およびiods要素を含む、請求項14に記載のシステム。
  18. 前記mp4−file構造化文書が、object descriptor streamを表す、請求項17に記載のシステム。
  19. scene description streamを表すmp4−bifs構造化文書をさらに含む、請求項17に記載のシステム。
  20. 前記mp4−bifs構造化文書が、前記mp4−file構造化文書と別々の別個の構造化文書である、請求項19に記載のシステム。
  21. 有形の媒体で実施されたコンピュータ・プログラムであって、
    MPEG−4(mp4)バイナリ・ファイルをXMT(Extensible MPEG−4 Textual)ファイルに変換する、前記有形の媒体に結合されたコンピュータ可読プログラム・コード
    を含み、前記コンピュータ可読プログラム・コードは、前記プログラムに、
    前記mp4バイナリ・ファイルを表す少なくとも1つの中間構造化文書を生成することと、
    前記中間構造化文書をXMT構造化文書に変換することと、
    前記XMT構造化文書に基づいて前記XMTファイルを作成することと
    を行わせる、コンピュータ・プログラム。
  22. 前記少なくとも1つの中間構造化文書が、moovアトムおよび1つまたは複数のmdatアトムを表すデータ構造を含み、前記moovアトムが、1つまたは複数のtrakアトムを含む、請求項21に記載のコンピュータ・プログラム。
  23. 前記コンピュータ可読プログラム・コードが、さらに、前記mdatアトムおよびtrakアトムを表す前記データ構造に基づいて外部メディア・ファイルを生成するように構成される、請求項22に記載のコンピュータ・プログラム。
  24. 前記少なくとも1つの中間構造化文書が、mp4−file構造化文書を含む、請求項21に記載のコンピュータ・プログラム。
  25. 前記mp4−file構造化文書が、前記少なくとも1つの中間構造化文書に基づいて、1つまたは複数のmdat要素、moov要素、およびiods要素を含む、請求項24に記載のコンピュータ・プログラム。
  26. 前記mp4−file構造化文書が、object descriptor streamを表す、請求項25に記載のコンピュータ・プログラム。
  27. 前記mp4−file構造化文書が、scene description streamを表す、請求項25に記載のコンピュータ・プログラム。
  28. 前記少なくとも1つの中間構造化文書が、scene description streamを表すmp4−bifs構造化文書を含む、請求項21に記載のコンピュータ・プログラム。
  29. 前記mp4−bifs構造化文書が、前記mp4−file構造化文書と別々の別個の文書である、請求項28に記載のコンピュータ・プログラム。
  30. 前記コンピュータ可読プログラム・コードが、さらに、
    前記mp4バイナリ・ファイルを表すデータ構造の組を生成し、
    データ構造の前記組を、前記少なくとも1つの中間構造化文書に変換する
    ように構成される、請求項21に記載のコンピュータ・プログラム。
JP2004557437A 2002-12-04 2003-11-29 MPEG−4IntermediaFormatからMPEG−4TextualRepresentationを作成する効率的な手段 Pending JP2006517309A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/309,571 US7251277B2 (en) 2002-12-04 2002-12-04 Efficient means for creating MPEG-4 textual representation from MPEG-4 intermedia format
PCT/US2003/038138 WO2004051424A2 (en) 2002-12-04 2003-11-29 Efficient means for creating mpeg-4 textual representation from mpeg-4 intermedia format

Publications (2)

Publication Number Publication Date
JP2006517309A true JP2006517309A (ja) 2006-07-20
JP2006517309A5 JP2006517309A5 (ja) 2008-12-18

Family

ID=32467888

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004557437A Pending JP2006517309A (ja) 2002-12-04 2003-11-29 MPEG−4IntermediaFormatからMPEG−4TextualRepresentationを作成する効率的な手段

Country Status (7)

Country Link
US (1) US7251277B2 (ja)
EP (1) EP1634134A4 (ja)
JP (1) JP2006517309A (ja)
CN (1) CN101427571B (ja)
AU (1) AU2003297603A1 (ja)
TW (1) TWI235611B (ja)
WO (1) WO2004051424A2 (ja)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100513736B1 (ko) * 2002-12-05 2005-09-08 삼성전자주식회사 그래픽 데이터 압축에 관한 메타표현을 이용한 입력파일생성 방법 및 시스템
JP3937223B2 (ja) * 2003-01-21 2007-06-27 ソニー株式会社 記録装置、再生装置、記録方法及び再生方法
KR100587324B1 (ko) * 2003-06-14 2006-06-08 엘지전자 주식회사 디지털 멀티미디어 방송 서비스 방법, 송/수신기, 및 데이터 구조
EP1499131A1 (en) * 2003-07-14 2005-01-19 Deutsche Thomson-Brandt Gmbh Method and apparatus for decoding a data stream in audio video streaming systems
KR101274580B1 (ko) * 2003-11-28 2013-06-13 지멘스 악티엔게젤샤프트 데이터 스트림 기술 생성 및/또는 프로세싱하기 위한 방법
KR100695126B1 (ko) * 2003-12-02 2007-03-14 삼성전자주식회사 그래픽 데이터 압축에 관한 메타표현을 이용한 입력파일생성 방법 및 시스템과, afx부호화 방법 및 장치
US7697576B2 (en) 2004-05-05 2010-04-13 Chem Image Corporation Cytological analysis by raman spectroscopic imaging
US7962933B2 (en) * 2006-04-06 2011-06-14 Velti USA, Inc. Mid-roll insertion of digital media
FR2912275B1 (fr) * 2007-02-02 2009-04-03 Streamezzo Sa Procede de transmission d'au moins un contenu representatif d'un service, depuis un serveur vers un terminal, dispositif et produit programme d'ordinateur correspondants
US20080294691A1 (en) * 2007-05-22 2008-11-27 Sunplus Technology Co., Ltd. Methods for generating and playing multimedia file and recording medium storing multimedia file
US8489702B2 (en) 2007-06-22 2013-07-16 Apple Inc. Determining playability of media files with minimal downloading
KR20100040545A (ko) * 2008-10-10 2010-04-20 삼성전자주식회사 구조화된 리치 미디어 데이터 기반의 사용자 인터페이스를 제공하기 위한 장치 및 방법
US9992490B2 (en) * 2012-09-26 2018-06-05 Sony Corporation Video parameter set (VPS) syntax re-ordering for easy access of extension parameters
CN105451073B (zh) * 2015-11-16 2018-11-02 深圳Tcl数字技术有限公司 Mp4视频源的传送方法和装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6751623B1 (en) * 1998-01-26 2004-06-15 At&T Corp. Flexible interchange of coded multimedia facilitating access and streaming
JP4159673B2 (ja) * 1998-10-09 2008-10-01 松下電器産業株式会社 オーディオ−ビジュアル・オブジェクトのシーン記述におけるデータ型キャスティングおよび代数処理のための方法
JP3585124B2 (ja) 2001-02-09 2004-11-04 藤沢薬品工業株式会社 選定分子導入方法
US7203692B2 (en) * 2001-07-16 2007-04-10 Sony Corporation Transcoding between content data and description data
FI20011871A (fi) * 2001-09-24 2003-03-25 Nokia Corp Multimediadatan prosessointi
US20030110297A1 (en) * 2001-12-12 2003-06-12 Tabatabai Ali J. Transforming multimedia data for delivery to multiple heterogeneous devices

Also Published As

Publication number Publication date
AU2003297603A1 (en) 2004-06-23
CN101427571A (zh) 2009-05-06
EP1634134A4 (en) 2008-05-21
EP1634134A2 (en) 2006-03-15
TW200415919A (en) 2004-08-16
WO2004051424A3 (en) 2006-09-21
AU2003297603A8 (en) 2004-06-23
US7251277B2 (en) 2007-07-31
CN101427571B (zh) 2010-10-20
WO2004051424A2 (en) 2004-06-17
US20040109502A1 (en) 2004-06-10
TWI235611B (en) 2005-07-01

Similar Documents

Publication Publication Date Title
KR100513736B1 (ko) 그래픽 데이터 압축에 관한 메타표현을 이용한 입력파일생성 방법 및 시스템
JP4197320B2 (ja) 構造化された文章、特にxml文章の符号化/復号化のための方法及び装置
US7231394B2 (en) Incremental bottom-up construction of data documents
RU2285354C2 (ru) Бинарный формат для экземпляров mpeg-7
JP2006517309A (ja) MPEG−4IntermediaFormatからMPEG−4TextualRepresentationを作成する効率的な手段
US20040111677A1 (en) Efficient means for creating MPEG-4 intermedia format from MPEG-4 textual representation
US20070234192A1 (en) Encoding and distribution of schema for multimedia content descriptions
JP2001312741A (ja) 三次元シーンのノード処理方法及びその装置
EP1352525B1 (en) Method for providing an extension code for a binary description for multimedia data
KR100695126B1 (ko) 그래픽 데이터 압축에 관한 메타표현을 이용한 입력파일생성 방법 및 시스템과, afx부호화 방법 및 장치
KR101109201B1 (ko) 멀티미디어 환경에서의 오디오 비쥬얼 데이터 콘텐츠의기술 방법
JP4384155B2 (ja) グラフィックデータ圧縮に関するメタ言語を用いた入力ファイルの生成方法
US7797346B2 (en) Method for improving the functionality of the binary representation of MPEG-7 and other XML based content descriptions
KR20050006565A (ko) 멀티미디어 데이터의 관리 및 편집을 위한 시스템 및 방법
KR101183861B1 (ko) 멀티미디어 콘텐트 처리 수행 방법
Timmerer et al. Digital item adaptation–coding format independence
CA2544327A1 (en) Method for compressing and decompressing structured documents
JP2005176355A (ja) グラフィックデータ圧縮に関するメタ表現を用いた入力ファイルの生成方法およびシステムと、afx符号化の方法および装置
JP2012502337A (ja) 要素の符号化方法と装置
JP2009543243A (ja) 構造化文書の圧縮のための方法と装置
JP2005151129A (ja) データ処理方法および装置
JP2005276193A (ja) Dibrデータのためのスキーマ及びスタイルシート

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061113

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061113

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081029

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20081029

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20081114

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081125

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20090206

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20090324

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110809