以下、この発明の実施の一形態を、図面を参照しながら説明する。先ず、理解を容易とするために、この発明に適用可能な一例のフォーマット(以下、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と略称する)に規定される符号化方式で符号化され、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点で示される区間が参照される。図4の例では、クリップ301は、さらに別のプレイリストからも参照されている。
次に、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"の実質的な内容であって、このファイル"index.bdmv"に記述された内容により、ディスクをプレーヤに装填した際に再生されるファーストプレイバックや、トップメニューから呼び出されるタイトル(ムービーオブジェクト)が指定される。インデックステーブルにより呼び出されたムービーオブジェクト等に記述されたコマンドに基づき、後述するプレイリストファイルが読み込まれる。
図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()は、所定の拡張データを格納可能とするためのブロックである。
図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は、40ビット(5バイト)のデータ長を有し、このブロックblkPlayItem()が参照するクリップインフォメーションファイルのファイル名が示される。このプレイアイテムにおいて、フィールドClipInformationFileNameで示されるファイル名のクリップインフォメーションファイルが読み出される。フィールドClipCodecIdentifierは、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は、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とされる。
なお、数値の記述において"0x"は、その数値が16進表記されていることを示す。これは、以下の同様な表記について共通である。
ブロックblkSTNTable()は、このブロックblkPlayItem()によるプレイアイテムが管理しているクリップAVストリームの属性、PID番号、記録媒体上での記録位置などが管理される。
図14は、ブロックblkPlayListMark()の一例の構造を表すシンタクスを示す。フィールドLengthは、32ビットのデータ長を有し、このフィールドLengthの直後からブロックblkPlayListMark()の最後までのデータ長を示す。
フィールドNumberOfPlayListMarksは、16ビットのデータ長を有し、このブロックblkPlayListMark()に含まれるプレイリストマークの数を示す。次のforループ文に従い、フィールドNumberOfPlayListMarksで示される数だけプレイリストマークの情報が記述される。
forループ文内において、8ビットのデータ長を有する領域reserveに続けてフィールドMarkTypeが配される。フィールドMarkTypeは、8ビットのデータ長を有し、マークのタイプを示す。プレイリストマークには、エントリマーク(Entry Mark)およびリンクポイント(Link Point)の2タイプが定義されており、このフィールドMarkTypeにより、何れのタイプであるかが示される。チャプタを定義するためには、エントリマークを用いる。リンクポイントは、この発明と関連性が薄いので、説明を省略する。上述したフィールドNumberOfPlayListMarksは、エントリマークおよびリンクポイントを合計した値を示す。
フィールド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()およびブロックblkSequenceInfo()は、この発明との関連性が薄いので、詳細な説明を省略する。
図16は、クリップインフォメーションファイルにおけるブロックblkCPI()の一例の構造を表すシンタクスを示す。MPEGストリームのような、フレーム間圧縮を行っている符号化ストリームにおいては、デコード開始可能な箇所は、GOP(Group Of Picture)の先頭など一部の箇所に限定されていることが多い。CPI(Characteristic Point Information)とは、そのデコード可能な開始点の位置の情報を集めたデータベースで、再生時刻と、ファイル内アドレスとが対応付けられたテーブルになっている。すなわち、CPIは、デコード単位の先頭位置を示す情報がテーブル化されている。
このようにデータベースを定めることで、例えば、任意の時刻から再生したい場合、再生時刻を元にCPIを参照することによって再生位置のファイル内アドレスがわかる。このアドレスは、デコード単位の先頭となっているため、プレーヤは、そこからデータを読み出してデコードし、素早く画像を表示することができる。
なお、このCPIに格納される、デコード単位の先頭位置(この例ではGOPの先頭位置)を、EP(Entry Point)エントリと称する。
図16において、フィールドLengthは、32ビットのデータ長を有し、このフィールドLengthの直後からブロックblkCPI()の最後までのデータ長を示す。次のif文に従い、フィールドLengthの値が0でなければ、12ビットのデータ長を有する領域reservedを介してフィールドCPITypeが配される。フィールドCPITypeは、4ビットのデータ長を有し、CPIの種類を示す。次のブロックblkEPMap()は、対応するクリップAVストリームファイルにおけるPTS値とバイトアドレスとの関連付けを行うテーブルが格納される。
図17は、ブロック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と呼ぶ。
図18は、ブロック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から導かれる。
図19は、エントリPTSEPCoarseおよびエントリPTSEPFineの一例のフォーマットについて示す。PTSすなわちエントリPTSEPStartは、データ長が33ビットの値である。MSBのビットを第32ビット、LSBのビットを第0ビットとするとき、この図19の例では、大まかな単位で検索を行う際に用いられるエントリ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ビットは、用いられない。
図20は、エントリSPNEPCoarseおよびエントリSPNEPFineの一例のフォーマットについて示す。ソースパケット番号すなわちエントリSPNEPStartは、データ長が32ビットの値である。MSBのビットを第31ビット、LSBのビットを第0ビットとするとき、この図20の例では、大まかな単位で検索を行う際に用いられるエントリ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は、図19で示したように、データ長が33ビットの符号無し整数であり、AVストリーム中で、ランダムアクセスが可能なピクチャ(例えばIDR(Instantaneous Decoding Refresh)ピクチャやI(Intra)ピクチャ)から開始するビデオアクセスユニットの33ビット長のPTSを示す。
エントリSPNEPStartは、図20で示したように、32ビットの符号無し整数であり、エントリPTSEPStartに関連付けられたビデオアクセスユニットの第1バイト目を含むソースパケットの、AVストリームの中でのアドレスを示す。エントリSPNEPStartは、ソースパケット番号の単位で表され、AVストリームファイル中の最初のソースパケットから、値"0"を初期値として、ソースパケット毎に1ずつ増加する値としてカウントされる。
図18を参照し、ブロック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]およびエントリSPNEPCoarse[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ビットを超える桁からビットを用いることを意味する。
次に、この発明の実施の一形態について説明する。この発明では、プレイリストに対してプレイリストマークを設けてクリップの分割編集を行う際に、プレイリストマークを設ける位置に対応するGOPがクローズドGOPであれば、アドレス情報すなわちGOP境界にプレイリストマークを設け、当該GOPがオープンGOPであれば、再生時刻情報すなわち上述したエントリPTSEPStart(図20参照)で示される位置にプレイリストマークを設ける。
例えば、記録開始位置は、それ以前のGOPの情報を用いることができないので、通常はクローズドGOP構造となる。そのため、記録開始位置では、プレイリストマークをGOP境界に設ける。記録開始位置以外では、プレイリストマークをエントリPTSEPStartで示される位置に設ける。また、記録開始位置以外でも、プレイリストマークを設けようとする位置に対応するGOPがクローズドGOPおよびオープンGOPのうち何れであるかが判別できれば、判別結果に応じて、GOP境界またはエントリPTSEPStartのうち適合する方にプレイリストマークを設ける。
このように制御することで、チャプタジャンプ時に、ジャンプ先でのデコード範囲を最小限とすることが可能となると共に、チャプタ境界と本来の記録開始位置とが一致するようにできる。
なお、この発明の実施の一形態では、チャプタ分割位置を指定するためのプレイリストマークは、全てタイプがエントリマークであるものとする。
以下、この発明の実施の一形態によるチャプタ分割について、より詳細に説明する。なお、以下では、プレイリストマークの種類がエントリマークに固定的であるものとして説明する。
先ず、チャプタは、ユーザから見える最小の再生区間単位であって、隣接するプレイリストマークの間の区間を指す。ここで、プレイリストマークは、プレイリストで示される最後尾の位置には設けなくてもよいとされる。また、プレイリストで示される先頭の位置は、必ずプレイリストマークが設けられる。
さらに、この実施の一形態では、分割編集の時間的な粒度は、GOP単位とする。また、記録開始位置が含まれるGOP以外のGOPは、オープンGOPであるものとする。これは、より高画質を実現するためである。
先ず、プレイリストに対してプレイリストマークを挿入する処理について説明する。図21は、上述したこの発明に適用可能なフォーマットにおける、プレイリスト以下の一例のファイル構造を示す。この図21の例では、プレイリスト#10は、それぞれ値PlayItem_id(図11参照)で参照される3つのプレイアイテム#0、#1および#2を含み、プレイアイテム#0および#1がクリップ#20の区間をそれぞれ参照し、プレイアイテム#2がクリップ#31の区間を参照している。また、プレイリスト#11は、2つのプレイアイテム#0および#1を含み、これらプレイアイテム#0および#1がクリップ#31の区間をそれぞれ参照している。
上述したように、プレイアイテムは、時刻情報を用いて、クリップを構成するクリップインフォメーションに含まれるブロックblkEPMap()に記述されるエントリポイントを参照し、対応するクリップAVストリームファイル内のアドレスを指定する。これにより、プレイリストからクリップAVストリームファイルの部分を指定して所定の順序で再生させることができる。
さらに、図21の例では、プレイリスト#10において、4個のプレイリストマークPLM#0、PLM#1、PLM#2およびPLM#3が設けられている。プレイリストにおいて、クリップ内のジャンプ可能なアクセス位置を示すマークを設定することができる。このマークを、プレイリストマーク(PlayListMark:PLMと適宜略称する)と呼ぶ。これらプレイリストマークは、プレイリストファイル中のブロックblkPlayListMark()において値PL_mark_idにより参照され、フィールドMarkTimeStampにより時刻情報で示される(図14参照)。
次に、図22を用いて、プレイリストを用いたクリップの分割編集について、概略的に説明する。図22Aは、プレイリストによってクリップが参照される様子を示す。記録媒体上に記録されたクリップ#1およびクリップ#2は、それぞれ、プレイリスト#1内のプレイアイテム#1およびプレイアイテム#2から再生開始点(IN点)および再生終了点(OUT点)を指定されて参照される。この図22の例では、プレイアイテム#1は、クリップ#1の先頭(位置a)をIN点とし、後端(位置b)をOUT点としてクリップ#1を参照している。プレイアイテム#2についても同様に、クリップ#2の先頭(位置c)および後端(位置d)をそれぞれIN点およびOUT点として参照している。プレイリスト#1は、プレイアイテム#1およびプレイアイテム#2の再生順を指定する。
したがって、この図22Aの例では、プレイリスト#1により、クリップ#1が位置aから位置bまで再生され、クリップ#1の位置bに続けてクリップ#2が位置cから再生され、位置dで再生が終了する。すなわち、この図22Aの例では、プレイリスト#1の指示により、クリップ#1の先頭からクリップ#2の最後までが連続的に再生される。
また、図22Aの例では、クリップ#1の先頭の位置aとクリップ#2の先頭の位置cとに、プレイリストマークPLM#1およびPLM#2がそれぞれ設定されている。この場合、例えばプレイリスト#1に従いクリップ#1の位置aから位置bの間の任意の位置で再生しているときにジャンプが指定されると、現在の再生位置に対して再生方向に向けて直近に設定されたプレイリストマークの位置(位置aから位置bに向けて再生している場合、プレイリストマークPLM#2の位置)に、再生位置がジャンプされ、プレイリストマークPLM#2の位置から再生が継続されることになる。
クリップの途中にプレイリストマークを設定することで、当該クリップを仮想的に分割することができる。例えば、図22Bに一例が示されるように、プレイリスト#1に対し、クリップ#2の所望の位置にプレイリストマークPLM#3を設ける。これにより、図22Cに一例が示されるように、クリップ#2のプレイリストマークPLM#3に対応する位置eをジャンプ位置として指定することが可能となり、クリップ#2が位置eで仮想的に分割されたものと見なすことができるようになる。
なお、ユーザ側から見た場合、プレイリストで示される区間は、チャプタを単位として再生される。チャプタは、プレイリストに対してプレイリストマークを設けることで設定することができる。例えば、プレイリストで示される区間の先頭のみにプレイリストマークが設けられているか、プレイリストにプレイリストマークが全く設けられていなければ、当該プレイリスト全体が1のチャプタを構成する。
また、上述した図22Aの例ように、クリップ#1の先頭の位置aに対応する位置にプレイリストマークPLM#1が設けられ、クリップ#2の先頭の位置cに対応する位置にプレイリストマークPLM#2が設けられていれば、プレイリストマークPLM#1からPLM#2までの区間がチャプタ#1とされ、プレイリストマークPLM#2からプレイリスト#1の最後の位置までの区間がチャプタ#2とされる。この場合は、プレイリスト#1に示される全長がプレイリストマーク#2により2のチャプタに分割されたことになる。
さらに、上述した図22Cの例のように、クリップ#2の途中の所望の位置eに対応するプレイリストマークPLM#3が設けられた場合、図22Aのチャプタ#2がプレイリストマークPLM#3の位置でさらに分割され、プレイリストマークPLM#2からプレイリストマークPLM#3までの区間がチャプタ#2とされ、プレイリストマークPLM#3からプレイリスト#1の最後の位置までの区間がチャプタ#3とされる。
図23は、プレイリストマークを追加挿入する一例の処理を示すフローチャートである。この処理では、プレイリスト内でプレイリストマークを格納するブロックblkPlayListMark()(図14参照)を検索して、現在再生中の位置と既に設定されているプレイリストマークとの位置関係を求め、その結果に基づきプレイリストマークを追加挿入すると共に、ブロックblkPlayListMark()の情報を書き換える。
ステップS50でカウント値iを値0として初期化し、次のステップS51で現在再生中のプレイアイテム(図23ではPIと表記)の番号がi番目のプレイリストマーク(図23ではPLMと表記)に参照されるプレイアイテムの番号より大きいか否かが判断される。
例えば、図11のブロックblkPlayList()において、ループ変数PlayItem_idによるforループ文で記述されるブロックblkPlayItem()のうち、現在再生中のプレイアイテムに対応する値PlayItem_idを求め、求められた値PlayItem_idと、ブロックblkPlayListMark()におけるi番目の値RefToPlayItemIDとが比較される。若し、現在再生中のプレイアイテムの番号の方が大きいと判断されれば、カウント値iが1だけインクリメントされて処理がステップS51に戻される。
一方、ステップS51において、現在再生中のプレイアイテムの番号がi番目のプレイリストマークに参照されるプレイアイテムの番号より大きくない、すなわち、現在再生中のプレイアイテムとi番目のプレイリストマークに参照されるプレイアイテムの番号とが等しいか、若しくは、現在再生中のプレイアイテムの番号よりもi番目のプレイリストマークに参照されるプレイアイテムの番号の方が大きいと判断されると、処理はステップS52に移行される。
ステップS52では、現在再生中のプレイアイテムの番号と、i番目のプレイリストマークに参照されるプレイアイテムの番号とが等しいか否かが判断される。若し、等しいと判断されれば、処理は次のステップS53に移行される。一方、等しくないと判断されれば、処理は後述するステップS54に移行される。
ステップS53では、現在の再生時刻がi番目のプレイリストマークの指し示す再生刻よりも後であるか否かが判断される。現在の再生時刻は、例えばビデオストリームをデコードするデコーダから取得することができる。また、i番目のプレイリストマークの指し示す再生時刻は、図14を参照し、ブロックblkPlayListMark()におけるi番目の値MarkTimeStampに基づく。
若し、現在の再生時刻がi番目のプレイリストマークの指し示す時刻よりも後であると判断されたら、カウント値iが1だけインクリメントされて、処理がステップS53に戻される。一方、現在の再生時刻がi番目のプレイリストマークの指し示す再生時刻より後ではない、すなわち、現在の再生時刻がi番目のプレイリストマークの指し示す再生時刻と等しいか、若しくは、現在の再生時刻がi番目のプレイリストマークが指し示す再生時刻より前であれば、処理はステップS54に移行される。
ステップS54では、i番目の位置にプレイリストマーク(この場合はエントリマーク)を追加挿入する処理が行われる。ここでは、ブロックblkPlayListMark()において、既存のi番目のプレイリストマークと、(i−1)番目のプレイリストマークとの間に、プレイリストマークが追加挿入されることになる。既存のi番目のプレイリストマークは、プレイリストマークの追加挿入処理後には、(i+1)番目のプレイリストマークとされる。
より詳細には、ブロックblkPlayListMark()において、現在再生中のプレイアイテムに対応する値PlayItem_idを、フィールドRefToPlayItemIDの値に設定する。また、フィールドMarkTimeStampの値は、現在の再生時刻を示す値とされる。さらに、フィールドNumberOfPlayListMarksの値が1だけインクリメントされ、フィールドLengthの値が再計算される。
なお、実際には、ブロックblkPlayListMark()はプレイリストファイルの一部なので、図10に一例が示されるプレイリストファイルのシンタクスにおいて、フィールドExtensionDataStartAddressの値が、ブロックblkPlayListMark()におけるフィールドLengthの値に応じて書き換えられることになる。
図24を用いてより具体的に説明する。なお、図24Aおよび図24Bは、上述した図21と同様の構造であるので、図そのものの詳細な説明は省略する。ここでは、図24AにおいてプレイリストマークPLM#2およびPLM#3の間を再生中に、位置aに対してプレイリストマークを追加挿入する場合について説明する。
カウント値iが初期化されて値が"0"とされ、位置aに対応するプレイアイテムは、プレイアイテム#2であるので、現在再生中のプレイアイテムの番号が2とされる。一方、i番目すなわち0番目のプレイリストマーク#0は、プレイアイテム#0を参照しており、i番目のプレイリストマークが参照するプレイアイテム番号が0とされる。ステップS51の判断に基づき、現在再生中のプレイアイテムの番号がi番目のプレイリストマークが参照するプレイアイテム番号よりも大きいので、カウント値iが1だけインクリメントされて値が"1"とされ、再びステップS51の判断がなされる。
2度目のステップS51の判断では、i番目すなわち1番目のプレイリストマークPLM#1が参照するプレイアイテム番号と、現在再生中のプレイアイテム番号とが比較される。1番目のプレイリストマークPLM#1は、プレイアイテム#1を参照しており、参照するプレイアイテム番号が1とされる。ステップS51の判断に基づき、現在再生中のプレイアイテムの番号がi番目のプレイリストマークが参照するプレイアイテム番号よりも大きいので、カウント値iが1だけインクリメントされて値が"2"とされ、再びステップS51の判断がなされる。
3度目のステップS51の判断において、i番目すなわち2番目のプレイリストマークPLM#2は、プレイアイテム#1に指定される区間内にあり、2番目のプレイリストマークPLM#2が参照するプレイアイテム番号が1とされる。したがって、現在再生中のプレイアイテム番号が、i番目のプレイリストマークが参照するプレイアイテム番号よりも大きいとされ、カウント値iが1だけインクリメントされて値が"3"とされ、再びステップS51の判断がなされる。
4度目のステップS51の判断において、i番目すなわち3番目のプレイリストマークPLM#3は、プレイアイテム#2に指定される区間内にあり、3番目のプレイリストマークが参照するプレイアイテム番号が"2"とされる。したがって、現在再生中のプレイアイテム番号がi番目のプレイリストマークが参照するプレイアイテム番号と等しいとされ、処理はステップS52に移行される。そして、ステップS52では、3番目のプレイリストマークPLM#3が参照するプレイアイテム番号と、現在させ意中のプレイリストマークの番号とが等しいので、処理はステップS53に移行される。
カウント値iは"3"なので、i番目のプレイリストマークであるプレイリストマークPLM#3の設定された時刻が現在再生中の位置aの時刻よりも後となる。したがって、ステップS53では、現在の再生時刻を示す値がi番目のプレイリストマークの設定された時刻を示す値よりも小さいとされ、処理はステップS54に移行されて位置aに対応するプレイリストマークが設定される。
すなわち、参照するプレイアイテム番号が"2"で、位置aの再生時刻を示すプレイリストマークが3番目のプレイリストマークPLM#3として追加挿入される。また、プレイリストマーク数が1だけインクリメントされ、このプレイリストマークPLM#3が追加挿入される直前の、当該プレイリストマークPLM#3が示す再生時刻以降に設けられたプレイリストマークの番号がそれぞれ1だけインクリメントされる。すなわち、図24の例では、図24Aに示されるプレイリストマークPLM#3は、プレイリストマークの追加挿入処理により図24Bに例示されるようにプレイリストマークPLM#4とされ、追加挿入されたプレイリストマークが、プレイリストマークPLM#3とされる。
なお、ステップS52において、現在再生中のプレイアイテム番号とi番目のプレイリストマークの参照するプレイアイテム番号とが等しくない場合、換言すれば、現在再生中のプレイアイテム番号がi番目のプレイリストマークの参照するプレイアイテム番号よりも小さい場合とは、例えば、それぞれ対応する区間にプレイリストマークが設けられている2つのプレイアイテムの間にある、プレイリストマークが設けられていないプレイアイテムに、新たにプレイリストマークを追加挿入する場合が考えられる。
一例として、図25に例示されるように、プレイアイテム#0、プレイアイテム#1およびプレイアイテム#2の3つのプレイアイテムを含むプレイリスト#12を考える。ここで、プレイアイテム#0の先頭に対応する位置と、プレイアイテム#2で示される区間内に、プレイリストマークPLM#0およびプレイリストマークPLM#1がそれぞれ設定されているものとする。
このような状態において、プレイアイテム#1で示される区間内の位置bにプレイリストマークを追加挿入する場合、ステップS51の判断では、カウント値iが"1"のときに、現在再生中のプレイアイテム番号が"1"、i番目のプレイリストマークが参照しているプレイアイテム番号が"2"とされ、現在再生中のプレイアイテム番号よりもi番目のプレイリストマークが参照しているプレイアイテム番号の方が大きくなり、処理がステップS52に移行される。そして、ステップS52では、現在再生中のプレイアイテム番号が"1"、i番目のプレイリストマークが参照しているプレイアイテム番号が"2"なので、両者が等しくないとされる。またこの場合、位置bに対応するプレイアイテム#1には、他のプレイリストマークが存在しないので、ステップS53による、プレイアイテム内での前後を判断する必要がない。したがって、処理はステップS52からステップS54に移行され、位置bに対応するプレイリストマークの追加挿入処理がなされる。
次に、この発明の主旨に関わる、プレイリストマークを設ける位置の決定方法について説明する。既に説明したように、エントリPTSEPStartで示される位置にプレイリストマークを設ける第1の方法と、GOP境界の位置にプレイリストマークを設ける第2の方法との2通りの方法が考えられる。以下に、それぞれの場合における利点および欠点、ならびに、改善方法について説明する。
なお、エントリPTSEPStartで示される位置は、例えばMPEG2方式のように、Iピクチャ、PピクチャおよびBピクチャによりGOPが構成される場合は、Iピクチャの位置に対応させることができる。また、例えばMPEG4やH.264|AVC方式のように、IDRピクチャをさらに用いる場合には、IDRピクチャの位置に対応させることができる。
図26は、第1および第2の方法におけるそれぞれのチャプタ境界の例を示す。プレイリストマークPLM#1およびプレイリストマークPLM#2によりチャプタの境界が示され、プレイリストマークPLM#1およびPLM#2の間がチャプタ#2とされる。図26Aは、第1の方法における一例のチャプタ境界を示す。記録が開始される位置は、GOPの先頭になるので、エントリPTSEPStartで示される位置にプレイリストマークを設けると、GOPの先頭とプレイリストマークに基づくチャプタの先頭との間に、図26Aに例示されるように、不一致区間が発生する。
したがって、チャプタ先頭部の不一致区間の1乃至複数フレームが再生されないことになる。例えば、記録開始位置にプレイリストマークを設けようとした場合、記録開始位置から開始されるGOPの、最初のIピクチャ(MPEG2方式の場合)より表示順で前の、例えば1乃至複数のBピクチャが再生されない不具合が生じる。
また、チャプタの後端部においては、不一致区間の1乃至複数フレームは、不一致区間の直前のGOPとは異なるGOPに属する。そのため、当該不一致区間の1乃至複数フレームは、当該不一致区間の直前のフレームと内容的に関連性が無いことがあり得る。例えば、不一致区間の直前のGOPは、記録停止に応じて記録されたGOPであって、不一致区間を含むGOPは、次の若しくは別の記録開始で記録されたGOPである場合などが考えられる。このような場合、チャプタの後端部において、シーン的に繋がりの無いフレームが数フレーム、再生されてしまう不具合が生じる。
図26Bは、第2の方法における一例のチャプタ境界を示す。この第2の方法では、チャプタ境界がGOP境界と一致しているので、上述した第1の方法の場合のような不具合は、発生しない。
図27は、第1および第2の方法におけるデコード区間の例を示す。プレイリストマークPLM#1およびPLM#2の間の区間が表示すべき区間である。図27Aは、第1の方法の場合の一例のデコード区間を示す。チャプタ先頭では、エントリPTSEPStartで示される位置にプレイリストマークが設けられているので、デコード開始位置は、このエントリPTSEPStartで示される位置に対応するピクチャが含まれるGOPの先頭からとなる。すなわち、先頭側において、GOP先頭からプレイリストマークPLM#1までの区間が、表示すべき区間に対して余分にデコードする必要がある区間となる。再生時には、この余分にデコードされた区間は、マスクされる。
一方、第2の方法の場合は、図27Bに一例が示されるように、プレイリストマークが設けられた位置の直前のGOPからデコードを行う必要がある。これは、GOPがオープンGOPおよびクローズドGOPの何れであるかを判別できない場合、そのGOPは、オープンGOPとして、当該GOPの前のGOPの情報も用いてデコードする必要があるからである。すなわち、先頭側において、表示すべき区間に対して1GOP分、余分にデコードする区間が発生する。
また、時刻情報としては、エントリPTSEPStartで示される位置に対応した情報しか持っていないので、プレイリストマークは、実際には、当該プレイリストマークが設けられた位置の前後のエントリPTSEPStartで示される位置の間に存在するとしか認識できないことになる。この意味でも、プレイリストマークが設けられた位置の前のエントリPTSEPStartで示される位置のピクチャが含まれるGOPからデコードを行う必要がある。
デコード終了位置は、第1の方法においては、チャプタ終端のフレームが含まれるGOPの終端までとなる。また、第2の方法においては、上述した理由と同様にして、チャプタ終端を示すプレイリストマークの位置がその前後の何れのGOPに含まれるかを認識することができないため、当該プレイリストマークの直後に現れるエントリPTSEPStartで示される位置に対応するピクチャを含むGOPの終端までデコードを行う必要がある。このように、結果的には、第1の方法と第2の方法とで同じ位置までデコードを行う必要がある。
図28は、GOPがオープンGOPおよびクローズドGOPの何れかを判別可能な場合の、第1および第2の方法によるデコード区間の例を示す。プレイリストマークPLM#1およびPLM#2の間の区間が表示すべき区間である。図28Aは、プレイリストマークをエントリPTSEPStartで示される位置に設けた場合の例であり、上述した図27Aと同等の図である。また、図28Bは、プレイリストマークをオープンGOPのGOP境界に設けた場合の例である。
既に説明したように、クローズドGOPは、そのGOP内でデコードが完結し、直前のGOPの情報を用いる必要が無い。そのため、図28Cに一例が示されるように、GOP境界にプレイリストマークを設けた場合でも、プレイリストマークを設けた位置からデコードを開始することができる。すなわち、プレイリストマークを設けるGOPがクローズドGOPであることが判別可能である場合には、先頭側において、表示すべき区間に対して余分にデコードする区間が発生しない。
また、記録が停止された後に再び記録が開始された場合、記録停止時のオープンGOPの次のGOPは、記録開始に伴いクローズドGOPとなるため、記録開始位置であるGOP境界にプレイリストマークが設けられる。このため、図28Bに一例が示されるように、記録の停止部分において表示すべき区間の終端とデコード区間の終端とが一致し、このプレイリストマークに基づくチャプタの終端で内容的に関連性のないフレームが表示されることがない。
なお、GOPがオープンGOPおよびクローズドGOPの何れであるかを判別する手段としては、幾通りかが考えられる。この発明の実施の一形態では、記録開始時は必ずクローズドGOP構成とされるので、記録開始位置に対応する位置でチャプタ分割を行う場合には、GOP境界にプレイリストマークを設けるようにする。
これに限らず、例えばMPEG2方式では、ビデオデータのエレメンタリストリームのヘッダに対して、GOPがクローズドGOPか否かを示すフラグが格納されるので、これを用いることが考えられる。
また、記録を行った装置と同一の装置によりチャプタ分割編集を行い、さらに同一の装置で再生を行う場合には、クローズドGOPで記録を行った位置を示す情報を装置内のメモリなどに記憶しておく方法が考えられる。さらに、装置の仕様としてクローズドGOPを用いて記録を行うようにされている場合、同一機種の装置でチャプタ分割を行う場合には、プレイリストマークを常にGOP境界に設けるようにできる。
機種名を示す情報は、例えばインデックスファイル、ムービーオブジェクトファイル、プレイリストファイルおよびクリップインフォメーションファイルにそれぞれ設けることができる拡張データ領域(ブロックblkExtensionData())に格納することができる。オープンGOPおよびクローズドGOPの何れを用いているかを示す情報を、これらの拡張データ領域に対して格納する方法も考えられる。
図29は、図26〜図28を用いて説明した各条件に関する評価を纏めて示す。図29中、「○」(丸印)が付された項目は、有用なモードであり、「×」(バツ印)が付された項目は、好ましくないモードである。また、「−」(横棒)が付された項目は、実質的に意味をなさないモードである。
この図29では、チャプタ分割を行うように指定する位置が記録開始または停止位置に対応する位置であるか否かについて、それぞれ、記録と再生とにおけるチャプタ境界のずれの有無と、チャプタ先頭部および後端部のそれぞれで読み出しとデコードとが表示フレームに対してより多く必要な区間とで、プレイリストマークをエントリPTSEPStartの位置と、GOP境界位置とに設けた場合について評価している。また、GOP境界位置にプレイリストマークを設ける場合において、記録、編集および再生を同一の装置で行い装置独自の情報を利用できる場合(独自情報利用可能機とする)と、記録および編集を行った装置と再生を行う装置とが異なる場合(一般再生機とする)とのそれぞれについて評価している。
なお、図29中で、M値は、間にBピクチャがある場合の、基準ピクチャから次の基準ピクチャまでのピクチャの移動数、N値は、1GOP内のピクチャ数を示す。例えば、GOPが「I2B0B1P5B3B4P8B6B7P11B9B10P14B12B13」の15枚のピクチャで構成される場合、M=3、N=15である。
記録開始または停止の境界位置に対応する位置でチャプタ分割を行うように指示した場合について説明する。このとき、記録と再生におけるチャプタ位置のずれに関しては、図26を用いて説明したように、プレイリストマークをエントリPTSEPStartの位置に設ける場合にずれが生じ、GOP境界位置に設ける場合には、ずれが生じない。
デコード区間は、デコード開始位置に関しては、図28を用いて説明したように、プレイリストマークをエントリPTSEPStartの位置に設ける場合には、(M−1)フレーム分が表示フレームに対して多く必要となり、GOP境界位置に設ける場合には、記録開始位置は必ずクローズドGOPとなるため、一般再生機および独自情報利用可能機の何れにおいても、表示フレーム区間とデコード区間とが一致する。また、デコード終了位置に関しては、プレイリストマークをエントリPTSEPStartの位置に設ける場合には、(N−M+1)フレーム分が表示フレームに対して必要となり、GOP境界位置に設ける場合には、一般再生機および独自情報利用可能機の何れにおいても、表示フレーム区間とデコード区間とが一致する。
記録開始または停止の境界位置ではない位置でチャプタ分割を行うように指示した場合について説明する。この場合、記録と再生におけるチャプタ位置のずれに関する評価は意味をなさないので、図29においては「−」(横棒)で示してある。
デコード区間は、図28を用いて説明したように、デコード開始位置に関しては、プレイリストマークをエントリPTSEPStartの位置に設ける場合には、(M−1)フレーム分が表示フレームに対して多く必要となる。一方、GOP境界位置にプレイリストマークを設ける場合には、一般再生機においては直前の1GOP分すなわちNフレーム分が表示フレームに対して必要となり、独自情報利用可能機においては、プレイリストマークが設けられるGOPがオープンGOPであると判別されれば1GOP分すなわちNフレーム分が表示フレームに対して必要になる。また、独自情報利用可能機では、当該GOPがクローズドGOPであると判別できれば、表示開始フレームとデコード開始フレームとが一致する。
さらに、デコード終了位置に関しては、プレイリストマークをエントリPTSEPStartの位置に設ける場合には、(N−M+1)フレーム分が表示フレームに対して多く必要となる。一方、GOP境界位置にプレイリストマークを設ける場合には、一般再生機においては直後の1GOP分すなわちNフレーム分が表示フレームに対して必要となり、独自情報利用可能機においては、表示終了フレームとデコード終了位置とが一致する。
このように、記録開始または停止の境界位置でチャプタ分割を行う場合には、GOP境界にプレイリストマークを設け、記録開始または停止の境界位置以外でチャプタ分割を行う場合には、エントリPTSEPStartに示される位置にプレイリストマークを設けるようにすることで、ユーザの利便性を最大にできることが分かる。
図30は、チャプタ分割編集を行う際の、プレイリストマークの一例の挿入方法を示すフローチャートである。例えばプレイリストに従いクリップを再生中にチャプタ分割が指示されると、先ず、最初のステップS60で、現在再生中の位置に対応するGOPがクローズドGOPであると判定可能か否かが判断される。現在再生中の位置は、例えばビデオストリームをデコードするデコーダから取得することができる。
若し、判定できないと判断されたら、処理はステップS61に移行し、プレイリストマークを設ける現在時刻としてエントリPTSEPStartの値を用いるものとされる。一方、ステップS60で判定可能であると判断されれば、処理はステップS63に移行され、プレイリストマークを設ける現在時刻として、GOP境界の値を用いるものとされる。
ステップS61またはステップS63の処理の後、処理はステップS62に移行され、ステップS61またはステップS63で決定された現在時刻に基づきプレイリストマークを設ける処理がなされる。すなわち、このステップS62において、上述の図23においてステップS54で説明した、ブロックblkPlayListMark()内のフィールドMarkTimeStampの値が、ステップS61またはステップS63の結果に応じて決定される。
なお、GOP境界の位置は、例えばビデオストリームをデコードするデコーダから取得することができる。これに限らず、例えば上述したエントリPTSEPStartの値に基づき求めるようにもできる。この場合には、エントリPTSEPStartの位置からGOPの構造に応じて所定フレーム分遡った位置を、GOPの先頭位置とする。
記録機が記録開始操作に応じて、記録開始位置に自動的にプレイリストマークを設ける構成も考えられる。このような構成とすることで、再生時に、クリップ分割編集処理を行わなくても記録開始および停止の単位でチャプタジャンプを行うことが可能とされる。
図31は、このような、記録開始に応じて記録開始位置に自動的にプレイリストマークを設ける場合の一例の処理を示すフローチャートである。例えばユーザにより記録機に対して記録開始操作がなされると、クリップの記録が開始されると共に、プレイリストマークを設ける現在時刻として、GOP境界の値を用いるように決定される。そして、次のステップS71で、ステップS70の結果に基づき、プレイリストマークを設ける処理が行われる。すなわち、このステップS71において、記録が開始され最初に生成されたGOPの先頭に対応する再生時刻がブロックblkPlayListMark()内のフィールドMarkTimeStampの値とされ、プレイリストマークが設けられる。
なお、記録開始位置すなわち記録が開始され最初に生成されたGOPの先頭に対応する時刻は、例えばプレイリストに対して最初に記録されるクリップに関しては、値"0"に所定のオフセットを加えた値とされる。更なる記録開始および停止により生成されたクリップをプレイリストに追記するような仕様の場合には、例えば既に記録されたクリップの累積的な再生時刻に所定のオフセットを加えた値とされる。オフセットは、例えば、デコーダにストリームの供給が開始されてから当該GOPの先頭のフレームが表示される時間に対応する値であって、装置の仕様などに応じて固有の値とされる。
これは、例えば1のクリップが複数回の記録開始および停止操作を含めることができるような場合に、クリップAVストリームファイル、クリップインフォメーションファイルおよび当該クリップインフォメーションファイルに対応するプレイアイテムが1つのまま、プレイリストマークのみで、記録開始および停止操作に対応するチャプタ境界を設ける場合に用いて好適な方法である。
なお、1のプレイリストファイルに設けることができるプレイリストマークの数に対して、上限を設定することができる。プレイリストマーク数の上限を設定することで、無制限にプレイリストファイルの容量が増大するのが防がれる。また、例えば編集機や再生機におけるチャプタ表示数に、例えば3桁などの制限が設けられているような場合に、プレイリストマークの上限を設定することも考えられる。上述した図30および図31を用いて説明した処理は、それぞれ、現在設定しようとするプレイリストマークを設定することでこのプレイリスト内に設定可能なプレイリストマーク数の上限を超えないか否かの判断を行った上で、上限を超えないとの判断がなされた後に、行われる。
次に、この発明の実施の一形態に適用可能な一例の記録再生装置について説明する。先ず、記録再生装置の説明に先んじて、仮想プレーヤについて、概略的に説明する。上述したようなデータ構造を有するディスクがプレーヤに装填されると、プレーヤは、ディスクから読み出されたムービーオブジェクトなどに記述されたコマンドを、プレーヤ内部のハードウェアを制御するための固有のコマンドに変換する必要がある。プレーヤは、このような変換を行うためのソフトウェアを、プレーヤに内蔵されるROM(Read Only Memory)にあらかじめ記憶している。このソフトウェアは、ディスクとプレーヤを仲介してプレーヤにこのフォーマットの規定に従った動作をさせることから、仮想プレーヤと称される。
図32は、この仮想プレーヤの動作を概略的に示す。図32Aは、ディスクのローディング時の動作の例を示す。ディスクがプレーヤに装填されディスクに対するイニシャルアクセスがなされると(ステップS30)、1のディスクにおいて共有的に用いられる共有パラメータが記憶されるレジスタが初期化される(ステップS31)。そして、次のステップS32で、ムービーオブジェクトなどに記述されたプログラムがディスクから読み込まれて実行される。なお、イニシャルアクセスは、ディスク装填時のように、ディスクの再生が初めて行われることをいう。
図32Bは、プレーヤが停止状態からユーザにより例えばプレイキーが押下され再生が指示された場合の動作の例を示す。最初の停止状態(ステップS40)に対して、ユーザにより、例えばリモートコントロールコマンダなどを用いて再生が指示される(UO:User Operation)。再生が指示されると、先ず、レジスタすなわち共通パラメータが初期化され(ステップS41)、次のステップS42で、ムービーオブジェクト実行フェイズに移行する。
ムービーオブジェクトの実行フェイズにおけるプレイリストの再生について、図33を用いて説明する。UOなどにより、タイトル番号#1のコンテンツを再生開始する指示があった場合について考える。プレーヤは、コンテンツの再生開始指示に応じて、上述した図2に示されるインデックステーブル(Index Table)を参照し、タイトル#1のコンテンツ再生に対応するオブジェクトの番号を取得する。例えばタイトル#1のコンテンツ再生を実現するオブジェクトの番号が#1であったとすると、プレーヤは、ムービーオブジェクト#1の実行を開始する。
この図33の例では、ムービーオブジェクト#1に記述されたプログラムは2行からなり、1行目のコマンドが"Play PlayList(1)"であるとすると、プレーヤは、プレイリスト#1の再生を開始する。プレイリスト#1は、1以上のプレイアイテムから構成され、プレイアイテムが順次再生される。プレイリスト#1中のプレイアイテムの再生が終了すると、ムービーオブジェクト#1の実行に戻り、2行目のコマンドが実行される。図33の例では、2行目のコマンドが"jump MenuTitle"であって、このコマンドが実行されインデックステーブルに記述されたメニュータイトル(MenuTitle)を実現するムービーオブジェクトの実行が開始される。
図34は、この発明の実施の一形態に適用可能な記録再生装置の一例の構成を概略的に示す。この図34に例示される記録装置は、外部から入力されるビデオデータおよびオーディオデータを記録媒体に記録し、記録媒体に記録されたビデオデータおよびオーディオデータを再生する、単独の記録再生装置として用いることもできるし、光学系や撮像素子などを備えたカメラブロックと組み合わせ、撮像した撮像信号に基づくビデオデータを記録媒体に記録する、ビデオカメラ装置の記録ブロックとして用いることもできる。
適用可能な圧縮符号化や多重化の方式としては、様々に考えられる。例えば、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の各部とを接続する経路は、繁雑さを避けるために、図34では省略している。
UI(User Interface)部31は、この記録装置の動作をユーザが操作するための操作子が所定に設けられ、操作子に対する操作に応じた制御信号を出力する。この制御信号は、制御部30に供給される。制御部30は、ユーザ操作に応じてUI部31から供給された制御信号に基づきなされるプログラムの処理により、記録再生部10の各部の動作を制御する。また、UI部31は、簡易的な表示部を有し、後述する管理情報処理部16から供給される情報に基づき、所定の表示、例えば記録再生装置における記録や再生の状態を示す表示を行うことができるようにされている。
例えば、UI部31に対してなされた操作に応じて、記録再生装置による記録媒体32に対してデータを記録する動作の開始および停止の動作や、記録媒体32からデータを再生する再生動作が制御部30により制御される。また例えば、編集動作時には、UI部31に対してなされた操作に応じて記録媒体32からデータが再生されると共に、操作に応じた位置でのチャプタ分割処理がなされる。
ビデオエンコーダ11は、複数フレームのビデオデータを格納可能なバッファメモリを有し、供給されたベースバンドのディジタルビデオデータをバッファメモリに溜め込んで、所定の方式で以て圧縮符号化する。H.264|AVCに規定される方式に準じて圧縮符号化がなされるこの例では、例えば、DCT(Discrete Cosine Transform)と画面内予測とによりフレーム内圧縮を行うと共に、動きベクトルを用いたフレーム間圧縮を行い、さらにエントリピー符号化を行い圧縮効率を高める。ビデオエンコーダ11で圧縮符号化されたディジタルビデオデータは、H.264|AVCエレメンタリストリーム(ES)として出力される。
ビデオデコーダ20は、複数フレームのビデオデータを格納可能なバッファメモリを有し、供給された圧縮ビデオデータをバッファメモリに溜め込んで、圧縮符号化方式に対応した復号化方式でデコードし、ベースバンドのディジタルビデオデータとして出力する。例えば、ビデオエンコーダ11がH.264|AVCに規定される方式に準じて圧縮符号化を行うこの例では、ビデオデコーダ20もビデオエンコーダ11に対応して、H.264|AVCに規定される方式に準じてデコード処理を行う。ビデオデコーダ20は、後述するマルチプレクサ/デマルチプレクサ13(以下、MUX/DEMUX13)で抽出される、DTS(Decoding Time Stamp)およびPTS(Presentation Time Stamp)で示される時刻に基づき、デコードおよび出力を行うことができる。ビデオデコーダ20でデコードされて得られたベースバンドのディジタルビデオデータは、端子42から出力される。
オーディオエンコーダ12は、端子41から供給されたベースバンドのディジタルオーディオデータを所定の圧縮符号化方式、例えばドルビーディジタル(Dolby Digital:登録商標)方式により圧縮符号化する。オーディオデータの圧縮符号化方式は、これに限られるものではなく、さらに、オーディオデータを圧縮符号化せず、ベースバンドのデータのまま用いることも考えられる。
オーディオデコーダ21は、供給された圧縮オーディオデータを圧縮符号化方式に対応した復号化方式でデコードし、ベースバンドのディジタルオーディオデータとして出力する。オーディオエンコーダ12がドルビーディジタル方式により圧縮符号化されるこの例では、オーディオデコーダ21もオーディオエンコーダ12に対応して、ドルビーディジタル方式に準じた復号化方式でデコードがなされる。デコードされたオーディオデータは、ビデオデコーダ20から出力されるビデオデータと同期的に、端子43から出力される。
MUX/DEMUX13は、それぞれ圧縮符号化されて供給されたディジタルビデオデータおよびディジタルオーディオデータを所定の方式で多重化し、1本のデータストリームとして出力するマルチプレクサ機能と、ディジタルビデオデータとディジタルオーディオデータとが所定に多重化されたデータストリームから、ディジタルビデオデータとディジタルオーディオデータとを分離してそれぞれ取り出す、デマルチプレクサ機能とを有する。
マルチプレクサ機能は、例えば、MPEG2システムズに準じて多重化が行われるこの例では、MPEG2のトランスポートストリームを用いて、供給された圧縮ビデオデータおよび圧縮オーディオデータを時分割で多重化する。例えば、MUX/DEMUX13は、バッファメモリを有し、供給された圧縮ビデオデータおよび圧縮オーディオデータを一旦バッファメモリに格納する。バッファメモリに格納された圧縮ビデオデータは、所定サイズ毎に分割されヘッダが付加されて、PES(Packetized Elementary Stream)パケット化される。圧縮オーディオデータも同様に、所定サイズ毎に分割されヘッダが付加されてPESパケット化される。ヘッダには、パケットに格納されるデータの再生時刻を示すPTSや復号時刻を示すDTS(Decoding Time Stanp)といった、MPEG2システムズに規定される所定の情報が格納される。PESパケットは、さらに分割されてトランスポートパケット(TSパケット)のペイロードに詰め込まれる。TSパケットのヘッダには、ペイロードに詰め込まれたデータ種別などを識別するためのPID(Packet Identification)が格納される。
デマルチプレクサ機能は、マルチプレクサ機能と逆の処理を行い、パケットから圧縮ビデオデータおよび圧縮オーディオデータを抽出する。例えば、供給されたTSパケットのヘッダからPIDを検出し、TSパケットをペイロードに格納されるデータ種別毎に振り分ける。そして、振り分けられたTSパケットのそれぞれについて、ペイロードに格納されたデータを取り出し、PESパケットを再構築する。さらに、PESパケットのペイロードに格納された圧縮ビデオデータや圧縮オーディオデータを取り出し、PESヘッダに格納された情報などに基づきヘッダ情報などを付加し、それぞれ1本のエレメンタリストリームとして出力する。
ストリームバッファ14は、MUX/DEMUX13(記録時)または記録再生制御部15(再生時)から供給されたTSパケットを一時的に格納する。ストリームバッファ14に対するTSパケットの読み書きのタイミングを所定に制御することで、記録媒体32に対するアクセス速度と、オーディオおよびビデオデータエンコードやデコードなどの信号処理速度との間の整合性をとる。
記録再生制御部15は、記録媒体32に対するデータの記録と、記録媒体32からのデータの再生を制御する。すなわち、記録再生制御部15は、例えば制御部30といった上位からの命令に基づき、指定されたアドレスに対するデータの書き込みや、指定されたアドレスからのデータの読み出しを行う。
記録媒体32としては、例えば記録可能なタイプのDVD(Digital Versatile Disc)を用いることができる。これに限らず、記録媒体32としてハードディスクドライブを用いてもよいし、半導体メモリを記録媒体32に適用することも可能である。また、記録媒体32として、より大容量を実現したBlu−ray Disc(ブルーレイディスク:登録商標)を適用することも考えられる。
管理情報処理部16は、例えばCPU、ワークメモリとしてのRAMおよびプログラム所定のデータが予め記憶されるROMからなる(図示しない)。これに限らず、管理情報処理部16は、例えば制御部30におけるプログラム処理で管理情報処理部16の機能を実現することも可能である。この場合、例えば制御部30の有するRAMが揮発性メモリ17として用いられると共に、不揮発性メモリ18が制御部30に接続される。
管理情報処理部16は、例えば揮発性メモリ17をワークメモリとして用いて、上述したインデックスファイル"index.bdmv"、ムービーオブジェクトファイル"MovieObject.bdmv"、プレイリストファイル"xxxxx.mpls"およびクリップインフォメーションファイル"zzzzz.clpi"に関する処理を行う。例えばこの発明の実施の一形態によるプレイリストマークの追加挿入処理は、制御部30の制御に基づきこの管理情報処理部16により行われる。
このような構成を有する記録再生装置における、記録時の動作について説明する。なお、以下では、ビデオデータは、H.264|AVCに準じた方式で圧縮符号化され、オーディオデータは、AAC方式で圧縮符号化されるものとする。
ベースバンドのディジタルビデオデータが端子40から記録再生部10に入力され、ビデオエンコーダ11に供給される。例えば、UI部31に対して記録開始の操作がなされると、ビデオエンコーダ11は、供給されたディジタルビデオデータの圧縮符号化を開始する。ビデオエンコーダ11は、ベースバンドのディジタルビデオデータを圧縮符号化してH.264|AVCのエレメンタリストリーム(ES)として出力する。このエレメンタリストリームは、MUX/DEMUX13に供給される。
ベースバンドのディジタルオーディオデータが端子41から記録再生部10に入力され、オーディオエンコーダ12に供給される。オーディオエンコーダ12は、上述のUI部31に対する記録開始の操作に応じたタイミングで供給されたオーディオデータの圧縮符号化を開始する。オーディオエンコーダ12で圧縮符号化されたディジタルオーディオデータは、MUX/DEMUX13に供給される。
MUX/DEMUX13は、それぞれ圧縮符号化されて供給されたディジタルビデオデータおよびディジタルオーディオデータを所定の方式で多重化し、1本のデータストリームとして出力する。例えば、MUX/DEMUX13は、バッファメモリを有し、供給された圧縮ビデオデータおよび圧縮オーディオデータを一旦バッファメモリに格納する。
バッファメモリに格納された圧縮ビデオデータは、所定構造毎に分割されヘッダが付加されて、PES(Packetized Elementary Stream)パケット化される。圧縮オーディオデータも同様に、所定サイズ毎に分割されヘッダが付加されてPESパケット化される。ヘッダには、パケットに格納されるデータの再生時刻を示すPTSや復号時刻を示すDTS(Decoding Time Stanp)といった、MPEG2システムズに規定される所定の情報が格納される。PESパケットは、さらに分割されてトランスポートパケット(TSパケット)のペイロードに詰め込まれる。TSパケットのヘッダには、ペイロードに詰め込まれたデータを識別するためのPID(Packet Identification)が格納される。マルチプレクサ13から出力されたTSパケットは、ストリームバッファ14に一旦溜め込まれる。
なお、TSパケットは、実際には、MUX/DEMUX13においてさらに所定サイズのヘッダが付加されて出力される。この、TSパケットに対して所定のヘッダを付加したパケットを、ソースパケットと呼ぶ。
記録制御部15は、ストリームバッファ14に溜め込まれたデータ量を監視し、ストリームバッファ14に所定量以上のデータが溜め込まれると、ストリームバッファ14から記録媒体32の記録単位毎にデータを読み出して記録媒体32に書き込む。
管理情報処理部16は、記録データに基づき、揮発性メモリ17をワークメモリとして用いて、上述したインデックスファイル"index.bdmv"、ムービーオブジェクトファイル"MovieObject.bdmv"、プレイリストファイル"xxxxx.mpls"およびクリップインフォメーションファイル"zzzzz.clpi"に格納するための情報を生成する。生成された情報は、所定のタイミングで記録媒体32に書き込まれる。
一例として、管理情報処理部16は、MUX/DEMUX13から記録データの時刻情報を取得すると共に、記録制御部15から記録データの記録媒体32におけるアドレス情報を取得し、取得されたこれら時刻情報およびアドレス情報に基づきエントリPTSEPStartが生成される。また、UI部31に対する記録開始、記録終了の操作に応じて制御部30から出力される制御信号と、MUX/DEMUX13および記録制御部15からの記録データに関する情報とに基づき、プレイリストファイル"xxxxx.mpls"の生成または更新、クリップインフォメーションファイル"zzzzz.clpi"の生成などが行われる。
この記録再生装置が記録開始に伴い記録開始位置にプレイリストマークを設けるようにされている場合、UI部31に対する記録開始操作に応じて生成される先頭のフレームに対応する再生時刻をフィールドMarkTimeStampの値として持つプレイリストマークが、管理情報処理部16において作成され、プレイリストに対して追加される。
再生時の動作について説明する。記録媒体32が例えば記録再生装置に対して装填されると、記録媒体32から、インデックスファイル"index.bdmv"、ムービーオブジェクトファイル"MovieObject.bdmv"が読み込まれ、管理情報処理部16に渡される。管理情報処理部16は、これらの情報を、揮発性メモリ17に記憶する。制御部30は、管理情報処理部16から揮発性メモリ17に記憶された情報を取得し、取得された情報に基づき、例えば、UI部31が有する表示部に対して記録媒体32に記録されているクリップに関する情報を表示させる。ユーザは、この情報に基づきUI部31に対して所定の操作を行うことで、記録媒体32に記録されているクリップの再生を指示することができる。なお、ここでは、簡単のために、クリップの先頭から再生を開始させるものとする。
制御部30は、UI部31に対する操作に応じて、管理情報処理部16からプレイリストファイルの情報を取得し、このプレイリストファイルに基づき、記録再生制御部15に対して、当該プレイリストファイルに格納されるプレイアイテムに参照されるクリップインフォメーションファイルと、対応するクリップAVストリームファイルを記録媒体32から読み出すように命令を出す。記録再生制御部15は、この命令に従い、記録媒体32からクリップインフォメーションファイルとクリップAVストリームファイルとを読み出す。クリップAVストリームファイルは、記録媒体32からTSパケット毎に読み出され、記録再生制御部15を介してストリームバッファ14に溜め込まれる。
なお、実際には、記録媒体32から読み出されるTSパケットは、本来のTSパケットに対して所定サイズのヘッダが付加されたソースパケットである。
MUX/DEMUX13は、ストリームバッファ14に溜め込まれたデータ量を監視し、ストリームバッファ14に所定量以上のTSパケットが溜め込まれると、ストリームバッファ14からビデオデコーダ20がデコードに必要とする分のデータを、TSパケット単位で読み出す。読み出されたTSパケットは、MUX/DEMUX13に供給されバッファメモリに一旦格納され、PIDに基づきデータ種類毎に振り分けられペイロードに格納されたデータからPESパケットが再構築される。さらに、PESパケットのぺーロードからデータが取り出されると共に、PESヘッダの情報に基づき、DTSやPTSといったデコードや再生の時刻を指定する情報など、所定にヘッダ情報などが付加され、圧縮符号化されたビデオデータおよびオーディオデータのエレメンタリストリームがそれぞれ生成される。
圧縮ビデオデータは、ビデオデコーダ20に供給される。ビデオデコーダ20は、供給された圧縮ビデオデータをバッファメモリに溜め込み、所定ピクチャ分のデータが溜め込まれたら、バッファメモリに溜め込まれたデータに対してデコード処理を開始する。デコードされたビデオデータは、例えば図示されないシステムクロックから供給されるSTC(System Time Clock)に基づき、PTSに従いフレームタイミングで順次出力される。
一方、圧縮オーディオデータは、オーディオデコーダ21に供給され、所定にデコード処理がなされる。デコードされたオーディオデータは、ビデオデコーダ20から出力されるビデオデータと同期的に、オーディオデコーダ21から出力される。
この記録再生装置は、記録媒体32に記録されたクリップに対するチャプタ分割編集を行うことができる。上述のようにして記録媒体32からクリップを再生中に、UI部31に対して所定の操作を行い、チャプタ分割を行う位置を指定する。チャプタ分割の位置を指定する方法としては、クリップを通常通り、例えば順方向の1倍速再生で再生しながら所望の位置でクリップ分割の操作を行う方法や、高速再生、スロー再生、コマ送り再生といった可変速再生を用いて分割位置をフレーム単位で検索してチャプタ分割の操作を行う方法などが考えられる。
分割位置が指定されると、図23を用いて説明した処理に従い、指定された分割位置に対応する現在の再生時刻と、プレイリスト中の他のプレイリストマークとの位置関係が判断される。それと共に、図30を用いて説明した処理に従い、プレイリストマークを設ける値として、エントリPTSEPStartおよびGOP境界の何れの値を用いるかを判断する。
なお、プレイリストマークを設ける現在時刻としてエントリPTSEPStartの値を用いる場合で、分割位置をフレーム単位で任意に指定するとき、指定された分割位置が必ずしもエントリPTSEPStartで示されるフレームであるとは限らない。この場合、例えば指定された位置に最も近いエントリPTSEPStartの値を、指定された分割位置に対応するPTSEPStartの値として用いることが考えられる。これに限らず、指定された位置の直前または直後のエントリPTSEPStartの値を用いるようにしてもよい。
また、現在再生中の位置に対応するGOPがクローズドGOPであると判断できた場合は、クローズドGOPの先頭のフレームの再生時刻は、例えばMUX/DEMUX13から取得することができる。これに限らず、エントリPTSEPStartの値を基点とし、ビデオデコーダ20のバッファメモリに溜め込まれているデータとSTCとに基づき、クローズドGOPの先頭のフレームの再生時刻を求めることも考えられる。
図35は、上述のようにして設けられたプレイリストマークに基づくチャプタジャンプ処理の一例の方法を示すフローチャートである。一例として、上述のようにしてプレイリストマークが設けられチャプタ分割編集されたプレイリストを再生中に、例えばUI部31に対してチャプタジャンプを行うような操作がなされる。制御部30は、この操作に応じて、先ず、現在再生中の位置に対応する時刻情報を求める(ステップS80)。例えば、制御部30は、MUX/DEMUX13との間でやりとりを行い、MUX/DEMUX13で分離されるビデオデータのエレメンタリストリームに含まれるPTSと、MUX/DEMUX13におけるSTCとに基づき、ビデオデコーダ20でデコード中の任意のフレームの再生時刻を知ることができる。
なお、現在再生中の位置に対応する時刻情報を求める方法は、これに限られない。例えば、再生中、常にクリップインフォメーションファイル中のブロックblkEPMap()(図17参照)の情報を用い、エントリPTSEPStartに基づきアドレス変換を行う方法が考えられる。再生中には、次のGOPのデータを読み出す必要があり、この方法によれば、次のGOPのデータを容易に取得することが可能となる。また、現在の再生位置と、プレイリストマークの位置との関係を常に更新しながら再生を行うことで、UI部31の表示画面に対して現在再生中のチャプタの情報を表示することが可能となり、好ましい。
現在再生中の位置に対応する時刻情報が求められたら、次のステップS81で、制御部30により、当該時刻情報で示される時刻に対して再生方向に向けて最も近くにあるプレイリストマークが、再生中のプレイリストのブロックblkPlayListMark()から検索される。
該当するプレイリストマークが存在するとされれば(ステップS82)、処理はステップS83に移行され、制御部30により、ステップS81で検索されたプレイリストマークに基づき、当該プレイリストマークに対応するエントリPTSEPStartが検索される。
この実施の一形態では、プレイリストマークは、エントリPTSEPStartの位置またはGOP境界位置の何れかに設けられる。したがって、プレイリストマークに対応するエントリPTSEPStartは、プレイリストマークの再生時刻を示す値MarkTimeStampと値が一致するエントリPTSEPStartが存在すれば、そのエントリPTSEPStartとされる。一方、プレイリストマークの再生時刻を示す値MarkTimeStampと値が一致するエントリPTSEPStartが存在しない場合に、プレイリストマークがGOP境界に設けられ且つGOPがクローズドGOPであることが分かる場合には、値MarkTimeStampから再生時刻を再生方向に進めていったときに最初に現れるエントリPTSEPStartとされる。さらに、プレイリストマークの再生時刻を示す値MarkTimeStampと値が一致するエントリPTSEPStartが存在しない場合に、プレイリストマークがGOP境界に設けられていないか、または、GOPがクローズドGOPであることが分からない場合は、再生方向とは逆方向に進めて次に現れるエントリPTSEPStartとされる。
次のステップS84で、制御部30により、再生中のプレイアイテムに対応するクリップインフォメーションファイル内のブロックblkEPMap()(図17〜図20参照)に基づき、ステップS83で検索されたエントリPTSEPStartに対応するアドレス情報が求められる。そして、制御部30から記録再生制御部15に対して、記録媒体32から当該アドレス情報で示されるアドレスからの読み出しを行うように命令される。
記録媒体32から読み出されたデータは、記録再生制御部15からストリームバッファ14を介してMUX/DEMUX13に供給され、パケットを用いて時分割多重されたストリームからデータ種類毎の分離がなされる。分離されたデータうち圧縮ビデオデータのエレメンタリストリームは、ビデオデコーダ20に供給される。ビデオデコーダ20は、供給された圧縮ビデオデータのエレメンタリストリームのデコードを開始する(ステップS85)。そして、プレイリストマークで示されるフレームがデコードされ出力可能となったら、そのフレームからの出力がなされ、表示が開始される(ステップS86)。
このとき、プレイリストマークがエントリPTSEPStart位置に設けられている場合には、GOPにおいて、当該エントリPTSEPStartに対応するピクチャより前のピクチャは、デコードされるが表示は行わないようにされる。一方、プレイリストマークがGOP境界位置に設けられている場合には、GOPの先頭位置から表示が開始される。
なお、再生時刻で最後に設けられたプレイリストマークよりも後ろを再生中にチャプタジャンプを指示されることも考えられる。この場合、現在再生中の位置に対して再生方向に向けて最も近いプレイリストマークが、再生中のプレイリスト中に存在しないことになる。この場合、チャプタジャンプの指示が無視される。これに限らず、例えば図35のステップS87に一例が示されるように、当該プレイリストの終端までジャンプするようにしてもよい。
次に、この発明の実施の一形態の他の例について説明する。上述では、この発明が単体の記録装置に適用された例について説明した(図34参照)。これに対し、この実施の一形態の他の例では、この発明を、撮像素子と、被写体からの光を撮像素子に入射させる光学系とを有し、撮像素子で撮像された撮像信号に基づきビデオデータを記録媒体に記録するようにした、ビデオカメラ装置に適用した。
図36は、この発明の実施の一形態の他の例によるビデオカメラ装置100の一例の構成を示す。ビデオカメラ装置100において、記録系の構成は、図34を用いて説明した記録装置の構成を略そのまま適用できるので、図34と共通する部分には同一の符号を付し、詳細な説明を省略する。
図36の構成において、カメラ部50は、映像信号に関する構成として、光学系51、撮像素子52、撮像信号処理部53、カメラ制御部54、ビデオ信号処理部58および表示部55を有し、音声信号に関する構成として、マイクロフォン(MIC)56、音声信号処理部57およびスピーカ部SP60を有する。制御部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は、撮像素子52から出力された撮像信号の情報を制御部30に送る。制御部30は、この情報に基づき光学系51を制御するための制御信号を生成し、カメラ制御部54に供給する。カメラ制御部54は、この制御信号に基づきフォーカス調整機構や絞り調整機構などの制御を行う。
ビデオ信号処理部58は、供給されたディジタル信号に対して所定の信号処理を施す。例えば、ビデオ信号処理部58は、供給されたディジタル信号に対して検波系の信号処理を施し、R(赤色)、G(緑色)およびB(青色)各色の成分を取り出す。そして、取り出された各色成分に基づきγ補正やホワイトバランス補正などの処理を行い、最終的に1本のベースバンドのディジタルビデオデータとして出力する。
表示部55は、例えばLCD(Liquid Crystal Display)を表示素子として用い、ビデオ信号処理部58から供給されたディジタルビデオデータに基づく表示を行うことができる。表示部55は、撮影時には撮影画像のモニタとして用いられ、再生時には、再生画像を映出させることができる。
音声信号処理部57は、例えばマイクロフォンMIC56から供給されるアナログ音声信号をA/D変換してディジタルオーディオデータとし、ノイズ除去や音質補正など所定の音声信号処理を施してベースバンドのディジタルオーディオデータとして出力する。また、音声信号処理部57は、供給されるディジタルオーディオデータに対して音質補正や音量調整などの所定の音声信号処理を施してD/A変換してアナログ音声信号とし、増幅処理などを行いスピーカ部SP60に供給する。
する。
撮影時には、光学系51を介して撮像素子52に入射された光が光電変換により電気信号に変換され撮像信号として出力される。撮像信号は、撮像信号処理部53で所定に信号処理され、A/D変換されディジタルビデオ信号として出力される。このディジタルビデオ信号は、ビデオ信号処理部58に供給される。ビデオ信号処理部58は、供給されたディジタルビデオ信号に対して画質補正などの所定の信号処理を施してディジタルビデオデータとして出力する。このディジタルビデオデータは、記録再生部10に供給され端子40に入力される。
また、ビデオ信号処理部58は、撮像信号処理部53から供給されたディジタル信号に基づき、表示部55に表示するためのディジタルビデオデータを生成する。さらに、ビデオ信号処理部58は、制御部30とやりとりを行い、制御部30で所定に生成された表示制御信号に基づく画像を生成することができる。このディジタルビデオデータや画像は、表示部55に供給され、映出される。
一方、マイクロフォン56から出力された音声信号は、音声信号処理部57でノイズ除去、リミッタ処理、音質補正などの所定の信号処理を施され、さらにA/D変換され、ディジタルオーディオデータとして出力される。このディジタルオーディオデータは、記録再生部10に供給され、端子41に入力される。
記録停止状態からUI部31に設けられた記録スイッチが押下されると、記録開始を指示する制御信号がUI部31から制御部30に供給され、制御部30の制御に基づきカメラ部50から出力されたベースバンドのディジタルビデオデータおよびディジタルオーディオデータの記録媒体32への記録が開始される。
すなわち、図34を用いて既に説明したように、制御部30の制御に基づきビデオエンコーダ11およびオーディオエンコーダ12の動作が開始され、ビデオデータおよびオーディオデータがそれぞれビデオエンコーダ11およびオーディオエンコーダ12で圧縮符号化され、マルチプレクサ13で所定にパケット化され多重化されてAVストリームデータとされる。AVストリームデータは、ストリームバッファ14を介して、記録制御部15に供給され、クリップAVストリームファイルとして記録媒体32に記録される。
ここで、ビデオカメラ装置100が記録開始に応じて記録開始位置に自動的にプレイリストを設けるようにされている場合、図31を用いて説明した処理に従い、記録開始位置に対応する位置に対して自動的にプレイリストマークが設けられる。実際には、プレイリストファイルに格納される情報は、例えば揮発性メモリ17上において生成される。このプレイリストマークも、この時点では、揮発性メモリ17上の情報である。
UI部31の記録スイッチが次に押下されると、記録が停止され、クリップインフォメーションファイルの作成や、プレイリストファイルの更新が行われる。管理情報処理部16は、マルチプレクサ13および記録制御部15からの情報に基づき、記録媒体32に記録されるクリップAVストリームファイルに対応するクリップインフォメーションファイルを作成する。また、管理情報処理部16は、当該クリップインフォメーションファイルを参照するプレイアイテムを生成し、既にプレイリストが存在する場合には、生成されたプレイアイテムを当該プレイリストに対して追加すると共に、プレイリストに対してプレイリストマークの情報を格納する。
再生時には、記録媒体32がビデオカメラ装置100に装填されると、記録媒体32に記録されているインデックスファイル、ムービーオブジェクトファイルなどのファイルが読み出され、管理情報処理部16に供給される。制御部30は、管理情報処理部16からインデックスファイルの情報を取得し、取得された情報に基づき所定のメニュー画面を表示するための表示制御信号を生成する。この表示制御信号は、ビデオ信号処理部58に供給され、表示部55に表示される。この表示に応じてUI部31に対して所定の操作を行うと、例えば、記録媒体32から再生が指示されたプレイリストファイルが読み出され、このプレイリストファイルの記述に従い、記録媒体32に記録されたクリップの再生がなされる。
すなわち、図34を用いて既に説明したように、制御部30は、UI部31に対する操作に応じて管理情報処理具16からプレイリストファイルの情報を取得し、取得された情報に基づき、記録再生制御部15に対して記録媒体32からクリップインフォメーションファイルやクリップAVストリームファイルを読み出すように命令を出す。
記録媒体32から読み出されたクリップAVストリームファイルは、ストリームバッファ14を介してMUX/DEMUX13に供給され、パケットのヘッダ情報などに基づき多重化が分離され圧縮ビデオデータと圧縮オーディオデータとが取り出される。圧縮ビデオデータは、ビデオデコーダ20に供給されデコードされて、例えばPTSに従い端子42から出力される。圧縮オーディオデータは、オーディオデコーダ21に供給されデコードされ、ビデオデコーダ20から出力されるビデオデータと同期的に端子43から出力される。
端子42から出力されたビデオデータは、ビデオ信号処理部58で所定の信号処理を施され、表示部55に供給される。表示部55は、供給されたビデオデータに基づく画像を映出する。端子43から出力されたオーディオデータは、音声信号処理部57で所定に信号処理され、増幅処理なども行われ、スピーカ部60に供給される。
なお、このビデオカメラ装置100においても、クリップのチャプタ分割編集を行うことできる。チャプタ分割編集処理は、上述した実施の一形態による処理と何ら変わるところがないため、繁雑さを避けるために説明を省略する。また、チャプタジャンプの際の処理についても、上述した実施の一形態による処理と変わらないため、説明を省略する。
なお、上述では、図34に示す記録装置や図36に示すビデオカメラ装置100の記録再生部10がハードウェア的に構成されるように説明したが、これはこの例に限定されない。すなわち、記録再生部10は、ソフトウェアとして構成することも可能である。この場合、ソフトウェアは、例えば制御部30が有する図示されないROMに予め記憶される。これに限らず、記録再生部10を、パーソナルコンピュータなどのコンピュータ装置上に構成することも可能である。この場合には、記録再生部10をコンピュータ装置に実行させるソフトウェアは、CD−ROMやDVD−ROMといった記録媒体に記録されて提供される。コンピュータ装置がネットワーク接続可能な場合、インターネットなどのネットワークを介して当該ソフトウェアを提供することも可能である。
さらに、上述では、この発明が記録媒体にコンテンツデータなどを記録する記録装置または記録再生装置に適用されるように説明したが、これはこの例に限定されない。この発明は、記録媒体に対するコンテンツデータの記録手段や記録媒体からのコンテンツデータの再生手段を持たない、例えばコンテンツデータおよび当該コンテンツデータの再生制御情報(インデックスファイル、ムービーオブジェクト、プレイリストおよびクリップインフォメーションファイルなど)を編集する編集装置などにも適用可能なものである。この場合には、例えば、記録媒体からのデータの読み出しや記録媒体に対する書き込みは、編集装置に接続された記録再生装置により行うことが考えられる。