以下、この発明の実施の一形態を、図面を参照しながら説明する。先ず、理解を容易とするために、Blu−ray Discに関し、"Blu-ray Disc Read Only Format Ver1.0 part3 Audio Visual Specifications"で規定されている、読み出し専用タイプのBlu−ray DiscであるBD−ROMに記録されたコンテンツすなわちAV(Audio/Video)データの管理構造について、BD−ROM規格を記録可能な記録媒体に拡張した際に適用可能な部分を概略的に説明する。以下では、このBD−ROMにおける管理構造をBDMVフォーマットと称する。また、BDMVフォーマットを記録可能な記録媒体に対して拡張したフォーマットを、便宜上、拡張BDMVフォーマットと呼ぶ。
例えばMPEG(Moving Pictures Experts Group)ビデオやMPEGオーディオなどの符号化方式で符号化され、MPEG2システムに従い多重化されたビットストリームは、クリップAVストリーム(またはAVストリーム)と称される。クリップAVストリームは、Blu−ray Discに関する規格の一つである"Blu-ray Disc Read Only Format part2"で定義されたファイルシステムにより、ファイルとしてディスクに記録される。このファイルを、クリップAVストリームファイル(またはAVストリームファイル)と称する。
クリップAVストリームファイルは、ファイルシステム上での管理単位であり、ユーザにとって必ずしも分かりやすい管理単位であるとは限らない。ユーザの利便性を考えた場合、複数のクリップAVストリームファイルに分割された映像コンテンツを一つにまとめて再生する仕組みや、クリップAVストリームファイルの一部だけを再生する仕組み、さらには、特殊再生や頭出し再生を滑らかに行うための情報などをデータベースとしてディスクに記録しておく必要がある。Blu−ray Discに関する規格の一つである"Blu-ray Disc Read Only Format part3"で、このデータベースが規定される。
図1は、BD−ROMのデータモデルを概略的に示す。BD−ROMのデータ構造は、図1に示されるように4層のレイヤよりなる。最も最下層のレイヤは、クリップAVストリームが配置されるレイヤである(便宜上、クリップレイヤと呼ぶ)。その上のレイヤは、クリップAVストリームに対する再生箇所を指定するための、ムービープレイリスト(Movie PlayList)と、プレイアイテム(PlayItem)とが配置されるレイヤである(便宜上、プレイリストレイヤと呼ぶ)。さらにその上のレイヤは、ムービープレイリストに対して再生順などを指定するコマンドからなるムービーオブジェクト(Movie Object)などが配置されるレイヤである(便宜上、オブジェクトレイヤと呼ぶ)。最上層のレイヤは、このBD−ROMに格納されるタイトルなどを管理するインデックステーブルが配置される(便宜上、インデックスレイヤと呼ぶ)。
クリップレイヤについて説明する。クリップAVストリームは、ビデオデータやオーディオデータがMPEG2 TS(トランスポートストリーム)の形式などに多重化されたビットストリームである。このクリップAVストリームに関する情報がクリップ情報(Clip Information)としてファイルに記録される。
また、クリップAVストリームには、字幕を表示するグラフィクスストリームであるプレゼンテーショングラフィクス(PG)ストリームや、メニュー表示などに用いられるデータ(ボタン画像データなど)をストリームにしたインタラクティブグラフィクス(IG)ストリームも多重化される。
クリップAVストリームファイルと、対応するクリップ情報が記録されたクリップ情報ファイルとをひとまとまりのオブジェクトと見なし、クリップ(Clip)と称する。すなわち、クリップは、クリップAVストリームとクリップ情報とから構成される、一つのオブジェクトである。
ファイルは、一般的に、バイト列として扱われる。クリップAVストリームファイルのコンテンツは、時間軸上に展開され、クリップ中のエントリーポイントは、主に時間ベースで指定される。所定のクリップへのアクセスポイントのタイムスタンプが与えられた場合、クリップAVストリームファイルの中でデータの読み出しを開始すべきアドレス情報を見つけるために、クリップ情報ファイルを用いることができる。
プレイリストレイヤについて説明する。ムービープレイリストは、再生するAVストリームファイルの指定と、指定されたAVストリームファイルの再生箇所を指定する再生開始点(IN点)と再生終了点(OUT点)の集まりとから構成される。この再生開始点と再生終了点の情報を一組としたものは、プレイアイテム(PlayItem)と称される。ムービープレイリストは、プレイアイテムの集合で構成される。プレイアイテムを再生するということは、そのプレイアイテムに参照されるAVストリームファイルの一部分を再生するということになる。すなわち、プレイアイテム中のIN点およびOUT点情報に基づき、クリップ中の対応する区間が再生される。
オブジェクトレイヤについて説明する。ムービーオブジェクトは、HDMVナビゲーションコマンドプログラムと、ムービーオブジェクトとを連携するターミナルインフォメーションを含む。HDMVナビゲーションプログラムは、プレイリストの再生を制御するためのコマンドである。以下、HDMVナビゲーションコマンドを、適宜、ナビゲーションコマンド(navigation command)と略称する。ターミナルインフォメーションは、ユーザのBD−ROMプレーヤに対するインタラクティブな操作を許可するための情報を含んでいる。このターミナルインフォメーションに基づき、メニュー画面の呼び出しや、タイトルサーチといったユーザオペレーションが制御される。
BD−Jオブジェクトは、Javaプログラム(Javaは登録商標)によるオブジェクトからなる。BD−Jオブジェクトは、この発明と関わりが薄いので、詳細な説明を省略する。
インデックスレイヤについて説明する。インデックスレイヤは、インデックステーブルからなる。インデックステーブルは、BD−ROMディスクのタイトルを定義する、トップレベルのテーブルである。インデックステーブルに格納されているタイトル情報に基づき、BD−ROM常駐システムソフトウェア中のモジュールマネージャによりBD−ROMディスクの再生が制御される。
すなわち、図2に概略的に示されるように、インデックステーブル中の任意のエントリは、タイトルと称され、インデックステーブルにエントリされるファーストプレイバック(First Playback)、トップメニュー(Top Menu)およびタイトル(Title)#1、#2、・・・は、全てタイトルである。各タイトルは、ムービーオブジェクトあるいはBD−Jオブジェクトに対するリンクを示し、各タイトルは、HDMVタイトルあるいはBD−Jタイトルの何れかを示す。
例えば、ファーストプレイバックは、当該BD−ROMに格納されるコンテンツが映画であれば、映画本編に先立って映出される映画会社の宣伝用映像(トレーラ)である。トップメニューは、例えばコンテンツが映画である場合、本編再生、チャプタサーチ、字幕や言語設定、特典映像再生などを選択するためのメニュー画面である。また、タイトルは、トップメニューから選択される各映像である。タイトルがさらにメニュー画面であるような構成も可能である。
図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点で示される区間が参照される。
なお、プレイリストは、図5に一例が示されるように、主として再生されるプレイアイテムに対応するメインパスに対して、サブプレイアイテムに対応するサブパスを持つことができる。例えば、このプレイリストに付けられているアフレコオーディオ用のプレイアイテムをサブプレイアイテムとして、プレイリストに持たせることができる。詳細は省略するが、プレイリストは、所定の条件を満たす場合にだけ、サブプレイアイテムを持つことができる。
次に、"Blu-ray Disc Read Only Format part3"で規定された、BD−ROMに記録されるファイルの管理構造について、図6を用いて説明する。ファイルは、ディレクトリ構造により階層的に管理される。記録媒体上には、先ず、1つのディレクトリ(図6の例ではルート(root)ディレクトリ)が作成される。このディレクトリの下が、1つの記録再生システムで管理される範囲とする。
ルートディレクトリの下に、ディレクトリ"BDMV"、ディレクトリ"CERTIFICATE"およびディレクトリ"HDAVCTN"が置かれる。ディレクトリ"CERTIFICATE"は、著作権に関する情報が格納される。ディレクトリ"HDAVCTN"には、例えばクリップの代表画像を所定サイズに縮小したサムネイルファイルが置かれる。ディレクトリ"BDMV"に、図1を用いて説明したデータ構造が格納される。
ディレクトリ"BDMV"の直下には、ファイルは、ファイル"index.bdmv"およびファイル"MovieObject.bdmv"の2つのみを置くことができる。また、ディレクトリ"BDMV"の下に、ディレクトリ"PLAYLIST"、ディレクトリ"CLIPINF"、ディレクトリ"STREAM"、ディレクトリ"AUXDATA"、ディレクトリ"META"、ディレクトリ"BDJO"、ディレクトリ"JAR"、およびディレクトリ"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ストリームファイルとの対応関係を容易に把握することができる。
ディレクトリ"AUXDATA"は、メニュー表示などに用いられる、サウンドファイル、フォントファイル、フォントインデックスファイルおよびビットマップファイルなどが置かれる。ファイル"sound.bdmv"は、HDMVのインタラクティブなグラフィクスストリームのアプリケーションに関連したサウンドデータが格納される。ファイル名は、"sound.bdmv"に固定的とされる。ファイル"aaaaa.otf"は、字幕表示や上述したBD−Jアプリケーションなどで用いられるフォントデータが格納される。ファイル名において、ピリオドの前の"aaaaa"は、5桁の数字とされ、ピリオドの後ろの"otf"は、このタイプのファイルに固定的とされた拡張子である。ファイル"bdmv.fontindex"は、フォントのインデックスファイルである。
ディレクトリ"META"は、メタデータファイルが格納される。ディレクトリ"BDJO"およびディレクトリ"JAR"は、上述のBD−Jオブジェクトに関連するファイルが格納される。また、ディレクトリ"BACKUP"は、上述までの各ディレクトリおよびファイルのバックアップが格納される。これらディレクトリ"META"、ディレクトリ"BDJO"、ディレクトリ"JAR"およびディレクトリ"BACKUP"は、この発明の主旨と直接的な関わりがないので、詳細な説明を省略する。
なお、ディレクトリ"HDAVCTN"は、2種類のサムネイルファイルthumbnail.tidxおよびthumbnail.tdt2を置くことができる。サムネイルファイルthumbnail.tidxは、サムネイルファイルthumbnail.tdt2に格納されるサムネイル画像を管理する情報が格納される。
図6で示した各ファイルのうち、この発明に関わりの深いものについて、より詳細に説明する。先ず、ディレクトリ"BDMV"の直下に置かれるファイル"index.bdmv"について説明する。図7は、このファイル"index.bdmv"の一例の構造を表すシンタクスを示す。ここでは、シンタクスをコンピュータ装置などのプログラムの記述言語として用いられるC言語の記述法に基づき示す。これは、他のシンタクスを表す図において、同様である。
図7において、フィールドtype_indicatorは、32ビットのデータ長を有し、このファイルがインデックステーブルであることを示す。フィールドversion_numberは、32ビットのデータ長を有し、このファイル"index.bdmv"のバージョンを示す。フィールドindexes_start_addressは、32ビットのデータ長を有し、このシンタクス内にあるブロックIndexes()の開始アドレスを示す。
フィールドExtensionData_start_addressは、32ビットのデータ長を有し、このシンタクス内にあるブロックExtensionData()の開始アドレスを示す。フィールドExtensionData_start_addressは、このファイル"index.bdmv"の最初のバイトからの相対バイト数で、ブロックExtensionData()の開始アドレスを示す。相対バイト数は、"0"から開始される。若し、このフィールドExtensionData_start_addressの値が"0"であれば、このファイル"index.bdmv"内に、ブロックExtensionData()が存在しないことを示す。
フィールドExtensionData_start_addressに続くデータ長が192バイトの領域は、将来の使用のために予約されている領域である。ブロックAppInfoBDMV()は、コンテンツ制作者が任意の情報を記述できるブロックであって、プレーヤの動作などには影響を与えない。
ブロックIndexes()は、このファイル"index.bdmv"の実質的な内容であって、このファイル"index.bdmv"に記述された内容により、ディスクをプレーヤに装填した際に再生されるファーストプレイバックや、トップメニューから呼び出されるタイトル(ムービーオブジェクトやBD−Jオブジェクト)が指定される。なお、以下では、ムービーオブジェクトおよびBD−Jオブジェクトを纏めて、ムービーオブジェクト等と記述する。インデックステーブルにより呼び出されたムービーオブジェクト等に記述されたコマンドに基づき、後述するムービープレイリストファイルが読み込まれる。
図8は、ブロックIndexes()の一例の構造を表すシンタクスを示す。なお、図8において、この発明と直接的に関わりのない部分は、領域Reservedとして記されている。すなわち、図8の表記は、記録可能な記録媒体のための拡張BDMVフォーマットに適用される記述に限定的とされている。フィールドlengthは、32ビットのデータ長を有し、このフィールドlength直後からこのブロックIndexes()の終わりまでのデータ長を示す。続けて、ブロックFirstPlayback()およびブロックTopMenu()が配される。
ブロックFirstPlayback()は、ファーストプレイバックで用いられるオブジェクトに関する情報が記述される。ブロックFirstPlayback()の最初のフィールドには、固定値"01"が記述され、ファーストプレイバックで用いられるオブジェクトがムービーオブジェクトであることが示される。そして、2ビットのデータ長を有するフィールドHDAVC_Title_playback_typeによりHDAVCタイトルの再生タイプが示され、16ビットのデータ長を有するフィールドFirstPlaybak_mobj_id_refにより、ファーストプレイバックで用いられるムービーオブジェクトのIDを示す。
ムービーオブジェクトのIDは、例えば、図9および図10を用いて後述するムービーオブジェクトのシンタクスに基づき、ムービーオブジェクトのforループ文においてループ変数として用いられる値mobj_idで示される。この例では、フィールドFirstPlayback_mobj_id_refは、参照するムービーオブジェクトに対応する値mobj_idが格納される。
なお、ブロックIndexes()におけるブロックFirstPlayback()内のフィールドFirstPlayback_mobj_id_refは、トップメニューのムービーオブジェクトを指していてもよいし、タイトルを指していてもよい。
ブロックTopMenu()は、トップメニューで用いられるオブジェクトに関する情報が記述される。ブロックTopMenu()の最初のフィールドには、固定値"01"が記述され、30ビットのデータ長を有する領域Reservedを介してさらに固定値"01"が記述される。フィールドTopMenu_mobj_id_refは、16ビットのデータ長を有し、トップメニューで用いられるムービーオブジェクトのIDを示す。
ブロックTopMenu()の次のフィールドnumber_of_Titlesは、16ビットのデータ長を有し、ユーザが選択、再生可能なタイトルの数を示す。次のforループ文に従い、このフィールドnumber_of_Titlesに示される回数だけ、値title_idを引数として、ブロックTitle[title_id]()が記述される。ブロックTitle[title_id]()は、タイトル毎の情報が記述される。値title_idは、"0"からフィールドnumber_of_Titlesで示される値までの数値であり、タイトルを識別する。
ブロックTitle[title_id]()において、最初のフィールドには固定値"01"が記述され、46ビットのデータ長を有する領域Reservedを介してフィールドTitle_mobj_id_refが記述される。フィールドTitle_mobj_id_refは、16ビットのデータ長を有し、このタイトルで用いられるムービーオブジェクトのIDを示す。
図9は、ディレクトリ"BDMV"の直下に置かれるファイル"MovieObject.bdmv"の一例の構造を表すシンタクスを示す。フィールドtype_indicatorは、32ビット(4バイト)のデータ長を有し、このファイルがファイル"MovieObject.bdmv"であることを示す。フィールドtype_indicatorは、ISO(International Organization for Standarization)646に規定された符号化方式で符号化した4文字からなる文字列が記述される。この図9の例では、フィールドtype_indicatorにISO646に既定の方式で符号化された4文字の文字列"MOBJ"が記述され、このファイルがファイル"MovieObject.bdmv"であることが示される。
フィールドversion_numberは、32ビット(4バイト)のデータ長を有し、このファイル"MovieObject.bdmv"のバージョン番号を示す。このファイル"MovieObject.bdmv"では、フィールドversion_numberは、ISO646に規定された符号化方式で符号化した4文字の文字列"0100"でなければならない。
フィールドExtensionData_start_addressは、32ビットのデータ長を有し、このシンタクス内にあるブロックExtensionData()の開始アドレスを示す。フィールドExtensionData_start_addressは、このファイル"MovieObject.bdmv"の最初のバイトからの相対バイト数で、ブロックExtensionData()の開始アドレスを示す。相対バイト数は、"0"から開始される。若し、このフィールドExtensionData_start_addressの値が"0"であれば、このファイル"MovieObject.bdmv"内に、ブロックExtensionData()が存在しないことを示す。
なお、この図9に示すシンタクス内のフィールドpadding_wordは、16ビットのデータ長を有し、このファイル"MovieObject.bdmv"のシンタクスに従いforループ文に値N1または値N2で示される回数だけ挿入される。値N1または値N2は、0または任意の正の整数である。また、フィールドpadding_wordは、任意の値を用いることができる。
フィールドExtensionData_start_addressに続くデータ長が224ビットの領域は、将来の使用のために予約されている領域である。この領域の次に、このファイル"MovieObject.bdmv"の本体であるブロックMovieObjects()が格納される。
図10は、ブロックMovieObjects()の一例の構造を表すシンタクスを示す。フィールドlengthは、32ビットのデータ長を有し、このフィールドlengthの直後からこのブロックMovieObject()の終わりまでのデータ長を示す。32ビットのデータ長を有する予約領域を介してフィールドnumber_of_mobjsが配される。フィールドnumber_of_mobjsは、直後のforループ文に従い格納されるムービーオブジェクトの数を示す。forループ文のループ変数として用いられる値mobj_idで、ムービーオブジェクトが一意に特定される。値mobj_idは、0から始まる値で、ムービーオブジェクトは、forループ文中に記述される順序により定義される。
forループ文中のブロックTerminalInfo()は、それぞれ1ビットのデータ長を有するフィールドにより、固定値"1"、固定値"0"および固定値"0"が格納され、データ長が13ビットの予約領域を介してフィールドnumber_of_navigation_commands[mobj_id]が配される。このフィールドnumber_of_navigation_commands[mobj_id]は、値mobj_idによって指し示されるムービーオブジェクトMovieObject[mobj_id]()に含まれるナビゲーションコマンド(navigation_command)の数を表す。
次の、値command_idをループ変数とするforループ文により、フィールドnumber_of_navigation_commands[mobj_id]に示される数だけ、ナビゲーションコマンドが記述される。すなわち、このforループ文中に配されるフィールドnavigation_command[mobj_id][command_id]は、値mobj_idによって指し示されるブロックMovieObject[mobj_id]()に含まれる、値command_idで示される順番のナビゲーションコマンドnavigation_commandを格納する。値command_idは、0から始まる値で、ナビゲーションコマンドnavigation_commandは、このforループ文中に記述される順序で定義される。
次に、BD−ROM規格を記録可能な記録媒体に適用できるように拡張した際に定義される、ブロックExtensionData()について説明する。このブロックExtensionData()は、インデックステーブルが格納されるファイル"index.bdmv"、プレイリストが格納されるファイル"xxxxx.mpls"およびクリップインフォメーションファイル"zzzzz.clpi"の各ファイルに記述することができる。この発明の実施の一形態では、ファイル"index.bdmv"のブロックExtensionData()が用いられる。
図11は、ブロックExtensionData()の一例の構造を表すシンタクスを示す。フィールドlengthは、32ビットのデータ長を有し、このフィールドlengthの直後からブロックExtensionData()の終わりまでのデータ長をバイト数で示す。このフィールドlengthの示すデータ長が"0"でなければ、if文以下の記述がなされる。
フィールドdata_block_start_addressは、32ビットのデータ長を有し、このシンタクス中の、拡張データext_dataの本体が格納されるブロックdata_block()の開始アドレスを、このブロックExtensionData()の先頭バイトからの相対バイト数で示す。すなわち、相対バイト数は、"0"から開始される。なお、フィールドdata_block_start_addressは、次に示す32ビットアライメントの条件を満たさなければならない。
data_block_start_address%4=0
フィールドnumber_of_ext_data_entriesは、8ビットのデータ長を有し、このブロックExtensionData()のブロックdata_block()に格納される拡張データのエントリ数を示す。拡張データのエントリは、拡張データの本体を取得するための情報が格納される。より具体的には、拡張データのエントリは、例えばフィールドID1、フィールドID2、フィールドext_data_start_addressおよびフィールドext_data_lengthからなるブロックext_data_entry()であって、ブロックExtensionData()において、このフィールドnumber_of_ext_data_entriesに示される個数だけ、このブロックext_data_entry()が存在する。
フィールドID1は、16ビットのデータ長を有し、このブロックExtensionData()に記述される拡張データが記録装置用の拡張データであることを表す。このフィールドID1の値は、拡張データを識別する第1の値であり、このブロックExtensionData()を含む規格書のライセンサ(使用認可者)が割り当てると定義することができる。フィールドID2は、拡張データを識別する第2の値であり、この拡張データのバージョン番号を表すものと定義することができる。なお、このブロックExtensionData()において、フィールドID1およびフィールドID2の値が同一のブロックext_data_entry()が2以上、存在してはならない。
フィールドext_data_start_addressは、32ビットのデータ長を有し、このフィールドext_data_start_addressが含まれる拡張データのエントリ(ブロックext_data_entry())に対応する拡張データext_dataの開始アドレスを示す。フィールドext_data_start_addressは、ブロックExtensionData()の先頭バイトからの相対バイト数で、拡張データext_dataの開始アドレスを示す。なお、フィールドext_data_start_addressは、次に示す32ビットアライメントの条件を満たさなければならない。
ext_data_start_address%4=0
フィールドext_data_lengthは、32ビットのデータ長を有し、このフィールドext_data_start_addressが含まれる拡張データのエントリ(ブロックext_data_entries())に対応する拡張データext_dataのデータ長を示す。データ長は、バイト数で示される。
フィールドnumber_of_ext_data_entriesで示された個数だけ、拡張データのエントリ(ブロックext_data_entry())が記述されると、それぞれ16ビットのデータ長を有し任意のデータ列からなるフィールドpadding_wordが、2フィールドを組として任意の回数L1だけ繰り返される。その後、拡張データの本体が格納されるブロックdata_block()が記述される。ブロックdata_block()は、1以上の拡張データext_dataが格納される。それぞれの拡張データext_dataは、上述したフィールドext_data_start_addressフィールドext_data_lengthに基づき、ブロックdata_block()から取り出される。
図12は、ブロックExtensionData()における各データの参照関係を模式的に示す。フィールドlengthにより、フィールドlength直後の位置からブロックExtensionData()の最後までのデータ長が示される。フィールドdata_block_start_addressにより、ブロックdata_block()の開始位置が示される。フィールドnumber_of_ext_data_entriesで示される個数だけ、ブロックext_data_entryが記述される。最後のブロックext_data_entryからブロックdata_block()の間には、任意の長さでフィールドpadding_wordが置かれる。
ブロックdata_block()内には、ブロックext_data_entry()で示される拡張データext_dataが置かれる。それぞれの拡張データext_dataの位置およびデータ長は、対応するブロックext_data_entry()内のフィールドext_data_start_addressおよびフィールドext_data_lengthにより示される。したがって、ブロックdata_block()内での拡張データext_dataの並び順は、対応するブロックext_data_entry()の並び順と一致していなくてもよい。
このように、拡張データを、拡張データの本体が格納されるブロックdata_block()と、ブロックdata_block()内の拡張データに対するアクセス情報などが格納されるブロックext_data_entry()とによる2層構造とすることで、複数の拡張データを格納することが可能となる。
次に、上述の拡張データの一例の作成方法および読み出し方法について説明する。図13は、ブロックExtensionData()にデータを書き込む際の一例の処理を示すフローチャートである。この図13は、ブロックExtensionData()中の(n+1)番目のエントリとして、拡張データを追加し、ブロックExtensionData()を書き換える場合の例である。
先ず、ステップS10で、書き込もうとしている拡張データのデータ長を取得し、フィールドext_data_length[n+1]の値にセットする。なお、「[n+1]」の記述は、(n+1)番目のエントリの番号に対応する。次に、ステップS11で、現在のブロックExtensionData()に列挙されているブロックext_data_entry()のフィールドext_data_lengthおよびフィールドext_data_start_addressの値を調べ、ブロックdata_block()の使用状況を取得する。
そして、次のステップS12で、ブロックdata_block()中に、書き込もうとしている拡張データのデータ長であるフィールドext_data_length[n+1]に示されるデータ長以上の、連続した空き領域があるか否かが判断される。若し、あると判断されれば、処理はステップS14に移行される。
一方、フィールドext_data_length[n+1]に示されるデータ長以上の連続した空き領域が無いと判断されれば、処理はステップS13に移行され、ブロックExtensionData()におけるフィールドlengthの値を大きくし、フィールドext_data_length[n+1]に示されるデータ長以上の連続した空き領域をブロックdata_block()内に作る。空き領域ができたら、処理がステップS14に移行される。
ステップS14では、拡張データを書き込む領域の先頭アドレスを決め、その先頭アドレスの値をフィールドext_data_start_address[n+1]とする。次のステップS15で、フィールドext_data_start_address[n+1]から、上述のステップS10でセットされたフィールドext_data_length[n+1]の長さの拡張データext_data[n+1]を書き込む。
データの書き込みが終了したら、ステップS16で、ブロックext_data_entry()に対して、フィールドext_data_length[n+1]と、フィールドext_data_start_address[n+1]とを追加する。
なお、上述において、書き換えを行うブロックExtensionData()は、すでにディスクなどの記録媒体から読み出されて記録装置のメモリに記憶されているものとする。そのため、ステップS13における、フィールドlengthの値の変更によるブロックExtensionData()の拡大は、システムに任され、システムがメモリアロケーションを適切に行うことでなされる。
図14は、ブロックExtensionData()から拡張データを読み出す際の一例の処理を示すフローチャートである。なお、この図14のフローチャートによる処理は、再生専用の記録媒体(例えばBD−ROM)と、記録可能な記録媒体(例えばBD−RE)との両方に適用可能なものである。
先ず、最初のステップS20で、読み込もうとする拡張データが準拠する規格から、フィールドID1の値を取得し、ステップS21で、読み込もうとする拡張データの種別から、フィールドID2の値を取得する。
次のステップS22で、ブロックExtensionData()に列挙されているブロックext_data_entry()を1つずつ順次、読み込む。そして、ステップS23で、読み込んだブロックext_data_entry()に含まれるフィールドID1およびフィールドID2の値が、上述のステップS20およびステップS21で取得したフィールドID1およびフィールドID2の値と一致するか否かが判断される。
一致していないと判断されれば、処理はステップS26に移行され、ブロックExtensionData()内に列挙されるブロックext_data_entry()を全て読み終えたか否かが判断される。全て読み終えたと判断されれば、処理はステップS27に移行され、このブロックExtensionData()には、読み込もうとした拡張データが存在しないとして、一連の処理が終了される。全て読み終えていないと判断されれば、処理はステップS22に戻され、次のブロックext_data_entry()が読み込まれる。
上述のステップS23において、ブロックext_data_entry()に含まれるフィールドID1およびフィールドID2の値が、取得したフィールドID1およびフィールドID2の値と一致していると判断されれば、処理はステップS24に移行される。ここでは、ブロックExtensionData()中の[i]番目のエントリで一致したものとする。
ステップS24では、[i]番目のエントリのブロックext_data_entry()からフィールドext_data_length[i]の値と、フィールドext_data_start_address[i]の値とを読み込む。そして、ステップS25で、ステップS24で読み込んだフィールドext_data_start_address[i]で示されるアドレスから、フィールドext_data_length[i]で示されるデータ長だけ、データを読み出す。
次に、この発明の実施の一形態について説明する。この発明では、プレイリストに対して、そのプレイリストが最初に属したタイトルを示す情報を付加し、この情報は、タイトルの編集などに関わらず不変とする。このような情報を定義することで、タイトルの編集に関わらずタイトル番号を維持するシステムと、タイトルの編集に際してタイトルの記録順を保持しタイトル番号を編集に応じて変更するシステムとの間で、メニュー構成の互換性を保つことができる。
このプレイリストが最初に属したタイトルを示す情報は、ファイル"index.bdmv"に埋め込まれる拡張データにおいて、プレイリストの属性情報として定義され、ファイル"index.bdmv"のフィールドExtensionData()内のブロックTableOfPlayLists()に記述される。図15は、このプレイリスト属性を記述するための、ファイル"index.bdmv"内のフィールドExtensionData()におけるブロックdata_block()(図11参照)の一例の構造を表すシンタクスを示す。この図15の例では、ブロックdata_block()がブロックIndexExtensionData()として記述されている。
先ず、上述の図11を参照して、ブロックExtensionData()においてフィールドID1を値"0x1000"、フィールドID2を値"0x0100"とする。これらフィールドID1およびフィールドID2に記述された値は、例えば再生装置側において、予めROM(Read Only Memory)などに記憶されたテーブルが参照されて識別される。ブロックdata_block()内のフィールドext_data_start_addressおよびフィールドext_data_lengthで示される領域に、ブロックIndexExtensionData()が格納される。なお、数値の記述において"0x"は、その数値が16進表記されていることを示す。
ブロックIndexExtensionData()において、フィールドtype_indicatorは、次に続くデータの種類を示す、ISO646に規定された符号化方式で符号化した4文字からなる文字列が記述される。この図15の例では、フィールドtype_indicatorにISO646に既定の方式で符号化された4文字の文字列"IDEX"が記述され、次に続くデータ種類が「IndexExtensionData」であることが示される。
フィールドtype_indicatorに続けて32ビットのデータ長を有する予約領域が配され、その次に、32ビットのデータ長を有するフィールドTableOfPlayLists_start_addressが配される。フィールドTableOfPlayLists_start_addressは、ブロックTableOfPlayLists()の、このブロックIndexExtensionData()先頭を基準とした開始アドレスが示される。
フィールドTableOfPlayLists_start_addressの次に、32ビットのデータ長を有するフィールドMakersPrivateData_start_addressが配されブロックMakersPrivateData()のこのブロックIndexExtensionData()先頭を基準とした開始アドレスが示され、192ビットのデータ長を有する予約領域を介してブロックUIAppInfoHDAVC()が配される。16ビットのデータ長を有するパディングワードpadding_wordを介して、次に、上述したブロックTableOfPlayLists()が配される。さらに続けて、16ビットのデータ長を有するパディングワードpadding_wordを介してブロックMakersPrivateData()が配される。
なお、ブロックUIAppInfoHDAVC()およびブロックMakersPrivateData()は、この発明と関わりが薄いので、説明を省略する。
図16は、上述したブロックTableOfPlayLists()の一例の構造を表すシンタクスを示す。フィールドlengthは、32ビットのデータ長を有し、このフィールドlengthの直後からブロックTableOfPlayLists()の最後のバイトまでのデータ長をバイト数で示す。フィールドnumber_of_PlayListsは、16ビットのデータ長を有し、プレイリストの数を示す。すなわち、フィールドnumber_of_PlayListsにより、ディスク上に存在するプレイリストの総数が示される。
次のforループ文に従い、フィールドnumber_of_PlayListsで示される数だけ、フィールドPlayList_file_name、フィールドPlayList_attributeおよびフィールドtitle_id_refがそれぞれ記述される。すなわち、このforループ文で示される1回分のループが1のプレイリストに対応し、当該プレイリストのファイル名、当該プレイリストに付与された属性、ならびに、当該プレイリストの参照タイトルIDからなるプレイリストの情報が記述される。
このforループ文による並び順は、記録順とされる。すなわち、1のプレイリストが追加されると、フィールドnumber_of_PlayListsの値が1だけインクリメントされ、既存のプレイリストの情報の後ろに、追加されたプレイリストの情報が追記される。
なお、このforループ文で定義されるループ内のそれぞれ6ビット、16ビットのデータ長を有するフィールドreserved_for_future_useは、将来の使用のために予約されている領域である。
フィールドPlayList_file_nameは、プレイリストのファイル名がISO646に規定された符号化方式で符号化されて記述される。フィールドPlayList_attributeは、当該プレイリストに付与された属性を示す。プレイリストは、その生成する目的に基づき、クリップの生成と共に生成されるプレイリストに対応する第1の種類と、既存のタイトルあるいはプレイリストの一部または全部を用いて作成されるプレイリストに対応する第2の種類と、メニューを再生するために用いる第3の種類との3種類に分けられ、各プレイリストには、プレイリストの種類に応じて、それぞれ対応する属性「Real」(第1の種類)、属性「Virtual」(第2の種類)および属性「Menu」(第3の種類)が付与される。
なお、プレイリストの種類は、別の観点から見れば、プレイリストの生成された原因あるいはプレイリストの成因に基づき、プレイリストの種類を分類したとも考えることができる。
以下では適宜、属性「Real」が付与されたプレイリストをリアルプレイリスト、属性「Virtual」が付与されたプレイリストをバーチャルプレイリスト、属性「Menu」を付与されたプレイリストをメニュープレイリストと呼ぶ。
フィールドtitle_id_refは、同一ループ内のフィールドPlayList_file_nameに示されるプレイリストが属するタイトルのID(番号)が記述される。より具体的な例としては、インデックスファイル"index.bdmv"内のブロックIndexes()における、対応する値title_idが記述される。なお、当該プレイリストがタイトルとして再生されず、ファーストプレイバックのみから再生される場合、フィールドtitle_id_refの値は、第1の固定値、例えば"0xFFFF"とされる。また、当該プレイリストがタイトルとして再生されず、トップメニューから再生される場合は、フィールドtitle_id_refの値は、第2の固定値、例えば"0xFFFE"とされる。
次に、この発明の実施の一形態によるメニューの一例の編集処理について説明する。この発明の実施の一形態では、BD−ROM規格に対して次のような制約を設けることで、BD−ROM規格を記録可能な記録媒体に拡張した場合のメニュー編集を実現する。
タイトル、ムービーオブジェクトおよびプレイリストの関係に関して、以下の通り制約を設ける。なお、ここでいう「タイトル」は、トップメニューにおいて選択され再生されるタイトルであるものとする。
(A)トップメニュー用のプレイリストと、通常のタイトルを再生するためのプレイリストとは、互いに独立とする。
(B)各タイトルは、ムービータイトルであること。すなわち、各タイトルは、インタラクティブタイトルであってはいけない。
(C)各タイトルは、1つのムービーオブジェクトを介して1つのプレイリストから構成する。
また、タイトルおよびプレイリストの並び順に関して、下記の通り制約を設ける。
(D)ブロックTableOfPlayLists()におけるプレイリストの並び順は、記録順とする。
(E)各タイトルから再生されるプレイリストは、ファイル"index.bdmv"内のブロックIndexes()におけるタイトルの並びと、ファーストプレイバックおよびトップメニューを構成するプレイリストを除いた残りのプレイリストの、ブロックTableOfPlayLists()における並びとを対応させて決める。
上述の制約(A)「トップメニュー用のプレイリストと、通常のタイトルを再生するためのプレイリストとは、互いに独立とする」、制約「(B)各タイトルは、ムービータイトルであること。すなわち、各タイトルは、インタラクティブタイトルであってはいけない」、ならびに、制約(C)「各タイトルは、1つのムービーオブジェクトを介して1つのプレイリストから構成する」は、メニュー編集処理を容易とするための制約である。
すなわち、これら制約(A)、(B)および(C)によれば、メニューを再生するためのプレイリストと、メニューから呼び出されるタイトルを構成するプレイリストとが明確に分離されると共に、プレイリスト、ムービーオブジェクトおよびタイトルの参照関係が互いに1対1の関係となる。例えば、各タイトルは、それぞれ1つのムービーオブジェクトを参照し、各ムービーオブジェクトは、それぞれ1つのプレイリストを呼び出す。一例として、ムービーオブジェクトに記述されるナビゲーションコマンドは、1つのプレイリストファイルを指定し、再生するようなコマンドとされる。
これら制約(A)、(B)および(C)に基づくメニューの編集方法は、例えば以下のようになる。一例として、既に複数のタイトルが記録されたディスクにクリップを追加して記録し、記録されたクリップを再生するためのタイトルをメニューに追加する場合について考える。先ず、新たに記録されたクリップに対応するプレイリストが生成される。生成されたプレイリストに対して属性「Real」が付加され、当該プレイリストがリアルプレイリストとされる。そして、このリアルプレイリストを呼び出すムービーオブジェクトが生成される。このムービーオブジェクトに対するリンクがインデックステーブルに記述され、タイトルが形成される。
次に、既存のメニューの削除が行われる。すなわち、メニューを再生するためのプレイリスト(メニュープレイリスト)およびムービーオブジェクトが削除され、インデックステーブルからトップメニューおよびファーストプレイバックが削除される。メニューを再生するためのプレイリスト型のプレイリストと明確に分離されているため、メニューを再生するためのムービーオブジェクトおよびプレイリストを容易に削除することができる。
さらに、既存のタイトルおよび追加されたタイトルに基づき、メニューを再生するためのプレイリストおよびムービーオブジェクトが新規に作成されると共に、トップメニューおよびファーストプレイバックがインデックステーブルに記述される。プレイリスト、ムービーオブジェクトおよびタイトルの参照関係が互いに1対1の関係となっているので、既存のタイトルと追加されたタイトルとに基づき、これらメニューを再生するためのムービーオブジェクトおよびプレイリストを新規に作成することが容易である。
このように、制約(A)、(B)および(C)に基づき、タイトルの追加に伴うメニューの更新を極めて容易に行うことができる。
上述の制約(D)「ブロックTableOfPlayLists()におけるプレイリストの並び順は、記録順とする」と、制約(E)「各タイトルから再生されるプレイリストは、ファイル"index.bdmv"内のブロックIndexes()におけるタイトルの並びと、ファーストプレイバックおよびトップメニューを構成するプレイリストを除いた残りのプレイリストの、ブロックTableOfPlayLists()における並びとを対応させて決める」は、タイトルの編集に関わらずタイトル番号を保持するシステムと、タイトルの編集に際してタイトルの記録順を保持しタイトル番号を編集に応じて変更するシステムとの互換性を保つための制約である。
一般的に、記録可能な記録媒体にタイトルを記録する場合、タイトル番号は、記録順に付与されると考えられる。そのため、上述の制約(D)により、ブロックTableOfPlayLists()において、ムービーオブジェクトから参照される全てのプレイリストを記録順に並べる制約を設ける。これにより、ブロックTableOfPlayLists()に記述されるプレイリストの並び順を調べることで、タイトルの記録順を復元することができる。
一例として、記録機の仕様によっては、タイトルの編集などに伴いトップメニューやインデックステーブル内のブロックIndexes()を削除する場合が考えられる。この制約(D)によれば、このような場合でも、ブロックTableOfPlayLists()を参照することで、タイトルの記録順を復元することができる。
しかしながら、この制約(D)だけでは、タイトルの記録順は保持されるが、タイトル番号が保持されないことになる。記録機の仕様によっては、タイトルの編集を行っても、タイトルの記録時に割り当てられたタイトル番号を維持し、編集によって不変の番号をユーザに提供したい場合もある。上述の制約(E)は、この記録機間におけるタイトル管理の互換性の問題を解決するものである。制約(E)は、タイトル側ではなく、プレイリスト側にタイトル番号の情報を持たせることで、例えばインデックステーブルにおいてブロックIndexes()が削除されても、タイトルの記録時のタイトル番号の情報が失われることがない。
すなわち、ブロックIndexes()におけるフィールドtitle_idの値と、ブロックTableOfPlayLists()におけるフィールドtitle_id_refの値とを対応させて再生するプレイリストを決める。例えばメニュー画面の構成やプレイリストの再生を、記録時のタイトル番号を用いる記録機の場合には、フィールドtitle_id_refに基づき行い、タイトルの記録順を保持する記録機の場合には、フィールドtitle_idに基づき行う。
図17〜図19を用いて、この発明の実施の一形態によるメニューの編集処理について、より具体的に説明する。図17は、編集前のメニュー画面100と、当該メニュー画面100に関わるタイトル、ムービーオブジェクトおよびプレイリストの構成例を示す。この図17の例では、ディスク上には既に6個のタイトル#1〜#6が記録されているものとする。各タイトルは、図8を用いて既に説明したように、ファイル"index.bdmv"内のブロックIndexes()において、ループ変数として用いられる値title_idで識別されるフィールドTitle[title_id]として登録され、フィールドTitle_mobj_id_ref[title_id]によりムービーオブジェクトを参照する。なお、タイトル番号は、値title_idに1を加えた値として定義されるものとする。ムービーオブジェクトは、ファイル"MovieObject.bdmv"内に値title_idの順に格納され、再生するプレイリストの情報が記述される。
プレイリストは、例えばプレイリストが生成された順に連番でファイル名が"00001.mpls"、"00002.mpls"、"00003.mpls"、"00004.mpls"、"00005.mpls"および"00006.mpls"のように付され、ディレクトリ"PLAYLIST"の下に格納される。
上述した項目(B)の、「各タイトルはムービータイトルであること」の制約に従い、各タイトルは、それぞれ一つのムービーオブジェクトを呼び出す。また、上述の項目(C)の「各タイトルは、1つのムービーオブジェクトを介して1つのプレイリストから構成する」の制約に従い、各ムービーオブジェクトは、それぞれ一つのプレイリストを参照する。すなわち、タイトル、ムービーオブジェクトおよびプレイリストは、互いに1対1の関係とされる。
図17の例では、値title_idが1で、タイトル番号#2のタイトルは、値title_idが対応するムービーオブジェクト#1のみを参照し、ムービーオブジェクト#1は、ファイル名"00002.mpls"のプレイリストのみを参照する。この例では、ファイル名"00002.mpls"のプレイリストは、属性「Virtual」が付与されたバーチャルプレイリストである。また、タイトル番号#3のタイトルは、値title_idが対応するムービーオブジェクト#2のみを参照し、この例では、ムービーオブジェクト#2は、ファイル名"00003.mpls"のプレイリストのみを参照する。このファイル名"00003.mpls"のプレイリストは、属性「Real」が付与されたリアルプレイリストであり、クリップに対して1対1の対応関係がある。
ディスク上に記録されているタイトルの再生を指示するためのメニュー画面は、インデックステーブル内のファーストプレイバックおよびトップメニューに基づき再生される。ファイル"index.bdmv"内のブロックIndexes()におけるブロックFirstPlayback()のフィールドFirstPlayback_mobj_id_refと、フロックTopMenu()のフィールドTopMenu_mobj_id_refとに、メニュー画面を再生するために参照するムービーオブジェクトが記述される。この図17の例では、これらフィールドFirstPlayback_mobj_id_refおよびフィールドTopMenu_mobj_id_refは、共に同一のムービーオブジェクト#6を参照するようにされている。
ムービーオブジェクト#6は、メニュー画面を実際に再生するためのメニュープレイリストを参照する。この図17の例では、ムービーオブジェクト#6は、属性「Menu」を付与された、ファイル名"01001.mpls"のプレイリストを参照している。
メニュー画面を再生するためのプレイリストに属性「Menu」を付与し、ファーストプレイバックおよびトップメニューから参照されるムービーオブジェクトは、属性「Menu」を付与されたメニュープレイリストのみを参照するようにし、また、ファーストプレイバックおよびトップメニューから参照されるムービーオブジェクトは、トップメニューから呼び出される各タイトルの参照および当該各タイトルから参照されるムービーオブジェクトの参照も行わないようにする。このように規定することで、上述した項目(A)の、「トップメニュー用のプレイリストと、通常のタイトルを再生するためのプレイリストとは、互いに独立とする」旨の制約を実現することができる。
さらに、メニュープレイリストから参照されるクリップと、トップメニューから呼び出される各タイトルに対応するプレイリストから参照されるクリップとは、互いに独立とする。
この編集前の状態において、ファイル名"00001.mpls"、"00002.mpls"、"00003.mpls"、"00004.mpls"、"00005.mpls"および"00006.mpls"のプレイリストに対して、ブロックTableOfPlayLists()内のフィールドtitle_id_refの値がそれぞれ0、1、2、3、4および5とされる。また、ファーストプレイバックおよびトップメニューからムービーオブジェクト#6を介して参照されるファイル名"01001.mpls"のプレイリストは、フィールドtitle_id_refの値が"0xFFFE"とされ、このプレイリストがトップメニューから再生されるものであることが示される。
なお、以下では、繁雑さを避けるために、「ブロックTableOfPlayLists()内のフィールドtitle_id_refの値」を適宜、「値title_id_ref」と略称する。
また、図17において、ファーストプレイバックおよびトップメニューからムービーオブジェクト#6を介して参照されるプレイリストにより、メニュー画面100が表示される。この図17の例では、メニュー画面100に対して、6個のタイトルそれぞれの再生を指示するためのボタン101A〜101Fが所定のボタン画像データを用いて表示されると共に、このメニュー画面100の題名102が表示される。
例えば、ボタン101Aを所定の方法で指示することで、値title_idが0、タイトル番号#1のタイトルが指定され、ムービーオブジェクト#0が参照され、このムービーオブジェクト#0に記述されるナビゲーションコマンドにより、ファイル名"00001.mpls"のプレイリストが参照されると共に当該プレイリストの再生が命令され、当該プレイリストに対応するクリップが再生される。
この図17に示される状態からタイトルを削除する場合について考える。また、記録機のシステムは、タイトルの編集に際して、タイトルの記録順を保持しタイトル番号を編集に応じて変更するシステムであるものとする。
図18は、上述の図17の状態から、値title_idが2でタイトル番号が3のタイトル#3を削除した場合のメニュー画面100’と、当該メニュー画面100’に関わるタイトル、ムービーオブジェクトおよびプレイリストの構成例を示す。図17の状態からタイトル番号#3のタイトルが削除されたのに伴い、編集前のタイトル番号#3以降のタイトル番号が1ずつ前に詰められる。それと共に、編集前のタイトル番号#3のタイトルから呼び出されるムービーオブジェクト#3が削除され、ムービーオブジェクトの番号が編集前のタイトル番号#3から呼び出されるムービーオブジェクト#3以降の番号が1ずつ前に詰められる。このとき、番号が変更されたムービーオブジェクトの内容は変化しないので、各ムービーオブジェクトから参照されるプレイリストは、編集の前後で変化しない。削除されたムービーオブジェクトから参照されていたプレイリスト(ファイル名"00003.mpls")は、削除される。
具体的な処理の例について説明する。図7および図8を参照し、タイトル番号#3のタイトルが削除されることは、すなわち、インデックスファイル"index.bdmv"内のブロックIndexes()で、値title_idをループ変数とするforループ文において値title_idが2であるブロックTitle[title_id=2]()が削除されることである。ブロックTitle[title_id]()の数が1、減ったので、フィールドnumber_of_Titlesの値が対応して1だけ減ぜられる。これにより、削除されたタイトル以降のタイトルのタイトル番号が1ずつ詰められることになる。
また、ブロックIndexes()内のブロックTitle[title_id=2]()が削除されることで、当該ブロックTitle[title_id=2]()からフィールドTitle_mobj_id_ref[title_id=2]の値に基づき参照されていたムービーオブジェクトも削除される。図9および図10を参照し、ファイル"MovieObject.bdmv"においても、ブロックMovieObjects()で、値mobj_idをループ変数とするforループ文において、値mobj_idがフィールドTitle_mobj_id_ref[title_id=2]の値に対応するブロックMovieObject[mobj_id]()が削除される。ここでは、タイトルとムービーオブジェクトとの参照関係が1対1とされているので、値mobj_idが2であるブロックMovieObject[mobj_id=2]()が削除される。ブロックMovieObject[mobj_id]()の数が1、減ったので、フィールドnumber_of_mobjsの値が対応して1だけ減ぜられる。これにより、削除されたタイトル番号#3のタイトルから呼び出されるムービーオブジェクトが削除され、削除されたムービーオブジェクト以降のムービーオブジェクトが内容の変化無しに1ずつ前に詰められる。ムービーオブジェクトの内容が変化していないので、当該ムービーオブジェクトとプレイリストとの間の参照関係は、変化しない。
さらに、削除されたムービーオブジェクトに参照されていたプレイリストが削除される。このとき、削除されるプレイリストの属性が「Real」であれば、対応するクリップも削除される。プレイリストの削除に伴い、インデックスファイル"index.bdmv"内の拡張データブロックExtensionData()におけるブロックTableOfPlayLists()で、forループ文内の削除されるプレイリストのファイル名に対応する項目が削除され、フィールドnumber_of_PlayListsの値が1だけ減ぜられる。
タイトルの削除に伴い、メニューが更新される。メニューの更新は、上述したように、編集前のメニューを削除し、タイトルの情報に基づき新規にメニューを作成することで行われる。より具体的には、ブロックTableOfPlayLists()においてフィールドPlayList_attributeから属性が「Menu」とされたプレイリストの情報を検索し、検索されたプレイリストを削除する。上述の図17の例では、ファイル名"01001.mpls"のプレイリストが削除される。また、インデックスファイル"index.bdmv"のブロックIndexes()に基づき、トップメニューおよびファーストプレイバックから呼び出されるムービーオブジェクト(図17の例ではムービーオブジェクト#6)が削除される。そして、インデックステーブルにおいて、トップメニューおよびファーストプレイバックが削除される。
編集前のメニューが削除されると、編集を反映したメニューが作成される。例えば、編集後のトップメニューによるメニュー画面100’を再生するためのクリップ、ムービーオブジェクトおよびプレイリストが生成される。この処理は、例えば次のようにしてなされる。
先ず、メニュー画面100’を表示するためのクリップが生成される。この図18の例では、図17に示される、編集前のメニュー画面100のボタン画像などをそのまま用いて、新規のメニュー画面100’を構成している。メニュー画面100’では、それぞれタイトル番号#1、#2、#3、#4および#5に対応する5個のボタン101A、101B、101C’、101D’および101E’が表示される。生成されたデータは、例えば所定に多重化され、クリップAVストリームファイルとしてディスク上に記録される。
次に、このクリップAVストリームファイルに対応するクリップインフォメーションファイルが生成され、さらに、当該クリップインフォメーションファイルを参照するプレイリストが生成される。プレイリストのファイル名は、例えば既存のプレイリストのファイル名および今まで存在していたプレイリストのファイル名と重複しないように決められる。この例では、当該プレイリストのファイル名を、"01002.mpls"とする。
プレイリストが生成されると、当該プレイリストを参照するためのムービーオブジェクトが生成される。このムービーオブジェクトは、上述したように、ファイル"MovieObject.bdmv"内のブロックMovieObjects()において、forループ文に追記される。したがって、このムービーオブジェクトは、最も大きいタイトル番号のタイトルから参照されるムービーオブジェクト#4の次のムービーオブジェクト#5とされる。
この、トップメニューを再生するためのムービーオブジェクト#5がインデックスファイル"index.bdmv"内のブロックIndexes()におけるブロックTopMenu()に登録される。すなわち、図8を参照し、当該ムービーオブジェクト#5を示すデータがブロックTopMenu()内のフィールドTopMenu_mobj_id_refとして記述される。また、インデックスファイル"index.bdmv"内のブロックIndexes()におけるブロックFirstPlayback()が更新される。すなわち、ブロックFirstPlayback()において、フィールドHDAVC_Title_playback_typeの値が所定の値とされ、トップメニューを再生するためのムービーオブジェクト#5を示すデータがフィールドFirstPlayback_mobj_id_refとして記述される。
そして、インデックスファイル"index.bdmv"における拡張データブロックExtensionData()内のブロックTableOfPlayLists()を更新する。この例では、ブロックTableOfPlayLists()において、フィールドnumber_of_PlayListsの値が1だけ減ぜられ、トップメニューを構成する新規に生成されたプレイリストについて、ファイル名がフィールドPlayList_file_nameとして記述されると共に、当該プレイリストの属性が「Menu」とされ、属性「Menu」を示す値がフィールドPLayList_attributeとして記述される。フィールドtitle_id_refは、プレイリストの属性が「Menu」であって、トップメニューから参照される場合には、値が例えば"0xFFFE"に固定的とされる。そして、フィールドlengthの値が追加された内容に基づき更新される。
なお、上述した、タイトル編集に伴うファイル"index.bdmv"、ファイル"MovieObject.bdmv"などに対する更新処理は、実際には、CPU(Central Processing Unit)のワークメモリ上での処理とされる。例えば、記録機は、ディスクが装填されると、先ず、ディスクからインデックスファイル"index.bdmv"やムービーオブジェクトファイル"MovieObject.bdmv"を読み出し、CPUのワークメモリに記憶する。CPUは、メニューの編集の命令を受けると、このワークメモリ上に記憶されたこれらのファイルに対して上述のようにして処理を行う。更新されたこれらのファイルは、例えばディスクの排出時や、記録機の電源OFF時など所定のタイミングで、ディスクに書き戻される。
次に、上述のようにして、図18の構成で以て記録されたディスクを、タイトルを最初に記録した際に付与されたタイトル番号を保持するようにされた記録機に装填した場合について考える。この場合、記録機側では、上述の処理により削除されたタイトルのタイトル番号を復元する必要がある。このタイトル番号の復元は、この発明の実施の一形態で定義された、ブロックTableOfPlayLists()内のフィールドtitle_id_refの情報を用いることで可能である。
図19は、タイトル番号が復元された状態のメニュー画面110と、当該メニュー画面110に関わるタイトル、ムービーオブジェクトおよびプレイリストの構成例を示す。図19の例では、メニュー画面110に対して、ディスクに現在記録されているタイトルに対応するボタン111A、111B、111D、111Eおよび111Fと、当該ディスクに過去に記録され現在では削除されているタイトルに対応するボタン111Cとが共に表示されている。このうち、ボタン111Cを選択した場合には、対応するタイトル番号のタイトルが既に削除されてディスク上に存在しないことを通知すると、好ましい。
この図19に例示される構成は、概略的には次のようにして作成される。例えば、ブロックTableOfPlayLists()内のフィールドtitle_id_refを参照し、値title_id_refに基づき削除されたタイトル番号を復元し、インデックステーブルに復元されたタイトル番号を挿入する。また、復元されたタイトル番号に対応するムービーオブジェクトとプレイリストとを生成する。プレイリストは、例えば、当該タイトル番号のタイトルが削除された旨を表示するようにされた、ダミーのプレイリストを用いることができる。また、このプレイリストから参照されるクリップは、その都度所定に作成してもよいし、予めシステム側で用意していてもよい。
さらに、タイトル番号の復元前のメニューが削除され、これら復元されたタイトル番号のタイトルが反映されたメニュー画面110が新規に作成される。すなわち、タイトル番号の復元前のメニューを再生するためのプレイリストおよびムービーオブジェクトと、インデックステーブルのファーストプレイバックおよびトップメニューとが削除され、メニュー画面110を再生するためのプレイリストおよびムービーオブジェクトが新規に作成されると共に、作成されたムービーオブジェクトがトップメニューおよびファーストプレイバックに登録される。
図20は、値title_id_refに基づきタイトル番号すなわち値title_idを復元する一例の処理を示すフローチャートである。フローチャートの処理に先立って、タイトルの記録順が保持されタイトル番号が保持されない記録機(記録機Aとする)において、装填されたディスクに既に記録されたタイトルが、編集により削除される。このとき、ディスク上には、図18に例示したような、削除されたタイトル番号に対してそれ以降のタイトル番号が前詰めにされると共に、削除されたタイトルから呼び出されるムービーオブジェクトおよびプレイリストが削除された構成が記録されているものとする。このディスクが、タイトル番号を保持するようにした記録機(記録機Bとする)に装填される。
記録機Bは、ディスクが装填されると、先ずインデックスファイル"index.bdmv"およびムービーオブジェクトファイル"MovieObject.bdmv"を読み込む。このとき、記録機Bは、一例として次のような動作を行う。記録機Bは、例えば、インデックスファイル"index.bdmv"の拡張データブロックExtensionData()において、ブロックTableOfPlayLists()を参照し、プレイリスト毎の値title_id_refを取得する。そして、取得した値title_id_refが連続的な値になっているかどうかを調べる。若し、値title_id_refが不連続であれば、記録機Aにおいてタイトルが削除されたと判断することができる。タイトルが削除されたと判断された場合、以下に説明するステップS50〜ステップS57の処理を行い、記録機Bの実装との互換性をとる。
以下のステップS50〜ステップS57の処理は、例えば記録機Bを制御するCPU(Central Processing Unit)がメモリに読み込まれたこれらファイル"index.bdmv"およびファイル"MovieObject.bdmv"に対して行われる。処理が完了した後のメモリ上のデータは、例えばディスクの排出時や記録機Bの電源OFF時など所定のタイミングでディスクに記録される。
メニューの作成が開始されると、ステップS50で、インデックスファイル"index.bdmv"内のブロックIndexes()を参照して、タイトルを構成するムービーオブジェクト以外のムービーオブジェクトを削除する。例えば、ブロックIndexes()において、ブロックFirstPlaybak()内のフィールドFirstPlaybak_mobj_id_refと、ブロックTopMenu()内のフィールドTopMenu_mobj_id_refとに示されるムービーオブジェクトが削除される。
ステップS51では、インデックスファイル"index.bdmv"内の拡張データブロックExtensionData()におけるブロックTableOfPlayLists()の、フィールドPlayList_attributeが参照され、タイトルを構成するプレイリスト以外のプレイリストを削除する。例えば、フィールドPlayList_attributeが属性「Menu」を示しているプレイリストを削除する。
次のステップS52で、タイトルを構成するプレイリストの値title_id_refを参照して、各プレイリストを再生するタイトルの番号すなわち値title_idが、対応するプレイリストの値title_id_refと一致するように、ブロックIndexes()の内容を書き換える。すなわち、インデックスファイル"index.bdmv"のブロックIndexes()内の、ループ変数title_idのforループ文において、値title_id毎に、参照するムービーオブジェクトから呼び出されるプレイリストを取得する。取得されたプレイリスト情報に基づき、インデックスファイルの拡張データからブロックTableOfPlatLists()を参照し、対応する値title_id_refを求める。この値title_id_refを参照元の値title_idとするように、ブロックIndexes()の対応箇所を書き換える。
また、このステップS52では、記録機Aにおいて削除され欠番となっているタイトルに対する処理がなされる。値title_id_refは、記録時に属していたタイトルのタイトル番号すなわち値title_idが保持されているので、記録機Aにおいて削除されたタイトルに対応する値title_id_refが欠番となる。この欠番の値title_id_refに対応する値title_idに対応するプレイリストが生成される。このプレイリストは、例えばダミーのプレイリストを用いることができる。一例として、このプレイリストを、当該値title_idに基づくタイトル番号のタイトルがディスク上に存在しない旨を表示するためのプレイリストとすることができる。このプレイリストは、ディスク上に既に存在するプレイリストと重複しないファイル名(図19の例ではファイル名"00007.mpls")を付されてディスク上に記録される。
さらに、生成されたプレイリストを再生するためのムービーオブジェクトが生成される。生成されたムービーオブジェクトは、ムービーオブジェクトファイル"MovieObject.bdmv"において、既に存在するムービーオブジェクトの次に追加して生成される(図19の例では、ムービーオブジェクト#5)。そして、追加されたムービーオブジェクトの番号(例えばムービーオブジェクトファイル"MovieObject.bdmv"内のブロックMovieObjects()における値mobj_id)を、インデックスファイル"index.bdmv"のブロックIndexes()において、値title_idが対応するフィールドTitle_mobj_id_refに設定する。
次のステップS53で、インデックスファイル"index.bdmv"における拡張データブロックExtensionData()内のブロックTableOfPlayLists()を更新する。すなわち、このステップS53では、上述のステップS52で生成されたダミーのプレイリストの情報を、ブロックTableOfPlayLists()に対して記述する。
より具体的には、ブロックTableOfPlayLists()において、フィールドnumber_of_PlayListsの値が1だけ増加され、ステップS52で生成されたダミーのプレイリストについて、ファイル名がフィールドPlayList_file_nameとして記述されると共に、当該プレイリストの属性が例えば「Real」とされ、その旨示す値がフィールドPLayList_attributeとして記述される。フィールドtitle_id_refは、既存の値title_id_refの次の値とされる。図19の例では、既存の値title_id-refの最大値が5であるので、このダミーのプレイリストに対応する値title_id_refは、6とされている。そして、フィールドlengthの値が追加された内容に基づき更新される。
次のステップS54で、トップメニューを表示するためのクリップ、ムービーオブジェクトおよびプレイリストが生成される。この処理は、例えば次のようにしてなされる。先ず、メニュー画面を表示するためのクリップが生成される。このクリップは、例えば所定のプログラムに従い自動的に生成された画像データを用いることができる。これに限らず、ディスク上や記録機においてメニュー画面用の画像データを予め用意しておき、これを用いるようにしてもよい。また、メニュー画面に用いる画像データは、動画像データであっても、静止画像データであってもよい。さらに、タイトルの再生を指示するために用いるボタン画像データを、同様にして生成することができる。タイトルに使用されるクリップに対応するサムネイル画像をさらに用いることもできる。このようにして生成されたデータは、例えば所定に多重化され、クリップAVストリームファイルとしてディスク上に記録される。
次に、このクリップAVストリームファイルに対応するクリップインフォメーションファイルが生成され、さらに、当該クリップインフォメーションファイルを参照するプレイリストが生成される。プレイリストのファイル名は、例えば既存のプレイリストのファイル名および今まで存在していたプレイリストのファイル名と重複しないように決められる。図19の例では、当該プレイリストのファイル名を、"01003.mpls"としている。
プレイリストが生成されると、当該プレイリストを参照するためのムービーオブジェクトが生成される。このムービーオブジェクトは、上述のステップS52で追加された、ダミーのプレイリストを参照するムービーオブジェクトの次のムービーオブジェクトとされる(図19の例では、ムービーオブジェクト#6)。
次のステップS55で、上述のステップS54で作成された、トップメニューを再生するためのムービーオブジェクトがインデックスファイル"index.bdmv"内のブロックIndexes()におけるブロックTopMenu()に登録される。すなわち、図8を参照し、当該ムービーオブジェクトを示すデータがブロックTopMenu()内のフィールドTopMenu_mobj_id_refとして記述される。
次のステップS56では、インデックスファイル"index.bdmv"内のブロックIndexes()におけるブロックFirstPlayback()が更新される。すなわち、ブロックFirstPlayback()において、フィールドHDAVC_Title_playback_typeの値が所定の値とされ、上述のステップS54で作成された、トップメニューを再生するためのムービーオブジェクトを示す値mobj_idがフィールドFirstPlayback_mobj_id_refとして記述される。
そして、次のステップS57で、ステップS54によるトップメニューを再生するプレイリストの追加に伴い、インデックスファイル"index.bdmv"における拡張データブロックExtensionData()内のブロックTableOfPlayLists()を更新する。すなわち、このステップS57では、上述のステップS54で生成されたトップメニューを再生するためのプレイリストの情報を、ブロックTableOfPlayLists()に対して記述する。
より具体的には、ブロックTableOfPlayLists()において、フィールドnumber_of_PlayListsの値が1だけ増加され、トップメニューを構成する新規に生成されたプレイリストについて、ファイル名がフィールドPlayList_file_nameとして記述されると共に、当該プレイリストの属性が「Menu」とされ、属性「Menu」を示す値がフィールドPLayList_attributeとして記述される。フィールドtitle_id_refは、プレイリストの属性が「Menu」であって、トップメニューから参照される場合には、値が"0xFFFE"に固定的とされる。そして、フィールドlengthの値が追加された内容に基づき更新される。
上述では、タイトルの記録順が保持されタイトル番号が保持されない記録機Aでタイトルが編集されたディスクを、タイトル番号を保持するようにした記録機Bに装填した場合の処理について説明したが、この逆の状況も当然ながら考えられる。すなわち、タイトル番号を保持する記録機Bでタイトルが編集されたディスクを、タイトル番号が保持されない記録機Aに装填した場合である。
一例として、記録機Bにおいて、元々タイトル#1〜#6の6個のタイトルがディスクに記録されていた状態から、タイトル#3を削除した場合について考える。記録機Bでは、タイトル番号が保持されるため、タイトル#3の削除に伴い、タイトル#3が削除されたことを示すダミーのプレイリストが作成されることが考えられる。ダミーのプレイリストおよびダミーのプレイリストを再生するムービーオブジェクトは、図19を用いて説明したように、タイトル#3の削除に伴い、タイトル#3から参照されるムービーオブジェクトおよびプレイリストを削除し、残ったムービーオブジェクトおよびプレイリストに対して追加して作成することができる。
この図19の構成によれば、タイトルから一つのムービーオブジェクトが呼び出され、当該ムービーオブジェクトから一つのプレイリストが参照される。そのため、このディスクは、記録機Aにおいて、タイトル、ムービーオブジェクトおよびプレイリストに対して何ら変更を加えることなく、再生することができる。
なお、上述では、ディスクに記録された複数のタイトルから1のタイトルを削除した場合の処理について説明したが、これはこの例に限らず、2以上のタイトルを削除した場合にも、この発明の実施の一形態を適用することができる。すなわち、2以上のタイトルが削除された場合でも、値title_id_refに基づき、複数の削除されたタイトル番号をそれぞれ求めることができ、削除されたタイトル番号のタイトルをそれぞれ復元すると共に、削除されたタイトル数分のムービーオブジェクトおよびプレイリストを生成し、復元されたタイトルのそれぞれに対して、生成されたムービーオブジェクトおよびプレイリストをそれぞれ対応付ける。
また、例えば記録機Aにおいて、ディスクに記録された複数のタイトルのうち最後に記録されたタイトルが削除される場合もあり得る。この場合には、値title_id_refは連続的な値とされ、タイトル番号も、欠番が生じることはない。そのため、当該ディスクを記録機Bに装填しても、メニュー表示や新たなタイトルの追加などにおいて特に問題は生じないと考えられる。
次に、この発明の実施の一形態を適用可能な記録再生装置について説明する。先ず、仮想プレーヤについて、概略的に説明する。上述したようなデータ構造を有するディスクがプレーヤに装填されると、プレーヤは、ディスクから読み出されたムービーオブジェクトなどに記述されたコマンドを、プレーヤ内部のハードウェアを制御するための固有のコマンドに変換する必要がある。プレーヤは、このような変換を行うためのソフトウェアを、プレーヤに内蔵されるROM(Read Only Memory)にあらかじめ記憶している。このソフトウェアは、ディスクとプレーヤを仲介してプレーヤにBD−ROMの規格に従った動作をさせることから、BD仮想プレーヤと称される。
図21は、このBD仮想プレーヤの動作を概略的に示す。図21Aは、ディスクのローディング時の動作の例を示す。ディスクがプレーヤに装填されディスクに対するイニシャルアクセスがなされると(ステップS30)、1のディスクにおいて共有的に用いられる共有パラメータが記憶されるレジスタが初期化される(ステップS31)。そして、次のステップS32で、ムービーオブジェクトなどに記述されたプログラムがディスクから読み込まれて実行される。なお、イニシャルアクセスは、ディスク装填時のように、ディスクの再生が初めて行われることをいう。
図21Bは、プレーヤが停止状態からユーザにより例えばプレイキーが押下され再生が指示された場合の動作の例を示す。最初の停止状態(ステップS40)に対して、ユーザにより、例えばリモートコントロールコマンダなどを用いて再生が指示される(UO:User Operation)。再生が指示されると、先ず、レジスタすなわち共通パラメータが初期化され(ステップS41)、次のステップS42で、ムービーオブジェクト実行フェイズに移行する。
ムービーオブジェクトの実行フェイズにおけるプレイリストの再生について、図22を用いて説明する。UOなどにより、タイトル番号#1のコンテンツを再生開始する指示があった場合について考える。プレーヤは、コンテンツの再生開始指示に応じて、上述した図2に示されるインデックステーブル(Index Table)を参照し、タイトル#1のコンテンツ再生に対応するオブジェクトの番号を取得する。例えばタイトル#1のコンテンツ再生を実現するオブジェクトの番号が#1であったとすると、プレーヤは、ムービーオブジェクト#1の実行を開始する。
この図22の例では、ムービーオブジェクト#1に記述されたプログラムは2行からなり、1行目のコマンドが"Play PlayList(1)"であるとすると、プレーヤは、プレイリスト#1の再生を開始する。プレイリスト#1は、1以上のプレイアイテムから構成され、プレイアイテムが順次再生される。プレイリスト#1中のプレイアイテムの再生が終了すると、ムービーオブジェクト#1の実行に戻り、2行目のコマンドが実行される。図22の例では、2行目のコマンドが"jump TopMenu"であって、このコマンドが実行されインデックステーブルに記述されたトップメニュー(Top Menu)を実現するムービーオブジェクトの実行が開始される。
図23は、この発明の実施の一形態に適用可能な記録再生装置の一例の構成を示す。この記録再生装置は、例えばビデオカメラ装置の記録再生部として用いることができる。これに限らず、この記録再生装置は、単体で使用する構成とすることもできる。ここでは、この記録再生装置がビデオカメラ装置の記録再生部として用いられるものとして説明する。なお、この図23に例示される記録再生装置の構成は、上述した、記録順を保持しタイトル番号を保持しない記録機Aと、タイトル番号を保持する記録機Bの何方にも適用可能なものである。
制御部17は、例えばCPU、ROM(Read Only Memory)およびRAM(Random Access Memory)などからなる。ROMは、CPU上で動作されるプログラムや動作のために必要なデータが予め記憶される。RAMは、CPUのワークメモリとして用いられる。CPUは、ROMに記憶されたプログラムやデータを必要に応じて読み出し、RAMをワークメモリに用いながら、この記録再生装置の全体を制御する。上述したBD仮想プレーヤは、例えば予めROMに記憶されたプログラムにより、制御部17により実現される。
この記録再生装置に対して、図示されないビデオカメラ部から出力される、機器特有の情報や記録に関するデータなどが入力出力端子28から入力される。入出力端子28に入力されたこれらのデータは、制御部17に供給される。
各種のスイッチなどの操作子や、簡易的に表示を行う表示素子を有する図示されないユーザインタフェースから出力されたデータがデータ入出力端子28から入力される。また、制御部17で生成された表示制御信号がデータ入力出力端子28を介してユーザインターフェイスに供給される。ユーザインターフェイスは、この表示制御信号をテレビジョン受像器などのモニタ装置に供給し、表示させることもできる。
先ず、記録時の動作について説明する。図示されないビデオカメラ部から、撮像により得られたビデオ信号が入力端30に入力され、このビデオ信号に伴い出力されたオーディオ信号が入力端31に入力される。入力されたビデオ信号およびオーディオ信号は、AVエンコーダ23に供給される。ビデオ信号は、ビデオ解析部24にも供給される。AVエンコーダ23は、入力されたビデオ信号およびオーディオデータを、例えばMPEG2方式で符号化し、符号化ビデオストリームV、符号化オーディオストリームAおよびシステム情報Sをそれぞれ出力する。
AVエンコーダ23は、オーディオ信号を、例えばMPEG1オーディオストリームやドルビーAC3オーディオストリームなどの形式に符号化する。システム情報Sは、符号化ピクチャやオーディオフレームのバイトサイズ、ピクチャの符号化タイプといった、ビデオ信号やオーディオ信号の符号化情報や、ビデオおよびオーディオの同期などに関する時間情報からなる。
AVエンコーダ23のこれらの符号化出力は、マルチプレクサ22に供給される。マルチプレクサ22は、供給された符号化ビデオストリームV、符号化オーディオストリームAを、システム情報Sに基づき多重化し、MPEG2トランスポートストリームによる多重化ストリームを出力する。すなわち、符号化ビデオストリームV、符号化オーディオストリームAおよびシステム情報Sは、それぞれトランスポートパケットのペイロードのサイズに分割され、所定のヘッダを付加されて、トランスポートパケット化される。ヘッダには、それぞれのデータ種類などを識別可能なように、PIDが所定に格納される。
マルチプレクサ22から出力された多重化ストリームは、端子50Aが選択されたスイッチ50を介してソースパケッタイザ21および上述した多重化ストリーム解析部25に供給される。ソースパケッタイザ21は、供給された多重化ストリームを、記録媒体のアプリケーションフォーマットに従って符号化する。
ソースパケッタイザ21で符号化されたクリップAVストリームは、ECC(Error Correction Coding)符号化部20でエラー訂正符号化され、変調部19で記録符号に変調され、書き込み部18に供給される。書き込み部18は、制御部17から供給される制御信号の指示に基づき、変調部19で記録符号に変調されたクリップAVストリームを、記録可能な記録媒体10に対して記録する。
この記録再生装置は、クリップAVストリームが多重化されたトランスポートストリームを直接的に入力して、記録媒体に記録することができるようになっている。例えば、ディジタルインターフェイスまたはディジタルテレビジョンチューナから出力される、ディジタルテレビジョン放送などによるトランスポートストリームが入力端子32に対して入力される。
入力されたトランスポートストリームの記録方法としては、トランスペアレントに記録する方法と、記録ビットレートを下げるなどの目的のために再エンコードして記録する方法とが考えられる。この2通りの記録方法のうち何方を用いて記録を行うかを指示は、例えばユーザのユーザインターフェイスに対する操作によりなされ、この操作に応じた制御信号がデータ入力出力端子28を介して制御部17に供給される。制御部17は、この制御信号に基づきこの記録再生装置の各部を制御し、記録方法の制御を行う。
入力トランスポートストリームをトランスペアレントに記録する場合、スイッチ50において端子50Bが選択されると共に、スイッチ51において端子51Aが選択され、入力端32から入力されたトランスポートストリームは、スイッチ51および50を介してソースパケッタイザ21および多重化ストリーム解析部25にそれぞれ供給される。これ以降の処理は、上述した、入力端30および31に入力されたビデオ信号およびオーディオ信号を符号化して記録する場合と同一である。
一方、入力トランスポートストリームを再エンコードして記録する場合、スイッチ51において端子51Bが選択され、入力端32から入力されたトランスポートストリームは、デマルチプレクサ15に供給される。デマルチプレクサ15は、供給されたトランスポートストリームに多重化されている符号化ビデオストリームV、符号化オーディオストリームAおよびシステム情報Sを分離し、符号化ビデオストリームVをAVデコーダ16に供給すると共に、符号化オーディオストリームAおよびシステム情報Sをマルチプレクサ22に供給する。
AVデコーダ16は、デマルチプレクサ15から供給された符号化ビデオストリームVを復号し、復号されたビデオ信号をAVエンコーダ23に供給する。AVエンコーダ23は、供給されたこのビデオ信号を符号化して符号化ビデオストリームVとする。この符号化ビデオストリームVは、マルチプレクサ22に供給される。
マルチプレクサ22は、AVエンコーダ23で符号化され供給された符号化ビデオストリームVと、デマルチプレクサ15で分離された符号化オーディオストリームAとを、同じくデマルチプレクサ15で分離されたシステム情報Sに基づき多重化して多重化ストリームを出力する。これ以降の処理は、上述した、入力端30および31に入力されたビデオ信号およびオーディオ信号を符号化して記録する場合と同一である。
この記録再生装置は、例えばBD−RE規格に準じた記録媒体10に対して上述のようにしてクリップAVストリームファイルを記録すると共に、記録するクリップAVストリームファイルに関連するアプリケーションデータベース情報をさらに記録する。アプリケーションデータベース情報は、ビデオ解析部24からの動画像の特徴情報と、多重化ストリーム解析部25からのクリップAVストリームの特徴情報と、端子28から入力されるユーザの指示情報とに基づき、制御部17により作成される。
ビデオ解析部24から得られる、動画像の特徴情報は、AVエンコーダ23によりビデオ信号を符号化して記録する場合に、この記録再生装置内において生成される情報である。ビデオ解析部24は、入力端30から入力されたビデオ信号または入力端32から入力されたトランスポートストリームからデマルチプレクサ15で分離されAVデコーダ16で復号されたビデオ信号が供給される。ビデオ解析部24は、供給されたビデオ信号の内容を解析し、入力されたビデオ信号中の特徴的なマーク点の画像に関する情報を生成する。例えば、ビデオ解析部24は、入力ビデオ信号中のプログラムの開始点、シーンチェンジ点や、CM(コマーシャル)放映の開始、終了点などの特徴的なマーク点を検出し、検出されたマーク点の画像の指示情報を得る。また、マーク点の画像のサムネイル画像を生成するようにしてもよい。サムネイル画像は、実際の画像データを間引き処理などにより縮小した画像である。また、サムネイル画像のクリップAVストリーム上の位置は、PTSで示すことができる。
これらの画像の指示情報、サムネイル画像およびサムネイル画像の位置情報(例えばPTS)は、制御部17を介してマルチプレクサ22に供給される。マルチプレクサ22は、制御部17から指示されるマーク点の画像を符号化した符号化ピクチャを多重化する際に、当該符号化ピクチャのクリップAVストリーム上でのアドレス情報を制御部17に返す。制御部17は、特徴的な画像の種類と、対応する符号化ピクチャのクリップAVストリーム上でのアドレス情報とを関連付けて、例えばRAMに記憶する。
多重化ストリーム解析部25から得られる、クリップAVストリームの特徴情報は、記録されるクリップAVストリームの符号化情報に関連する情報であり、この動画像記録再生装置内において生成される。例えば、クリップAVストリームについて、エントリポイントのタイムスタンプと対応するアドレス情報とをクリップAVストリームの特徴情報として含む。この他にも、クリップAVストリームについて、STC(System Time Clock)の不連続情報、プログラム内容の変化情報、アライバルタイムと対応するアドレス情報などが、クリップAVストリームの特徴情報として含まれる。
また、多重化ストリーム解析部25は、入力端32から入力されるトランスポートストリームをトランスペアレントに記録する場合、クリップAVストリーム中の特徴的なマーク点画像を検出し、検出された画像の種類とアドレス情報とを生成する。この情報は、クリップインフォメーションファイル中のブロックClipMarkに格納されるデータとなる。このように、多重化ストリーム解析部25により得られたクリップAVストリームの特徴情報は、クリップAVストリームのデータベースであるクリップインフォメーションファイルに格納されることになる。多重化ストリーム解析部25で得られたこれらの情報は、例えば、制御部17のRAMに一旦記憶される。
図示されないユーザインターフェイスに対してなされたユーザの指示情報は、データ入力出力端子28から制御部17に供給される。この指示情報は、例えば、クリップAVストリーム中でユーザが気に入った再生区間の指定情報、当該再生区間の内容を説明するためのキャラクタ文字、ユーザが気に入ったシーンにセットするブックマーク点やリジューム点のクリップAVストリーム中のタイムスタンプなどが含まれる。これらのユーザの指示情報は、一旦、制御部17のRAMに記憶される。これらの指示情報は、記録媒体10上においては、プレイリストが有するデータベースに格納される。
制御部17は、RAM上に記憶された上述した入力情報、すなわち、ビデオ解析部24から得られる動画像の特徴情報、多重化ストリーム解析部25から得られるクリップAVストリームの特徴情報、ならびに、データ入力出力端子28から入力されたユーザ指示情報に基づき、クリップAVストリームのデータベース(クリップインフォメーション)、プレイリストのデータベース(プレイリストファイル)、記録媒体の記録内容に対する管理情報(インデックスファイル)およびサムネイル情報を作成する。
ここで、制御部17は、インデックスファイルを作成する際に、上述した、データ入出力端子28から入力された、機器特有のデータや記録に関する情報に基づき、インデックスファイル、プレイリストファイルおよび/またはクリップインフォメーションファイルを拡張するための拡張データを作成することができる。すなわち、制御部17は、データ入出力端子28から入力されたデータに基づき、拡張データを、図13のフローチャートを用いて説明したような処理によりファイルに埋め込む。
これらのデータベース情報は、制御部17のRAMから読み出され、クリップAVストリームと同様にして、制御部17からECC符号化部20に供給されエラー訂正符号化され、変調部19で記録符号に変調され、書き込み部18に供給される。書き込み部18は、制御部17から供給される制御信号に基づき、記録符号化されたデータベース情報を記録媒体10に記録する。
次に、再生時の動作について説明する。記録媒体10は、記録時の動作で説明したようにして作成された、クリップAVストリームファイルと、プレイリストファイルおよびインデックスファイルからなるアプリケーションデータベース情報と、ムービーオブジェクトファイルとが記録されている。記録媒体10が図示されないドライブ装置に装填されると、先ず、制御部17は、読み出し部11に対して、記録媒体10上に記録されたアプリケーションデータベース情報とムービーオブジェクトファイルとを読み出すように指示する。読み出し部11は、この指示を受けて、記録媒体10からアプリケーションデータベース情報とムービーオブジェクトファイルとを読み出す。読み出し部11の出力は、復調部12に供給する。
復調部12は、読み出し部11の出力を復調し、記録符号を復号してディジタルデータとする。復調部12の出力は、ECC復号部13に供給され、エラー訂正符号が復号されエラー訂正処理が行われる。エラー訂正処理されたアプリケーションデータベース情報は、制御部17に供給される。
制御部17は、アプリケーションデータベース情報とムービーオブジェクトファイルとに基づいて、記録媒体10に記録されているタイトルの一覧を表示するためのメニュー画面を、ユーザインターフェイス入力出力端子28を介してユーザインターフェイスに出力する。このメニュー画面は、例えばユーザインターフェイスに設けられた表示部に所定に表示される。ユーザにより、このメニュー画面に基づき再生したいタイトルが選択され、選択したタイトルを再生するような操作がユーザインターフェイスに対してなされる。この操作に応じた制御信号がユーザインターフェイスから出力され、端子28を介して制御部17に供給される。
制御部17は、この制御信号に応じて、インデックスファイルやムービーオブジェクトファイルの内容に基づき、選択されたタイトルの再生に必要なクリップAVストリームファイルの読み出しを読み出し部11に指示する。読み出し部11は、この指示に従い、記録媒体10からクリップAVストリームファイルを読み出す。読み出し部11の出力は、復調部12に供給される。復調部12は、供給された信号を復調し、記録符号を復号してディジタルデータとして出力し、ECC復号部13に供給する。ECC復号部13は、供給されたディジタルデータのエラー訂正符号を復号し、エラー訂正を行う。エラー訂正されたクリップAVストリームファイルは、制御部17により提供される図示されないファイルシステム部の処理を受け、ソースデパケッタイザ14に供給される。
ソースデパケッタイザ14は、制御部17の制御に基づき、記録媒体10におけるアプリケーションフォーマットで記録されていたクリップAVストリームファイルを、デマルチプレクサ15に入力できる形式のストリームに変換する。例えば、ソースデパケッタイザ14は、記録媒体10から再生されたMPEG2トランスポートストリームをソースパケット単位に分解し、ソースパケットからヘッダを取り除きトランスポートパケット化する。このトランスポートパケット化されたクリップAVストリームを、デマルチプレクサ15に供給する。
デマルチプレクサ15は、制御部17の制御に基づき、ソースデパケッタイザ14から供給されたクリップAVストリームの、制御部17により指定された再生区間(PlayItem)を構成するビデオストリームV、オーディオストリームAおよびシステム情報Sを出力し、AVデコーダ16に供給する。例えば、デマルチプレクサ15は、供給されたトランスポートパケットをPIDに基づき選別し、選別されたそれぞれについて、トランスポートパケットヘッダを取り除いて出力する。AVデコーダ16は、供給されたビデオストリームVおよびオーディオストリームAを復号し、復号された再生ビデオ信号および再生オーディオ信号をビデオ出力端26およびオーディオ出力端27にそれぞれ導出する。
この記録再生装置で、他の記録再生装置で記録などがなされたディスクを装填した場合の処理について、概略的に説明する。この記録再生装置が上述した記録機Bのタイプの、タイトルなどの編集に際してタイトル番号を保持するようにした装置である場合について説明する。記録機Bのタイプの記録再生装置は、装填されたディスクに対してタイトル番号を保持しない編集が行われたか否かを知る必要がある。
一例として、記録再生装置は、ディスクが装填されると先ず、例えばインデックスファイル"index.bdmv"およびムービーオブジェクトファイル"MovieObject.bdmv"を読み込み、ブロックIndexes()を参照して、各タイトルが呼び出すムービーオブジェクトの情報を取得し、取得された情報に基づきムービーオブジェクトファイル"MovieObject.bdmv"を参照し、各ムービーオブジェクトが参照するプレイリストの情報を取得する。
一例として上述の図19のような状態を考えると、各タイトルのタイトル番号に対応する値title_idと、各タイトルから呼び出されるムービーオブジェクトの順番(ムービーオブジェクトファイル"MovieObject.bdmv"内のブロックMovieObjects()におけるループ変数mobj_idのforループ文の値mobj_id)とが異なっている場合に、記録機Aのタイプの記録再生装置でタイトルの削除などの編集が行われたと判断することができる。
これに限らず、所定の場所、例えばインデックスファイル"index.bdmv"の拡張データブロックExtensionData()に、最新に記録が行われた記録機の情報や編集内容に関する情報を記述することも考えられる。この場合には、最新に記録が行われた記録機が記録機Aのタイプであるか否かが判断され、記録機Aのタイプであると判断されれば、上述もしたように、値title_id_refが連続的な値となっているか否かの判断に基づき、タイトル番号を保持せずにタイトルを削除する編集が行われたか否かを判断することができる。
若し、装填したディスクが記録機Aのタイプの記録再生装置でタイトル削除などの編集が行われたと判断されれば、図19および図20を用いて説明したような処理により、値title_id_refに基づくタイトルの復元およびメニューの更新の処理が行われる。
上述では、図23に示す記録再生装置がビデオカメラなどから出力されたビデオデータおよびオーディオデータを記録媒体10に記録するようにした装置であるように説明したが、これはこの例に限られない。例えば、入力されたビデオデータに対して編集処理を行い、編集されたビデオデータを出力するようにした編集装置にこの発明の実施の一形態を適用することもできる。さらに、上述の図27の構成を、再生部側の構成を省略した記録装置とすることもできる。さらにまた、記録媒体10は、BD−RE規格に準じたディスク状記録媒体であるように説明したが、これはこの例に限定されず、この発明の実施の一形態は、半導体メモリ、ハードディスクといった他の記録媒体にも適用可能である。
なお、上述では、図23に示す記録再生装置がハードウェア的に構成されるように説明したが、これはこの例に限定されない。すなわち、記録再生装置は、実際に記録媒体10が装填されるドライブ部などの機構部分以外の部分を、ソフトウェアとして構成することも可能である。この場合、ソフトウェアは、例えば制御部17が有するROMに予め記憶される。これに限らず、動画像記録再生装置を、パーソナルコンピュータなどのコンピュータ装置上に構成することも可能である。この場合には、動画像記録再生装置をコンピュータ装置に実行させるソフトウェアは、CD−ROMやDVD−ROMといった記録媒体に記録されて提供される。コンピュータ装置がネットワーク接続可能な場合、インターネットなどのネットワークを介して当該ソフトウェアを提供することも可能である。