(57)【要約】【課題】グラフィックスプロセッサによって描画される画像をディスプレイの仕様に適した画像に変換するのは難しい。【解決手段】画像変換部３５は、描画処理部３２によって所与の垂直同期周波数で描画された画像をディスプレイの仕様に適した画像に変換する。フレームメモリ４７は、画像変換部３５により変換された画像を複数のフレームバッファを切り替えながら保持する。ディスプレイコントローラ５０は、ディスプレイの垂直同期周波数にしたがっていずれかのフレームバッファを選択して画像をフレームメモリ４７からスキャンアウトする。切替命令発行部１４は、次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、画像変換部３５による画像変換処理の実行直後ではなく、ディスプレイの垂直同期タイミングに合わせて発行する。【選択図】図２
2008197394.tif 000002
【特許請求の範囲】
【請求項１】
グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を保持する第１フレームメモリと、
前記第１フレームメモリに保持された画像をディスプレイの仕様に適した画像に変換する画像変換部と、
前記画像変換部により変換された画像を複数のフレームバッファを切り替えながら保持するフレームメモリであって、前記ディスプレイの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第２フレームメモリと、
次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換部による画像変換処理の実行直後ではなく、前記ディスプレイの垂直同期タイミングに合わせて発行する切替命令発行部とを含むことを特徴とする画像変換装置。
【請求項２】
前記グラフィックスプロセッサの垂直同期周波数と前記ディスプレイの垂直同期周波数の比は、整数比ではないことを特徴とする請求項１に記載の画像変換装置。
【請求項３】
前記画像変換部による画像変換処理は、前記グラフィックスプロセッサによって描画された画像の解像度およびフレームレートの少なくとも一方を前記ディスプレイの仕様に合わせるように変換する処理を含むことを特徴とする請求項１または２に記載の画像変換装置。
【請求項４】
前記画像変換部は、前記グラフィックスプロセッサの垂直同期タイミングが前記ディスプレイの垂直同期タイミングに対してずれている割合にもとづいた合成係数で前記第１フレームメモリに保持された２枚の画像を合成することにより、前記グラフィックスプロセッサによって描画された画像のフレームレートを前記ディスプレイの仕様に合うように変換することを特徴とする請求項１から３のいずれかに記載の画像変換装置。
【請求項５】
前記画像変換部は、前記グラフィックスプロセッサによって描画された画像に対する画像変換処理の完了が見込まれる前記グラフィックスプロセッサの垂直同期タイミングがその見込みの垂直同期タイミングのすぐ後に発生する前記ディスプレイの垂直同期タイミングに対してずれている割合にもとづいた合成係数で前記第１フレームメモリに保持された２枚の画像を合成することにより、前記グラフィックスプロセッサによって描画された画像のフレームレートを前記ディスプレイの仕様に合うように変換することを特徴とする請求項１から３のいずれかに記載の画像変換装置。
【請求項６】
前記切替命令発行部は、前記見込みの垂直同期タイミングのすぐ後に発生する前記ディスプレイの垂直同期タイミングに合わせて、前記フレームバッファ切替命令を発行することを特徴とする請求項５に記載の画像変換装置。
【請求項７】
前記見込みの垂直同期タイミングにおいて、実際には前記画像変換処理が完了していない場合、それ以降の画像変換処理については、改めて前記画像変換処理の完了が見込まれる前記グラフィックスプロセッサの垂直同期タイミングが設定され、前記画像変換部は、改めて設定された見込みの垂直同期タイミングが、その見込みの垂直同期タイミングのすぐ後に発生する前記ディスプレイの垂直同期タイミングに対してずれている割合にもとづいた合成係数で前記第１フレームメモリに保持された２枚の画像を合成することを特徴とする請求項５または６に記載の画像変換装置。
【請求項８】
前記切替命令発行部は、前記フレームバッファ切替命令を、改めて設定された見込みの垂直同期タイミングのすぐ後に発生する前記ディスプレイの垂直同期タイミングに合わせて発行することを特徴とする請求項７に記載の画像変換装置。
【請求項９】
前記切替命令発行部は、前記フレームバッファ切替命令を、前記ディスプレイの垂直同期タイミングよりも所定の余裕時間だけ前に発行することを特徴とする請求項１、６および８のいずれかに記載の画像変換装置。
【請求項１０】
前記画像変換部は、前記グラフィックスプロセッサによって描画された画像のフレームレート変換のために、前記第１フレームメモリに保持された２枚の画像を所定の合成係数で合成するフレーム補間モードを備え、
前記画像変換部は、前記グラフィックスプロセッサによって描画された画像に対する画像変換処理が前記グラフィックスプロセッサの垂直同期周期内に完了する限り、前記所定の合成係数のもとで前記フレーム補間モードで動作し、前記グラフィックスプロセッサによって描画された画像に対する画像変換処理が前記グラフィックスプロセッサの垂直同期周期内に完了しない場合は、前記合成係数を前記２枚の画像の内、一方を実質的に落とすことになる値に変更した上で前記フレーム補間モードで動作することにより、前記グラフィックスプロセッサによって描画された画像のフレームレートを前記ディスプレイの仕様に合うように変換することを特徴とする請求項１から３のいずれかに記載の画像変換装置。
【請求項１１】
前記画像変換部は、前記グラフィックスプロセッサによって描画された画像のフレームレート変換のために、前記第１フレームメモリに保持された２枚の画像を所定の合成係数で合成するフレーム補間モードを備え、
前記画像変換部は、前記フレーム補間モードにおいて使用される前記合成係数の値と、前記フレーム補間モードにおいて前記２枚の画像の内、一方を落とすことと実質的に等価となる合成係数の値との中間値で新たな合成係数を定め、その新たな合成係数で前記第１フレームメモリに保持された２枚の画像を合成することにより、前記グラフィックスプロセッサによって描画された画像のフレームレートを前記ディスプレイの仕様に合うように変換することを特徴とする請求項１から３のいずれかに記載の画像変換装置。
【請求項１２】
グラフィックスプロセッサによって描画される画像をテレビジョン方式の画像に変換する装置であって、
グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を保持する第１フレームメモリと、
前記第１フレームメモリに保持された画像を出力先のテレビション方式の画像に変換する画像変換部と、
前記画像変換部により変換された画像を複数のフレームバッファを切り替えながら保持するフレームメモリであって、出力先のテレビジョンの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第２フレームメモリと、
次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換部による画像変換処理の実行直後ではなく、出力先のテレビジョンの垂直同期タイミングに合わせて発行する切替命令発行部とを含むことを特徴とする画像変換装置。
【請求項１３】
前記グラフィックスプロセッサの垂直同期周波数は、特定のテレビジョン方式の垂直同期周波数であり、前記出力先のテレビションの垂直同期周波数は、その特定のテレビジョン方式以外の垂直同期周波数であることを特徴とする請求項１２に記載の画像変換装置。
【請求項１４】
グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を第１フレームメモリに保持するステップと、
前記第１フレームメモリに保持された画像をディスプレイの仕様に適した画像に変換する画像変換処理ステップと、
切り替え可能な複数のフレームバッファを有するフレームメモリであって、前記ディスプレイの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第２フレームメモリに前記画像変換処理ステップにより変換された画像を保持するステップと、
次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換処理ステップによる画像変換処理の実行直後ではなく、前記ディスプレイの垂直同期タイミングに合わせて発行するステップとを含むことを特徴とする画像変換方法。
【請求項１５】
グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を第１フレームメモリに保持する機能と、
前記第１フレームメモリに保持された画像をディスプレイの仕様に適した画像に変換する画像変換機能と、
切り替え可能な複数のフレームバッファを有するフレームメモリであって、前記ディスプレイの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第２フレームメモリに前記画像変換機能により変換された画像を保持する機能と、
次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換機能による画像変換処理の実行直後ではなく、前記ディスプレイの垂直同期タイミングに合わせて発行する機能とをコンピュータに実現させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、描画処理技術に関し、特に表示装置に適した画像データを生成するための描画処理技術に関する。
【背景技術】
【０００２】
液晶ディスプレイやプラズマディスプレイなどの薄型ディスプレイ製造技術が向上し、価格が低下してきたことにつれて、現在では、多種多様な表示装置が身の回りに存在する。ディスプレイ装置には、ＤＶＤプレイヤにより再生された高画質の映像が表示されたり、コンピュータグラフィックスにより生成された動画像が表示される。
【０００３】
コンピュータやＤＶＤプレイヤから出力される画像データを表示装置に表示するためには、画像信号の水平周波数や垂直周波数などを変換することにより、画像信号を表示装置の仕様に整合する形式に変換するコンバータの機能をもつディスプレイコントローラが必要である。
【０００４】
また、ＮＴＳＣ／ＰＡＬ／ＳＥＣＡＭのテレビジョン方式のディスプレイに画像を出力するには、ＮＴＳＣ／ＰＡＬ／ＳＥＣＡＭの垂直同期周波数に合わせて画像を出力する必要があり、グラフィックスプロセッサによって描画された画像の解像度やフレームレートを変換する処理が必要となる。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
表示装置の種類によって、表示可能な画像信号の仕様、例えば、フレームレートや解像度などが異なる。ディスプレイコントローラが出力先の表示装置の仕様に合わせて画像信号を変換するためには、各種のコンバータが必要となり、回路規模が大きくなり、製造コストがかさむという問題がある。また、ハードウエアでコンバータを構成して出荷すると、新しいディスプレイの技術や規格にすぐには対応することができないため、柔軟性や拡張性が制限される。
【０００６】
また、グラフィックスプロセッサにより画像が描画される際の垂直同期信号と表示装置に画像が表示される際の垂直同期信号のタイミングがずれることが、画像のフレームレート変換処理に不測の影響を及ぼすことがあり、表示装置に表示される画像の品質を維持することは難しい。
【０００７】
本発明はこうした課題に鑑みてなされたものであり、その目的は、グラフィックスプロセッサにより描画される画像を表示装置の仕様に適した画像に変換することのできる画像変換技術を提供することにある。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明のある態様の画像変換装置は、グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を保持する第１フレームメモリと、前記第１フレームメモリに保持された画像をディスプレイの仕様に適した画像に変換する画像変換部と、前記画像変換部により変換された画像を複数のフレームバッファを切り替えながら保持するフレームメモリであって、前記ディスプレイの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第２フレームメモリと、次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換部による画像変換処理の実行直後ではなく、前記ディスプレイの垂直同期タイミングに合わせて発行する切替命令発行部とを含む。
【０００９】
本発明の別の態様もまた、画像変換装置である。この装置は、グラフィックスプロセッサによって描画される画像をテレビジョン方式の画像に変換する装置であって、グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を保持する第１フレームメモリと、前記第１フレームメモリに保持された画像を出力先のテレビション方式の画像に変換する画像変換部と、前記画像変換部により変換された画像を複数のフレームバッファを切り替えながら保持するフレームメモリであって、出力先のテレビジョンの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第２フレームメモリと、次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換部による画像変換処理の実行直後ではなく、出力先のテレビジョンの垂直同期タイミングに合わせて発行する切替命令発行部とを含む。
【００１０】
本発明のさらに別の態様は、画像変換方法である。この方法は、グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を第１フレームメモリに保持するステップと、前記第１フレームメモリに保持された画像をディスプレイの仕様に適した画像に変換する画像変換処理ステップと、切り替え可能な複数のフレームバッファを有するフレームメモリであって、前記ディスプレイの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第２フレームメモリに前記画像変換処理ステップにより変換された画像を保持するステップと、次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換処理ステップによる画像変換処理の実行直後ではなく、前記ディスプレイの垂直同期タイミングに合わせて発行するステップとを含む。
【００１１】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラム、データ構造、記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１２】
本発明によれば、グラフィックスプロセッサにより描画される画像を表示装置の仕様に適した画像に変換することができる。
【発明を実施するための最良の形態】
【００１３】
図１は、実施の形態に係る描画処理装置１００の構成図である。描画処理装置１００は、描画対象となるオブジェクト（以下、単に「オブジェクト」という）の３次元モデル情報にもとづいて画面に表示するための描画データを生成するレンダリング処理を行う。同図は機能に着目したブロック図を描いており、これらの機能ブロックはハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現することができる。
【００１４】
描画処理装置１００は、メインプロセッサ１０、メインメモリ２０、グラフィックスプロセッサ３０、ローカルメモリ４０、ディスプレイコントローラ５０、ディスプレイ６０、テクスチャユニット７０、および通信部８０を含む。これらは図示しないバスに接続されている。
【００１５】
メインメモリ２０は、主にメインプロセッサ１０によって使用される記憶領域であり、オブジェクトの頂点データや制御パラメータが記憶される。
【００１６】
メインプロセッサ１０は、オブジェクトのジオメトリ演算処理などを行い、グラフィックスプロセッサ３０に対してオブジェクトの描画を指示する描画コマンドを生成する。
【００１７】
メインプロセッサ１０は、コマンド生成部１２と切替命令発行部１４の機能を有する。コマンド生成部１２は、描画コマンドを生成してコマンドバッファに蓄積する。コマンドバッファに蓄積された描画コマンドはグラフィックスプロセッサ３０によって読み出され、実行される。グラフィックスプロセッサ３０によって描画された画像はフレームメモリ４７に蓄積される。切替命令発行部１４は、マルチバッファで構成されるフレームメモリ４７の切り替えタイミングと切り替え先のバッファを指示するための切替命令を発行する。
【００１８】
ローカルメモリ４０は、主にグラフィックスプロセッサ３０によって使用される記憶領域であり、描画アルゴリズムを実行するためのシェーダプログラムやオブジェクトの表面に貼り付けるためのテクスチャなどが記憶される。また、ローカルメモリ４０内には描画データの中間結果や最終結果を保持するためのフレームバッファが設けられる。
【００１９】
ローカルメモリ４０内に設けられるフレームバッファには、ユーザ管理バッファ４３とライブラリ管理領域４５がある。ユーザ管理バッファ４３はアプリケーションによって利用されるユーザ領域であり、ライブラリ管理領域４５はグラフィックスライブラリによって管理される領域である。
【００２０】
グラフィックスプロセッサ３０は、オブジェクトをレンダリングして描画データを生成し、ローカルメモリ４０に描画データを格納する。グラフィックスプロセッサ３０は、描画処理部３２と画像変換部３５の機能を有する。これらの機能はプログラマブルシェーダの機能の一部として提供される。
【００２１】
描画処理部３２は、メインプロセッサ１０から指示される描画コマンドにしたがって、オブジェクトに対してシェーディング、テクスチャマッピングなどの様々な描画演算処理を行い、描画データをローカルメモリ４０内のユーザ管理バッファ４３に書き出す。
【００２２】
描画処理部３２は、テクスチャマッピングを行う場合は、テクスチャユニット７０のテクスチャマッピング機能を利用する。テクスチャユニット７０は、ローカルメモリ４０に記憶されたテクスチャデータを読み出し、オブジェクト表面にマッピングすべきテクスチャの値をバイリニア補間などにより求め、描画処理部３２に与える。
【００２３】
画像変換部３５は、描画処理部３２により生成された描画データをディスプレイ６０の仕様に適した表示画像データに変換するためのソフトウエアモジュールである。このソフトウエアモジュールは、グラフィックスプロセッサ３０用に提供される画像変換ライブラリの形態でプログラマに提供される。
【００２４】
画像変換部３５は、描画処理部３２により生成された描画データをユーザ管理バッファ４３から読み出し、フィルタリング処理を施し、ディスプレイ６０の仕様に適した表示画像データに変換する。フィルタリングの一例として、解像度変換、色空間変換、ガンマ補正、ダウンサンプリング、時間軸フィルタリング（temporal filtering）、アンチエイリアシング、モーションブラーなどがある。
【００２５】
ここで、解像度変換は、たとえば、出力先のディスプレイ６０のアスペクト比の違いに対応したり、ＳＤ（Standard Definition）画像とＨＤ（High Definition）画像の間で変換する際に行われるものであり、画素の補間処理を伴う。画像変換部３５は、テクスチャユニット７０のバイリニア補間の機能を利用して、解像度変換の際に必要となる画素値を周囲の画素値から補間して求める。すなわち、テクスチャユニット７０は、解像度変換前の画像をテクスチャとしてサンプリングし、画素をバイリニア補間して解像度変換後の画像の画素データを生成する。
【００２６】
時間軸フィルタリングは、たとえば、画像のフレームを落としたり、２枚のフレーム画像を合成して時間軸方向に補間されたフレーム画像を生成するなどにより、時間軸方向に画像をフィルタリングすることである。グラフィックスプロセッサ３０が描画する際に前提とする垂直同期周波数と、ディスプレイ６０の実際の垂直同期周波数とが一致しない場合、この時間軸フィルタリングにより画像のフレームレートを変換する。
【００２７】
画像変換部３５は、画像変換処理にあたってローカルメモリ４０内のライブラリ管理領域４５に設けられたフレームメモリ４７を中間データの保持のために利用し、変換処理後の表示画像データをフレームメモリ４７に書き込む。
【００２８】
ライブラリ管理領域４５に設けられたフレームメモリ４７は、表示画像データの書き込みと読み出しを独立に行えるように、ダブルバッファやトリプルバッファなどのマルチバッファで構成され、ディスプレイコントローラ５０によって読み出し中のバッファとは別のバッファに次のフレームの表示画像データが書き込まれる。ディスプレイコントローラ５０は、ディスプレイ６０の垂直同期周波数（「リフレッシュレート」とも呼ばれる）に合わせて、マルチバッファで構成されるフレームメモリ４７を順次切り替えてスキャンする。
【００２９】
ディスプレイコントローラ５０は、切替命令発行部１４により発行された切替命令に応じてマルチバッファで構成されたフレームメモリ４７を切り替えながらスキャンして表示画像データを読み出す。
【００３０】
ディスプレイコントローラ５０によるフレームメモリ４７のスキャン動作をより詳しく説明する。ディスプレイコントローラ５０は、フレームメモリ４７から表示画像データのピクセルデータをライン状に順次読み込む。すなわち、ディスプレイコントローラ５０は、フレームメモリ４７の左上隅の画素から水平方向にスキャンし、最初の横一列の画素データを読み出す。次に、垂直方向に１画素だけ移動して、次の横一列の画素を読み出す。最下段の画素列までスキャンが終わると、再び最上段の画素列から同様のスキャンを行う。
【００３１】
ここで、フレームメモリ４７は、マルチバッファで構成されているため、ディスプレイコントローラ５０は、ディスプレイ６０の垂直同期信号（ＶＳＹＮＣ；vertical synchronizing signal）に合わせて発生する切替信号に応じて、表示画像データをスキャンするフレームバッファを切り替える。ディスプレイコントローラ５０は、垂直同期信号のタイミングで、それまでスキャンしていた第１のフレームバッファから第２のフレームバッファに切り替え、第２のフレームバッファから表示画像データを読み出す。
【００３２】
ディスプレイコントローラ５０は、このようにしてフレームメモリ４７から読み出したＲＧＢのカラー値からなる表示画像データをディスプレイ６０に対応したフォーマットの画像信号に変換してディスプレイ６０に供給する。
【００３３】
ディスプレイ６０は、コンピュータ向けのＣＲＴディスプレイや液晶ディスプレイなどのいわゆる「コンピュータディスプレイ」であってもよく、あるいは、テレビジョン受信機向けのブラウン管ディスプレイ、液晶ディスプレイ、プラズマディスプレイなどのいわゆる「テレビディスプレイ」であってもよい。
【００３４】
なお、グラフィックスプロセッサ３０とメインプロセッサ１０は図示しない入出力インタフェースを介して接続されており、グラフィックスプロセッサ３０は、入出力インタフェースを介してメインメモリ２０にアクセスすることができ、逆に、メインプロセッサ１０は、入出力インタフェースを介してローカルメモリ４０にアクセスすることができる。
【００３５】
通信部８０は、メインプロセッサ１０からの命令にしたがって、ネットワーク経由でデータを送受信することができる。通信部８０により送受信されるデータは、メインメモリ２０に保持される。
【００３６】
図２は、グラフィックスプロセッサ３０の画像変換処理に係る構成を詳細に説明する図である。同図を参照しながら、画像変換処理の動作を具体的に説明する。
【００３７】
メインプロセッサ１０のコマンド生成部１２は、オブジェクトを描画するための描画コマンド２３を生成し、コマンドバッファ２２に蓄積する。描画コマンド２３はグラフィックスプロセッサ３０の描画処理部３２により順次読み出されて実行され、ユーザ管理バッファ４３に描画データが書き込まれる。
【００３８】
コマンド生成部１２は、描画コマンド２３を生成する際、解像度変換やフレームレート変換などの各種フィルタリング処理を行うための関数とパラメータを指定する画像変換コマンド２４と、マルチバッファで構成されるフレームメモリにおいて次に読み出すバッファを指定するフリップコマンド２５とを生成し、画像変換コマンド２４とフリップコマンド２５を描画コマンド２３に付加してコマンドバッファ２２に蓄積する。
【００３９】
画像変換部３５は、画像変換コマンド２４をコマンドバッファ２２から読み出し、ユーザ管理バッファ４３に保持された画像に対して各種のフィルタリング処理を施し、ライブラリ管理領域４５内のダブルバッファ９２ａ、９２ｂで構成されるフレームメモリ４７に変換後の画像を書き込む。切替命令発行部１４は、フリップコマンド２５をコマンドバッファ２２から読み出して実行し、切替部７６に読み出し先のバッファを切り替えるための切替信号を与える。ディスプレイコントローラ５０は、切替部７６により選択された読み出し先のバッファから画像をスキャンアウトする。
【００４０】
画像変換部３５によるフィルタリング処理にフレームレート変換処理が含まれる場合は、現在のフレーム以外に過去のフレームをフレームメモリ４７に保持する必要がある。そのため、フレームメモリ４７は、解像度変換などフレームレート変換以外のフィルタリング処理後のフレーム画像を少なくとも２枚保持するための第１フレームメモリと、第１フレームメモリに保持された少なくとも２枚のフレーム画像を用いてフレームレート変換を施し、フレームレート変換後のフレーム画像を保持するための第２フレームメモリの二つの領域に分けて用いられる。
【００４１】
ここでは、一般的な構成としてフリップコマンド２５をコマンドバッファ２２にキューイングしている形態を図示しているが、後述のように、本実施の形態では、フリップコマンド２５をコマンドバッファ２２にキューイングする代わりに、フリップ動作をドライバに実行させる関数をコールバックする方法を採用する。メインプロセッサ１０の切替命令発行部１４は、フリップコマンド２５を画像変換部３５による画像変換処理の実行直後ではなく、ディスプレイ６０の垂直同期信号のタイミングに合わせて確定的なタイミングで発行されるように設定する。フリップ関数は、タイマ割り込みにより自動的に呼び出される。
【００４２】
画像変換部３５によるフレームレート変換処理は、５つのモードのいずれかで動作する。まず、基本的な３つのモードを挙げる。
（１）フレームレート無変換モード
描画処理部３２によって所与の垂直同期周波数で描画された画像のフレームレートを全く変換しないモードである。
（２）フレームドロップモード
描画処理部３２によって所与の垂直同期周波数で描画されたフレームを間引きするモードである。
（３）フレーム補間モード
描画処理部３２によって所与の垂直同期周波数で描画された２枚の画像を所定の合成係数で合成するモードである。
【００４３】
これら３つの基本モードの他、以下の２つの拡張モードがある。
（４）スロー時ドロップモード
描画処理が垂直同期周期一つ分（１ＶＳＹＮＣ）以内で完了する平常時はフレーム補間を行い、描画処理に垂直同期周期二つ分（２ＶＳＹＮＣ）かかるようなスロー時にはフレームを落とすモードである。
【００４４】
（５）可変混合モード
フレーム補間の合成係数を調整することでフレーム補間モードと実質的なフレームドロップモードを混合するモードである。
【００４５】
画像変換部３５のフレームレート変換の各動作モードを図面を参照しながら説明する。以下では、簡単のため、画像変換部３５は解像度変換とフレームレート変換を行う場合を説明するが、解像度変換以外のフィルタリングを行う場合も同様である。
【００４６】
図３（ａ）、（ｂ）は、画像変換部３５がフレームレート無変換モードで動作する場合を説明する図である。
【００４７】
描画処理部３２により描画された画像がユーザ管理バッファ４３に保持される。画像変換部３５は、ユーザ管理バッファ４３に保持された変換元画像ＳＲＣに対して解像度変換処理を施し、変換された画像ＤＳＴをライブラリ管理領域４５のフレームメモリ４７に書き込む。フレームメモリ４７は、ダブルバッファ９２ａ、９２ｂで構成されており、奇数フレームでは、画像変換部３５が変換画像ＤＳＴを左バッファ９２ａに書き込む間、ディスプレイコントローラ５０は、表示すべき画像ＳＣＡＮＯＵＴを右バッファ９２ｂからスキャンアウトする（図３（ａ））。偶数フレームでは、画像変換部３５が変換画像ＤＳＴを右バッファ９２ｂに書き込む間、ディスプレイコントローラ５０は、表示すべき画像ＳＣＡＮＯＵＴを左バッファ９２ａからスキャンアウトする（図３（ｂ））。
【００４８】
フレーム無変換モードでは、グラフィックスプロセッサ３０の垂直同期周波数で描画された画像のフレームレートは変更されずにディスプレイ６０に出力される。グラフィックスプロセッサ３０がＮＴＳＣ方式の垂直同期周波数で描画しており、ディスプレイ６０がＮＴＳＣ方式のテレビであれば、または、グラフィックスプロセッサ３０がＰＡＬ方式の垂直同期周波数で描画しており、ディスプレイ６０がＰＡＬ方式のテレビであれば、画像変換部３５をフレーム無変換モードで動作させればよい。
【００４９】
フレーム無変換モードでは、フレームメモリ４７は、書き込み用のバッファ１枚と読み出し用のバッファ１枚の合計２枚のダブルバッファで構成すればよい。
【００５０】
図４は、画像変換部３５がフレームドロップモードで動作する場合を説明する図である。フレームドロップモードでは、描画処理部３２が描画する画像のフレームレートが、ディスプレイ６０のフレームレートよりも速く、描画処理部３２により描画されたフレーム画像が間引きされる。ライブラリ管理領域４５に設けられたフレームメモリ４７は、３つのバッファ９２ａ、９２ｂ、９２ｃで構成される。画像変換部３５は既に左バッファ９２ａに変換画像ＤＳＴの書き込みを完了し、今、ユーザ管理バッファ４３に保持された変換元画像ＳＲＣを解像度変換して中央バッファ９２ｂに書き込んでいる。このとき、ディスプレイコントローラ５０は、表示すべき画像ＳＣＡＮＯＵＴを右バッファ９２ｃからスキャンアウトしている。
【００５１】
画像変換部３５は、描画処理部３２が描画する画像のフレームレートとディスプレイ６０に表示される画像のフレームレートの違いを吸収するために、フレームの間引きを行う。たとえば、ディスプレイコントローラ５０は、切替命令発行部１４から発行される切替命令にしたがって、次にスキャンアウトされるべき画像を右バッファ９２ａではなく、中央バッファ９２ｂから読み出すことにより、右バッファ９２ａに保持されたフレームを間引きする。
【００５２】
このように、フレームドロップモードでは、グラフィックスプロセッサ３０の垂直同期周波数で描画された画像について意図的にフレーム落ちを生じさせることで、ディスプレイ６０の垂直同期周波数に合ったフレームレートの画像に変換される。たとえば、グラフィックスプロセッサ３０がＮＴＳＣ方式の垂直同期周波数５９．９４Ｈｚ（ヘルツ）で描画し、出力先のディスプレイ６０がＰＡＬ方式の垂直同期周波数５０Ｈｚである場合、およそ６フレーム毎に１枚のフレームを落とすことで画像のフレームレートを５９．９４Ｈｚから５０Ｈｚに変換することができる。
【００５３】
フレームドロップモードでは、描画垂直同期周波数が表示垂直同期周波数より大きいため、フレームの書き込みとフレームの読み出しが同期せず、フレームの書き込みが先行して行われることになるため、書き込み用のバッファを２フレーム分用意する必要がある。したがって、書き込み用のバッファ２枚と読み出し用のバッファ１枚の合計３枚のトリプルバッファでフレームメモリ４７を構成する必要がある。
【００５４】
フレームドロップモードは、簡単にフレームレート変換を実現できる点で有利であるが、フレーム落ちによって動画が不連続に見えるというデメリットがある。
【００５５】
図５Ａ、図５Ｂは、画像変換部３５がフレーム補間モードで動作する場合を説明する図である。図５Ａは、画像変換部３５が奇数フレームについて画像変換する様子を示し、図５Ｂは、画像変換部３５が偶数フレームについて画像変換する様子を示す。
【００５６】
ライブラリ管理領域４５は、グラフィックスプロセッサ３０が描画するときに前提とする垂直同期周波数（以下、「描画垂直同期周波数」という）で画像が書き込まれる第１フレームメモリ４７ａと、ディスプレイ６０に画像が表示される差異の実際の垂直同期周波数（以下、「表示垂直同期周波数」という）で画像がスキャンアウトされる第２フレームメモリ４７ｂを含む。ここでは、描画垂直同期周波数はＮＴＳＣ方式の５９．９４Ｈｚ、表示垂直同期周波数は、ＰＡＬ方式の５０Ｈｚであるとする。
【００５７】
画像変換部３５は、ユーザ管理バッファ４３に保持された変換元画像ＳＲＣを解像度変換し、変換画像を第１フレームメモリ４７ａに書き込む。第１フレームメモリ４７ａは、現在のフレームＣＵＲＲと、一つ前のフレームＰＲＥＶを保持するために、ダブルバッファ９０ａ、９０ｂで構成される。図５Ａでは、左バッファ９０ａに現在のフレームＣＵＲＲが、右バッファ９０ｂに一つ前のフレームＰＲＥＶが保持されている。画像変換部３５が左バッファ９０ａに書き込んだ現在のフレームＣＵＲＲは、次の垂直同期信号のタイミングでは、図５Ｂに示すように、一つ前のフレームＰＲＥＶとして用いられる。
【００５８】
画像変換部３５は、現在のフレームＣＵＲＲと、過去のフレームＰＲＥＶとを所定の合成係数Ｔで合成することにより、補間フレームＤＳＴを生成し、第２フレームメモリ４７ｂに書き込む。合成係数Ｔは、グラフィックスプロセッサ３０の描画垂直同期信号とディスプレイ６０の表示垂直同期信号のずれにもとづく値であり、０から１までの値を取る。このフレーム補間処理は、合成係数Ｔをアルファ値として２枚のフレームを合成する「アルファブレンディング」であり、シェーダの線形補間機能を用いて実行することができる。
【００５９】
なお、変換元画像ＳＲＣを解像度変換して第１フレームメモリ４７ａに現在のフレームＣＵＲＲとして書き込む処理と、第１フレームメモリ４７ａから現在のフレームＣＵＲＲと過去のフレームＰＲＥＶを読み出して合成係数Ｔで合成する処理とを同時に実行すると、現在のフレームＣＵＲＲを保持するバッファへの書き込みと読み出しが競合する。競合を避けるためには、マルチパスレンダリング（Multi-Pass Rendering）が可能なシェーダにおいて、書き込み処理と読み出し処理を別々のパス（pass）に分けて２パスで処理を実行しなければならなくなる。そのオーバーヘッドを避けるために、複数のバッファに同時にレンダリングすることのできるマルチレンダーターゲット（Multi-Render Target）と呼ばれる技術を用いて、書き込み先のバッファを二つにすることでシェーダの１パスでこれら二つの処理を実行することを可能にする。
【００６０】
すなわち、シェーダは、変換元画像ＳＲＣを解像度変換して第１フレームメモリ４７ａに現在のフレームＣＵＲＲとして書き込む処理を行うとともに、変換元画像ＳＲＣを解像度変換した結果と過去のフレームＰＲＥＶとを合成して補間フレームＤＳＴを第２フレームメモリ４７ｂに書き込む処理を行う。変換元画像ＳＲＣを変換して現在のフレームＣＵＲＲを生成する処理に複雑な画像処理が含まれる場合は、この手法を適用することは難しいが、ここでは変換元画像ＳＲＣから現在のフレームＣＵＲＲへの変換は、簡単な解像度変換だけであるから、マルチレンダーターゲットの技術を用いて余分なオーバーヘッドをなくすことができる。
【００６１】
画像変換部３５がフレーム補間を行って、第２フレームメモリ４７ｂの一つのバッファ９２ａに補間フレームＤＳＴを書き込んでいる間、ディスプレイコントローラ５０は、表示すべきフレームＳＣＡＮＯＵＴを第２フレームメモリの別のバッファ９２ｂからスキャンアウトする。
【００６２】
図５Ｂを参照して、偶数フレームの変換処理を説明する。画像変換部３５が解像度変換後の現在のフレームＣＵＲＲを第１フレームメモリ４７ａの右バッファ９０ｂに書き込む。画像変換部３５は、右バッファ９０ｂに保持された現在のフレームＣＵＲＲと、左バッファ９０ａに保持された一つ前のフレームＰＲＥＶを所定の合成係数Ｔで合成し、第２フレームメモリ４７ｂの一つのバッファ９２ｂに補間されたフレームＤＳＴを書き込む。ディスプレイコントローラ５０は、表示すべきフレームＳＣＡＮＯＵＴを別のバッファ９２ａからスキャンアウトする。なお、実際は４つのバッファ９２ａ〜９２ｄの内、空いているバッファから順に使用される。
【００６３】
合成係数Ｔを描画垂直同期信号と表示垂直同期信号のずれに応じた値に設定することで、グラフィックスプロセッサ３０の描画垂直同期周波数で描画された２枚のフレームがディスプレイ６０の表示垂直同期周波数に合ったフレームに補間される。
【００６４】
フレーム補間モードでは、第２フレームメモリ４７ｂを４つのバッファ９２ａ〜９２ｄで構成することが好ましいが、その理由については後述する。
【００６５】
図６（ａ）、（ｂ）を参照して、描画垂直同期周波数と表示垂直同期周波数の比が整数比である場合と、整数比でない場合で、垂直同期信号のタイミングのずれ方に違いがあることを説明する。
【００６６】
図６（ａ）は、描画垂直同期周波数が６０Ｈｚ、表示垂直同期周波数が５０Ｈｚである場合のそれぞれの垂直同期信号のタイミングを図示する。描画垂直同期周波数と表示垂直同期周波数の比は６：５であるから、描画垂直同期信号が６回発生する時間Ｔの間に、表示垂直同期信号は５回発生する。したがって、時間Ｔ毎に描画垂直同期信号と表示垂直同期信号は同期する。
【００６７】
図６（ｂ）は、描画垂直同期周波数が５９．９４Ｈｚ、表示垂直同期周波数が５０Ｈｚである場合のそれぞれの垂直同期信号のタイミングを図示する。描画垂直同期周波数と表示垂直同期周波数の比は整数比にならないから、描画垂直同期信号が６回発生する時間Ｔ１と、表示垂直同期信号が５回発生する時間Ｔ２の間には、短い時間差ｄが生じる。この短い時間差ｄがあるために、描画垂直同期信号と表示垂直同期信号は同期することがなく、絶えず微妙な時間差が生じる。このため、５０Ｈｚの表示垂直同期信号のタイミング、すなわちフレームバッファからフレームをスキャンアウトするタイミングは、５９．９４Ｈｚの描画垂直同期信号のタイミングに対して相対的に任意のずれをもちうることになり、スキャンアウトを開始するタイミングを描画垂直同期信号に対して固定したタイミングに決め打ちすることはできない。
【００６８】
図７（ａ）、（ｂ）は、描画垂直同期周波数と表示垂直同期周波数の比が整数比でない場合、スキャンアウトのタイミングが１フレーム分ずれる現象を説明する図である。グラフィックスプロセッサ３０は、５９．９４Ｈｚで発生する描画垂直同期信号（以下、「描画Ｖシンク」という）ＶＮ１、ＶＮ２、ＶＮ３のタイミングで描画コマンド、画像変換コマンド、およびフリップコマンドを連続して実行する。同図は、描画、画像変換、およびフリップにかかる時間が棒グラフで表示されている。一方、ディスプレイコントローラ５０は５０Ｈｚで発生する表示垂直同期信号（以下、「表示Ｖシンク」という）ＶＰ１、ＶＰ２のタイミングで読み出し先のバッファを切り替えて画像をスキャンアウトする。
【００６９】
図７（ａ）では、グラフィックスプロセッサ３０によって描画、画像変換、およびフリップが完了する時間は、第１の表示ＶシンクＶＰ１のタイミングよりも前であるから、スキャンアウトはその表示ＶシンクＶＰ１のタイミングで開始される。
【００７０】
図７（ｂ）では、グラフィックスプロセッサ３０によって描画処理に時間がかかったため、描画、画像変換、およびフリップが完了する時間は、第１の表示ＶシンクＶＰ１のタイミングよりも後になる。この場合は、第１の表示ＶシンクＶＰ１のタイミングではスキャンアウトを開始することができないから、スキャンアウトは第２の表示ＶシンクＶＰ２のタイミングまで待たされる。
【００７１】
グラフィックスプロセッサ３０による描画処理にかかる時間は、描画対象の複雑さに応じて異なるため、描画と変換処理が完了するのが、第１の表示ＶシンクＶＰ１の前になるか、後になるかは、前もって予測することはできない。そのため、スキャンアウトするタイミングが第１の表示ＶシンクＶＰ１になったり、第２の表示ＶシンクＶＰ２になったりして不確定になる。第１の表示ＶシンクＶＰ１でスキャンアウトされると仮定して補間したフレームが、第２の表示ＶシンクＶＰ２でスキャンアウトされると、補間係数が合っていないために動画の連続性が損なわれ、画質が劣化する。
【００７２】
また、仮にグラフィックスプロセッサ３０による描画処理時間が一定であったとしても、図６（ｂ）で説明したように、５０Ｈｚの表示Ｖシンクは５９．９４Ｈｚの描画Ｖシンクに対して微小なずれを時間経過とともに徐々に累積させていくため、表示ＶシンクＶＰ１の前で実行されていたフリップコマンドであっても、微小なずれの累積により、やがては表示ＶシンクＶＰ１の後で実行されることになる。
【００７３】
このように描画処理時間が不定であることと、描画垂直同期周波数と表示垂直同期周波数の比が正確には整数比ではないことが原因で、フリップ動作のタイミング、言い換えれば、読み出し先のバッファの切り替えのタイミングが不確定になる。
【００７４】
このようなフリップ動作の不確定性を避けるため、本実施の形態では、フリップコマンドを描画処理と画像変換処理が終わった直後に実行するのではなく、フリップコマンドの実行を描画処理と画像変換処理から切り離し、フリップコマンドを確定的なタイミングで実行する。
【００７５】
図８は、本実施の形態におけるフリップコマンドの実行タイミングを説明する図である。メインプロセッサ１０とグラフィックスプロセッサ３０は、５９．９４Ｈｚの描画垂直同期信号周波数で描画を実行する。すなわち、描画ＶシンクＶＮ１〜ＶＮ３の発生タイミングで描画が開始される。一方、ディスプレイコントローラ５０は、５０Ｈｚの表示垂直同期周波数でスキャンアウトを実行する。すなわち、表示ＶシンクＶＰ１、ＶＰ２の発生タイミングで読み出し先のバッファを切り替えてスキャンアウトが開始される。
【００７６】
メインプロセッサ１０は、描画ＶシンクＶＮ１のタイミングαで、描画コマンドと画像変換コマンドを生成する（ステップＳ１）。メインプロセッサ１０は、グラフィックスプロセッサ３０による描画処理と画像変換処理の完了が見込まれる最初の描画Ｖシンク（「目標Ｖシンク」という）のタイミングを仮定する。ここでは、２番目の描画ＶシンクＶＮ２を目標Ｖシンクと仮定し、この目標ＶシンクＶＮ２のタイミングβまでには、描画・変換処理が完了すると仮定する。
【００７７】
次に、メインプロセッサ１０は、目標ＶシンクＶＮ２のタイミングβの直後に発生する表示Ｖシンク（「直後Ｖシンク」という）と、目標Ｖシンクのタイミングβの直前に発生する表示Ｖシンク（「直前Ｖシンク」という）のタイミングをそれぞれ取得する。ここでは、直後Ｖシンクは２番目の表示ＶシンクＶＰ２であり、直前Ｖシンクは１番目の表示ＶシンクＶＰ１である。
【００７８】
各表示Ｖシンクのタイミングに対して所定の先行時間ＡＴ（Anticipatory Time）だけ前のタイミングを先行Ｖシンク（Anticipatory VSYNC）という。直後ＶシンクＶＰ２のタイミングｂより先行時間ＡＴだけ前に直後先行ＶシンクＡＶＰ２が定められ、直前ＶシンクＶＰ１のタイミングａより先行時間ＡＴだけ前に直前先行ＶシンクＡＶＰ１が定められる。
【００７９】
メインプロセッサ１０は、目標ＶシンクＶＮ２のタイミングβが、直後ＶシンクＶＰ２に対して定められた直後先行ＶシンクＡＶＰ２のタイミングＢからずれている割合をもとに、フレーム補間の合成係数Ｔを求める。具体的には、直後先行ＶシンクＡＶＰ２のタイミングＢと、直前先行ＶシンクＡＶＰ１のタイミングＡで挟まれる区間において、目標ＶシンクＶＮ２のタイミングβの相対位置を求める。直前先行ＶシンクＡＶＰ１のタイミングＡを０として、直後先行ＶシンクＡＶＰ２のタイミングＢを１として、目標ＶシンクＶＮ２のタイミングβの相対位置を０から１までの値で求め、その値を合成係数Ｔとする。同図では、目標ＶシンクＶＮ２のタイミングβの相対位置は０．４であり、合成係数Ｔの値は０．４になる。
【００８０】
直前先行ＶシンクＡＶＰ１から直後先行ＶシンクＡＶＰ２までの時間は、表示垂直同期周期の２０ミリ秒であるから、直後先行ＶシンクＡＶＰ２の発生時刻をＴＢ、目標ＶシンクＶＮ２の発生時刻をＴβとすると、合成係数Ｔは次式で計算される。
Ｔ＝｛２０−（ＴＢ−Ｔβ）｝／２０
【００８１】
メインプロセッサ１０のコマンド生成部１２は、このようにして求めた合成係数Ｔの値をもとに画像変換コマンド２４を生成する。また、コマンド生成部１２は、後段の目標ＶシンクＶＮの正誤判定に必要な値と、フリップに必要な情報をパケット化してパケットキューにキューイングする。
【００８２】
グラフィックスプロセッサ３０の描画処理部３２は描画コマンドにもとづいて描画処理を実行し、画像変換部３５は画像変換コマンドにもとづいて画像変換処理を実行する（ステップＳ２）。なお、ここでは、理解し易いように、メインプロセッサ１０による描画・変換コマンドの生成と、グラフィックスプロセッサ３０による描画・変換処理とが、同一の垂直同期周期内で実行されているように図示したが、実際には、ある垂直同期周期においてメインプロセッサ１０により生成された描画・変換コマンドを次の垂直同期周期においてグラフィックスプロセッサ３０が実行するのが通常である。
【００８３】
画像変換部３５による画像変換処理には解像度変換とフレームレート変換が含まれる。フレームレート変換は、フレーム補間モードで実行される。画像変換部３５は、メインプロセッサ１０により求められた合成係数Ｔで２枚のフレームを合成する。具体的には、一つ前のフレームＰＲＥＶと現在のフレームＣＵＲＲを画素毎に線形補間式ＤＳＴ＝Ｔ＊ＰＲＥＶ＋（１−Ｔ）＊ＣＵＲＲにより、補間して、補間フレームＤＳＴを求める。
【００８４】
ここで、上記の線形補間式の意味を説明する。本来は、２枚のフレームを合成する合成係数Ｔは、描画ＶシンクＶＮ２のタイミングβと描画ＶシンクＶＮ３のタイミングγで挟まれる区間において、直後先行ＶシンクＡＶＰ２のタイミングＢの相対位置により求めるのが自然である。同図に示すように、直後先行ＶシンクＡＶＰ２のタイミングＢが、描画ＶシンクＶＮ２のタイミングβと描画ＶシンクＶＮ３のタイミングγで挟まれる区間を（１−Ｔ’）：Ｔ’で内分する場合、補間フレームＤＳＴは、線形補間式ＤＳＴ＝Ｔ’＊ＰＲＥＶ＋（１−Ｔ’）＊ＣＵＲＲによって補間して求めることができる。しかしながら、描画ＶシンクＶＮの周期は、表示ＶシンクＶＰの周期よりも短いため、この線形補間式では不都合が生じる。なぜなら、２つの描画ＶシンクＶＮの間に直後先行ＶシンクＡＶＰが存在しない状況が発生することがあるからである。たとえば、描画Ｖシンクが５９．９４Ｈｚ、表示Ｖシンクが５０Ｈｚで発生する場合、およそ６回に１回の割合で、このような状況が発生する。
【００８５】
そこで、表示Ｖシンクの周期が描画Ｖシンクの周期より長いことに着目して、目標ＶシンクＶＮ２のタイミングβが、直前先行ＶシンクＡＶＰ１のタイミングＡと直後先行ＶシンクＡＶＰ２のタイミングＢで挟まれる区間に挿入される位置をもって合成係数Ｔを決めている。このようにすれば、２つの先行ＶシンクＡＶＰのタイミング間の期間には必ず、目標ＶシンクＶＮのタイミングが存在するから、不都合は生じない。目標ＶシンクＶＮ２のタイミングβは、同図に示すように、直前先行ＶシンクＡＶＰ１のタイミングＡと直後先行ＶシンクＡＶＰ２のタイミングＢで挟まれる期間をＴ：（１−Ｔ）で内分する点であり、こうして得られる合成係数Ｔは、上述の本来の合成係数Ｔ’に対する逆数的な意味合いをもっていることが理解される。本実施の形態の線形補間式ＤＳＴ＝Ｔ＊ＰＲＥＶ＋（１−Ｔ）＊ＣＵＲＲは、本来の合成係数Ｔ’を用いた場合の線形補間式から導かれたものである。
【００８６】
たとえば、合成係数Ｔが１であれば、補間フレームの画素のカラー値は、一つ前のフレームの画素のカラー値と同じになり、合成係数Ｔが０であれば、補間フレームの画素のカラー値は、現在のフレームの画素のカラー値と同じになる。合成係数Ｔが０．４であれば、補間フレームの画素のカラー値は、一つ前のフレームの画素のカラー値を４０％、現在のフレームの画素のカラー値を６０％で重み付けして合成した値になる。
【００８７】
切替命令発行部１４は、フリップコマンドを画像変換処理の直後ではなく、直後先行ＶシンクＡＶＰ２のタイミングＢにおいて発行されるように設定する。ここで、直後ＶシンクＶＰ２の発生タイミングｂを「スキャンアウトタイミング」と呼び、そのスキャンアウトタイミングｂよりも先行時間ＡＴだけ前の直後先行ＶシンクＡＶＰ２の発生タイミングＢを「フリップタイミング」と呼ぶことにする。
【００８８】
切替命令発行部１４は、フリップタイミングＢにおいてフリップ関数が実行されるようにアプリケーションにコールバックを提供し、プロセスを一旦スリープさせる。すなわち、コマンドバッファにフリップコマンドをキューイングする代わりに、フリップ関数をシステムコールする方法を取る。スキャンアウトタイミングよりも先行時間ＡＴだけ前のフリップタイミングにおいてフリップ動作をドライバに実行させる関数をコールする。実際のスキャンアウトタイミングよりも先行時間ＡＴだけ余裕をもたせて前もってフリップ関数を呼び出すのは、スキャンアウトタイミングで関数呼び出しをすると、ドライバによる実際のフリップ動作がスキャンアウトのタイミングに間に合わなくなるからである。
【００８９】
目標ＶシンクＶＮ２のタイミングβにおいて、５９．９４Ｈｚ系の割り込み処理が発生する（ステップＳ３）。この割り込み処理において、パケットキューの先頭にある未マークのパケットを参照し、ステップ１において目標ＶシンクＶＮ２のタイミングβまでに描画・変換処理が完了すると仮定したことが正しかったかどうかを検証する。仮定が正しかった場合、すなわち描画・変換処理が実際に目標ＶシンクＶＮ２のタイミングβまでに完了していた場合、そのパケットに検証済みのマークを付ける。仮定が正しくなかった場合、すなわち描画・変換処理が目標ＶシンクＶＮ２のタイミングβまでに完了しなかった場合は、フレーム落ちが生じることになる。この場合、合成係数Ｔを再計算してフレーム補間をやり直す例外処理を実行する。この例外処理については後述する。
【００９０】
直後先行ＶシンクＡＶＰ２のタイミング（フリップタイミング）Ｂにおいて、割り込み処理が発生する（ステップＳ４）。この割り込み処理において、アプリケーションプロセスがタイマーで起床し、フリップ関数がシステムコールによって呼び出される。より具体的には、パケットキューの先頭のパケットが参照され、ステップＳ３の５９．９４Ｈｚ系の割り込み処理で検証済みのマークが付けられたパケットについて、フリップ関数が直ちに実行され、パケットはキューから取り除かれる。未マークのため処理の時期を逃してしまったパケットはこの段階でキューから取り除かれ、破棄される。
【００９１】
先行時間ＡＴの経過後、直後ＶシンクＶＰ２のタイミング（スキャンアウト予定タイミング）ｂにおいて、５０Ｈｚ系の割り込み処理が発生する（ステップＳ５）。この割り込み処理において、次の先行Ｖシンクのタイミングでアプリケーションプロセスを起こすためのタイマーが設定される。それと同時に、実際のフリップ動作が実行され、バッファが切り替えられ、合成係数Ｔで補間されたフレーム画像のスキャンアウトが開始される。
【００９２】
以上説明したフレーム変換処理を念頭において、フレーム補間モードにおいて第２フレームメモリ４７ｂが４つのバッファで構成される理由を説明する。描画垂直同期周波数が表示垂直同期周波数より大きいため、フレームの書き込みとフレームの読み出しが同期せず、フレームの書き込みが先行して行われることから、まず３枚のバッファが必要となる点は、フレームドロップモードの場合と同じである。さらに、フレーム補間モードでは、スキャンアウトタイミングよりも先行時間ＡＴだけ前もってフリップ関数を呼び出すため、さらに１フレーム分のバッファリングをしておかなければならない。そのため、第２フレームメモリを合計４枚のバッファで構成する必要がある。先行時間ＡＴがゼロであるなら、３枚のバッファでも足りるが、先行時間ＡＴをゼロにすると、フリップ動作に支障を来すため、一定の先行時間ＡＴを確保して、４枚のバッファをもたせることが好適である。
【００９３】
次に、図９（ａ）、（ｂ）を参照して、フレーム補間モードにおいて、フリップコマンドを画像変換処理の直後に実行せずに、画像変換処理から切り離したことによる効果を説明する。
【００９４】
図９（ａ）では、グラフィックスプロセッサ３０による描画・変換処理が第１の表示ＶシンクＶＰ１よりも前に完了しているが、フリップコマンドはこのタイミングでは発行されず、画像変換処理の完了が見込まれる描画ＶシンクＶＮ２の後に発生する第２の表示ＶシンクＶＰ２の先行時間ＡＴだけ前のタイミングで発行され、スキャンアウトは第２の表示ＶシンクＶＰ２のタイミングで開始される。
【００９５】
図９（ｂ）のように、グラフィックスプロセッサ３０による描画処理が長引いて、描画・変換処理が完了するのが、第１の表示ＶシンクＶＰ１よりも後になった場合でも、フリップコマンドは図９（ａ）の場合と同様、第２の表示ＶシンクＶＰ２の先行時間ＡＴだけ前のタイミングで発行されるので、スキャンアウトは第２の表示ＶシンクＶＰ２のタイミングで開始される。
【００９６】
このように、描画処理時間の長短によって、描画・変換処理の完了時点が第１の表示ＶシンクＶＰ１の前になったり、後になったりする場合でも、スキャンアウトは第２の表示ＶシンクＶＰ２のタイミングで開始されるため、フリップ動作の不確定性をなくすことができる。
【００９７】
図８では、描画・変換処理の完了が見込まれる目標ＶシンクＶＮ２のタイミングβ（「見込みタイミング」という）を想定し、見込みタイミングβで実際に画像変換処理が完了していた場合を示したが、見込みタイミングβで画像変換処理が完了していない場合には、それ以降のフレーム補間処理を修正するフィードバックをかける例外処理が実行される。図１０Ａ、図１０Ｂおよび図１０Ｃを参照してこの例外処理を説明する。
【００９８】
まず、比較のために図１０Ａに見込みタイミングで実際に画像変換処理が完了していた場合を示す。ステップ１〜ステップ５までの動作は図８で説明した通りである。この例では、目標ＶシンクＶＮ２のタイミングβ（見込みタイミング）は、直前先行ＶシンクＡＶＰ１のタイミングＡと直後先行ＶシンクＡＶＰ２のタイミングＢで挟まれる区間において、０．９の位置にあり、合成係数Ｔは０．９に設定される。見込みタイミングβにおいて、描画・変換処理が予想通り完了したため、予定通り、スキャンアウトタイミングｂに対して先行時間ＡＴだけ手前のフリップタイミングＢにフリップコマンドが発行され、スキャンアウトタイミングｂにおいて合成係数Ｔ＝０．９で補間されたフレームがスキャンアウトされる。
【００９９】
図１０Ｂは、見込みタイミングで実際には画像変換処理が完了していなかった場合の過渡的な状態を説明する図である。同図に示すように、グラフィックスプロセッサ３０による描画処理に時間がかかり、ステップＳ３の見込みタイミングβにおける割り込み処理において、描画・変換処理が完了していないことが確認される。このとき、画像変換部３５は新たに描画・変換処理の完了が見込まれる３番目の描画ＶシンクＶＮ３を目標Ｖシンクとして、目標ＶシンクＶＮ３のタイミングγを見込みタイミングに再設定し、一方、切替命令発行部１４は、フリップコマンドを直後先行ＶシンクＡＶＰ３のタイミングＣにおいて発行されるように設定する。
【０１００】
見込みタイミングβにおいて描画・変換処理が完了しないことから、フレーム落ちが生じることになる。このとき、コマンド生成部１２は、一つの描画・変換コマンドが何回の描画ＶシンクＶＮ内で処理されたかを記憶する変数Ｉを１だけインクリメントする。変数Ｉの初期値は１である。変数Ｉはフレーム落ちが生じた回数に１を足した値になる。
【０１０１】
コマンド生成部１２は、次の描画・変換コマンドを生成する際、変数Ｉの値を考慮して目標Ｖシンクを決めてコマンドバッファ２２に蓄積する。１ＶＳＹＮＣ内で正常に描画・変換コマンドが処理されている間は、変数Ｉは１であり、それ以降の描画・変換コマンドについて、目標Ｖシンクを１ＶＳＹＮＣ内で設定する。変数Ｉが２であれば、描画・変換コマンドの処理に２ＶＳＹＮＣかかっていることになるから、それ以降の描画・変換コマンドについて、目標Ｖシンクを２ＶＳＹＮＣ先に設定する。
【０１０２】
なお、実装上では、メインプロセッサ１０による描画・変換コマンドの生成は、グラフィックスプロセッサ３０による描画・変換コマンドの実行に先立って行われるから、何個の描画・変換コマンドを先行生成しているかも考慮して、目標Ｖシンクが設定される。すなわち、目標Ｖシンクは、先行して生成されたコマンド数に変数Ｉの値を乗じた値だけ先の描画Ｖシンクのタイミングに設定される。
【０１０３】
１ＶＳＹＮＣ内で画像変換処理が完了せず、フレーム落ちが生じたとき、コマンド生成部１２が、それ以降に生成される描画・変換コマンドについて目標Ｖシンクを変数Ｉにもとづいて設定するため、やがては正しい合成係数Ｔのもとでフレーム補間がなされる正常状態に復帰する。しかし、正常状態に復帰する前は、コマンド生成部１２がいったん見込みタイミングβを仮定して生成した描画・変換コマンドを変更することはできないため、見込みタイミングβを前提として求めた合成係数Ｔをそのまま使ってフレーム補間が行われる。
【０１０４】
グラフィックスプロセッサ３０による描画・変換処理は予想通り、新たな見込みタイミングγまでに完了する（ステップＳ２’）。目標ＶシンクＶＮ３のタイミングγにおいて、５９．９４Ｈｚ系の割り込み処理が発生する（ステップＳ３’）。この割り込み処理において、再設定された目標ＶシンクＶＮ３のタイミングγまでに描画・変換処理が完了すると仮定したことが正しかったことが検証される。
【０１０５】
直後先行ＶシンクＡＶＰ３のタイミング（フリップタイミング）Ｃにおいて、割り込み処理が発生し、フリップ関数がシステムコールによって呼び出される（ステップＳ４’）。先行時間ＡＴの経過後、直後ＶシンクＶＰ３のタイミング（スキャンアウトタイミング）ｂにおいて、５０Ｈｚ系の割り込み処理が発生し、実際のフリップ動作が実行され、バッファが切り替えられ、合成係数Ｔ＝０．９で補間されたフレーム画像のスキャンアウトが開始される（ステップＳ５’）。
【０１０６】
このように、描画・変換処理が１ＶＳＹＮＣ内に完了せず、２ＶＳＹＮＣかかるような場合は、スキャンアウトのタイミングがずれ、もはや正しくはない合成係数Ｔのもとで補間されたフレームが出力されることになる。しかしこれは過渡的な状態に過ぎず、これ以降の描画・変換処理が定常的に２ＶＳＹＮＣかかるようになるなら、２ＶＳＹＮＣを前提として目標Ｖシンクが設定され、合成係数Ｔが正しく計算されるため、正常状態に復帰する。なお、実装上は、描画・変換コマンドが先行生成されるため、既に生成された描画・変換コマンドの処理が終わるまでは過渡的な状態が続くことになる。
【０１０７】
図１０Ｃは、図１０Ｂの過渡的な状態の後、正常状態に復帰する様子を説明する図である。ここでは、描画・変換処理が定常的に２ＶＳＹＮＣかかるようになった場合を説明する。
【０１０８】
コマンド生成部１２は、描画ＶシンクＶＮ６のタイミングαで、描画コマンドと画像変換コマンドを生成する（ステップＳ１）が、このとき、変数Ｉが２であることから、２ＶＳＹＮＣ後の描画ＶシンクＶＮ８を目標Ｖシンクに設定する。次に、コマンド生成部１２は、目標ＶシンクＶＮ８に対して、直前先行ＶシンクＡＶＰ６と直後先行ＶシンクＡＶＰ７を決める。
【０１０９】
コマンド生成部１２は、目標ＶシンクＶＮ８のタイミング（見込みタイミング）γが、直前先行ＶシンクＡＶＰ６のタイミングＢと直後先行ＶシンクＡＶＰ７のタイミングＣで挟まれる区間において、０．７の位置にあることから、合成係数Ｔを０．７に設定する。
【０１１０】
画像変換部３５は、解像度変換処理（ステップＳ２）の後、コマンド生成部１２により設定された合成係数Ｔ＝０．７で２枚のフレームを合成する。
【０１１１】
一方、切替命令発行部１４は、フリップコマンドを直後先行ＶシンクＡＶＰ７のタイミングＣにおいて発行されるように設定する。
【０１１２】
グラフィックスプロセッサ３０による描画・変換処理は予想通り、見込みタイミングγまでに完了し、見込みタイミングγにおいて、５９．９４Ｈｚ系の割り込み処理が発生する（ステップＳ３）。
【０１１３】
直後先行ＶシンクＡＶＰ７のタイミング（フリップタイミング）Ｃにおいて、割り込み処理が発生し、フリップ関数が呼び出され（ステップＳ４）、直後ＶシンクＶＰ７のタイミング（スキャンアウトタイミング）ｃにおいて、５０Ｈｚ系の割り込み処理が発生し、実際のフリップ動作が実行され、バッファが切り替えられ、合成係数Ｔ＝０．７で補間されたフレーム画像のスキャンアウトが開始される（ステップＳ５）。
【０１１４】
このように、描画・変換処理が定常的に２ＶＳＹＮＣかかるようになった場合、２ＶＳＹＮＣ先の目標Ｖシンクを前提として計算された正しい合成係数Ｔでフレームが補間され、正しいスキャンアウトタイミングで補間されたフレームが出力される。
【０１１５】
図１０Ａ〜図１０Ｃで説明した例外処理は、次の２つの状況を想定している。
（１）描画処理にかかる時間が定常的に１ＶＳＹＮＣから２ＶＳＹＮＣに変化し、しばらく時間が経過してから、再び１ＶＳＹＮＣに戻るような粒度の粗いフレームレートの変化が発生する状況。
（２）突発的に１フレーム程度のフレーム落ちが発生する状況。
【０１１６】
上記の（１）は、グラフィックスプロセッサ３０が通常は５９．９４Ｈｚで描画しているが、ある時点を境に、たとえば、描画対象が複雑化するなどの理由で、平常時の半分の２９．９７Ｈｚで描画するようになり、しばらく時間が経過すると、再び５９．９４Ｈｚで描画することが可能になるような状況である。（２）は、システムが一時的に過負荷になるなどの理由で突発的にフレーム落ちが発生するが、すぐに元に戻るような状況である。
【０１１７】
（１）の状況について言えば、５９．９４Ｈｚから２９．９７Ｈｚに切り替わった直後は、図１０Ｂで説明した過渡的な状態になるが、２９．９７Ｈｚでの描画が定常的になると、やがては２ＶＳＹＮＣの描画を前提とした正しい合成係数Ｔのもとでフレーム補間がなされるようになる。そして、２９．９７Ｈｚから５９．９４Ｈｚに戻った直後は、やはり過渡的な状態になるが、５９．９４Ｈｚでの描画が定常的になると、やがては１ＶＳＹＮＣの描画を前提とした正しい合成係数Ｔのもとでフレーム補間がなされるようになる。
【０１１８】
（２）の状況については、突発的なフレーム落ちが生じた時点では、図１０Ｂの過渡的な状態になるが、その前後の定常状態では、正しい合成係数Ｔのもとでフレーム補間がなされる。
【０１１９】
以上、図３でフレームレート無変換モード、図４でフレームドロップモード、図５Ａ〜図１０Ｂを参照してフレーム補間モードを説明した。
【０１２０】
フレーム補間モードの線形補間式ＤＳＴ＝Ｔ＊ＰＲＥＶ＋（１−Ｔ）＊ＣＵＲＲにおいて、合成係数Ｔを１にすると、補間フレームＤＳＴは一つ前のフレームＰＲＥＶになり、合成係数Ｔを０にすると、補間フレームＤＳＴは現在のフレームＣＵＲＲになる。合成係数Ｔが０のときは、一つ前のフレームＰＲＥＶがスキャンアウトされず、合成係数Ｔが１のときは、現在のフレームＣＵＲＲがスキャンアウトされないことになるから、これは実質的にはフレームドロップモードの動作と同じである。第４および第５の拡張モードはこの性質を利用する。
【０１２１】
第４のスロー時ドロップモードでは、画像変換部３５は平常時、フレーム補間モードで動作し、描画に時間がかかるスロー時には実質的にフレームドロップモードで動作する。描画・変換処理が１Ｖシンク内で完了する平常状態では、画像変換部３５は、計算で求めた合成係数Ｔでフレーム補間を行うフレーム補間モードで動作し、描画・変換処理が１Ｖシンクを超える例外的なスロー状態になった場合、フレーム補間モードにおいて合成係数Ｔを０または１に設定して、実質的にはフレームドロップモードで動作する。
【０１２２】
スロー状態になった場合、通常のフレーム補間モードにおいて計算された合成係数Ｔが０．５より小さいならば、合成係数Ｔを０に設定し直し、合成係数Ｔが０．５以上ならば、合成係数Ｔを１に設定し直す。画像変換部３５は、新たに設定された合成係数Ｔ（０または１）のもとで線形補間を実行する。実質的には、合成係数Ｔが１の場合は、現在のフレームＣＵＲＲをドロップし、合成係数Ｔが０のときは、一つ前のフレームＰＲＥＶをドロップすることになる。
【０１２３】
描画処理部３２により描画された画像に対する画像変換処理がグラフィックスプロセッサ３０の垂直同期周期内に完了する限り、フレーム補間モードで動作し、グラフィックスプロセッサ３０によって描画された画像に対する画像変換処理がグラフィックスプロセッサ３０の垂直同期周期内に完了しない場合は、実質的にフレームドロップモードに切り替えて動作する。アプリケーションが想定する垂直同期周波数にもとづく垂直同期信号の発生間隔、すなわち１ＶＳＹＮＣ内で描画と画像変換が完了する限りは、フレーム補間モードによって画質の高い補間画像が表示され、１ＶＳＹＮＣ内で描画と画像変換が完了しない場合は、実質的にフレームドロップモードに切り替えて、フレーム落ちによる応急処理を施すことができる。１ＶＳＹＮＣ内で描画と画像変換が完了せず、フレーム落ちするような状況では、フレームを補間するよりもフレームをドロップした方が画質的には良いことが多いため、第４のスロー時ドロップモードは、そのような場合に採用するのが好ましい。
【０１２４】
第５の可変混合モードでは、フレームドロップモードとフレーム補間モードに二者択一ではなく、フレーム補間モードの合成係数を調整することでフレーム補間モードと実質的なフレームドロップモードとの中間的なモードを実現する。フレーム補間モードにおいて使用される合成係数の値と、フレーム補間モードにおいて実質的にフレームを落とすことと等価となる合成係数の値との間の値をとる新たな合成係数を定め、その新たな合成係数で第１フレームメモリに保持された２枚の画像を合成する。
【０１２５】
具体的には、通常のフレーム補間モードにおいて計算された合成係数Ｔと値１をアプリケーションが指定する可変の混合比Ｒで次式のように配分して、新たな合成係数Ｔ’を求める。
Ｔ’＝Ｒ＊１．０＋（１−Ｒ）＊Ｔ
ただし、Ｒは０から１の値を取る。
【０１２６】
新たに設定された合成係数Ｔ’で２枚のフレームが合成されて補間フレームが生成される。混合比Ｒを１に設定すると、実質的に１つ前のフレームを落として現在のフレームをスキャンアウトするドロップモードと同じ振る舞いになり、混合比Ｒを０に設定すると、通常のフレーム補間モードと同じ振る舞いになる。混合比Ｒが０から１の間の値であれば、ドロップモードとフレーム補間モードを混合したような中間的な振る舞いになる。
【０１２７】
可変混合モードでは、アプリケーションが状況に応じて混合比Ｒを調整することでフレーム補間モードとドロップモードの間をアナログ的に変化させることができ、柔軟性をもたせることができる。たとえば、オブジェクトの動きが激しく、フレーム間の差分が大きいときは、フレーム補間をすると、残像感が大きくなるため、一つ前のフレームを落として、現在のフレームを表示する方が視覚的には良いことがある。
【０１２８】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。そのような変形例を説明する。
【０１２９】
上記の実施の形態では、ＮＴＳＣ方式の垂直同期周波数で描画された画像をＰＡＬ方式の垂直同期周波数の画像にフレームレート変換する例を説明したが、フレームレート変換はこれに限られない。ＰＡＬ／ＳＥＣＡＭ方式からＮＴＳＣ方式へ変換する場合にも本発明を適用できる。また、ＮＴＳＣ／ＰＡＬ／ＳＥＣＡＭのテレビジョン信号方式の垂直同期周波数を前提として描画された画像に対して、コンピュータディスプレイの垂直同期周波数に合ったフレームレートに変換する場合、逆にコンピュータディスプレイの垂直同期周波数を前提として描画された画像に対して、テレビジョン信号方式の垂直同期周波数に合ったフレームレートに変換する場合にも本発明は適用できる。
【０１３０】
また、実施の形態では、グラフィックスプロセッサ３０の垂直同期周波数とディスプレイ６０の垂直同期周波数の比が整数比ではない場合を説明したが、これが整数比である場合でも、描画処理時間の長短によってフリップ動作の不確定性の問題が生じるため、実施の形態のフレームレート変換処理を適用するメリットがある。
【図面の簡単な説明】
【０１３１】
【図１】実施の形態に係る描画処理装置の構成図である。
【図２】図１のグラフィックスプロセッサの画像変換処理に係る構成を詳細に説明する図である。
【図３】図２の画像変換部がフレームレート無変換モードで動作する場合を説明する図である。
【図４】図２の画像変換部がフレームドロップモードで動作する場合を説明する図である。
【図５Ａ】図２の画像変換部がフレーム補間モードで動作する場合を説明する図である。
【図５Ｂ】図２の画像変換部がフレーム補間モードで動作する場合を説明する図である。
【図６】図６（ａ）、（ｂ）は、描画垂直同期周波数と表示垂直同期周波数の比が整数比である場合と、整数比でない場合で、垂直同期信号のタイミングのずれ方に違いがあることを説明する図である。
【図７】図７（ａ）、（ｂ）は、描画垂直同期周波数と表示垂直同期周波数の比が整数比でない場合、スキャンアウトのタイミングが１フレーム分ずれる現象を説明する図である。
【図８】本実施の形態におけるフリップコマンドの実行タイミングを説明する図である。
【図９】図９（ａ）、（ｂ）は、フレーム補間モードにおいて、フリップコマンドを画像変換処理の直後に実行せずに、画像変換処理から切り離したことによる効果を説明する図である。
【図１０Ａ】描画・変換処理の完了が見込まれるタイミングで実際に画像変換処理が完了していた場合のフレームレート変換処理を説明する図である。
【図１０Ｂ】描画・変換処理の完了が見込まれるタイミングで実際には画像変換処理が完了していなかった場合の過渡的な状態を説明する図である。
【図１０Ｃ】図１０Ｂの過渡的な状態の後、正常状態に復帰する様子を説明する図である。
【符号の説明】
【０１３２】
１０  メインプロセッサ、  １２  コマンド生成部、  １４  切替命令発行部、  ２０  メインメモリ、  ２２  コマンドバッファ、  ２３  描画コマンド、  ２４  画像変換コマンド、  ２５  フリップコマンド、  ３０  グラフィックスプロセッサ、  ３２  描画処理部、  ３５  画像変換部、  ４０  ローカルメモリ、  ４３  ユーザ管理バッファ、  ４５  ライブラリ管理領域、  ４７  フレームメモリ、  ５０  ディスプレイコントローラ、  ６０  ディスプレイ、  ７０  テクスチャユニット、  ８０  通信部、  １００  描画処理装置。
【図１】
2008197394.tif 000003
【図２】
2008197394.tif 000004
【図３】
2008197394.tif 000005
【図４】
2008197394.tif 000006
【図５Ａ】
2008197394.tif 000007
【図５Ｂ】
2008197394.tif 000008
【図６】
2008197394.tif 000009
【図７】
2008197394.tif 000010
【図８】
2008197394.tif 000011
【図９】
2008197394.tif 000012
【図１０Ａ】
2008197394.tif 000013
【図１０Ｂ】
2008197394.tif 000014
【図１０Ｃ】
2008197394.tif 000015