(57)【特許請求の範囲】
【請求項１】
メモリと、動作可能に前記メモリに結合され、媒体からマルチメディアコンテンツにアクセスするように動作可能に構成できるロジックとを含んだ装置であって、
前記ロジックは、マルチメディアナビゲータプログラムと、制御アプリケーションプログラミングインタフェース（ＡＰＩ）と情報ＡＰＩとを含み、
前記制御ＡＰＩおよび情報ＡＰＩは、少なくとも１つの操作を行うかを選択的に判断するフラグに応答するように構成され、
前記操作は、プレイヤ−ナビゲータ同期操作と選択的対話型ユーザ操作とレジスタ読取り／書込み操作とを含む操作のグループから選択され、
前記プレイヤ−ナビゲータ同期操作により、マルチメディアプレイヤアプリケーションが、前記マルチメディアナビゲータプログラムに対して要求コマンドを出力し、
前記マルチメディアナビゲータプログラムが、（ｉ）前記要求されたコマンドの完了時を前記マルチメディアプレイヤアプリケーションに通知するイベント識別子と、（ｉｉ）前記マルチメディアプレイヤアプリケーションが複数インスタンス追跡を容易にする前記マルチメディアプレイヤアプリケーションにより要求されたコマンドが出力されるまで前記イベント識別子を追跡できるように、前記要求されたコマンドが成功したか、または失敗したかを示す状況の結果とを、前記マルチメディアプレイヤアプリケーションに対して後で返し、
前記マルチメディアナビゲータプログラムからキャンセル要求コマンドメッセージを返すことにより、前記マルチメディアプレイヤアプリケーションに対して、前記マルチメディアコンテンツによりまたはユーザ動作により取り消された全ての要求コマンドを通知し、
マルチメディア再生の現在の状態をエンコードし、ストアするために、ブックマークを生成し、前記マルチメディア再生の現在の状態は、デジタル多用途ディスク（ＤＶＤ）のフォーマットのコンテンツを含み、前記ブックマークは少なくとも以下の情報、すなわち
固有のディスク識別子、
現行ＤＶＤのアドレス及び再開情報、
ループカウントおよびシャッフル履歴、
現行ＤＶＤの汎用パラメータおよびシステムパラメータ、および
現行ＤＶＤのドメインおよびフェーズ、
を含むことを特徴とする装置。
【請求項２】
請求項１に記載の装置において、
前記要求コマンドおよび前記イベント識別子の両方が、前記ナビゲータプログラムに動作可能に関連付けられた少なくとも１つのアプリケーションプログラミングインタフェース（ＡＰＩ）を介して送られることを特徴とする装置。
【請求項３】
請求項２に記載の装置において、
前記ＡＰＩは、前記プレイヤアプリケーションによって選択的に設定された少なくとも１つのフラグ値に応答して、前記要求されたコマンドの開始時、完了時、または取消時に前記イベント識別子および状況の結果を返すべきことを識別するようにさらに構成されていることを特徴とする装置。
【請求項４】
請求項１に記載の装置において、
前記ナビゲータプログラムは、前記要求コマンドに応答してマルチメディア情報に動作可能にアクセスするように構成されていることを特徴とする装置。
【請求項５】
請求項４に記載の装置において、
前記マルチメディア情報はデジタル多用途ディスク（ＤＶＤ）フォーマットのコンテンツを含むことを特徴とする装置。
【請求項６】
請求項１に記載の装置において、
前記メモリは少なくとも１つのレジスタを備え、前記選択的対話型ユーザ操作によってマルチメディアプレイヤアプリケーションがマルチメディアナビゲータプログラムに動作可能に関連付けられた少なくとも１つのレジスタにデータを書き込み、前記マルチメディアコンテンツ内に定義された少なくとも１つのプログラムが前記少なくとも１つのレジスタを読み取り可能なことを特徴とする装置。
【請求項７】
請求項６に記載の装置において、
前記データはコードを含み、前記少なくとも１つのプログラムが残りのマルチメディアコンテンツの少なくとも一部にアクセスできるようにすることによって前記コードに応答することを特徴とする装置。
【請求項８】
請求項６に記載の装置において、
前記マルチメディアコンテンツはデジタル多用途ディスク（ＤＶＤ）フォーマットのコンテンツを含むことを特徴とする装置。
【請求項９】
請求項８に記載の装置において、
前記データは前記ＤＶＤフォーマットのコンテンツに関連付けられた固有識別子を含むことを特徴とする装置。
【請求項１０】
請求項９に記載の装置において、
前記固有識別子はタイトルと開始時間と終了時間とを含むことを特徴とする装置。
【請求項１１】
請求項７に記載の装置において、
前記マルチメディアプレイヤアプリケーションは、前記マルチメディアナビゲータプログラムに動作可能に関連付けられた少なくとも１つのアプリケーションプログラミングインタフェース（ＡＰＩ）を介して前記データを前記少なくとも１つのレジスタに書き込むことを特徴とする装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はコンピュータおよびそれに類似した装置に関し、より詳細には、汎用ナビゲータプログラムおよびそれによって露呈するアプリケーションプログラミングインタフェース（ＡＰＩ）に関連する改良された方法および機構に関する。
【０００２】
【従来の技術】
本特許出願は、同時係属出願の米国特許第０９/７２１，４０２号（代理人整理番号ＭＳ１−７０３ＵＳ，ＭＳ１−７０６ＵＳ，ＭＳ１−７０７ＵＳ，ＭＳ１−７０８ＵＳ，およびＭＳ１−６８８ＵＳ）に関連する。
【０００３】
デジタル多用途ディスク（ＤＶＤ）プレイヤは、ＤＶＤ仕様で規定された３個の論理ユニット（ｌｏｇｏｃａ ｌｕｎｉｔｓ）からなる。第１の論理ユニットは、ユーザにインタフェースを提示し、第２の論理ユニットにユーザコマンドを取り次ぐＤＶＤプレイヤアプリケーションである。第２の論理ユニットはＤＶＤ上の情報の読取りと解釈を行い、ユーザコマンドに基づいてビデオおよびオーディオのどのセグメントを処理するかを制御するＤＶＤナビゲータである。第３の論理ユニットは、ＤＶＤから読み取ったデータを分解し、それに対応するオーディオストリーム、ビデオストリーム、およびサブピクチャストリームを、適宜１つまたは複数のレンダリング機構に提示するＤＶＤプレゼンテーション層である。
【０００４】
これらの論理ユニットは、ハードウェアまたはソフトウェアあるいはその両方で実施することができる。例えば、特定の実施態様では、ＤＶＤプレイヤはユーザに対して表示されるグラフィカルユーザインタフェース（ＧＵＩ）を介して組み込まれ、ユーザはそれを介して、ポインティング選択入力装置、例えばマウスを使用してＤＶＤの再生などを選択的に制御することができる。これは通常、システム開発者にとってはかなり単純な作業であり、容易にカスタマイズすることができる。
【０００５】
これに対して、ＤＶＤナビゲータの実施は、より複雑な作業になりがちである。これは、ＤＶＤ情報をプレゼンテーションなどに組み込もうとするアプリケーションの場合に特に言える。この場合、各開発者主体は、そのＤＶＤの読取りと解釈を行ってＤＶＤプレゼンテーション層のデコーダ機構とインタフェースする機構を設けることが必要になる。さらに、ＤＶＤプレゼンテーション層のデコーダ機構はサードパーティ製品となることが多く、ナビゲータは異なるデコーダ機構を有する多数とインタフェースしなければならないため、ＤＶＤナビゲータの作成作業はさらに困難になる。
【０００６】
したがって、プレイヤアプリケーションがＤＶＤナビゲータプログラムを制御するのに使用することができ、強力で、しかも簡略化された一貫性のあるインタフェースが必要である。
【０００７】
【発明が解決しようとする課題】
マイクロソフトコーポレーションは、アプリケーション開発者が負う可能性があるこれらの負担を認識し、同社のオペレーティングシステムとユーザの環境とをさらに強化しようとして、汎用ナビゲータ構成要素を開発した。この汎用ナビゲータ構成要素は、標準仕様準拠ＤＶＤナビゲータをＷｉｎｄｏｗｓ（登録商標）の一部として備え、アプリケーション開発者がそのような反復的で困難になる可能性のある作業を回避しやすくする。この汎用ナビゲータ構成要素は、組み合わさって強力かつ簡略化された一貫性のあるインタフェースを形成する２つのアプリケーションプログラミングインタフェース（ＡＰＩ）を公開し、プレイヤアプリケーションはそれを使用してＤＶＤナビゲータを制御することができる。これらのＡＰＩは、さらに、基礎をなすＤＶＤナビゲータの柔軟性と有用性を促進するように設計されている。
【０００８】
【課題を解決するための手段】
本発明の特定の態様によると、汎用ナビゲータ構成要素のパフォーマンスをさらに拡張する強化機能が開発された。ここで重要なのは、汎用ナビゲータプログラムと共に使用するための改良されたＡＰＩが必要であることである。本発明では、ナビゲータプログラムは、プレイヤアプリケーションとよりよく同期するように強化され、それによってプレイヤアプリケーションのためのより優れた制御機構と、限定／親制御コンテンツ表示の改良型強制機能と、コンテンツソースの固有識別子の生成および割当てと、再生の開始および停止用の改良型ユーザおよびプレイヤアプリケーション環境を提供する。
【０００９】
【発明の実施の形態】
本発明の様々な方法および装置は、添付図面と共に以下の詳細な説明を参照すればよりよく理解できよう。
【００１０】
以下の方法および装置の例では、ＤＶＤプレイヤアプリケーションに対して開示されたＡＰＩを有する汎用ＤＶＤナビゲータに関連付けられた特定の拡張機能および機構について説明する。これらをＤＶＤナビゲータおよびＤＶＤ２  ＡＰＩと呼ぶ。以下の説明の大部分では、Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムを稼働させるＰＣを対象とするが、これらの様々な方法および装置は、他のオペレーティングシステム、装置などにも明らかに適用可能であることに留意されたい。さらに、ＤＶＤという用語を使用するが、これは他の媒体フォーマットを除外することを意味しない。したがって、ＤＶＤコンテンツ自体は、ハードドライブ、コンパクトディスクからでも、またネットワークなどを介することでも供給することができる。
【００１１】
後述するように、ＤＶＤナビゲータまたはＤＶＤ２  ＡＰＩあるいはその両方によって、プレイヤアプリケーションはＤＶＤコンテンツの再生を対話式に制御することができる。ＤＶＤ２  ＡＰＩは２つのインタフェースからなる。第１のインタフェースは「ＩＤｖｄＩｎｆｏ２」と呼ばれる。第２のインタフェースは、「ＩＤｖｄＣｏｎｔｒｏｌ２」と呼ばれる。プレイヤアプリケーションは、ＩＤｖｄＩｎｆｏ２インタフェースを使用してＤＶＤナビゲータの現在の状態を問い合わせることができ、ＩＤｖｄＣｏｎｔｒｏｌ２インタフェースを使用して再生をより効果的に制御したり、ＤＶＤナビゲータの状態を変更したりできる。
【００１２】
ＤＶＤ２  ＡＰＩは、いくつかの独自で新規な特徴を備える。例えば、リアルタイム再生用のスレッドベースの同期方法を備え、対話度を決定するための再生制御機構を備え、プレイヤアプリケーションとディスクプログラム間のコミュニケーション機構を設け、時間範囲の再生をサポートし、親レベルの要求を調整し、処理する機構と、コンテンツのうちの限定されたセグメントを再生する最小親レベルを決定する機構とを設け、ＤＶＤコンテンツ内の場所のブックマーク機能をさらにサポートする固有ディスク識別子アルゴリズムを備える。
【００１３】
以上を念頭に置き、図１に注目すると、ＤＶＤプレイヤ１００の一例が図示されている。プレイヤ１００は、ユーザインタフェース（Ｕ／Ｉ）１０４によってユーザに提示するように構成された少なくとも１つのプレイヤアプリケーション１０２を含む。ユーザは、Ｕ／Ｉ１０４を介してプレイヤアプリケーション１０２に、ＤＶＤコンテンツ１１０の再生に関して指示することができる。
【００１４】
図のように、プレイヤアプリケーション１０２は、それぞれユーザ要求を伝えるためと、フィードバック情報を受け取るために、ＤＶＤ２ＡＰＩ  １０８ａおよび１０８ｂを備える。ＤＶＤ２ＡＰＩ  １０８ａ〜ｂは、ナビゲータ１０６内の機能へのアクセスを可能にする。ナビゲータ１０６は、ＤＶＤコンテンツ１１０と対話し、ＤＶＤコンテンツ１１０は、媒体情報のほかにプログラム１１２を含む。プログラム１１２は、コンテンツの他の部分に関連付けられたメニュー、ジャンプなどを定義する。ナビゲータ１０６は、再生プロセスに関連付けられた状態１１４を含む。ここでは、状態１１４には、例えば現行のユーザ操作（ＵＯＰ）（例えば）再生、停止、ポーズ、反転、早送り、スローモーション、アングルなど）が、ＤＶＤコンテンツ内の現在の場所（例えば区分（ｃｈａｐｔｅｒ）、時間、フレーム）および、最近のジャンプ／ＵＯＰを記録することができるようなその他の特定のレジスタと共に格納される。
【００１５】
ナビゲータ１０６の出力には、エンコード（ｅｎｃｏｄｅｄ）ビデオストリーム、エンコードオーディオストリーム、およびサブピクチャストリームが適宜含まれる。これらの出力はデコーダ１１６に入力される。デコーダ１１１６は、エンコードデータをデコード（暗号の復号および圧縮解除）し、それに対応するストリームを適切なビデオレンダリング機構１１８またはオーディオレンダリング機構１２０に出力する。レンダリング機構１１８は、例えばビデオモニタを介して、ビデオ情報をユーザに対して表示させる。レンダリング機構１２０は、例えば１つまたは複数のスピーカを通して聴取者のためにオーディオ情報を再生する。
【００１６】
次に図２に注目すると、図１の装置と共に使用するのに適したコンピューティングシステム２００の例を示すブロック図が示されている。
【００１７】
この例では、コンピューティングシステム２００はパーソナルコンピュータ（ＰＣ）の形態をとるが、他の例では、コンピュータシステムは専用サーバ、特殊目的装置、家電機器、ハンドヘルドコンピューティング装置、携帯電話装置、ページャ装置などの形態を採ることもできる。
【００１８】
図のように、コンピューティングシステム２００は、処理装置（ＰＲＯＣＥＳＳＩＮＧ  ＵＮＩＴ）２２１と、システムメモリ２２２と、システムバス２２３とを含む。システムバス２２３は、システムメモリ２２２および処理装置２２１を含む様々なシステム構成要素を結合する。システムバス２２３は、様々なバスアーキテクチャのいずれかを使用する、メモリバスやメモリコントローラ、周辺装置バス、ローカルバスを含むいくつかのタイプのバス構造のいずれであってもよい。システムメモリ２２２は、一般には読取り専用メモリ（ＲＯＭ）２２４およびランダムアクセスメモリ（ＲＡＭ）２２５を含む。始動時などにコンピューティングシステム２００内の要素間の情報の転送を支援する基本ルーティンを含む基本入出力システム２２６（ＢＩＯＳ）が、ＲＯＭ２２４にストアされている。コンピューティングシステム２００は、ハードディスク２２７（図示せず）の読み書きを行うハードディスクドライブ２２７と、取外し可能磁気ディスク２２９の読み書きを行う磁気ディスクドライブ２２８と、ＣＤＲＯＭやその他の光媒体などの取外し可能光ディスク２３１の読み書きを行う光ディスクドライブ２３０も含む。ハードディスクドライブ２２７、磁気ディスクドライブ２２８、および光ディスクドライブ２３０は、それぞれハードディスクドライブインタフェース２３２、磁気ディスクドライブインタフェース２３３、および光ドライブインタフェース２３４によってシステムバス２２３に接続されている。これらのドライブとそれに付随するコンピュータ可読媒体は、コンピュータシステム２００のためのコンピュータ可読命令、データ構造、コンピュータプログラム、およびその他のデータ用の不揮発性ストレージとなる。
【００１９】
ハードディスク、磁気ディスク２２９、光ディスク２３１、ＲＯＭ２２４、またはＲＡＭ２２５には複数のコンピュータプログラムをストアすることができる。これには、オペレーティングシステム２３５、１つまたは複数のアプリケーションプログラム２３６、その他のプログラム２３７、およびプログラムデータ２３８が含まれる。
【００２０】
ユーザは、キーボード２４０や（マウスなどの）ポインティングデバイス２４２など様々な入力装置を介してコンピューティングシステム２００にコマンドおよび情報を入力することができる。カメラ／マイクロフォン２２５など、リアルタイムデータ２５６の取り込みまたはその他の出力を行うことができる媒体装置も、コンピューティングシステム２００への入力装置として組み込むことができる。リアルタイムデータ２５６は、適切なインタフェース２５７を介してコンピューティングシステム２００に入力することができる。インタフェース２５７は、システムバス２２３に接続することができ、それによってＲＡＭ２２５または、その他のデータストレージ装置のうちの１つにストアしたり、その他の処理をすることができる。
【００２１】
図のように、モニタ２４７または他のタイプの表示装置も、ビデオアダプタ２４８などのインタフェースを介してシステムバス２２３に接続される。モニタのほかに、コンピューティングシステム２００は、スピーカ、プリンタなど他の周辺出力装置（図示せず）も含めることができる。
【００２２】
コンピューティングシステム２００は、リモートコンピュータ２４９など１つまたは複数のリモートコンピュータへの論理接続（ｌｏｇｉｃａｌ ｃｏｎｎｅｃｔｉｏｎｓ）を使用して、ネットワーク環境で動作することもできる。リモートコンピュータ２４９は、他のパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア装置、またはその他の共通ネットワークノードとすることができ、図２にはメモリストレージ装置２５０しか図示されていないが、一般には、コンピューティングシステム２００に関して前述した要素の多くまたは全部を含む。
【００２３】
図２に示す論理接続には、ローカルエリアネットワーク（ＬＡＮ）２５１とワイドエリアネットワーク（ＷＡＮ）２５２が含まれる。このようなネットワーク環境は、オフィス、企業内ネットワーク、イントラネット、およびインターネットで一般的なものである。
【００２４】
ＬＡＮネットワーク環境で使用する場合、コンピューティングシステム２００は、ネットワークインタフェースまたはアダプタ２５３を介してローカルネットワーク２５１に接続される。ＷＡＮネットワーク環境で使用する場合、コンピューティングシステム２００は、一般に、ワイドエリアネットワーク２５２を介した通信を確立するモデム２５４またはその他の手段を含む。モデム２５４は、内蔵または外付けとすることができ、シリアルポートインタフェース２４６を介してシステムバス２２３に接続される。
【００２５】
ネットワーク環境では、コンピューティングシステム２００について示したコンピュータプログラムまたはその一部を、リモートメモリストレージ装置にストアすることができる。図のネットワーク接続は例示であり、コンピュータ間で通信リンクを確立する他の手段も使用可能なことがわかるであろう。
【００２６】
ＤＶＤ２ＡＰＩ１０８ａ〜ｂは、アプリケーションの作成を簡略化し、機能を追加し、ＤＶＤプレイヤアプリケーション開発に共通する多くの困難な同期問題を解決する。基本的には、共通のＤＶＤＡＰＩは、スタンドアロンＤＶＤプレイヤアプリケーションとしてのみ機能する、メーカ独自の単一使用の融通性のないＤＶＤ製品の開発を思いとどまらせる効果がある。また、様々なアプリケーション（プレゼンテーションプログラム、ＤＶＤプレイヤ、ゲーム、対話型学習プログラムなど）が、ユーザのシステムにどのＤＶＤデコーダまたはＤＶＤハードウェアサポートがあるかを知らなくても、ＤＶＤサポートを付加することができるようにする。従来、カスタムＤＶＤ製品は、ハードウェア依存度が強く、ユーザにとってはアップグレードの選択肢が限られるという傾向がある。
【００２７】
以下で詳述するように、ＤＶＤ２ＡＰＩ１０８ａ〜ｂは、アプリケーションが、ＤＶＤナビゲータ１０６に対して出した要求の完了状況（ｃｏｍｐｌｅｔｉｏｎ ｓｔａｔｕｓ）を知るための、柔軟性のある同期機構を付加する。この新しいコマンド完了通知機能によって、アプリケーションは他のタスクを並行して実行することができるとともに、前の要求の状況（ｓｔａｔｕｓ）を知ることができる。従来のＤＶＤＡＰＩは、要求が完了するまでアプリケーションが遮断されるか、またはアプリケーションに対してはどのような通知も送られないことを前提としていたが、アプリケーションは同期オブジェクトを受け取ることを選択できるようになり、それを使用して、完了イベントを待ったり、完了イベントに関する通知を受けたりすることができるようになる。
【００２８】
この同期機構は、要求が成功したか否かを示す要求の状況を返したり、要求の失敗の理由（エラーコード）も返す。従来のＤＶＤＡＰＩは、要求を成功裏に実行するように見えるが、ＤＶＤナビゲータ１０６が実際にその処理を開始したときに状態が変化していたために、後で失敗することになる場合がある。その時点で、そのエラー標識をプレイヤアプリケーション１０２に伝える方法がなかった。新しい機構は、ディスクのプログラム１１２またはその後のユーザアクションによって取り消されたり無効にされた要求もすべて、プレイヤアプリケーション１０２に通知する。
【００２９】
現在のＤＶＤＡＰＩは、コマンドが現行の表示とどのように対話するかを指示する事前定義された動作を使用する。プレイヤアプリケーションが新しい要求を出すと、プレイヤアプリケーションは、再生中のコンテンツ（ビデオまたはオーディオ）を強制排除し、取り消す。あるいは、ＡＰＩセマンティクスが、現行のプレゼンテーションが完了してから新しいコンテンツが提示されるように指示し、それによってユーザは他のアクションを要求することができるまで強制的に待たされることになる。ＤＶＤプレイヤやゲームなどの対話型アプリケーションは、前者の動作（即時作用）を必要とするが、スライドショーなど他のアプリケーションは、後者の動作（現行プレゼンテーションの完了）を必要とすることがある。この２つの選択肢は相互に排他的であるため、事前定義されたＡＰＩのセマンティクスでは両方に対応することができない。ＤＶＤ２ＡＰＩ１０８ａ〜ｂでは、プレイヤアプリケーション１０２はフラグを介して所望の動作を指示することができ、同期機構とどのように対話するかも指示することができる。
【００３０】
ＤＶＤナビゲータ１０６は、（１組のメモリレジスタ１２４（図９参照）の形で）実行状態１１４を使用する仮想ＣＰＵをシミュレートするように構成される。従来のＤＶＤＡＰＩでは、アプリケーションはレジスタの内容を読み取ることができた。ＤＶＤ２ＡＰＩ１０８ａ〜ｂでは、プレイヤアプリケーション１０２はメモリレジスタの内容を変更することもできる。読取り書込み組合せ機能によって、プレイヤアプリケーション１０２は、図９に示すようにプログラム１１２と本質的に「コミュニケーション」することができる。
【００３１】
この読取り書込み方法は、同期化にも使用可能なように機能する。例えば、読取り／書込み機能によって、プレイヤアプリケーション１０２は、ＤＶＤコンテンツ１１０の全部または一部に対する「制御されたロック解除」または限定的アクセスを実現することができる。制御されたロック解除を使用して、ユーザは、プレイヤアプリケーション１０２が特定のメモリレジスタを設定するまで、ディスクの一部を見られないように制限することができる。プレイヤアプリケーション１０２は、この情報を、コンテンツの作成者、ユーザ、他のプログラム、ウェブサイトなどから受け取ることができる。例えば、図１２に、プレイヤアプリケーション１０２によってレジスタ１２４に書き込まれ、プログラム１１２によって読み取られるコードの使用を図示する。コードが正しければ、ＤＶＤコンテンツ１１０の一部１３０を再生することができる。
【００３２】
特定の実施態様では、ＤＶＤ２ＡＰＩ１０８ａ〜ｂには、ＤＶＤ仕様補遺（Ａｎｎｅｘ）Ｊで示唆されている、行われ得るユーザ操作のための簡略化されたネーミング方式が含まれる。このＤＶＤ２ＡＰＩは、ＤＶＤ専門語をあまり使わず、より直観的なネーミング方式を特徴とする。ＤＶＤ仕様で提案されているユーザ操作名は、不明瞭であり、アプリケーションプログラムが用法を誤ったり十分に利用できなかったりする可能性がある。今度の名前は、抽象的な標識ではなく、その用法を連想させるものになる。また、時間コードも、わかりにくいＢＣＤコーディングではなく単純な整数形式で返される。
【００３３】
従来のＤＶＤＡＰＩには、分岐が常に失敗することを示すエラーイベントをＤＶＤナビゲータが送るようにすることによって最小親レベル分岐を正しく処理することができないものがあった（図１０参照）。その場合プレイヤアプリケーションは、親レベルを高くして、そのムービーを最初から再開しなければならなかった。分岐が失敗した場合、プレイヤアプリケーションは、再生を停止してＳＴＯＰドメインに入り、親レベルを変更しなければならなくなる。継続するにはムービーを再開するしかない。
【００３４】
これに対して、ＤＶＤ２ＡＰＩ１０８ａ〜ｂは、ナビゲータ１０６を一時停止させ、ナビゲータ１０６が継続する前にプレイヤアプリケーション１０２に親レベル引上げ要求に応答させる。この引上げ要求が認められた場合、ユーザがムービーを最初から開始させなくても再生が続けられる。ＤＶＤ仕様では、ナビゲータは、要求が成功したか失敗したかを知るまで一時停止しなければならないと規定しているに過ぎない。ＤＶＤ仕様には、このタスクを行う機構が記載されておらず、ナビゲーターは「プレイヤに組み込まれたテンポラリ親レベル変更機能を呼び出す」（４．６．４．１  Ｖ１４−１９７）と提言している。
【００３５】
また、ＤＶＤ仕様では、ユーザが多セグメント親レベル分岐（例えば図１１参照）を再生することができるようにする機構が記載されていない。したがって、従来のＤＶＤＡＰＩは、現行のユーザレベルで分岐が許されていない場合、ユーザが多セグメント（または多分岐）親レベル分岐を再生することができるようにする機構を備えていなかった。従来は、ナビゲータは、現行の親レベルで使用可能な分岐がないために再生が停止したことをアプリケーションに通知するに過ぎなかった。
【００３６】
これに対して、ナビゲータ１０６およびＤＶＤ２ＡＰＩ１０８ａ〜ｂは、そのブロックを再生するのに必要なミニマムレベルを計算し、その値を再生停止通知と共に返す。するとアプリケーションは、ＤＶＤコンテンツ１１０の再生を続けるのに必要な親レベルをユーザに通知することができる。したがって、ユーザは、必要なレベルを試行錯誤によって推測する必要がなくなり、試行のたびにムービーを再開する必要がない。
【００３７】
さらに、ＤＶＤ２ＡＰＩ１８０ａ〜ｂは、ＤＶＤ補遺（Ａｎｎｅｘ）Ｊ仕様および従来のＤＶＤＡＰＩの機能を拡張する。ＤＶＤ補遺Ｊ仕様は、行うアクションを規定しているに過ぎない。プレイヤアプリケーション１０２がディスクまたはＤＶＤナビゲータの状態１１４に関する情報をどのようにして見つけるかは規定していない。本発明では、新しいディスクおよびナビゲーション状態問合わせ機能を設ける。
【００３８】
従来のＤＶＤＡＰＩとは異なり、ＤＶＤ２ＡＰＩ１０８ａ〜ｂは、アプリケーション作成者が（例えばＡＰＩによって返されたデータの記述が不完全のために）使用するＤＶＤ仕様の準備済みコピーを予め持っている必要がない。テキスト情報、タイトル属性、オーディオ属性、およびサブピクチャ属性を入手するメソッドによって返されるデータが文書化され、それによってアプリケーション開発者は、必要な情報をこの新規なＡＰＩとそれに付随する文書から入手することができる。
【００３９】
また、ＤＶＤ２ＡＰＩ１０８ａ〜ｂによって、アプリケーションは、現行のタイトル索引だけでなく、任意のタイトル索引の属性を問い合わせることができる。ＤＶＤＡＰＩ１０８ａ〜ｂは、オーディオストリームのカラオケ情報も返し、それによってインテリジェントカラオケアプリケーションを実現することができる。ＤＶＤ２ＡＰＩ１０８ａ〜ｂは、デコーダ１１６の機能も返し、それによってアプリケーションは、ユーザに対して構成オプション（両方向のフレームステッピング、スムーズ巻戻し、早送りなど）を提示したり、ユーザインタフェースを高機能に変更したりできる。新しい制御機能も備える。例えば、ＤＶＤ２ＡＰＩ１８０ａ〜ｂによって、プレイヤアプリケーション１０２は、区分の範囲や時間の範囲の再生や、（対応するボタン（ｒｅｌａｔｉｖｅ ｂｕｔｔｏｎｓ）だけでなく）特定のメニューボタンの選択を行うことができ、ユーザはマウス配置を使用してボタンを選択することができる。また、ブックマークオブジェクトの入手／設定と、計算された現行の固有ディスクＩＤの問い合わせ機能もサポートする。
【００４０】
アプリケーションとのＤＶＤ２ＡＰＩ１８０ａ〜ｂおよびそれに付随するナビゲータ１０６の同期機構をよりよく理解できるように、以下では、様々な動作モードの例を考察し、利点と欠点をいくつか指摘する。基本的には、４つの動作モードとその変形とがある。最初の４つのモードを図３から図６に示す。これらの各モードは、本発明による様々な方法および装置によってサポートすることができる。
【００４１】
「ドントケア」モードまたはモデルを図３に示す。ここでは、プレイヤアプリケーション１０２が、結果がある場合にその結果を気にしたり、要求の完了時点を気にしたりせずに、ナビゲータ１０６に要求を送る。一例としては、ジャンプ要求、メニュー表示要求などが考えられる。この場合は、プレイヤアプリケーションは、基本的に、要求した動作が完了したものとみなす。
【００４２】
図４に、イベントモードまたはモデルが示されている。ここでは、（要求が完了したときに）ナビゲータによってジェネリックイベント（ｇｅｎｅｒｉｃ ｉｖｅｎｔ）が送られるとプレイヤアプリケーション１０２に通知される。このモデルの１つの欠点は、プレイヤアプリケーション１０２が複数の要求を行っている可能性があり、それらのイベント間の区別がつかなくなることである。
【００４３】
図５に改善策を示す。ここでは、イベントがプレイヤアプリケーション１０２に通知するようにするのではなく、ナビゲータ１０６がオブジェクトを生成し、それをプレイヤアプリケーション１０２が使用して要求の状況を追跡することができる。これにより、プレイヤアプリケーション１０２は即時追跡を行うことができるようになる。
【００４４】
他の実施態様では、図６に示すように、ナビゲータ１０６は、追跡に使用可能なオブジェクトを生成し、後続のイベントも生成することができる。このようにして、プレイヤアプリケーション１０２は、オブジェクトを使用して各イベントを区別することができる。したがって、このモデルは複数インスタンス追跡をサポートする。
【００４５】
これらの様々なモデルとＤＶＤ２ＡＰＩ１０８ａ〜ｂの詳細を説明する前に、ブロッキング専用ＡＰＩまたは非ブロッキング専用ＡＰＩの欠点について説明する。１つの変形態様を図７に示す。ここでは、プレイヤアプリケーション１０２が（当然ながらＤＶＤ２ＡＰＩ１０８ａを介して）ナビゲータ１０６に要求を送る。プレイヤアプリケーション１０２は、ナビゲータ１０６からの結果メッセージを待たなければならない。このモデルの１つの欠点は、プレイヤアプリケーション０２が待っている間、Ｕ／Ｉ１０４が「フリーズ」している可能性があることである。
【００４６】
「フリーズ」するＵ／Ｉの問題を解決する１つの方法は、図８に示すような作業プログラムを設けることである。ここでは、作業プログラムが要求を受け取り、それをナビゲータ１０６に転送し、その後、それ自体が結果メッセージを待つ。作業プログラムが結果メッセージを受け取った後は、作業プログラムがそれをプレイヤアプリケーション１０２に転送する。これによってＵ／Ｉ１０４は自由になるが、同時に動作しているいくつかの作業プログラムを管理するのは困難な場合がある。
【００４７】
これに対して、非ブロッキングＡＰＩは「ドントケア」モードと等しい。動作の状況または結果に関する直接のフィードバックはない。アプリケーションは、再生の変化（時間の変化、メニューの変化など）から状況を推測しなければならない。しかし、ディスクのコンテンツおよび構造の変動により、この手法はきわめて信頼性が低く、エラーを起こしやすい。これを念頭に置いて、以下にＤＶＤ２ＡＰＩ１０８ａ〜ｂについてさらに詳細に説明する。
【００４８】
従来のＤＶＤＡＰＩにおけるＩＤＶＤＣｏｎｔｒｏｌメソッドはすべて、アプリケーションと非同期で実行される（非ブロッキング専用モデル）。したがって、アプリケーション１０２がメソッドを呼び出すと、ナビゲータ１０６は事前検証を行ってから、直ちに結果を返す。しかし、その間に、ＤＶＤナビゲータの状態が変化している可能性があり、ＤＶＤナビゲータが実際にコマンドの実行を開始すると要求が失敗する可能性がある。
【００４９】
１つの解決策は、ＤＶＤＡＰＩのセマンティクスを変更して、すべての要求が完了するまでメソッドが返さないように保証することである。しかし、この非同期動作を維持するには、アプリケーションは、（ブロック専用モデルで前述したように）ＤＶＤＡＰＩ呼出し処理をするために別個の実行パス（例えばヘルパスレッド）を作らなければならない。マルチスレッドプログラミングモデルは、アプリケーション開発、特に単純なスクリプト可能インタフェースを常に複雑にする。
【００５０】
したがって、この問題を解決するために、ＤＶＤ２ＡＰＩ１０８ａ〜ｂは、それに関連する同期コマンドオブジェクトを作成する。このコマンドオブジェクトによって、アプリケーションは同期することができ、コマンドの状況を知ることができる。各ＡＰＩメソッドを２つの特別な引数によって拡張する。ＤＶＤ２ＡＰＩコマンドの一般形態は以下の通りである。
HRESULT IDVDControl2::Command(arguements,dwFlags,IDvdCmd**ppObj)
【００５１】
上記で、ｐｐＯｂｊｅｃｔは、アプリケーション１０２に同期ＣＯＭ（コンポーネントオブジェクトモデル）オブジェクトを返すために使用される。ｄｗＦｌａｇｓは、同期オブジェクトの動作と用法を決定するためにメソッドに渡されるフラグのセットである。これらは、使用可能な事前定義済みフラグの１ビット幅の合併である。
【００５２】
この同期オブジェクトは以下のインタフェースを有する。
0004405698.tif 000002
【００５３】
返されたオブジェクトはアプリケーションによって解放されなければならない。予めインクリメントされたＣＯＭオブジェクトを返すことによって、オブジェクトの存続期間を正しく維持することができる。アプリケーションが開始と終了の発生をシステム内の他の変化と共に待つことができるようにする２つのメソッドを組み込むことにより、このインタフェースの以下のような変形で元のインタフェースを拡張することもできる。
0004405698.tif 000003
【００５４】
初期ＤＶＤ  ＡＰＩメソッド、ＩＤｖｄＣｍｄ：：ＷａｉｔＦｏｒＳｔａｒｔ、またはＩＤｖｄＣｍｄ：：ＷａｉｔＦｏｒＥｎｄにより、またはコマンドが強制排除され、無効になったことを示すイベント標識と共に、特別な戻りコードＶＦＷ＿Ｅ＿ＤＶＤ＿ＣＭＤ＿ＣＡＮＣＥＬＬＥＤが返される。
【００５５】
コマンドオブジェクトのＣ＋＋用法のサンプルを以下に示す。
0004405698.tif 000004
【００５６】
前述のように、プレイヤアプリケーション１０２は、直接コマンドオブジェクトを使用するか、コマンドオブジェクトをまったく使用しないか、コマンド関連イベントを待機するか、またはイベントとオブジェクトの組合せを使用して、コマンドの複数のインスタンスを追跡する支援とすることによって、コマンドの開始と完了を判断することができる。
【００５７】
オブジェクトを使用する場合
コマンドにＩＤｖｄＣｍｄポインタを渡すことにより、ナビゲータは新しいＩＤｖｄＣｍｄオブジェクトを割り振り、返す。インタフェースメソッドＩＤｖｄＣｍｄ：：ＷａｉｔＦｏｒＳｔａｒｔ（）を呼び出すことによって、コマンドが開始するまでブロックし、ＩＤｖｄＣｍｄ：：ＷａｉｔＦｏｒＥｎｄ（）はコマンドが完了するまで待つ。コマンドが取り消されている場合、ナビゲータはＶＦＷ＿Ｅ＿ＣＯＭＭＡＮＤ＿ＣＡＮＣＥＬＬＥＤを返す。アプリケーションがオブジェクトを処理した後、アプリケーションはＲｅｌｅａｓｅ（）を呼び出してＣＯＭオブジェクトを解放しなければならない。ＤＶＤ  ＡＰＩに渡されるＮＵＬＬポインタにより、アプリケーションに返すべきコマンドオブジェクトがないことと、コマンドの実行を標準非同期モードで継続する必要があることが示される。
【００５８】
他の２つのメソッドＧｅｔＳｔａｒｔＨａｎｄｌｅ（）とＧｅｔＥｎｄＨａｎｄｌｅ（）は、開始イベントまたは終了イベントが発生するのを待つ間にアプリケーションが処理する他の要求（ディスク入出力、ユーザインタフェース変更、セマフォ変更、スレッドのブロック解除、他のプロセスとのコミュニケーションなど）を待つことができるようにする、システム固有の同期オブジェクトを返す。その後、アプリケーションはＷａｉｔＦｏｒＳｔａｒｔ（）またはＷａｉｔＦｏｒＥｎｄ（）メソッドを呼び出して結果を取り出す。Ｍｉｃｒｏｓｏｆｔ Ｗｉｎｄｏｗｓ（登録商標）  ＡＰＩの一例は以下の通りである。
0004405698.tif 000005
【００５９】
オブジェクトを使用しない場合
オブジェクトを管理する代わりに、アプリケーションは、単にＤＶＤ＿ＣＭＤ＿ＦＬＡＧ＿Ｂｌｏｃｋフラグをヌルオブジェクトポインタと共に指定することができる。このコマンドは、完了するかまたは取り消されるまで返らない。このＡＰＩは、同期動作をエミュレートする。例えば、
0004405698.tif 000006
【００６０】
イベントを使用する場合
ＣＶＤ＿ＣＭＤ＿ＦＬＡＧ＿ＳｅｎｄＥｖｅｎｔフラグを指定すると、ナビゲータは以下のイベントを発行する。
{EC_CVD_CMD_START,lParam1,HRESULT}
{EC_DVD_CMD_END,lParam1,HRESULT}
【００６１】
アプリケーションが１つのコマンドを同期させるだけでよい場合（またはコマンドインスタンス間に相違がない場合）、非同期オブジェクトは不要で、イベントだけが必要である。ＤＶＤ  ＡＰＩメソッドにＮＵＬＬオブジェクトポインタが渡され、イベントと共に送られるｌＰａｒａｍ１値は常に０に設定される。
イベントとオブジェクトを使用する場合
【００６２】
オブジェクトとＤＶＤ＿ＣＭＤ＿ＦＬＡＧ＿ＳｅｎｄＥｖｅｎｔｓフラグの両方を指定することによって、アプリケーションは異なるコマンドを追跡することができる。ＤＶＤ２  ＡＰＩ呼出しは、アプリケーションが後で参照するために使用することができるオブジェクトを返す。イベント通知が送られると、ＤＶＤ２ＡＰＩは、アプリケーションがＩＤｖｄＣｍｄオブジェクトにマップし戻すことができる各イベントのための固有識別子（すなわち「クッキー」）ｌＰａｒａｍ１を生成する。このクッキー手法により、アプリケーションがイベントを逸した場合にメモリリークしないように保証すると共に、ＤＶＤナビゲータがオブジェクトの妥当性を検証することができるようにする。
【００６３】
ＤＶＤ２ＡＰＩメソッドＩＤｖｄＩｎｆｏ２：：ＧｅｔＣｍｄＦｒｏｍＥｖｅｎｔ（ｌＰａｒａｍ１）は、クッキーをコマンドオブジェクトポインタにマップする。アプリケーションは、これらの各イベントの処理を終えた後に、返されたポインタに対してＣＯＭ「Ｒｅｌｅａｓｅ」メソッドを呼び出さなければならない。アプリケーションが（通常はＥＮＤイベントを受け取った後）メッセージを完了すると、保管したグローバルコマンドポインタに対して「Ｒｅｌｅａｓｅ」メソッドを呼び出されなければならない。
【００６４】
ブロック／非ブロックの例
ＩＤｖｄＣｏｎｔｒｏｌ２インタフェースを使用してどのようにして同期を実現することができるかを、以下の例で示す。
【００６５】
わかりやすいように、いくつかの例では、ＥＣ＿ＤＶＤ＿ＣＭＤイベントからｌＰａｒａｍ１値をＩＤｖｄＣｍｄオブジェクトにマップするために使用する、以下のユーティリティ関数を引用する。
0004405698.tif 000007
【００６６】
同期しない場合（非同期モデル）
アプリケーションは、以下のようにメソッドを呼び出してアクションを要求する。
HRESULT hres = IDvdControl2->PlayTitle(uTitle,0,NULL);
【００６７】
イベントなしの同期の場合
イベントを使用せずにコマンドが終了するのを待つ適切な方法の一例は以下の通りである。
0004405698.tif 000008
【００６８】
イベントを使用する部分同期の場合
ＩＤｖｄＣｍｄオブジェクトを管理せずに単一のイベントを同期化する場合は以下の通りである。
0004405698.tif 000009
【００６９】
イベントを使用する完全同期の場合
イベントを使用してコマンドを待つ適切な方法の一例は以下の通りである。
0004405698.tif 000010
【００７０】
イベント処理関数において
0004405698.tif 000011
【００７１】
イベントおよび別個のイベントループスレッドを使用する完全同期の場合
イベントを使用してコマンドを待つ適切な方法の一例は以下の通りである。
0004405698.tif 000012
【００７２】
再生対話度制御機構の例
従来のＤＶＤＡＰＩコマンドは、コンテンツの変更時にプレイヤアプリケーション１０２が現行のコンテンツ提示を打ち切り、新しいコンテンツに切り換えることを前提としていた。改良されたＤＶＤ２ＡＰＩコマンドは、以下のフラグによってこのコマンドオブジェクト機構を拡張する。
DVD_CMD_FLAG_Flush
DVD_CMD_FLAG_StartWhenRendered
DVD_CMD_FLAG_EndAfterRendered
【００７３】
ここで、．．＿Ｆｌｕｓｈフラグは、現行のコンテンツ提示を直ちに打ち切り、それによって（前のように）新しいコンテンツの表示を開始することができるようにするよう指示する。フラグがない場合は、現行のコンテンツ提示を先に終了することを指示する。．．．＿．．Ｒｅｎｄｅｒｅｄフラグは、各コマンドの開始と終了のセマンティクスを変更する。デフォルトでは、コマンドが開始し、処理された後は終了する。この新しいフラグは、コンテンツの変更の結果が処理され、提示されると、それぞれ開始および終了が発生することを示す。
【００７４】
ディスクコミュニケーション機構の例
ＤＶＤ２ＡＰＩ１０８ａ〜ｂは、プレイヤアプリケーションがＤＶＤナビゲータの汎用レジスタ（ＧＰＲＭ）の読取りだけでなく、以下を使用してＧＰＲＭの設定も行えるようにする。
IDvdInfo2::GetAIIGPRMs(WORD pwRegisterArray[16])
IDvdControl2::SetGPRM(ULONG ulindex,WORD wValue, DWORD dwFlags,IDvdCmd**ppCmd)
【００７５】
この読取り／書込み組合せ機能によって、ＤＶＤアプリケーションはディスク上のプログラムと「コミュニケーション」することができ、コンテンツの「制御されたロック解除」または限定アクセスを実現することができる。アプリケーションは、ＧｅｔＡｌＧＰＲＭｓを使用して現在の状態を読み取り、ＳｅｔＧＰＲＭを使用して特定のレジスタを設定することができる。
【００７６】
このＳｅｔＧＰＲＭメソッドを使用して、アプリケーションとＤＶＤナビゲータの仮想ＣＰＵとを同期させることもできる。ＳｅｔＧＰＲＭメソッドは、ＤＶＤナビゲータがユーザコマンドを処理することができる期間（プレゼンテーションおよび静止段階  ３．３．６．１  Ｖ１３〜２８）のみ実行される。ナビゲーションコマンドの実行は、アトミックとみなされる。したがって、ＧＰＲＭの設定は、これらの段階が発生するまで延期される。アプリケーションは、このコマンドオブジェクトとイベント機構を使用して協調（ｃｏｏｒｄｉｎａｔｉｏｎ）を保証することができる。コマンドオブジェクトのイベント機構は、イベント通知（ドメイン変更またはシステムレジスタの変更）によって逐次化（ｓｅｒｉａｌｉｚｅｄ）される。アプリケーションは、ＳｅｔＧＰＲＭを呼び出し、コマンド完了イベントを受け取るまで待つことができ、コマンド完了イベントを受け取った後、ＤＶＤナビゲータの状態の変化（おそらくはドメイン変更）を示すイベントを待つことができる。
【００７７】
ディスクからアプリケーションへのコミュニケーションを実現するこのような方法の１つを以下の疑似コードで示す。
以下のように、ディスクがデータを送り、応答を待つ。
ディスクはＧＰＲＭ値を変更する（ディスク上ナビゲーションコマンドを使用して）。
ディスクはその状態を変更する（例えばそのドメイン変更）。
（アプリケーションが生じた）ＧＰＲＭの変更を待ってループする。
【００７８】
以下のように、アプリケーションがＧＰＲＭデータを受け取り、応答する。
状態変化を待つ（例えばディスクのドメイン変更）。
ＧＰＲＭ値を読み取る。
ＳｅｔＧＰＲＭを使用してＧＰＲＭ値を設定する。
【００７９】
アプリケーションからディスクへのコミュニケーションを実現する方法の１つを以下の疑似コードで示す。
以下のように、アプリケーションがデータを送り肯定応答を待つ。
アプリケーションがＳｅｔＧＰＲＭを使用してデータを設定する。
アプリケーションがドメイン変更を待ってから続行する。
【００８０】
以下のように、ディスクがデータを受け取り、肯定応答を返す。
ディスクがＧＰＲＭを読み取る。
ディスクがその状態を変更する（例えばそのドメインの変更）。
【００８１】
照会（Ｉｎｆｏ）インタフェースの例
ＤＶＤ仕様ではデータ取出しメソッドを提示していないが、ＤＶＤ２ＡＰＩはこの機能を備える。備えるメソッドのリストを以下に示す。
【００８２】
【外１】
0004405698.tif 000013
【００８３】
【外２】
0004405698.tif 000014
【００８４】
制御インタフェースの例
１）期間再生インタフェース
区分の範囲の再生に加えて、ＤＶＤ２ＡＰＩは以下を使用して期間の再生も可能にする。
PlayPeriodInTitleAutoStop(ULONG ulTitle,DVD_HMSF_TIMECODE* pStartTime,  DVD_HMSF_TIMECODE* pEndTime,DWORD dwFlags,IDvdCmd**ppCmd)
このメソッドによって、アプリケーション（ビデオ編集プログラムやゲームなど）は、コンテンツの任意の部分を正確に再生することができる。
【００８５】
このコマンドオブジェクト機構と組み合わせて、スライドショープレゼンテーション、ビデオゲームのインタルード、キオスクのようなアプリケーションを、単一のＤＶＤ２ＡＰＩコマンドを使用して実現することができる。
【００８６】
２）デフォルト言語インタフェース
SelectDefaultAudioLanguage(LCIDLanguage,DVD_AUDIO_LANG_EXTaudioExtension)
SelectDefaultSubpictureLanguage(LCIDLanguage,DVD_SUBPICTURE_LANG_EXTsubpictureExtension)
これらのメソッドによって、アプリケーションは（ユーザから）、ＤＶＤ再生のためのデフォルト言語選択項目を設定することができる。
【００８７】
３）ボタン索引の選択
アプリケーションは、メソッドＳｅｌｅｃｔＢｕｔｔｏｎ（ＵＬＯＮＧ  ｕｌＢｕｔｔｏｎ）によってメニューのナビゲーションを自動化することができる。
【００８８】
４）ブックマークＡＰＩ
アプリケーションは、ＤＶＤ状態全体の保存と復元を行うことができる（ブックマーク特許参照）
GetState(IDvdState**pStateData)
SetState(IDvdState*pState,DWORDdwFlags,[out]IDvdCmd*ppCmd)
【００８９】
５）その他
AcceptParentalLevelChange(BOOL bAccept) −後述の「最小親レベル分岐」の項を参照。
SetGPRM(ULONG ulindex,WORD wValue,DWORD dwFlags,[out]IDvdCmd**ppCmd)-  SetOption(DVD_OPTION_FLAG flag、BOOL bEnable) - 拡張可能オプション設定機構
【００９０】
最小親レベル分岐を調整する機構
ＤＶＤ仕様（第４．６．４．１項  ｐＶ１４〜１９７）によると、ＤＶＤナビゲータは、ＳｅｔＴｍｐＰＭＬ（テンポラリ親管理レベル設定）コマンドに遭遇すると、アプリケーションに対して許可を要求して（「プレイヤに組み込まれたテンポラリ親レベル変更機能を呼び出す」）、現行レベルを一時的に上げる必要がある。この親レベル変更が許可された場合、ナビゲータは親レベルを上げて、コンテンツのうちの限定された部分に分岐する。許可されない場合は次のコマンドの処理を続ける。
【００９１】
従来のＤＶＤＡＰＩのセマンティクスでは、ＤＶＤナビゲータは、ｓｅｔＴｍｐＰＭＬ命令を実行すると、アプリケーションにＰＡＲＥＮＴＡＬ＿ＬＥＶＥＬ＿ＴＯＯ＿ＬＯＷイベントを送る。ＤＶＤナビゲータは、親レベル変更が失敗したかのように直ちに次のコマンドの実行を続ける。アプリケーションはこのイベントを受け取り、再生を停止し、親レベル変更のためのユーザインタフェースを表示し、その後、ムービーを最初から再開する。ＤＶＤ仕様によると、ナビゲータが親レベルを変更することができるのは、ＳＴＯＰドメインにあるときだけである。その結果、ナビゲータは変更時に一時休止しないため、再生を停止しなければならない。
【００９２】
ＤＶＤ２ＡＰＩ１０８ａ〜ｂでは、例えば以下のようなシーケンスが行われる。アプリケーションは、以下のメソッドを呼び出すことによって、ＡＰＩに親レベル変更機能が使用可能なことを通知する。
IDVDControl2::SetOption(DVD_NotifyParentalLevelChange,TRUE)
【００９３】
ＤＶＤナビゲータは、ＳｅｔＴｍｐＰＭＬ命令に遭遇すると、アプリケーションにＰＡＲＥＮＴＡＬ＿ＬＥＢＥＬ＿ＴＯＯ＿ＬＯＷイベントを送る。アプリケーションは、ユーザに親レベルを上げさせる何らかのユーザインタフェースを表示することが予想される。ＤＶＤナビゲータは、アプリケーションがＩＤＶＤＣｏｎｔｒｏｌ２：：ＡｃｃｅｐｔＰａｒｅｎｔａｌＬｅｖｅｌＣｈａｎｇｅ（）をＴＲＵＥまたはＦＡＬＳＥと共に呼び出すことで応答するまでブロックし、その応答後、再生を停止する必要なしにそれに応じた処理を続行する。
【００９４】
多セグメント親レベル分岐の再生を支援する機構
ＤＶＤ仕様（第４．１．４．１項  Ｖ１４〜２２）には、現行の親レベルに基づいて異なるプログラム連鎖（通常はコンテンツのうちの可能な異なるセグメント）を選択する方式が記載されている。例えば、ビデオ中の特定の箇所で、１つの場面の異なるバージョンを使用することができ、親レベルに基づいてナビゲータが自動的に選択する。（例えばＰＧ、Ｒ指定、子供向けなどのセグメントなど）。
【００９５】
各タイトルごとに、ＰＴＬ＿ＭＡＩテーブルによって現行の親レベルが１６ビットのマスクにマップされる。再生中、ＤＶＤナビゲータがＰＴＬ＿ＭＡＩテーブルから現行の親ビットマスクを入手する。この親ビットマスクは、ナビゲータが親ブロック（各プログラム連鎖が排他的親ビットマスクを有するプログラム連鎖の集まり）に遭遇したときに使用される。ナビゲータは、ＶＴＳ＿ＰＧＣＩ＿ＳＲＰ（第４．２．３項  Ｖ１４〜６２）内の各ＰＴＬＩＤ＿ＦＬＤで、現行の親ビットマスクと共通ビットを共有するビットマスクを持つプログラム連鎖を探索する。
【００９６】
現行のビットマスクと部分的に一致するプログラム連鎖がない場合、従来版のＤＶＤナビゲータは、再生を停止し、アプリケーションにＤＶＤ＿ＥＲＲＯＲ＿ＬｏｗＰａｒｅｎｔａｌＬｅｖｅｌイベントを送ることになる。
【００９７】
ユーザを支援するために、ＤＶＤ２ＡＰＩ１０８ａ〜ｂの特定の実施例は、以下のアルゴリズムを使用して、ユーザに続行させる必要最低限の親レベルを計算する。
0004405698.tif 000015
【００９８】
索引ｉは、ＤＶＤ＿ＥＲＲＯＲ＿ＬｏｗＰａｒｅｎｔａｌＬｅｖｅｌイベントと共に返される。アプリケーション１０２は、この索引を使用して、ユーザに可能な親レベル設定値を示唆することができる。
【００９９】
ブックマーク
ＤＶＤナビゲータ１０６は、プレイヤアプリケーション１０２がＤＶＤ再生の現在の状態１１４をエンコードし、永続的データブロックを含む抽象オブジェクト（ブックマーク１５０と呼ぶ）にストアすることができるように構成される。図１３に、ブックマーク機能の例を示す。
【０１００】
用法をさらに抽象化し、簡略化するために、ＤＶＤ２ＡＰＩ１０８ａ〜ｂは、ブックマークに含まれるこの状態情報の保存、リストア、および照会を行うように構成される。プレイヤアプリケーション１０２は、ナビゲータ１０６を使用してブックマーク１５０内の情報を問い合わせることができ、それを後で使用するために保存することができる。プレイヤアプリケーション１０２は、ＤＶＤナビゲータ１０６に、ブックマーク内に入っているＤＶＤ再生状態１４をリストアするように指示することによって、後で再生を再開することができる。ブックマークをリストアすることによって、プレイヤアプリケーションは、ＤＶＤコンテンツ１１０について、任意の場所から、任意の数だけ再生を開始することができる。ブックマークは、短期（メモリ）ストレージまたは長期ストレージ（例えばハードドライブ）にストアすることができ、プレイヤアプリケーション１０２および／またはＰＣが遮断され、再始動された後でもリストアすることができる。ブックマークには、ＤＶＤナビゲータの状態（内部レジスタ値、再生場所、再生状態など）だけでなく、再生している現在のディスクコンテンツに関する情報とユーザの設定値も入れることができる。プレイヤアプリケーション１０２は、この付加的情報を使用して、例えば、特定のディスク（通常は再生中のディスク）について再生可能な、前に保存したものの中から適切なブックマークを判断して選択することができる。ブックマークは、ユーザ間および様々なアプリケーション間で共用することもできる。
【０１０１】
抽象データタイプのブックマーク化は、次の二つの態様らなる。１）実際のブックマーク１５０自体と、２）ブックマーク内に含まれる情報の保存、リストア、および照会のために使用されるＡＰＩ呼出しである。特定の実施例によると、ブックマーク１５０には、少なくとも以下の情報が含まれる。実質的に固有のディスク識別子１４５、表示されている現行ビデオオブジェクトユニット（ＶＯＢＵ）のアドレス（ＤＶＤ仕様の第５．１．１項）、ループカウントおよびシャッフル履歴（ＤＶＤ仕様の第３．３．３．２項）、現行ＤＶＤ再開情報（ＤＶＤ仕様第３．３．３．２項で概説）、現行ＤＶＤ汎用パラメータ（ＧＲＰＭ）値およびシステムパラメータ（ＳＰＲＭ）値（第４．６．１．１項および第４．６．１．２項）、および現行のドメインおよびフェーズ（第３．３．３項よび第３．３．６項）である。他の特定の実施態様では、ブックマークはバージョン情報および整合性情報（ｉｎｔｅｇｒｉｔｙ  ｉｎｆｏｒｍａｔｉｏｎ）も含む。ブックマーク１５０は、抽象オブジェクトとして、または記憶のためのバイナリデータブロックとしてパッケージ化することができる。
【０１０２】
このようなブックマーク手法を備えることにより、特定の実施例のＤＶＤ２ＡＰＩ１０８は、以下のメソッドをサポートする。
１．現在の場所からブックマークを作成する
Bookmark = GetBookmark()
２．ＤＶＤナビゲータにその場所をブックマークに変更させる
SetBookmark(bookmark)
３．ブックマークの対象のディスクを検索する
DiscID = GetDiscIdentifierFromBookmark(bookmark)
４．ブックマークとバイナリ表現間の変換
BinaryData(data,size) = ConvertBookmarkToBinary(bookmark)
Bookmark = ConvertBinaryToBookmark(BinaryData)
【０１０３】
現在の場所のストアまたは節電機能（すなわちコンピュータの状態を保存して復元可能な低電力状態にする機能）を実施するアプリケーション擬似コードを以下に示す。
0004405698.tif 000016
【０１０４】
節電状態から復帰すると、以下を行ってＤＶＤの再生を再開する。
0004405698.tif 000017
【０１０５】
インテリジェントブックマークを実施するアプリケーションの擬似コードの例
0004405698.tif 000018
【０１０６】
固有識別子の生成
現在のＤＶＤ仕様は、各ディスクに組込みの固有識別子（「ＤＶＤ固有識別子」）を有する。しかし、アプリケーションは、ディスク作成者がその識別子を正しく実現することを前提としなければならないが、残念ながら常にそうであるとは限らない。
【０１０７】
多くのアプリケーションは、ユーザがＤＶＤディスクを交換する場合などにＤＶＤディスクを識別するための固有タグを必要とし、再生システムは新しいディスクが入っているか否かを判断する必要がある。新しいディスクが入っている場合、再生システムは再生をリセットしなければならず、入っていない場合はユーザの視聴を中断せずに続行することができる。ディスクを区別する機能を持たない場合、常にリセットしなければならない。固有識別子１４５（図１３参照）があれば、異なるディスク（ただし異なる完全なコピー以外）を区別することができるようになる。
【０１０８】
また、固有識別子１４５は、ストアされた情報と特定のＤＶＤディスクとの互換性をアプリケーションに検証させる。アプリケーションは、キャッシュに入れられた情報を、誤ったディスクと共には正常に使用することができない。例えば、ユーザがブックマークを使用してディスク上の保存場所を思い出そうとするとき、ＤＶＤナビゲータ１０８は、ブックマークに格納された固有識別子を現在のディスクの固有識別子と比較することによって、データの互換性を確認することができる。識別子が一致した場合にのみ、再生が続けられる。
【０１０９】
固有識別子１４５により、アプリケーションは、固有識別子をデータベースの索引として使用することによってディスクに追加情報を関連付けることができる。例えば、ＤＶＤ仕様はディスク上のテキスト情報をサポートするにもかかわらず、それが使用されることはめったにない。ディスクのタイトルとコンテンツのウェブベースのデータベースがあれば、アプリケーションはディスク上の識別子を計算した後でそのデータベースをストアし、取り出すことができる。
【０１１０】
ＤＶＤディスク上の現行の組込み固有識別子は不十分である。まず初めに、識別子のサイズが比較的大きく（３２バイト）、実際に固有のものとなるように保証することはディスク作成者に依存しており、会社間で固有性（ｕｎｉｑｕｅｎｅｓｓ）が維持されるように保証するために中央主体（ｃｅｎｔｒａｌ  ｅｎｔｉｔｙ）がディスク作成者に識別子の範囲を割り当てなければならない。
【０１１１】
他の従来の「固有」識別子アルゴリズムは、多数のディスクのため固有識別子を生成しない。この場合、ＤＶＤディスクの総数が増えるにつれて、２枚のディスクに同じ識別子が割り当てられる確率が指数関数的に高くなる。予想されるＤＶＤディスク増大傾向により、多くの「固有」識別子ルーチンでは不十分になる。さらに、この種のアルゴリズムは、既知の／または実証可能なプロパティを持たないことが多い。既知のプロパティがないため、生成された識別子の有効性や適合性を示すことができない。
【０１１２】
本発明の特定の実施例によると、固有識別子１４５は、ＤＶＤのＶＩＤＥＯ＿ＴＳディレクトリに入っている様々なファイルのファイルヘッダおよびファイル内容を表す連結またはその他の方法で配列されたバイナリ表現の６４ビットＣＲＣを計算することによって生成される。この機能を、図１３および図１４に詳細に示す。
【０１１３】
ＵｎｉｑｕｅＩＤ２アルゴリズムは、識別子を以下の４ステップで生成する。ステップ１．ＶＩＤＥＯ＿ＴＳディレクトリのファイル名を収集し、アルファベット順にソートする。
ステップ２．ＣＲＣで各ファイルからファイルヘッダを計算する。
ステップ３．ＣＲＣでＶＭＧＩファイル（「ＶＩＤＥＯ＿ＴＳ＼ＶＩＤＥＯ＿ＴＳ．ＩＦＯ」）からデータを計算する。
ステップ４．ＣＲＣで最初のＶＴＳＩファイル（［ＶＩＤＥＯ＿ＴＳ＼ＶＴＳ＿ｘｘ＿Ｏ．ＩＦＯ」）からデータを計算する。
【０１１４】
この６４ビットＣＲＣを、フィールドＧＦ（２）内で既約多項式を使用して計算する。多項式の一例を以下に示す。
【０１１５】
【数１】
Ｐ64＝ｘ64+ｘ61+ｘ58+ｘ56+ｘ55+ｘ51+ｘ50+ｘ47+ｘ42+ｘ39+ｘ38+ｘ35+ｘ33+ｘ32+ｘ31+ｘ29+ｘ26+ｘ25+ｘ22+ｘ17+ｘ14+ｘ13+ｘ9+ｘ8+ｘ6+ｘ3+ｘ0
【０１１６】
この多項式は、ｘ″−１が次数６４の既約（素）因数となるような指数ｎを求めることによって得られる。
【０１１７】
特定の例では、実際のＣＲＣ値は、すべてのバイナリデータを結合して単一のブロック（ビットｂ０からｂｎ）にし、各ビットｂｉを多項式中の計数ｘｉに代入し、次に多項式Ｐ６４で割った剰余を計算することによって計算する。
【０１１８】
【数２】
0004405698.tif 000019
【０１１９】
以下に、実施例を示す。
【０１２０】
ステップ１
ＶＩＤＥＯ＿ＴＳディレクトリのファイル名を収集し、アルファベット順にソートしてリストにする。
【０１２１】
ステップ２
リスト内の各ファイル名について、以下の構造をＣＲＣに付加する（すべてのデータフィールドで最下位ビットを先にする）。
無符号６４ビット整数：dateTime（１６０１年１月１日から１００ナノ秒間隔で経過した時間）
無符号３２ビット整数：dwFileSize
BYTE bFilename「filenamelength」
BYTE bFilenameTermNull＝０
【０１２２】
ステップ３
ある場合は、ファイル「ＶＩＤＥＯ＿ＴＳ＼ＶＩＤＥＯ＿ＴＳ．ＩＦＯ」の最初の６５５３６バイトを読み取って、ＣＲＣに付加する。ＩＦＯファイルが６５５３６バイト未満の場合は、ファイル全体を付加する。
【０１２３】
ステップ４
ある場合は、ファイル「ＶＩＤＥＯ＿ＴＳ＼ＶＴＳ＿０１＿Ｏ．ＩＦＯ」の最初の６５５３６バイトを読み取って、ＣＲＣに付加する。ＩＦＯファイルが６５５３６未満の場合、ファイル全体を付加する。
【０１２４】
以上の詳細な説明では、本発明の様々な方法および構成のいくつかの好ましい実施態様を、図面に従って例示し、説明したが、本発明は開示したこれらの例示の実施態様には限定されず、特許請求の範囲に記載され、規定されている本発明の主旨から逸脱することなく多くの構成変更、修正、および代用が可能であることを理解されたい。したがって、上記で示した各参照資料は、参照によりその全体があらゆる目的のために本明細書に明示的に組み込まれる。
【図面の簡単な説明】
【図１】例示のＤＶＤプレイヤ装置を示すブロック図である。
【図２】図１のＤＶＤプレイヤ装置と共に使用するのに適合するコンピュータ環境を示すブロック図である。
【図３】ＤＶＤプレイヤアプリケーションと汎用ナビゲータプログラムとの第１の同期方式を示すブロック図である。
【図４】ＤＶＤプレイヤアプリケーションと汎用ナビゲータプログラムとの第２の同期方式を示すブロック図である。
【図５】ＤＶＤプレイヤアプリケーションと汎用ナビゲータプログラムとの第３の同期方式を示すブロック図である。
【図６】ＤＶＤプレイヤアプリケーションと汎用ナビゲータプログラムとの第４の同期方式を示すブロック図である。
【図７】ＤＶＤプレイヤアプリケーションと汎用ナビゲータプログラムと非ブロッキング方式の同期を示すブロック図である。
【図８】ＤＶＤプレイヤアプリケーションと汎用ナビゲータプログラムとのブロッキング方式の同期を示すブロック図である。
【図９】プレイヤアプリケーションと媒体コンテンツに関連するプログラム間の例示の読み書きコミュニケーション機能を示すブロック図である。
【図１０】媒体コンテンツの限定／親制御に関連付けられた二重分岐再生決定点を示す線図である。
【図１１】媒体コンテンツの限定／親制御に関連付けられた多分岐再生決定点を示す線図である。
【図１２】プレイヤアプリケーション提供コードの使用により媒体データへのアクセスを制御する例示の方法を示すブロック図である。
【図１３】例示の媒体コンテンツブックマーク機能を示すブロック図である。
【図１４】媒体ソースのための実質的に固有な識別子を生成する例示の方法を示す説明図である。
【符号の説明】
１００  ＤＶＤプレイヤ
１０２  プレイヤアプリケーション
１０４  ユーザインタフェース
１０６  ナビゲータ
１０８  ＤＶＤ２  ＡＰＩ
１１０  ＤＶＤコンテンツ
１１２  プログラム１１２
１１４  状態
１１６  デコーダ
１１８  レンダリング機構
１２０  レンダリング機構
１４５  ディスク識別子
１５０  ブックマーク
２００  コンピューティングシステム
２２１  処理装置
２２２  システムメモリ
２２３  システムバス
２２４  読取り専用メモリ
２２５  ランダムアクセスメモリ
２２７  ハードディスク
２２８  磁気ディスクドライブ
２３０  光ディスクドライブ
２３２  ハードディスクドライブインタフェース
２３３  磁気ディスクドライブインタフェース
２３４  光ドライブインタフェース
２３５  オペレーティングシステム
２３６  アプリケーションプログラム
２３７  プログラムモジュール
２３８  プログラムデータ
２４０  キーボード
２４５  ビデオアダプタ
２４６  シリアルポートインタフェース
２４７  モニタ
２４９  リモートコンピュータ
２５１  ローカルエリアネットワーク
２５２  ワイドエリアネットワーク
２５３  ネットワークアダプタ
２５４  モデム
２５５  入力機構
２５７  インタフェース
【図１】
0004405698.tif 000020
【図２】
0004405698.tif 000021
【図３】
0004405698.tif 000022
【図４】
0004405698.tif 000023
【図５】
0004405698.tif 000024
【図６】
0004405698.tif 000025
【図７】
0004405698.tif 000026
【図８】
0004405698.tif 000027
【図９】
0004405698.tif 000028
【図１０】
0004405698.tif 000029
【図１１】
0004405698.tif 000030
【図１２】
0004405698.tif 000031
【図１３】
0004405698.tif 000032
【図１４】
0004405698.tif 000033