図1は、本発明を適用した光ディスク装置の構成例を示している、この光ディスク装置は、入力されるAV信号を例えば、MPEG方式等により圧縮符号化して多重化し、さらに、ファイル化して得られるAVストリームファイルをDVD-RAM等の光ディスク1に記録し、また、AVストリームファイルが記録されている光ディスク1からAV信号を再生するものである。この光ディスク装置では、1枚の書き換え可能な光ディスク1に対して1系統の光ヘッド2が設けられており、光ヘッド2は、データの読み出しと書き込みの双方に共用される。
光ヘッド2により光ディスク1から読み出されたビットストリームは、RFおよび復調/変調回路3で復調された後、ECC回路4で誤り訂正が施され、スイッチ5を介して、読み出しレートとデコード処理レートとの差を吸収するための読み出しチャネル用バッファ6に送られる。読み出しチャネル用バッファ6の出力はデコード7に供給されている。読み出しチャネル用バッファ6はシステムコントローラ13から読み書き制御ができるように構成されている。
読み出しチャネル用バッファ6から出力されたビットストリームは、デコーダ7でデコードされ、そこからビデオ信号とオーディオ信号が出力される。デコーダ7から出力されたビデオ信号は合成回路8に入力され、0SD(On Screen Display)制御回路9が出力するビデオ信号と合成された後、出力端子P1から図示せぬディスプレイに出力され、表示される。デコーダ7から出力されたオーディオ信号は、出力端子P2から図示せぬスピーカに送られて再生される。
他方、入力端子P3から入力されたビデオ信号、および入力端子P4から入力されたオーディオ信号は、エンコーダ10でエンコードされた後、エンコード処理レートと書き込みレートとの差を吸収するための書き込みチャネル用バッファ11に送られる。この書き込みチャネル用バッファ11もシステムコントローラ13から読み書き制御ができるように構成されている。
書き込みチャネル用バッファ11に蓄積されたデータは、書き込みチャネル用バッファ11から読み出され、スイッチ5を介してECC回路4に入力されて誤り訂正符号が付加された後、RFおよび復調/変調回路3で変調される。RFおよび復調/変調回路3より出力された信号(RF信号)は、光ヘッド2により光ディスク1に書き込まれる。
アドレス検出回路12は、光ディスク1の記録または再生するトラックのアドレス情報を検出する。システムコントローラ13は、この光ディスク装置の各部の動作を制御するものであり、各種の制御を行うCPU21、CPU21が実行すべき処理プログラム等を格納したROM22、処理過程で生じたデータ等を一時記憶するためのRAM23、および光ディスク1に対して記録または再生する各種の情報ファイルを記憶するRAM24を有している。CPU21は、アドレス検出回路12の検出結果に基づいて、光ヘッド2の位置を微調整する。CPU21はまた、スイッチ5の切り替え制御を行う。各種のスイッチ、ボタンなどから構成される入力部14は、各種の指令を入力するとき、ユーザにより操作される。
次に、光ディスク1に記録されるAVストリームファイルの一部の範囲または全範囲を指定して、指定した範囲だけを並べて再生する非破壊編集の仕組みについて説明する。
図2は、非破壊編集において再生する順序が記述されているPlaylistを示している。Playlistは、ユーザが指定する、連続して再生させる1以上のストリームに対応する単位である。ある1つのストリームに対して、記録開始位置から記録終了位置までを再生するように指定すれば、最も簡単な構成のPlaylistになる。
Playlistは、AVストリームを特定する情報と、当該AVストリーム中の再生開始点(IN点)および再生終了点(OUT点)を示す情報から構成される。AVストリームを特定する情報と、開始点および再生終了点を示す情報とを一組として、これをPlayitemと呼ぶ。すなわち、Playlistは1以上のPlayitemから構成される。
Playitemを再生すると、特定されるAVストリームのIN点からOUT点までの範囲が再生されることになる。
AVストリームは、MPEG2で規定されているトランスポートストリーム等の形式により多重化されているビットストリームであるが、当該AVストリームがファイル化されたAVストリームファイルとは別のファイル(以下、AVストリーム情報ファイルと記述する)として、当該AVストリームに関係する情報を保持しておくことで、再生、編集がより容易になる。AVストリームファイルと、AVストリーム情報ファイルを1つの情報単位としてのオブジェクトとみなし、Clipと呼ぶ。すなわち、図3のように、Clipは、1対1に対応するAVストリームファイルとAVストリーム情報ファイル(図3においてはstream attributesと表示している)から構成されるオブジェクトである。
図4に示すように、Playlist、Playitem、およびclipを階層的に設けることによって非破壊編集が可能となる。
ここで、Playitem間の接続点に注目する。2つのPlayitemは、それぞれ異なるClipを参照しているが、Playitemの接続点では、光ディスク1から読み込むトランスポートストリーム(AVストリーム)が不連続となる場合がある。不連続となる要因は、トランスポートストリームのsyntaxの不連続が存在する場合と、2つのファイルからの供給の不連続が有る場合である。
Playitemの接続点で不連続が有ると、再生される画像が静止画になったり、画像や音声が途切れたりするような再生品質の低下が発生する。しかしながら、Playitemの接続点を再生する前に予め、Playitemの接続点における不連続の要因を知っているならば、接続点での再生品質の低下を抑えることが可能となる。
Playitemの接続点において、2つのファイルからの供給の不連続が有る場合、ファイルの読み出し最低レートを保証すればよい。すなわち、読み出したAVストリームをデコード前に記憶する読み出しチャンネル用バッファ6がアンダフローにならないようにすればよい。
ここで、図1の光ディスク装置の再生系について、光ディスク1、読み出しチャンネル用バッファ6、およびデコーダ7だけに簡略化して考える。光ディスク1からは、ランダムアクセス中にはデータが読み取れないので、読み出しチャンネル用バッファ6がアンダフローしないようにするには、データが読み取れなくなるトラックジャンプを行う直前に、ある程度のデータを読み出しチャンネル用バッファ6に蓄積しておく必要がある。このような制御は、光ディスク1上の記録領域であるセクタを、ブロック化して扱うことで実現できる。
例えば、トラックジャンプせずに連続して読み出せる隣接したセクタの集合を考え、これをフラグメントと呼ぶことにする。フラグメントには、常にある一定の割合以上のデータが存在しているという規定を設ける。例えば、各フラグメントの中で、データが占めている割合は、常に1フラグメントのサイズの半分以上であるというルールを設ける。すなわち、フラグメント中のデータが占めている領域をセグメントと呼ぶとき、セグメントの大きさがフラグメントの半分より大きいという条件を設定する。当該一定の割合は、光ディスク1上の任意の位置にあるフラグメントから、任意の位置にあるフラグメントへのジャンプにかかる時間や、フラグメントのサイズやバースト読み出しレートなどを考慮して決めることになる。
このようにしておけば、ランダムアクセスのジャンプを、フラグメント単位で行うことにしたとき、フラグメントにある程度のデータが存在しているので、読み出しチャンネル用バッファ6に十分な量のデータが存在する状態でフラグメント間のジャンプを行うことができる。つまり、デコーダ7に対して最低レートを保証してデータを供給することが可能になる。
次に、トランスポートストリームのsyntaxに不連続が存在する場合について考える。通常、別個にMPEGエンコードされて多重化された2つのビットストリームを、それぞれトランスポートパケット単位で切断し、異なるビットストリームの切断面を接合しても、MPEGシステムズで規定されている正しいsyntaxのストリームになることはない。また、異なるトランスポートストリームでは、トランスポートストリームに含まれる時間軸の基準であるPCR(Program Clock Reference)も異なるので、接続点を跨いでデコードする場合、新たなPCRに基づいて時間軸を再設定する等の処理が必要になる。
したがって、playitemの接続点にsyntaxの不連続があるか否かの情報と、その不連続の種類の情報をデコードするときに知っても対処が間に合わないので、本発明の光ディスク装置では、playitemの接続点にsyntaxの不連続があるか否かの情報と、その不連続の種類の情報を予めデコーダ7に供給できるようになされている。
ここで、光ディスク1(以下、単にディスクとも記述する)に書き込まれるファイル配置について説明する。ディスク上には、図5に示すように、次の4種類のファイルが記録される。
info.dvr
playlist###.plst
%%%%.clpi
%%%%.mpg
ディスク上にはディレクトリ/DVRが設けられ、ディレクトリ/DVR以下が光ディスク装置により管理される範囲とする。ただし、ディレクトリ/DVRは、ディスクのルートディレクトリにあってもよいし、任意のディレクトリの下に存在していてもよい。
ディレクトリ/DVRには、ファイルinfo.dvrが配置される。また、ディレクトリ/DVRの下には、ディレクトリ/PLAYLIST、ディレクトリ/CLIPINF、およびディレクトリ/AVSTREAMが配置される。
ディレクトリ/PLAYLISTの下にはファイルplaylist###.plstが配置される。ディレクトリ/CLIPINFの下にはファイル%%%%.clpiが配置される。ディレクトリ/AVSTREAMの下にはファイル%%%%.mpgが配置される。
図6は、ディレクトリ/DVRの下に1つだけ配置されるファイルinfo.dvrの構造を示している。ファイルinfo.dvrは、機能別に分類される情報ごとにブロックが構成されている。volumeに関する情報は、ブロックDVRVolume()に格納される。Playlistの配列に関する情報は、ブロックPlayListBlock()に格納される。Clipの配列に関する情報は、ブロックClipList()に格納される。複数のvolumeを関連付けるための情報は、ブロックMultiVolume()に格納される。
ファイルinfo.dvrの先頭部分には、各ブロックの先頭が記録されるアドレスが記述されている。すなわち、DVRVolume_start_addressは、ブロックDVRVolume()が開始する位置を、ファイル内相対バイト数で表している。PlayListBlock_start_addressは、ブロックPlayListBlock()が開始する位置を、ファイル内相対バイト数で表している。ClipList_start_addressは、ブロックClipList()が開始する位置を、ファイル内相対バイト数で表している。MultiVolume_start_addressは、ブロックMultiVolume()が開始する位置を、ファイル内相対バイト数で表している。
ディレクトリ/CLIPINFの下のファイル%%%%.clpiは、ディレクトリ/AVSTREAMの下の各AVストリームファイル%%%%.mpgと1対1に対応して作られる。図7は、ファイル%%%%.clpiの構造を示している。ファイル%%%%.clpiも機能別に分類される情報ごとにブロックが構成されている。
Clipに関する情報は、ブロックClipInfo()に格納される。不連続点(不連続点で区切られる、連続な範囲に注目したときは、連続区間とも呼ぶ)に関する情報は、ブロックSequenceInfo()に格納される。AVストリーム中のランダムアクセス可能な特徴点を表すCPI(Characterristic Point Information)に関する情報は、ブロックCPI()に格納される。Clipに付与される頭出しのためのインデックス点やコマーシャルの開始・終了点などの情報は、ブロックMarkList()に格納される。ファイル%%%%.clpiの先頭部分には、各ブロックの先頭を表すアドレスが記述されている。
ディレクトリ/PLAYLISTの下のファイルplaylist###.plstは、各playlistに対して1つ作成される。図8は、ファイルplaylist###.plstの構造を示している。ファイルplaylist###.plstには、playlistに関する情報が格納されているブロックPlaylist()があり、ファイルの先頭部分には、そのブロックPlaylist()の先頭を表すアドレス(playlist_start_address)は、ファイルplaylist###.plstの先頭部分に記述されている。これにより、ブロックPlaylist()の前、または後にpadding_byteを挿入することが可能とされている。
図9は、ブロックPlayList()の構造を示している。version_numberは、以降に記述されている情報のバージョン番号を表す。aux_audio_valid_flagは、当該PlayListがアフレコ用オーディオを有しているか否かを表す。aux_audio_valid_flagが「否」を表している場合、aux_audio用のPlayItem()は無視され、再生されないことになる。
playlist_typeは、当該playlistの種類を表す。playlist_name_lengthは、当該playlistの名前のデータ長さを表す。名前を表す文字列は、playlist_name_lengthの直後のfor文により記述される。ResumeInfo()は、PlayListの再生を途中で終了させた場合、再生を中断した位置を表す情報が入る領域である。synchronous_start_ptsは、有効なaux_audio_pathが存在する場合、aux_audio_pathの開始時刻を表す。synchronous_start_ptsは、main pathとaux audio pathとの同期再生を実現するために用いられる。num_of_playitems_for_mainは、main pathを構成するPlayItemの数を表す。num_of_playitems_for_aux_audioは、aux_audio pathを構成するPlayItemの数を表す。PlaylistInfoDescriptor()は、このPlayListに関連する情報、内容説明等を格納するための領域であり、for文により、PlayListに関連する情報が記述される。
図10は、ブロックPlayItem()の構造を示している。file_name_lengthは、当該PlayItemが参照するClip情報ファイル(拡張子がclpiであるファイル)のファイル名のデータ長を表し、直後のfor文に当該ファイル名の文字列が格納される。program_numberは、当該PlayItemが参照するprogram(MPEGシステムズで定義されている、ビデオ・オーディオ等のエレメンタリストリームのまとまりを指す)を特定するprogram_numberを表す。
sequence_idは、program中に存在する、PCRが連続な時間範囲の区間を表す。当該区間においては、一貫した連続時間軸が定義できるので、PlayItemの開始点および終了点を一意に定めることができる。つまり、各PlayItemの開始点と終了点は、同一のsequenceに存在していなければならない。playitem_name_lengthは、このplayitemの名前のデータ長を表し、直後for文に名前の文字列が格納される。condition_INは、当該PlayItemの開始部分に該当するAVストリームデータの状態を表す。condition_OUTは、当該PlayItemの終了部分に該当するAVストリームデータの状態を表す。状態の詳細については図19を参照して後述する。
playitem_start_time_stampは、当該PlayItemの開始点におけるpts(presentation time stamp)を表す。ただし、condition_INが0x03であるときには、AVストリームファイルは最後まで読み込まれてデコードされるので、当該playitem_start_time_stampは不要になる。playitem_end_time_stampは、当該PlayItemの終了点におけるptsを表す。ただし、condition_OUTが0x03であるときには、AVストリームファイルは先頭から読み込まれてデコードされるので、当該playitem_end_time_stampは不要になる。
次に、上述したデータ構造を有するPlaylistの特性を列挙する。
1)Playlistは、Clipという「素材」の再生したい部分だけを、IN点(開始点)およびOUT点(終了点)により指定したものを集めたものである。
2)Playlistは、Clipと同様に、ユーザがひとまとまりとして認識する単位である。
3)Playlistは、非破壊のアセンブル編集を実現するための構造でもある。ClipとPlaylistは、Master-Slaveの関係であり、Playlistを作成、分割、併合、または消去してもClipは変化しない。
4)Clipの一部分を指定したものをPlayitemと呼ぶ。Playlistは、Playitemの配列で構成される。
5)Playitemは、主に、AVストリームファイルを特定するためのファイルidまたはファイル名、並びに、MPEG2トランスポートストリームに関して規定されているprogram_numberおよび当該program_numberに対応するprogram上のIN点とOUT点で構成される。Clip内では、programごとに、さらにPCRが連続な区間ごとにローカルな時間軸が定義されており、IN点およびOUT点はptsを用いて表現される。
6)Playlistを構成するPlayitemの再生指定範囲は、図11に示すように、ClipのPCR連続区間内で閉じている。
7)1つのPlayitemを2つ以上のPlaylistで共有することは出来ない。
8)ブリッジシーケンスを形成するClipからは、Playitemが1つだけ作られる。ブリッジシーケンスを形成するClipは、複数のPlayitem間で共有されない。
9)Playlistには、アフレコをすることができる。アフレコされる対象は非破壊の状態が維持される。アフレコ用のpathとして、図12に示すように、PlayList内にAUX Audio pathが1本設けられる。メイン出力となるビデオおよびオーディオのPlayitemの配列をmain pathと称する。
10)1本のpathにおいて、複数のPlayitemの再生時刻が時間的に重なることはない。2つ以上のPlayitemが1本のmain path上に並ぶ場合、Playitemは密に並べられ、再生時刻にギャップ(隙間)が存在してはならない。
11)Playlistの再生時間は、main pathの再生時間と同一である。
12)AUX Audio path上に存在するPlayitemの数は0または1である。
13)AUX Audio pathの再生開始時刻および終了時刻の範囲は、main pathの再生開始時刻および終了時刻の範囲を超えてはならない。
次に、Playlistに係わる非破壊編集時の操作について説明する。
1)Playlist作成
新たにAVストリームを記録した場合、AVストリームファイルとAVストリームファイル情報からなるClipが作成され、Clipを参照するPlayitemが作成され、Playlistが作成される。
2)消去
不要になった再生順序指定を消す場合、Playlistの全体、またはPlayitem単位で消去される。
3)分割
図13に示すように、1つPlaylistを構成するPlayitemを分割し、分割されたPlayitemで、それぞれPlaylist構成する。
4)併合(ノンシームレス・シームレス接続)
2つのPlaylistを接続して1つのPlaylistを構成する。接続点において、映像および音声の途切れがないようなシームレスに再生されるように併合するか、途切れが発生してもかまわないノンシームレスに再生されるように併合するかにより、併合処理が異なる。ノンシームレス再生されるように併合する場合には、新たなAVストリームを作成することなく、図14(A)に示すように、2つのPlaylistのPlayitemを単に再生順に一列に並べて、1つのPlaylistを構成すればよい。なお、図14(B)に示すように、併合するPlaylistをなすPlayitemが同一のClipを参照していて、かつ、参照される部分が連続している場合、Playitemも併合される。図15は、シームレスに再生できるように接続するためのブリッジシーケンス(詳細は後述する)を作成した例を表している。
5)移動
図16に示すように、Playlistの再生順序を規定するPlaylist blockでのPlaylistの並びが変更される。各Playlistは変更されない。
6)Clip変換
例えば、ビデオカメラで撮影した素材をClipとし、当該Clipを部分的に再生するようなPlaylistを作成したとする。Playlistが完成した後に、その再生順で再生する、ストリームの実体を伴うClipを新たに作りたい場合、図17に示すように、Playlistで指定された部分がコピーされて新たなClipが作成される(オリジナルのClipが新たなClipに変換される)。
7)Clipのミニマイズ
図18に示すように、Clipの、いずれのPlaylist(を構成するPlayitem)からも再生指定されていない部分が消去される。
8)Clipの消去
いずれのPlaylist(を構成するPlayitem)からも再生指定されていないClipが消去される。Clipのミニマイズ、およびClipの消去は、不要なデータを消去することによって、ディスクの空き容量を増やすための操作である。
次に、Playlistを構成するPlayitem間のシームレス再生について説明する。Playitem間のシームレス再生を実現するためには、各Playitemの接続点の状態を分類する必要がある。ここでは、Playitemの接続点の状態を、図19に示すようなAタイプ、Cタイプ、Dタイプ、またはEタイプの4種類のうちのいずれかに分類する。
Aタイプとは、PlayitemのIN点(開始点)およびOUT点(終了点)が、AVストリームの任意のピクチャを指している状態を表す。映像がMPEGビデオにより符号化されている場合、指定のピクチャは、Iピクチャであるとは限られず、Pピクチャ、またはBピクチャである場合がある。そのため、例えば、指定のピクチャがPピクチャ、またはBピクチャである場合、IN点で指定されたピクチャを表示するためには、IN点よりも以前のピクチャのデータを必要となる。Playitemがもつ情報はIN点のptsであるので、以前のピクチャのデータを読み込む位置は再生側が任意に決めることになる。よって、読み込み開始位置が前過ぎると、PピクチャまたはBピクチャを再生するためには不必要なデータまで読み込んでしまうことがある。同様に、OUT点のピクチャを表示するためには、表示はしないが、デコードには必要なピクチャのデータを読み込まなければならない。このような場合、OUT点のピクチャのデコードが完了したら、次のPlayitemのデータをデコードする前に、デコーダのフレームバッファをフラッシュする(データを消去する)必要がある。また、デコーダのバッファにデータがOUT点より後の不要なデータが貯まっている場合があるので、デコーダバッファもフラッシュする必要がある。
結局、Aタイプの接続面を再生する際には、連続デコードおよび連続表示等の通常の再生処理を中断し、上述したような、表示しないデータを読み込む処理が必要となる。このため、playitemの境界では再生がノンシームレスになる可能性がある。
Cタイプは、接続点がクリーンブレイク(clean break)である状態を表す。クリーンブレイクとは、デコードに必要ないデータを除くような末端処理がなされている状態である。この接続点は、接続点周辺のデータを多重分離してデコードし、再エンコードして、さらに再多重化して作られる。したがって、Aタイプのように、接続点の画像の前の画像のデータおよび後の画像のデータは必要とされない。接続点の状態をCタイプにするには、例えば、IN点に対応するピクチャを、GOP(Group Of Pictures)の先頭となるように再エンコードし、OUT点に対応するピクチャを、GOPの最後のピクチャとなるように再エンコードすればよい。ただし、Cタイプの接続点において、PCRは不連続である。
Dタイプは、AVストリームファイルの途中から飛び出したり、飛び込んだりする接続点であり、前後のPlayitemとはビットストリームがバイト精度で連続している状態を表す。したがって、Playitemの並び順に従ってAVストリームファイルから読み出せば、ファイルの乗り換えがあるにもかかわらず、連続したビットストリームが得られ、連続デコードが可能である。Dタイプとなる接続点は、ファイルの途中から抜けてブリッジシーケンスに入る場合、ブリッジシーケンスから抜けてファイルの途中に入る場合等に発生する。
Eタイプは、PlayitemがAVストリームファイルの先頭または最後であり、そこで前または後のPlayitemとバイト精度でビットストリームが連続している状態を表す。Dタイプとの違いは、Playitemで指したピクチャがちょうどファイルの先頭または最後の位置に格納されているか否かという点である。Eタイプはブリッジシーケンスや、連続したストリームを2つのファイルに分割した場合に発生する。
図20(A)は、2つのAVストリームの一部の範囲をIN点およびOUT点により指定したPlayitemを作り、それを並べてPlaylistを構成した例を示している。この場合、AVストリームに対しては特別な処理を行わず、単にPlayitemを並べただけであるので、2つのPlayitemの接続点は両方ともAタイプとなる。したがって、2つのPlayitemの間で画途切れ等の不連続が発生する可能性があり、シームレス再生は保証されない。
図20(B)は、両接続点がCタイプである例を示している。この場合、2つのPlayitemの間を跨いでもシームレス再生が保証される。
図20(C)は、元は1つであったAVストリームファイルを2つのファイルに分割し、それをPlayitemで接続した場合の例を示している。このように、分割されたAVストリームファイルをつないでいるPlayitemは、その接続点がEタイプとなる。したがって、AVストリームファイルの境界で引き続いてデータを読み込むようにすれば、特別な処理を実行することなく、連続したビットストリームが得られるので、シームレス再生が保証される。
図20(D)は、ブリッジシーケンスを作成して2つのPlayitemの間をシームレス再生できるようにした例を示している。ブリッジシーケンスは、元のAVストリームファイルを変更することなく、シームレス再生を実現するための方法である。元のAVストリームファイルが変更されない点が図20(B)に示した例との相異である。ここでは、ブリッジシーケンスに入るためにAVストリームファイルの途中から抜ける点と、ブリッジシーケンスから出てAVストリームファイルの途中に入る点がDタイプとなる。
次に、Dタイプの接続点を持つ2つのPlayitemの間をシームレス再生するための構造であるブリッジシーケンスについて説明する。ブリッジシーケンスとは、ディスク上の空き領域に、接続点周辺のAVストリームを用いて、コピーまたは一部再エンコードして作成した短いAVストリームである。再生時には、ブリッジシーケンスとしての短いAVストリームを再生することによってシームレスな接続を実現する。ブリッジシーケンスは、図21(A)に示すように、クリーンブレイクを挟んで2つのAVストリームファイルから構成される場合と、図21(B)に示すように、1つのAVストリームファイルから構成される場合がある。
クリーンブレイクは、2つのClipの間をシームレス再生する場合、または、2つのPlayitemの間をシームレス再生する場合に使われる。2つのClipの間をシームレス再生する場合において、再エンコードおよび再多重化を行うことで、シームレス接続されるAVストリームファイルの端は、図22(A)に示すように、クリーンブレイクとなる。通常、MPEG2システムズにおける多重化位相差のために、各エレメンタリストリームにおいて同時刻に表示すべきデータは、ファイル内の離れた位置にある。クリーンブレイクとは、この多重化位相差を考慮して、ある時刻の以前に表示されるエレメンタリストリームと以後に表示されるエレメンタリストリームが別々のファイルに分けられた状態である。当然、以前側のファイルに存在するビデオデータが表示される時刻と同時刻に再生されるオーディオデータも以前側のファイルに存在し、同様に、以後側のファイルに存在するビデオデータが表示される時刻と同時刻に再生されるオーディオデータも以後側のファイルに存在する。
ブリッジシーケンスは、例えば、2つのPlayitemの間をシームレス再生する場合において、図22(B)に示すように、オリジナルのAVストリームファイルとは独立したAVストリームファイルが形成される。ブリッジシーケンスは、接続点周辺のビットストリーム(オリジナルのAVストリームファイル)をコピーして新たなファイルを生成するが、デコードおよび再エンコードによって作り直されるのは、その一部分である。
次にブリッジシーケンス作成時の条件1−1乃至4−1について説明する。連続供給の保証および読み出しデータの連続性の必要から、ブリッジシーケンス上のポイントa,d,e,h(図21)は、以下に説明する条件を満たすバイト位置でなければならない。
フラグメント(fragment)とセグメント(segment)の関係に注目した場合におけるブリッジシーケンス作成条件を説明する。ここで、セグメントとは、フラグメントのうちデータで占められている部分を指している。
1−1)図23に示すように、ブリッジシーケンスS2,S3とブリッジシーケンスに出入りするセグメントS1,S4は、0.5フラグメント以上の大きさでなければならない。
ブリッジシーケンス作成条件2−2を説明する。
2−1)図24に示すように、ユーザが指定したOUT点に基づいてa点の位置を決める。
具体的には、フラグメントの後半(half of fragment)の部分であって、CPIが存在するソースパケット(source packet)の先頭をa点の候補とする。対象としているフラグメントの中にa点が見つからなければ、1つ前のフラグメントを対象に変えて、その中で条件を満たす点を捜す。ソースパケットとは、トランスポートパケットに4バイトの時刻情報が付加されたものである。a点が見つかるまで対象とするフラグメントを1つずつ遡る。a点からユーザが指定したOUT点までの部分は、そのままコピーされるか、あるいは再エンコードされてブリッジシーケンスに入る。フラグメントの後半の中にCPIが指す点が含まれているか否かと、含まれるCPIの数については、ビットレートに依存する。より具体的な処理については、図29のフローチャートを参照して後述する。
図25を参照して、アラインドユニット(Aligned Unit)とCPIの関係に注目した場合におけるブリッジシーケンス作成条件について説明する。なお、アラインドユニットとは、AVストリームをファイルに格納する際の単位であって、ファイルシステム上における連続する所定の数のセクタを1つの単位として扱うための構造である。アラインドユニットの先頭は、ソースパケットとアラインされている、つまり、アラインドユニットは必ずソースパケットの先頭から始まる。AVストリームファイルは、アラインドユニットの整数倍から構成されている。
また、CPIとは、AVストリーム中のランダムアクセス可能な位置(デコードを開始可能な位置)を指しており、AVストリーム中のピクチャのpts(presentation time stamp)と、そのピクチャのファイル内バイト位置がデータベースになっているものである。このCPIデータベースを参照することにより、PlayitemのIN点とOUT点を決めているタイムスタンプから、AVストリームファイル内のバイト位置に変換することができる。逆に、CPIデータベースが無ければ、表示時刻からファイル内バイト位置に変換することは困難であるので、ブリッジシーケンスとの接続点は、CPIで指された位置に合わせる必要がある。
上述した特徴を持つアラインドユニットとCPIに注目したときのブリッジシーケンス作成条件3−1乃至3−7を列挙する。
3−1)ブリッジシーケンスの先頭のポイントb(図25(A))は、ファイルの先頭であるのでアラインドユニットにアラインされている。
3−2)ポイントbはソースパケットの先頭でもある。
3−3)ポイントbからポイントdの範囲を1つのファイルとした場合は、その長さは、アラインドユニットの整数倍の長さでなければならない。
3−4)ポイントaはptsで指定されるが、バイト位置を知るためにCPIが参照される。したがって、ポイントaはCPIで指される点でなければならない(正確には、再生時はポイントaで指されるソースパケットの直前のバイトで抜け出ることになる)。
3−5)ポイントaからポイントbの間はバイト精度で連続である(Dタイプ−Eタイプ接続である)。したがって、ポイントbもCPIで指される点となる。
3−6)ポイントdはptsで指定されるので、ポイントeは、CPIで指される点でなければならない。
3−7)ポイントb,eは、CPIで指される点なので、ソースパケットの先頭でなければならない。ポイントa,eは、アラインドユニットとアラインされていなくてもよい。
次に、図26を参照してブリッジシーケンスを指すPlayitemの条件を説明する。ブリッジシーケンスは、図21に示したように、クリーンブレイクで分けられる2つのAVストリームとして構成する方法と、1つのAVストリームとして構成する方法の2種類ある。しかしどちらの方法でも、ブリッジシーケンスを指すPlayitemの数は2つである。それは、1つのAVストリームにした場合でも、その中にPCR不連続点があり、その個所でPlayitemを分けるからである。これは、playitemでの時刻管理を容易にするためと、PCR不連続点はPlayitemの境界でのみ発生する可能性があり、Playitemの中では発生しないという制約を設けることで、Playitemの再生中は不連続点を考慮しなくて済むようにするためである。
図10に示したブロックPlayitem()のsyntaxによれば、Playitemがもつ1組のIN点とOUT点は、共に同じsequence_idで指定されるPCRの連続した区間になければならない。以上により、PCR不連続点付近のブリッジシーケンス作成条件4−1は次のようになる。
4−1)playitemは、PCRが連続な範囲で指定できるものであるので、PCR不連続点Cにおいてplayitemは分割される。
以上のようなブリッジシーケンス作成条件1−1乃至4−1に従うことにより、シームレス再生可能なPlaylistを作成することが可能になる。
次に、Playlist作成時におけるPlayitemの接続点(condition_INおよびcondition_OUT)の状態の設定処理について、図27のフローチャートを参照して説明する。
ステップS1において、Clip中の再生したい範囲の入力が受け付けられる。これに対して、ユーザは、IN点およびOUT点を入力して再生したい範囲を指定する。ステップS2において、IN点およびOUT点の入力が終了したか否が判定され、IN点およびOUT点の入力が終了するまで、ユーザからのIN点およびOUT点の入力を受け付ける。IN点およびOUT点の入力が終了したと判定された場合、ステップS3に進む。
ステップS3において、再生する順序に従って、接続点の1つに注目する。ステップS4において、接続点においてシ−ムレス再生可能なように処理するか否かが判定される。シ−ムレス再生可能なように処理すると判定された場合、ステップS5に進む。
ステップS5において、参照されるClipを破壊せずに以降の処理を実行するか否かが判定される。参照されるClipを破壊せずに以降の処理を実行すると判定された場合、ステップS6に進み、ブリッジシーケンスが作成される。ステップS7において、新たに作成された2つのClipを参照する2つのPlayitemが接続点の間に挿入され、前側のPlayitemのCondition_outがDタイプとされて後側のPlayitemのCondition_INがEタイプとされるDタイプ−Eタイプ接続、前側のPlayitemのCondition_outがCタイプとされて後側のPlayitemのCondition_INがCタイプとされるCタイプ−Cタイプ接続、または、前側のPlayitemのCondition_outがEタイプとされて後側のPlayitemのCondition_INがDタイプとされるEタイプ−Dタイプ接続とされる。
ステップS8において、Playlistの中に未処理の接続点がまだ存在するか否かが判定され、未処理の接続点がまだ存在すると判定された場合、ステップS3に戻り、それ以降の処理が繰り返される。
なお、ステップS5において、参照されるClipを破壊して以降の処理を実行すると判定された場合、ステップS9に進み、クリーンブレイクが作成される。ステップS10において、Clipの一部が変更され、前側のPlayitemのCondition_outがCタイプとされて後側のPlayitemのCondition_INがCタイプとされるCタイプ−Cタイプ接続とされる。
また、ステップS4において、シ−ムレス再生可能なように処理しないと判定された場合、ステップS11に進む。ステップS11において、前側のPlayitemのCondition_outがAタイプとされて後側のPlayitemのCondition_INがAタイプとされるAタイプ−Aタイプ接続とされる。
次に、Playlistに基づく再生処理について、図28のフローチャートを参照して説明する。ステップS21において、既存のPlaylistの中から1つが選択される。ステップS22において、ステップS1で選択されたPlaylistを構成する先頭のPlayitemが選択されて当該先頭のPlayitemに基づいてClipの再生が開始される。ステップS23において、選択されたPlayitemに基づくClipの再生が終了したか否かが判定され、Playitemに基づくClipの再生が終了したと判定されるまで待機される。Playitemに基づくClipの再生が終了したと判定された場合、ステップS24に進む。
ステップS24において、現Playitemに続く次のPlayitemがあるか否かが判定される。次のPlayitemがないと判定された場合は、このPlaylist再生処理は終了されるが、次のPlayitemがあると判定された場合、ステップS25に進む。
ステップS25において、次のPlayitemとの接続点がAタイプ−Aタイプ接続であるか否かが判定される。次のPlayitemとの接続点がAタイプ−Aタイプ接続であると判定された場合、Playitemの接続点でギャップが発生するので、ステップS26に進み、デコーダがリセットされて復旧処理が実行される。ステップS27において、次のPlayitemに基づいてClipの再生が開始される。その後、ステップS23に戻り、それ以降の処理が繰り返される。
なお、ステップS25において、次のPlayitemとの接続点がAタイプ−Aタイプ接続ではないと判定された場合、ステップS28に進む。ステップS28において、次のPlayitemとの接続点がCタイプ−Cタイプ接続であるか否かが判定される。次のPlayitemとの接続点がCタイプ−Cタイプ接続であると判定された場合、ステップS29において、接続点はクリーンブレイクによって再生すると判断される。ステップS30において、前側のPlayitemが参照しているClipの最後のデータまでが読み込まれた後、次のPlayitemが参照するClipの先頭のデータから読み込みが開始される。デコーダによりPCRの切り替えがシームレスに行われる。ステップS27に進む。
ステップS28において、次のPlayitemとの接続点がCタイプ−Cタイプ接続ではないと判定された場合、ステップS31に進む。ステップS31において、次のPlayitemとの接続点がDタイプ−Eタイプ接続であるか否かが判定される。次のPlayitemとの接続点がDタイプ−Eタイプ接続であると判定された場合、ステップS32に進み、当該接続点はブリッジシーケンスに入る接続点であると判断される。ステップS33において、前側のPlayitemが指定しているPlayitem_end_time_stampとCPIが参照されてClipの途中で読み込みが停止され、次のPlayitemが参照するClipの先頭のデータから読み込みが開始される。読み込まれたデータは読み込まれた順番にデコードされる。ステップS27に進む。
ステップS31において、次のPlayitemとの接続点がDタイプ−Eタイプ接続ではないと判定された場合、ステップS34に進む。ステップS34において、次のPlayitemとの接続点がEタイプ−Dタイプ接続であるか否かが判定される。次のPlayitemとの接続点がEタイプ−Dタイプ接続であると判定された場合、ステップS35に進み、当該接続点はブリッジシーケンスから抜ける接続点であると判断される。ステップS36において、前側のPlayitemが参照しているClipの最後のデータまでが読み込まれた後、次のPlayitemが指定しているPlayitem_start_time_stampとCPIが参照されてClipの途中から読み込みが開始される。読み込まれたデータは読み込まれた順番にデコードされる。ステップS27に進む。
ステップS34において、次のPlayitemとの接続点がEタイプ−Dタイプ接続ではないと判定された場合、ステップS37に進む。ステップS37において、当該接続点はEタイプ−Eタイプ接続であると判断される。ファイルの区切りは考慮されずにデータが読み込まれ、読み込まれた順番にデコードすればシームレスに再生される。ステップS27に進む。
次に、ブリッジシーケンス作成条件2−2「ユーザが指定したOUT点に基づいてa点の位置を決める」の具体的な処理について、図29のフローチャートを参照して説明する。
ステップS51において、ClipからのOUT点が指定される。ステップS52において、OUT点の時刻がCPI上であるか否かが判定される。OUT点の再生時刻がCPI上ではないと判定された場合、ステップS53に進む。ステップS53において、OUT点の時刻以前の時刻に対応するCPIで示される点が存在すれば、その最も時刻が近い点が新たなOUT点とされる。なお、ステップS52において、OUT点の再生時刻がCPI上であると判定された場合、ステップS53の処理はスキップされる。
ステップS54において、フラグメントの先頭からOUT点までの大きさ(バイト数)がフラグメントの半分よりも大きいか否かが判定される。フラグメントの先頭からOUT点までの大きさがフラグメントの半分よりも大きいと判定された場合、ステップS55に進む。
ステップS55において、OUT点で指定された時刻が当該PlayitemのPlayitem_end_time_stampとされる。ステップS56において、当該Playitemのcondition_outがDタイプとされる。ステップS57において、Playitem_end_time_stamp以降のデータがコピーされて、ブリッジシーケンスの前半部分のClipが新規に生成される。新規に生成されたClipとは、Dタイプ−Eタイプ接続とされる。
ステップS54において、フラグメントの先頭からOUT点までの大きさがフラグメントの半分よりも大きくないと判定された場合、ステップS58に進む。ステップS58において、1つ前のセグメントが存在するか否かが判定される。1つ前のセグメントが存在すると判定された場合、ステップS59に進む。ステップS59において、1つ前のセグメントに探索範囲が変更される。ステップS60において、1つ前のセグメントに存在し、かつ、CPIで示される再生時刻が最も遅い点がOUT点とされる。ステップS54に戻る。
なお、ステップS58において、1つ前のセグメントが存在しないと判定された場合、ステップS61に進み、当該Playitemのcondition_outをDタイプとすることは不可能であると判断されて、condition_outがAタイプとされる。
以上のように、本発明によれば、AVストリームファイルとは独立したファイルであり、かつ、AVストリームを指すリンク構造だけを持つPlaylistに、Playitem間の接続点の状態を示す情報を持たせることによって、再生品質の向上が可能となる。
なお、本実施の形態においては、AVストリームファイル等を記録するメディアを光ディスクとしたが、ランダムアクセス可能なメディアであれば、他のメディアを用いてもかまわない。
ところで、上述した一連の処理は、ハードウェアにより実行させることもできるが、ソフトウェアにより実行させることもできる。一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、記録媒体からインストールされる。
この記録媒体は、コンピュータとは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク(フロッピディスクを含む)、光ディスク(CD-ROM(Compact Disc-Read Only Memory)、DVD(Digital Versatile Disc)を含む)、光磁気ディスク(MD(Mini Disc)を含む)、もしくは半導体メモリなどよりなるパッケージメディアにより構成されるだけでなく、コンピュータに予め組み込まれた状態でユーザに提供される、プログラムが記録されているROM(図1のROM22に相当する)やハードディスクなどで構成される。
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に従って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。