以下、この発明の実施の一形態を、図面を参照しながら説明する。先ず、理解を容易とするために、この発明に適用可能な一例のフォーマット(以下、AVCHDフォーマットと呼ぶ)について説明する。AVCHDフォーマットは、ビデオデータとオーディオデータとが所定に多重化されたAV(Audio/Video)ストリームを記録可能な記録媒体に記録する記録フォーマットとして現在提案されているもので、記録媒体に記録されたAVストリームを、クリップ単位でプレイリストを用いて管理可能としている。
例えばITU−T(International Telecommunication Union-Telecommunication Standarization Sector)勧告H.264あるいはISO(International Organization for Standarization)/IEC(International Electrotechnical Commission)国際標準14496−10(MPEG−4パート10)Advanced Video Coding(以下、H.264|AVCと略称する)に規定される符号化方式や、MPEG(Moving Pictures Experts Group)ビデオやMPEGオーディオといった符号化方式で符号化され、MPEG2システムズに従い多重化されたビットストリームは、クリップAVストリーム(またはAVストリーム)と称される。クリップAVストリームは、所定のファイルシステムによりファイルとしてディスクに記録される。このファイルを、クリップAVストリームファイル(またはAVストリームファイル)と称する。
クリップAVストリームファイルは、ファイルシステム上での管理単位であり、ユーザにとって必ずしも分かりやすい管理単位であるとは限らない。ユーザの利便性を考えた場合、複数のクリップAVストリームファイルに分割された映像コンテンツを一つにまとめて再生する仕組みや、クリップAVストリームファイルの一部だけを再生する仕組み、さらには、特殊再生や頭出し再生を滑らかに行うための情報などをデータベースとしてディスクに記録しておく必要がある。
図1は、この発明に適用可能なAVCHDフォーマットに規定されるデータモデルを概略的に示す。このAVCHDフォーマットによれば、データ構造は、図1に示されるように4層のレイヤよりなる。最も最下層のレイヤは、クリップAVストリームが配置されるレイヤである(便宜上、クリップレイヤと呼ぶ)。その上のレイヤは、クリップAVストリームに対する再生箇所を指定するための、プレイリスト(PlayList)と、プレイアイテム(PlayItem)とが配置されるレイヤである(便宜上、プレイリストレイヤと呼ぶ)。さらにその上のレイヤは、プレイリストに対して再生順などを指定するコマンドからなるムービーオブジェクト(Movie Object)などが配置されるレイヤである(便宜上、オブジェクトレイヤと呼ぶ)。最上層のレイヤは、記録媒体に格納されるタイトルなどを管理するインデックステーブルが配置される(便宜上、インデックスレイヤと呼ぶ)。
クリップレイヤについて説明する。クリップAVストリームは、ビデオデータやオーディオデータがMPEG2 TS(トランスポートストリーム)の形式などに多重化されたビットストリームである。このクリップAVストリームに関する情報がクリップ情報(Clip Information)としてファイルに記録される。
また、クリップAVストリームには、字幕を表示するグラフィクスストリームであるOBストリーム(Overlay Bitmap stream)や、メニュー表示などに用いられるデータ(ボタン画像データなど)をストリームにしたMBストリーム(Menu Bitmap stream)ストリームを多重化することができる。
クリップAVストリームファイルと、対応するクリップ情報が記録されたクリップ情報ファイルとをひとまとまりのオブジェクトと見なし、クリップ(Clip)と称する。すなわち、クリップは、クリップAVストリームとクリップ情報とから構成される、一つのオブジェクトである。
ファイルは、一般的に、バイト列として扱われる。クリップAVストリームファイルのコンテンツは、時間軸上に展開され、クリップ中のエントリーポイントは、主に時間ベースで指定される。所定のクリップへのアクセスポイントのタイムスタンプが与えられた場合、クリップAVストリームファイルの中でデータの読み出しを開始すべきアドレス情報を見つけるために、クリップ情報ファイルを用いることができる。
プレイリストレイヤについて説明する。プレイリストは、再生するAVストリームファイルの指定と、指定されたAVストリームファイルの再生箇所を指定する再生開始点(IN点)と再生終了点(OUT点)の集まりとから構成される。この再生開始点と再生終了点の情報を一組としたものは、プレイアイテム(PlayItem)と称される。プレイリストは、プレイアイテムの集合で構成される。プレイアイテムを再生するということは、そのプレイアイテムに参照されるAVストリームファイルの一部分を再生するということになる。すなわち、プレイアイテム中のIN点およびOUT点情報に基づき、クリップ中の対応する区間が再生される。
オブジェクトレイヤについて説明する。ムービーオブジェクトは、ナビゲーションコマンドプログラムと、ムービーオブジェクトとを連携するターミナルインフォメーションを含む。ナビゲーションプログラムは、プレイリストの再生を制御するためのコマンド(ナビゲーションコマンド:navigation command)である。ターミナルインフォメーションは、ユーザのプレーヤに対するインタラクティブな操作を許可するための情報を含んでいる。このターミナルインフォメーションに基づき、メニュー画面の呼び出しや、タイトルサーチといったユーザオペレーションが制御される。
インデックスレイヤについて説明する。インデックスレイヤは、インデックステーブル(Index Table)からなる。インデックステーブルは、記録媒体に記録されたコンテンツのタイトルを定義する、トップレベルのテーブルである。インデックステーブルに格納されているタイトル情報に基づき、プレーヤに常駐されるシステムソフトウェア中のモジュールマネージャにより記録媒体の再生が制御される。
すなわち、図2に概略的に示されるように、インデックステーブル中の任意のエントリは、タイトルと称され、インデックステーブルにエントリされるファーストプレイバックタイトル(First PlaybackTitle)、メニュータイトル(MenuTitle)およびムービータイトル(MovieTitle)#1、#2、・・・は、全てタイトルである。各タイトルは、ムービーオブジェクトに対するリンクを示す。
理解を容易とするため再生専用の記録媒体を例にとると、例えば、ファーストプレイバックタイトルは、当該記録媒体に格納されるコンテンツが映画であれば、映画本編に先立って映出される映画会社の宣伝用映像(トレーラ)に対応する。メニュータイトルは、例えばコンテンツが映画である場合、本編再生、チャプタサーチ、字幕や言語設定、特典映像再生などを選択するためのメニュー画面に対応する。また、ムービータイトルは、メニュータイトルから選択される各映像である。タイトルがさらにメニュー画面であるような構成も可能である。
図3は、上述のようなクリップAVストリーム、クリップ情報(Stream Attributes)、クリップ、プレイアイテムおよびプレイリストの関係を示すUML(Unified Modeling Language)図である。プレイリストは、1または複数のプレイアイテムに対応付けられ、プレイアイテムは、1のクリップに対応付けられる。1のクリップに対して、それぞれ開始点および/または終了点が異なる複数のプレイアイテムを対応付けることができる。1のクリップから1のクリップAVストリームファイルが参照される。同様に、1のクリップから1のクリップ情報ファイルが参照される。また、クリップAVストリームファイルとクリップ情報ファイルとは、1対1の対応関係を有する。このような構造を定義することにより、クリップAVストリームファイルを変更することなく、任意の部分だけを再生する、非破壊の再生順序指定を行うことが可能となる。
また、図4のように、複数のプレイリストから同一のクリップを参照することもできる。また、1のプレイリストから複数のクリップを指定することもできる。クリップは、プレイリスト中のプレイアイテムに示されるIN点およびOUT点により、参照される。図4の例では、クリップ300は、プレイリスト310のプレイアイテム320から参照されると共に、プレイリスト311を構成するプレイアイテム321および322のうちプレイアイテム321から、IN点およびOUT点で示される区間が参照される。また、クリップ301は、プレイリスト311のプレイアイテム322からIN点およびOUT点で示される区間が参照されると共に、プレイリスト312のプレイアイテム323および324のうち、プレイアイテム323のIN点およびOUT点で示される区間が参照される。
次に、AVCHDフォーマットによる、記録媒体に記録されるファイルの管理構造について、図5を用いて説明する。ファイルは、ディレクトリ構造により階層的に管理される。記録媒体上には、先ず、1つのディレクトリ(図5の例ではルート(root)ディレクトリ)が作成される。このディレクトリの下が、1つの記録再生システムで管理される範囲とする。
ルートディレクトリの下に、ディレクトリ"BDMV"およびディレクトリ"AVCHDTN"が置かれる。ディレクトリ"AVCHDTN"には、例えばクリップの代表画像を所定サイズに縮小したサムネイルファイルが置かれる。ディレクトリ"BDMV"に、図1を用いて説明したデータ構造が格納される。
ディレクトリ"BDMV"の直下には、ファイルは、ファイル"index.bdmv"およびファイル"MovieObject.bdmv"の2つのみを置くことができる。また、ディレクトリ"BDMV"の下に、ディレクトリ"PLAYLIST"、ディレクトリ"CLIPINF"、ディレクトリ"STREAM"およびディレクトリ"BACKUP"が置かれる。ディレクトリ"BACKUP"は、各ディレクトリおよびファイルのバックアップが格納される。
ファイル"index.bdmv"は、ディレクトリ"BDMV"の内容について記述される。すなわち、このファイル"index.bdmv"が上述した最上層のレイヤであるインデックスレイヤにおけるインデックステーブルに対応する。また、ファイル"MovieObject.bdmv"は、1つ以上のムービーオブジェクトの情報が格納される。すなわち、このファイル"MovieObject.bdmv"が上述したオブジェクトレイヤに対応する。
ディレクトリ"PLAYLIST"は、プレイリストのデータベースが置かれるディレクトリである。すなわち、ディレクトリ"PLAYLIST"は、プレイリストに関するファイルであるファイル"xxxxx.mpls"を含む。ファイル"xxxxx.mpls"は、プレイリストのそれぞれに対して作成されるファイルである。ファイル名において、"."(ピリオド)の前の"xxxxx"は、5桁の数字とされ、ピリオドの後ろの"mpls"は、このタイプのファイルに固定的とされた拡張子である。
ディレクトリ"CLIPINF"は、クリップのデータベースが置かれるディレクトリである。すなわち、ディレクトリ"CLIPINF"は、クリップAVストリームファイルのそれぞれに対するクリップインフォメーションファイルであるファイル"zzzzz.clpi"を含む。ファイル名において、"."(ピリオド)の前の"zzzzz"は、5桁の数字とされ、ピリオドの後ろの"clpi"は、このタイプのファイルに固定的とされた拡張子である。
ディレクトリ"STREAM"は、実体としてのAVストリームファイルが置かれるディレクトリである。すなわち、ディレクトリ"STREAM"は、クリップインフォメーションファイルのそれぞれに対応するクリップAVストリームファイルを含む。クリップAVストリームファイルは、MPEG2(Moving Pictures Experts Group 2)のトランスポートストリーム(以下、MPEG2 TSと略称する)からなり、ファイル名が"zzzzz.m2ts"とされる。ファイル名において、ピリオドの前の"zzzzz"は、対応するクリップインフォメーションファイルと同一することで、クリップインフォメーションファイルとこのクリップAVストリームファイルとの対応関係を容易に把握することができる。
なお、ディレクトリ"AVCHDTN"は、2種類のサムネイルファイル"thumbnail.tidx"および"thumbnail.tdt2"を置くことができる。サムネイルファイル"thumbnail.tidx"は、所定の方式で暗号化されたサムネイル画像が格納される。サムネイルファイル"thumbnail.tdt2"は、暗号化されていないサムネイル画像が格納される。例えばビデオカメラでユーザが撮影したクリップに対応するサムネイル画像は、コピーフリーであって暗号化する必要が無いと考えられるため、このサムネイルファイル"thumbnail.tdt2"に格納される。
図5で示した各ファイルのうち、この発明に関わりの深いものについて、より詳細に説明する。先ず、ディレクトリ"BDMV"の直下に置かれるファイル"index.bdmv"について説明する。図6は、このファイル"index.bdmv"の一例の構造を表すシンタクスを示す。ここでは、シンタクスをコンピュータ装置などのプログラムの記述言語として用いられるC言語の記述法に基づき示す。これは、他のシンタクスを表す図において、同様である。
図6において、フィールドTypeIndicatorは、32ビットのデータ長を有し、このファイルがインデックステーブルであることを示す。フィールドTypeIndicator2は、32ビットのデータ長を有し、このファイル"index.bdmv"のバージョンを示す。フィールドIndexesStartAddressは、32ビットのデータ長を有し、このシンタクス内にあるブロックblkIndexes()の開始アドレスを示す。
フィールドExtensionDataStartAddressは、32ビットのデータ長を有し、このシンタクス内にあるブロックblkExtensionData()の開始アドレスを示す。ブロックblkExtensionData()は、所定の拡張データを格納可能とするためのブロックである。フィールドExtensionDataStartAddressは、このファイル"index.bdmv"の最初のバイトからの相対バイト数で、ブロックblkExtensionData()の開始アドレスを示す。相対バイト数は、"0"から開始される。若し、このフィールドExtensionDataStartAddressの値が"0"であれば、このファイル"index.bdmv"内に、ブロックblkExtensionData()が存在しないことを示す。
フィールドExtensionDataStartAddressに続けて、データ長が192バイトの領域reservedが配される。なお、領域reservedは、バイトアライメントや、将来的なフィールドの追加などのための領域である。これは、以下の説明においても同様である。ブロックblkAppInfoBDMV()は、コンテンツ制作者が任意の情報を記述できるブロックであって、プレーヤの動作などには影響を与えない。
ブロックblkIndexes()は、このファイル"index.bdmv"の実質的な内容であって、このブロックblkIndexes()に記述された内容により、ディスクをプレーヤに装填した際に再生されるファーストプレイバックや、トップメニューから呼び出されるタイトル(ムービーオブジェクト)が指定される。インデックステーブルにより呼び出されたムービーオブジェクト等に記述されたコマンドに基づき、後述するプレイリストファイルが読み込まれる。
図7は、ブロックblkIndexes()の一例の構造を表すシンタクスを示す。フィールドLengthは、32ビットのデータ長を有し、このフィールドLength直後からこのブロックblkIndexes()の終わりまでのデータ長を示す。続けて、ブロックFirstPlaybackTitle()およびブロックMenuTitle()が配される。
ブロックFirstPlaybackTitle()は、ファーストプレイバックで用いられるオブジェクトに関する情報が記述される。ブロックFirstPlaybackTitle()は、1ビットのデータ長を有する領域reservedに続けて固定値"1"が記述される。さらに31ビットのデータ長を有する領域reservedを介して固定値"1"が記述される。そして、14ビットのデータ長を有する領域reservedを介して、16ビットのデータ長を有するフィールドFirstPlaybackTitleMobjIDRefが配される。このフィールドFirstPlaybackTitleMobjIDRefにより、ファーストプレイバックタイトルで用いられるムービーオブジェクトのIDを示す。
ムービーオブジェクトのIDは、例えば、図8および図9を用いて後述するムービーオブジェクトのシンタクスに基づき、ムービーオブジェクトのforループ文においてループ変数として用いられる値mobj_idで示される。この例では、フィールドFirstPlaybackTitleMobjIDRefは、参照するムービーオブジェクトに対応する値mobj_idが格納される。
なお、ブロックblkIndexes()におけるブロックFirstPlaybackTitle()内のフィールドFirstPlaybackTitleMobjIDRefは、トップメニューのムービーオブジェクトを指していてもよいし、タイトルを指していてもよい。
ブロックMenuTitle()は、トップメニューで用いられるオブジェクトに関する情報が記述される。ブロックMenuTitle()は、1ビットのデータ長を有する領域reservedに続けて固定値"1"が記述される。さらに31ビットのデータ長を有する領域reservedを介して固定値"1"が記述される。そして、14ビットのデータ長を有する領域reservedを介して、16ビットのデータ長を有するフィールドMenuTitleMobjIDRefが配される。フィールドMenuTitleMobjIDRefは、メニュータイトルで用いられるムービーオブジェクトのIDを示す。
ブロックMenuTitle()の次のフィールドNumberOfTitlesは、16ビットのデータ長を有し、ユーザが選択、再生可能なタイトルの数を示す。次のforループ文に従い、このフィールドNumberOfTitlesに示される回数だけ、値title_idを引数として、ブロックMovieTitle[title_id]()が記述される。ブロックMovieTitle[title_id]()は、タイトル毎の情報が記述される。値title_idは、"0"からフィールドNumberOfTitlesで示される値までの数値であり、タイトルを識別する。
ブロックMovieTitle[title_id]()において、1ビットのデータ長を有する領域reservedを介して固定値"1"が記述され、さらに、46ビットのデータ長を有する領域reservedを介してフィールドMovieTitleMobjIDRefが記述される。フィールドMovieTitleMobjIDRefは、16ビットのデータ長を有し、このタイトルで用いられるムービーオブジェクトのIDを示す。フィールドMovieTitleMobjIDRefの後ろに、32ビットのデータ長を有する領域reservedが配される。
図8は、ディレクトリ"BDMV"の直下に置かれるファイル"MovieObject.bdmv"の一例の構造を表すシンタクスを示す。フィールドTypeIndicatorは、32ビット(4バイト)のデータ長を有し、このファイルがファイル"MovieObject.bdmv"であることを示す。フィールドTypeIndicatorは、ISO(International Organization for Standarization)646に規定された符号化方式で符号化した4文字からなる文字列が記述される。この図8の例では、フィールドtype_indicatiorにISO646に既定の方式で符号化された4文字の文字列"MOBJ"が記述され、このファイルがファイル"MovieObject.bdmv"であることが示される。
フィールドTypeIndicator2は、32ビット(4バイト)のデータ長を有し、このファイル"MovieObject.bdmv"のバージョン番号を示す。このファイル"MovieObject.bdmv"では、フィールドTypeIndicator2は、ISO646に規定された符号化方式で符号化した4文字の文字列"0100"でなければならない。
フィールドExtensionDataStartAddressは、32ビットのデータ長を有し、このシンタクス内にあるブロックblkExtensionData()の開始アドレスを示す。フィールドExtensionDataStartAddressは、このファイル"MovieObject.bdmv"の最初のバイトからの相対バイト数で、ブロックblkExtensionData()の開始アドレスを示す。相対バイト数は、"0"から開始される。若し、このフィールドExtensionDataStartAddressの値が"0"であれば、このファイル"MovieObject.bdmv"内に、ブロックblkExtensionData()が存在しないことを示す。
なお、この図8に示すシンタクス内のフィールドpadding_wordは、16ビットのデータ長を有し、このファイル"MovieObject.bdmv"のシンタクスに従いforループ文に値N1または値N2で示される回数だけ挿入される。値N1または値N2は、0または任意の正の整数である。また、フィールドpadding_wordは、任意の値を用いることができる。
フィールドExtensionDataStartAddressに続けてデータ長が224ビットの領域reservedが配され、その次に、このファイル"MovieObject.bdmv"の本体であるブロックblkMovieObjects()が格納される。
図9は、ブロックblkMovieObjects()の一例の構造を表すシンタクスを示す。フィールドLengthは、32ビットのデータ長を有し、このフィールドLengthの直後からこのブロックblkMovieObjects()の終わりまでのデータ長を示す。32ビットのデータ長を有する領域reservedを介してフィールドNumberOfMobjsが配される。フィールドNumberOfMobjsは、直後のforループ文に従い格納されるムービーオブジェクトの数を示す。forループ文のループ変数として用いられる値mobj_idで、ムービーオブジェクトが一意に特定される。値mobj_idは、"0"から始まる値で、ムービーオブジェクトは、forループ文中に記述される順序により定義される。
forループ文中のブロックTerminalInfo()は、固定値"1"が記述され、次に15ビットのデータ長を有する領域reservedが配される。その次に、16ビットのデータ長を有するフィールドNumberOfNavigationCommands[mobj_id]が配される。このフィールドNumberOfNavigationCommands[mobj_id]は、値mobj_idによって指し示されるムービーオブジェクトMovieObject[mobj_id]()に含まれるナビゲーションコマンド(NavigationCommand)の数を表す。
次の、値command_idをループ変数とするforループ文により、フィールドNumberOfNavigationCommands[mobj_id]に示される数だけ、ナビゲーションコマンドが記述される。すなわち、このforループ文中に配されるフィールドNavigationCommand[mobj_id][command_id]は、値mobj_idによって指し示されるブロックMovieObject[mobj_id]()に含まれる、値command_idで示される順番のナビゲーションコマンドNavigationCommandを格納する。値command_idは、0から始まる値で、ナビゲーションコマンドNavigationCommandは、このforループ文中に記述される順序で定義される。
図10は、プレイリストファイル"xxxxx.mpls"の一例の構造を表すシンタクスを示す。フィールドTypeIndicatorは、32ビット(4バイト)のデータ長を有し、このファイルがプレイリストファイルであることを示す。フィールドTypeIndicator2は、32ビット(4バイト)のデータ長を有し、このプレイリストファイルのバージョンを示す。フィールドPlayListStartAddressは、32ビットのデータ長を有し、このシンタクス中のブロックblkPlayList()の開始アドレスを示す。
フィールドPlayListMarkStartAddressは、32ビットのデータ長を有し、このシンタクス中のブロックblkPlayListMark()の開始アドレスを示す。フィールドExtensionDataStartAddressは、32ビットのデータ長を有し、このシンタクス中のブロックblkExtensionData()の開始アドレスを示す。フィールドExtensionDataStartAddressは、ブロックblkExtensionData()の開始アドレスを、ファイル"xxxxx.mpls"の最初のバイトからの相対バイト数を表した値である。相対バイト数は、"0"から開始される。若し、このフィールドExtensionDataStartAddressの値が"0"であれば、このファイル"xxxxx.mpls"内に、ブロックblkExtensionData()が存在しないことを示す。
160ビットのデータ長を有する領域reservedを介してブロックblkAppInfoPlayList()が配される。ブロックblkAppInfoPlayList()は、次のブロックblkPlayList()に記述されるプレイリストのタイプ、再生制限などの情報が記述される。ブロックblkPlayList()は、プレイリストが記述される。ブロックblkPlayListMark()は、チャプタジャンプなどでジャンプされるポイントが記述される。ブロックblkExtensionData()は、所定の拡張データを格納可能とするためのブロックである。
なお、この図10に示すシンタクス内のフィールドpadding_wordは、16ビットのデータ長を有し、このファイル"xxxxx.mpls"のシンタクスに従いforループ文に値N1、値N2および値N3で示される回数だけ挿入される。値N1、値N2または値N3は、0または任意の正の整数である。また、フィールドpadding_wordは、任意の値を用いることができる。
図11は、ブロックblkPlayList()の一例の構造を表すシンタクスを示す。フィールドLengthは、32ビットのデータ長を有し、このフィールドLengthの直後からブロックblkPlayList()の最後までのデータ長を示す。フィールドLengthに続けて16ビットのデータ長を有する領域reservedが配され、次にフィールドNumberOfPlayItemsが配される。フィールドNumberOfPlayItemsは、16ビットのデータ長を有し、このブロックblkPlayList()に含まれるプレイアイテムの数を示す。フィールドNumberOfSubPathは、このブロックblkPlayList()に含まれるサブパスの数を示す。
次のforループ文に従い、フィールドNumberOfPlayItemsで示される数だけ、プレイアイテムが記述されるブロックblkPlayItem()が記述される。forループ文に基づくカウント数がブロックblkPlayItem()の識別子PlayItem_idとなる。さらに次のforループ文に従い、フィールドNumberOfSubPathで示される数だけ、ブロックblkSubPath()が記述される。forループ文に基づくカウント数がブロックblkSubPath()の識別子SubPath_idとなる。
なお、サブパスは、主として再生されるプレイアイテムに対応するメインパスに対して、サブプレイアイテムに対応して持つことができる。サブパスは、例えば、アフレコ用のオーディオデータの指定や、2枚の映像を合成する際に、プレイアイテムで指定されるクリップと同期して再生する副映像を指定するといった目的で用いられる。
図12は、ブロックblkPlayItem()の一例の構造を表すシンタクスを示す。フィールドLengthは、16ビットのデータ長を有し、このフィールドLengthの直後からブロックblkPlayItem()の最後までのデータ長を示す。
フィールドClipInformationFileName[0]は、40ビット(5バイト)のデータ長を有し、このブロックblkPlayItem()が参照するクリップインフォメーションファイルのファイル名が示される。このプレイアイテムにおいて、フィールドClipInformationFileName[0]で示されるファイル名のクリップインフォメーションファイルが読み出される。フィールドClipCodecIdentifier[0]は、32ビット(4バイト)のデータ長を有し、このブロックblkPlayItem()によるプレイアイテムにおいて用いられるクリップAVストリームのコーデック方式を示す。
12ビットのデータ長を有する領域reservedを介して、フィールドConnectionConditionが配される。フィールドConnectionConditionは、4ビットのデータ長を有し、クリップ間の接続状態に関する情報を示す。記録用途の記録媒体に対しては、フィールドConnectionConditionの値として"1"、"5"または"6"が用いられる。フィールドConnectionConditionの値が"1"で、そのクリップと次のクリップとがシームレス接続しないことを示し、フィールドConnectionConditionの値が"5"または"6"で、そのクリップと次のクリップとがシームレス接続することを示す。なお、シームレス接続とは、クリップと次のクリップとがフレームタイミングで連続的に再生されるように、クリップ間の再生制御を行うことをいう。
フィールドConnectionConditionの値が"5"で、当該プレイアイテムが参照するクリップにおいて、オーディオデータの記録長がビデオデータの記録長に対して長くされる(図13A参照)。これにより、クリップとクリップとを接続する際に、オーディオデータのフェイドアウト処理が可能とされる。例えば、ユーザによる記録停止操作によりクリップがクローズされる場合に、フィールドConnectionConditionの値が"5"とされる。以下、このフィールドConnectionConditionの値が"5"で示されるクリップの接続方法を、第1のシームレス接続と呼ぶ。
フィールドConnectionConditionの値が"6"で、当該プレイアイテムが参照するクリップにおいて、オーディオデータの記録長がビデオデータの記録長に対して同じか若しくは短いくされる(図13B参照)。これにより、クリップとクリップとの接続をシームレスに行うことが可能とされる。例えば、ユーザ操作に応じた記録停止以外の理由、例えばシステム要因に基づきクリップがクローズされる場合に、フィールドConnectionConditionの値が"6"とされる。以下、このフィールドConnectionConditionの値が"6"で示されるクリップの接続方法を、第2のシームレス接続と呼ぶ。
フィールドRefToSTCID[0]は、8ビットのデータ長を有し、システムタイムベース(STC)の不連続点に関する情報を示す。フィールドINTimeおよびフィールドOUTTimeは、それぞれ32ビットのデータ長を有し、メインクリップAVストリームの再生範囲を示す。フィールドINTimeが開始点(IN点)を示し、フィールドOUTTimeが終了点(OUT点)を示す。
ブロックblkUOMaskTable()は、ユーザ入力の受付制限が設定されるテーブルである。1ビットのデータ長を有するフラグPlayItemRandomAccessFlagは、このブロックblkPlayItem()によるプレイアイテムに対してランダムアクセスを許可するか否かを規定する。続けて、7ビットのデータ長を有する領域reservedを介してフィールドStillModeが配される。フィールドStillModeは、8ビットのデータ長を有し、ブロックblkPlayItem()によるプレイアイテムにおいて、最後に表示した映像を静止画として表示させるか否かを示す。フィールドStillModeの値が"0x01"(バイナリ)であれば、if文に基づき、16ビットのデータ長を有するフィールドStillTimeにより静止時間が示される。フィールドStillModeの値が"0x01"以外であれば、当該16ビットのデータ長を有する領域がワードアライメントのために予約された領域reservedとされる。
ブロックblkSTNTable()は、このブロックblkPlayItem()によるプレイアイテムが管理しているクリップAVストリームの属性、PID番号、記録媒体上での記録位置などが管理される。
図14は、ブロックblkPlayListMark()の一例の構造を表すシンタクスを示す。フィールドLengthは、32ビットのデータ長を有し、このフィールドLengthの直後からブロックblkPlayListMark()の最後までのデータ長を示す。
フィールドNumberOfPlayListMarksは、16ビットのデータ長を有し、このブロックblkPlayListMark()に含まれるプレイリストマークの数を示す。次のforループ文に従い、フィールドNumberOfPlayListMarksで示される数だけプレイリストマークの情報が記述される。
forループ文内において、8ビットのデータ長を有する領域reserveに続けてフィールドMarkTypeが配される。フィールドMarkTypeは、8ビットのデータ長を有し、マークのタイプを示す。フィールドRefToPlayItemIDは、16ビットのデータ長を有し、マークが打たれるプレイアイテムを参照する識別情報PlayItem_idが記述される。フィールドMarkTimeStampは、32ビットのデータ長を有し、マークが打たれるポイントを示すタイムスタンプが記述される。フィールドEntryESPIDは、16ビットのデータ長を有し、マークによって指し示されるエレメンタリストリームを含んでいるTSパケットのPIDの値を示す。フィールドDurationは、45kHzのクロックを単位とした計測による、32ビットのデータ長を有する符号無し整数である。このフィールドDurationに格納される値が"0"であれば、このフィールドDurationは、意味を成さない。
図15は、クリップインフォメーションファイルの一例の構造を表すシンタクスを示す。フィールドTypeIndicatorは、32ビット(4バイト)のデータ長を有し、このファイルがクリップインフォメーションファイルであることを示す。フィールドTypeIndicator2は、32ビット(4バイト)のデータ長を有し、このクリップインフォメーションファイルのバージョンを示す。
このクリップインフォメーションファイルは、ブロックblkClipInfo()、ブロックblkSequenceInfo()、ブロックblkProgramInfo()、ブロックblkCPI()、ブロックblkClipMark()およびブロックblkExtensionData()を有し、それぞれ32ビットのデータ長を有するフィールドSequenceInfoStartAddress、フィールドProgramInfoStartAddress、フィールドCPIStartAddress、フィールドClipMarkStartAddressおよびフィールドExtensionDataStartAddressは、各々対応するブロックの開始アドレスを示す。
フィールドExtensionDataStartAddressは、このクリップインフォメーションファイルの最初のバイトからの相対バイト数で、ブロックblkExtensionData()の開始アドレスを示す。相対バイト数は、"0"から開始される。若し、このフィールドExtensionDataStartAddressの値が"0"であれば、このファイル"index.bdmv"内に、ブロックblkExtensionData()が存在しないことを示す。
ブロックblkClipInfo()は、これらの開始アドレスを示すフィールドに続く、96ビットのデータ長を有する領域reservedの次から開始される。ブロックblkClipInfo()は、このクリップインフォメーションファイルが管理するクリップAVストリームに関する情報が記述される。ブロックblkSequenceInfo()は、STCやATC(アライバルタイムベース)が連続しているシーケンスをまとまりとして管理する情報が記述される。ブロックblkProgramInfo()は、このクリップインフォメーションファイルに管理されるクリップAVストリームの符号化方式、クリップAVストリーム中のビデオデータのアスペクト比などの情報が記述される。ブロックblkCPI()は、ランダムアクセス開始点などの、AVストリーム中の特徴的な箇所を表す特徴点情報CPIに関する情報が格納される。
また、ブロックblkClipMark()は、チャプタ位置などの、クリップに付された頭出しのためのインデックス点(ジャンプポイント)が記述される。ブロックblkExtensionData()は、拡張データを格納することができる領域である。なお、これらブロックblkClipMark()およびクリップインフォメーションファイル内のブロックblkExtensionData()は、この発明との関連性が薄いので、詳細な説明を省略する。
図16は、ブロックblkClipInfo()の一例の構造を表すシンタクスを示す。フィールドLengthは、32ビットのデータ長を有し、このフィールドLengthの直後からブロックblkClipInfo()の最後までのデータ長を示す。16ビットのデータ長を有する領域reservedを介して、フィールドClipStreamTypeが配される。
フィールドClipStreamTypeは、8ビットのデータ長を有し、クリップAVストリームの種別を表す。このフィールドClipStreamTypeの値は、例えば"1"に固定的とされる。フィールドApplicationTypeは、8ビットのデータ長を有し、クリップAVストリーム(拡張子が「m2ts」のファイル)がどのような多重化によって作られているかを示す。フィールドApplicationTypeの値が"1"で、対応するクリップAVストリームは、通常の動画が再生される。続けて31ビットのデータ長を有する領域reservedが配される。
データ長が1ビットのフラグIsCC5は、プレイリストにおけるブロックblkPlayItem()によって、対応するクリップと次のクリップとの接続を、上述した第1のシームレス接続、すなわちフィールドConnectionConditionの値が"5"で示される方法で行うか否かを示す。フラグIsCC5の値が"1"(バイナリ値)であれば、クリップ間の接続が第1のシームレス接続によりなされていることを示す。
フィールドTSRecordingRateは、クリップAVストリームファイルの記録レートをバイト/秒で表したものである。フィールドNumberOfSourcePacketsは、クリップAVストリームに含まれるパケット数を表す。システムにより予約された1024ビットのデータ長の領域reservedを介してブロックTSTypeInfoBlock()が配される。ブロックTSTypeInfoBlock()は、クリップAVストリームが格納されるパケットのタイプを示す情報が格納される。このブロックTSTypeInfoBlock()は、この発明との関連性が薄いので、詳細な説明を省略する。
次のif文以下の情報は、上述のフラグIsCC5の値が"1"、すなわち、対応するクリップと次のクリップとの接続を第1のシームレス接続で行うとされた場合に記述される。if文の次の8ビットのデータ長を有する領域reservedを介してフィールドFollowingClipStreamTypeが配されるフィールドFollowingClipStreamTypeは、8ビットのデータ長を有し、このクリップインフォメーションファイルに対応するクリップの次のクリップのタイプが記述される。8ビットのデータ長を有する領域reservedを介してフィールドFollowingClipInformationFileNameが配される。
フィールドFollowingClipInformationFileNameは、40ビット(5バイト)のデータ長を有し、このクリップインフォメーションファイルに対応するクリップの次のクリップに対応するクリップインフォメーションファイルのファイル名が記述される。次のフィールドClipCodecIdentifierは、32ビット(4バイト)のデータ長を有し、当該次のクリップの符号化方式を示す。この例では、フィールドClipCodecIdentifierは、ISO646に既定の方式で符号化された4文字の文字列値"M2TS"に固定的とされる。次に8ビットのデータ長を有する領域reservedが配される。
図17は、ブロックblkSequenceInfo()の一例の構造を表すシンタクスを示す。フィールドLengthは、32ビットのデータ長を有し、このフィールドLengthの直後からブロックblkSequenceInfo()の最後までのデータ長を示す。15ビットのデータ長を有する領域reservedを介してデータ長が1ビットで固定値"1"が記述される。
次のフィールドSPNATCStartは、32ビットのデータ長を有し、連続した時間に記録されたことを表すシーケンス(シーケンスATCSequenceと呼ぶ)の開始をパケット番号で表す。この図17の例では、フィールドSPNATCStartは、値を"0"としてクリップAVストリームファイルの先頭と一致させている。フィールドNumberOfSTCSequenceは、シーケンスATCSequence上のシーケンスSTCSequenceの数を表す。フィールドNumberOfSTCSequenceは、値が"1"以上とされる。
次のforループ文に従い、フィールドNumberOfSTCSequenceで示される数だけ、シーケンスSTCSequenceの情報が記述される。シーケンスSTCSequenceは、MPEG2 TS(Transport Stream)における時間軸の基準であるPCR(Program Clock Reference)が連続な範囲を表す。シーケンスSTCSequenceには、クリップ内で一意な番号STC_idが割り当てられる。このシーケンスSTCSequence内では、不連続の無い一貫した時間軸を定義できるので、プレイアイテムの開始時刻および終了時刻を一意に定めることができる。つまり、各プレイアイテムの開始点と終了点は、同一のシーケンスSTCSequenceに存在していなければならない。このforループ文においては、値stc_idによりシーケンスSTCSequenceが指定される。
フィールドPCRPID[stc_id]は、16ビットのデータ長を有し、MPEG2 TSにおいて、PCR(Program Clock Reference)が含まれるTSパケットのPIDを表す。フィールドSPNSTCStart[stc_id]は、32ビットのデータ長を有し、シーケンスSTCSequenceの開始をパケット番号で表す。フィールドPresentationStartTimeおよびフィールドPresentationEndTimeは、それぞれ32ビットのデータ長を有し、クリップAVストリーム中の有効な範囲を表す。フィールドPresentationStartTimeおよびフィールドPresentationEndTimeで示される範囲がプレイアイテムから参照できる範囲となる。
図18は、ブロックblkProgramInfo()の一例の構造を表すシンタクスを示す。フィールドLengthは、32ビットのデータ長を有し、このフィールドLengthの直後からブロックblkProgramInfo()の最後までのデータ長を示す。15ビットのデータ長を有する領域reservedを介して、データ長が1ビットで固定値"1"が記述される。
フィールドSPNProgramSequenceStartは、32ビットのデータ長を有し、対応するクリップAVストリームファイルにおいて、プログラムシーケンスが開始されるソースパケットの番号が記述される。フィールドProgramMapPIDは、16ビットのデータ長を有し、プログラムシーケンスに適用可能なプログラムマップセクションを含むとされているTSパケットのPIDの値を示す。フィールドNumberOfStreamsInPSは、8ビットのデータ長を有し、プログラムシーケンスに定義されるエレメンタリストリームの数を示す。フィールドNumberOfStreamsInPSに続けて、8ビットのデータ長を有する領域reservedが配される。
次のforループ文に従い、値[stream_index]をループ変数として、フィールドNumberOfStreamsInPSで示される数だけ、フィールドStreamPID[stream_index]およびブロックblkStreamCodingInfo(stream_index)の組が格納される。フィールドStreamPID[stream_index]は、プログラムシーケンスによって参照されたPMT(Program Map Table)に記述されたエレメンタリストリームに対応するPIDの値を示す。次のブロックblkStreamCodingInfo(stream_index)は、対応するフィールドStreamPID[stream_index]で示されるエレメンタリストリームの符号化方式に関する情報が記述される。
図19は、ブロックblkCPI()の一例の構造を表すシンタクスを示す。MPEGストリームのような、フレーム間圧縮を行っている符号化ストリームにおいては、デコード開始可能な箇所は、GOP(Group Of Picture)の先頭など一部の箇所に限定されていることが多い。CPI(Characteristic Point Information)とは、そのデコード可能な開始点の位置の情報を集めたデータベースで、再生時刻と、ファイル内アドレスとが対応付けられたテーブルになっている。すなわち、CPIは、デコード単位の先頭位置を示す情報がテーブル化されている。
このようにデータベースを定めることで、例えば、任意の時刻から再生したい場合、再生時刻を元にCPIを参照することによって再生位置のファイル内アドレスがわかる。このアドレスは、デコード単位の先頭となっているため、プレーヤは、そこからデータを読み出してデコードし、素早く画像を表示することができる。
なお、このCPIに格納される、デコード単位の先頭位置(この例ではGOPの先頭位置)を、EP(Entry Point)エントリと称する。
図19において、フィールドLengthは、32ビットのデータ長を有し、このフィールドLengthの直後からブロックblkCPI()の最後までのデータ長を示す。次のif文に従い、フィールドLengthの値が0でなければ、12ビットのデータ長を有する領域reservedを介してフィールドCPITypeが配される。フィールドCPITypeは、4ビットのデータ長を有し、CPIの種類を示す。次のブロックblkEPMap()は、対応するクリップAVストリームファイルにおけるPTS値とバイトアドレスとの関連付けを行うテーブルが格納される。
図20は、ブロックblkEPMap()の一例の構造を表すシンタクスを示す。8ビットのデータ長を有する領域reservedを介してフィールドNumberOfStreamPIDEntriesが配される。フィールドNumberOfStreamPIDEntriesは、8ビットのデータ長を有し、ブロックblkEPMap()におけるブロックblkEPMapForOneStreamPIDのエントリ数を示す。forループ文に従い、値[k]をループ変数として、フィールドNumberOfStreamPIDEntriesに示される数だけ、エントリポイントに関する情報が記述される。
forループ文内において、フィールドStreamPID[k]は、16ビットのデータ長を有し、ブロックblkEPMap()の中で[k]番目にエントリされるブロックblkEPMapForOneStreamPID(以下、[k]番目のブロックblkEPMapForOneStreamPIDと記述する)によって参照されるエレメンタリストリームを伝送するトランスポートパケットのPIDの値を示す。
10ビットのデータ長を有する領域reservedを介してフィールドEPStreamType[k]が配される。フィールドEPStreamType[k]は、4ビットのデータ長を有し、[k]番目のブロックblkEPMapForOneStreamPIDによって参照されるエレメンタリストリームのタイプを示す。フィールドNumberOfEPCoarseEntries[k]は、16ビットのデータ長を有し、[k]番目のブロックblkEPMapForOneStreamPIDの中にある粗い検索用のサブテーブル(EP coarse table)のエントリ数を示す。フィールドNumberOfEPFineEntries[k]は、18ビットのデータ長を有し、[k]番目のブロックblkEPMapForOneStreamPIDの中にある精密な検索用のサブテーブル(EP fine table)のエントリ数を示す。フィールドEPMapForOneStreamPIDStartAddress[k]は、32ビットのデータ長を有し、ブロックblkEPMap()の中で[k]番目のブロックblkEPMapForOneStreamPIDが始まる相対バイト位置を示す。この値は、ブロックblkEPMap()の第1バイト目からのバイト数で示される。
上述のforループ文による記述の後、16ビットの整数倍のデータ長を有するパディングワードを挟んで記述されるforループ文に従い、値[k]をループ変数として、フィールドNumberOfStreamPIDEntriesに示される数だけ、ブロックblkEPMapForOneStreamPID(EPStreamType[k], NumberOfEPCoarseEntries[k], NumberOfEPFineEntries[k])が格納される。すなわち、引数NumberOfEPCoarseEntries[k]は、サブテーブル(EP coarse table)に格納されるエントリPTSEPCoarseおよびエントリSPNEPCoarseの数を示す。同様に、引数NumberOfEPFineEntries[k]は、サブテーブル(EP fine table)に格納されるエントリPTSEPFineおよびエントリSPNEPFineの数を示す。以下では、引数NumberOfEPCoarseEntries[k]および引数NumberOfEPFineEntries[k]を、それぞれ適宜、エントリ数Ncおよびエントリ数Nfと呼ぶ。
図21は、ブロックblkEPMapForOneStreamPID(EP_stream_type, Nc, Nf)の一例の構造を表すシンタクスを示す。ブロックblkEPMapForOneStreamPID(EP_stream_type, Nc, Nf)のセマンティクスを説明するために、先ず、ブロックblkEPMapForOneStreamPID(EP_stream_type, Nc, Nf)に格納されるデータの元となるエントリである、エントリPTSEPStartおよびエントリSPNEPStartの意味について説明する。
エントリPTSEPStartと、エントリPTSEPStartに関連付けられたエントリSPNEPStartは、それぞれAVストリーム上のエントリポイントを指す。そして、エントリPTSEPFineと、エントリPTSEPFineに関連付けられたエントリPTSEPCoarseは、同一のエントリPTSEPStartから導かれる。また、エントリSPNEPFineと、エントリSPNEPFineに関連付けられたエントリSPNEPCoarseは、同一のエントリSPNEPStartから導かれる。
図22は、エントリPTSEPCoarseおよびエントリPTSEPFineの一例のフォーマットについて示す。PTSすなわちエントリPTSEPStartは、データ長が33ビットの値である。MSBのビットを第32ビット、LSBのビットを第0ビットとするとき、この図22の例では、大まかな単位で検索を行う際に用いられるエントリPTSEPCoarseは、エントリPTSEPStartの第32ビットから第19ビットまでの14ビットが用いられる。エントリPTSEPCoarseにより、解像度が5.8秒で、26.5時間までの範囲で検索が可能である。また、より精密な検索を行うためのエントリPTSEPFineは、エントリPTSEPStartの第19ビットから第9ビットまでの11ビットが用いられる。エントリPTSEPFineにより、解像度が5.7ミリ秒で、11.5秒までの範囲で検索が可能である。なお、第19ビットは、エントリPTSEPCoarseとエントリPTSEPFineとで共通して用いられる。また、LSB側の第0ビットから第8ビットまでの9ビットは、用いられない。
図23は、エントリSPNEPCoarseおよびエントリSPNEPFineの一例のフォーマットについて示す。ソースパケット番号すなわちエントリSPNEPStartは、データ長が32ビットの値である。MSBのビットを第31ビット、LSBのビットを第0ビットとするとき、この図23の例では、大まかな単位で検索を行う際に用いられるエントリSPNEPCoarseは、エントリSPNEPStartの第31ビットから第0ビットまでの全てのビットが用いられる。また、より精密な検索を行うためのエントリSPNEPFineは、エントリSPNEPStartの第16ビットから第0ビットまでの17ビットが用いられる。エントリSPNEPFineにより、例えば略25MB(Mega Byte)のAVストリームファイルまでの範囲で、検索が可能である。
なお、ソースパケット番号の場合でも、エントリSPNEPCoarseとしてMSB側の所定ビット数の値だけ用いるようにしてもよい。例えば、エントリSPNEPCoarseとして、エントリSPNEPStartの第31ビットから第16ビットまでの17ビットを用い、エントリSPNEPFineは、エントリSPNEPStartの第16ビットから第0ビットまでの17ビットを用いる。
上述に基づき、エントリPTSEPStartおよびエントリSPNEPStartは、次のように定義される。
エントリPTSEPStartは、図22で示したように、データ長が33ビットの符号無し整数であり、AVストリーム中で、ランダムアクセスが可能なピクチャ(例えばIDR(Instantaneous Decoding Refresh)ピクチャやI(Intra)ピクチャ)から開始するビデオアクセスユニットの33ビット長のPTSを示す。
エントリSPNEPStartは、図23で示したように、32ビットの符号無し整数であり、エントリPTSEPStartに関連付けられたビデオアクセスユニットの第1バイト目を含むソースパケットの、AVストリームの中でのアドレスを示す。エントリSPNEPStartは、ソースパケット番号の単位で表され、AVストリームファイル中の最初のソースパケットから、値"0"を初期値として、ソースパケット毎に1ずつ増加する値としてカウントされる。
図21を参照し、ブロックblkEPMapForOneStreamPID(EP_stream_type, Nc, Nf)は、第1のforループ文により大まかな単位での検索を行うためのサブテーブル(EP coarse table)が記述され、第2のforループ文によりサブテーブル(EP coarse table)の検索結果に基づきより詳細な検索を行うためのサブテーブル(EP fine table)が記述される。
第1のforループ文の直前に、フィールドEPFineTableStartAddressが配される。フィールドEPFineTableStartAddressは、32ビットのデータ長を有し、最初の第2のforループにおけるフィールドReservedEPFine[EP_fine_id]の第1バイト目の開始アドレスを、ブロックblkEPMapForOneStreamPID(EP_stream_type, Nc, Nf)の第1バイト目からの相対バイト数で示す。相対バイト数は、値"0"から開始する。
第1のforループ文は、ループ変数[i]で以て、サブテーブル(EP coarse table)のエントリ数Ncまで繰り返され、エントリ数Ncの組数だけフィールドRefToEPFineID[i]、エントリPTSEPCoarse[i]およびエントリPTSEPFine[i]が格納される。第1のforループ文において、フィールドRefToEPFineID[i]は、18ビットのデータ長を有し、フィールドRefToEPFineID[i]に続くフィールドPTSEPCoarse[i]が示すエントリPTSEPCoarseに関連付けられるエントリPTSEPFineを持つ、サブテーブル(EP fine table)内のエントリ番号を示す。エントリPTSEPFineと、このエントリPTSEPFineに関連付けられるエントリPTSEPCoarseとは、同一のエントリPTSEPStartから導かれる。フィールドRefToEPFineID[i]は、第2のforループ文中で記述される順番で定義されるループ変数[EP_fine_id]の値により与えられる。
第1のforループ文の後に、パディングワードを挟んで第2のforループ文による記述がなされる。第2のforループ文は、ループ変数[EP_fine_id]で以て、サブテーブル(EP fine table)のエントリ数Nfまで繰り返され、エントリ数Nfの組数だけ、1ビットのデータ長を有するフィールドReservedEPFine[EP_fine_id]と、3ビットのデータ長を有するフィールドIEndPositionOffset[EP_fine_id]と、11ビットのデータ長を有するフィールドPTSEPFine[EP_fine_id]と、17ビットのデータ長を有するフィールドSPNEPFine[EP_fine_id]とが格納される。これらのうち、フィールドPTSEPFine[EP_fine_id]およびフィールドSPNEPFine[EP_fine_id]は、ループ変数[EP_fine_id]に基づきサブテーブル(EP fine table)から参照されるエントリPTSEPFineおよびエントリSPNEPFineそれぞれが格納される。
エントリPTSEPCoarseおよびエントリPTSEPFine、ならびに、エントリSPNEPCoarseおよびエントリSPNEPFineは、次のように導かれる。サブテーブル(EP fine table)に、関連するデータSPNEPStartの値の昇順に並んでいるNf個のエントリがあるとする。それぞれのエントリPTSEPFineは、対応するエントリPTSEPStartから、次式(1)のように導かれる。
PTSEPFine[EP_fine_id]=(PTSEPStart[EP_fine_id] >>9)/211 ・・(1)
エントリPTSEPCoarseと、対応するエントリPTSEPFineとの関係は、次式(2)、(3)の通りである。
PTSEPCoarse[i]=(PTSEPStart[RefToEPFineID[i]] >>19)/214 ・・(2)
PTSEPFine[RefToEPFineID[i]]=(PTSEPStart[RefToEPFineID[i]] >>9)/211 ・・(3)
それぞれのエントリSPNEPFineは、対応するエントリSPNEPStartから、次式(4)のように導かれる。
SPNEPFine[EP_fine_id]=SPNEPStart[EP_fine_id]/217 ・・(4)
エントリSPNEPCoarseと、対応するエントリSPNEPFineとの関係は、次式(5)、(6)の通りである。
SPNEPCoarse[i]=SPNEPStart[RefToEPFineID[i]] ・・(5)
SPNEPFine[RefToEPFineID[i]]=SPNEPStart[RefToEPFineID[i]]/217 ・・(6)
なお、上述の式(1)〜(6)において、記号「>>x」は、データのLSB側からxビットを超える桁からビットを用いることを意味する。
次に、拡張データを格納するためのブロックblkExtensionData()について説明する。このブロックblkExtensionData()は、所定の拡張データを格納可能なように定義され、インデックステーブルが格納されるファイル"index.bdmv"、プレイリストが格納されるファイル"xxxxx.mpls"およびクリップインフォメーションファイル"zzzzz.clpi"の各ファイルに記述することができる。
図24は、ブロックblkExtensionData()の一例の構造を表すシンタクスを示す。フィールドLengthは、32ビットのデータ長を有し、このフィールドLengthの直後からブロックblkExtensionData()の終わりまでのデータ長をバイト数で示す。このフィールドLengthの示すデータ長が"0"でなければ、if文以下の記述がなされる。
フィールドDataBlockStartAddressは、32ビットのデータ長を有し、このシンタクス中の、拡張データの本体が格納されるブロックDataBlock()の開始アドレスを、このブロックblkExtensionData()の先頭バイトからの相対バイト数で示す。すなわち、相対バイト数は、"0"から開始される。なお、フィールドDataBlockStartAddressは、次に示す32ビットアライメントの条件を満たさなければならない。
DataBlockStartAddress%4=0
24ビットのデータ長を有する領域reservedを介してフィールドNumberOfExtDataEntriesが配される。フィールドNumberOfExtDataEntriesは、8ビットのデータ長を有し、このブロックblkExtensionData()のブロックDataBlock()に格納される拡張データのエントリ数を示す。拡張データのエントリは、拡張データの本体を取得するための情報が格納される。この例では、拡張データのエントリは、フィールドExtDataType、フィールドExtDataVersion、フィールドExtDataStartAddressおよびフィールドExtDataLengthからなるブロックext_data_entry()であって、ブロックblkExtensionData()において、第1のforループ文に従いこのフィールドNumberOfExtDataEntriesに示される個数だけ、このブロックext_data_entry()が存在する。
フィールドExtDataTypeは、16ビットのデータ長を有し、このブロックblkExtensionData()に記述される拡張データが記録装置用の拡張データであることを表す。このフィールドExtDataTypeの値は、拡張データを識別する第1の値であり、このブロックblkExtensionData()を含む規格書のライセンサ(使用認可者)が割り当てると定義することができる。フィールドExtDataVersionは、拡張データを識別する第2の値であり、この拡張データのバージョン番号を表すものと定義することができる。なお、このブロックblkExtensionData()において、フィールドExtDataTypeおよびフィールドExtDataVersionの値が同一のブロックext_data_entry()が2以上、存在してはならない。
フィールドExtDataStartAddressは、32ビットのデータ長を有し、このフィールドExtDataStartAddressが含まれる拡張データのエントリ(ブロックext_data_entry())に対応する拡張データの開始アドレスを示す。フィールドExtDataStartAddressは、ブロックblkExtensionData()の先頭バイトからの相対バイト数で、拡張データext_dataの開始アドレスを示す。なお、フィールドExtDataStartAddressは、次に示す32ビットアライメントの条件を満たさなければならない。
ExtDataStartAddress%4=0
フィールドExtDataLengthは、32ビットのデータ長を有し、このフィールドExtDataStartAddressが含まれる拡張データのエントリ(ブロックext_data_entries())に対応する拡張データのデータ長を示す。データ長は、バイト数で示される。
フィールドNumberOfExtDataEntriesで示された個数だけ、拡張データのエントリ(ブロックext_data_entry())が記述されると、それぞれ16ビットのデータ長を有し任意のデータ列からなるフィールドpadding_wordが、2フィールドを組として任意の回数L1だけ繰り返される。その後、拡張データの本体が格納されるブロックDataBlock()が記述される。ブロックDataBlock()は、1以上の拡張データが格納される。それぞれの拡張データext_dataは、上述したフィールドExtDataStartAddressフィールドExtDataLengthに基づき、ブロックDataBlock()から取り出される。
図25は、ブロックblkExtensionData()における各データの参照関係を模式的に示す。フィールドLengthにより、フィールドLength直後の位置からブロックblkExtensionData()の最後までのデータ長が示される。フィールドDataBlockStartAddressにより、ブロックDataBlock()の開始位置が示される。フィールドNumberOfExtDataEntriesで示される個数だけ、ブロックext_data_entryが記述される。最後のブロックext_data_entryからブロックDataBlock()の間には、任意の長さでフィールドpadding_wordが置かれる。
ブロックDataBlock()内には、ブロックext_data_entry()で示される拡張データext_dataが置かれる。それぞれの拡張データext_dataの位置およびデータ長は、対応するブロックext_data_entry()内のフィールドExtDataStartAddressおよびフィールドExtDataLengthにより示される。したがって、ブロックDataBlock()内での拡張データext_dataの並び順は、対応するブロックext_data_entry()の並び順と一致していなくてもよい。
このように、拡張データを、拡張データの本体が格納されるブロックDataBlock()と、ブロックDataBlock()内の拡張データに対するアクセス情報などが格納されるブロックext_data_entry()とによる2層構造とすることで、複数の拡張データを格納することが可能となる。
次に、上述の拡張データの一例の作成方法および読み出し方法について説明する。図26は、ブロックblkExtensionData()にデータを書き込む際の一例の処理を示すフローチャートである。この図26は、ブロックblkExtensionData()中の(n+1)番目のエントリとして、拡張データを追加し、ブロックblkExtensionData()を書き換える場合の例である。
先ず、ステップS10で、書き込もうとしている拡張データのデータ長を取得し、フィールドExtDataLength[n+1]の値にセットする。なお、「[n+1]」の記述は、(n+1)番目のエントリの番号に対応する。次に、ステップS11で、現在のブロックblkExtensionData()に列挙されているブロックext_data_entry()のフィールドExtDataLengthおよびフィールドExtDataStartAddressの値を調べ、ブロックDataBlock()の使用状況を取得する。
そして、次のステップS12で、ブロックDataBlock()中に、書き込もうとしている拡張データのデータ長であるフィールドExtDataLength[n+1]に示されるデータ長以上の、連続した空き領域があるか否かが判断される。若し、あると判断されれば、処理はステップS14に移行される。
一方、フィールドExtDataLength[n+1]に示されるデータ長以上の連続した空き領域が無いと判断されれば、処理はステップS13に移行され、ブロックblkExtensionData()におけるフィールドLengthの値を大きくし、フィールドExtDataLength[n+1]に示されるデータ長以上の連続した空き領域をブロックDataBlock()内に作る。空き領域ができたら、処理がステップS14に移行される。
ステップS14では、拡張データを書き込む領域の先頭アドレスを決め、その先頭アドレスの値をフィールドExtDataStartAddress[n+1]とする。次のステップS15で、フィールドExtDataStartAddress[n+1]から、上述のステップS10でセットされたフィールドExtDataLength[n+1]の長さの拡張データext_data[n+1]を書き込む。
データの書き込みが終了したら、ステップS16で、ブロックext_data_entry()に対して、フィールドExtDataLength[n+1]と、フィールドExtDataStartAddress[n+1]とを追加する。
なお、上述において、書き換えを行うブロックblkExtensionData()は、すでにディスクなどの記録媒体から読み出されて記録装置のメモリに記憶されているものとする。そのため、ステップS13における、フィールドLengthの値の変更によるブロックblkExtensionData()の拡大は、システムに任され、システムがメモリアロケーションを適切に行うことでなされる。
図27は、ブロックblkExtensionData()から拡張データを読み出す際の一例の処理を示すフローチャートである。なお、この図27のフローチャートによる処理は、再生専用の記録媒体と、記録可能な記録媒体との両方に適用可能なものである。先ず、最初のステップS20で、読み込もうとする拡張データが準拠する規格から、フィールドExtDataTypeの値を取得し、ステップS21で、読み込もうとする拡張データの種別から、フィールドExtDataVersionの値を取得する。
次のステップS22で、ブロックblkExtensionData()に列挙されているブロックext_data_entry()を1つずつ順次、読み込む。そして、ステップS23で、読み込んだブロックext_data_entry()に含まれるフィールドExtDataTypeおよびフィールドExtDataVersionの値が、上述のステップS20およびステップS21で取得したフィールドExtDataTypeおよびフィールドExtDataVersionの値と一致するか否かが判断される。
一致していないと判断されれば、処理はステップS26に移行され、ブロックblkExtensionData()内に列挙されるブロックext_data_entry()を全て読み終えたか否かが判断される。全て読み終えたと判断されれば、処理はステップS27に移行され、このブロックblkExtensionData()には、読み込もうとした拡張データが存在しないとして、一連の処理が終了される。全て読み終えていないと判断されれば、処理はステップS22に戻され、次のブロックext_data_entry()が読み込まれる。
上述のステップS23において、ブロックext_data_entry()に含まれるフィールドExtDataTypeおよびフィールドExtDataVersionの値が、取得したフィールドExtDataTypeおよびフィールドExtDataVersionの値と一致していると判断されれば、処理はステップS24に移行される。ここでは、ブロックblkExtensionData()中の[i]番目のエントリで一致したものとする。
ステップS24では、[i]番目のエントリのブロックext_data_entry()からフィールドExtDataLength[i]の値と、フィールドExtDataStartAddress[i]の値とを読み込む。そして、ステップS25で、ステップS24で読み込んだフィールドExtDataStartAddress[i]で示されるアドレスから、フィールドExtDataLength[i]で示されるデータ長だけ、データを読み出す。
次に、上述した、インデックスファイル"index.bdmv"、ムービーオブジェクトファイル"MovieObject.bdmv"、プレイリストファイル"xxxxx.mpls"およびクリップインフォメーションファイル"zzzzz.clpi"にそれぞれ定義可能な、拡張データを格納する拡張データブロックblkExtensionData()について説明する。
先ず、インデックスファイル"index.bdmv"に対して定義される一例の拡張データブロックについて説明する。ここでは、プレイリスト毎に記録可能な記録媒体に特有の属性情報を付加するようにした、一例の拡張データブロックについて説明する。図28は、このプレイリスト属性を記述するための、ファイル"index.bdmv"内のフィールドblkExtensionData()におけるブロックDataBlock()(図24参照)の一例の構造を表すシンタクスを示す。この図28の例では、ブロックDataBlock()がブロックblkIndexExtensionData()として記述されている。
先ず、上述の図24を参照して、ブロックblkExtensionData()においてフィールドExtDataTypeを値"0x1000"、フィールドExtDataVersionを値"0x0100"とする。これらフィールドExtDataTypeおよびフィールドExtDataVersionに記述された値は、例えば再生装置側において、予めROM(Read Only Memory)などに記憶されたテーブルが参照されて識別される。ブロックDataBlock()内のフィールドExtDataStartAddressおよびフィールドExtDataLengthで示される領域に、ブロックblkIndexExtensionData()が格納される。なお、数値の記述において"0x"は、その数値が16進表記されていることを示す。
ブロックblkIndexExtensionData()において、フィールドTypeIndicatorは、次に続くデータの種類を示す、ISO646に規定された符号化方式で符号化した4文字からなる文字列が記述される。この図28の例では、フィールドTypeIndicatorにISO646に既定の方式で符号化された4文字の文字列"IDEX"が記述され、次に続くデータ種類が「IndexExtensionData」であることが示される。
フィールドTypeIndicatorに続けて32ビットのデータ長を有する領域reservedが配され、その次に、32ビットのデータ長を有するフィールドTableOfPlayListStartAddressが配される。フィールドTableOfPlayListStartAddressは、ブロックblkTableOfPlayList()の、このブロックblkIndexExtensionData()先頭を基準とした開始アドレスが示される。
フィールドTableOfPlayListStartAddressの次に、32ビットのデータ長を有するフィールドMakersPrivateDataStartAddressが配されブロックblkMakersPrivateData()のこのブロックblkIndexExtensionData()先頭を基準とした開始アドレスが示され、192ビットのデータ長を有する領域reservedを介してブロックblkUIAppInfoAVCHD()が配される。16ビットのデータ長を有するパディングワードpadding_wordが値N1で示される回数だけ回繰り返され、次に、ブロックblkTableOfPlayLists()が配される。さらに続けて、16ビットのデータ長を有するパディングワードpadding_wordが値N2で示される回数だけ繰り返され、次にブロックblkMakersPrivateData()が配される。このブロックblkMakersPrivateData()の後に、16ビットのデータ長を有するパディングワードpadding_wordが値N3で示される回数だけ繰り返される。
なお、ブロックblkUIAppInfoAVCHD()およびブロックblkMakersPrivateData()は、この発明と関連性が薄いので、説明を省略する。
図29は、上述したブロックblkTableOfPlayLists()の一例の構造を表すシンタクスを示す。フィールドLengthは、32ビットのデータ長を有し、このフィールドLengthの直後からブロックblkTableOfPlayList()の最後のバイトまでのデータ長をバイト数で示す。フィールドLengthに続けて、プレイバックタイトルを再生するためのプレイリストに関する情報が記述されるブロックblkFirstPlaybackTitlePlayLists()と、メニュータイトルに関する情報が記述されるブロックblkMenuTitlePlayLists()とが配される。これらブロックblkFirstPlaybackTitlePlayLists()およびブロックblkMenuTitlePlayLists()は、この発明と関連性が薄いので、説明を省略する。
次に、16ビットのデータ長を有するフィールドNumberOfTitlePlayListPairが配される。フィールドNumberOfTitlePlayListPairは、プレイバックタイトルおよびメニュータイトル以外のタイトルを再生するためのプレイリストの数が記述される。次のforループ文に従い、フィールドNumberOfTitlePlayListPairで示される数だけ、ブロックblkMovieTitlePlayListPair()が記述される。ブロックblkMovieTitlePlayListPair()は、フィールドPlayListFileName、フィールドPlayListAttributeおよびフィールドRefToTitleIDを含む。すなわち、ブロックblkMovieTitlePlayListPair()は、このforループ文で示される[i]番目のプレイリストについて、当該プレイリストのファイル名、当該プレイリストに付与された属性、ならびに、当該プレイリストの参照タイトルIDからなるプレイリストの情報を構造化したものである。
このforループ文による並び順は、記録順とされる。すなわち、1のプレイリストが追加されると、フィールドNumberOfTitlePlayListPairの値が1だけインクリメントされ、既存のプレイリストの情報の後ろに、追加されたプレイリストの情報が追記される。
フィールドPlayListFileNameは、40ビット(5バイト)のデータ長を有し、プレイリストのファイル名がISO646に規定された符号化方式で符号化されて記述される。フィールドPlayListFileNameの次に、6ビットのデータ長を有する領域reservedを介してフィールドPlayListAttributeが配される。フィールドPlayListAttributeは、2ビットのデータ長を有し、当該プレイリストに付与された属性を示す。プレイリストは、その成因に基づき、クリップの生成と共に生成されるプレイリストに対応する第1の種類と、既存のタイトルあるいはプレイリストの一部または全部を用いて作成されるプレイリストに対応する第2の種類と、メニューを再生するために用いる第3の種類との3種類に分けられ、各プレイリストには、プレイリストの種類に応じて、それぞれ対応する属性「Real」(第1の種類)、属性「Virtual」(第2の種類)および属性「Menu」(第3の種類)が付与される。
なお、以下では適宜、属性「Real」が付与されたプレイリストをリアルプレイリスト、属性「Virtual」が付与されたプレイリストをバーチャルプレイリスト、属性「Menu」を付与されたプレイリストをメニュープレイリストと呼ぶ。
フィールドRefToTitleIdは、同一ループ内のフィールドPlayListFileNameに示されるプレイリストが作成時に属するタイトルのID(番号)が記述される。より具体的な例としては、インデックスファイル"index.bdmv"内のブロックblkIndexes()における、対応する値title_idが記述される。なお、当該プレイリストがファーストプレイバックタイトルのみから再生される場合、フィールドRefToTitleIdの値は、第1の固定値、例えば"0xFFFF"とされる。また、当該プレイリストがメニュータイトルのみから再生される場合は、フィールドRefToTitleIdの値は、第2の固定値、例えば"0xFFFE"とされる。
次に、仮想プレーヤについて、概略的に説明する。上述したようなデータ構造を有するディスクがプレーヤに装填されると、プレーヤは、ディスクから読み出されたムービーオブジェクトなどに記述されたコマンドを、プレーヤ内部のハードウェアを制御するための固有のコマンドに変換する必要がある。プレーヤは、このような変換を行うためのソフトウェアを、プレーヤに内蔵されるROM(Read Only Memory)に予め記憶している。このソフトウェアは、ディスクとプレーヤを仲介してプレーヤにAVCHDフォーマットの規定に従った動作をさせることから、仮想プレーヤと称される。
図30は、この仮想プレーヤの動作を概略的に示す。図30Aは、ディスクのローディング時の動作の例を示す。ディスクがプレーヤに装填されディスクに対するイニシャルアクセスがなされると(ステップS30)、1のディスクにおいて共有的に用いられる共有パラメータが記憶されるレジスタが初期化される(ステップS31)。そして、次のステップS32で、ムービーオブジェクトなどに記述されたプログラムがディスクから読み込まれて実行される。なお、イニシャルアクセスは、ディスク装填時のように、ディスクの再生が初めて行われることをいう。
図30Bは、プレーヤが停止状態からユーザにより例えばプレイキーが押下され再生が指示された場合の動作の例を示す。最初の停止状態(ステップS40)に対して、ユーザにより、例えばリモートコントロールコマンダなどを用いて再生が指示される(UO:User Operation)。再生が指示されると、先ず、レジスタすなわち共通パラメータが初期化され(ステップS41)、次のステップS42で、ムービーオブジェクト実行フェイズに移行する。
ムービーオブジェクトの実行フェイズにおけるプレイリストの再生について、図31を用いて説明する。UOなどにより、タイトル番号#1のコンテンツを再生開始する指示があった場合について考える。プレーヤは、コンテンツの再生開始指示に応じて、上述した図2に示されるインデックステーブル(Index Table)を参照し、タイトル#1のコンテンツ再生に対応するオブジェクトの番号を取得する。例えばタイトル#1のコンテンツ再生を実現するオブジェクトの番号が#1であったとすると、プレーヤは、ムービーオブジェクト#1の実行を開始する。
この図31の例では、ムービーオブジェクト#1に記述されたプログラムは2行からなり、1行目のコマンドが"Play PlayList(1)"であるとすると、プレーヤは、プレイリスト#1の再生を開始する。プレイリスト#1は、1以上のプレイアイテムから構成され、プレイアイテムが順次再生される。プレイリスト#1中のプレイアイテムの再生が終了すると、ムービーオブジェクト#1の実行に戻り、2行目のコマンドが実行される。図31の例では、2行目のコマンドが"jump MenuTitle"であって、このコマンドが実行されインデックステーブルに記述されたメニュータイトル(MenuTitle)を実現するムービーオブジェクトの実行が開始される。
次に、この発明の実施の一形態について説明する。この発明では、映像信号の記録開始から記録終了までを1つの記録単位として定義し、この1記録単位の区間に生成されるビデオデータからなるストリームを1つのストリームファイルとして記録媒体に記録する。このストリームファイルには、映像信号の記録に伴い記録される音声信号を含むことができる。この1記録単位に対応するストリームファイルに基づきクリップが構成される。
また、この発明の実施の一形態では、1つのクリップを1つのプレイアイテムから参照し、クリップが生成される毎に、生成されたクリップを参照するプレイアイテムを順次、プレイリストに対して追加する。このとき、プレイリストにおいて、プレイアイテム毎すなわちクリップ毎にプレイリストマークを打つ。そして、例えば1の記録媒体に1のプレイリストのみが存在するようにする。これに限らず、ディスク上に複数のプレイリストを存在させてもよい。
図32は、この発明の実施の一形態に適用可能な記録装置の一例の構成を概略的に示す。この記録装置は、入力されたディジタルビデオデータおよびディジタルオーディオデータを、所定の方式で圧縮符号化および多重化したAVストリームを記録媒体に記録するようにしている。圧縮符号化および多重化の方式としては、例えば上述したAVCHDフォーマットが適用できる。
この図32に例示される記録装置は、外部から入力されるビデオデータおよびオーディオデータを記録媒体に記録する、単独の記録装置として用いることもできるし、光学系や撮像素子などを備えたカメラブロックと組み合わせ、撮像した撮像信号に基づくビデオデータを記録媒体に記録する、ビデオカメラ装置の記録ブロックとして用いることもできる。
適用可能な圧縮符号化や多重化の方式としては、様々に考えられる。例えば、H.264|AVCに規定される方式を、この発明の実施の一形態の圧縮符号化として適用することができる。これに限らず、MPEG2方式に基づき圧縮符号化を行うようにしてもよい。また、多重化方式は、例えばMPEG2システムズを適用することができる。以下では、ビデオデータの圧縮符号化をH.264|AVCに規定される方式に準じて行い、ビデオデータおよびオーディオデータの多重化を、MPEG2システムズに規定される方式に準じて行うものとして説明する。
制御部30は、例えばCPU(Central Processing Unit)、RAM(Random Access Memory)およびROM(Read Only Memory)などからなり(図示しない)、ROMに予め記憶されたプログラムやデータに基づき、RAMをワークメモリとして用いてこの記録装置の記録部10の各部を制御する。なお、制御部10と記録部10の各部とを接続する経路は、繁雑さを避けるために、図32では省略している。
UI(User Interface)部31は、この記録装置の動作をユーザが操作するための操作子が所定に設けられ、操作子に対する操作に応じた制御信号を出力する。この制御信号は、制御部30に供給される。制御部30は、ユーザ操作に応じてUI部31から供給された制御信号に基づきなされるプログラムの処理により、記録部10の各部の動作を制御する。例えば、UI部31に対してなされた操作に応じて、記録装置による記録動作の開始および停止の動作が制御部30により制御される。
ベースバンドのディジタルビデオデータが端子40から入力される。また、当該ディジタルビデオデータに伴い、ベースバンドのディジタルオーディオデータが端子41から入力される。
ディジタルビデオデータは端子40から記録部10に入力され、ビデオエンコーダ11に供給される。ビデオエンコーダ11は、供給されたディジタルビデオデータを、所定の方式で以て圧縮符号化する。MPEG4 AVC|H.264に規定される方式に準じて圧縮符号化がなされるこの例では、例えば、DCT(Discrete Cosine Transform)と画面内予測とによりフレーム内圧縮を行うと共に、動きベクトルを用いたフレーム間圧縮を行い、さらにエントロピー符号化を行い圧縮効率を高める。ビデオエンコーダ11で圧縮符号化されたディジタルビデオデータは、MPEG4のエレメンタリストリーム(ES)として、マルチプレクサ(MUX)13に供給される。
ディジタルオーディオデータは端子41から記録部10に入力され、オーディオエンコーダ12に供給される。オーディオエンコーダ12は、所定の圧縮符号化方式、例えばAAC(Advanced Audio Coding)により圧縮符号化される。オーディオデータの圧縮符号化方式は、AACに限られるものではない。オーディオデータを圧縮符号化せず、ベースバンドのデータのまま用いることも考えられる。圧縮符号化されたディジタルオーディオデータは、マルチプレクサ13に供給される。
マルチプレクサ13は、それぞれ圧縮符号化されて供給されたディジタルビデオデータおよびディジタルオーディオデータを所定の方式で多重化し、1本のデータストリームとして出力する。MPEG2システムズに準じて多重化が行われるこの例では、MPEG2のトランスポートストリームを用いて、供給された圧縮ビデオデータおよび圧縮オーディオデータを時分割で多重化する。例えば、マルチプレクサ13は、バッファメモリを有し、供給された圧縮ビデオデータおよび圧縮オーディオデータをバッファメモリに溜め込む。
バッファメモリに溜め込まれた圧縮ビデオデータは、所定サイズ毎に分割されヘッダが付加されて、PES(Packetized Elementary Stream)パケット化される。圧縮オーディオデータも同様に、所定サイズ毎に分割されヘッダが付加されてPESパケット化される。ヘッダには、パケットに格納されるデータの再生時刻を示すPTSや復号時刻を示すDTS(Decoding Time Stanp)といった、MPEG2システムズに規定される所定の情報が格納される。PESパケットは、さらに分割されてトランスポートパケット(TSパケット)のペイロードに詰め込まれる。TSパケットのヘッダには、ペイロードに詰め込まれたデータを識別するためのPID(Packet Identification)が格納される。マルチプレクサ13から出力されたTSパケットは、ストリームバッファ14に一旦溜め込まれる。
なお、TSパケットは、実際には、マルチプレクサ13においてさらに所定サイズのヘッダが付加されて出力される。この、TSパケットに対して所定のヘッダを付加したパケットを、ソースパケットと呼ぶ。
記録制御部15は、記録媒体20に対するデータの記録を制御する。記録媒体20としては、例えば記録可能なタイプのDVD(Digital Versatile Disc)を用いることができる。これに限らず、記録媒体20としてハードディスクドライブを用いてもよいし、半導体メモリを記録媒体20に適用することも可能である。また、記録媒体20として、より大容量を実現したBlu−ray Disc(ブルーレイディスク:登録商標)を適用することも考えられる。
記録制御部15は、ストリームバッファ14に溜め込まれたデータ量を監視し、ストリームバッファ14に所定量以上のデータが溜め込まれると、ストリームバッファ14から記録媒体20の記録単位分のデータを読み出して記録媒体20に書き込む。
管理情報処理部16は、例えばCPU、ワークメモリとしてのRAMおよびプログラム所定のデータが予め記憶されるROMからなる(図示しない)。これに限らず、管理情報処理部16は、例えば制御部30におけるプログラム処理で管理情報処理部16の機能を実現することも可能である。この場合、例えば制御部30の有するRAMが揮発性メモリ17として用いられると共に、不揮発性メモリ18が制御部30に接続される。
管理情報処理部16は、記録データに基づき、揮発性メモリ17をワークメモリとして用いて、上述したインデックスファイル"index.bdmv"、ムービーオブジェクトファイル"MovieObject.bdmv"、プレイリストファイル"xxxxx.mpls"およびクリップインフォメーションファイル"zzzzz.clpi"に格納するための情報を生成する。生成された情報は、所定のタイミングで記録媒体20に書き込まれる。
一例として、管理情報処理部16は、マルチプレクサ13から記録データの時間情報を取得すると共に、記録制御部15から記録データの記録媒体20に対するアドレス情報を取得し、取得されたこれら時間情報およびアドレス情報に基づきEP_map情報が生成される。また、UI部31に対する記録開始、記録終了の操作に応じて制御部30から出力される制御信号と、マルチプレクサ13および記録制御部15からの記録データに関する情報とに基づき、プレイリストファイル"xxxxx.mpls"の生成または更新、クリップインフォメーションファイル"zzzzz.clpi"の生成などが行われる。さらに、記録媒体20に対して新規に記録が行われる際には、インデックスファイル"index.bdmv"やムービーオブジェクトファイル"MovieObject.bdmv"の生成または更新が行われる。
次に、この発明の実施の一形態によるクリップの記録方法について説明する。図33は、この発明の実施の一形態によるクリップの一例の記録方法を示すフローチャートである。このフローチャートによる処理に先立って、記録媒体20には、クリップと、当該クリップを再生するための再生制御情報が格納されファイル(クリップインフォメーションファイル、プレイリストファイル、ムービーオブジェクトファイルおよびインデックスファイルなど)とが既に記録媒体20上に記録されているものとする。
ステップS50で記録開始操作が行われると、次のステップS51で、クリップAVストリームの記録媒体20への記録が開始される。
記録開始操作は、例えば次のようになされる。例えば、UI部31に、記録開始を指示する記録開始スイッチと、記録停止を指示する記録停止スイッチとが設けられる。ステップS50では、ユーザによって記録開始スイッチが操作される。この操作に応じて、記録開始を指示する制御信号がUI部31から出力され、制御部30に供給される。制御部30は、この記録開始を指示する制御信号に基づき、記録部10の各部に対し、端子40から入力されるベースバンドのビデオデータと、端子41から入力されるベースバンドのオーディオデータとを記録媒体20に記録するように制御する。
記録開始に関わる制御部30の制御の一例として、記録停止状態ではビデオエンコーダ11およびオーディオエンコーダ12の動作を停止させておき、記録開始の指示に応じて、これらビデオエンコーダ11およびオーディオエンコーダ12の動作を開始させることが考えられる。これに限らず、マルチプレクサ13やストリームバッファ14、記録制御部15の動作の開始、停止を制御することで、記録開始および停止の制御を行うこともできる。
記録開始の制御に応じて、クリップAVストリームが記録媒体20に記録される(ステップS51)。すなわち、入力されたビデオデータおよびオーディオデータがビデオエンコーダ11およびオーディオエンコーダ12でそれぞれ圧縮符号化され、マルチプレクサ13でパケット化されTSパケット(実際にはさらに所定のヘッダが付加されたソースパケット)とされてストリームバッファ14に供給される。ストリームバッファ14に所定量以上のTSパケットが溜め込まれたら、記録制御部15によりストリームバッファ14からTSパケットが読み出される。読み出されたTSパケットは、所定にファイル名が付されたクリップAVストリームファイルに格納されて記録媒体20に記録される。
例えば、記録媒体20に既にファイル名"00001.m2ts"であるクリップAVストリームファイルが記録されている場合には、新たに記録されるクリップAVストリームファイルのファイル名として既に記録されているファイルと重複しないファイル名が選ばれ、例えばファイル名"00002.m2ts"とされる。
なお、クリップAVストリームの記録媒体20への記録に伴い、管理情報処理部16により、記録されるデータの再生時間とアドレスとの対応関係を示す情報がリアルタイムに生成される。このデータは、上述したクリップインフォメーションファイル"zzzzz.clpi"内のブロックblkEPMap()に格納されるデータとして、揮発性メモリ17に記憶される。当該データのバックアップとして、不揮発性メモリ18にも同一のデータを記憶することもできる。
次のステップS52で、記録停止操作が行われたか否かが判断される。例えば、ユーザによりUI部31に設けられた記録停止スイッチが操作され、記録が停止されたと判断されれば、処理はステップS53に移行される。一方、記録が停止されていなければ、処理はステップS51に戻され、クリップAVストリームの記録媒体20への記録が継続される。
ステップS53では、記録の停止に伴い、ストリームバッファ14に溜め込まれているストリームが全て記録媒体20に書き込まれる。例えば、記録制御部15は、制御部30からの記録停止の命令に応じて、ストリームバッファ14に溜め込まれているストリーム(TSパケット)を全て読み出し、記録媒体20に書き込む。
また、記録停止の命令に応じて、例えばビデオエンコーダ11およびオーディオエンコーダ12の動作が停止される。このとき、図13Aを用いて説明した第1のシームレス接続を行うために、例えば、オーディオエンコーダ12の動作がビデオエンコーダ11の動作が停止してから所定時間後に停止されるように制御される。
次のステップS54〜ステップS58で、管理情報処理部16により、記録媒体20に書き込まれたクリップAVストリームファイルに関するクリップインフォメーションファイルが生成されると共に、プレイリストファイルの更新が成される。
先ず、ステップS54で、管理情報処理部16により、クリップインフォメーションファイル"zzzzz.clpi"が生成される。ファイル名は、例えばこのクリップインフォメーションファイルが示すクリップAVストリームファイルのファイル名と対応するファイル名とされ、当該クリップAVストリームファイルのファイル名が"00002.m2ts"であれば、このクリップインフォメーションファイルのファイル名は、拡張子より前の部分が同一のファイル名"00002.clpi"とされる。
クリップインフォメーションファイル"00002.clpi"に、図15〜図21に例示した各シンタクスに従い、各フィールドやフラグの値が所定に設定され格納される。一例として、TSパケットに関する情報や、再生時間(PTS)に関する情報は、管理情報処理部16により、クリップの記録中にマルチプレクサ13から取得された情報に基づき生成される。また、記録媒体20上の記録アドレスに関する情報は、管理情報処理部16により、クリップの記録中に記録制御部15から取得された情報に基づき生成される。システムにより固有の値は、例えば予めROM(図示しない)などに記憶されている情報に基づく。さらに、再生時間とアドレスとの対応関係を示す上述したブロックblkEPMap()の情報が、クリップインフォメーションファイル"00002.clpi"のブロックblkCPI()に格納される。
また、ブロックblkClipInfo()内のフラグIsCC5は、ユーザ操作によりクリップの記録が停止された場合、値が1(バイナリ値)とされる。それに伴い、ブロックblkClipInfo()内のif文(図16参照)で示されるデータが所定に設定される。
クリップインフォメーションファイルの作成が完了したら、処理は次のステップS55に移行する。ステップS55〜ステップS58の処理は、プレイリストファイルに関する処理である。このステップS55〜ステップS58の処理により、既に記録媒体20上に存在するプレイリストファイルに対して、新たに記録されたクリップAVストリームファイル"00002.m2ts"に対応するプレイアイテムが追加される。
先ず、ステップS55で、プレイリストファイル内のブロックblkPlayItem()におけるフィールドConnectionConditionの値が5に設定され、このクリップが次のクリップと第1のシームレス接続を行うことが示される(図12参照)。次にステップS56で、プレイアイテムファイルのフィールドNumberOfPlayItemsの値が1だけインクリメントされ、当該プレイリストに対してプレイアイテムが1つ、追加されることが示される(図11参照)。
次のステップS57で、ブロックblkPlayItem()におけるフィールドClipInformationFileName、フィールドINTimeおよびフィールドOUTTimeがそれぞれ設定され、クリップの記録に伴い追加されるブロックblkPlayItem()が作成される。フィールドClipInformationFileNameは、上述のステップS55で作成されたクリップインフォメーションファイルのファイル名"00002.clpi"が格納される。実際には、クリップインフォメーションファイルの拡張子は固定的とされているので、ピリオドの前の部分"00002"が格納される。フィールドINTimeおよびフィールドOUTTimeは、対応するクリップAVストリームファイル"00002.m2ts"に格納されるビデオストリームの先頭および終端の時間を示す情報であって、例えばクリップインフォメーションファイル"00002.clpi"内のブロックblkCPI()におけるブロックblkEPMap()の情報に基づく。
次のステップS58で、プレイリストファイル内のブロックblkPlayListMark()におけるフィールドNumberOfPlayListMarksの値が1だけインクリメントされ、それに伴いforループ文内に追加されたフィールドMarkTimeStampの値が、上述のステップS57でブロックblkPlayItem()におけるフィールドINTimeの値に設定される。すなわち、新たに記録されたクリップの先頭に、プレイリストマークが打たれる。
このようにして、新たに記録されたクリップAVストリームファイル"00002.m2ts"に対して、クリップインフォメーションファイル"00002.clpi"が作成されると共に、既存のプレイリストファイルが更新される。
なお、上述したステップS53によるストリームバッファ14に溜め込まれたデータの記録媒体20への書き込み処理は、ステップS58の処理の後に行うようにしてもよい。
記録が停止された状態から、UI部31に対する記録開始操作を行うことで、再びステップS50からの処理が開始され、新たなクリップAVストリームファイルの記録媒体20への記録と、対応するクリップインフォメーションファイルの作成、作成されたクリップインフォメーションファイルを参照するプレイアイテムの生成、ならびに、生成されたプレイアイテムのプレイリストへの追加処理が同様にして行われる。
なお、一旦記録が停止されてから次の記録が開始される場合、上述したステップS54で作成したクリップインフォメーションファイルの記録媒体20への書き込みが終了するまで、次のクリップAVストリームファイルの記録は、開始しないようにする。
この場合、記録が停止されてから次の記録を開始できない可能性がある。これを避けるために、例えばクリップインフォメーションファイルを生成するためにワークメモリとして用いた揮発性メモリ17に、当該クリップインフォメーションファイルを保持しておき、例えばディスクイジェクト時や記録装置の電源OFF時など所定のタイミングで揮発性メモリ17に保持されているクリップインフォメーションファイルを記録媒体20に書き込むことが考えられる。
なお、ここでは、記録媒体20上に既にクリップAVストリームファイルと、対応するクリップインフォメーションファイルおよびプレイリストファイルが記録されている状態で、次のクリップAVストリームファイルを記録する例について説明したが、図33のフローチャートを用いて説明した処理は、記録媒体20に最初のクリップAVストリームファイルを記録する際にも、適用可能なものである。
ここで、AVCHDフォーマットによれば、クリップAVストリームファイルを参照するプレイアイテムが格納されるプレイリストファイルと、当該プレイリストファイルを呼び出すコマンドがムービーオブジェクトとして記述されたムービーオブジェクトファイルと、ムービーオブジェクトファイル中のムービーオブジェクトをタイトルとして呼び出すインデックスファイルとが必要とされる。記録媒体20に対して最初のクリップAVストリームファイルを記録した際に、これらインデックスファイルおよびムービーオブジェクトファイルを自動的に作成されるようにできる。
図34は、上述の図33の手順に従い作成された一例のファイル構造を示す。一例として、記録媒体20に対して、最初のクリップAVストリームファイル"00001.m2ts"が記録され(ステップS50〜ステップS53)、対応するクリップインフォメーションファイル"00001.clpi"が作成される(ステップS54)。
クリップAVストリームファイル"00001.m2ts"およびクリップインフォメーションファイル"00001.clpi"の記録および作成に応じて、次に、当該クリップインフォメーションファイル"00001.clpi"を参照するプレイアイテム#1の情報が生成されると共に、当該プレイアイテム#1を格納するプレイリストファイルが作成される(ステップS55〜ステップS58)。また、プレイリストファイルに対し、プレイアイテム#1のフィールドINTimeに対応する時刻にプレイリストマークMark#1が打たれる(ステップS58)。
なお、最初のクリップAVストリームファイル"00001.m2ts"の記録に伴い、プレイリスト#1を呼び出すムービーオブジェクト#1が記述されるムービーオブジェクトファイルと、ムービーオブジェクト#1をタイトル#1として選択および再生させるためのインデックスファイルを作成するようにできる。ムービーオブジェクトファイルおよびインデックスファイルは、テンプレートを予め作成しておき、それを更新するようにもできる。これらムービーオブジェクトファイルおよびインデックスファイルの作成については、この発明の主旨と関連性が薄いので、詳細な説明を省略する。
次に記録開始操作がなされると、記録媒体20に対して、クリップAVストリームファイル"00002.m2ts"と、対応するクリップインフォメーションファイル"00002.clpi"とが追加して記録される(ステップS50〜ステップS53、ならびに、ステップS54)。クリップAVストリームファイル"00002.m2ts"およびクリップインフォメーションファイル"00002.clpi"の記録および作成に応じて、次に、当該クリップインフォメーションファイル"00002.clpi"を参照するプレイアイテム#2が生成される。この生成されたプレイアイテム#2は、既に作成されているプレイリストファイルに対して追加される。さらに、プレイリストファイルに対し、プレイアイテム#2のフィールドINTimeに対応する時刻にプレイリストマークMark#2が打たれる(ステップS58)。
このようにして、1組の記録開始操作および記録停止操作により1個のクリップAVストリームファイルが記録媒体20に記録され、それに伴い、当該クリップAVストリームファイルに対応するクリップインフォメーションファイルが作成される。また、当該クリップインフォメーションファイルを参照するプレイアイテムが生成されて既存のプレイリストに対して追加され、当該プレイアイテムのフィールドINTimeで示される時刻にプレイリストマークが打たれる。これら一連の処理が記録開始操作および記録停止操作の組毎に、繰り返される。
また、図34に例示されるファイル構造から分かるように、記録開始操作および記録停止操作の組の繰り返しにより記録される複数のクリップAVストリームファイルのそれぞれを参照する複数のプレイアイテムは、1つのプレイリストファイルに、クリップAVストリームファイルの記録に伴い順次、追加して格納される。このプレイリストは、ムービーオブジェクトファイル内の1つのムービーオブジェクトから呼び出され、このムービーオブジェクトは、インデックスファイルから1つのタイトルとして選択および再生される。したがって、一連の記録開始操作および記録停止操作の組の繰り返しにより記録される複数のクリップAVストリームファイルは、インデックスファイル上で、1つのタイトルとして管理されることになる。
次に、この発明の実施の一形態の他の例について説明する。上述では、この発明が単体の記録装置に適用された例について説明した(図32参照)。これに対し、この実施の一形態の他の例では、この発明を、撮像素子と、被写体からの光を撮像素子に入射させる光学系とを有し、撮像素子で撮像された撮像信号に基づきビデオデータを記録媒体に記録するようにした、ビデオカメラ装置に適用した。
図35は、この発明の実施の一形態の他の例によるビデオカメラ装置100の一例の構成を示す。ビデオカメラ装置100において、記録系の構成は、図31を用いて説明した記録装置の構成を略そのまま適用できるので、図31と共通する部分には同一の符号を付し、詳細な説明を省略する。
図35の構成において、カメラ部50は、映像信号に関する構成として、光学系51、撮像素子52、撮像信号処理部53、カメラ制御部54および表示部55を有し、音声信号に関する構成として、マイクロフォン(MIC)56および音声信号処理部57を有する。制御部30は、カメラ部50の各部との間で各種制御信号や情報のやりとりを行い、カメラ部50の動作を制御する。また、制御部50は、ユーザ操作に応じてUI部31から供給される制御信号に基づき、カメラ部50の動作を制御する。
なお、ビデオカメラ装置100として構成される場合、記録開始操作および記録停止操作は、例えば、UI部31に設けられた単一の記録スイッチを用い、当該記録スイッチが押下される毎に記録開始および記録停止が交互に指示されるようになされるのが一般的である。また、このビデオカメラ装置100では、記録媒体20として、Blu−ray Discや記録可能なタイプのDVDといった、ディスク記録媒体を適用するものとする。
カメラ部50において、光学系51は、被写体からの光を撮像素子52に導くためのレンズ系、絞り調整機構、フォーカス調整機構、ズーム機構、シャッタ機構などを備える。絞り調整機構、フォーカス調整機構、ズーム機構およびシャッタ機構の動作は、制御部30から供給される制御信号に基づき、カメラ制御部54により制御される。
撮像素子52は、例えばCCD(Charge Coupled Device)からなり、光学系51を介して照射された光を光電変換により電気信号に変換し、所定の信号処理を施し撮像信号として出力する。撮像信号処理部53は、撮像素子から出力された撮像信号に対して所定の信号処理を施し、ベースバンドのディジタルビデオデータとして出力する。
例えば撮像信号処理部53は、撮像素子52から出力された撮像信号に対して、CDS(Correlated Double Sampling)回路により画像情報を有する信号だけをンプリングすると共に、ノイズを除去し、AGC(Auto Gain Control)回路によりゲインを調整する。そして、A/D変換によりディジタル信号に変換する。また、撮像信号処理部53は、このディジタル信号に対して検波系の信号処理を施し、R(赤色)、G(緑色)およびB(青色)各色の成分を取り出し、γ補正やホワイトバランス補正などの処理を行い、最終的に1本のベースバンドのディジタルビデオデータとして出力する。
また、撮像信号処理部53は、撮像素子52から出力された撮像信号の情報を制御部30に送る。制御部30は、この情報に基づき光学系51を制御するための制御信号を生成し、カメラ制御部54に供給する。カメラ制御部54は、この制御信号に基づきフォーカス調整機構や絞り調整機構などの制御を行う。
さらに、撮像信号処理部53は、撮像素子52から出力された撮像信号に基づき、例えばLCD(Liquid Crystal Display)を表示素子として用いた表示部55に映出させる映像信号を生成する。
一方、マイクロフォン56は、周囲の音声を収音して電気信号に変換して出力する。マイクロフォン56から出力された音声信号は、音声信号処理部57に供給される。音声信号処理部57は、供給された音声信号を、リミッタを介してからA/D変換を施してディジタルオーディオデータとし、ノイズ除去や音質補正など所定の音声信号処理を施してベースバンドのディジタルオーディオデータとして出力する。
カメラ部50の撮像信号処理部53から出力されたベースバンドのディジタルビデオデータは、記録部10の端子40に供給される。また、音声信号処理部57から出力されたベースバンドのディジタルオーディオデータは、記録部10の端子41に供給される。
記録停止状態からUI部31に設けられた記録スイッチが押下されると、記録開始を指示する制御信号がUI部31から制御部30に供給され、制御部30の制御に基づきカメラ部50から出力されたベースバンドのディジタルビデオ信号およびディジタルオーディオデータの記録媒体20への記録が開始される。
すなわち、既に説明したように、制御部30の制御に基づきビデオエンコーダ11およびオーディオエンコーダ12の動作が開始され、ビデオデータおよびオーディオデータがそれぞれビデオエンコーダ11およびオーディオエンコーダ12で圧縮符号化され、マルチプレクサ13で所定にパケット化され多重化されてAVストリームデータとされる。AVストリームデータは、ストリームバッファ14を介して、記録制御部15に供給され、クリップAVストリームファイルとして記録媒体20に記録される。
UI部31の記録スイッチが押下されると、記録が停止され、クリップインフォメーションファイルの作成や、プレイリストファイルの更新が行われる。管理情報処理部16は、マルチプレクサ13および記録制御部15からの情報に基づき、記録媒体20に記録されるクリップAVストリームファイルに対応するクリップインフォメーションファイルを作成する。また、管理情報処理部16は、当該クリップインフォメーションファイルを参照するプレイアイテムを生成し、既にプレイリストが存在する場合には、生成されたプレイアイテムを当該プレイリストに対して追加すると共に、プレイリストに対してプレイリストマークを打つ。
この状態からもう一度記録スイッチが押下されると、再び記録開始が指示され、新たなクリップAVストリームファイルの記録媒体20への記録が開始されると共に、対応するクリップインフォメーションファイルの作成や、当該クリップインフォメーションファイルを参照するプレイアイテムの生成、生成されたプレイアイテムのプレイリストへの追加などの処理が行われる。クリップAVストリームファイル間の再生は、第1のシームレス接続により接続される。
なお、記録停止に伴い作成されるクリップインフォメーションファイルを、作成直後から記録媒体20に書き込む方式の場合は、直前に作成されたクリップインフォメーションファイルの記録媒体20への書き込みが終了するまで、次の記録が開始されないように制御される。
この実施の一形態の他の例のように、この発明をビデオカメラ装置100に適用する場合、1の記録媒体20に対して、プレイリストファイルは1ファイルのみが存在できるように制限することが考えられる。すなわち、編集処理などがなされない限り、1の記録媒体20上には、当該プレイリストの再生を行うための1のタイトルしか存在しないようにする。こうすることで、記録媒体20としてディスクを用いたビデオカメラ装置100を、恰も従来の磁気テープを記録媒体に用いたビデオカメラ装置であるかのように扱うことができる。
すなわち、この実施の一形態の他の例によれば、それぞれ個別に記録されるクリップAVストリームファイルが1のプレイリストにより管理され、各クリップAVストリームファイル間の再生が第1のシームレス接続で接続されるため、記録媒体20に記録された全てのクリップAVストリームファイルを、磁気テープを再生する場合のように、連続的に再生することができる。また、プレイリストに対し、それぞれ個別に記録されるクリップAVストリームファイルの先頭に対応する位置にプレイリストマークが打たれているため、クリップ単位での検索が容易である。
なお、上述では、図31に示す記録装置や図35に示すビデオカメラ装置100の記録部10がハードウェア的に構成されるように説明したが、これはこの例に限定されない。すなわち、記録部10は、ソフトウェアとして構成することも可能である。この場合、ソフトウェアは、例えば制御部30が有する図示されないROMに予め記憶される。これに限らず、記録部10を、パーソナルコンピュータなどのコンピュータ装置上に構成することも可能である。この場合には、記録部10をコンピュータ装置に実行させるソフトウェアは、CD−ROMやDVD−ROMといった記録媒体に記録されて提供される。コンピュータ装置がネットワーク接続可能な場合、インターネットなどのネットワークを介して当該ソフトウェアを提供することも可能である。