以下、この発明について、下記の構成に従い説明する。
1.BDAVフォーマットの概要
2.発明の実施の第1の形態
2−1.プレーンについて
2−2.メニュー画面
2−3.シナリオについて
2−4.仮想プレーヤモデルについて
2−5.メソッドについて
2−6.シナリオの実行について
2−7.デコーダモデル
2−8.ユーザインターフェイス
2−9.データ構造について
2−10.グラフィクスオブジェクトのデコーダモデルについて
2−11.グラフィクスの転送速度について
2−12.グラフィクスオブジェクトの構造の詳細
2−13.効果音について
2−14.音声データのディスクへの格納方法について
2−14a.第1の格納方法
2−14b.第2の格納方法
2−14c.第3の格納方法
2−15.プレーンの別の例について
2−16.デコーダモデルの別の例について
2−17.デコーダモデルのさらに別の例について
3.発明の実施の第2の形態
3−1.シナリオについて
3−2.シナリオの分類
3−3.仮想プレーヤモデルについて
3−4.シンタクスについて
3−5.コマンドについて
4.その他
1.BDAVフォーマットの概要
先ず、理解を容易とするために、Blu−ray Discに関し、"Blu-ray Disc Rewritable Format Ver1.0 part3 Audio Visual Specifications"で規定されている、コンテンツすなわちディスクに記録されたAV(Audio/Video)データの管理構造について説明する。以下では、この管理構造をBDAVフォーマットと称する。
例えばMPEG(Moving Pictures Experts Group)ビデオやMPEGオーディオなどの符号化方式で符号化され、MPEG2システムに従い多重化されたビットストリームは、クリップAVストリーム(またはAVストリーム)と称される。クリップAVストリームは、Blu−ray Discに関する規格の一つである"Blu-ray Disc Rewritable Format Ver1.0 part2"で定義されたファイルシステムにより、ファイルとしてディスクに記録される。このファイルを、クリップAVストリームファイル(またはAVストリームファイル)と称する。
クリップAVストリームファイルは、ファイルシステム上での管理単位であり、ユーザにとって必ずしも分かりやすい管理単位であるとは限らない。ユーザの利便性を考えた場合、複数のクリップAVストリームファイルに分割された映像コンテンツを一つにまとめて再生する仕組みや、クリップAVストリームファイルの一部だけを再生する仕組み、さらには、特殊再生や頭出し再生を滑らかに行うための情報などをデータベースとしてディスクに記録しておく必要がある。Blu−ray Discに関する規格の一つである"Blu-ray Disc Rewritable Format Ver1.0 part3"で、このデータベースが規定される。
図1は、AVストリームファイルの一部または全部の範囲を指定して、必要な部分だけを並べて再生する再生順序指定の仕組みを模式的に示す。図1において、プレイリスト(PlayList)は、AVストリームファイルの一部または全部の範囲を指定して、必要な部分だけを再生する指示を与える。ユーザがコンテンツの再生を行う際には、このプレイリストの単位で選択する。つまり、プレイリストは、ユーザからみてひとまとまり、すなわち、再生が連続に行われることをユーザが暗黙に期待する、映像・音声の単位である。
最も簡単なプレイリストの構成は、記録が開始されてから記録が終了されるまでの一繋がりのAVストリームファイルからなり、編集をしなければ、これが一つのプレイリストになる。
プレイリストは、再生するAVストリームファイルの指定と、指定されたAVストリームファイルの再生箇所を指定する再生開始点と再生終了点の集まりとから構成される。この再生開始点と再生終了点の情報を一組としたものは、プレイアイテム(PlayItem)と称される。プレイリストは、プレイアイテムの集合で構成される。プレイアイテムを再生するということは、そのプレイアイテムに参照されるAVストリームファイルの一部分を再生するということになる。
クリップAVストリームは、上述したように、ビデオデータやオーディオデータがMPEG2 TS(トランスポートストリーム)の形式などに多重化されたビットストリームである。このクリップAVストリームに関する情報がクリップ情報(Clip Information)としてファイルに記録される。
クリップAVストリームファイルと、対応するクリップ情報が記録されたクリップ情報ファイルとをひとまとまりのオブジェクトと見なし、クリップ(Clip)と称する。すなわち、クリップは、クリップAVストリームとクリップ情報とから構成される、一つのオブジェクトである。
ファイルは、一般的に、バイト列として扱われる。クリップAVストリームファイルのコンテンツは、時間軸上に展開され、クリップ中のエントリーポイントは、主に時間ベースで指定される。所定のクリップへのアクセスポイントのタイムスタンプが与えられた場合、クリップAVストリームファイルの中でデータの読み出しを開始すべきアドレス情報を見つけるために、クリップ情報ファイルを用いることができる。
1のディスク中に記録された全てのプレイリストおよびクリップは、ボリュームインフォメーション(Volume Information)で管理される。
図2は、上述のようなクリップAVストリーム、クリップ情報(Stream Attributes)、クリップ、プレイアイテムおよびプレイリストの関係を示すUML(Unified Modeling Language)図である。プレイリストは、1または複数のプレイアイテムに対応付けられ、プレイアイテムは、1のクリップに対応付けられる。1のクリップに対して、それぞれ開始点および/または終了点が異なる複数のプレイアイテムを対応付けることができる。1のクリップから1のクリップAVストリームファイルが参照される。同様に、1のクリップから1のクリップ情報ファイルが参照される。また、クリップAVストリームファイルとクリップ情報ファイルとは、1対1の対応関係を有する。このような構造を定義することにより、クリップAVストリームファイルを変更することなく、任意の部分だけを再生する、非破壊の再生順序指定を行うことが可能となる。
また、図3のように、複数のプレイリストから同一のクリップを参照することもできる。図3の例では、クリップ1が2つのプレイリスト2および3から参照されている。図3において、クリップ1は、横方向が時間軸を表す。プレイリスト2により、コマーシャル区間b−cとシーンeとを含むクリップ1の区間a〜fが参照される。一方、プレイリスト3により、シーンeを含むクリップ1の区間d−gが参照される。プレイリスト2を指定することで、クリップ1の区間a〜fを再生することができ、プレイリスト3を指定することで、クリップ1の区間d−gを再生することができる。
次に、"Blu-ray Disc Rewritable Format Ver1.0 part3"で規定された、記録媒体に記録されるファイルの管理構造について、図4を用いて説明する。ファイルは、ディレクトリ構造により階層的に管理される。記録媒体上には、先ず、1つのディレクトリ(図4の例ではルートディレクトリ)が作成される。このディレクトリの下が、1つの記録再生システムで管理される範囲とする。
ルートディレクトリの配下に、ディレクトリBDAVが置かれる。ディレクトリBDAVは、図4のように、ディレクトリBDAV、BDAV1、BDAV2、・・・、BDAVnの如く、ルートディレクトリの配下に複数を置くことができる。以下では、複数のディレクトリBDAV、BDAV1、BDAV2、・・・、BDAVnをディレクトリBDAVで代表させて説明する。
ディレクトリBDAVの配下には、以下の6種類のファイルが置かれる。
(1)info.bdav
(2)menu.tidx、mark.tidx
(3)menu.tdt1、menu.tdt2、mark.tdt1、mark.tdt2
(4)#####.rpls、#####.vpls
(5)%%%%%.clpi
(6)*****.m2ts
なお、(4)のファイル「#####.rpls」および「#####.vpls」において、「#####」は、任意の番号を示す。同様に、(5)のファイル「%%%%%.clpi」において、「%%%%%」は任意の番号を示す。また、(6)のファイル「*****.m2ts」において、「*****」は、ファイル「*****.m2ts」がファイル「%%%%%.clpi」と一対一で対応するような番号である。例えば、番号「*****」は、番号「%%%%%」と同一とすることができる。
(1)のファイル「info.bdav」は、ディレクトリBDAV全体の情報が格納されるファイルである。(2)のファイル「menu.tidx」および「mark.tidx」は、サムネイル画像の情報が格納されるファイルである。(3)のファイル「menu.tdt1」、「menu.tdt2」、「mark.tdt1」および「mark.tdt2」は、サムネイル画像が格納されるファイルである。各ファイルの拡張子「tdt1」および「tdt2」は、当該ファイルに格納されているサムネイル画像データが暗号化されているか否かを示す。
(4)のファイル「#####.rpls」、「#####.vpls」は、プレイリストの情報が格納されるファイルである。ファイル「#####.rpls」、「#####.vpls」は、ディレクトリBDAVの配下に設けられたディレクトリPLAYLISTのさらに配下に置かれている。
(5)のファイル「%%%%%.clpi」は、クリップ情報が格納されるファイルである。ファイル「%%%%%.clpi」は、ディレクトリBDAVの配下に設けられたディレクトリCLIPINFのさらに配下に置かれている。(6)のファイル「*****.m2ts」は、クリップAVストリームが格納される、クリップAVストリームファイルである。このクリップAVストリームファイルは、ファイル名の番号「*****」により、1つのクリップ情報ファイル「%%%%%.clpi」に対応付けられる。ファイル「*****.m2ts」は、ディレクトリBDAVの配下に設けられたディレクトリSTREAMのさらに配下に置かれる。
各ファイルについて、より詳細に説明する。(1)のファイル「info.bdav」は、ディレクトリBDAVの配下に唯一、設けられる。図5は、ファイル「info.bdav」の一例の構造を表すシンタクスを示す。ここでは、シンタクスをコンピュータ装置などのプログラムの記述言語として用いられるC言語の記述法に基づき示す。これは、他のシンタクスを表す図において、同様である。
図5において、ファイル「info.bdav」の内部は、機能別の情報毎にブロックが構成される。フィールドtype_indicatorは、文字列「BDAV」が格納され、このファイルがファイル「info.bdav」であることが示される。フィールドversion_numberは、このファイル「info.bdav」のバージョンが示される。ブロックUIAppInfoBDAV()は、ディレクトリBDAVの配下に関する情報が格納される。ブロックTableOfPlayLists()は、プレイリストの並びに関する情報が格納される。ブロックMakersPrivateData()は、記録再生装置のメーカ固有の情報が格納される。
ファイル「info.bdav」の先頭には、各ブロックの先頭を表すアドレスが記述される。例えば、フィールドTableOfPlayLists_Start_addressは、ブロック「TableOfPlayLists()」の開始する位置がファイル内の相対バイト数で示される。
図6は、ブロックUIAppInfoBDAV()の一例の構造を表すシンタクスを示す。フィールドlengthは、フィールドlength直後のフィールドからこのブロックUIAppInfoBDAV()の最後までの長さがバイトで示される。フィールドBDAV_character_setは、このブロックUIAppInfoBDAV()内のフィールドBDAV_nameに記録されている文字列の文字セットが示される。文字セットとしては、ASCII、Unicodeなどが選択できる。
フラグBDAV_protect_flagは、ディレクトリBDAVの配下に置かれるコンテンツを、ユーザに制限無しに見せて良いか否かを示す。例えば、このフラグが値「1」にセットされており、且つ、ユーザが正しく暗証番号PIN(Personal Identification Number)を入力できた場合に、ディレクトリBDAVの配下に置かれたコンテンツをユーザに見せることができるものとする。一方、フラグBDAV_protect_flagが値「0」にセットされている場合には、ユーザによる暗証番号PINの入力が無くても、ディレクトリBDAVの配下に置かれたコンテンツをユーザに見せることができる。
暗証番号PINは、フィールドPINに記録される。暗証番号PINは、例えば4桁の0〜9の数字からなり、上述のように再生制御を有効にした場合に必要となる暗証番号を表す。暗証番号PINのそれぞれの数字は、例えばISO(International Organization for Standarization)/IEC(International Electrotechnical Commission)646の規定に従って符号化される。
このブロックUIAppInfoBDAV()に示される以上の情報により、ディレクトリBDAVに対する再生制限が規定される。なお、詳細は後述するが、個々のプレイリストに対する再生制限については、ファイル「#####.rpls」、「#####.vpls」内に示されるブロックUIAppInfoPlayList()の中で定義されるフラグplayback_control_flagによって規定される。
この例では、ディレクトリBDAVの配下のコンテンツの再生を再開する際に、優先して再生すべきプレイリストを指定する、レジューム機能を用いることができる。このレジューム機能は、前回視聴を中断した箇所から再生を再開したい場合などに使うことを想定している。
図6において、フラグresume_valid_flagは、このレジューム機能の有効/無効を示す。例えば、このフラグが値「0」にセットされている場合には、レジューム機能は無効とされ、このフラグが値「1」にセットされている場合には、レジューム機能が有効とされ、その際、フィールドresume_PlayList_file_nameで指定されるプレイリストを、優先して再生すべきプレイリストとして扱う。
フィールドref_to_menu_thumbnail_indexは、このディレクトリBDAVを代表するサムネイル画像が存在する場合、そのサムネイル画像を特定するサムネイル番号が格納される領域である。Blu−ray Discの規格では、ディレクトリBDAVを代表する静止画を特にメニューサムネイルと呼ぶ。フィールドref_to_menu_thumbnail_indexで指定されるインデックスthumbnail_indexを持つサムネイル画像がこのディレクトリBDAVのメニューサムネイルとなる。
フィールドBDAV_name_lengthは、フィールドBDAV_nameに示されるディレクトリBDAV名のバイト長を示す。このフィールドBDAV_nameにおいて、左から、フィールドBDAV_name_lengthで示されるだけのバイト数が有効な文字列であり、それがこのディレクトリBDAVの名前を示す。なお、フィールドBDAV_nameの中で、フィールドBDAV_name_lengthで示された有効な文字列の後のバイト列には、どのような値が入っていても良い。
図7は、ブロックTableOfPlayLists()の一例の構造を表すシンタクスを示す。フィールドnumber_of_PlayListsは、このディレクトリBDAVの配下に置かれたプレイリストの数が示される。このプレイリスト数をループ変数とする、次に続く「for」文のループにおいてフィールドPlayList_file_nameにより示されるプレイリストの並びが、プレイリスト一覧表示画面などに表示される際のプレイリストの順序を示す。プレイリストは、フィールドPlayList_file_nameにより、「#####.rpls」や「#####.vpls」といったファイル名で指定される。
ファイル「#####.rpls」および「#####.vpls」は、上述したように、ディレクトリPLAYLISTの配下に置かれる。これらのファイルは、1つのプレイリストと一対一に対応している。
図8は、ファイル「#####.rpls」および「#####.vpls」の一例の構造を表すシンタクスを示す。図8において、ファイル「#####.rpls」および「#####.vpls」の内部は、機能別の情報毎にブロックが構成される。フィールドtype_indicatorにこのファイルを示す文字列が格納され、フィールドversion_numberにこのファイルのバージョンが示される。
ブロックUIAppInfoPlayList()は、このプレイリストに関する属性情報が格納される。ブロックPlayList()は、このプレイリストを構成するプレイアイテムに関する情報が格納される。ブロックPlayListMark()は、このプレイリストに付されるマークの情報が格納される。ブロックMakersPrivateData()は、このプレイリストファイルを記録した装置の、メーカ固有の情報が格納される。ファイル「#####.rpls」および「#####.vpls」の先頭に設けられるフィールドPlayList_start_address、PlayListMark_start_addressおよびMakersPrivateData_start_addressには、それぞれ対応するブロックの先頭アドレスが例えば32ビットのアドレス情報として示される。
各ブロックの先頭アドレスがファイル「#####.rpls」および「#####.vpls」の先頭に示されるために、ブロックの前および/または後ろに、任意の長さのデータpadding_wordを挿入することができる。但し、ファイル「#####.rpls」および「#####.vpls」の最初のブロックであるブロックUIAppInfoPlayList()の開始位置は、ファイルの先頭から320バイト目に固定される。
図9は、ブロックUIAppInfoPlayList()の一例の構造を表すシンタクスを示す。ブロックUIAppInfoPlayList()は、プレイリストの再生において直接的に必要とされない、プレイリストに関する各種の属性情報が格納される。フィールドPlayList_character_setは、プレイリストに関する文字列情報の文字セットが指定される。
フラグplayback_control_flagは、情報表示やプレイリストの再生を暗証番号PINに基づき制限するか否かが指定される。例えばフラグplayback_control_flagが値「1」であれば、ユーザにより正しい暗証番号PINが入力されなければ、プレイリストのサムネイル画像などの情報表示や、プレイリストの再生ができないとされる。フラグwrite_protect_flagは、消去禁止フラグである。例えばこのフラグwrite_protect_flagが値「1」であれば、ユーザが容易にプレイリストを消去できないようなユーザインタフェースにする必要がある。フラグis_played_flagは、このプレイリストが再生済みであることを示す。フラグis_edited_flagは、このプレイリストが編集されたことを示す。
フィールドtime_zoneは、このプレイリストが記録された地点のタイムゾーンを示す。フィールドrecord_time_and_dateは、プレイリストの記録日時を示す。フィールドPlayList_durationは、プレイリストの再生時間を示す。
フィールドmaker_IDおよびmaker_model_codeは、このプレイリストを最終更新した記録機のメーカおよび記録機をそれぞれ特定する情報が例えば番号で示される。フィールドchannel_numberは、記録したクリップAVストリームのチャンネル番号が示され、フィールドchannel_nameは、当該チャンネル名が示される。フィールドchannel_nameに示されるチャンネル名の長さがフィールドchannel_name_lengthに示される。フィールドchannel_name の領域のうち、フィールドchannel_name_lengthで示される長さの文字列が有効となる。フィールドPlayList_nameは、フィールドPlayList_name_lengthに示される値を有効長としてプレイリスト名が示される。フィールドPlayList_detailは、フィールドPlayList_detail_lengthに示される値を有効長としてプレイリストの詳細情報が示される。
図10は、ブロックPlayList()の一例の構造を表すシンタクスを示す。フィールドlengthは、フィールドlengthの直後のフィールドからこのブロックPlayList()の終端までのバイト長を示す。フィールドPL_CPI_typeは、このプレイリストが持つCPI(Characteristic Point Information:特徴点情報)の種類を示す。フィールドnumber_of_PlayItemsは、このプレイリストを構成するプレイアイテムの数を示す。フィールドnumber_of_SubPlayItemsは、このプレイリストに付けられているアフレコオーディオ用のプレイアイテム(サブプレイアイテム)の数を示す。詳細は省略するが、プレイリストは、所定の条件を満たす場合にだけ、サブプレイアイテムを持つことができる。
ブロックPlayItem()は、プレイアイテムの情報が格納される。ブロックSubPlayItem()は、サブプレイアイテムの情報が格納される。
図11は、ブロックPlayItem()の一例の構造を表すシンタクスを示す。フィールドClip_Information_file_nameは、このプレイアイテムが参照しているクリップと一対一に対応するクリップ情報ファイル(拡張子がclpiであるファイル)のファイル名が文字列で示される。クリップ情報ファイルは、拡張子が「clpi」とされているファイルである。
フィールドClip_codec_identifierは、このプレイアイテムにより参照されるクリップの符号化方式を示す。この例では、フィールドClip_codec_Identifierは、値「M2TS」に固定的とされる。フィールドconnection_conditionは、このプレイアイテムが次のプレイアイテムとの間でどのような接続がされているかを示す情報である。すなわち、フィールドconnection_conditionにより、プレイアイテムとプレイアイテムとの間が継ぎ目なくシームレスに再生できるか否かが示される。
フィールドref_to_STC_idは、このプレイアイテムにより参照されるクリップ内のシーケンスSTC_sequenceを指定する。シーケンスSTC_sequenceは、MPEG2 TS(Transport Stream)における時間軸の基準であるPCR(Program Clock Reference)が連続な範囲を表すBlu−ray Disc規格独自の構造である。シーケンスSTC_sequenceには、クリップ内で一意な番号STC_idが割り当てられる。このシーケンスSTC_sequence内では、不連続の無い一貫した時間軸を定義できるので、プレイアイテムの開始時刻および終了時刻を一意に定めることができる。つまり、各プレイアイテムの開始点と終了点は、同一のシーケンスSTC_sequenceに存在していなければならない。フィールドref_to_STC_idでは、番号STC_idによりシーケンスSTC_sequenceが指定される。
フィールドIN_timeおよびOUT_Timeは、このプレイアイテムにおける開始点および終了点の、シーケンスSTC_sequence 上でのタイムスタンプpts(presentation_time_stamp)をそれぞれ示す。
ブロックBridgeSequnceInfo()は、ブリッジクリップ(Bridge-Clip)に関する情報が格納される。ブリッジクリップは、図12に一例が示されるように、プレイアイテム間を継ぎ目無く、シームレスに再生する機能を実現する際に作成されるビットストリームである。前のプレイアイテムと現在のプレイアイテムとの継ぎ目の部分で、本来再生すべきビットストリームとは異なるビットストリーム、すなわちブリッジクリップを代わりに再生することで、2つのプレイアイテムをシームレスに再生することができる。このブリッジクリップによる機能は、この発明と関連性が低いので、詳細は省略する。
図13は、ブロックPlayListMark()の一例の構造を表すシンタクスを示す。ブロックPlayListMark()は、マークの情報が格納されるデータ構造である。マークは、プレイリスト上の時刻を保持するための構造であって、マークを用いることにより、プレイリスト中への頭出し点の設定、プレイリストを細分化するチャプタの構造を設ける、などの機能が実現される。さらに、後述するグラフィクスプレーン上に描画された画像の表示開始/停止のタイミングを、マークを用いて指定することができる。
フィールドlengthは、フィールドlengthの直後のフィールドからブロックPlayListMark()の終端までのバイト長を示す。フィールドnumber_of_PlayList_marksは、プレイリスト中のマークの数を表す。「for」文での1回のループが1つのマークの情報を示す。フラグmark_invalid_flagは、このマークが有効であるか否かを示す。例えば、フラグmark_invalid_flagが値「0」でそのマークが有効であることが示され、値「1」であれば、そのマークの情報がデータベース上に存在するが、当該マークがユーザには見えない無効マークとされていることを示す。
フィールドmark_typeは、このマークの種類を表す。マークの種類としては、プレイリストのサムネイル画像(代表画)とする映像の位置を示すマーク、どこまで再生したかを示すレジュームマーク、頭出し点を示すチャプタマーク、ある区間の再生を飛ばして先に進むことを示すスキップマーク、グラフィクス画像の読み込み開始タイミングを示すマーク、グラフィクス画像の表示開始のタイミングを示すマーク、グラフィクス画像の表示停止のタイミングを示すマークなどがある。
フィールドmark_name_lengthは、後述するフィールドmark_nameのデータ長を示す。フィールドmaker_IDは、このマークを作成した記録機の製造者を示す。これは、製造者独自のマークを識別する際に用いられる。フィールドref_to_PlayItem_idは、このマークにより指示される時刻がどのプレイアイテム上に存在するかが示される。フィールドmark_time_stampは、このマークにより指示される時刻が示される。
フィールドentry_ES_PIDは、このマークがどのエレメンタリストリームすなわち映像データおよび/または音声データが符号化されたストリームに対して付与されたものかが示される。フィールドref_to_menu_thumbnail_indexおよびフィールドref_to_mark_thumbnail_indexは、マークを視覚的に表すサムネイル画像を示す。サムネイル画像としては、例えばそのマークにより指定される時刻の映像を静止画として抜き出した画像が考えられる。
フィールドdurationは、マークが時間軸上で長さを持つ場合に使われる。例えばスキップマークであれば、どのくらいの時間ジャンプをするかがフィールドdurationにより指定される。
フィールドmakers_informationは、製造者独自の情報を記録するための領域である。フィールドmark_nameは、マークに名前をつけた際、その名前を格納するための領域であり、サイズが上述のフィールドmark_name_lengthで指定される。
図14は、ファイル「%%%%%.clpi」の一例の構造を表すシンタクスを示す。上述したように、ファイル「%%%%%.clpi」は、ディレクトリCLIPINFの配下に置かれ、各AVストリームファイル(ファイル「*****.m2ts」)毎に作られる。ファイル「%%%%%.clpi」の内部は、機能別の情報毎にブロックが構成される。フィールドtype_indicatorにこのファイルを示す文字列が格納され、フィールドversion_numberにこのファイルのバージョンが示される。
ブロックClipInfo()は、クリップに関する情報が格納される。ブロックSequenceInfo()は、MPEG2システムにおけるトランスポートストリームの時刻基準を表すPCRの不連続点に関する情報が格納される。ブロックProgramInfo()は、MPEG2システムのプログラムに関する情報が格納される。ブロックCPI()は、ランダムアクセス開始可能点などの、AVストリーム中の特徴的な箇所を表す特徴点情報CPIに関する情報が格納される。ブロックClipMark()は、クリップに付された頭出しのためのインデックス点やコマーシャルの開始および/または終了点などのマーク情報が格納される。ブロックMakersPrivateData()は、記録機の製造者独自の情報が格納される。
また、これら各ブロックのファイル「%%%%%.clpi」中での先頭を表すアドレス情報が、当該ファイルの先頭部分にフィールドSequenceInfo_start_address、ProgramInfo_start_address、CPI_start_address、ClipMark_start_addressおよびMakersPrivateData_start_addressとして示される。なお、このクリップファイル「%%%%%.clpi」自体は、この発明と関連性が低いので、詳細な説明を省略する。
BDAVフォーマットは、以上に概略的に説明したようなデータ構造を持つことにより、クリップAVストリーム中の再生したい部分を開始および終了点の組で指定したプレイアイテムの並びでプレイリストを構築し、ユーザが認識するひとまとまりの再生単位を管理することが可能となる。
2.発明の実施の第1の形態
次に、この発明の実施の第1の形態について説明する。この発明では、上述したBDAVフォーマットを拡張し、リアルタイムデコード方式を用いる動画データおよび字幕データと、蓄積型のデコード方式を用いる画像データとをそれぞれ独立的に用意し、これらのデータを合成して表示することにより、より自由度の高いユーザインターフェイスの実現を可能としている。
また、BDAVフォーマットの拡張は、"Blu-ray Disc Rewritable Format Ver1.0 part3"で規定されたプレイリストと互換性が保たれるようになされ、インタラクティブ機能の拡張を実現する。以下、拡張されたBDAVフォーマットを、BDMVフォーマットと称する。このBDMVフォーマットは、再生専用ディスク(BD−ROM:Blu-ray Disc-Read Only Memory)に用いて好適なものである。
2−1.プレーンについて
この発明の実施の第1の形態では、画像の表示系について、図15に一例が示されるようなプレーン構成を取る。動画プレーン10は、最も後ろ側(ボトム)に表示され、プレイリストで指定された画像(主に動画データ)が扱われる。字幕プレーン11は、動画プレーン10の上に表示され、動画再生中に表示される字幕データが扱われる。グラフィクスプレーン12は、最も前面に表示され、メニュー画面を表示するための文字データやビットマップデータなどのグラフィクスデータが扱われる。1つの表示画面は、これら3つのプレーンが合成されて表示される。
ここで、従来のDVDビデオと異なる特徴的な点は、従来の技術で説明した字幕やメニュー画面、ボタンなどが表示されるサブピクチャを、字幕プレーン11およびグラフィクスプレーン12とに分離し、字幕とボタンとをそれぞれ独立的に制御できるようにしたことである。上述したように、従来のDVDビデオでは、メニュー画面やボタンなどのグラフィクス表示と、字幕表示とを、同じ仕組みで制御しており、これらを同一プレーン上に表示していた。そして、同時に表示できるビットマップ画像は、1枚に限られていた。そのため、従来のDVDビデオでは、複数のビットマップ画像を同時に表示することができなかった。この発明では、字幕を表示する字幕プレーン11と、グラフィクス表示を行うグラフィクスプレーン12とをそれぞれ独立的に設けることで、この従来のDVDビデオの持つ問題点を解消している。
なお、字幕プレーン11およびグラフィクスプレーン12が、従来の"Blu-ray Disc Rewritable Format Ver1.0 part3"に対する拡張部分であると考えることができる。
動画プレーン10、字幕プレーン11およびグラフィクスプレーン12は、それぞれ独立して表示が可能とされ、例えば、図16に一例が示されるような解像度および表示可能色を有する。動画プレーン10は、解像度が1920画素×1080ラインで1画素当たりに換算したデータ長が16ビットであって、輝度信号Y、色差信号Cb、Crが4:2:2のシステム(以下、YCbCr(4:2:2))とされる。なお、YCbCr(4:2:2)は、各画素当たり輝度信号Yが8ビット、色差信号Cb、Crがそれぞれ8ビットで、色差信号Cb、Crが水平2画素で一つの色データを構成すると見なすカラーシステムである。
グラフィクスプレーン12は、解像度が1920画素×1080ラインで各画素のサンプリング深さが24ビットとされ、カラーシステムは、YCbCr(4:4:4)、または、R(赤色)G(緑色)B(青色)が4:4:4のシステム(以下、RGB(4:4:4:))を選択可能とされる。字幕プレーン11は、1920画素×1080ラインで各画素のサンプリング深さが8ビットとされ、カラーシステムは、256色のパレットを用いた8ビットカラーマップアドレスとされる。
グラフィクスプレーン12および字幕プレーン11は、256段階のアルファブレンディングが可能とされており、他のプレーンとの合成の際に、不透明度を256段階で設定することが可能とされている。不透明度の設定は、画素毎に行うことができる。以下では、不透明度αが(0≦α≦1)の範囲で表され、不透明度α=0で完全に透明、不透明度α=1で完全に不透明であるものとする。
字幕プレーン11では、例えばPNG(Portable Network Graphics)形式の画像データが扱われる。また、グラフィクスプレーン12でも、例えばPNG形式の画像データを扱うことができる。PNG形式は、1画素のサンプリング深さが1ビット〜16ビットとされ、サンプリング深さが8ビットまたは16ビットの場合に、アルファチャンネル、すなわち、それぞれの画素成分の不透明度情報(アルファデータと称する)を付加することができる。サンプリング深さが8ビットの場合には、256段階で不透明度を指定することができる。このアルファチャンネルによる不透明度情報を用いてアルファブレンディングが行われる。また、256色までのパレットイメージを用いることができ、予め用意されたパレットの何番目の要素(インデックス)であるかがインデックス番号により表現される。
なお、字幕プレーン11およびグラフィクスプレーン12で扱われる画像データは、PNG形式に限定されない。JPEG方式など他の圧縮符号化方式で圧縮符号化された画像データや、ランレングス圧縮された画像データ、圧縮符号化がなされていないビットマップデータなどを扱うようにしてもよい。
図17は、上述の図15および図16に従い3つのプレーンを合成する一例の構成を示す。動画プレーン10の動画データが422/444変換回路20に供給される。動画データは、422/444変換回路20でカラーシステムがYCbCr(4:2:2)からYCbCr(4:4:4)に変換され、乗算器21に入力される。
字幕プレーン11の画像データがパレット22に入力され、RGB(4:4:4)の画像データとして出力される。この画像データに対してアルファブレンディングによる不透明度が指定されている場合には、指定された不透明度α1(0≦α1≦1)がパレット22から出力される。
図18は、パレット22の入出力データの一例を示す。パレット22は、例えばPNG形式のファイルに対応したパレット情報がテーブルとして格納される。パレット22は、入力された8ビットの画素データをアドレスとして、インデックス番号が参照される。このインデックス番号に基づき、それぞれ8ビットのデータからなるRGB(4:4:4)のデータが出力される。それと共に、パレット22では、不透明度を表すアルファチャンネルのデータαが取り出される。
図19は、パレット22に格納される一例のパレットテーブルを示す。256個のカラーインデックス値〔0x00〕〜〔0xFF〕(〔0x〕は16進表記であることを示す)のそれぞれに対して、各々8ビットで表現される三原色の値R、GおよびBと、不透明度αとが割り当てられる。パレット22は、入力されたPNG形式の画像データに基づきパレットテーブルが参照され、画像データにより指定されたインデックス値に対応する、それぞれ8ビットのデータからなるR、GおよびB各色のデータ(RGBデータ)と、不透明度αとを画素毎に出力する。
パレット22から出力されたRGBデータは、RGB/YCbCr変換回路29に供給され、各データ長が8ビットの輝度信号Yと色信号Cb、Crのデータに変換される(以下、まとめてYCbCrデータと称する)。これは、以降のプレーン間合成を共通のデータ形式で行う必要があるためで、動画データのデータ形式であるYCbCrデータに統一している。
RGB/YCbCr変換回路29から出力されたYCbCrデータおよび不透明度データa1とがそれぞれ乗算器23に入力される。乗算器23では、入力されたYCbCrデータに不透明度データα1が乗ぜられる。乗算結果は、加算器24の一方の入力端に入力される。なお、乗算器23では、YCbCrデータにおける輝度信号Y、色差信号Cb、Crのそれぞれについて、不透明度データα1との乗算が行われる。また、不透明度データα1の補数(1−α1)が乗算器21に供給される。
乗算器21では、422/444変換回路20から入力された動画データに不透明度データα1の補数(1−α1)が乗ぜられる。乗算結果は、加算器24の他方の入力端に入力される。加算器24において、乗算器21および23の乗算結果が加算される。これにより、動画プレーン10と字幕プレーン11とが合成される。加算器24の加算結果が乗算器25に入力される。
グラフィクスプレーン12の画像データがRGB/YCbCr変換回路26に入力される。グラフィクスプレーン12の画像データのカラーシステムがRGB(4:4:4)である場合には、カラーシステムがYCbCr(4:4:4)に変換されてRGB/YCbCr変換回路26から出力される。RGB/YCbCr変換回路26から出力されたYCbCrデータが乗算器27に入力される。
グラフィクスプレーン12で用いられる画像データがPNG形式である場合には、画像データ中に、画素毎に不透明度データα2(0≦α2≦1)を設定することができる。不透明度データα2は、乗算器27に供給される。乗算器27では、RGB/YCbCr変換回路26から入力されたYCbCrデータに対し、輝度信号Y、色差信号Cb、Crのそれぞれについて、不透明度データα2との乗算が行われる。乗算器27による乗算結果が加算器28の一方の入力端に入力される。また、不透明度データα2の補数(1−α2)が乗算器25に供給される。
乗算器25では、加算器24の加算結果に対して不透明度データα2の補数(1−α2)が乗ぜられる。乗算器25の乗算結果は、加算器28の他方の入力端に入力され、上述した乗算器27による乗算結果と加算される。これにより、動画プレーン10と字幕プレーン11との合成結果に対して、さらに、グラフィクスプレーン12が合成される。
字幕プレーン11およびグラフィクスプレーン12において、例えば、表示すべき画像の無い領域の不透明度α=0と設定することで、そのプレーンの下に表示されるプレーンを透過表示させることができ、例えば動画プレーン10に表示されている動画データを、字幕プレーン11やグラフィクスプレーン12の背景として表示することができる。
なお、この図17に示される構成は、ハードウェアおよびソフトウェアの何れでも実現可能なものである。
2−2.メニュー画面
グラフィクスプレーン12には、ユーザに対して操作を促す画面、例えばメニュー画面を表示させることができる。図20は、グラフィクスプレーン12に表示されるメニュー画面60の一例を示す。メニュー画面60は、文字や画像を特定の位置に表示させ、ユーザが選択や実行を指示することで新たな動作が開始される「リンク」や「ボタン」を配置することができ、ユーザに対してGUI(Graphical User Interface)を提供する。
「リンク」は、例えば、文字列や画像データに対して所定のファイルへのアクセス方法を示す記述を設定し、ユーザがポインティングデバイスなどを用いて画面に表示された当該文字列や画像データ上を指定することで、当該文字列や画像データに設定されたアクセス方法に従って当該ファイルにアクセスできるようにしたものである。「ボタン」は、「リンク」において、例えば通常の状態、選択された状態および押された状態の3種類の画像データを用意し、ユーザにより当該ボタン画像が指定された際に、3種類の画像データの表示を切り換えて、ユーザが行った操作をユーザ自身に認識しやすくしたものである。
なお、「リンク」や「ボタン」に対する指定動作は、例えば、マウスを用いて画面上のカーソル表示を移動させ、「リンク」による文字列や画像、「ボタン」による画像上で、マウスボタンを1または複数回押すクリック動作を行うことで、なされる。マウス以外のポインティングデバイスによっても、同様の動作を行うことができる。また、これに限らず、リモートコントロールコマンダやキーボードのキー操作により、「リンク」や「ボタン」の指定を行うこともできる。例えば、方向キーなど所定のキーで指定を行いたい「リンク」や「ボタン」を選択し、決定キーなどにより選択された「リンク」や「ボタン」を指定する。
図20の例では、グラフィクスプレーン12上に表示されたメニュー画面60の上部に、画像データとしてタイトル61が表示される。タイトル61に続けて、リンクとしての選択項目62A、62B、62Cおよび62Dが表示される。例えばリモートコントロールコマンダのキー操作により、選択項目62A、62B、62Cおよび62Dのうち1つを選択し指定することで、指定された選択項目にリンクとして設定されたファイルがアクセスされる。
メニュー画面60の下部に、字幕の表示の有無や、出力される音声を例えば英語および日本語から選択するためのボタン64および65が表示される。これらボタン64や65を上述のように操作することで、例えば、それぞれの設定を行う画面を表示するためのファイルがアクセスされ、所定の画面表示がなされる。
また、メニュー画面60の左下部分には、項目の選択方法を示す文字列63が表示される。この文字列63も、グラフィクスプレーン12上の表示である。
この、図20に一例が示されるような画面を表示するためには、画面の表示方法やリンク情報などを記述可能な、何らかの記述言語が必要とされる。この発明の実施の第1の形態では、この記述言語として、インターネット上のWWW(World Wide Web)などで広く普及している、HTML(Hyper Text Markup Language)を用いる。
周知のように、HTML文書では、タグを用いて文書構造が示される。タグは、範囲の開始および終了をそれぞれ示す一対の記号からなり、テキスト中に埋め込んで任意の範囲を指定することができる。例えば、範囲の開始を示す開始タグは、文字列として予め定義された要素を記号「<」と「>」とで囲んで表現され、終了を示す終了タグは、開始を示すタグ中に記される文字列と同一の文字列が記号「</」と「>」とで囲んで表現される。タグ中に、当該タグにより示される要素の属性の記述を含ませることができる。なお、終了タグの記述を省略可能、または、記述しない要素も存在する。
HTMLで記述された文書は、一般的には、インターネットに接続されたWebサーバ上に置かれ、Webサーバによりインターネットに対して公開され、インターネットに接続されたパーソナルコンピュータなどのコンピュータ装置に搭載されたブラウザソフトウェアにより閲覧される。この発明の実施の第1の形態では、HTMLの規格に対して独自の拡張を定義して、Blu−ray Discによるメニュー画面表示が可能なようにした。
一例として、WWWにおいて、HTML文書中に記述されたリンク情報は、ブラウザソフトウェア上でそのリンクを指定することで、他のHTMLファイルなどにアクセスし読み込むことができる。一方、上述したようなBlu−ray Discのメニュー画面60では、例えばプレイリストの一覧が画像データや文字列、ボタンなどで表示され、あるプレイリストを指定することで、指定されたプレイリストがディスクから読み出され再生されることが期待される。
HTMLに対するこれらの拡張は、例えばプログラミング言語において新たな関数を定義することや、新たなAPI(Application Programming Interface)を定義することに相当する。
2−3.シナリオについて
上述した図20の例では、メニュー画面60に対してプレイリストの一覧が表示される。このメニュー画面60およびメニュー画面60上の選択項目を選択した際に再生される映像・音声は、実際には、複数のプレイリストが並んだ構造によって構成されている。メニューの一項目を構成する複数のプレイリスト内で、プレイリストの関連付けを行うことで、ストーリーを分岐させる仕組みを実現することができる。ストーリーを分岐できるようにすることで、ユーザの選択によってストーリーが変化していくマルチストーリーや、ユーザの年齢に応じてシーンを差し替えるパレンタル機能を実現することができる。
このような機能は、記録済みのディスクにおいて特に有用であって、テレビジョン放送の記録/再生が主目的である現行のBlu−ray Disc規格では想定されていない。
なお、画面表示の記述は、HTMLに限らず、例えばHTML4.0の後継バージョンであるXHTML(extensible HTML)を用いることもできる。これらに限らず、さらに他のマークアップ言語を用いて画面表示の記述を行うこともできる。
以下では、この複数のプレイリストが並べられた構造を、シナリオと称する。図21は、シナリオ70の一例の内部構造を示す。このシナリオ70は、複数のプレイリスト73A〜73Mを含む。また、シナリオ70は、グラフィクスプレーン12を用いて分岐選択画面を表示する箇所が2箇所(画面80Aおよび80B)設けられている。例えば画面80Aは、分岐選択画面を表示するためのグラフィクスデータ74Aとプレイリスト73Cを有する。同様に、画面80Bは、分岐選択画面を表示するためのグラフィクスデータ74Bとプレイリスト73Jを有する。
このように、シナリオは、プレイリストの並びを決めると共に、グラフィクスプレーン12に対する表示のタイミングを規定する。グラフィクスプレーン12への表示のタイミングは、プレイリスト中のマークを用いて規定することができる。なお、シナリオ70中のイベントハンドラ定義71および72については、後述する。
図21の例では、例えば上述のメニュー画面60における選択項目(例えば選択項目62A)は、シナリオ70に一例として「エントリ」と記されたプレイリスト73Aに対応する。すなわち、メニュー画面60において選択項目62Aが指定されると、先ず、シナリオ70のプレイリスト73Aが再生される。プレイリスト73Aの再生が終了されると、続けてプレイリスト73Bが再生され、プレイリスト73Bの再生が終了されると、プレイリスト73Cが再生され、グラフィクスデータ74Aが読み出されて、ユーザにストーリーの分岐選択を促す画面80Aが表示される。
画面80Aが表示された以降は、ユーザの選択に基づきストーリーが分岐される。この図21の例では、第1の選択により、画面80Aの後、プレイリスト73D、73E、73Fの順に再生され、全体の再生が終了される。プレイリスト73Fの再生が終了された後、メインのメニュー画面(例えば上述したメニュー画面60)に戻るようにしても良い。
画面80Aにおける第2の選択では、画面80Aの後、プレイリスト73Gが再生される。プレイリスト73Gは、例えば所定のタイミングにマークが設定されている。プレイリスト73Gが再生されると、再生装置自身の設定やユーザによる他のシナリオや分岐選択画面などでの選択に基づき、プレイリスト73Gのマーク位置で分岐するか、プレイリスト73Gを最後まで再生するかが制御される。プレイリスト73Gが最後まで再生される場合には、プレイリスト73Gの再生終了後、プレイリスト73M、73Iと再生され、プレイリスト73Jがさらに再生される。
一方、プレイリスト73Gにおいてマーク位置で分岐された場合には、次にプレイリスト73K、73Lと再生され、プレイリスト73Lの再生が終了されたら、次に、プレイリスト73Iに設定されたマーク位置から再生が継続される。
プレイリスト73Jは、グラフィクスデータ74Bが読み出されて、ユーザにストーリーの分岐選択を促す画面80Bが表される。画面80Bにおける第1の選択では、上述したプレイリスト73Fが再生される。一方、画面80Bの第2の選択では、プレイリスト73Kに設定されているマーク位置からの再生が行われる。
マークの検出、ユーザからの入力、プレーヤの動作変更の検出は、イベントドリブンモデルに基づきなされる。すなわち、プレイリストの再生が開始された、プレイリストの再生が終了された、プレイリストの再生中にマークが検出された、リモートコントロールコマンダのキー操作などによりユーザからの入力があった、などによりイベントが発生される。そして、特定のイベントがきっかけになって実行されるイベントハンドラをプログラム中に用意しておくことで、プレーヤにおいて、当該イベントにより期待される動作が実行される。
図21に一例が示されるシナリオ70には、2つのイベントハンドラ71および72が設定されている。これらのうち、イベントハンドラ71は、シナリオ70の全体にわたって有効なイベントハンドラが記述される、グローバルなイベントハンドラ定義である。
例えば、シナリオ70内のプレイリスト73A〜73Mの何れが再生中であっても、リモートコントロールコマンダに設けられたメニューボタンが押されたら、シナリオの一覧が表示されるメニュー画面60が表示される、すなわち、メニュー画面60を表示するためのプレイリストに再生処理が移行される動作を実現したい場合について考える。この場合、リモートコントロールコマンダのメニューボタンが押されたときに発生するイベント(メニューボタン押下イベント)に対応するイベントハンドラとして、メニュー画面60を表示させるプレイリストに処理が移行される命令を、グローバルなイベントハンドラ71として記述する。
一方、イベントハンドラ72は、特定のプレイリストの再生中にのみ、あるいは、特定のユーザ入力画面が表示されている間のみに実行され得るイベントハンドラが記述される、ローカルなイベントハンドラ定義である。例えば、分岐選択画面である画面80Aに表示されているリンクがユーザにより指定されたときに、別のプレイリストを再生するという動作は、リンクが指定されたというイベントに対して、プレイリストの再生を開始する命令をローカルなイベントハンドラ72として記述するすることで、実現することができる。
この発明の実施の第1の形態では、上述のようなイベントハンドラ定義を記述するスクリプト言語として、ECMAスクリプトを用いる。ECMAスクリプトは、ECMA(European Computer Manufacturers Association)により定められた、JavaScript(登録商標)に基づいたクロスプラットフォーム用のスクリプト言語である。ECMAスクリプトは、HTML文書との親和性が高いことと、独自のオブジェクトの定義が可能であるため、この発明の実施の第1の形態に用いて好適である。
2−4.仮想プレーヤモデルについて
次に、グラフィクスプレーン12が追加され、HTMLとECMAスクリプトとを用いて拡張されたBDAVフォーマットに基づき動作する再生装置のモデルを考える。以下では、このモデル化された再生装置をBD(Blu-ray disc)仮想プレーヤと称し、このBD仮想プレーヤの構成の定義をBD仮想プレーヤモデルと称する。
図22を用いて、BD仮想プレーヤモデルについて説明する。BD仮想プレーヤ30は、Blu−ray Disc(以下、ディスクと略称する)を再生するもので、パーソナルコンピュータなどのコンピュータ環境上のオブジェクトである。コンピュータ環境は、汎用的なパーソナルコンピュータに限られず、例えば、Blu−ray Discなどの記録媒体を再生するように専用的に構成された再生装置および/または記録再生装置に組み込まれたソフトウェア環境も含む。
BD仮想プレーヤ30の状態は、概略的には、プレイリストおよびグラフィクスを再生する状態Aと、再生が停止された状態Bの2つの状態に分類できる。ある状態から別の状態への遷移や、ある状態の中での次の動作の指定は、BD仮想プレーヤ30のオブジェクトに対するコマンドにより行われる。
なお、状態Aは、複数の動作を含む。状態Aに含まれる動作としては、高速再生、逆転再生といった変速再生や、ディスク上の任意の時刻から再生する飛び込み再生といった特殊再生などが考えられる。BD仮想プレーヤ30においてグラフィクスプレーン12による表示がなされているときは、これら変速再生や特殊再生が制限されることがある。
PBC(Play Back Control)プログラム40は、例えばディスクに記録されているシナリオに対応する。詳細は後述するが、シナリオは、ディスクに記録されたプレイリストの再生方法や、メニュー画面の表示を指示する。PBCプログラム40とBD仮想プレーヤ30とは、API(Application Programming Interface)41を介してメソッドのやりとりを行い、ディスクに記録されたプレイリストを再生する。
より具体的には、BD仮想プレーヤ30の状態遷移の際には、PBCプログラム40により、API41を介して、BD仮想プレーヤ30において使用目的が定められたメモリとして定義された共通パラメータ32に対して、必要な情報が伝達される。この共通パラメータ32に対する値のセットは、PBCプログラム40とBD仮想プレーヤ30との間でAPI41を介してやりとりされるメソッドである、プレーヤコマンド31により行うことができる。
この発明の実施の第1の形態では、上述したように、BD仮想プレーヤ30は、イベントドリブンモデルに基づき制御される。BD仮想プレーヤ30の動作中には、様々なイベントが発生する。イベントは、例えば、ユーザによるキー入力やリモートコントロールコマンダによる操作、タイマによる割り込みなどにより、ハードウェア/OS(Operating System)50において発生され、BD仮想プレーヤ30に渡される。これに限らず、再生されたプレイリスト中のマークの検出や、プレーヤの動作変更の検出など、BD仮想プレーヤ30自身によりイベントが発生される場合もある。イベント処理としては、イベントバブルの考え方を用いる。
発生されるイベントの種類は、BD仮想プレーヤモデルで定義されている。イベントが発生すると、スクリプトプログラムとしてイベントハンドラが記述されていれば、発生されたイベントに対応するイベントハンドラが実行される。プログラムとしてイベントハンドラが記述されていない場合には、デフォルトのイベントハンドラが実行され、規格で規定されているプレーヤ動作が実行される。
プレーヤ動作に関するメソッドが実行された場合、プレーヤ動作が正常に開始されたか否かは、メソッドに対する戻り値で知ることができる。一方、指示された命令が何時終了されたかは、イベント発生により知るしかない。そのため、例えばシナリオ終了の再生を開始するメソッドをスクリプトプログラムに記述した場合には、シナリオ終了のイベントを受け取って実行されるイベントハンドラを共に記述することがより望ましい。
なお、同一のイベントであっても、シナリオ毎に異なるイベントハンドラを記述することができる。
BD仮想プレーヤ30における割り込みイベントは、(1)再生中のコンテンツから発せられるイベント、(2)ユーザからの割り込みにより発生されるイベント、(3)プレーヤの状態の変化により発生されるイベント、の3種類に大別される。
(1)の、再生中のコンテンツから発せられるイベントは、予め設定された割り込みであって、当該コンテンツの再生の度に、同一のタイミングで発生される。例えば、BD仮想プレーヤ30においてプレイリストを再生中に、プレイリスト中に記述されたマークで指し示したディスク上の時刻に到達すると、BD仮想プレーヤ30においてマーク検出の割り込みが発生される。また、スクリプトにおいてタイマが設定された場合に、設定された時刻、例えば当該スクリプトによりタイマ設定がなされた10秒後にタイマ割り込みのイベントが発生される。
(2)の、ユーザからの割り込みによるイベントは、発生および発生タイミングの予測ができないイベントである。例えば、ユーザによるリモートコントロールコマンダのキー操作により、この割り込みイベントが発生される。この場合、ユーザが何時キー操作を行うかが分からないため、事前にそのタイミングを知ることができない。
(3)の、BD仮想プレーヤ30の状態変化によるイベントは、例えば、音声や字幕のストリーム変更を通知するためのイベントである。コンテンツの再生状態から停止状態へ、停止状態から再生状態への状態遷移でも、このイベントが発生される。このプレーヤの状態変化によるイベントは、上述した(1)の再生中のコンテンツから発せられるイベントや、(2)のユーザによる割り込みイベントに伴い引き起こされる場合も多い。上述の音声や字幕のストリーム変更の通知のイベントの例では、ユーザによるリモートコントロールコマンダなどのキー操作による割り込みイベントで、音声や字幕のストリームが変更され、この変更に伴うBD仮想プレーヤ30の状態遷移に基づき、変更通知のイベントが発生される。
この発明の実施の第1の形態では、グラフィクスプレーン12を用いた表示制御がHTML(Hyper Text Markup Language)4.01またはXHTML(eXtensible HTML)文書として記述され、グラフィクスプレーン12による表示画面に対するイベントは、HTML4.0の組み込みイベントが用いられる。また、HTML4.0の組み込みイベントでは不十分なイベントは、ECMAスクリプトを用いて記述される。
HTML形式とECMAスクリプトを組み合わせて用いる場合、イベントが発生すると、先ず、そのイベントが発生した要素に属性で指定されているイベントハンドラが文書中に存在するか否かで、処理が異なる。イベントハンドラが存在する場合は、そのイベントハンドラが実行される。イベントハンドラが存在しない場合は、文書中にグローバルなイベントハンドラが用意されているか否かが探される。その結果、若し、グローバルなイベントハンドラが当該文書中に存在すれば、そのイベントハンドラが実行される。一方、文書中にスクリプト言語によるイベントハンドラの記述が無い場合には、BD仮想プレーヤ30において当該イベントに対して用意されたデフォルトのイベント処理が行われる。
イベントハンドラの記述方法としては、HTML文書における要素の属性として記述する方法と、ECMAスクリプトにおいてメソッドcaptureEventsを使って記述する方法とを用いることができる。
HTML文書を用いてイベントハンドラを記述する方法について説明する。この発明の実施の第1の形態によるBD仮想プレーヤ30では、HTML4.0に規定される組み込みイベントのうち、例えばイベントonload、イベントonunload、イベントonclickおよびイベントonkeypressを用いることができる。これらのイベントは、タグの要素中に属性として記述される。
イベントonloadは、利用者エージェントが1つのウィンドウまたは1対のタグ<FRAMESET></FRAMESET>で定義される全てのフレームを終了する際に発生される。例えば、メニュー画面の表示の際にイベントonloadが発生される。
なお、ウィンドウは、HTMLの規定に基づきHTMLファイルを表示するブラウザアプリケーションにおける表示単位であり、フレームは、1つのウィンドウを分割して複数のHTMLファイルを表示させる際に用いられる枠組みである。ここでは、フレーム内に表示されるHTMLファイルも含めてフレームと称する。このイベントonload属性は、要素BODYおよび要素FRAMESETと共に使用することができる。
イベントonunloadは、利用者エージェントが1つのウィンドウまたは1つのフレームから1つのHTML文書を除去する際に発生される。このイベントonunload属性は、要素BODYおよび要素FRAMESETと共に使用することができる。
イベントonclickは、ポインティングデバイスなどにより要素が指定された場合に発生される。例えば、マウスボタンのクリック操作を行った場合に、イベントonclickが発生される。このイベントonclick属性は、HTML4.0における殆どの要素と共に用いることができる。
イベントonkeypressは、キーが要素上で押されたり解放されたりする際に発生される。例えば、ある要素により定義される画面上の領域が選択状態のときに、キーボード上の所定のキーやリモートコントロールコマンダのキーが押された際に、イベントonkeypressが発生される。このイベントonkeypress属性は、HTML4.0における殆どの要素と共に用いることができる。
BD仮想プレーヤ30の動作を制御するためには、上述のHTMLによるイベントでは不十分であるため、この発明の実施の第1の形態では、独自のイベントが定義される。図23は、BD仮想プレーヤ30において独自に定義される一例のイベントを示す。このイベントは、ECMAスクリプトにより、HTML文書に埋め込まれて記述される。また、イベントハンドラを指定する属性名は、イベント名の先頭に「on」を付して示す。
イベントTimerFiredは、カウントダウンタイマの値が「0」になるか、カウントアップタイマの値が指定された値になったときに発生される。イベントPlayStoppedおよびイベントPlayStilledは、それぞれ再生の停止および一時停止により発生される。イベントStillReleasedは、一時停止が解除された際に発生される。イベントPlayPausedおよびイベントPauseReleasedは、それぞれユーザによる再生の一時停止および一時停止の解除の際に発生される。イベントPlayRepeatedは、繰り返し再生時の先頭が検出された際に発生される。
イベントSPDisplayStatusChangedは、サブピクチャ(字幕)ストリームの表示/非表示状態が変化した際に発生される。イベントSelectedAudioChangedおよびイベントVideoStoppedは、それぞれ再生するオーディオストリームおよびビデオストリームが変わった際に発生される。
イベントScenarioStartedおよびイベントScenarioEndedは、それぞれシナリオの先頭および終端が検出された際に発生される。イベントPlayListStartedおよびイベントPlayListEndedは、それぞれプレイリストの先頭および終端が検出された際に発生される。イベントPlayItemStartedおよびイベントPlayItemEndedは、それぞれプレイアイテムの先頭および終端が検出された際に発生される。
イベントMarkEncounteredは、プレイリストの再生中にマークが検出された際に発生される。このイベントは、例えばグラフィクスプレーン12に画像データを表示する際に用いられる。共通パラメータ32に、検出されたマークの種類と番号とが格納される。
イベントButtonPressedは、画面上に配置されたボタンが押された際に発生される。例えば、グラフィクスプレーン12上に表示されたボタンを、キー操作やマウスのクリック操作などにより仮想的に押した場合に、イベントButtonPressedが発生される。
イベントValidPeriodStartedは、有効期間が開始された際に発生される。これは、リンクの選択有効期間を設定する際に用いることができる。また、イベントValidPeriodEndedは、有効期間が終了した際に発生される。これは、リンクの強制実行のときに用いることができる。
イベントKeyPressedは、リモートコントロールコマンダのキーが押されたときに発生される。押されたキーの種類は、イベントハンドラ内の「switch」文などで識別される。
2−5.メソッドについて
図24、図25および図26は、この発明の実施の第1の形態で定義される、BD仮想プレーヤ30が有するメソッドの一例を示す。これらのメソッドにより、BD仮想プレーヤ30における動作および状態、BD仮想プレーヤ30で扱うビデオストリーム、オーディオストリームおよびサブピクチャ(字幕プレーン11の画像データ)に関する情報取得や制御、共通パラメータ32に対する操作、タイマやキー入力の割り込みに応じた処理、グラフィクスプレーン12で扱う画像データの制御がそれぞれ定義される。
これらのメソッドをPBCプログラム中で適宜用いることにより、BD仮想プレーヤ30の動作を制御することが可能とされる。これらのメソッドは、図22におけるAPI41に実装される。PBCプログラムの記述に基づきこれらのメソッドがAPI41から呼び出され、BD仮想プレーヤ30におけるディスク再生が制御される。PBCプログラムの具体的な例については、後述する。
プレーヤ動作に関するメソッドについて説明する。メソッドplayScenario(scenarioNumber,[scenarioTime])で、"scenarioNumber"で指定されるシナリオの再生が指示される。"scenarioNumber"は、実際には、シナリオ構成を記述したファイルなどの場所を示すURI(Universal Resource Identifier)になる。メソッドplayPlayList(playListNumber)で、"playListNumber"で指定されたプレイリストの再生が指示される。メソッドplayChapterMark(playListNumber,chapterNumber)で、"playListNumber"で示されるプレイリスト中の、"chapterNumber"指定されるチャプタからの再生が指示される。メソッドplayPlayItem(playListNumber,playItemNumber)で、"playListNumber"および"playItemNumber"で示されるプレイアイテムからの再生が指示される。"playItemNumber"は、"playItem_id"であり、値「0」を指定することで、当該プレイアイテムが属するプレイリストの先頭から再生される。
メソッドplay(position)(object)で、シナリオ内での移動が指示される。すなわち、現在移動中の箇所から前後のプレイリストやプレイアイテムに移動することがこのメソッドで指示される。なお、パラメータ"position"は、"prev"、"next"、"top"、"goUp"または"tail"の何れかの値を取り、パラメータ"object"で示される移動対象(プレイリスト、プレイアイテムまたはチャプタ)に対する移動方法が指示される。
メソッドstop()で、シナリオ再生の停止が指示される。この場合、標準レジスタの値は、保持されない。メソッドresume()で、前回再生を停止した箇所からの再生の再開が指示される。メソッドplaySoundEffect()で、選択された効果音の再生が指示される。
プレーヤ状態に関するメソッドについて説明する。図25において、メソッドgetMenuDescriptionLanguage()で、メニュー表示の際に用いられる言語が取得される。メソッドgetScenarioNumber()、メソッドgetPlayListNumber()およびメソッドgetChapterNumber()で、再生中のシナリオ番号、プレイリスト番号およびチャプタ番号がそれぞれ取得される。メソッドgetPlayerSupport()で、プレーヤのバージョン情報が取得される。
ビデオストリームに関するメソッドについて説明する。メソッドsetVideoStreamNumber()で、デコードするビデオストリームが指定される。メソッドgetVideoStreamNumber()、メソッドgetVideoStreamStatus()およびメソッドgetVideoStreamAttr()で、再生中のビデオストリームの番号、状態および属性がそれぞれ取得される。なお、ビデオストリームの属性は、例えば、そのビデオストリームの符号化方式、解像度、アスペクト比、アスペクト比が4:3のときのディスプレイモード、クローズドキャプションの有無である。メソッドsetAngleNumber()で、アングル番号が指定される。メソッドgetAngleNumber()で、選択中のアングル番号が取得される。メソッドgetMaxVideoStream()で、ビデオストリームの最大数が取得される。
オーディオストリームに関するメソッドについて説明する。メソッドgetAudioStreamAvailability()で、指定のオーディオストリームが含まれているか否かが取得される。メソッドgetAudioStreamLanguage()で、指定のオーディオストリームの言語に関する情報が取得される。メソッドgetAudioStreamStatus()で、指定のオーディオストリームの状態が取得され、メソッドsetAudioStreamStatus()で、指定のオーディオストリームに対する状態のセットが指示される。なお、オーディオストリームの状態は、例えば再生または非再生である。メソッドgetAudioStreamAttribute()で、指定のオーディオストリームの属性が取得される。
サブピクチャストリーム(字幕データ)ストリームに関するメソッドについて説明する。メソッドgetSPStreamAvailability()で、指定のサブピクチャストリームが含まれているか否かが取得される。メソッドgetSPStreamLanguage()で、指定のサブピクチャストリームで用いられている言語が取得される。メソッドgetSPDisplayStatus()で、サブピクチャストリームの表示状態が取得され、メソッドsetSPDisplayStatus()で、サブピクチャストリームの表示状態がセットされる。サブピクチャストリームの表示状態は、例えばサブピクチャストリームの表示のオン/オフである。メソッドgetSpStreamAttribute()で、指定のサブピクチャストリームの属性が取得される。サブピクチャストリームの属性は、例えばサブピクチャストリームの表示がアスペクト比4:3またはワイド画面の何れでなされるかである。
共通パラメータ32に関するメソッドについて説明する。図26では、レジスタリード/ライトとして記されている。メソッドclearReg()で、BD仮想プレーヤ30が内蔵しているメモリ領域すなわちレジスタについて、全レジスタの初期化が指示される。メソッドsetReg()で、指定のレジスタへの値のセットが指示される。メソッドgetReg()で、指定のレジスタからの値の読み出しが指示される。
タイマに関するメソッドについて説明する。メソッドsleep()で、指定された時間の処理の停止が指示される。メソッドsetTimeout()で、指定された時間後に関数や処理を実行することが指示される。メソッドsetInterval()で、指定された時間毎に処理を実行することが指示される。なお、タイマに関するメソッドにおいて、時間はミリ秒単位で指定することができる。メソッドclearTimer()で、指定された登録タイマIDの処理の中止が指示される。メソッドpauseTimer()で、指定された登録タイマIDのタイマの一時停止が指示される。メソッドresumeTimer()で、指定された登録タイマIDのタイマを一時停止から再開することが指示される。
キー入力に関するメソッドでは、メソッドgetPressedKey()で、入力された(押された)キーの種類が取得される。
グラフィクスに関するメソッドについて説明する。メソッドloadGraphics(htmlfile,ID)で、"htmlfile"で示されるファイルを読み込み、グラフィクスプレーン12に非表示で展開することが指示される。展開されたグラフィクス画像には"ID"が割り当てられ、後述のメソッドで参照される。メソッドshowGraphics(ID)は、上述のメソッドloadGraphics(htmlfile,ID)により既にグラフィクスプレーン12上に展開されている画像に対して、表示が指示される。メソッドhideGraphics(ID)で、"ID"で示される画像の表示を消去することが指示される。
その他のメソッドについて説明する。メソッドrandom(input Number num)で、1から"num"までの乱数の発生が指示される。乱数の発生は、独自の定義で行われる。メソッドcatchEvent(eventname,eventhandler)で、"eventname"で示されたイベントが発生した際、"eventhandler"で示された関数を実行することが指示される。
2−6.シナリオの実行について
次に、PBCプログラム40について、より具体的に説明する。この発明の実施の第1の形態では、一つのシナリオに対して、一つのスクリプトファイルが作成される。また、グラフィクスプレーン12を用いてメニュー画面60などを表示する場合には、1画面に対して一つのHTMLファイルが作成される。スクリプトファイルおよびHTMLファイルは、ファイル名の拡張子がそれぞれ「js」および「html」とされ、拡張子で以てこれら2種類のファイルを識別可能とする。なお、ディスクがドライブ装置に挿入されて最初に実行されるスクリプトプログラムが格納されるファイルは、ファイル名を例えば「startup.js」に固定的とする。
一例として、図27に示されるようなシナリオ構成のディスクを考える。このディスクは、シナリオScenario000およびScenario001の2つのシナリオを有し、シナリオScenario000は、シナリオScenario001へのリンクボタン92を表示するメニュー画面91を表示させる。ディスクが再生装置に装填されると、メニュー画面91が表示され、メニュー画面91に表示されるボタン92が例えばクリック操作により押されると、シナリオScenario001が再生される。シナリオScenario001の再生が終了されると、再びメニュー画面91が表示される。
図28は、図27の構成に対して必要とされる一例のファイルを一覧して示す。この例では、ファイル「startup.js」、ファイル「scenario000.js」、ファイル「000.html」、ファイル「00000.rpls」、ファイル「scenario001.js」およびファイル「00001.rpls」の6ファイルが必要とされる。
これらのうち、ファイル「scenario000.js」は、シナリオScenario000の構成情報が記述されるスクリプトファイルであって、メニュー画面91すなわちシナリオ一覧画面の構成情報が記述される。ファイル「000.html」は、メニュー画面91のレイアウト情報が記述されるHTMLファイルである。ファイル「00000.rpls」は、メニュー画面91において背景として表示されるプレイリストファイルである。ファイル「scenario001.js」は、シナリオScenario001の構成情報が記述されるスクリプトファイルである。ファイル「00001.rpls」は、シナリオScenario001で再生されるプレイリストの情報が記述されたプレイリストファイルである。
なお、図28では、プレイリストファイル「00000.rpls」および「000001.rpls」で実際に再生されるコンテンツファイルなど(クリップ情報ファイル「%%%%%.clip」、AVストリームファイル「*****.m2ts」)については省略されている。
図28に示される各ファイルは、図29に一例が示されるディレクトリ構造に従い、ディスクに記録される。
図30〜図33は、スクリプトファイルおよびHTMLファイルのより具体的な記述の例を示す。図30は、ファイル「startup.js」の記述例である。ファイル「startup.js」では、当該ディスクに格納されているシナリオの数と名前とが定義される。そして、メソッドplayScenario("scenario000")の記述により、ファイル「scenario000.js」が呼び出され、シナリオScenario000の再生が指示される。シナリオScenario000が再生されることにより、メニュー画面91が表示される。
図31は、ファイル「scenario000.js」の記述例である。関数functionが定義され、メソッドcatchEvent()に「on」が付されて記述されたイベント(図23参照)が発生すると、対応する関数functionで定義された内容が実行される。図31の例では、メニュー画面91のレイアウト情報が記述されたHTMLファイル「000.html」が指定され、グラフィクスプレーン12へのメニュー画面91の読み込みおよび表示のタイミングが制御される。それと共に、メソッドplayPlayList("00000.rpls")が記述され、プレイリスト「00000.rpls」の再生が指示される。
すなわち、このファイル「scenario000.js」により、プレイリスト「00000.rpls」による動画の動画プレーン10に対する表示が指示されると共に、プレイリスト「00000.rpls」の再生中に検出されたマークのタイミングで、メニュー画面91をグラフィクスプレーン12に表示する旨が指示される。
図32は、ファイル「000.html」の記述例である。タグ<style type="text/css">および</style>で囲まれた部分に、「menu」および「scenario001」で参照される画像の、メニュー画面91におけるレイアウト情報が記述される。この図32の例では、レイアウト情報が画面上の絶対座標で記述され、画像名「menu」で参照される画像データが画面の上端から200ピクセル、左端から800ピクセルの位置に、幅200ピクセル、高さ50ピクセルの画像として表示されることが示される。同様に、画像名「scenario」で参照される画像データが画面の上端から700ピクセル、左端から700ピクセルの位置に、幅400ピクセル、高さ100ピクセルの画像として表示されることが示される。
タグ<script type="text/javascript">および</script>で囲まれた部分に、関数functionで、マウス操作に対するイベントハンドラonMoverhandler(f)、onMouthandler(f)およびonMclickhandler(f)がそれぞれ定義される。この図32の例では、イベントハンドラonMoverhandler(f)、onMouthandler(f)およびonMclickhandler(f)に対してボタン画像を表示する画像データである画像データ「201.png」、「200.png」および「202.png」がそれぞれ対応付けられると共に、イベントハンドラonMclickhandler(f)においては、シナリオファイル「scenario001.js」の再生が指示される。
タグ<body>および</body>で囲まれた部分に、メニュー画面91においてグラフィクスプレーン12に表示される画像データが指定される。上述のタグ<style type="text/css">および</style>で囲まれた部分に記述される画像名に対応する画像データのファイル名(「100.png」、「200.png」)がそれぞれ記述される。さらに、画像名「scenario001」で参照される画像データに対しては、マウスなどポインティングデバイスに対する操作に応じて発生するイベントonMouseover、onMouseoutおよびonclickに対して、上述の関数functionで定義されたイベントハンドラonMoverhandler(f)、onMouthandler(f)およびonMclickhandler(f)がそれぞれ実行されることが指示される。
なお、イベントonMouseoverは、指定された領域などにカーソル表示が重なった際に、イベントonMouseoutは、指定された領域などからカーソル表示が離れた際に、また、イベントonclickは、指定された領域にカーソル表示があるときにポインティングデバイスに対する所定の操作、例えばマウスボタンのクリックが行われた際に、それぞれ発生されるイベントである。
図33は、ファイル「scenario001.js」の記述例である。関数function UOPControl()において、このシナリオファイル「scenario001.js」の再生中に、例えばリモートコントロールコマンダに設けられたメニューキーが押されたときに、上述した、メニュー画面91を表示するためのシナリオScenario000を再生することが定義される。また、関数function playListEnded()により、このシナリオファイル「scenario001.js」によるプレイリストの再生が終了したら、メニュー画面91を表示するためのシナリオScenario000を再生することが定義される。また、このシナリオファイル「scenario001.js」でプレイリスト「00001.rpls」が再生されることが指示される。
上述した図30〜図33の記述に基づく動作について、概略的に説明する。ディスクが再生装置に装填されると、先ず、ファイル「startup.js」が読み込まれ、このファイル中の記述によりファイル「scenario000.js」が呼び出される。このファイルに記述されたシナリオ「scenario000」が実行されると、図31の記述に基づき、プレイリスト「00000.rpls」による動画が動画プレーン10に表示される。
さらに、プレイリスト「00000.rpls」中に指定されたマークに対応するタイミングで、ファイル「000.html」が呼び出され、ファイル「000.html」の記述に基づきシナリオ一覧を表示するメニュー画面91がグラフィクスプレーン12上に展開され、表示される。このメニュー画面91自体も、シナリオ「scenario000」という一つのシナリオで構成されたものである。
メニュー画面91には、例えば「Menu」という文字列が描画された画像ファイル「100.png」と、「Scenario001」という文字列が描画された画像ファイル「200.png」とが配置されている。これらの画像ファイルは、グラフィクスプレーン12上に配置され表示される。グラフィクスプレーン12の背景に表示される動画プレーン10上では、プレイリスト「00000.rpls」による動画が表示される。動画プレーン10上のプレイリスト「00000.rpls」による動画と、グラフィクスプレーン12上のファイル「000.html」によるメニュー画面91とが重ね合わされて同一画面上に表示される。すなわち、動画を背景にメニュー画面91が表示される。
このとき、グラフィクスプレーン12上に表示されている画面(メニュー画面91)に所定に不透明度を設定し、メニュー画面91を動画プレーン10上の動画に対して透過させて表示させることができる。なお、この例では、例えばプレイリスト「00000.rpls」の先頭および末尾にマークが設定され、メニュー画面91は、プレイリスト「00000.rpls」の再生と共に表示が開始され、プレイリスト「00000.rpls」の再生終了と共に表示が消去されるようになっている。
メニュー画面91上には、ユーザの例えばリモートコントロールコマンダのキー操作に応じて移動可能なカーソルが表示される。上述の画像ファイル「200.png」の表示にカーソル表示が重なると、ファイル「000.html」において定義されるイベントMouseoverが発生される。このイベントMouseoverが発生されると、当該画像ファイル「200.png」にフォーカスが当たっていることを表現するために、イベントonMouseoverに対応するイベントハンドラonMoverhandler()が実行される。この、イベントハンドラonMoverhandler()の実行により、画像ファイル「200.png」が画像ファイル「201.png」に置き換えられる。画像ファイル「201.png」は、例えば画像ファイル「200.png」に対して配色が変えられたボタン画像である。
カーソル表示が画像ファイル「201.png」上にあるときに、ユーザにより、リモートコントロールコマンダの所定のキー操作によりクリック操作が行われると、イベントonclickに対応するイベントハンドラonMclickhandler()が実行され、画像ファイル「201.png」が、選択されたことを表現する画像ファイル「202.png」に置き換えられる。画像ファイル「202.png」は、例えばボタンが押されたことを仮想的に表現するようなボタン画像である。
このように、「フォーカスされた」、「クリックされた」というイベント発生に対応するイベントハンドラをファイル「000.html」中に記述することで、ユーザの入力に反応するインタラクティブな機能を有するメニュー画面が実現される。
上述のようにして、メニュー画面91において、「Scenario001」と描画されたボタン画像がクリックされると、シナリオ「Scenario001」の再生処理に移行される。ファイル「scenario001.js」が実行されることで、シナリオ「Scenario001」が再生される。図33に示したように、ファイル「scenario001.js」中に記述されたメソッドplayPlayList("00001.rpls")が呼び出され、プレイリスト「00001.rpls」が再生される。
プレイリスト「00001.rpls」の再生が終了されると、プレイリスト再生終了のイベントPlayListEnded()が発生され、このイベントに対応したイベントハンドラplayScenario("scenario000.js")により、シナリオ「Scenario000.js」を再生するように指示される。すなわち、この例では、シナリオ「Scenario001」の再生が終了されると、再びメニュー画面91が表示される。
なお、シナリオ「Scenario001」の再生中に、「keyID」で指定されるキーが操作されても、シナリオ「Scenario000.js」の再生が指示され、再びメニュー画面91が表示される。
なお、図30〜図33で示したHTMLおよびECMAスクリプトの記述は、一例であって、これはこの例に限定されるものではない。すなわち、HTMLやECMAスクリプトの記述には自由度があり、一部を異なる記述にしても同等の動作を実現するようにできる。
2−7.デコーダモデル
図34は、この発明の実施の第1の形態に適用できるプレーヤデコーダ100の一例の構成を示す機能ブロック図である。このプレーヤデコーダ100は、図示されないドライブ装置に装填されたディスクから再生されたデータを解釈し、AVストリームを出力すると共に、出力されたAVストリームに対するユーザによるインタラクティブな操作を可能とする。
なお、プレーヤデコーダ100は、図示されないCPUにより全体の動作が制御される。例えば、プレーヤデコーダ100の各部におけるストリームやデータの流れは、CPUにより監視され、制御される。
図示されないドライブ装置にディスクが装填されると、上述したように、先ずファイル「startup.js」が再生され、このファイル「startup.js」の記述に基づき、シナリオファイルが読み出され、さらに、シナリオファイルの記述に従い、HTMLファイル、動画プレーン10に表示するための動画データ、字幕プレーン11やグラフィクスプレーン12に表示するための画像データ、プレイリストファイル、シナリオファイルから呼び出される別のシナリオファイル、音声データなどがディスクから読み出される。
以下では、ディスクから読み出されるこれらのデータのうち、動画データ、サブピクチャ(字幕データ)や音声データといった、連続的に処理する必要があるストリームをリアルタイムストリームと称する。また、シナリオファイル、HTMLファイル、画像データファイル、プレイリストファイルといった、連続的な処理を要求されな非リアルタイムなデータを、ストアオブジェクトと称する。ストアオブジェクトは、メモリ上などに蓄積、展開され、必要に応じて処理される。
プレーヤデコーダ100は、チャンネル(1)および(2)の2系統の入力チャンネルを有し、入力チャンネル(1)の入力端101に、ストアオブジェクトが入力される。入力チャンネル(2)の入力端202に、リアルタイムストリームが入力される。入力端202に、ストアオブジェクトを入力することも可能である。この実施の第1の形態では、入力端202に入力されるリアルタイムストリームおよび一部のストアオブジェクトは、例えばMPEG2 TSである。
なお、入力端202に入力されるリアルタイムストリームは、MPEG2 TSに限られない。パケット単位で伝送され、ビデオデータ、オーディオデータ、静止画像データなどを多重化可能であれば、他の形式のストリームを入力するようにしてもよい。このときには、後述するPIDフィルタ110は、そのストリーム形式に適合したデマルチプレクサとして用いられ、ビデオデータ、オーディオデータ、静止画像データなどを分離する。
また、例えば、ドライブ装置においてディスクの回転速度を2倍速などの高速回転としてディスクからの読み出し転送レートを上げ、時分割で動作させることにより、ディスクからの、チャンネル(1)および(2)の2系統の読み出しが実現可能である。
先ず、入力チャンネル(1)の系統について説明する。入力端101に入力されたストアオブジェクトは、スイッチ回路102に入力される。ストアオブジェクトとしてECMAスクリプトやHTMLファイルなどによるプログラムコードが入力された場合、スイッチ回路102において出力端102Aが選択され、入力されたプログラムコードがコードバッファ104に蓄えられる。
一方、ストアオブジェクトとして画像データが入力された場合、スイッチ回路102において出力端102Bが選択され、入力された画像データがスイッチ回路103に入力される。入力端202に入力されたリアルタイムストリームに、字幕プレーン11やグラフィクスプレーン12に表示するための画像データが含まれていない場合には、スイッチ回路103で入力端103Aが選択され、スイッチ回路102から入力された画像データがコンテンツバッファ105に蓄えられる。
同様にして、入力端202に入力されたリアルタイムストリームに、字幕プレーン11やグラフィクスプレーン12に表示するための画像データが含まれている場合には、スイッチ回路103において入力端103Bが選択され、当該画像データがコンテンツバッファ105に蓄えられる。コードバッファ104およびコンテンツバッファ105に蓄えられたストアオブジェクトは、必要に応じて読み出され、マルチメディアエンジン106に供給される。
コンテンツバッファ105に蓄えられたストアオブジェクトのうち画像データは、スイッチ回路107および108をそれぞれ介して、サブピクチャデコーダ116および静止画像デコーダ117にも供給される。
マルチメディアエンジン106は、XMLパーサ106A、スクリプトインタプリタ106Bおよびグラフィクスレンダラ106Cを含む。マルチメディアエンジン106は、独立的なハードウェアで構成してもよいし、上述した図示されないCPUの、所定のプログラムに基づく処理で実現することも可能である。
XMLパーサ106Aは、XML(Extensible Markup Language)文書を解析する機能を有し、HTML文書の解析も可能である。XMLパーサ106Aで解釈されたHTML文書は、このプレーヤデコーダ100で実行可能な形式に変換される。スクリプトインタプリタ106Bは、ECMAスクリプトを解析し、このプレーヤデコーダ100で実行可能な形式に変換される。また、グラフィクスレンダラ106Cは、画像データを、字幕プレーン11およびグラフィクスプレーン12に展開可能な形式にデコードする。
マルチメディアエンジン106において、バッファ109をワークメモリとして、これらXMLパーサ106A、スクリプトインタプリタ106Bおよびグラフィクスレンダラ106Cの処理が行われる。例えば、XMLパーサ106Aおよびスクリプトインタプリタ106Bにより、バッファ109のうちコードバッファ109Aが用いられる。また、グラフィクスレンダラ106Cにより、バッファ109のうちグラフィクスバッファ109Dが用いられる。バッファ109は、上述のコードバッファ109Aおよびグラフィクスバッファ109Dの他に、文字列の表示に用いるフォントデータが格納されるフォントバッファ109B、XMLパーサ106AでHTML文書を解析した結果を階層化された木構造で保持するためのツリーバッファ109Cなどが含まれる。
マルチメディアエンジン106では、例えば、コードバッファ104に蓄えられたECMAスクリプトを読み出し、読み出されたECMAスクリプトの記述に基づき、必要に応じて、コードバッファ104からの他のECMAスクリプトやHTML文書の読み出し、コンテンツバッファ105からの画像データの読み出しなどを行う。コードバッファ104およびコンテンツバッファ105に格納されたデータは、当該データが不要になるまで、コードバッファ104やコンテンツバッファ105に保持しておくことができる。したがって、これらコードバッファ104やコンテンツバッファ105に格納されたデータは、必要に応じて何度でも読み出して使うことができる。
マルチメディアエンジン106では、上述の他にも、入力された複数種類のデータのデマルチプレクス処理、JavaVM(Java(登録商標)仮想マシン)機能などが行われる。さらに、マルチメディアエンジン106により、ユーザからの、リモートコントロールコマンダやポインティングデバイスなどによる入力が受け取られ、所定に処理される。ユーザ入力は、さらに、後述するサブピクチャデコーダ116、静止画像デコーダ117、オーディオデコーダ118、MPEGビデオデコーダ120およびシステムデコーダ121にも供給される。
グラフィクスレンダラ106Cで処理された画像データは、スイッチ回路130および131をそれぞれ介してサブピクチャプレーン132および静止画像プレーン134に供給されると共に、グラフィクスプレーン133およびM/Sスイッチプレーン136に供給される。なお、この例では、サブピクチャプレーン132およびグラフィクスプレーン133に供給される画像データは、PNG形式であるものとする。これらの各プレーン132、133、134および136に画像データが供給されるタイミングは、マルチメディアエンジン106により制御される。なお、M/Sスイッチプレーン136は、スイッチ回路137を制御し、後述する静止画像プレーン134から出力される静止画像データと、動画像プレーン135から出力される動画像データとを切り換えて後段に供給する。
ここで、サブピクチャプレーン132およびグラフィクスプレーン133は、それぞれ上述した字幕プレーン11およびグラフィクスプレーン12に対応する。静止画像プレーン134および/または動画プレーン135は、上述した動画プレーン10に対応する。なお、サブピクチャプレーン132、グラフィクスプレーン133、静止画像プレーン134および動画像プレーン135は、例えばフレームメモリからなる。
マルチメディアエンジン106は、さらに、後述するプレゼンテーションプロセッサ139に対して、静止画像プレーン134または動画像プレーン135、サブピクチャプレーン132、ならびに、グラフィクスプレーン133を切り換える制御信号を供給する。同様に、マルチメディアエンジン106は、後述するプレゼンテーションプロセッサ141に対して、オーディオストリーム出力を制御するような制御信号を供給する。
次に、入力チャンネル(2)の系統について説明する。入力端202にMPEG2 TSで入力されたリアルタイムストリームは、PIDフィルタ110に供給され、MPEG2 TSのトランスポートパケットに格納されるPID(Packet Identification)が抽出され、当該トランスポートパケットに格納されるストリームの属性が検出される。PIDフィルタ110では、このストリーム属性に基づき、入力されたリアルタイムストリームが、トランスポートパケット毎に対応する系統に振り分けられる。
PIDに基づき、トランスポートパケットがストアオブジェクトに属する画像データが格納されているパケットであるとされれば、当該トランスポートパケットは、バッファTBn111Aに一旦溜め込まれ、所定のタイミングで読み出されて入力端103Bが選択されたスイッチ回路103に入力され、スイッチ回路103を介してコンテンツバッファ105に格納される。
PIDフィルタ110において、PIDに基づき、トランスポートパケットがサブピクチャデータすなわち字幕データが格納されているパケットであるとされれば、当該トランスポートパケットは、バッファTBn111BおよびバッファBn112Bに一旦溜め込まれ、所定のタイミングで読み出されて入力端107Bが選択されたスイッチ回路107に入力され、スイッチ回路107を介してサブピクチャデコーダ116に供給される。
サブピクチャデコーダ116では、供給されたトランスポートパケットのヘッダ情報を除去すると共に、当該トランスポートパケットに格納された字幕データがデコードされて字幕を表示するための画像データとされる。この画像データは、所定のタイミングでスイッチ回路130の入力端130Bに入力され、スイッチ回路130を介してサブピクチャプレーン132に展開される。
PIDフィルタ110において、PIDに基づき、トランスポートパケットが静止画像データが格納されているパケットであるとされれば、当該トランスポートパケットは、バッファTBn111CおよびバッファBn112Cに一旦溜め込まれ、所定のタイミングで読み出されて入力端108Bが選択されたスイッチ回路108に入力され、スイッチ回路108を介して静止画像デコーダ117に供給される。
静止画像デコーダ117では、供給されたトランスポートパケットのヘッダ情報を除去すると共に、当該トランスポートパケットに格納された静止画像データがデコードされ、静止画像データとされる。この静止画像データは、所定のタイミングでスイッチ回路131の入力端131Bに入力され、スイッチ回路131を介して静止画像プレーン134に展開される。
PIDフィルタ110において、PIDに基づき、トランスポートパケットがオーディオデータが格納されているパケットであるとされれば、当該トランスポートパケットは、バッファTBn111DおよびバッファBn112Dに一旦溜め込まれ、所定のタイミングで読み出されてオーディオデコーダ118に供給される。このトランスポートパケットに格納されるオーディオデータは、例えばMPEGに準拠した方式で圧縮符号化されている。
オーディオデコーダ118は、例えばリニアPCM(Pulse Code Modulation)オーディオデコーダ119を有し、入力されたトランスポートストリームのヘッダ情報を除去すると共に、当該トランスポートパケットに格納された圧縮符号化されたオーディオデータをリニアPCMオーディオデータにデコードする。
オーディオデコーダ118から出力されたリニアPCMオーディオデータは、オーディオ用のプレゼンテーションプロセッサ141に入力され、マルチメディアエンジン106の制御に基づき所定の音響効果などが付加されて、出力端142に導出される。
PIDフィルタ110において、PIDに基づき、トランスポートパケットが動画像データが格納されているパケットであるとされれば、当該トランスポートパケットは、バッファTBn111E、バッファMBn113およびバッファEBn114に一旦溜め込まれ、所定のタイミングで読み出されてMPEGビデオデコーダ120に供給される。このトランスポートパケットに格納される動画像データは、MPEG2方式により圧縮符号化されている。
MPEGビデオデコーダ120では、供給されたトランスポートパケットのヘッダ情報を除去すると共に、当該トランスポートパケットに格納された、MPEG2方式で圧縮符号化された動画像データをベースバンドの動画像データにデコードする。
MPEGデコーダ120から出力された動画像データは、スイッチ回路124の入力端124Aに入力されると共に、バッファ123を介してスイッチ回路124の入力端124Bに入力される。スイッチ回路124において、所定のタイミングで入力端124Aおよび124Bが選択され、出力された動画像データが動画像プレーン135に展開される。
PIDフィルタ110において、PIDに基づき、トランスポートパケットがシステム情報が格納されているパケットであるとされれば、当該トランスポートパケットは、バッファTBn111FおよびBsys115を介してシステムデコーダ121に供給される。システムデコーダ121では、供給されたトランスポートパケットのヘッド情報が除去され、格納されているシステム情報が取り出される。システム情報は、例えば図示されないCPUに渡される。
サブピクチャプレーン132上の画像データは、上述のパレット22に対応するパレット150に供給され、256色からなるパレットに対してインデックスによる参照がなされ、YCbCrデータが出力されると共に、不透明度データα1が抜き出される。これらYCbCrデータおよび不透明度データα1は、プレゼンテーションプロセッサ139に供給される。
グラフィクスプレーン133上の画像データは、上述のRGB/YCbCr変換回路26に対応するRGB/YCbCr変換回路151に供給され、カラーシステムがRGB(4:4:4)からYCbCr(4:4:4)に変換される。RGB/YCbCr変換回路151から出力されたYCbCrデータは、プレゼンテーションプロセッサ139に供給される。それと共に、グラフィクスプレーン133上の画像データから不透明度データα2が抜き出され、プレゼンテーションプロセッサ139に供給される。
静止画像プレーン134上の画像データがスイッチ回路137の入力端137Aに入力される。また、動画像プレーン135上の動画像データがスイッチ回路137の入力端137Bに入力される。静止画像プレーン134上の画像データおよび動画像プレーン135上の動画像データは、M/Sスイッチプレーン136の制御により、スイッチ回路137で選択される。すなわち、静止画像プレーン134は、動画像プレーン135と同等に扱われる。スイッチ回路137の出力は、アップ/ダウンコンバータ138を介してプレゼンテーションプロセッサ139に供給される。
なお、アップ/ダウンコンバータ138は、画像の解像度を変換する回路であって、例えば高解像度のHD(High Definition)画像から通常の解像度を有するSD(Standard Definition)画像への変換を行う。
プレゼンテーションプロセッサ139は、図17を用いて説明した、字幕プレーン11(サブピクチャプレーン132)の画像データによる不透明度α1と、グラフィクスプレーン12(グラフィクスプレーン133)による不透明度α2とを用いたアルファブレンディング処理を行う。
すなわち、プレゼンテーションプロセッサ139では、静止画像プレーン134または動画像プレーン135のうちスイッチ回路137で選択された側の画像データに対して、サブピクチャプレーン132の画像データに設定された不透明度α1に基づき、サブピクチャプレーン132の画像データが合成される。さらに、静止画像プレーン134または動画像プレーン135およびサブピクチャプレーン132が合成された画像データに対して、グラフィクスプレーン133の画像データに設定された不透明度α2に基づき、グラフィクスプレーン133の画像データが合成される。この、グラフィクスプレーン133の画像データ、サブピクチャプレーン132の画像データ(字幕データ)、ならびに、静止画像プレーン134または動画像プレーン135の画像データが合成された画像データが出力端140に導出される。
なお、プレゼンテーションプロセッサ139は、画像データに対してリアルタイムでエフェクト処理を行うこともできる。
上述では、プレーヤデコーダ100の各部がハードウェアで構成されるように説明したが、これはこの例に限られない。例えば、プレーヤデコーダ100をソフトウェア上の処理として実現することも可能である。この場合、プレーヤデコーダ100をコンピュータ装置上で動作させることができる。また、プレーヤデコーダ100をハードウェアおよびソフトウェアが混合された構成で実現することもできる。例えば、オーディオデコーダ118やMPEGビデオデコーダ120をハードウェアで構成し、その他をソフトウェアで構成することが考えられる。
プレーヤデコーダ100をソフトウェアのみ、または、ハードウェアおよびソフトウェアの混合により構成し、コンピュータ装置で実行させるためのプログラムは、例えばCD−ROM(Compact Disc-Read Only Memory)といった記録媒体に記録されて提供される。このCD−ROMをコンピュータ装置のCD−ROMドライブに装填し、CD−ROMに記録されたプログラムを所定にコンピュータ装置にインストールすることで、上述の処理をコンピュータ装置上で実行可能な状態とすることができる。なお、コンピュータ装置の構成は、極めて周知であるため、説明は省略する。
2−8.ユーザインターフェイス
次に、この発明の実施の第1の形態によるユーザインターフェイスについて、より詳細に説明する。図35は、グラフィクスプレーン12上に表示されるボタン表示の一例の状態遷移図である。ボタン表示の状態は、画面にボタンが表示されるボタン表示状態と、画面にボタンが表示されていないボタン非表示状態とに大別される。ボタン非表示状態からボタン表示が開始されボタン表示状態に遷移する。ボタン表示状態からボタン表示が終了され、ボタン非表示状態に遷移する。ボタン表示状態は、さらに、通常状態、選択状態および実行状態の3種類の状態を有する。ボタン表示は、これら3種類の状態間をそれぞれ互いに遷移することができる。遷移方向を一方向に限定することも可能である。
上述の図20を用いて、より具体的に説明する。先ず、ディスク挿入時や、ユーザがリモコンのメニューキーを押したときに、メニュー画面60が表示される。メニュー画面60の表示に伴い、ボタン62A、62B、62C、63D、64および65が非表示状態から表示状態へと遷移する。ボタン表示開始時は、ボタン62A、62B、62C、63D、64および65のうち一つが予め選択状態にされていることが多い。例えばボタン62Aが予め選択状態とされ、他のボタンが通常状態とされているものとする。
この状態で、ユーザがリモコンの例えば矢印キーを操作すると、通常状態のボタンの一つ(例えばボタン62B)が選択状態に遷移すると共に、選択状態だったボタン62Aが通常状態へと遷移する。このようにして、ユーザ操作によってカーソルが移動していく。ユーザがリモコンの決定キーを操作すると、そのときに選択状態にあったボタン62Bが選択状態から実行状態へと遷移し、当該ボタン62Bに予め割り当てられているプレーヤ動作が実行される。
上述したように、プレーヤ動作は、プログラミング言語やECMAスクリプトなどのスクリプト言語により記述され、ディスク上に記録され用意されている。このプレーヤ動作に関する記述は、独立したファイルとしてディスク上に記録してもよいし、後述するグラフィックオブジェクトのように、クリップAVストリームファイルに多重化することも可能である。
2−9.データ構造について
次に、このようなメニュー画面を構成するボタンなどの画像データおよび当該画像データに付随する制御情報のデータ構造について説明する。ここでは、ディスクに収録されるコンテンツ本体をなす動画以外に表示される映像要素として、字幕およびグラフィクス(静止画)を考える。以下では、画面に表示される字幕やグラフィクスといった要素をオブジェクトとして考え、オブジェクトの種類を、図36に示されるように、字幕、同期型グラフィクスおよび非同期型グラフィクスの3種類に分類する。
字幕とは、例えば映画の字幕のように、動画と同期して表示/非表示の切り換えが行われ、リモコンなどによるユーザ入力とは無関係な映像要素を指す。グラフィクスとは、メニュー画面上のボタンなどのように、ユーザ入力を受け付けることができる映像要素とする。さらに、グラフィクスは、同期型グラフィクスおよび非同期型グラフィクスの2種類に分類される。同期型グラフィクスとは、例えば本編再生中のあるタイミングに表示される分岐選択画面のように、動画と同期して表示される映像要素とする。また、非同期型グラフィクスとは、ディスク挿入時に最初に表示されるメニュー画面や、ユーザ入力に応じて表示される画面など、本編の再生とは非同期に表示される映像要素を指す。JavaVM上で動作するJavaアプリケーションにより表示される映像要素や、ブラウザソフトウェア上でHTMLファイルの記述に基づき表示される映像要素は、非同期グラフィクスである。
各映像要素と動画プレーン10に表示される本編映像との関係からいえば、字幕および同期型グラフィクスは、本編映像に同期して表示されるため、共に同期型である。一方、非同期型グラフィクスは、上述のように本編映像と非同期で表示されるので、その名の示す通り、非同期型である。
また、字幕とグラフィクスとは、表示先のプレーンの違いから分類することができる。字幕は、字幕プレーン11に表示される。同期型および非同期型グラフィクスは、グラフィクスプレーン12に表示される。
ここで、字幕および同期型グラフィクスは、本編の動画再生中に表示するという共通の性質を持つことから、共通のデータ構造とすることが好ましい。以下では、これら共通のデータ構造とされる字幕および同期型グラフィクスを、グラフィクスオブジェクトと称する。グラフィクスオブジェクトは、常に動画再生と同期して表示されるため、動画と同一のストリームに多重化しておくと、扱いが容易になる。
図37は、この発明の実施の第1の形態によるグラフィクスオブジェクト200のデータ構造の例を示す。グラフィクスオブジェクト200は、図37Aに一例が示されるように、グラフィクスオブジェクトヘッダ201、表示制御命令テーブル202およびPNGデータ領域203の3つの領域からなる。
なお、以下の例では、グラフィクスオブジェクト200で扱われる画像データの形式をPNG形式とし、画像データをPNG画像データとしているが、JPEG形式やビットマップデータ、ランレングス圧縮された画像データ、圧縮符号化がなされていないビットマップデータなど、他の形式の画像データをグラフィクスオブジェクト200で扱うことも可能である。ここでは、便宜上、画像データをPNG画像、PNG画像データなどと表現する。
図37において、グラフィクスオブジェクトヘッダ201は、当該グラフィクスオブジェクト200の属性を表す情報が格納される。グラフィクスオブジェクト200の属性は、例えば、当該グラフィクスオブジェクト200のデータサイズ、当該グラフィクスオブジェクト200が有するPNG画像数、当該グラフィクスオブジェクト200が有するPNG画像データが共通に使用するパレットデータ、ならびに、当該グラフィクスオブジェクト200を識別する識別情報からなる。識別情報は、例えばグラフィクスオブジェクト200毎に一意に割り当てられた番号である。グラフィクスオブジェクトヘッダ201に、さらに他の情報を格納してもよい。
表示制御命令テーブル202は、当該グラフィクスオブジェクト200が有するPNG画像の表示位置、表示開始時刻および表示終了時刻といった、PNG画像の表示を制御するための情報が格納されるテーブルである。
PNGデータ領域203は、PNG形式で圧縮符号化された画像データ(以下、PNGデータと称する)が格納される。PNGデータ領域203には、複数のPNGデータ203A、203B、・・・、203nを格納することができる。PNGデータ領域203に格納されるPNGデータ203の数は、上述したグラフィクスオブジェクトヘッダ201に記述されている。
なお、PNGデータ領域203に格納される複数のPNGデータ203A、203B、・・・、203nは、アニメーションを構成する複数枚の静止画の組や、上述したボタン表示の3状態を表す画像といった、相互に関連の強い画像であることを想定している。これらを、一つのグラフィクスオブジェクト200に纏めることで、PNG画像の扱いを容易にすることができる。
グラフィクスオブジェクト200は、表示が可能になる時刻を示す時刻情報を有する。リアルタイムストリームがMPEG2 TSで伝送されるこの例では、この時刻情報として、MPEG2(Moving Pictures Experts Group 2)により定義された、pts(Presentation Time Stamp)を用いる。ptsは、再生出力の時刻管理情報で、90kHzのクロックで計測した値を33ビット長で表す。MPEGシステムの基準復号器内部のSTC(System Time Clock)がptsに一致したときに、対象となるアクセスユニットを再生出力する。一つのグラフィクスオブジェクト200は、ptsで表される時刻から表示が可能になり、その時刻以降に、表示制御命令により実際に表示のON/OFFが行われる。表示制御命令により表示の管理を行うため、表示を停止した後に再度、同じグラフィクスオブジェクト200を表示させるような制御が可能である。
図37Bは、字幕を格納するグラフィクスオブジェクト200の例を示す。PNGデータ領域203に、字幕として表示する画像がPNGデータ(1)203A−1として格納される。通常、字幕であれば、一つのグラフィクスオブジェクト200に含まれるデータは、PNGデータ(1)203A−1一つで十分である。字幕に対して、フェードイン/フェードアウトのような、画像の内容が変化しない特殊効果を施すときは、表示制御命令テーブル202に対してPNGデータ(1)A−1の不透明度を変化させる表示制御命令を加えることで、実現できる。
一方、字幕に対して、アニメーションなどのような、画像そのものが変化するような効果を施す場合には、図37Bに点線で示されるように、アニメーションの各動作に対応する複数のPNGデータ(2)B−1、PNGデータ(3)C−1、PNGデータ(4)D−1、・・・を、一つのグラフィクスオブジェクト200に格納すればよい。これに限らず、日本語字幕、英語字幕など、言語が異なる字幕を表示するPNGデータをPNGデータ(1)A−1、PNGデータ(2)B−1、・・・として、一つのグラフィクスオブジェクト200に格納することもできる。
図37Cは、ボタンを構成するグラフィクスオブジェクト200の例を示す。ボタンは、上述したように、通常状態、選択状態および実行状態の3種類の状態を有し、これら3種類の状態のそれぞれでボタン表示を異ならせることができる。3種類の状態でボタン表示を異ならせる場合、3枚のボタン画像データを用意しておく必要がある。これら3枚のボタン画像データを、ひとまとまりのグラフィクスオブジェクト200として扱う。すなわち、グラフィクスオブジェクト200のPNGデータ領域203に、通常状態、選択状態および実行状態それぞれのボタン表示に用いるPNGデータ203A−2、203B−2および203C−2を格納する。
図37Bに実線で示される通常の字幕のように、グラフィクスオブジェクト200内に一つだけ字幕表示のPNGデータ203A−1が存在する場合には、当該グラフィクスオブジェクト200内の表示制御命令テーブル202に格納される表示制御命令は、そのPNGデータ203A−1に対するものとなる。一方、図37Cに一例が示されるような、グラフィクスオブジェクト200内に、複数のPNGデータ203A−2、203B−2および203C−2が存在する場合、表示制御命令テーブル202に格納される表示制御命令が、複数のPNGデータ203A−2、203B−2および203C−2のうちどのデータに対する表示制御命令であるかを特定する必要がある。
例えば、図37Cに例示される、ボタンのグラフィクスオブジェクト200においては、このボタンの表示開始時の初期状態が選択状態と定められている場合は、最初に表示するボタン画像は、PNGデータ領域203の先頭に配置される、通常状態時のPNGデータ203A−2ではなく、選択状態時のPNGデータ203B−2としなければならない。この発明の実施の第1の形態では、このような表示制御は、グラフィクスオブジェクト200の外で行うようにしている。
例えば、各ボタンの初期状態や、表示開始および表示停止、ボタンが実行状態に遷移された際に実行されるプログラムなどは、グラフィクスオブジェクト200外部のスクリプトプログラム、例えば上述のECMAスクリプトやJavaScriptによって指定する方法が考えられる。また、ボタンの表示中における、ボタン表示を行うPNGデータの変更は、例えばユーザがリモコンの矢印キーを操作し、カーソルを移動させた際に発生する。この場合には、プレーヤがユーザ入力に応じて各ボタンのPNGデータを入れ替えることになる。
この発明の実施の第1の形態では、グラフィクスオブジェクト200は、MPEG2に規定されるパケットに分割され、クリップAVストリームに多重化され、クリップAVストリームファイルとしてディスクに記録される。図38に一例が示されるように、グラフィクスオブジェクト200は、分割され、MPEG2に規定されるPES(Packetized Elementary Stream)パケット210、210、・・・に格納される。このとき、グラフィクスオブジェクトヘッダ201および表示制御命令テーブル202、ならびに、各PNGデータ203A、203B、・・・、203nそれぞれの先頭が、PESパケット210、210、・・・のペイロードの先頭に合致するように、データが配置される。こうすることで、再生時に、グラフィクスオブジェクト200内の各データの検索が容易となる。
こうして分割されてPESパケット210、210、・・・に格納されたグラフィクスオブジェクト200は、さらに、データサイズが188バイトに固定されたTSパケットに分割され(図示しない)、クリップAVストリームなどの動画データや音声データによるストリームに多重化される。
2−10.グラフィクスオブジェクトのデコーダモデルについて
図39は、グラフィクスオブジェクト200のデコードを行うグラフィクスオブジェクトデコーダモデル240の一例の構成を示す機能ブロック図である。このグラフィクスオブジェクトデコーダモデル240は、図34を用いて説明したプレーヤデコーダ100におけるマルチメディアエンジン106およびサブピクチャデコーダ116を中心に構成される。図39において、図34と共通する部分には同一の符号を付して詳細な説明を省略する。また、この図39は、より機能面に注目して表現されており、上述の図34とは異なる表現がなされている場合があるので、必要に応じて図34の構成と対応付けながら説明する。
端子202からMPEG TSとして入力されたクリップAVストリームがPIDフィルタ110に供給される。PIDフィルタ110は、MPEG2 TS(トランスポートストリーム)に対するデマルチプレクサとして機能し、供給されたMPEG TSのPIDに基づき、動画像データ、オーディオデータおよびグラフィクスオブジェクト200をそれぞれ抜き出す。動画像データは、ビデオバッファとしてのバッファTBn111Eに供給される。オーディオデータは、オーディオバッファとしてのバッファ111Dに供給される。グラフィクスオブジェクト200は、グラフィクスオブジェクト(図39では「GOBJ」と表記)の入力バッファであるバッファTBn111Bに供給される。
グラフィクスオブジェクト200は、バッファTBn111Bから読み出され、GOBJパーサ224に供給される。GOBJパーサ224は、例えば図34におけるサブピクチャデコーダ116の機能の一つである。GOBJパーサ224では、供給されたグラフィクスオブジェクト200のグラフィクスオブジェクトヘッダ201を読み取り、パレットデータを抽出すると共に、表示制御命令テーブル202およびPNGデータ領域203を分離する。パレットデータおよび表示制御命令テーブル202は、コマンドプロセッサ/グラフィックレンダラ225に供給される。また、PNGデータ領域203のPNGデータ203A、203B、・・・は、PNGデコーダバッファ226に一時的に格納される。PNGデコーダバッファ226は、例えば図34におけるバッファBn112Bに対応する。
PNGデコーダバッファ226に格納されたPNGデータ203は、サブピクチャデコーダ116の機能の一つであるPNGデコーダ227によりデコードされ、ビットマップデータとされる。このビットマップデータは、オブジェクトバッファ228に蓄積される。オブジェクトバッファ228は、図34におけるグラフィクスバッファ109Dに対応する。
コマンドプロセッサ/グラフィックレンダラ225は、GOBJパーサ224から供給された表示制御命令テーブル202に記述される表示制御命令に従い、オブジェクトバッファ228に蓄積されているビットマップデータを読み出して指定された時刻にプレーンバッファ229に転送する。プレーンバッファ229は、例えば図34におけるサブピクチャプレーン132およびグラフィクスプレーン133に対応させることができる。例えば、字幕と、字幕以外のグラフィクスオブジェクトとに対してそれぞれプレーンバッファ229A、229B(図示しない)を設けることができる。これに限らず、サブピクチャプレーン132およびグラフィクスプレーン133を、プレーンバッファ229上の異なる領域とすることもできる。
また、コマンドプロセッサ/グラフィックレンダラ225は、GOBJパーサ224から供給されたパレットデータを、図34のパレット150に対応する共通パレットテーブル230に供給する。コマンドプロセッサ/グラフィックレンダラ225は、図34のマルチメディアエンジン106の一部の機能およびサブピクチャデコーダ116の一部の機能を併せ持つ。
グラフィクスオブジェクト200がボタンを構成するものである場合、上述したように、ボタンの3種類の状態にそれぞれ対応したPNGデータ203A、203Bおよび203Cがグラフィクスオブジェクト200に格納される。PNGデータ203A、203Bおよび203Cは、PNGデコーダ227でデコードされ、オブジェクトバッファ228にそれぞれ蓄積される。
一方、ユーザのリモコンなどによる入力が、コマンドプロセッサ/グラフィックレンダラ225により受け取られる。コマンドプロセッサ/グラフィックレンダラ225は、このユーザ入力に応じて、オブジェクトバッファ228から該当するビットマップを読み出して、プレーンバッファ229に転送する。例えば、ユーザ入力があるボタンに対して選択状態から実行状態に状態遷移させるものであれば、オブジェクトバッファ228から、実行状態のボタン画像に対応するビットマップデータが選択的に読み出されて、プレーンバッファ229に転送される。
なお、コマンドプロセッサ/グラフィックレンダラ225は、オブジェクトバッファ228から読み出したビットマップデータに対して、表示制御命令に従い部分切り出しなどの特殊効果処理を施すこともできる。
この実施の第1の形態では、PNGデータは、1画素のサンプリング深さが8ビットとされているため、プレーンバッファ229は、1画素当たり8ビットのデータが並んでいることになる。プレーンバッファ229は、ディスプレイ装置などに実際に画像を表示させる処理を行う表示系の走査周期毎に読み出される。プレーンバッファ229から読み出されたビットマップデータは、例えば図34のパレット150に対応できる共通パレットテーブル230に供給され、パレットインデックス値から実際のRGB(4:4:4)の色情報に変換されると共に、不透明データα1、α2が抜き出される。RGB(4:4:4)の色情報は、図示されない変換回路でYCbCr(4:4:4)の色情報に変換され、不透明データα1、α2と共に、図34のプレゼンテーションプロセッサ139に供給される。
なお、例えばフェードイン/フェードアウトなどの、パレットや不透明度を変える処理が必要な特殊効果は、コマンドプロセッサ/グラフィックレンダラ225が表示制御命令に従い共通パレットテーブル230のデータを変化させることで実現される。また、字幕と、字幕以外のグラフィクスオブジェクト200に対して、それぞれ共通パレットテーブル230A、230B(図示しない)を設けてもよい。
図40は、グラフィクスオブジェクト入力バッファ(バッファTBn111B、以下GOBJバッファ)、PNGデコーダ227、オブジェクトバッファ228およびプレーンバッファ229における蓄積データ量の遷移の例を概略的に示す。なお、PNGデコーダ227は、PNGデコーダ227がPNGデータのデコード時に用いるバッファにおける蓄積データ量が示されている。
図40の例では、3つのグラフィクスオブジェクトGOBJ#1、GOBJ#2およびGOBJ#3によるデータ量の遷移が時間の経過に従い示される。グラフィクスオブジェクトのデコード開始時刻は、MPEG2システムにおけるdts(Decoding Time Stamp)で表される。また、オブジェクトの有効期間は、開始時刻がptsで表され、グラフィクスオブジェクトヘッダ201内に記述される時刻presentation_endで終了される。この有効期間内に、表示制御命令によって画像の表示開始および終了が指示される。
図40Dを参照し、GOBJバッファにグラフィクスオブジェクトGOBJ#1のPNGデータが入力され、時刻dts of GOBJ#1に、このPNGデータのデコードが開始される。図40Cを参照し、PNGデータがGOBJ入力バッファからPNGデコーダ227に転送され、PNGデータがビットマップデータにデコードされる。実際には、PNGデータは、GOBJ入力バッファから一旦PNGデコーダバッファ226に溜め込まれ、PNGデコーダ227は、PNGデコーダバッファ226に溜め込まれたデータを用いてデコード処理を行う。
PNGデコーダ227は、デコード速度に上限があるため、GOBJ入力バッファからPNGデコーダバッファ226に対して、PNGデコーダ227のデコード速度を超えないような転送速度でデータが供給される。そのため、PNGデコーダバッファ226に対して、PNGデコーダ227での処理時間を0としたときの垂直線に対し、ある傾きAに対応するデータ転送レートで以てPNGデータが入力される。
PNGデータのPNGデコーダ227への入力が完全に終了していなくても、PNGデータのデコードを開始することが可能である。また、この図40の例では、GOBJ入力バッファに格納されたオブジェクトGOBJ#1が全てPNGデコーダ227に転送された後、次のオブジェクトGOBJ#2のPNGデータの、GOBJバッファへの入力が開始されている。
なお、オブジェクトGOBJ#2およびオブジェクトGOBJ#3についても、ある傾きBおよびCにそれぞれ対応する転送レートで以て、PNGデコーダバッファ226に対してPNGデータが入力される。傾きBは、実際には、複数の区間でそれぞれ異なる傾きとなっている。
時刻pts of GOBJ#1によりオブジェクトGOBJ#1の有効期間が開始されると、デコードされPNGデコーダバッファに蓄積された、オブジェクトGOBJ#1のビットマップデータがオブジェクトバッファ228に転送される(図40B)。オブジェクトバッファ228に転送されたオブジェクトGOBJ#1は、このオブジェクトGOBJ#1に対して時刻presentation end of GOBJ#1で示される時刻まで、有効期間が持続される。
オブジェクトGOBJ#1の有効期間内に、命令Display ON cmd.of GOBJ#1によりオブジェクトGOBJ#1の表示命令が出されたら、オブジェクトバッファ228に蓄積されたオブジェクトGOBJ#1のビットマップデータがプレーンバッファ229に転送され、表示される(図40A)。詳細は後述するが、ビットマップデータをプレーンバッファ229へ転送する際の転送レートは、バス幅などの影響により上限を有する。そのため、プレーンバッファ229に対するビットマップデータの書き込みは、例えばある傾きDに対応する転送レートで以て行われる。
これは、他のオブジェクトGOBJ#2やオブジェクトGOBJ#3についても同様に、ある傾きE、F、Gに対応する転送レートで以てビットマップデータが転送され、プレーンバッファ229に書き込まれる。
表示は、オブジェクトGOBJ#1に対して表示停止を命令するコマンドDisplay OFF cmd.of GOBJ#1が出されるまで、持続される。コマンドDisplay OFF cmd.of GOBJ#1が出されると、プレーンバッファ229に格納された当該オブジェクトGOBJ#1のビットマップデータが破棄され、表示が停止される。
GOBJバッファには、オブジェクトGOBJ#2およびGOBJ#3のPNGデータも、順次、入力される。そして、オブジェクトGOBJ#1の場合と同様に、時刻dts of GOBJ#2、時刻dts of GOBJ#3からそれぞれデコード開始が指示され、PNGデータがPNGデコーダ227に供給され、PNGデコーダバッファを用いてビットマップデータへのデコードが行われる。そして、オブジェクトGOBJ#2に対して時刻pts of GOBJ#2により有効期間開始が指示され、図40では省略されているが、コマンドDisplay ON cmd.of GOBJ#2によりオブジェクトGOBJ#2の表示命令が出され、オブジェクトバッファ228からプレーンバッファ229にビットマップデータが転送され、コマンドDisplay OFF cmd.of GOBJ#2が出されるまで、オブジェクトGOBJ#2が表示される。
この図40の例では、オブジェクトGOBJ#2は、一旦、図示されないコマンドDisplay OFF cmd.of GOBJ#2により表示が停止された後、再びコマンドDisplay ON cmd.of GOBJ#2による表示が再開されている。オブジェクトバッファ228に格納されたオブジェクトGOBJ#2のビットマップデータは、オブジェクトGOBJ#2に対して有効期間終了時刻presentasion end of GOBJ#1を指定するまで保持されるため、コマンドDisplay ON cmd.of GOBJ#2を与えることにより、繰り返しオブジェクトGOBJ#2を表示させることができる。
一方、オブジェクトGOBJ#3は、オブジェクトGOBJ#2の有効期間中に重複して、有効期間が指定されている。この場合、オブジェクトバッファ228は、空き容量に応じて、複数のビットマップデータを互いに異なる領域に格納する。例えば、オブジェクトバッファ228からオブジェクトGOBJ#2のビットマップデータをプレーンバッファ229に転送して表示中に、オブジェクトバッファ228の異なる領域からオブジェクトGOBJ#3のビットマップデータをプレーンバッファ229に転送することで、2枚のビットマップデータを同時に表示させることができる。
2−11.グラフィクスの転送速度について
ここで、このグラフィクスオブジェクトデコーダモデル240(以下、デコーダモデル240と略称する)をプレーヤに実装する場合について考える。同一ディスクを異なるプレーヤで再生した際の、プレーヤ同士の再生互換性を保つためには、デコーダモデル240に対して所定の制限を設けることが必要となる場合がある。例えば、デコーダモデル240のグラフィクス処理能力には上限があり、その能力を超えるグラフィクスデータが入力された場合には、グラフィクスデータのデコードを完全に行うことができなくなり、正常な表示を行うことができなくなる。
すなわち、プレーヤ側では、プレーヤが最小限備える必要のあるグラフィクス処理能力を規格により定める。一方、ディスク側では、ディスクに記録するコンテンツを制作する側において、規格により定められたプレーヤの能力の範囲内で処理可能なグラフィクスを用意する。このようにしてプレーヤ側とディスク制作側とでグラフィクス処理能力の整合性を図ることで、再生互換性を保つことができる。
この発明の実施の第1の形態では、上述の図39における、GOBJパーサ224からPNGデコーダバッファ226へのデータ転送速度R(1)と、コマンドプロセッサ225からプレーンバッファ229へのデータ転送速度R(2)とを規定する。
データ転送速度R(1)は、PNGデコーダバッファ226に入力されるデータの、単位時間当たりのデータ転送量を規定する。すなわち、上述の図40Cに示される傾きA、BおよびCがデータ転送速度R(1)に対応する。これは、PNGデコーダバッファ226の後に接続されるPNGデコーダ227の、圧縮符号化されたグラフィクスデータを単位時間当たりにデコードできる量を示すデコード能力を規定する。したがって、データ転送速度R(1)を制限することで、入力された圧縮符号化グラフィクスデータに対してデコードが間に合わなくなり、表示などが破綻状態になる状況が防止される。
データ転送速度R(2)は、画像の更新速度を規定する。プレーンバッファ229は、実際に表示装置に表示される画面に対応している。そのため、プレーンバッファ229へのデータの書き込み速度によって、ユーザが見るグラフィクスの更新速度が決まる。データ転送速度R(2)の単位は、[バイト/秒]であって、プレーン全体すなわち全画面を更新する際の最小更新時間間隔を規定する。すなわち、上述の図40Aに示される傾きD、E、FおよびGがデータ転送速度R(2)に対応する。
プレーンの一部だけを更新する場合には、更新される画像データが少ないためデータ転送速度R(2)で規定される最小更新時間間隔よりも短い周期で更新される。但し、更新間隔は、更新される画像データのデータ量に反比例するとは限らず、当該画像データのプレーン上の配置により大きく影響される。
プレーンの更新速度について、図41を用いてより具体的に説明する。オブジェクトバッファ228には、2個のグラフィクスオブジェクト460および461が格納されているものとする。ここで、これら2個のグラフィクスオブジェクト460および461を、同時にプレーンバッファ229に書き込み表示させることを考える。
グラフィクスオブジェクト460および461は、オブジェクトバッファ228から読み出され、コマンドプロセッサ/グラフィックレンダラ225に供給される。このコマンドプロセッサ/グラフィックレンダラ225からの出力が上述のデータ転送速度R(2)により制限され、画面上の更新速度(更新間隔)が制限されることになる。
このとき、更新速度は、グラフィクスオブジェクト460および461の合計のデータ量ではなく、グラフィクスオブジェクト460および461を、プレーン上にどのように配置するかによって決まる。これは、グラフィクス処理を行う一般的なグラフィクスプロセッサでは、プレーンの更新を矩形領域で行うためである。
例えば、プレーン上に配置されるグラフィクスオブジェクト460および461を全て含む矩形領域262で以て、プレーンの更新がなされる。すなわち、コマンドプロセッサ/グラフィックレンダラ225において、グラフィクスオブジェクト460および461の配置情報に基づき矩形領域262の画像データが形成される。この矩形領域262の画像データが例えばバスを介してプレーンバッファ229に供給される。プレーンバッファ229では、例えば表示位置の指定に基づき、矩形領域262に対応する領域のデータが矩形領域262のデータと置き換えられる。
コマンドプロセッサ/グラフィックレンダラ225から出力される画像データは、ビットマップデータであるので、画像の内容によらず、画像の面積に応じたデータ量を有することになる。図41の例の場合、2個のグラフィクスオブジェクト460および461を含む矩形領域262の画像データ量は、例えば〔幅(Width)×高さ(Height)〕バイトで表すことができる。
ここで、プレーンバッファ229へのデータ転送速度が速度R(2)〔バイト/秒〕とされていることから、これら2個のグラフィクスオブジェクト460および461は、{速度R(2)/(幅×高さ)}秒の時間で更新できることが分かる。すなわち、{速度R(2)/(幅×高さ)}秒後には、次のグラフィクスオブジェクトの描画が可能となる。したがって、ディスク制作側では、次のグラフィクスオブジェクトの描画を、少なくともこの時間以上の間隔を空けて行うようにプログラムすることで、どのプレーヤでも同一のグラフィクス表示がなされ、再生互換性を保つことができる。
後述する動きのある字幕表示についても、上述のようにしてデータ転送速度R(2)を見積もることで、再生互換性を保つようにアニメーション速度を決めることができる。
2−12.グラフィクスオブジェクトの構造の詳細
次に、グラフィクスオブジェクト200の構造について、より詳細に説明する。図42は、グラフィクスオブジェクト200の一例の構造を表すシンタクスを示す。図37Aなどにおけるグラフィクスオブジェクトヘッダ201がブロックGraphicsObjectHeader()、表示命令制御テーブル202がブロックGOBJCommandTable()、PNGデータ領域203がブロックPNGImageRegion()にそれぞれ相当する。
ブロックGraphicsObjectHeader()の先頭にフィールドlengthが配置される。フィールドlengthは、データ長が8ビットの0以上の整数で、フィールドlengthの直後からブロックGraphicsObjectHeader()の終わりまでの長さをバイトで示す。フィールドpresentation_end_time_stampは、データ長が33ビットの0以上の整数で、このグラフィクスオブジェクト200の有効期間終了時刻を表す。グラフィクスオブジェクトの有効期間は、PESパケットヘッダのptsからこのフィールドpresentation_end_time_stampで示される有効期間終了時刻までである。フィールドNumber_of_PNG_imagesは、データ長が8ビットの0以上の整数で、ブロックPNGImageRegion()に格納されているPNG画像の数を表す。フィールドNumber_of_DispCmdsは、データ長が8ビットの0以上の整数で、ブロックGOBJCommandTable()に格納されている表示制御命令の数を表す。
ブロックGraphicsObjectHeader()内のブロックGlobalPaletteTable()は、このグラフィクスオブジェクト200で共通に使用されるパレットテーブルの情報が格納される。例えばこのブロックGlobalPaletteTable()に記述されるパレットテーブルの情報が、例えば共通パレットテーブル230の内容としてセットされる。フィールドstart_address_of_PNG_image(i)は、データ長が32ビットの0以上の整数で、i番目のPNG画像のデータPNG_image(i)が開始される位置を、このGraphicsObject()の先頭からの相対バイト数で表現する。
フィールドPNG_file_name(i)は、フィールドstart_address_of_PNG_image(i)から始まるPNGデータのファイル名を表す。ブロックPNGImageRegion()内のフィールドであるフィールドPNG_image(i)の内容は、単体のPNGファイルと同一であり、ブロックPNGImageRegion()は、一つ以上のPNGファイルを連結して作られる。例えば、上述の図37Aでは、PNGデータ203A、203B、・・・、203nが連結されてブロックPNGImageRegion()が作られる。その際にファイル名が失われないよう、フィールドPNG_file_name(i)にファイル名を保持しておくことができる。逆に、ブロックPNGImageRegion()を分解して個別のPNGファイルを復元する際には、各フィールドPNG_image(i)を、iが対応するフィールドPNG_file_name(i)で示されるファイル名の、独立したファイルとすればよい。
ブロックGOBJCommandTable()は、実行時刻が同じ表示制御命令を集めた命令グループDispCmds(i)から構成される。命令グループDispCmds(i)は、必ず実行時刻を指定する命令execution_time(time)から開始して、表示制御命令が並べられる。換言すると、命令execution_time(time)から次の命令execution_time(time)の前までが一つの命令グループDispCmds(i)を構成している。
ブロックPNGImageRegion()は、上述したように、PNG方式で圧縮符号化された画像一枚分のデータであるフィールドPNG_image(i)の並びで構成される。
なお、ブロックGraphicsObjectHeader()とブロックGOBJCommandTable()との間には、任意の数のpadding_wordを挿入することができる。同様に、ブロックGOBJCommandTable()とブロックPNGImageRegion()の間には任意の数のpadding_wordを挿入することができる。
図43は、上述したブロックGlobalPaletteTable()の一例の構造を表すシンタクスを示す。フィールドnumber_of_palette_entriesは、次に羅列されているパレットデータの数を表す。データ長が8ビットのインデックス番号で画像を表現する場合、このフィールドnumber_of_palette_entriesの値は、最大で256となり、256色を用いることができる。この256色のうち一部の色だけを使用する場合、必要なパレットデータだけが存在すればよい。このフィールドnumber_of_palette_entriesにより、用いるインデックスの数が示される。
フィールドpalette_index_numberは、次のフィールドred_value、フィールドgreen_valueフィールドblue_valueフィールドalphaでそれぞれ定義される色や不透明度に割り当てられたインデックス番号を表す。画像データからは、このインデックス番号によって色や不透明度αが参照される。
このブロックGlobalPaletteTable()においてfor文で示されるループの中では、同じ値を持つフィールドpalette_index_numberが二度以上現れてはならない。フィールドred_value、フィールドgreen_valueおよびフィールドblue_valueは、それぞれデータ長が8ビットの0以上の整数であって、それぞれ赤、緑、青の色を指定する。8ビットのデータ長を有するフィールドalphaは、不透明度αを表し、値0が完全に透明、値255が完全に不透明な状態を表す。
なお、各PNG画像は、パレット情報PLTEを格納するチャンクを持つことができるが、この実施の第1の形態では、そのパレット情報PLTEを使用せず、ブロックGlobalPaletteTable()で定義されたパレット情報を使うものとする。これは、同時に複数のPNG画像を表示する場合、各PNG画像が異なるパレットテーブルに基づく色を使っていると、それぞれ正しい色で表示することが困難になるためである。すなわち、GraphicsObject()に属する、フィールドPNG_image(i)でそれぞれ表される複数のPNG画像は、全て共通のブロックGlobalPaletteTable()を参照、ブロックGlobalPaletteTable()に示される共通のパレットテーブルを用いるものとする。
次に、命令グループDispCmds(i)について説明する。命令グループDispCmds(i)は、グラフィクスオブジェクト200による表示を制御する表示制御命令が羅列される。命令グループDispCmds(i)において、命令execution_time(start_time)は、次の命令execution_time(start_time)の前までの命令を、指定の時刻start_timeに実行することを指示する。時刻start_timeの原点は、当該グラフィクスオブジェクト200のptsとする。また時刻start_timeの単位は、ptsと同じものが用いられる。
一つの命令グループDispCmds(i)は、命令execution_time(start_time)により時刻start_timeから始まり、その他の複数の命令を置くことができる。命令グループDispCmds(i)に置かれたこれらの命令は、命令execution_time(start_time)で指定される時刻start_timeに同時に、実行されるものとする。また、命令グループDispCmds(i)による命令の実行完了時刻前に、次の命令グループDispCmds(i+1)の命令exectution_time(start_time)で示される時刻start_timeになった場合は、命令グループDispCmds(i)の実行は中断され、次の命令グループDispCmds(i+1)が実行される。
命令グループDispCmds(i)に置かれる、命令exectution_time(start_time)以外の表示制御命令としては、図44に一覧が例示されるように、以下のものが考えられる。なお、各行頭の番号は、図44の各番号にそれぞれ対応している。(すなわち、番号(1)を、命令exectution_time(start_time)とする)
(2)グラフィクスオブジェクトの表示を開始する命令
(3)グラフィクスオブジェクトの表示を停止する命令
(4)使用中のパレットテーブルの色や不透明度を変更する命令
(5)グラフィクスオブジェクトのプレーン上での表示位置やサイズを設定する命令
(6)グラフィクスオブジェクトの中の表示範囲を設定する命令
(7)効果音の再生を行う命令
(8)画像データ(PNGデータ)に効果音を割り当てる命令
なお、これら7種類の命令は、一例であって、命令グループDispCmds(i)に置かれる命令は、この7種類に限定されるものではない。表示制御命令をさらに追加してもよい。
(2)および(3)の、グラフィクスオブジェクト200の表示の開始および終了命令は、所謂フェードイン/フェードアウトを行うための命令であって、それぞれ命令fade_in(fade_in_time)、命令fade_out(fade_out_time)の形で用いられる。
フェードインは、命令fade_in(fade_in_time)で指示され、グラフィクスオブジェクト200が非表示の状態から徐々に表示の状態に変化していく。アルファブレンディングの不透明度αの値を、時刻fade_in_timeに基づき徐々に増加させていくことで、フェードインが実現できる。命令execution_time(start_time)の後に命令fade_in(fade_in_time)が置かれていると、命令execution_time(start_time)で指定される時刻start_timeの直後から当該グラフィクスオブジェクト200が徐々に透明から不透明になっていき、引数の時刻fade_in_timeで指定された時間が経過すると、全てのパレットインデックスの不透明度αの値が共通パレットテーブルで指定した値に設定される。
なお、命令fade_in(fade_in_time)において、時刻fade_in_timeが0に設定されていると、当該グラフィクスオブジェクト200がパレットテーブルに指定される色および不透明度αで即座に表示される。
フェードアウトは、フェードインの逆の処理であって、命令fade_out(fade_out_time)で指示され、グラフィクスオブジェクト200が表示の状態から徐々に非表示の状態に変化していく。アルファブレンディングの不透明度αの値を、時刻fade_out_timeに基づき徐々に減少させていくことで、フェードアウトが実現できる。命令execution_time(start_time)の後に命令fade_out(fade_out_time)が置かれていると、命令execution_time(start_time)で指定される時刻start_timeの直後から当該グラフィクスオブジェクト200が徐々に不透明から透明になっていき、引数の時刻fade_out_timeで指定された時間が経過すると、全てのパレットインデックスの不透明度αの値が0とされ、当該グラフィクスオブジェクト200が完全に透明になり、見えなくなる。
なお、命令fade_out(fade_out_time)において、時刻fade_out_timeが0に設定されていると、当該グラフィクスオブジェクト200の表示が即座に停止される。
フェードインおよびフェードアウトにおいて、不透明度αの値は、時間の経過と共にできるだけ滑らかに変化させると、より自然なフェードインおよびフェードアウトの効果が得られ、好ましい。これは、この例に限られず、例えば、フェードインにおいて、不透明度αの値は、時刻fade_in_timeで示される時間が経過した後に、パレットテーブルで指定した値になっていればよく、どの程度の分解能や階調で不透明度αを変化させるかについては、命令によって指定していない。実際には、不透明度αの変化の分解能や階調は、実装に依存する。
なお、ここでは可読性を上げるために、命令を「fade_in()」、「fade_out()」のようにテキストで表記して説明したが、実際には、これらの命令fade_in()、fade_out()は、その引数と共に所定のバイナリ値に変換されてDispCmds(i)に記述される。これは、以降に説明される他の命令についても同様である。
(4)の、使用中のパレットテーブルの色や不透明度αを変更する命令は、パレット情報を変更する。この命令は、命令change_palette(index, newR, newG, newB, newAlpha)の形で用いられる。字幕プレーン11やグラフィクスプレーン12に同時に表示されるPNG画像は、図43に示したシンタクスで定義される、上述の図19のような共通のパレットテーブルを参照している。通常は、GlobalPaletteTable()で定義されたパレット情報がそのまま共通パレットテーブルとして使用される。この命令change_palette(index, newR, newG, newB, newAlpha)を用いることで、この共通のパレット情報を変更することができる。
すなわち、命令change_palette(index, newR, newG, newB, newAlpha)に引数として記述される値index、newR、newG、newBおよびnewAlphaにより、パレット22において、パレット番号indexで示されるカラーインデックス値の三原色の値R、GおよびBが値newR、newGおよびnewBにそれぞれ変更され、不透明度αの値が値newAlphaに変更される。
(5)の、グラフィクスオブジェクトのプレーン上での表示位置やサイズを設定する命令は、命令set_display_box(x1,y1,x2,y2)の形で用いられ、プレーン上の座標(x1,y1)および(x2,y2)で定められる矩形領域(x1,y1)(x2,y2)に、当該グラフィクスオブジェクト200を配置する。また、(6)の、グラフィクスオブジェクトの中の表示範囲を設定する命令は、命令set_clipping_box(a1,b1,a2,b2)の形で用いられ、グラフィクスオブジェクト200によるPNG画像上の座標(a1,b1)および(a2,b2)で定められる矩形領域(a1,b1)(a2,b2)を、実際にプレーン上に表示する。
図45を用いて、命令set_display_box(x1,y1,x2,y2)および命令set_clipping_box(a1,b1,a2,b2)について、より具体的に説明する。なお、図45における座標は、図46に一例が示されるように、表示画面の左上隅を原点とし、水平右方向をx、垂直下方向をyとして、座標(x,y)と表す。
命令set_clipping_box(a1,b1,a2,b2)により、図45Aに示されるように、グラフィクスオブジェクト200によるPNG画像250内の、実際に表示される矩形領域(a1,b1)(a2,b2)が設定される。この図45Aの例では、設定される矩形領域(a1,b1)(a2,b2)がPNG画像250に対して小さいものとされている。命令set_display_box(x1,y1,x2,y2)により、この矩形領域(a1,b1)(a2,b2)のプレーン上における実際の表示位置が矩形領域(x1,y1)(x2,y2)に設定される(図45B参照)。すなわち、画面上の矩形領域(x1,y1)(x2,y2)に対して、PNG画像250のうち矩形領域(a1,b1)(a2,b2)の部分が表示される。
ここで、矩形領域(a1,b1)(a2,b2)が実際に表示される矩形領域(x1,y1)(x2,y2)よりも大きい場合は、矩形領域(a1,b1)(a2,b2)のうち矩形領域(x1,y1)(x2,y2)の範囲のPNG画像だけが表示される。一方、矩形領域(a1,b1)(a2,b2)の大きさが実際に表示される矩形領域(x1,y1)(x2,y2)よりも小さい場合は、矩形領域(x1,y1)(x2,y2)内の矩形領域(a1,b1)(a2,b2)の外側は、透明色として扱うとよい。
上述した表示制御命令を、命令execution_time(start_time)を複数用いて並べることにより、時間経過に従って変化する字幕や同期型グラフィクスを表示することができる。例えば、図42を用いて説明したグラフィクスオブジェクト200において、ブロックGOBJCommandTable()内に、複数の命令グループDispCmds(i)を記述する。そして、命令グループDispCmds(i)のそれぞれは、命令execution_time(start_time)における時刻start_timeを所望に異ならせて記述し、時刻start_timeで示される時刻に開始する表示制御命令を記述する。
図47は、命令グループDispCmds(i)の記述とグラフィクスオブジェクト200の表示変化の一例を示す。図47において、横軸は時間の経過を表し、縦軸はグラフィクスオブジェクト200の不透明度を表す。不透明度は、図47で上に向かうほど大きくなる。ptsで示される時刻が原点とされる。
最初の命令グループDispCmds(0)により、プレーン上の表示領域が命令set_display_box(800,800,1300,900)として、グラフィクスオブジェクト200のPNG画像における表示領域が命令set_clipping_box(0,0,500,100)として設定し、命令fade_in(2 sec)により、2秒かけてフェードインする処理を、時刻〔0〕から開始することが指示される。次の命令グループDispCmds(1)は、命令change_palette(index, newR, newG, newB, Alpha)がカラーインデックス値〔1〕、〔2〕〔3〕および〔4〕についてそれぞれ記述され、時刻〔800〕から、パレットテーブル22においてカラーインデックス値〔1〕、〔2〕、〔3〕および〔4〕で参照される色および不透明度αを変更する旨が指示される。そして、次の命令グループDispCmds(2)により、表示されているグラフィクスオブジェクト200を、時刻〔2000〕から2秒かけてフェードアウトすることが指示される。
この図47に示されるように、命令グループDispCmds(0)、DispCmds(1)およびDispCmds(2)を並べることで、時間経過に従って表示が変化する例えば字幕を実現することができる。すなわち、命令グループDispCmds(0)、DispCmds(1)およびDispCmds(2)を適当に用いることで、字幕やボタン画像のアニメーション表示が可能とされる。
図48は、字幕表示が徐々に現れるフェードインの例を示す。図48A〜図48Dと、徐々に字幕表示が現れるように表示制御される。このような単純なフェードインは、上述した図47の命令グループDispCmds(0)と同様の命令で実現することができる。
図49は、字幕のPNG画像260がプレーン内を移動する例を示す。これは、命令set_display_box(x1,y1,x2,y2)を複数、用いることで実現できる。例えば、最初の命令グループDispCmds(0)において、命令execution_time(start_time)により開始時刻が設定され、命令set_clipping_box(a1,b1,a2,b2)により図49Aに一例が示されるようにPNG画像260の表示領域を設定すると共に、命令set_display_box(x1,y1,x2,y2)により、PNG画像260のプレーン内での初期の表示領域を設定する。
そして、次の命令グループDispCmds(1)において、命令execution_time(start_time)により命令グループDispCmds(0)から所定時間経過した時刻が開始時刻として指定されると共に、命令set_display_box(x1',y1',x2',y2')により、プレーン内の移動先の表示領域が設定される。同様にして、次の命令グループDispCmds(2)において、命令execution_time(start_time)により命令グループDispCmds(1)から所定時間経過した時刻が開始時刻として指定されると共に、命令set_display_box(x1",y1",x2",y2")により、プレーン内の移動先の表示領域が設定される。
このようにすることで、図49Bに一例が示されるように、字幕のPNG画像260がプレーン上の矩形領域(x1,y1)(x2,y2)、矩形領域(x1',y1')(x2',y2')、矩形領域(x1",y1")(x2",y2")と移動するようにできる。
図50は、字幕のPNG画像261内の表示領域262が移動し、字幕表示をスクロールさせる例を示す。これは、命令set_clipping_box(a1,b1,a2,b2)を複数、用いることで実現できる。例えば、最初の命令グループDispCmds(0)において、命令execution_time(start_time)により開始時刻が設定され、命令set_clipping_box(a1,b1,a2,b2)により、図50Aに一例が示されるように、PNG画像260において初期に表示される矩形領域262を設定すると共に、命令set_display_box(x1,y1,x2,y2)により、PNG画像260がプレーン内で表示される矩形領域を設定する。
そして、次の命令グループDispCmds(1)において、命令execution_time(start_time)により命令グループDispCmds(0)から所定時間経過した時刻が開始時刻として指定されると共に、命令set_clipping_box(a1',b1',a2',b2')により、PNG画像260内の移動先の表示領域が設定される。同様にして、次の命令グループDispCmds(2)において、命令execution_time(start_time)により命令グループDispCmds(1)から所定時間経過した時刻が開始時刻として指定されると共に、命令set_clipping_box(a1",b1",a2",b2")により、PNG画像260内の移動先の矩形領域が設定される。
このようにすることで、図50Bに一例が示されるように、プレーン上の矩形領域(x1,y1)(x2,y2)内を、字幕のPNG画像261内の一部の矩形領域が矩形領域(a1,b1)(a2,b2)、矩形領域(a1',b1')(a2',b2')、矩形領域(a1",b1")(a2",b2")と移動するようにされ、字幕表示のスクロールを実現できる。
図51は、PNG画像265の一部を表示する枠を設定し、PNG画像265上でこの枠を移動させつつ、プレーン上での表示位置も移動させる例を示す。これは、命令set_display_box(x1,y1,x2,y2)と、命令set_clipping_box(a1,b1,a2,b2)とを複数、同時に用いることで実現できる。例えば、最初の命令グループDispCmds(0)において、命令execution_time(start_time)により開始時刻が設定され、命令set_display_box(x1,y1,x2,y2)と命令set_clipping_box(a1,b1,a2,b2)とにより、枠266Aが設定される(図51A参照)。
例えば、命令set_display_box(x1,y1,x2,y2)によりプレーン上で表示される矩形領域(x1,y1)(x2,y2)が設定されると共に、命令set_clipping_box(a1,b1,a2,b2)によりPNG画像265において表示される矩形領域(a1,b1)(a2,b2)が設定される。これら矩形領域(x1,y1)(x2,y2)および矩形領域(a1,b1)(a2,b2)により、枠266Aが設定される。
そして、次の命令グループDispCmds(1)において、命令execution_time(start_time)により命令グループDispCmds(0)から所定時間経過した時刻が開始時刻として指定され、命令set_display_box(x1',y1',x2',y2')によるプレーン内の矩形領域(x1',y1')(x2',y2')と、命令set_clipping_box(a1',b1',a2',b2')によるPNG画像265上の矩形領域(a1',b1')(a2',b2')により、枠266Aに対する移動先の枠266Bが設定される。同様に、次の命令グループDispCmds(2)において、命令execution_time(start_time)により命令グループDispCmds(1)から所定時間経過した時刻が開始時刻として指定され、命令set_display_box(x1",y1",x2",y2")によるプレーン内の矩形領域(x1",y1")(x2",y2")と、命令set_clipping_box(a1",b1",a2",b2")によるPNG画像265上の矩形領域(a1",b1")(a2",b2")により、枠266Bに対する移動先の枠266Cが設定される。
こうすることで、図51Bに一例が示されるように、字幕のPNG画像265内の一部の矩形領域が移動しつつ、当該矩形領域がプレーン内を領域265A、265B、265Cと移動するような表示が可能となる。
このように、この発明の実施の第1の形態では、グラフィクスオブジェクト200の表示制御を、命令execution_time(start_time)により各表示制御命令をグループ化した命令グループDispCmds(i)を用いて行っているため、字幕プレーン11およびグラフィクスプレーン12における多彩な表示を、容易に実現することができる。
2−13.効果音について
この発明の実施の第1の形態では、さらに、グラフィクスオブジェクト200の表示制御に同期して音声を出力することができる。上述した、命令グループDispCmds(i)に置かれる、命令exectution_time(start_time)以外の表示制御命令(2)〜(8)のうち、(7)の効果音の再生を行う命令と、(8)の画像データに効果音を割り当てる命令により、音声出力が定義される。また、音声データには、それぞれ識別子sound_idが付与され、互いが識別される。
なお、ここでいう効果音とは、動画プレーン上に表示される動画や静止画に同期して再生される音声(例えば、映画などにおいて、映画映像と対になって収録されている音声)とは別途に用意された音声データが、字幕やボタンの表示制御に同期または誘引されて再生される音声のことをいう。
背景技術でも説明したが、ユーザは、例えば、リモートコントロールコマンダ(リモコン)に設けられた、上下左右の方向をそれぞれ指示するようにされたキー(キー(方向キー)などを操作して、メニュー画面に表示されたボタンの一つを選択状態とし、そこで決定キーを操作することで、選択されたボタンに割り当てられた動作を実行状態とする。また、一つのボタンには、「通常(非選択)状態」、「選択状態」および「実行状態」という3種類の状態が存在する。一つのボタンの3種類の状態に対してそれぞれ異なるグラフィクスオブジェクトを対応させることができる。これにより、ボタンの3種類の状態毎に、ボタン画像(形状や色など)を変更することが可能である。こうすることで、ユーザがボタンの状態を区別し易くなり、好ましい。
さらに、ボタンの3種類の状態毎に、異なる効果音を対応付けることができる。例えば、ユーザが、ある一つのボタンを選択状態にした際に発せられる効果音を「選択状態」のボタン画像に関連付け、また、当該ボタンを実行状態にした際に発せられるクリック音のような効果音を「実行状態」のボタン画像に関連付ける。
「選択状態」のボタン画像に関連付けられた効果音は、当該効果音を再生する音声データの識別子sound_idで参照され、ユーザが当該ボタンを選択状態にした際に、その識別子sound_idで参照される音声データがプレーヤのメモリから読み出されて、効果音として再生される。同様に、「実行状態」のボタン画像に関連付けられた効果音は、当該効果音を再生する音声データの識別子sound_idで参照され、ユーザがボタンの選択状態時に決定キーを操作するなどして、当該ボタンを実行状態にした際に、「実行状態」のボタン画像に関連付けられた効果音の識別子sound_idにより参照される音声データが、プレーヤのメモリから読み出されて再生される。
上述した、命令グループDispCmds(i)に置かれる表示制御命令のうち(7)の、効果音の再生を行う命令は、命令play_sound(sound_id)の形で用いられ、識別子sound_idで指定された音声データの再生を指示する。この命令を命令グループDispCmds(i)に含めることにより、命令execution_time(start_time)で指定された時刻start_timeに、識別子sound_idで指定された音声データが再生される。
一例として、命令play_sound(sound_id)を命令fade_in(fade_in_time)および命令fade_out(fade_in_time)と同時に使用することで、字幕の表示および/または消去に連動して音声データを再生し、効果音を発生させることが可能となる。図52は、上述した図47に対して命令play_sound(sound_id)を追加した例を示す。図52の例では、最初の命令グループDispCmds(0)において、開始時刻〔0〕で2秒かけて表示がフェードインすると共に、命令play_sound(1)により識別子sound_idが〔1〕で特定される音声データが再生される。次いで、命令グループDispCmds(1)において、時刻〔800〕で表示色が変更されると共に、命令play_sound(2)により識別子sound_idが〔2〕で特定される音声データが再生される。そして、命令グループDispCmds(2)において、時刻〔2000〕から1秒かけて表示がフェードアウトすると共に、命令play_sound(1)により識別子sound_idが〔1〕で特定される音声データが再び再生される。
(8)の、PNGデータに効果音を割り当てる命令は、命令set_sound(PNG_image_id, sound_id)の形で用いられ、識別子PNG_image_idで指定されるPNGデータに対して、識別子sound_idで指定される音声データを割り当てる。この命令set_sound(PNG_image_id, sound_id)により、識別子PNG_image_idで指定されるPNGデータが表示される際に、識別子sound_idで指定される音声データが再生される。PNGデータの識別子PNG_image_idは、例えば、上述した図42における、ブロックPNGImageRegion()中のPNG_image(i)に対して指定されるループカウンタiと同じ値を用いることができる。
この命令set_sound(PNG_image_id, sound_id)は、主に、選択状態および実行状態のボタンのPNGデータに用いることが想定されている。こうすることで、ボタンが通常状態から選択状態へ遷移する際や、選択状態から実行状態に遷移する際に、それぞれの状態を表すPNGデータに割り当てられた音声データを効果音として発生させることが可能となる。勿論、この例に限らず、ボタン以外のPNGデータに対してこの命令set_sound(PNG_image_id, sound_id)を用いてもよい。
図53は、ボタン画像に音声データを割り当てたグラフィクスオブジェクト200の一例のデータ構造を示す。PNGデータ領域203に、通常状態、選択状態および実行状態それぞれにおけるボタンのPNGデータ203A、203Bおよび203Cが格納される。この図53の例では、表示制御命令ではPNGデータに対する座標指定と、音声データの割り当てのみを行い、PNGデータの表示開始時刻や、表示開始時のボタンの初期状態は、外部のスクリプトプログラムにより制御するようにしている。そのため、表示制御命令は、便宜上、実行時刻〔0〕の命令として記述する。
図53に例示されるグラフィクスオブジェクト200では、表示制御命令テーブル202において、命令execution_time(0)に基づき時刻〔0〕で実行される、命令グループDispCmds(0)だけが存在している。識別子PNG_image_idは、〔0〕から始まるので、識別子PNG_image_idが〔0〕で通常状態時のPNGデータ203Aを、識別子PNG_image_idが〔1〕で選択状態時のPNGデータ203Bを、識別子PNG_image_idが〔2〕で実行状態時のPNGデータ203Cをそれぞれ表している。
命令set_sound(1,10)に基づき、識別子PNG_image_idが〔1〕である選択状態のボタンを表示するPNGデータ203Bが表示されたときには、識別子sound_idが〔10〕で指定される音声データが効果音として再生される。同様に、命令set_sound(2,11)に基づき、識別子PNG_image_idが〔2〕である実行状態のボタンを表示するPNGデータ203Cが表示されたときには、識別子sound_idが〔11〕で指定される音声データが効果音として再生されることになる。
上述の図34では省略されているが、プレーヤは、予め1または複数種類の音声データを、プレーヤ内部のメモリなどに保持することができる。例えば、プレーヤは、プレーヤ内部に設けられた不揮発性メモリなどに、出荷時に予め所定の音声データを記憶しておくようにできる。
また、これに限らず、グラフィックオブジェクト200や動画データによるコンテンツが記録されたディスクに、効果音として用いるための音声データを記録しておき、当該ディスクの再生時にこの音声データを読み込んでおくようにしてもよい。ディスクへの音声データの格納方法としては、音声データが格納されたファイルを別に用意し、ディスク再生開始時にこのファイルを先に読み込んでおき、プレーヤ内のメモリに置いておく方法がある。
あるいは、グラフィクスオブジェクト200と同様に音声データを格納したPESパケットを作り、それをTSパケットに分割してクリップAVストリームに多重化する方法も考えられる。
さらには、図37には示していないが、図37のグラフィクスオブジェクト200中のグラフィクスオブジェクトヘッダ201内、あるいは、PNG画像データ領域203の直後に、グラフィクスオブジェクト200に含まれるPNG画像に対応する音声データを格納する方法も考えられる。
何れの方法であっても、音声データを予めディスクからプレーヤのメモリに読み込んで蓄積しておくことができるので、PNG画像で作られたボタンが選択状態や実行状態になると同時に効果音を発生させることが可能となる。音声データには、それぞれユニークな識別子sound_idが割り当てられており、音声データを一意に特定することができるようにされている。
2−14.音声データのディスクへの格納方法について
この、音声データのディスクへの格納方法について、より詳細に説明する。以下では、音声データのディスクへの格納方法として、次の3つの方法について説明する。
(1)音声データをグラフィクスオブジェクト200に多重化する方法
(2)音声データをクリップAVストリームに多重化せず、且つ、識別子sound_id毎の音声データファイルとする方法
(3)音声データをクリップAVストリームに多重化せず、且つ、複数の音声データをまとめて一つのデータファイルとする方法
2−14a.第1の格納方法
先ず、(1)の、音声データをグラフィクスオブジェクト200に多重化する方法(以下、第1の格納方法と呼ぶ)について、図54を用いて説明する。図54Aおよび図54Bは、音声データをグラフィクスオブジェクト200に付加してクリップAVストリームに多重化する例を示す。
図54Aは、グラフィクスオブジェクト200中のPNGデータ領域203の後ろに音声データ領域204を設けた例である。音声データ領域204には、複数の音声データ204A、204B、・・・、204nを格納することができる。これら音声データ204A、204B、・・・、204nを、同一のグラフィクスオブジェクト200に格納されるPNGデータ203A、203B、・・・、203nとそれぞれ関連性のあるものとすると、PNG画像および音声データを対応付けての扱いが容易になる。
音声データ204A、204B、・・・、204nは、例えばAIFF(Audio Interchange File Format)形式やWAVEファイルといった、圧縮符号化されていないデータでもよいし、MP3(Moving Pictures Experts Group 1 Audio Layer 3)やAAC(Advanced Audio Coding)、ATRAC(Adaptive Transform Acoustic Coding)といった、圧縮符号化されたデータでもよい。圧縮符号化された音声データを格納する場合には、プレーヤ側が音声データの圧縮符号化方式に対応したオーディオデコーダを持っている必要がある。
図54Bは、ボタンを構成するグラフィクスオブジェクト200に対して、ボタンのそれぞれの状態に対応した音声データを格納した例である。この例では、例えばボタンの選択状態時に再生する音声データ204A−2と、実行状態時に再生する音声データ204B−2とが、音声データ領域203に格納される。一方、PNGデータ領域203には、通常状態、選択状態および実行状態それぞれのボタン表示に用いるPNGデータ203A−2、203B−2および203C−2が格納される。
この場合、例えば、ボタン画像が格納されるPNGデータ領域203に続く音声データ領域204には、ボタンが選択状態時に遷移したときに再生する音声データ204A−2と、実行状態時に遷移したときに再生する音声データ204B−2とが格納されるように、予め決めておく。そして、ボタン画像のPNGデータが表示されると同時に、当該ボタンの状態に対応した音声データが再生されるようにする。このプレーヤで再生される効果音は、主にボタンクリック音として使われることを想定しているため、このようなルールでも、十分に、主要な目的を達成することができる。
図55は、図39を用いて説明したグラフィクスオブジェクトデコーダモデル240に対して音声データの処理系を追加した、グラフィクスオブジェクトデコーダモデル240’の一例の構成を示す機能ブロック図である。なお、図55において、図39と共通する部分には同一の符号を付し、詳細な説明を省略する。
端子202からMPEG TSとして入力された、グラフィクスオブジェクト200に音声データが格納されたクリップAVストリームがPIDフィルタ110に供給され、PIDに基づき動画像データ、音声データおよびグラフィクスオブジェクト200をそれぞれ抜き出す。抜き出されたデータのうち、グラフィクスオブジェクト200は、バッファTBn111Bを介してGOBJパーサ224に供給される。GOBJパーサ224では、供給されたグラフィクスオブジェクト200のグラフィクスオブジェクトヘッダ201を読み取り、パレットデータを抽出すると共に、表示制御命令テーブル202、PNGデータ領域203および音声データ領域204を分離する。
パレットデータおよび表示制御命令テーブル202は、コマンドプロセッサ/グラフィックレンダラ225に供給される。さらに、音声データ領域204の音声データ204A、204B、・・・、204nがコマンドプロセッサ/グラフィックレンダラ225に供給され、図示されないバッファにそれぞれ溜め込まれる。
コマンドプロセッサ/グラフィックレンダラ225は、GOBJパーサ224から供給された表示制御命令テーブル202に記述される表示制御命令に従い、バッファから音声データを読み出し、出力する。グラフィクスオブジェクト200に格納された音声データ204A、204B、・・・、204nが圧縮符号化されている場合には、コマンドプロセッサ/グラフィックレンダラ225において復号化されて出力される。
コマンドプロセッサ/グラフィックレンダラ225から出力された音声データは、オーディオミキサ231に供給され、プレゼンテーションプロセッサ141に対して出力される。オーディオミキサ231に他の音声データも入力されている場合には、これらの音声データが所定の割合で混合されて出力される。
図56は、上述の図54Aおよび図54Bのようにして音声データを加えた場合の、グラフィクスオブジェクト200の一例の構造を示すシンタクスを示す。このように、上述した図42の構造に対し、ブロックGraphicsObjectHeader()のフィールドnumber_of_PNG_imagesの次に、フィールドnumber_of_sound_dataが配置され、ブロックSoundDataRegion()に格納されている音声データの数がデータ長が8ビットの0以上の整数で示される。フィールドstart_address_of_sound_data(i)は、データ長が32ビットの0以上の整数で、i番目の音声データsound_data(i)が開始される位置を、このブロックGraphicsObject()の先頭からの相対バイト数で表現する。また、ブロックPNGImageRegion()の後にpadding_wordが挿入され、続けてブロックSoundDataRegion()が配置される。このブロックSoundDataRegion()に、音声データsound_data(i)として実際の音声データが格納される。
2−14b.第2の格納方法
次に、(2)の、音声データをクリップAVストリームに多重化せず、且つ、識別子sound_id毎の音声データファイルとする方法(以下、第2の格納方法と呼ぶ)について説明する。例えば、図57に一例が示されるように、ディレクトリBDAVの下に音声データを格納するディレクトリSOUNDを設ける。このディレクトリSOUNDには、音声データであるPCM波形データを格納する、例えばAIFF形式の音声データファイル「sound1.aiff」を置く。ディレクトリSOUNDに格納された音声データファイルは、例えば当該ディスクのプレーヤへの最初のローディング時にまとめて読み込まれ、プレーヤの内部メモリに格納される。
各音声データには、音声データそれぞれを識別可能な識別子sound_idが予め割り当てられ、スクリプトなどから識別子sound_idにより、所望の音声データがメモリから呼び出されるモデルが構成される。
この場合、例えば、グラフィクスオブジェクト200に対して図54Cに一例が示されるように、サウンドid領域205を設け、このサウンドid領域205に対してサウンドidデータ205A、205Bを格納する。この図54Cの例では、PNGデータ領域203にボタンの通常状態時、選択状態時および実行状態時にそれぞれ対応したPNGデータ203A、203Bおよび203Cが格納され、サウンドidデータ205Aおよび205Bは、PNGデータ203Bおよび203Cにそれぞれ対応する識別子sound_idである。PNGデータ203Bの表示の際に、プレーヤ内部のメモリに予め格納された、サウンドidデータ205Aが示す識別子sound_idが対応する音声データを再生するように指示される。
また例えば、図53を用いて既に説明したように、表示制御命令テーブル202の記述によって、PNGデータと音声データとを関連付けるようにしてもよい。
識別子sound_idにより音声データを指定するため、図44を用いて既に説明した表示制御コマンドなどにより、グラフィクス表示とは関係の無い任意の時刻に、音声データによる効果音などを発生させることができる。
一方、この方法では、識別子sound_idで音声データをメモリから呼び出すため、効果音の種類は、第1に、識別子sound_idの数で制限される。また、第2に、使える効果音の種類が、上述したように、プレーヤの内部メモリの容量により制限される。
図58を用いて、より具体的に説明する。ディスク400のローディング時に、プレーヤによりディスクに対してイニシャルアクセスがなされ、ディレクトリBDAVの下に配置されるディレクトリSOUNDから、音声データがまとめて読み込まれる。読み込まれた音声データ(PCMデータ)は、プレーヤの内部メモリ410に格納される。このとき、音声データのそれぞれに対して固有の識別子sound_idが割り当てられる。ディスク400に記録されている音声データに対して予め識別子sound_idを付加しておいてもよい。
この例では、16個の音声データがディスク400から読み込まれ、識別子sound_id=1〜16がそれぞれの音声データに割り当てられる。また、音声データそれぞれのデータサイズが取得される。この図58の例では、識別子sound_id=1〜16の音声データがそれぞれd1バイト、d2バイト、・・・、d16バイトのデータサイズを有しているものとする。
例えば、ボタン420A、420Bおよび420Cが表示されるメニュー画面420における、ボタン420Cに対する操作に基づき、ボタン420Cに対して指定された識別子sound_idにより対応する音声データがメモリ410から読み出される。この図58の例では、ボタン420Cの実行状態に対して識別子sound_id=1で示される音声データが指定されている。メモリ410から読み出されたこの音声データは、所定に処理されてバッファ450Bに一旦溜め込まれる。そして、オーディオミキサ231に供給され、例えば本編の動画像データに付随する音声データと混合されて、音声として出力される。
なお、バッファ450Aには、例えば本編の動画像データに付随する音声データが一旦、溜め込まれる。例えば、バッファ450Aおよび450Bの間で、溜め込まれた音声データを読み出すタイミングを調整することで、バッファ450Bに溜め込まれたボタン420Cの操作に対応した効果音がバッファ450Aに溜め込まれた音声データの適当なタイミングで出力される。また、この例では、識別子sound_id=0で、音声データの再生無しが指定される。
このようなモデルにおいて、ディスク400から読み込み可能な音声データの合計容量がメモリ410の容量に基づき制限される。また、それぞれの音声データの容量がバッファ450Bの容量に基づき制限される。すなわち、メモリ410の容量を容量M(バイト)、バッファ450Bの容量を容量Dmax(バイト)とした場合、次の2つの条件を満たす必要がある。
(1)メモリ410に格納された音声データのそれぞれの容量diがバッファ450Bの容量Dmaxより小さい。
(2)メモリ410に格納された音声データの総容量(d1+d2+・・・+dn)がメモリ410の容量Mより小さい。
換言すれば、この(1)および(2)の条件をプレーヤ側とディスク制作側とに対してルール化し、規格として定めておくことで、効果音などの音声データの再生に関して再生互換性を確保することができる。
なお、ここでは、音声データをクリップAVストリームに多重化しない場合(第2の格納方法)に、音声データをディスクのプレーヤへの最初のローディング時にまとめて読み込むように説明したが、これはこの例に限定されない。一例として、音声データを複数回に分けて読み出すようにできる。例えば、シナリオの進行に応じてある区切となる箇所で、次の区切りまでに用いるだけの音声データをまとめて読み出し、メモリに記憶させる。このとき、それまでメモリに記憶されていた音声データを消去する。こうすることで、1つのシナリオの再生において、メモリの容量以上の音声データを扱うことが可能とされる。
音声データは、ディスクの所定領域にまとめて記録しておいてもよいし、ディスクの複数領域に分けて記録しておいてもよい。ディスクの複数領域に分けて記録する場合には、例えば、シナリオの進行に応じて、シナリオの区切りに対応したディスク上の位置に、次の区切りまでに用いられる音声データをまとめて記録することが考えられる。
なお、図54Aおよび図54Bを用いて説明した、音声データをクリップAVストリームに多重化する方法(第1の格納方法)では、音声データの種類に制約が無く、1画像毎に異なる音声データを指定できる利点がある。すなわち、音声データは、必要に応じてクリップAVストリームにより供給されるため、その都度異なる音声データを用いることができる。また、第1の格納方法では、音声データが画像データと同時にクリップAVストリームから読み込まれるため、読み込みモデルが簡単になる、音声データのファイル数の制限やファイルサイズの制限は、ディスク容量以外の制約を受けない、などの利点がある。
一方、第1の格納方法では、異なるグラフィクスオブジェクトで同一の音声データを扱うような場合、それぞれのグラフィックオブジェクトが同一の音声データをそれぞれ持たなければいけないので、データが冗長になってしまう。また、グラフィクスオブジェクトから音声データを抽出する必要があるため、クリップAVストリームのデマルチプレクス処理の後に、音声データを分離する処理が必要となる。
2−14c.第3の格納方法
次に、(3)の、音声データをクリップAVストリームに多重化せず、且つ、複数の音声データをまとめて一つのデータファイルとする方法(以下、第3の格納方法とする)について説明する。複数の音声データは、例えばファイル「HdmvSound.bdmv」にまとめて格納される。ファイル「HdmvSound.bdmv」は、図59に一例が示されるように、上述の図4に示した"Blu-ray Disc Rewritable Format Ver1.0 part3"で規定された、記録媒体に記録されるファイルの管理構造に対し、ディレクトリBDAVの直下に置かれる。ディスクがプレーヤに装填されると、このファイル「HdmvSound.bdmv」がイニシャルアクセス時に読み出され、例えばそのディスクに主コンテンツとして収録されているクリップAVストリーム(例えば映画など)に先立って、プレーヤが有するメモリに記憶されプリロードされる。
なお、図59において、ディレクトリSTREAMは、例えば映画など、当該ディスクの主コンテンツのクリップAVストリームが格納される。
図60は、ファイル「HdmvSound.bdmv」の一例のシンタクスを示す。フィールドlengthは、32ビットのデータ長を有し、フィールドlenghの直後のフィールドからこのファイル「HdmvSound.bdmv」の最後までの長さがバイトで示される。フィールドdata_block_start_addressは、32ビットのデータ長を有し、ファイル「HdmvSound.bdmv」の中において音声データがまとめて配置されるブロックdata_blockの、先頭バイトの開始アドレスを示す。フィールドnumber_of_sound_entriesは、8ビットのデータ長を有し、ファイル「HdmvSound.bdmv」の中に格納されている音声データ(すなわち、効果音データ)の数を示す。
forループの引数によって、一つの音声データを参照する識別子sound_idが自動的に与えられる。このforループ中に、引数に対応する識別子sound_idで参照される音声データの情報が記述される。
ブロックattributes()は、当該音声データの属性を示す。フィールドchannel_assignmentは、当該音声データのチャンネルアサインメントであり、例えば、モノラルや2チャンネルステレオという属性である。フィールドsampling_frequencyは、当該音声データのサンプリング周波数であり、例えば48kHzである。フィールドbits_per_sampleは、当該音声データの量子化ビット数であり、例えば16ビットである。
フィールドsound_data_start_addressは、32ビットのデータ長を有し、当該forループのフィールドsound_idで参照される音声データの先頭バイトがブロックdata_blockの中で開始するアドレスを示す。フィールドsound_data_lengthは、32ビットのデータ長を有し、当該音声データのバイト長である。このforループの終了後、パディングワードを挟んで、ブロックdata_blockが配置される。ブロックdata_blockは、音声データが実際に格納される領域である。
図61は、上述のシンタクスによるファイル「HdmvSound.bdmv」の構成を示す。ファイルの先頭からフィールドnumber_of_sound_entriesまでをヘッダ部600とする。ヘッダ部600に続けて、forループ部601が配置され、次に音声データ部602が配置される。
音声データ部602には、識別子sound_id=1〜識別子sound_id=nで参照される音声データが連続的に配置される。例えば、ある音声データの末尾と次の音声データの先頭とがバイト境界で接続されて、識別子sound_id=1〜識別子sound_id=nで参照される音声データが次々に配置される。音声データ部602では、forループ部601中の、引数が識別子sound_idに対応するループにおけるフィールドsound_data_start_addressにより先頭アドレスが指定され、その指定アドレスから当該ループのフィールドsound_data_lengthで指定される長さまでが、当該ループの引数に対応する識別子sound_idの音声データとして参照される。
図62は、この第3の格納方法による効果音再生の一例のアプリケーションイメージを示す。なお、図62において、上述した図58と共通する部分には同一の符号を付し、詳細な説明を省略する。ディスク400のローディング時のプレーヤによるディスク400に対するイニシャルアクセスにより、ディレクトリBDAVの下に配置されるファイル「HdmvSound.bdmv」が予め読み込まれる(プリロード)。読み込まれたファイル「HdmvSound.bdmv」は、プレーヤの内部メモリ410に格納される。
図61を用いて既に説明したように、音声データのそれぞれは、ファイル「HdmvSound.bdmv」のループ部601でアドレス情報およびデータ長情報とに基づき指定され、対応する識別子sdound_idにより識別される。この図62の例では、ファイル「HdmvSound.bdmv」は、m個の音声データを含み、識別子sound_id=1、2、・・・、mがm個の音声データに対してそれぞれ割り当てられる。それぞれの音声データの容量は、例えば識別子sound_idに対応するデータ長情報および量子化ビット数bits_per_sampleから知ることができる。
なお、ここでは、音声データがPCMにより符号化されているとして説明したが、これはこの例に限定されない。音声データは、MPEG1レイヤ3(mp3)方式やAAC(Advanced Audio Coding)方式、ATRAC(Adaptive Transform Acoustic Coding)方式など所定の方式で圧縮符号化されて音声データ部602に格納されてもよい。この場合でも、各音声データは、ある音声データの末尾と次の音声データの先頭が連続するようにして、音声データ部602に格納される。
例えば、ボタン420A、420Bおよび420Cが表示されるメニュー画面420を考える。メニュー画面420において、ボタン420Cは、通常状態、選択状態および実行状態でそれぞれ異なるボタン画像420C−1、420C−2および420C−3を有するボタン画像セット430からなる。このように、ボタンの3種類の状態に応じてボタン画像を変更すると、ユーザがボタン状態を区別し易く、好ましい。また、この図62の例では、選択状態のボタン画像420C−2に対して識別子sound_id=2の音声データが対応付けられ、実行状態のボタン画像420C−3に対して識別子sound_id=1の音声データが対応付けられている。なお、識別子sound_idの値が「0」のときは、ボタン画像は表示されるが、音声は出力されないものとする。
例えばユーザのリモコン操作によりボタン420Cが選択状態から実行状態に遷移すると、ボタンの表示画像がボタン画像420C−2からボタン画像420C−3に変更されると共に、ボタン画像420C−3に対応付けられた識別子sound_id=1の音声データがメモリ410から読み出され、再生される。
すなわち、ボタン画像420C−3が表示されると共に、ボタン画像420C−3に対応付けられた識別子sound_id=1に対応するアドレス情報およびデータ長情報に基づきメモリ410がアクセスされ、識別子sound_id=1で示される音声データがメモリ410から読み出される。メモリ410から読み出された音声データは、バッファ450Bに一旦溜め込まれる。そして、オーディオミキサ231に供給されて、例えばバッファ450Aから出力された、本編の動画像データに付随する音声データと混合されて、音声として出力される。
なお、この第3の格納方法においても、図58を用いて説明した上述の(2)の方法の場合と同様に、ディスク400から読み込み可能な音声データの合計容量や、それぞれの音声データの容量は、メモリ410の容量や、バッファ450Bの容量に基づき制限される。
この第3の格納方法に適用できるグラフィクスオブジェクトの一例の構成について説明する。この第3の格納方法では、グラフィクスプレーン12を用いたGUI(Graphical User Interface)によるメニュー画面を構成するボタン画像を、1つのストリーム構造にまとめて符号化する。以下、このボタン画像データがまとめられたストリームを、インタラクティブグラフィクスストリームと呼ぶ。
一例として、上述した図62のメニュー画面420でいうと、ボタン420A、420Bおよび420Cを表示するためのボタン画像データがまとめてインタラクティブグラフィクスストリーム700(図63参照)として符号化される。ボタン420Cの例のように、1つのボタンが状態に応じた複数のボタン画像データ420C−1420C−2および420C−3を有するボタン画像セット430からなる場合、ボタン画像セット430が含む複数のボタン画像データデータ420C−1、420C−2および420C−3が、ボタン420Aおよび420Bのボタン画像データと共に、まとめてインタラクティブグラフィクスストリーム700として符号化される。このインタラクティブグラフィクスストリーム700は、トランスポートストリームに多重化されて、ディスクに記録される。
図63は、インタラクティブグラフィクスストリーム700の一例の構成を概略的に示す。1つのインタラクティブグラフィクスストリーム700は、図63Aに一例が示されるように、1つのインタラクティブコンポジションセグメント701と、1または複数のボタン画像データ702、702、・・・を持つ。ここで、それぞれのボタン画像データ702、702、・・・は、異なる値の識別子object_idを有し、この識別子object_idにより参照される。ボタン画像データ702、702、・・・は、例えばビットマップ画像データを符号化したものであり、例えば、ビットマップ画像データをランレングス符号化して作成する。
図63Bに一例が示されるように、インタラクティブグラフィクスストリーム700は、同一のPIDを有する複数のトランスポートパケットのペイロードに格納され、このトランスポートパケットによりトランスポートストリームに多重化される。
図64は、インタラクティブコンポジションセグメント701の一例の構成を示す。インタラクティブコンポジションセグメント701は、セグメントディスクリプションアトリビュート、ディスプレイタイミングアトリビュートと、ボタンレイアウトおよびコマンドとからなる。セグメントディスクリプションアトリビュートおよびディスプレイタイミングアトリビュートは、このインタラクティブポジションセグメント701で定義されるボタンの表示属性や表示タイミングに関する属性情報が格納される。
ボタンレイアウトおよびコマンドは、GUIによるメニュー画面を構成する1以上のボタンの情報703、703、・・・を有する。ボタン情報703において、フィールドbutton_numberは、各ボタンを識別するための識別子button_numberが格納される。各ボタンは、この識別子button_numberにより識別および参照される。フィールドselected_state_sound_idは、「選択状態」のボタン画像に関連付けられた音声データを参照する識別子sound_idが格納される。フィールドactivated_state_sound_idは、「実行状態」のボタン画像に関連付けられた音声データを参照する識別子sound_idが格納される。フィールドneibour_infoは、図65に一例が示されるように、このボタンに対して画面上で上下左右に隣接して配置されるボタンの番号Upper_button_number、Lower_button_number、Left_button_numberおよびRight_button_numberが格納される。
フィールドNormal_state_object_idは、このボタンが「通常状態(非選択状態)」のときに参照されるボタン画像の識別子object_idが格納される。フィールドSelected_state_object_idは、このボタンが「選択状態」のときに参照されるボタン画像の識別子object_idが格納される。フィールドActivates_state_object_idは、このボタンが「実行状態」のときに参照されるボタン画像の識別子object_idが格納される。フィールドcommandは、このボタンが実行状態になったときに実行される、当該ボタンに割り当てられた動作情報が格納される。
2−15.プレーンの別の例について
なお、上述では、図15、図16および図17を用いて説明したように、グラフィクスプレーン12がカラーシステムとしてYCbCr(4:4:4)およびRGB(4:4:4)を選択可能として説明したが、これはこの例に限定されない。例えば、図66に一例が示されるように、グラフィクスプレーン12’をボタン用のビットマップ画像を主たる表示とするように定義し、図67に一例が示されるように、字幕プレーン11と同様に、1920画素×1080ラインで各画素のサンプリング深さが8ビットとされ、カラーシステムを256色のパレットを用いた8ビットカラーマップアドレスとしてもよい。
この場合、動画像プレーン10、字幕プレーン11およびグラフィクスプレーン12’を合成する構成は、図68に一例が示されるようになる。なお、図68において、上述の図17と共通する部分には同一の符号を付し、詳細な説明を省略する。
グラフィクスプレーン12’の画像データがパレット26Aに入力され、RGB(4:4:4)の画像データとして出力される。この画像データに対してアルファブレンディングによる不透明度が指定されている場合には、指定された不透明度α2(0≦α2≦1)がパレット26Aから出力される。パレット26Aの入出力データおよびパレット26Aに格納されるパレットデータは、上述した図18および図19と同様であるので、詳細な説明を省略する。
パレット26Aから出力されたRGBデータは、RGB/YCbCr変換回路26Bに供給されてYCbCrデータに変換され、、動画データのデータ形式であるYCbCrデータに統一される。RGB/YCbCr変換回路26Bから出力されたYCbCrデータが乗算器27に入力される。
グラフィクスプレーン12’で用いられる画像データがPNG形式である場合には、画像データ中に、画素毎に不透明度データα2(0≦α2≦1)を設定することができる。不透明度データα2は、乗算器27に供給される。乗算器27では、RGB/YCbCr変換回路26から入力されたYCbCrデータに対し、輝度信号Y、色差信号Cb、Crのそれぞれについて、不透明度データα2との乗算が行われる。乗算器27による乗算結果が加算器28の一方の入力端に入力される。また、不透明度データα2の補数(1−α2)が乗算器25に供給される。
2−16.デコーダモデルの別の例について
図69は、図34を用いて説明したプレーヤデコーダ100に対して、上述したグラフィクスオブジェクト200に連動可能な音声データ処理と、グラフィクスプレーン12’のカラーシステムを256色のパレットを用いた8ビットカラーマップアドレスとを適用した場合のプレーヤデコーダ100’の一例の構成を示す機能ブロック図である。なお、図69において、上述の図34と共通する部分には同一の符号を付し、詳細な説明を省略する。
上述の、クリップAVストリームに多重化されない音声データは、例えば入力チャンネル(1)のデータとして入力端101に入力され、スイッチ回路102および103を介してコンテンツバッファ105に供給される。一方、音声データが格納されたグラフィクスオブジェクト200が多重化されたクリップAVストリームは、入力端202に入力される。そして、PIDフィルタ110でグラフィクスオブジェクト200が振り分けられバッファTBn111Aに一旦溜め込まれ、スイッチ回路103を介してコンテンツバッファ105に供給される。
音声データの格納されていないグラフィクスオブジェクト200がクリップAVストリームに多重化されて入力端202から入力される。PIDフィルタ110でグラフィクスオブジェクト200を構成するトランスポートパケットが振り分けられ、バッファTBn111BまたはバッファTBn111Cに一旦溜め込まれる。バッファTBn111Bに溜め込まれたトランスポートパケットは、バッファBn112Bに供給され、PIDヘッダに基づきグラフィクスオブジェクト200がまとめられる。グラフィクスオブジェクト200は、スイッチ回路107を介してグラフィクスデコーダA500に供給される。バッファTBn111Cに溜め込まれたトランスポートパケットも、同様にしてバッファBn112Cを用いてグラフィクスオブジェクト200がまとめられ、スイッチ回路108を介してグラフィクスデコーダB501に供給される。
グラフィクスデコーダA500およびB501では、供給されたトランスポートパケットのヘッダ情報を除去すると共に、当該トランスポートパケットに格納された画像データをデコードして字幕またはグラフィクスを表示するための画像データ、例えばビットマップデータとする。
一方、コンテンツバッファ105に供給された、音声データが格納されたグラフィクスオブジェクト200に格納される画像データは、コンテンツバッファ105から取り出され、スイッチ回路107および108を介してグラフィクスデコーダA500およびB501にもそれぞれ供給される。
この図69の例では、グラフィクスデコーダA500は、PNG形式の画像データをデコードし、グラフィクスデコーダB500は、JPEG形式の画像データをデコードする。なお、グラフィクスデコーダA500およびB501は、これに限らず、さらに他のデータ形式の画像データをデコードするものであってもよいし、複数の形式の画像データに対応するようにもできる。
グラフィクスデコーダA500の出力は、スイッチ回路130の入力端130Bおよびスイッチ回路131の入力端131Bに供給され、スイッチ回路130および131を介してそれぞれサブピクチャプレーン502およびグラフィクスプレーン503に供給される。
マルチメディアエンジン106は、上述の図34の構成に加えてサウンドプレーヤ106Dを有する。バッファ109は、上述の図34の構成に加えてサウンドバッファ109Eを有する。サウンドプレーヤ106Dは、サウンドバッファ109Eを用いて、コンテンツバッファ105から読み出した音声データを復号化して、例えばリニアPCMオーディオデータにして出力する。サウンドプレーヤ106Dから出力された音声データは、プレゼンテーションプロセッサ141に供給され、オーディオデコーダ118から出力された音声データと混合されて、出力端142に導出される。
例えばボタン画像をクリックした際に発生されるクリック音など、効果音となる音声データは、サウンドプレーヤ106Dによって再生される。音声データは、サウンドバッファ109Eに蓄積され、サウンドプレーヤ106Dにより再生される。サウンドプレーヤ106Dは、例えば音声データのソフトウェア的な再生処理を行う。
マルチメディアエンジン106では、例えばコードバッファ104に蓄えられたECMAスクリプトを読み出して解析し、コードバッファ104からの他のECMAスクリプトやHTML文書の読み出し、コンテンツバッファ105からの画像データや音声データの読み出しなどを行う。コンテンツバッファ105に格納された音声データは、コンテンツバッファ105に格納された他のデータと同様、上述したように、コンテンツバッファ105に保持しておくことができる。
さらに、マルチメディアエンジン106により、ユーザからの、リモートコントロールコマンダやポインティングデバイスなどによる入力が受け取られ、所定に処理される。マルチメディアエンジン106では、このユーザ入力に基づく処理結果や各スクリプトに応じてコントロール信号を生成する。このコントロール信号は、さらに、グラフィクスデコーダA500およびB501、オーディオデコーダ118、MPEGビデオデコーダ120およびシステムデコーダ121にも供給される。
グラフィクスレンダラ106Cで処理された画像データは、スイッチ回路130および131をそれぞれ介してサブピクチャプレーン502およびグラフィクスプレーン503に供給される。サブピクチャプレーン502およびグラフィクスプレーン503は、例えばフレームメモリからなり、図66を用いて説明した字幕プレーン11およびグラフィクスプレーン12’にそれぞれ対応する。
なお、ここでは、グラフィクスレンダラ106Cからサブピクチャプレーン502およびグラフィクスプレーン503に供給される画像データは、例えばPNG形式またはJPEG形式の画像データをグラフィクスレンダラ106Cでデコードした後のビットマップデータであるものとする。
マルチメディアエンジン106は、さらに、プレゼンテーションプロセッサ139に対して、サブピクチャプレーン502、グラフィクスプレーン503および動画像プレーン135を切り換える制御信号を供給し、プレゼンテーションプロセッサ141に対して、オーディオストリーム出力を制御するような制御信号を供給する。
サブピクチャプレーン502上の画像データは、上述の図68におけるパレットテーブル22に対応するパレット504に供給され、256色からなるパレットに対してインデックスによる参照がなされ、RGBデータが出力されると共に、不透明データa1が出力される。RGBデータは、上述の図68におけるRGB/YCbCr変換回路29に対応するRGB/YCbCr変換回路506に供給され、カラーシステムがRGB(4:4:4)からYCbCr(4:4:4)に変換される。RGB/YCbCr変換回路506から出力されたYCbCrデータは、プレゼンテーションプロセッサ139に供給される。
グラフィクスプレーン503上の画像データは、上述の図68におけるパレットテーブル26Aに対応するパレット505に供給され、256色からなるパレットに対してインデックスによる参照がなされ、RGBデータが出力されると共に、不透明データa2が出力される。RGBデータは、上述の図68におけるRGB/YCbCr変換回路26Bに対応するRGB/YCbCr変換回路507に供給され、カラーシステムがRGB(4:4:4)からYCbCr(4:4:4)に変換される。RGB/YCbCr変換回路507から出力されたYCbCrデータは、プレゼンテーションプロセッサ139に供給される。
プレゼンテーションプロセッサ139には、さらに、動画像プレーン135上の動画像データがアップ/ダウンコンバータ138を介して供給される。
プレゼンテーションプロセッサ139は、上述したように、字幕プレーン11(サブピクチャプレーン502の画像データによる不透明度α1と、グラフィクスプレーン12’(グラフィクスプレーン503)による不透明度α2とを用いたアルファブレンディング処理を行う。この処理により、動画プレーン10、字幕プレーン11およびグラフィクスプレーン12’の画像データが合成される。また、プレゼンテーションプロセッサ139は、画像データに対してリアルタイムでエフェクト処理を行うこともできる。このように、プレーン間の合成処理やエフェクト処理がなされた画像データが出力端140に導出される。
2−17.デコーダモデルのさらに別の例について
図70は、上述した音声データの第3の格納方法を適用した場合のプレーヤデコーダ100”の一例の構成を示す。なお、図70において、上述した図34または図69と共通する部分には同一の符号を付し、詳細な説明を省略する。上述したように、音声データの第3の格納方法では、ボタン状態に対応する効果音を再生する複数の音声データを、まとめて1つのファイル「HdmvSound.bdmv」とし、ディレクトリBDAVの配下に格納している。このファイル「HdmvSound.bdmv」は、ディスクのイニシャルアクセス時に予め読み込まれ、プレーヤ内部のメモリに格納される。
プレーヤ内部のメモリは、バッファ109内のサウンドバッファ109Eを用いることができる。例えば、ディスクのイニシャルアクセス時に読み出された音声データファイルが端子101から入力され、スイッチ回路102およびコンテンツバッファ105を介してサウンドバッファ109Eに供給される。コードバッファ104に溜め込まれたプログラムコードの実行に伴い、サウンドバッファ109Eから必要な音声データが読み出され、端子710から入力される。
また、端子202にMPEG ESで入力されたリアルタイムストリームは、PIDフィルタ110に供給される。PIDに基づき、トランスポートパケットがインタラクティブグラフィクスストリーム700が格納されているパケットであるとされれば、当該トランスポートストリームは、バッファ111Aに一旦溜め込まれ、所定のタイミングで読み出されて入力端103Bが選択されたスイッチ回路103に入力され、スイッチ回路103を介してコンテンツバッファ105に格納される。
コンテンツバッファ105から、インタラクティブグラフィクスストリーム700内のインタラクティブコンポジションセグメント701が読み出され、マルチメディアエンジン106に供給される。また、コンテンツバッファ105から、ボタン画像データ702、702、・・・が読み出され、スイッチ回路108を介してグラフィクスデコーダB501に供給される。
端子710から入力された音声データは、バッファ711に一旦溜め込まれ、ミキサ712においてオーディオデコーダ118から出力された音声データと所定の比率で混合されて、プレゼンテーションプロセッサ141に供給される。ミキサ712における混合比は、例えばユーザ入力に応じたサウンドプレーヤ106Dの制御に基づき、プレーヤデコーダ100”側で設定可能である。
なお、図70では、便宜上、バッファ711およびミキサ712を独立した構成のように表現しているが、バッファ711およびミキサ712は、実際には、プレゼンテーションプロセッサ141に内蔵されるものである。したがって、上述した図62との対応を考えると、バッファ711がバッファ450Bに対応し、ミキサ712がオーディオミキサ231に対応する。また、図62におけるバッファ450Aは、プレゼンテーションプロセッサ141に内蔵される。
また、音声データが圧縮符号化されてディスクに記録されている場合、ディスクから読み出された音声データは、圧縮符号が復号化され、リニアPCMオーディオデータとされてから、バッファ711に溜め込まれる。例えば、サウンドプレーヤ106Dは、ディスクから読み出された、圧縮符号化された音声データをデコードしてサウンドバッファ109Eに格納する。音声データのデコードには、オーディオデコーダ118を用いることができる。ソフトウェア的にデコード処理を行ってもよい。
上述では、図70のプレーヤデコーダモデルにおいて、効果音を再生する音声データは、ディスクに格納された映画などの主コンテンツの再生に先立って、ディスクからプリロードされて、プレーヤデコーダの内部メモリに格納されると説明した。ここで、上述した図62のようなディレクトリおよびファイル構造の場合、効果音を再生する音声データが格納されているファイル「HdmvSound.bdmv」は、ディレクトリBDMVに対して1個しか存在できない。プレーヤは、ディスクへのイニシャルアクセス時に、効果音の音声データファイルをプレーヤの内部メモリにプリロードする。
これはこの例に限らず、別の例として、図71に一例が示されるように、プレイリストに対して効果音再生のためのデータを付随させる方法が考えられる。この場合は、既に説明した、図10に一例が示されるサブプレイアイテムを利用して、ボタンに対する効果音を再生する音声データを参照する方法を用いることができる。例えば、サブプレイアイテムに対して、当該サブプレイアイテムで参照される音声データが格納されるファイル名(ファイル「HdmvSoundxx.bdmv」)を記述する。
あるいは、効果音のための音声データが格納されているファイルへの参照情報を、プレイリストの属性情報として付加する方法として、図9中のブロックUIAppInfoPlayList()を利用してもよい。この場合は、ブロックUIAppInfoPlayList()のシンタクスに対して、効果音のための音声データが格納されているファイル名「HdmvSoundxx.bdmv」を記述するフィールドを設ければよい。
プレーヤデコーダは、プレイリストの再生に先立って、効果音のための音声データが格納されているファイルへの参照情報(例えばサブプレイアイテム)により参照される音声データを、プレーヤの内部メモリにプリロードする。
図72は、この別の例における一例のファイルの管理構造を示す。この図72の例では、ディレクトリSTREAMの下に、効果音を再生する音声データが格納されるファイル「HdmvSound01.bdmv」、ファイル「HdmvSound02.bdmv」、・・・が置かれる。ファイル「HdmvSound01.bdmv」、ファイル「HdmvSound02.bdmv」、・・・のそれぞれは、図60および図61を用いて説明したファイル「HdmvSound.bdmv」と同一の構成を有し、例えばデータ部602に格納される音声データがそれぞれ異なる。このように、効果音を再生する音声データが格納されるファイルを、ディスク上に複数存在させることも可能である。上述のように、効果音のための音声データが格納されるファイルへの参照情報(例えばサブプレイアイテム、あるいは、プレイリストの属性情報であるブロックUIAppInfoPlayList())によって、音声データが格納されるファイルが参照される。この別の例の場合、効果音を再生する音声データの種類を、プレイリスト単位で変更することが可能である。
3.発明の実施の第2の形態
次に、この発明の実施の第2の形態について説明する。上述の実施の第1の形態では、ディスクに対する再生制御を指示する再生プログラムをECMAスクリプトおよびHTMLを用いて記述した。これに対して、この実施の第2の形態では、再生プログラムを、ECMAスクリプトおよびHTMLとは異なる、独自のデータ構造、記述言語を用いて表現する。この発明の実施の第2の形態で用いられるシナリオ記述言語は、DVDビデオのナビゲーションコマンドを基に変更を加えたものに、字幕画像、ボタン画像用の独自の表示制御コマンドをさらに加えた命令群を定義する。これにより、Blu−ray Discに用いて好適な、より柔軟なメニュー画面表示を行うことを可能としている。
3−1.シナリオについて
この実施の第2の形態では、独自に定義したシナリオ記述言語を用いるため、例えば上述の実施の第1の形態のECMAスクリプトを用いた場合に比べ、イベントハンドラの定義が不要となる。例えば、この独自に定義したシナリオ記述言語は、シナリオを実行するに当たって必要なイベントを予め言語として定義することができるため、汎用なECMAスクリプトを用いる場合のように、シナリオの実行に特に適合したイベントをプログラム内で定義する必要が無い。
この独自に定義したシナリオ記述言語を用いることで、例えば上述した図21で一例を示したシナリオの内部構造は、グローバルなイベントハンドラ定義71とローカルなイベントハンドラ定義72とが不要とされ図73に示されるシナリオ70’のようになる。シナリオ70’の先頭の、エントリプレイリストと記述されるプレイリスト73Aは、例えばディスクがプレーヤにローディングされてシナリオが再生された際に最初に実行されるプレイリストである。このメニュー画面に対して所定の指示がなされると、続けてプレイリスト73Bが再生され、再生が終了されるとプレイリスト73Cが再生される。この図73の例では、プレイリスト73Cの再生によりグラフィクスデータ74Aが読み出されて、ユーザにストーリーの分岐選択を促す画面80Aが表示される。
以降、この発明の実施の第1の形態での説明において図21を用いて上述したようにして、シナリオ70’が再生される。プレイリスト中にマークが設定されている場合には、このマークの位置に応じたプレイリストの分岐や合流などが可能とされる。
シナリオの再生において、マークの検出、ユーザからの入力、プレーヤの動作変更の検出がされた時の動作は、プレイリスト毎にコマンド列(プログラム)が用意されており、そのプログラムをプレーヤが実行することにより行われる。
例えば、上述のシナリオ70’内のプレイリスト73A〜73Mの何れが再生中であっても、リモートコントロールコマンダに設けられたメニューボタンが押されたら、シナリオの一覧が表示されるメニュー画面60(図20参照)が表示される、すなわち、メニュー画面60を表示するためのプレイリストに再生処理が移行される動作を実現したい場合について考える。この場合、リモートコントロールコマンダのメニューボタンが押されたときに発生するイベント(メニューボタン押下イベント)に対応するイベントハンドラとして、メニュー画面60を表示させるプレイリストに処理が移行される命令を、シナリオデータの一つとして記述しておく。
3−2.シナリオの分類
シナリオはBDAVディレクトリに一つ定義され、一つまたは二つ以上のプレイリストから構成される。ここで、シナリオの構成の分類について図74および図75を用いて説明する。シナリオの構成は、プレイリスト同士の接続を基に考えると、図74に示されるように、(1)シングルプレイリスト、(2)シーケンシャルプレイリスト、(3)マルチプレイリスト、の3種類に大別することができる。
(1)のシングルプレイリストは、図75Aに一例が示されるように、単一のプレイリストで構成されるシナリオである。タイムラインが定義可能で、シナリオ再生中の割り込みが無い。コンテンツが映画であれば、例えばディスクのローディング後に映画本編だけが再生されるようなシナリオである。
(2)のシーケンシャルプレイリストは、図75Bに一例が示されるように、複数のプレイリストが分岐無しに直列的に並べられて構成されるシナリオである。各プレイリストは、プレイリストの末尾と次のプレイリストの先頭とが接続されるように並べられる。各プレイリストを通じてのタイムラインが定義可能である。コンテンツが映画であれば、例えばメニュー画面と映画本編との組み合わせからなるシナリオである。ディスクのローディング後にメニュー画面を表示させるプレイリストが実行され、メニュー画面に対して映画本編の再生が指示されると、次のプレイリストが実行され、映画の本編が再生される。
(3)のマルチプレイリストは、図75Cに一例が示されるように、プレイリストの分岐や収束による接続を含むシナリオである。プレイリストを通じてのタイムラインを定義することができず、例えば各プレイリスト内にタイムラインが定義される。マルチプレイリストによれば、ユーザ入力によって再生内容が変化するようなインタラクティブ性やゲーム性を実現することができる。コンテンツが映画の場合には、例えば同一シーンを様々なアングルで収録し、再生時にユーザの指示により選択して鑑賞できるようにしたマルチアングルを実現するシナリオである。
シナリオは、後述するように、BDAVディレクトリに一つ定義される。ユーザに対しては、シナリオをより細分化した単位を見せる必要がある。但し、プレイリストの単位がユーザが認識する単位と一致するとは限らない。例えば、一つのプレイリストに3本の映画が収録されているときには、各映画の頭出し点をユーザに見せる必要がある。このように、プレイリストの構造とは独立した頭出し点(エントリポイント)を、以下では、タイトルおよび/またはチャプタと呼ぶことにする。
図76を用いてタイトルおよびチャプタについて説明する。タイトルは、シナリオ中の任意の再生開始点を表す。この図76の例では、プレイリスト470Aの先頭にタイトル1に設定されている。タイトル2は、プレイリスト470Dの途中に設定されている。プレイリスト470Aの先頭からタイトル2の直前までがタイトル1とされる。チャプタは、タイトルをさらに細分化した単位で、これもユーザが再生開始点として認識できる単位となる。タイトル1がチャプタによりさらに細分化される。図76の例では、タイトル1に対してチャプタ1、2および3が設定され、タイトル1が3つに細分化されている。また、図76に示されるように、タイトルおよびチャプタの位置は、プレイリストの途中を指定することもできる。
3−3.仮想プレーヤモデルについて
この発明の実施の第2の形態によるシナリオ記述言語は、この発明の実施の第1の形態において図22を用いて既に説明した、BD仮想プレーヤモデルにより同様に再生することができる。BD仮想プレーヤ30は、ディスクのローディング後、ディスクに記録された、この実施の第2の形態による独自に定義したシナリオ記述言語により記述されたシナリオを、PBCプログラム40として読み込み、シナリオの記述に従い動作する。このとき、BD仮想プレーヤ30の動作中に発生されたイベントに応じて、BD仮想プレーヤ30の動作が制御される。
シナリオは、プレーヤの動作を指示するコマンドが並んだプログラムを含むコマンドを配置する領域として、グローバルコマンド領域とローカルコマンド領域とを有する。
グローバルコマンド領域は、シナリオ全体に有効なプログラムであるグローバルコマンドが格納されている。グローバルコマンド領域には、例えば、ディスクがプレーヤに挿入されたときに、プレーヤによって最初に自動的にプレーヤに実行されて、パラメータの初期化を行い、メニュー画面を構成するプレイリストにジャンプするようなプログラムが記述される。ローカルコマンド領域は、各プレイリストに関係するプログラムが格納される。この発明の実施の第2の形態では、ローカルコマンドは、さらにプレコマンド、プレイアイテムコマンド、ポストコマンドおよびボタンコマンドの4種類に分類される。
図77は、この発明の実施の第2の形態におけるシナリオで記述されるコマンドによるBD仮想プレーヤ30の動作を概略的に示す。図77Aは、ディスクのローディング時の動作の例を示す。上述したように、シナリオは、BDAVディレクトリに対して一つが作られる。ディスクがプレーヤに挿入されディスクに対するイニシャルアクセスがなされると(ステップS30)、レジスタすなわち共通パラメータ32が初期化される(ステップS31)。そして、次のステップS32で、プログラムがディスクから読み込まれて実行される。なお、イニシャルアクセスは、ディスク挿入時のように、ディスクの再生が初めて行われることをいう。
この、ディスクローディング時に最初に読み込まれ、実行されるコマンド群(プログラム)を、グローバルコマンドと称する。グローバルコマンドは、例えば宣伝用映像(トレーラー)やメニュー画面を構成するプレイリストへのジャンプ命令が記述されており、その命令通りにプレーヤがプレイリストを再生していくことになる。
図77Bは、プレーヤ30が停止状態からユーザにより例えばプレイキーが押下され再生が指示された場合の動作の例を示す。これは、上述の図23における状態Bから状態Aへの状態遷移に相当する。最初の停止状態(ステップS40)に対して、ユーザにより、例えばリモコンなどを用いて再生が指示される(UOP:User Operation)。再生が指示されると、先ず、レジスタすなわち共通パラメータ32が初期化され(ステップS41)、次のステップS42で、プレイリストの再生フェイズに移行する。
プレイリストの再生フェイズにおけるプレイリストの再生について、図78を用いて説明する。図78Aは、プレイリストが単一のプレイアイテムからなる場合の例である。プレイリストは、プレコマンド領域、プレイアイテムコマンド領域およびポストコマンド領域の3箇所にプログラムが配される。プレイリストの再生フェイズに移行すると、先ずプレコマンド領域のプレコマンドが実行され(ステップS10)、プレコマンドの実行が終了されると、プレイリストを構成するプレイアイテムの再生フェイズに移行する(ステップS11)。プレイアイテムの再生フェイズでは、プレイアイテムにおいて開始点および終了点で指定されたストリームが再生される(ステップS110)。終了点までの再生が終了した時点で、プレイアイテムコマンドが実行される(ステップS111)。プレイアイテムコマンドが実行されると、次にポストコマンド領域のポストコマンドが実行され(ステップS12)、プレイリストの再生が終了される。
なお、ポストコマンドは、一般的な使用においては、次に再生すべきプレイリストへのジャンプ命令や、メニュー画面を構成するプレイリストへのジャンプ命令が記述される。ジャンプ命令が無い場合には、そこで再生が停止し、プレーヤは、停止状態(図23の状態B)に遷移される。
図78Bは、プレイリストが複数のプレイアイテムを含む場合の例である。この場合でも、プレイリスト中にプレコマンド領域、プレイアイテムコマンド領域およびポストコマンド領域が配され、それぞれプログラムが格納される。複数のプレイアイテムを含む場合、プレイアイテムコマンド領域では、プレイアイテム数分のプレイアイテムストリームおよびプレイアイテムコマンドが、時系列に従って配置される。
プレイリストが複数のプレイアイテムを含む場合でも、プレイリストの再生フェーズに移行すると、先ず、プレコマンドが実行される(ステップS10)。次のプレイアイテムの再生フェイズでは、プレイアイテムの開始点から終了点までのストリームの再生と、プレイアイテムコマンドの実行とが、プレイリストが含むプレイアイテムの数だけ実行される。図78Bの例では、最初のプレイアイテムストリームが再生され(ステップS110−1)、対応するプレイアイテムコマンドが実行される(ステップS111−1)。次に、図示は省略するが、2番目のプレイアイテムストリームが再生され(ステップS110−2)、対応するプレイアイテムコマンドが実行される(ステップS111−2)。これをプレイアイテムの数だけ行い、最後のプレイアイテムストリームが再生され(ステップS110−n)、対応するプレイアイテムコマンドが実行されると(ステップS111−n)、プレイアイテムの再生フェイズが終了する。プレイアイテムの再生フェイズが終了すると、ポストコマンドが実行され(ステップS12)、このプレイリストの再生フェーズが終了される。
この発明の実施の第2の形態では、BD仮想プレーヤ30、ならびに、BD仮想プレーヤ30上で実行されるシナリオ、プレイリストおよびプレイアイテムを、階層的に考えることができる。すなわち、図79Aに一例が示されるように、BD仮想プレーヤ層600の上に1つのシナリオ層601があり、シナリオ層601の上に、1または複数のプレイリストを含むプレイリスト層602がある。プレイリスト層602の上には、プレイアイテム(PI)層603があり、プレイリスト毎に1または複数のプレイアイテムを持つことができる。
このような階層的な構造とすることで、プレイリストおよびプレイアイテムは、シナリオ層601を介してBD仮想プレーヤにより実行されることになる。したがって、シナリオにプレイリストに対する制御コマンドを記述することで、プレイリストの分岐などの制御が容易に実現される。これは、プレイアイテムに関しても同様である。この様子を図79Bに示す。
3−4.シンタクスについて
次に、この発明の実施の第2の形態によるシナリオを記述するコマンドやデータベースのディスクへの格納方法について説明する。この発明の実施の第2の形態においてBDAVフォーマットに対して拡張した機能の実現に必要なデータは、シナリオファイル「scenario.pbc」に記述されるものとする。シナリオファイル「scenario.pbc」は、上述の図4に示した"Blu-ray Disc Rewritable Format Ver1.0 part3"で規定された、記録媒体に記録されるファイルの管理構造に対し、ディレクトリBDAVの配下に置かれる。この様子を図80に示す。
図81は、シナリオを記述するためのシナリオファイル(scenario.pbc)の一例の構造を表すシンタクスを示す。ファイル「scenario.pbc」は、先頭から、ファイル識別記号、バージョン番号、ブロックの開始アドレスが記述され、その後に、機能別の情報毎にブロックが構成される。フィールドtype_indicatorは、32ビットのデータ長を有し、このファイルがシナリオを記述したファイルであることを表す特定の文字列が記述される。フィールドversion_numberは、32ビットのデータ長を有し、バージョン番号が記述される。フィールドTitleEntry_start_addressは、データ長が32ビットの符号無しの整数で、ブロックTitleEntry()が開始される位置をファイル「scenario.pbc」の先頭からの相対バイト数で表した値が記述される。同様に、フィールドSceanrio_start_addressは、データ長が23ビットの符号無しの整数で、ブロックScenario()が開始される位置を、ファイル「scenario.pbc」の先頭からの相対バイト数で表した値が記述される。
ブロックGlobalCommand()は、ファイルの先頭から41バイト目の固定位置から始まる。ブロックGlobalCommand()には、上述した、イニシャルアクセス時(ディスク挿入時のようにディスクの再生が始めて行われる時)に実行されるプログラムが記述される。上述のグローバルコマンドは、このブロックGlobalCommand()に格納される。GlobalCommand()の後には任意の数のpadding_wordが入り、ブロック間に空きを持たせることができるようになっている。
ブロックTitleEntry()は、シナリオ内の頭出し点が羅列される。シナリオは、BDAVディレクトリに対して一つ作られ、BDAVディレクトリの配下にある複数のプレイリストを結び付けて再生順序を定義する。一方、ユーザから見た場合、シナリオは、必ずしも一つの映像・音声単位として見える訳ではなく、複数の「タイトル」から構成されているように見える。
例えば、一枚のディスクに映画が3本収録されている場合、再生順序を定義するシナリオは、ディスクに一つのみ、存在するが、ユーザには、当該ディスクに3つのタイトルが収録されているように見える。あるいは、その3つのタイトルのリストを表示し、ユーザに選択させるタイトルメニュー画面も含めて、4つのタイトルに分割されているように見える。なお、メニュー画面もユーザにとっては一まとまりの映像・音声単位であるので、この発明の実施の第2の形態では、タイトルの一種としてみなすことにする。
このように、プレイリストの結びつきを定義するシナリオという単位と、ユーザが一まとまりの映像・音声として認識する単位には違いがあるため、上述のように、シナリオ内に頭出し点を定義しておく必要がある。このシナリオ内の頭出し点を、タイトルエントリと称する。
ブロックScenario()は、これまで説明してきた「シナリオ」が記述される。プレイリストの再生順序の情報や、プレイリスト毎に持つローカルコマンド領域などがブロックScenario()に格納される。
図82は、上述のブロックGlobalCommand()の一例の構造を表すシンタクスを示す。フィールドlengthは、データ長が32ビットの符号無し整数で、このフィールドlengthの直後からブロックGlobalCommand()の終わりまでの長さがバイト表記で記述される。フィールドnumber_of_commandsは、その後に続くフィールドcommandの数を表す。フィールドcommandは、データ長が32ビットで表される値であり、後述するプレーヤのパラメータのセット、指定のプレイリストの再生開始、演算などの命令が記述される。
図83は、ブロックTitleEntry()の一例のデータ構造を表すシンタクスを示す。フィールドlengthは、データ長が32ビットの符号無し整数で、このフィールドlengthの直後からブロックTitleEntry()の終わりまでの長さがバイト表記で記述される。フィールドnumber_of_Titlesは、その直後のforループ中に記述されるタイトル頭出し点の数を表す。フィールドEntry_PlayList_file_nameは、タイトルの頭出し点が含まれるプレイリストのプレイリストファイル名が記述される。フィールドTitle_name_character_setは、次のフィールドTitle_nameを表現するキャラクターセットを表す。次のフィールドTitle_nameは、頭出し点に付けられた名前の文字列が記述される。
フィールドnumber_of_Chaptersは、その直後のforループ内に記述されるチャプタの数が記述される。チャプタは、上述したように、タイトルを細分化するもので、チャプタ点もタイトルと同様にユーザから見えており、シナリオ内の頭出し点として用いられる。フィールドTitle_numberは、データ長が16ビットの符号無し整数で、forループ中の現在のループカウンタに対応するチャプタ(以下、このチャプタ)が属するタイトルの番号を表す。フィールドchapter_entry_PlayList_file_nameは、このチャプタが指しているプレイリストのプレイリストファイルのファイル名を表す。フィールドchapter_ref_to_PlayItem_idは、このチャプタが指しているプレイアイテムの番号を表す。フィールドchapter_time_stampは、このチャプタが指しているプレイアイテム上の時刻を表す。
ブロックTitle_Menu_Call_PL()は、ユーザがタイトル表示を指示したときに表示されるメニューを構成するプレイリストを指定する。ユーザによるタイトル指定は、例えばプレーヤを遠隔操作するリモコンに設けられた、タイトルメニューキーを操作することでなされる。タイトルメニューは、シナリオに一つ存在し、タイトル頭出し点をユーザに提示するためのメニューである。ユーザが例えばリモコンを操作してタイトルメニュー上で所望のタイトルを選択すると、プレーヤは、上述したフィールドnumber_of_Titlesの直後のforループ内に記述された情報に基づくタイトルエントリのリストから再生すべきプレイリストを知り、そのプレイリストの再生を開始する。
ブロックTitle_Menu_Call_PL()において、フィールドflagsは、タイトルメニューに関する属性情報が記述される。フィールドTitleMenu_entry_PlayList_file_nameは、タイトルメニューを構成するプレイリストあるいはプレイリスト群の入り口となるプレイリストを指定する。フィールドTitleMenu_ref_to_PlayItem_idは、プレイリスト中の特定のプレイアイテムからタイトルメニューが開始されている場合、そのプレイアイテムの番号を指定する。プレイリストの先頭からの再生であれば、フィールドTitleMenu_ref_to_PlayItem_idの値は、〔0〕となる。
フィールドTitleMenu_chapter_time_stampは、プレイアイテム中の時刻を表す。プレイアイテムの先頭からの再生であれば、プレイアイテムの先頭の時刻となる。フィールドUOP_mask_table()は、ユーザ操作を制限するためのデータが格納される。ここで制限されたユーザ操作は、仮にユーザがその操作を行ったとしても、プレーヤは反応してはならないものとされる。例えば、メニュー画面で早送りが実行されないようにする場合に、このフィールドUOP_mask_table()で、早送りのユーザ操作を無効にするような設定をしておく。
図84は、ブロックscenario()の一例の構造を表すシンタクスを示す。ブロックscenario()は、シナリオの情報、すなわちプレイリスト間のリンクを定義する。フィールドlengthは、このフィールドの直後からブロックScenario()の終わりまでの長さがバイト表記で記述される。フィールドnumber_of_PlayListsは、シナリオを構成するプレイリストの数を表す。フィールドnumber_of_PlayLists直後のforループ内に、このforループのループカウンタに対応するプレイリスト(以下、このプレイリスト)の情報が、フィールドnumber_of_PlayListsに記述されるプレイリスト数だけ、記述される、
以降は、このプレイリスト毎に持つデータである。フィールドflagsは、プレイリストに関する属性情報が記述される。フィールドflagsに記述される内容は、この発明の実施の第2の形態に直接的な関連が無いので、詳細は省略する。ブロックPL_UOP_mask_table()は、ユーザ操作を制限する情報が格納される。このブロックPL_UOP_mask_table()では、ユーザ操作の制限をプレイリスト毎に設定することができる。後述するコマンドUOP_mask_table()およびこのフィールドPL_UOP_mask_table()の両方で許可されているユーザ操作だけが、このプレイリスト再生中に実行できるユーザ操作となる。但し、最終的には、後述するブロックPI_UOP_mask_table()内に記述されるデータも含めて、ユーザ操作が可能か否かが判定される。
フィールドParental_levelは、このプレイリストに視聴者制限を加える場合に必要となる情報であり、このプレイリストが視聴可能な年齢や、視聴可能な年齢層を定めたレベルが記述される。
フィールドnumber_of_Pre_Commandsは、このプレイリストを再生する前に実行されるプログラムを構成するコマンド(プレコマンド)の数を表す。プログラムは、後のフィールドPL_Command(i)で表される領域に記述される。フィールドnumber_of_Post_Commandsは、このプレイリストを再生した後に実行されるプログラム(ポストコマンド)を構成するコマンドの数を表す。プログラムは、後のフィールドPL_Command(i)で表される領域に記述される。フィールドPre_Commands_start_idは、プレイリストを再生する前に実行されるプログラムのコマンドテーブル中の開始番号を表す。番号は、フィールドPL_Command(i)におけるパラメータiに対応する。フィールドPost_Commands_start_idは、プレイリストを再生した後に実行されるプログラムのコマンドテーブル中の開始番号を表す。番号は、フィールドPL_Command(i)におけるパラメータiに対応する。
フィールドnumber_of_PlayItemsは、このプレイリストを構成するプレイアイテムの数を表す。フィールドPI_UOP_mask_table()は、ユーザ操作を制限する情報が格納される。フィールドPI_UOP_mask_table()により、ユーザ操作の制限をプレイアイテムごとに設定できる。後述するコマンドUOP_mask_table()およびコマンドPL_UOP_mask_table()と、このフィールドPI_UOP_mask_tableの3種類のテーブルにおいて許可されているユーザ操作だけが、このプレイアイテム再生中に実行できるユーザ操作となる。
フィールドPI_Commands_start_idは、プレイアイテムの再生後に実行するコマンドの、コマンドテーブル中の開始番号を表す。番号は、フィールドPL_Command(i)におけるパラメータiを表す。フィールドnumber_of_PL_Commandsは、直後のforループにより表されるコマンドテーブルに格納されるコマンドの数を表す。フィールドPL_Command(i)に格納されるコマンドには、順に番号iが割り当てられている。フィールドPL_Command(i)は、一つのコマンドを表し、番号iは、上述したフィールドPre_Commands_start_id、フィールドPost_Commands_start_idおよびフィールドPI_Commands_start_idなどから参照される。
3−5.コマンドについて
図85は、この発明の実施の第2の形態によるシナリオで用いられるコマンドの一例を示す。これらのコマンドは、上述のBD仮想プレーヤ30が有するメソッドである。なお、図85に例示されるコマンドは、この発明の実施の第2の形態によるシナリオで用いられるコマンドの一部であって、実際には、さらに多数のコマンドが定義され、上述の実施の第1の形態で説明したような、ユーザインターフェイスの多彩な機能を実現可能なようにされている。例えば、音声データの再生に関するコマンドや、ボタン画像表示に関するコマンドがさらに定義される。
再生開始位置指定に関するメソッドについて説明する。メソッドLinkPlayList(playListNumber)で、"playListNumber"で指定されたプレイリストの再生開始が指示される。メソッドLinkPlayItem(playListNumber,playItemNumber)で、指定のプレイリストの指定のプレイアイテムからの再生開始が指示される。"playItemNumber"は、"PlayItem_id"であり、値が「0」から始まる。"playItemNumber"に値「0」を指定することで、当該プレイアイテムが属するプレイリストの先頭から再生される。
メソッドLink(position)(object)で、シナリオ内での移動が指示される。すなわち、現在移動中の箇所から前後のプレイリスト、プレイアイテムおよびチャプタに移動することがこのメソッドで指示される。なお、パラメータ"position"は、"prev"、"next"、"top"、"Parent"または"tail"の何れかの値を取り、パラメータ"object"で示される移動対象(プレイリスト、プレイアイテムまたはチャプタ)に対する移動方法が指示される。
メソッドExitで、シナリオ再生の停止が指示される。この場合、標準レジスタの値は、保持されない。メソッドRSMで、プレーヤ内のメモリに保存されているレジューム情報を呼び出し、レジスタにセットして再生を開始する。
プレーヤ状態の取得に関するメソッドについて説明する。メソッドgetMenuDescriptionLanguage()で、メニュー表示の際に用いられる言語が取得される。メソッドgetScenarioNumber()、メソッドgetPlayListNumber()およびメソッドgetChapterNumber()で、再生中のシナリオ番号、プレイリスト番号およびチャプタ番号がそれぞれ取得される。メソッドgetPlayerSupport()で、プレーヤのバージョン情報が取得される。
ビデオストリームに関するメソッドについて説明する。メソッドgetVideoStreamAvailability()で、指定のビデオストリームが含まれているか否かが取得される。メソッドsetVideoStreamNumber()で、デコードするビデオストリームが指定される。メソッドgetVideoStreamNumber()で、選択中のビデオストリームの番号が取得される。メソッドgetVideoStreamAttr()で、選択中のビデオストリームの属性が取得される。なお、ビデオストリームの属性は、例えば、そのビデオストリームの符号化方式、解像度、アスペクト比、アスペクト比が4:3のときのディスプレイモード、クローズドキャプションの有無である。メソッドsetAngleNumber()で、アングル番号が指定される。メソッドgetAngleNumber()で、選択中のアングル番号が取得される。メソッドgetMaxVideoStream()で、ビデオストリームの最大数が取得される。
このように定義されるシナリオファイル「scenario.pbc」に基づきディスクの再生を行うためには、例えば、上述の実施の第1の形態で図34、図69または図70を用いて説明した、プレーヤデコーダ100、100’または100”において、マルチメディアエンジン106に対して、これまでに説明した、実施の第2の形態によるシナリオ記述言語を解析するためのエンジンを追加すればよい。
例えば図69に示されるプレーヤデコーダ100’において、図示されないドライブ装置にディスクが装填されると、先ず、シナリオファイル「scenario.pbc」が再生される。再生されたシナリオファイル「scenario.pbc」は、プレーヤでコーダ100’に対してストアオブジェクトとして入力端101から入力され、スイッチ回路102を介してコードバッファ104に供給される。シナリオファイル「scenario.pbc」は、マルチメディアエンジン106内の上述のシナリオファイル解析エンジンにより解析され、解析結果に基づきシナリオデータが読み出され、動画プレーン10に表示するための動画データ、字幕プレーン11やグラフィクスプレーン12(またはグラフィクスプレーン12’)に表示するための画像データ、プレイリストファイル、シナリオファイルから呼び出される別のシナリオファイル、音声データなどがディスクから読み出される。
4.その他
また、上述では、音声データの第1、第2および第3の格納方法がこの発明の実施の第1の形態に適用されるように説明したが、これはこの例に限定されず、音声データの第1、第2および第3の格納方法をこの発明の実施の第2の形態に適用させてもよい。
さらに、上述では、この発明がBlu−ray Discに適用されるように説明したが、これは一例であって、この発明は、他の方式の大容量ディスク状記録媒体に対しても適用可能なものである。