JP2006517309A - MPEG−4IntermediaFormatからMPEG−4TextualRepresentationを作成する効率的な手段 - Google Patents
MPEG−4IntermediaFormatからMPEG−4TextualRepresentationを作成する効率的な手段 Download PDFInfo
- 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
Links
- 238000000034 method Methods 0.000 claims abstract description 488
- 238000004590 computer program Methods 0.000 claims abstract description 16
- AWSBQWZZLBPUQH-UHFFFAOYSA-N mdat Chemical group C1=C2CC(N)CCC2=CC2=C1OCO2 AWSBQWZZLBPUQH-UHFFFAOYSA-N 0.000 claims description 80
- 230000001131 transforming effect Effects 0.000 claims 1
- 238000012545 processing Methods 0.000 description 107
- 230000008569 process Effects 0.000 description 104
- 230000000875 corresponding effect Effects 0.000 description 55
- 238000006243 chemical reaction Methods 0.000 description 43
- 238000010586 diagram Methods 0.000 description 40
- 238000003780 insertion Methods 0.000 description 26
- 230000037431 insertion Effects 0.000 description 26
- 230000000007 visual effect Effects 0.000 description 20
- 230000008520 organization Effects 0.000 description 11
- 238000012217 deletion Methods 0.000 description 10
- 230000037430 deletion Effects 0.000 description 10
- 239000002131 composite material Substances 0.000 description 8
- 230000001419 dependent effect Effects 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 230000009471 action Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 239000000203 mixture Substances 0.000 description 4
- 230000008859 change Effects 0.000 description 2
- 238000003745 diagnosis Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000033001 locomotion Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 238000011144 upstream manufacturing Methods 0.000 description 2
- 241000238876 Acari Species 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008521 reorganization Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000007723 transport mechanism Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/85—Assembly of content; Generation of multimedia applications
- H04N21/854—Content authoring
- H04N21/8543—Content authoring using a description language, e.g. Multimedia and Hypermedia information coding Expert Group [MHEG], eXtensible Markup Language [XML]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information 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/84—Mapping; Conversion
- G06F16/88—Mark-up to mark-up conversion
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/85—Assembly of content; Generation of multimedia applications
- H04N21/854—Content authoring
- H04N21/85406—Content authoring involving a specific file format, e.g. MP4 format
-
- Y—GENERAL 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
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99942—Manipulating 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
【解決手段】本発明に、mp4バイナリ・ファイルを表す少なくとも1つの中間構造化文書を生成することが含まれる。トランスレータが、中間文書を入力し、XMT構造化文書を生成するように構成される。次に、XMLシリアライザを使用して、XMT構造化文書に基づいてXMTファイルを作成する。
Description
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)」
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
MPEG−4 Textual Representationは、マルチメディア・プレゼンテーションの構造を表す「テキスト・ファイル」からなる。マルチメディア・プレゼンテーションは、サウンド、静止画像、ビデオ・クリップ、および他の要素の同期化された組合せまたはシーケンスからなる。テキスト・ファイルは、文字、数字、および句読点のバイナリ・コードのシーケンスからなる電子データ構造である。一般に、テキスト・ファイルは、一般に「テキスト・エディタ」と称するソフトウェアを使用して解釈することができる。Windows(R)オペレーティング・システムに基づくコンピュータ用の「Notepad.exe」と称するソフトウェアおよび集合的にUNIXと称するさまざまなオペレーティング・システムを使用するコンピュータ用の「vi」を含む、テキスト・エディタの多数の例がある。Windowsは、米国ワシントン州レッドモンドのMicrosoft Corporation社の登録商標である。MPEG−4 Textual Representationを含むタイプのテキスト・ファイルを「XMT−A」ファイルと称する。
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バイナリ・ファイルは、ほとんどのテキスト編集ソフトウェアによって解釈することができない。
特定のタイプのオーディオ・データ・ストリームおよびビジュアル・データ・ストリームのエンコードまたはデコードに使用される手段は、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データの構造を説明する。
他の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によって決定される。
(a)XMT−A文書の定義が、XML技術に基づく
(b)XML技術は、構造化文書を表す標準化された手段を提供する
(c)XML技術に基づく構造化文書を扱う標準化されたソフトウェア・ツールが存在する
図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の属性によって表される。
図71からわかるように、mp4−bifs文書2800に、単一のbifsConfig要素2810と、それに続く1つまたは複数のcommandFrame要素2820のシーケンスが含まれる。図72からわかるように、各commandFrame要素2830に、1つまたは複数のmp4bifs bifsCommand要素2840が含まれる。各commandFrame要素2820および2830は、commandFrame要素に含まれるコマンドが実行される時を秒単位で指定する属性「time」を所有する。
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値)
図58からわかるように、処理2200は、MPEG−4 Intermediaバイナリ・ファイル(「mp4ファイル」)2210に基づいて、XMT−A文書2220および0個以上のバイナリ・メディア・データ・ファイル2230の組を作成する。
a.mp4バイナリ・ファイル2210に基づく、中間xml文書の対2240および2250およびメディア・データ・ファイル2230の組の作成2240。
b.中間xml文書の対2250および2260に基づくxmta xml文書2220の作成2270。
mp4バイナリ・ファイル2210に基づいて中間xml文書の対2250および2260ならびにメディア・データ・ファイル2230の組を作成する処理2240は、次の2つの部分からなる。
(1)mp4バイナリ・ファイル2210の内容に基づいて、QtInfoデータ構造3100を作成する。
(2)結果のQtInfoデータ構造3100に基づいて、メディア・データ・ファイル2230の組および中間xml文書の対2250および2260を作成する。メディア・データ・ファイル2230の組は、空とすることができる。
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アトムを表す任意選択のデータ構造のアドレス
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構造のシーケンスのアドレス
1.size 3163:mdatアトム706を含むバイト数。これは、mdatアトム718の「アトム・サイズ」プロパティ724と同一である。
2.start 3166:これは、mp4バイナリ・ファイル700の先頭とmdatアトム706の第1バイトとの間のバイト数を指定する。
3.MediaData 3168:これは、mdatアトム706に含まれるチャンク736の組のコピーを含む(size−8)バイトの配列のアドレスである。
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」プロパティの値を示す整数
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のアドレス
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」プロパティの値を示す整数
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のアドレス
1.size 3238:edtsアトム945のバイト数を示す整数
2.version & flags 3240:edtsアトム945の「version」プロパティおよび「flags」プロパティの値を示す整数の対
3.EditList 3242:edtsアトム945に含まれるelstアトム948を表す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個のアドレスのシーケンスとすることができる
1.size 3266:trefアトム940のバイト数を示す整数
2.Mpod 3268:trefアトム940に含まれるmpodアトム942を表すMpod構造3270のアドレス
1.size 3272:mpodアトム942のバイト数を示す整数
2.numEntries 3274:trackID配列3276の項目数を指定する整数
3.trackID配列3276:numEntries個の整数のシーケンスのアドレス。これらの整数のそれぞれが、mpodアトム942で指定されるtrackID値の1つを表す。
1.size 3282:udtaアトム784のバイト数を示す整数
2.numCprt 3284:cprt配列3286のメンバ数を指定する整数
3.cprt配列3286:cprt構造3290のシーケンスのアドレス、またはcprt構造3290のアドレスのシーケンス
1.size 3292:cprtアトムのバイト数を指定する整数
2.version & flags 3294:cprtアトムの「version」プロパティおよび「flags」プロパティの値を示す整数の対
3.language 3296:cprtアトムの「language」プロパティの値を示す整数
4.notice 3298:cprtアトムで指定されるメッセージを示すヌル終端ストリング
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」プロパティの値を示す整数
1.size 3323:hdlrアトム918のバイト数を示す整数
2.version & flags 3326:hdlrアトム918の「version」プロパティおよび「flags」プロパティの値を示す整数の対
3.handlerType 3328:hdlrアトム918のハンドラ型プロパティを指定する4文字タグ
4.name 3330:記述または診断のために提供されるヌル終端ストリングのアドレス
1.nmhdアトム(scene description stream(sdsm)またはobject descriptor stream(odsm)の)
2.vmhdアトム(ビジュアル・ストリームの)、または
3.smhdアトム(オーディオ・ストリームの)
1.size:メディア情報ヘッダ・アトム936のバイト数を示す整数
2.version & flags:メディア情報ヘッダ・アトム936の「version」プロパティおよび「flags」プロパティの値を示す整数の対
1.size 3353:dinfアトム924のバイト数を示す整数
2.version & flags 3356:dinfアトム924の「version」プロパティおよび「flags」プロパティの値を示す整数の対
3.DataRefTable 3358: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のシーケンスのアドレス
1.size 3383:このdataRef構造3380によって表されるデータ参照構造のバイト数を示す整数
2.version & flags 3386:データ参照構造の「version」プロパティおよび「flags」プロパティの値を示す整数の対
3.dataRefType 3388:このdataRef構造3380によって表されるデータ参照構造の型を示す4文字のシーケンス
4.dataRefData 3390:データ参照構造の残りを表すsize−12バイトのシーケンスのアドレス
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の内容を表すデータ構造のアドレス
1.size 3423:このデータ構造によって表されるサンプル・テーブル・アトムのバイト数を示す整数
2.version & flags 3426:このデータ構造によって表されるサンプル・テーブル・アトムの「version」プロパティおよび「flags」プロパティの値を示す整数の対
3.numEntries 3428:table配列3430の項目数を示す整数
4.table配列3430:整数またはデータ構造の配列のアドレス
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データ構造の作成の処理は、量「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を繰り返す。
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。
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を繰り返す。
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の値と等しい場合に満足される。
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つ増分する。
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に割り当てる。
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」である)場合に、手順「プロファイルレベル・インジケータの処理」を実行する。
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と等しい場合に満足される。
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つ増分する。
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を繰り返す。
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バイトを読み取り、結果の値を無視する。
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を繰り返す。
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つ増分する。
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を繰り返す。
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つ増分する。
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バイトを読み込み、結果の値を無視する。
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に割り当てる。
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を繰り返す。
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つ増分する。
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を超える場合に)。
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を繰り返す。
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つ増分する。
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つ増分する。
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つ増分する。
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つ増分する。
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つ増分する。
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)バイトを読み取り、この値を無視する。
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の連続する項目にコピーする。
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に示す。
1.QtInfoデータ構造3100内で表された(3113、3160)media data(mdat)アトム706のxml表現2310を形成し、関連するメディア・データ3168をxml文書またはバイナリ・メディア・データ・ファイル2230に保管する。
2.QtInfoデータ構造3100で表されたmoovアトム712のxml表現2320を形成する。
このステップでは、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で表される。
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。
手順「デコーダ構成記述子の発見」は、図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」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を繰り返す。
図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で継続される。
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」に割り当てる。
(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」を実行する。
図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」に割り当てる。
(a)バイトの配列「OdsmData」の項目offsetの値を整数量「temp1」に割り当て、
(b)量「offset」の値を1つ増分し、
(c)バイトの配列「OdsmData」の項目offsetの値を整数量「temp2」に割り当て、
(d)量「offset」の値を1つ増分し、
(e)量「temp1」の値に256をかけ(左に8ビットだけシフトし)、
(f)値「temp1」と「temp2」の合計を整数量「ES_ID」に割り当てる。
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」4375は、mdat構造「mdatAtom」に含まれるビジュアル・メディア・データ・ストリームを含むチャンクのxml表現を作成する。これらのチャンクに含まれるメディア・データは、外部メディア・データ・ファイルにもコピーされる。図120からわかるように、この手順は、次の動作からなる。
trak構造「trakAtom」に含まれるTrackHeader構造3212、3204のメンバtrackID 3224の値を、新しい「mediaFile」要素2480の属性「trackID」の値に割り当てる。
「name」属性の値は、3つの文字のストリングすなわち、ファイル名スタブ、シーケンス番号、およびファイル・タイプ・サフィックスを連結することによって決定される。ファイル名スタブは、入力mp4ファイルの名前のコピーから、「.」(ドットまたはピリオド)文字の最後の出現とそれ以降の文字を除いたものによって決定することができる。シーケンス番号は、ビジュアル・オブジェクト・シーケンス番号「numVisual」の値のストリング表現から形成することができる。
ファイル・タイプ・サフィックスは、量objectTypeの値、またはメディア・データ・ストリームに含まれるファイル・フォーマット・インジケータ、あるいはその両方に依存するものとすることができる。たとえば、量objectTypeの値が「32」である場合に、ファイル・タイプ・サフィックスを、「.m4v」(MPEG−4ビデオ)と指定することができる。
「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にコピーされる。
手順「AudioDataToXml」4385は、mdat構造「mdatAtom」に含まれるオーディオ・メディア・データ・ストリームを含むチャンクを表すxml表現を作成する。これらのチャンクに含まれるメディア・データは、外部メディア・データ・ファイルにもコピーされる。図120からわかるように、この手順は、次の相違を除いて上で説明した手順「VisualDataToXml」と同等である。
手順「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内に作成される。
1.動作5200で、mdat構造「mdatAtom」のメンバ「MediaData」3168の値を、バイトの配列のアドレスを表す量「SdsmData」に割り当てる。mdat構造「mdatAtom」のメンバ「size」3163の値を、整数量「SdsmSize」に割り当てる。
trak構造「trakAtom」に含まれるTrackHeader構造3212、3204のメンバtrackID 3224の値を、新しい「sdsm」要素2440の属性「trackID」の値に割り当てる。
属性「xmlFile」の値を、文字の2つのストリング、ファイル名スタブおよびファイル・タイプ・サフィックスの連結によって決定する。ファイル名スタブは、入力mp4ファイルの名前のコピーから、「.」(ドットまたはピリオド)文字の最後の出現とそれ以降の文字を除いたものによって決定することができる。ファイル・タイプ・サフィックスは、「Bifs.xml」である。
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に含まれる。
ただし、
u=「use3DMeshCoding」の1ビット値
r=「usePredictiveMFField」の1ビット値
aaaaa=「nodeIdBits」の5ビット符号なし整数値
bbbbb=「routeIdBits」の5ビット符号なし整数値
ppppp=「protoIdbits」の5ビット符号なし整数値
c=「commandFrame」の1ビット値
ただし、
aaaaa=「nodeIdBits」の5ビット符号なし整数値
bbbbb=「routeIdBits」の5ビット符号なし整数値
c「commandFrame」の1ビット値
図122からわかるように、手順「sdsmチャンクのデコード」は、次のステップからなる。
関連する整数量「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の値を増やす。
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要素の対応する属性に割り当てる。
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からわかるように、手順「削除コマンドのデコード」は、次のステップからなる。
手順「DeleteNodeコマンドのデコード」には、新しい「DeleteNode」bifsCommand要素2840を作成することと、これを現在の親要素2830に付加することが含まれる。Node Deletionコマンド1400のコンポーネントnodeID 1418によって指定される値を、判定し、新しい「DeleteNode」bifsCommand要素の「nodeID」属性に割り当てる。
手順「DeleteIdxValueコマンドのデコード」には、新しい「DeleteIndexedValue」bifsCommand要素2840を作成することと、これを現在の親要素2830に付加することが含まれる。Node Deletionコマンド1424のコンポーネントnodeID 1442、inFieldID 1448、deletionPosition 1454、およびposition 1460によって指定される値を判定し、新しい「DeleteIndexedValue」bifsCommand要素の対応する属性に割り当てる。
手順「DeleteRouteコマンドのデコード」には、新しい「DeleteRoute」bifsCommand要素2840を作成することと、これを現在の親要素2830に付加することが含まれる。Route Deletionコマンド1466のコンポーネントrouteID 1484によって指定される値を、新しい「DeleteRoute」bifsCommand要素の「routeID」属性に割り当てる。
図125からわかるように、手順「置換コマンドのデコード」は、次のステップからなる。
手順「ReplaceNodeコマンドのデコード」には、新しい「ReplaceNode」bifsCommand要素2840を作成することと、これを現在の親要素2830に付加することが含まれる。Node Replacementコマンド1500のコンポーネントnodeID 1510によって指定される値を、判定し、新しい「ReplaceNode」bifsCommand要素の「nodeID」属性に割り当てる。
その後、手順「SFNodeのデコード」を使用して、Node Replacementコマンド1500のSFNodeコンポーネント1514を解釈する。
手順「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」属性に割り当てる。
手順「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」属性に割り当てる。
手順「ReplaceRouteコマンドのデコード」には、新しい「ReplaceRoute」bifsCommand要素2840を作成することと、これを現在の「commandFrame」要素2830に付加することが含まれる。Route Replacementコマンド1570のコンポーネント、routeID 1580、departureNodeID 1584、departureFieldID 1588、arrivalNodeID 1590、およびarrivalFieldID 1594によって指定される値を、判定し、新しい「ReplaceRoute」bifsCommand要素の対応する属性に割り当てる。
SFNodeデータ構造1700、1710、および1730の構図を、図44から48に要約した。各SFNodeデータ構造は、親データ構造に含まれる。親データ構造は、BIFSコマンド1120または別のSFNode構造のいずれかとすることができる。どちらの場合でも、mp4bifs文書内に、対応する親要素がある。BIFSコマンド親構造の場合に、mp4bifs親要素は、bifsCommand要素2910である。SFNode親構造の場合に、mp4bifs親要素は、BIFS Node要素になる。
親構造の識別、「localNodeType」の値、およびMPEG−4 Systems仕様で定義されたテーブルを使用して、このSFNode構造によって表されるBIFSノードの特定の型の「nodeNumber」プロパティの整数値を決定する。整数量「nodeNumber」の値およびMPEG−4 Systems仕様で定義されたテーブルを使用して、このSFNode構造によって表されるBIFSノードの型を記述するストリング量「nodeName」の値を決定する。量「nodeName」の値によって指定される要素名を有する新しいBIFSノード要素を作成し、mp4bifs親要素に付加する。
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」の値によって指定されるプロパティ・フィールドの値が続く。
各プロパティ・フィールドの値は、手順「フィールド値のデコード」によって決定される。
各SFNode構造の各プロパティ・フィールドは、特定のフィールド・データ型プロパティおよび特定のfieldNameストリングを有する。フィールド・データ型プロパティは、boolean、integer、float、vector2d、vector3d、rotation、color、time、string、URL、node、またはbufferのうちの1つとすることができる。各プロパティ・フィールドは、SFField(単一値フィールド)またはMFField(複数値フィールド)としても定義される。
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要素」である。
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の処理」は、次のステップからなる。
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データ構造の処理」は、次のステップからなる。
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データ構造の処理」は、次のステップからなる。
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データ構造の処理」は、次のステップからなる。
1.新しい「mdia」要素2604を作成し、現在の「trak」要素2600に付加する。
2.手順「MediaHeaderデータ構造の処理」を実行する。
3.手順「Handlerデータ構造の処理」を実行する。
4.手順「MediaInfoデータ構造の処理」を実行する。
手順「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データ構造の処理」は、次のステップからなる。
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データ構造の処理」は、次のステップからなる。
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データ構造の処理」は、次のステップからなる。
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データ構造の処理」は、次のステップからなる。
1.新しい「minf」要素2612を作成し、現在の「mdia」要素2604に付加する。
2.手順「MediaDataInfoデータ構造の処理」を実行する。
3.手順「MediaInfoHeaderデータ構造の処理」を実行する。
4.手順「SampleTablesデータ構造の処理」を実行する。
手順「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」属性に割り当てる。
所与のtrak構造に含まれるMediaInfoHeaderデータ構造は、そのtrak構造に関連するメディア・データのストリーム・タイプに応じて、3つのタイプのうちの1つになる可能性がある。
1.新しい「nmhd」要素2632を作成し、現在の「minf」要素2616に付加する。
2.MediaInfoHeader構造3343のメンバ「version」の値を、新しい「nmhd」要素2632の「version」属性に割り当てる。
3.MediaInfoHeader構造3343のメンバ「flags」の値を、新しい「nmhd」要素2632の「flags」属性に割り当てる。
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」属性に割り当てる。
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データ構造の処理」は、次のステップからなる。
1.新しい「stbl」要素2628を作成し、現在の「minf」要素2612に付加する。
2.手順「SampleToChunkTableデータ構造の処理」を実行する。
3.手順「ChunkOffsetTableデータ構造の処理」を実行する。
4.手順「TimeToSampleTableデータ構造の処理」を実行する。
5.手順「SampleSizeTableデータ構造の処理」を実行する。
6.SampleTables3400のメンバSyncSampleTable 3416の値が0でない場合に、手順「SyncSampleTableデータ構造の処理」を実行する。
7.手順「SampleDescrTableデータ構造の処理」を実行する。
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データ構造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データ構造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データ構造の処理」は、次のステップからなる。
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データ構造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データ構造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配列のデコード」は、次のステップからなる。
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構成記述子の処理」は、次のステップからなる。
1.新しい「SLConfigDescriptor」要素2760を作成し、現在の「ES_Descr」要素2700に付加する。
2.配列「esdData」の項目「esdPos」の値を、新しい「SLConfigDescriptor」要素2760の属性「predefined」に割り当て、量「esdPos」の値を「1」だけ増分する。
配列「esdData」内の、「DecoderSpecificInfoTag」に続く項目の内容は、量「streamType」および「objectType」の値に依存する。
手順「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構成の処理」は、次のステップからなる。
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」の値だけ増分する。
図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要素の作成」を実行する。
図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要素の処理」を実行する。
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属性に割り当てる。
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
a.標準xml手段を使用して、新しいDescr要素160を作成し、新しいInitialObjectDescriptor要素130に付加する。
b.標準xml手段を使用して、新しいesDescr要素170を作成し、新しいDescr要素160に付加する。
次の動作を、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の取得」を実行する。
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」属性に割り当てる。
1.標準xml手段を使用して、mp4file文書2300内の選択されたtrak要素2600に含まれるES_Descr要素2688、2700に含まれるDecoderConfigDescriptor要素2710を見つける。
この事例では、mp4file文書2300のDecoderConfigDescriptor要素2710のstreamType属性の値が、「3」と期待され、値「SceneDescription」が、XMT−A文書100の新しいDecoderConfigDescriptor要素650の「streamType」属性に割り当てられる。
手順「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」属性に割り当てる。
1.標準xml手段を使用して、mp4file文書2300内の選択されたtrak要素2600に含まれるES_Descr要素2688、2700に含まれるDecoderConfigDescriptor要素2710を見つける。
この事例では、mp4file文書2300内のDecoderConfigDescriptor要素2710のstreamType属性の値が、「1」になると期待され、値「ObjectDescriptor」が、XMT−A文書100の新しいDecoderConfigDescriptor要素650の「streamType」属性に割り当てられる。
手順「trakのtref要素からのmpodTrackIDsの取得」は、次のステップからなる。
1.標準xml手段を使用して、選択されたtrak要素2600に従属するtref要素2636を見つける。
2.標準xml手段を使用して、選択されたtref要素2636に従属するmpod要素2640を見つける。
3.「mpod」要素2640の「trackID」属性の値を、量「mpodTrackIds」に割り当てる。
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から導出される。
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要素の作成」は、次のステップからなる。
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要素の作成」は、次のステップからなる。
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要素の作成」は、次のステップからなる。
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要素の作成」は、次のステップからなる。
1.標準xml手段を使用して、新しい「ObjectDescriptorRemove」要素250を作成し、現在の「par」要素210に付加する。
2.odsmサンプル要素2530の「ObjectDescriptorRemove」要素2570の「ODID」属性の値を、プレフィックス「ODID:」に連結し、その結果を、新しい「ObjectDescriptorRemove」要素250の「objectDescriptorId」属性に割り当てる。XMT−A「ObjectDescriptorRemove」要素の「objectDescriptorId」属性は、図4では「ODID」として表されている。
図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を再帰的に繰り返す。
次の手順を使用して、mp4bifs commandFrame要素2830の内容を、XMT−A BIFSコマンド要素300、310、320に変換する。この場合に、「現在のmp4bifs要素」は、6410で選択されたmp4bifs commandFrame要素2830であり、「XMT−A親要素」は、6420で作成されたXMT−A「par」要素である。
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要素への変換」は、次のステップからなる。
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要素への変換」は、次のステップからなる。
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要素への変換」は、次のステップからなる。
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要素への変換」は、次のステップからなる。
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要素への変換」は、次のステップからなる。
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要素への変換」は、次のステップからなる。
1.新しいXMT−A「Delete」要素310を作成し、現在のXMT−A親要素に付加する。
2.mp4bifs「DeleteRoute」要素の「routeId」属性の値をストリング量「routeId」に割り当てる。
3.量「routeId」の値をプレフィックス「route:」に付加し、その結果をXMT−A「Delete」要素310の「atRoute」属性に割り当てる。
手順「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要素への変換」は、次のステップからなる。
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要素への変換」は、次のステップからなる。
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要素への変換」は、次のステップからなる。
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要素への変換」は、次のステップからなる。
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要素の属性への変換」は、次のステップからなる。
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要素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によって定義される。
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要素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」属性に割り当てる。
Claims (30)
- MPEG−4(mp4)バイナリ・ファイルをXMT(Extensible MPEG−4 Textual)ファイルに変換する方法であって、
前記mp4バイナリ・ファイルを表す少なくとも1つの中間構造化文書を生成することと、
前記少なくとも1つの中間構造化文書をXMT構造化文書に変換することと、
前記XMT構造化文書に基づいて前記XMTファイルを作成することと
を含む方法。 - 前記中間構造化文書が、moovアトムおよび1つまたは複数のmdatアトムを表すデータ構造を含み、前記moovアトムが、iodsアトムおよび1つまたは複数のtrakアトムを含む、請求項1に記載の方法。
- 前記mdatアトムおよびtrakアトムを表すデータ構造に基づいて外部メディア・ファイルを生成することをさらに含む、請求項2に記載の方法。
- 前記中間構造化文書の変換が、mp4−file構造化文書を生成することを含む、請求項1に記載の方法。
- 前記mp4−file構造化文書が、eXtemsible Markup Languageに基づく、請求項4に記載の方法。
- 前記mp4−file構造化文書が、moov構造化要素および1つまたは複数のmdat構造化要素を含み、前記moov構造化要素が、前記moovアトムを表し、各mdat構造化要素が、前記中間構造化文書によって表される前記mdatアトムの1つを表す、請求項4に記載の方法。
- 前記moov構造化要素が、前記中間構造化文書の対応する部分を表すiods要素および1つまたは複数のtrak要素を含む、請求項6に記載の方法。
- 前記mp4−bifs構造化文書が、前記mp4−file構造化文書と別々の別個の文書である、請求項7に記載の方法。
- 前記mp4−bifs構造化文書が、object descriptor streamを表す要素を含む、請求項4に記載の方法。
- 前記mp4−bifs構造化文書が、scene description streamを表す要素を含む、請求項4に記載の方法。
- 前記中間構造化文書の生成が、
前記mp4バイナリ・ファイルを表すデータ構造の組を生成することと、
データ構造の前記組を前記中間構造化文書に変換することと
を含む、請求項1に記載の方法。 - 前記中間構造化文書の変換が、scene description streamを表すmp4−bifs構造化文書を生成することを含む、請求項1に記載の方法。
- MPEG−4(mp4)バイナリ・ファイルをXMT(Extensible MPEG−4 Textual)ファイルに変換するシステムであって、
前記mp4バイナリ・ファイルを入力し、前記mp4バイナリ・ファイルを表す少なくとも1つの中間構造化文書を生成するように構成されたバイナリ・ファイル・デコーダと、
前記中間構造化文書を入力し、XMT構造化文書を生成するように構成されたトランスレータと、
前記XMT構造化文書を入力し、前記XMTファイルを生成するように構成されたXMTシリアライザと
を含むシステム。 - 前記少なくとも1つの中間構造化文書が、moovアトムおよび1つまたは複数のmdatアトムを表すデータ構造を含む、請求項13に記載のシステム。
- moovアトムを表すデータ構造が、iodsアトムおよび1つまたは複数のtrakアトムを表すデータ構造を含む、請求項14に記載のシステム。
- 前記mdatアトムおよびtrakアトムを表す前記データ構造に基づく1つまたは複数の外部メディア・ファイルをさらに含む、請求項15に記載のシステム。
- 前記少なくとも1つの中間構造化文書が、mp4−file構造化文書を含み、前記mp4−file構造化文書が、データ構造の前記組に基づいて、1つまたは複数のmdat要素、moov要素、およびiods要素を含む、請求項14に記載のシステム。
- 前記mp4−file構造化文書が、object descriptor streamを表す、請求項17に記載のシステム。
- scene description streamを表すmp4−bifs構造化文書をさらに含む、請求項17に記載のシステム。
- 前記mp4−bifs構造化文書が、前記mp4−file構造化文書と別々の別個の構造化文書である、請求項19に記載のシステム。
- 有形の媒体で実施されたコンピュータ・プログラムであって、
MPEG−4(mp4)バイナリ・ファイルをXMT(Extensible MPEG−4 Textual)ファイルに変換する、前記有形の媒体に結合されたコンピュータ可読プログラム・コード
を含み、前記コンピュータ可読プログラム・コードは、前記プログラムに、
前記mp4バイナリ・ファイルを表す少なくとも1つの中間構造化文書を生成することと、
前記中間構造化文書をXMT構造化文書に変換することと、
前記XMT構造化文書に基づいて前記XMTファイルを作成することと
を行わせる、コンピュータ・プログラム。 - 前記少なくとも1つの中間構造化文書が、moovアトムおよび1つまたは複数のmdatアトムを表すデータ構造を含み、前記moovアトムが、1つまたは複数のtrakアトムを含む、請求項21に記載のコンピュータ・プログラム。
- 前記コンピュータ可読プログラム・コードが、さらに、前記mdatアトムおよびtrakアトムを表す前記データ構造に基づいて外部メディア・ファイルを生成するように構成される、請求項22に記載のコンピュータ・プログラム。
- 前記少なくとも1つの中間構造化文書が、mp4−file構造化文書を含む、請求項21に記載のコンピュータ・プログラム。
- 前記mp4−file構造化文書が、前記少なくとも1つの中間構造化文書に基づいて、1つまたは複数のmdat要素、moov要素、およびiods要素を含む、請求項24に記載のコンピュータ・プログラム。
- 前記mp4−file構造化文書が、object descriptor streamを表す、請求項25に記載のコンピュータ・プログラム。
- 前記mp4−file構造化文書が、scene description streamを表す、請求項25に記載のコンピュータ・プログラム。
- 前記少なくとも1つの中間構造化文書が、scene description streamを表すmp4−bifs構造化文書を含む、請求項21に記載のコンピュータ・プログラム。
- 前記mp4−bifs構造化文書が、前記mp4−file構造化文書と別々の別個の文書である、請求項28に記載のコンピュータ・プログラム。
- 前記コンピュータ可読プログラム・コードが、さらに、
前記mp4バイナリ・ファイルを表すデータ構造の組を生成し、
データ構造の前記組を、前記少なくとも1つの中間構造化文書に変換する
ように構成される、請求項21に記載のコンピュータ・プログラム。
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)
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 |
RU2338244C2 (ru) * | 2003-11-28 | 2008-11-10 | Сименс Акциенгезелльшафт | Способ формирования и/или обработки описания потока данных |
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)
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 | 松下電器産業株式会社 | オーディオ−ビジュアル・オブジェクトのシーン記述におけるデータ型キャスティングおよび代数処理のための方法 |
CN1501974A (zh) | 2001-02-09 | 2004-06-02 | ����ҩƷ��ҵ��ʽ���� | 选定分子的导入方法 |
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 |
-
2002
- 2002-12-04 US US10/309,571 patent/US7251277B2/en not_active Expired - Fee Related
-
2003
- 2003-10-31 TW TW092130400A patent/TWI235611B/zh not_active IP Right Cessation
- 2003-11-29 WO PCT/US2003/038138 patent/WO2004051424A2/en active Application Filing
- 2003-11-29 JP JP2004557437A patent/JP2006517309A/ja active Pending
- 2003-11-29 AU AU2003297603A patent/AU2003297603A1/en not_active Abandoned
- 2003-11-29 EP EP03812477A patent/EP1634134A4/en not_active Withdrawn
- 2003-11-29 CN CN200380105014XA patent/CN101427571B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
EP1634134A2 (en) | 2006-03-15 |
CN101427571A (zh) | 2009-05-06 |
WO2004051424A3 (en) | 2006-09-21 |
CN101427571B (zh) | 2010-10-20 |
WO2004051424A2 (en) | 2004-06-17 |
AU2003297603A1 (en) | 2004-06-23 |
TWI235611B (en) | 2005-07-01 |
US20040109502A1 (en) | 2004-06-10 |
TW200415919A (en) | 2004-08-16 |
US7251277B2 (en) | 2007-07-31 |
EP1634134A4 (en) | 2008-05-21 |
AU2003297603A8 (en) | 2004-06-23 |
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を作成する効率的な手段 | |
JP2009501991A (ja) | 構造化文書を圧縮および解凍するための方法および装置 | |
US20040111677A1 (en) | Efficient means for creating MPEG-4 intermedia format from MPEG-4 textual representation | |
KR100695126B1 (ko) | 그래픽 데이터 압축에 관한 메타표현을 이용한 입력파일생성 방법 및 시스템과, afx부호화 방법 및 장치 | |
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 | |
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 |