画像変換装置および画像変換方法
【課題】グラフィックスプロセッサによって描画される画像をディスプレイの仕様に適した画像に変換するのは難しい。
【解決手段】画像変換部35は、描画処理部32によって所与の垂直同期周波数で描画された画像をディスプレイの仕様に適した画像に変換する。フレームメモリ47は、画像変換部35により変換された画像を複数のフレームバッファを切り替えながら保持する。ディスプレイコントローラ50は、ディスプレイの垂直同期周波数にしたがっていずれかのフレームバッファを選択して画像をフレームメモリ47からスキャンアウトする。切替命令発行部14は、次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、画像変換部35による画像変換処理の実行直後ではなく、ディスプレイの垂直同期タイミングに合わせて発行する。
【解決手段】画像変換部35は、描画処理部32によって所与の垂直同期周波数で描画された画像をディスプレイの仕様に適した画像に変換する。フレームメモリ47は、画像変換部35により変換された画像を複数のフレームバッファを切り替えながら保持する。ディスプレイコントローラ50は、ディスプレイの垂直同期周波数にしたがっていずれかのフレームバッファを選択して画像をフレームメモリ47からスキャンアウトする。切替命令発行部14は、次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、画像変換部35による画像変換処理の実行直後ではなく、ディスプレイの垂直同期タイミングに合わせて発行する。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、描画処理技術に関し、特に表示装置に適した画像データを生成するための描画処理技術に関する。
【背景技術】
【0002】
液晶ディスプレイやプラズマディスプレイなどの薄型ディスプレイ製造技術が向上し、価格が低下してきたことにつれて、現在では、多種多様な表示装置が身の回りに存在する。ディスプレイ装置には、DVDプレイヤにより再生された高画質の映像が表示されたり、コンピュータグラフィックスにより生成された動画像が表示される。
【0003】
コンピュータやDVDプレイヤから出力される画像データを表示装置に表示するためには、画像信号の水平周波数や垂直周波数などを変換することにより、画像信号を表示装置の仕様に整合する形式に変換するコンバータの機能をもつディスプレイコントローラが必要である。
【0004】
また、NTSC/PAL/SECAMのテレビジョン方式のディスプレイに画像を出力するには、NTSC/PAL/SECAMの垂直同期周波数に合わせて画像を出力する必要があり、グラフィックスプロセッサによって描画された画像の解像度やフレームレートを変換する処理が必要となる。
【発明の開示】
【発明が解決しようとする課題】
【0005】
表示装置の種類によって、表示可能な画像信号の仕様、例えば、フレームレートや解像度などが異なる。ディスプレイコントローラが出力先の表示装置の仕様に合わせて画像信号を変換するためには、各種のコンバータが必要となり、回路規模が大きくなり、製造コストがかさむという問題がある。また、ハードウエアでコンバータを構成して出荷すると、新しいディスプレイの技術や規格にすぐには対応することができないため、柔軟性や拡張性が制限される。
【0006】
また、グラフィックスプロセッサにより画像が描画される際の垂直同期信号と表示装置に画像が表示される際の垂直同期信号のタイミングがずれることが、画像のフレームレート変換処理に不測の影響を及ぼすことがあり、表示装置に表示される画像の品質を維持することは難しい。
【0007】
本発明はこうした課題に鑑みてなされたものであり、その目的は、グラフィックスプロセッサにより描画される画像を表示装置の仕様に適した画像に変換することのできる画像変換技術を提供することにある。
【課題を解決するための手段】
【0008】
上記課題を解決するために、本発明のある態様の画像変換装置は、グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を保持する第1フレームメモリと、前記第1フレームメモリに保持された画像をディスプレイの仕様に適した画像に変換する画像変換部と、前記画像変換部により変換された画像を複数のフレームバッファを切り替えながら保持するフレームメモリであって、前記ディスプレイの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第2フレームメモリと、次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換部による画像変換処理の実行直後ではなく、前記ディスプレイの垂直同期タイミングに合わせて発行する切替命令発行部とを含む。
【0009】
本発明の別の態様もまた、画像変換装置である。この装置は、グラフィックスプロセッサによって描画される画像をテレビジョン方式の画像に変換する装置であって、グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を保持する第1フレームメモリと、前記第1フレームメモリに保持された画像を出力先のテレビション方式の画像に変換する画像変換部と、前記画像変換部により変換された画像を複数のフレームバッファを切り替えながら保持するフレームメモリであって、出力先のテレビジョンの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第2フレームメモリと、次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換部による画像変換処理の実行直後ではなく、出力先のテレビジョンの垂直同期タイミングに合わせて発行する切替命令発行部とを含む。
【0010】
本発明のさらに別の態様は、画像変換方法である。この方法は、グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を第1フレームメモリに保持するステップと、前記第1フレームメモリに保持された画像をディスプレイの仕様に適した画像に変換する画像変換処理ステップと、切り替え可能な複数のフレームバッファを有するフレームメモリであって、前記ディスプレイの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第2フレームメモリに前記画像変換処理ステップにより変換された画像を保持するステップと、次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換処理ステップによる画像変換処理の実行直後ではなく、前記ディスプレイの垂直同期タイミングに合わせて発行するステップとを含む。
【0011】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラム、データ構造、記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0012】
本発明によれば、グラフィックスプロセッサにより描画される画像を表示装置の仕様に適した画像に変換することができる。
【発明を実施するための最良の形態】
【0013】
図1は、実施の形態に係る描画処理装置100の構成図である。描画処理装置100は、描画対象となるオブジェクト(以下、単に「オブジェクト」という)の3次元モデル情報にもとづいて画面に表示するための描画データを生成するレンダリング処理を行う。同図は機能に着目したブロック図を描いており、これらの機能ブロックはハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現することができる。
【0014】
描画処理装置100は、メインプロセッサ10、メインメモリ20、グラフィックスプロセッサ30、ローカルメモリ40、ディスプレイコントローラ50、ディスプレイ60、テクスチャユニット70、および通信部80を含む。これらは図示しないバスに接続されている。
【0015】
メインメモリ20は、主にメインプロセッサ10によって使用される記憶領域であり、オブジェクトの頂点データや制御パラメータが記憶される。
【0016】
メインプロセッサ10は、オブジェクトのジオメトリ演算処理などを行い、グラフィックスプロセッサ30に対してオブジェクトの描画を指示する描画コマンドを生成する。
【0017】
メインプロセッサ10は、コマンド生成部12と切替命令発行部14の機能を有する。コマンド生成部12は、描画コマンドを生成してコマンドバッファに蓄積する。コマンドバッファに蓄積された描画コマンドはグラフィックスプロセッサ30によって読み出され、実行される。グラフィックスプロセッサ30によって描画された画像はフレームメモリ47に蓄積される。切替命令発行部14は、マルチバッファで構成されるフレームメモリ47の切り替えタイミングと切り替え先のバッファを指示するための切替命令を発行する。
【0018】
ローカルメモリ40は、主にグラフィックスプロセッサ30によって使用される記憶領域であり、描画アルゴリズムを実行するためのシェーダプログラムやオブジェクトの表面に貼り付けるためのテクスチャなどが記憶される。また、ローカルメモリ40内には描画データの中間結果や最終結果を保持するためのフレームバッファが設けられる。
【0019】
ローカルメモリ40内に設けられるフレームバッファには、ユーザ管理バッファ43とライブラリ管理領域45がある。ユーザ管理バッファ43はアプリケーションによって利用されるユーザ領域であり、ライブラリ管理領域45はグラフィックスライブラリによって管理される領域である。
【0020】
グラフィックスプロセッサ30は、オブジェクトをレンダリングして描画データを生成し、ローカルメモリ40に描画データを格納する。グラフィックスプロセッサ30は、描画処理部32と画像変換部35の機能を有する。これらの機能はプログラマブルシェーダの機能の一部として提供される。
【0021】
描画処理部32は、メインプロセッサ10から指示される描画コマンドにしたがって、オブジェクトに対してシェーディング、テクスチャマッピングなどの様々な描画演算処理を行い、描画データをローカルメモリ40内のユーザ管理バッファ43に書き出す。
【0022】
描画処理部32は、テクスチャマッピングを行う場合は、テクスチャユニット70のテクスチャマッピング機能を利用する。テクスチャユニット70は、ローカルメモリ40に記憶されたテクスチャデータを読み出し、オブジェクト表面にマッピングすべきテクスチャの値をバイリニア補間などにより求め、描画処理部32に与える。
【0023】
画像変換部35は、描画処理部32により生成された描画データをディスプレイ60の仕様に適した表示画像データに変換するためのソフトウエアモジュールである。このソフトウエアモジュールは、グラフィックスプロセッサ30用に提供される画像変換ライブラリの形態でプログラマに提供される。
【0024】
画像変換部35は、描画処理部32により生成された描画データをユーザ管理バッファ43から読み出し、フィルタリング処理を施し、ディスプレイ60の仕様に適した表示画像データに変換する。フィルタリングの一例として、解像度変換、色空間変換、ガンマ補正、ダウンサンプリング、時間軸フィルタリング(temporal filtering)、アンチエイリアシング、モーションブラーなどがある。
【0025】
ここで、解像度変換は、たとえば、出力先のディスプレイ60のアスペクト比の違いに対応したり、SD(Standard Definition)画像とHD(High Definition)画像の間で変換する際に行われるものであり、画素の補間処理を伴う。画像変換部35は、テクスチャユニット70のバイリニア補間の機能を利用して、解像度変換の際に必要となる画素値を周囲の画素値から補間して求める。すなわち、テクスチャユニット70は、解像度変換前の画像をテクスチャとしてサンプリングし、画素をバイリニア補間して解像度変換後の画像の画素データを生成する。
【0026】
時間軸フィルタリングは、たとえば、画像のフレームを落としたり、2枚のフレーム画像を合成して時間軸方向に補間されたフレーム画像を生成するなどにより、時間軸方向に画像をフィルタリングすることである。グラフィックスプロセッサ30が描画する際に前提とする垂直同期周波数と、ディスプレイ60の実際の垂直同期周波数とが一致しない場合、この時間軸フィルタリングにより画像のフレームレートを変換する。
【0027】
画像変換部35は、画像変換処理にあたってローカルメモリ40内のライブラリ管理領域45に設けられたフレームメモリ47を中間データの保持のために利用し、変換処理後の表示画像データをフレームメモリ47に書き込む。
【0028】
ライブラリ管理領域45に設けられたフレームメモリ47は、表示画像データの書き込みと読み出しを独立に行えるように、ダブルバッファやトリプルバッファなどのマルチバッファで構成され、ディスプレイコントローラ50によって読み出し中のバッファとは別のバッファに次のフレームの表示画像データが書き込まれる。ディスプレイコントローラ50は、ディスプレイ60の垂直同期周波数(「リフレッシュレート」とも呼ばれる)に合わせて、マルチバッファで構成されるフレームメモリ47を順次切り替えてスキャンする。
【0029】
ディスプレイコントローラ50は、切替命令発行部14により発行された切替命令に応じてマルチバッファで構成されたフレームメモリ47を切り替えながらスキャンして表示画像データを読み出す。
【0030】
ディスプレイコントローラ50によるフレームメモリ47のスキャン動作をより詳しく説明する。ディスプレイコントローラ50は、フレームメモリ47から表示画像データのピクセルデータをライン状に順次読み込む。すなわち、ディスプレイコントローラ50は、フレームメモリ47の左上隅の画素から水平方向にスキャンし、最初の横一列の画素データを読み出す。次に、垂直方向に1画素だけ移動して、次の横一列の画素を読み出す。最下段の画素列までスキャンが終わると、再び最上段の画素列から同様のスキャンを行う。
【0031】
ここで、フレームメモリ47は、マルチバッファで構成されているため、ディスプレイコントローラ50は、ディスプレイ60の垂直同期信号(VSYNC;vertical synchronizing signal)に合わせて発生する切替信号に応じて、表示画像データをスキャンするフレームバッファを切り替える。ディスプレイコントローラ50は、垂直同期信号のタイミングで、それまでスキャンしていた第1のフレームバッファから第2のフレームバッファに切り替え、第2のフレームバッファから表示画像データを読み出す。
【0032】
ディスプレイコントローラ50は、このようにしてフレームメモリ47から読み出したRGBのカラー値からなる表示画像データをディスプレイ60に対応したフォーマットの画像信号に変換してディスプレイ60に供給する。
【0033】
ディスプレイ60は、コンピュータ向けのCRTディスプレイや液晶ディスプレイなどのいわゆる「コンピュータディスプレイ」であってもよく、あるいは、テレビジョン受信機向けのブラウン管ディスプレイ、液晶ディスプレイ、プラズマディスプレイなどのいわゆる「テレビディスプレイ」であってもよい。
【0034】
なお、グラフィックスプロセッサ30とメインプロセッサ10は図示しない入出力インタフェースを介して接続されており、グラフィックスプロセッサ30は、入出力インタフェースを介してメインメモリ20にアクセスすることができ、逆に、メインプロセッサ10は、入出力インタフェースを介してローカルメモリ40にアクセスすることができる。
【0035】
通信部80は、メインプロセッサ10からの命令にしたがって、ネットワーク経由でデータを送受信することができる。通信部80により送受信されるデータは、メインメモリ20に保持される。
【0036】
図2は、グラフィックスプロセッサ30の画像変換処理に係る構成を詳細に説明する図である。同図を参照しながら、画像変換処理の動作を具体的に説明する。
【0037】
メインプロセッサ10のコマンド生成部12は、オブジェクトを描画するための描画コマンド23を生成し、コマンドバッファ22に蓄積する。描画コマンド23はグラフィックスプロセッサ30の描画処理部32により順次読み出されて実行され、ユーザ管理バッファ43に描画データが書き込まれる。
【0038】
コマンド生成部12は、描画コマンド23を生成する際、解像度変換やフレームレート変換などの各種フィルタリング処理を行うための関数とパラメータを指定する画像変換コマンド24と、マルチバッファで構成されるフレームメモリにおいて次に読み出すバッファを指定するフリップコマンド25とを生成し、画像変換コマンド24とフリップコマンド25を描画コマンド23に付加してコマンドバッファ22に蓄積する。
【0039】
画像変換部35は、画像変換コマンド24をコマンドバッファ22から読み出し、ユーザ管理バッファ43に保持された画像に対して各種のフィルタリング処理を施し、ライブラリ管理領域45内のダブルバッファ92a、92bで構成されるフレームメモリ47に変換後の画像を書き込む。切替命令発行部14は、フリップコマンド25をコマンドバッファ22から読み出して実行し、切替部76に読み出し先のバッファを切り替えるための切替信号を与える。ディスプレイコントローラ50は、切替部76により選択された読み出し先のバッファから画像をスキャンアウトする。
【0040】
画像変換部35によるフィルタリング処理にフレームレート変換処理が含まれる場合は、現在のフレーム以外に過去のフレームをフレームメモリ47に保持する必要がある。そのため、フレームメモリ47は、解像度変換などフレームレート変換以外のフィルタリング処理後のフレーム画像を少なくとも2枚保持するための第1フレームメモリと、第1フレームメモリに保持された少なくとも2枚のフレーム画像を用いてフレームレート変換を施し、フレームレート変換後のフレーム画像を保持するための第2フレームメモリの二つの領域に分けて用いられる。
【0041】
ここでは、一般的な構成としてフリップコマンド25をコマンドバッファ22にキューイングしている形態を図示しているが、後述のように、本実施の形態では、フリップコマンド25をコマンドバッファ22にキューイングする代わりに、フリップ動作をドライバに実行させる関数をコールバックする方法を採用する。メインプロセッサ10の切替命令発行部14は、フリップコマンド25を画像変換部35による画像変換処理の実行直後ではなく、ディスプレイ60の垂直同期信号のタイミングに合わせて確定的なタイミングで発行されるように設定する。フリップ関数は、タイマ割り込みにより自動的に呼び出される。
【0042】
画像変換部35によるフレームレート変換処理は、5つのモードのいずれかで動作する。まず、基本的な3つのモードを挙げる。
(1)フレームレート無変換モード
描画処理部32によって所与の垂直同期周波数で描画された画像のフレームレートを全く変換しないモードである。
(2)フレームドロップモード
描画処理部32によって所与の垂直同期周波数で描画されたフレームを間引きするモードである。
(3)フレーム補間モード
描画処理部32によって所与の垂直同期周波数で描画された2枚の画像を所定の合成係数で合成するモードである。
【0043】
これら3つの基本モードの他、以下の2つの拡張モードがある。
(4)スロー時ドロップモード
描画処理が垂直同期周期一つ分(1VSYNC)以内で完了する平常時はフレーム補間を行い、描画処理に垂直同期周期二つ分(2VSYNC)かかるようなスロー時にはフレームを落とすモードである。
【0044】
(5)可変混合モード
フレーム補間の合成係数を調整することでフレーム補間モードと実質的なフレームドロップモードを混合するモードである。
【0045】
画像変換部35のフレームレート変換の各動作モードを図面を参照しながら説明する。以下では、簡単のため、画像変換部35は解像度変換とフレームレート変換を行う場合を説明するが、解像度変換以外のフィルタリングを行う場合も同様である。
【0046】
図3(a)、(b)は、画像変換部35がフレームレート無変換モードで動作する場合を説明する図である。
【0047】
描画処理部32により描画された画像がユーザ管理バッファ43に保持される。画像変換部35は、ユーザ管理バッファ43に保持された変換元画像SRCに対して解像度変換処理を施し、変換された画像DSTをライブラリ管理領域45のフレームメモリ47に書き込む。フレームメモリ47は、ダブルバッファ92a、92bで構成されており、奇数フレームでは、画像変換部35が変換画像DSTを左バッファ92aに書き込む間、ディスプレイコントローラ50は、表示すべき画像SCANOUTを右バッファ92bからスキャンアウトする(図3(a))。偶数フレームでは、画像変換部35が変換画像DSTを右バッファ92bに書き込む間、ディスプレイコントローラ50は、表示すべき画像SCANOUTを左バッファ92aからスキャンアウトする(図3(b))。
【0048】
フレーム無変換モードでは、グラフィックスプロセッサ30の垂直同期周波数で描画された画像のフレームレートは変更されずにディスプレイ60に出力される。グラフィックスプロセッサ30がNTSC方式の垂直同期周波数で描画しており、ディスプレイ60がNTSC方式のテレビであれば、または、グラフィックスプロセッサ30がPAL方式の垂直同期周波数で描画しており、ディスプレイ60がPAL方式のテレビであれば、画像変換部35をフレーム無変換モードで動作させればよい。
【0049】
フレーム無変換モードでは、フレームメモリ47は、書き込み用のバッファ1枚と読み出し用のバッファ1枚の合計2枚のダブルバッファで構成すればよい。
【0050】
図4は、画像変換部35がフレームドロップモードで動作する場合を説明する図である。フレームドロップモードでは、描画処理部32が描画する画像のフレームレートが、ディスプレイ60のフレームレートよりも速く、描画処理部32により描画されたフレーム画像が間引きされる。ライブラリ管理領域45に設けられたフレームメモリ47は、3つのバッファ92a、92b、92cで構成される。画像変換部35は既に左バッファ92aに変換画像DSTの書き込みを完了し、今、ユーザ管理バッファ43に保持された変換元画像SRCを解像度変換して中央バッファ92bに書き込んでいる。このとき、ディスプレイコントローラ50は、表示すべき画像SCANOUTを右バッファ92cからスキャンアウトしている。
【0051】
画像変換部35は、描画処理部32が描画する画像のフレームレートとディスプレイ60に表示される画像のフレームレートの違いを吸収するために、フレームの間引きを行う。たとえば、ディスプレイコントローラ50は、切替命令発行部14から発行される切替命令にしたがって、次にスキャンアウトされるべき画像を右バッファ92aではなく、中央バッファ92bから読み出すことにより、右バッファ92aに保持されたフレームを間引きする。
【0052】
このように、フレームドロップモードでは、グラフィックスプロセッサ30の垂直同期周波数で描画された画像について意図的にフレーム落ちを生じさせることで、ディスプレイ60の垂直同期周波数に合ったフレームレートの画像に変換される。たとえば、グラフィックスプロセッサ30がNTSC方式の垂直同期周波数59.94Hz(ヘルツ)で描画し、出力先のディスプレイ60がPAL方式の垂直同期周波数50Hzである場合、およそ6フレーム毎に1枚のフレームを落とすことで画像のフレームレートを59.94Hzから50Hzに変換することができる。
【0053】
フレームドロップモードでは、描画垂直同期周波数が表示垂直同期周波数より大きいため、フレームの書き込みとフレームの読み出しが同期せず、フレームの書き込みが先行して行われることになるため、書き込み用のバッファを2フレーム分用意する必要がある。したがって、書き込み用のバッファ2枚と読み出し用のバッファ1枚の合計3枚のトリプルバッファでフレームメモリ47を構成する必要がある。
【0054】
フレームドロップモードは、簡単にフレームレート変換を実現できる点で有利であるが、フレーム落ちによって動画が不連続に見えるというデメリットがある。
【0055】
図5A、図5Bは、画像変換部35がフレーム補間モードで動作する場合を説明する図である。図5Aは、画像変換部35が奇数フレームについて画像変換する様子を示し、図5Bは、画像変換部35が偶数フレームについて画像変換する様子を示す。
【0056】
ライブラリ管理領域45は、グラフィックスプロセッサ30が描画するときに前提とする垂直同期周波数(以下、「描画垂直同期周波数」という)で画像が書き込まれる第1フレームメモリ47aと、ディスプレイ60に画像が表示される差異の実際の垂直同期周波数(以下、「表示垂直同期周波数」という)で画像がスキャンアウトされる第2フレームメモリ47bを含む。ここでは、描画垂直同期周波数はNTSC方式の59.94Hz、表示垂直同期周波数は、PAL方式の50Hzであるとする。
【0057】
画像変換部35は、ユーザ管理バッファ43に保持された変換元画像SRCを解像度変換し、変換画像を第1フレームメモリ47aに書き込む。第1フレームメモリ47aは、現在のフレームCURRと、一つ前のフレームPREVを保持するために、ダブルバッファ90a、90bで構成される。図5Aでは、左バッファ90aに現在のフレームCURRが、右バッファ90bに一つ前のフレームPREVが保持されている。画像変換部35が左バッファ90aに書き込んだ現在のフレームCURRは、次の垂直同期信号のタイミングでは、図5Bに示すように、一つ前のフレームPREVとして用いられる。
【0058】
画像変換部35は、現在のフレームCURRと、過去のフレームPREVとを所定の合成係数Tで合成することにより、補間フレームDSTを生成し、第2フレームメモリ47bに書き込む。合成係数Tは、グラフィックスプロセッサ30の描画垂直同期信号とディスプレイ60の表示垂直同期信号のずれにもとづく値であり、0から1までの値を取る。このフレーム補間処理は、合成係数Tをアルファ値として2枚のフレームを合成する「アルファブレンディング」であり、シェーダの線形補間機能を用いて実行することができる。
【0059】
なお、変換元画像SRCを解像度変換して第1フレームメモリ47aに現在のフレームCURRとして書き込む処理と、第1フレームメモリ47aから現在のフレームCURRと過去のフレームPREVを読み出して合成係数Tで合成する処理とを同時に実行すると、現在のフレームCURRを保持するバッファへの書き込みと読み出しが競合する。競合を避けるためには、マルチパスレンダリング(Multi-Pass Rendering)が可能なシェーダにおいて、書き込み処理と読み出し処理を別々のパス(pass)に分けて2パスで処理を実行しなければならなくなる。そのオーバーヘッドを避けるために、複数のバッファに同時にレンダリングすることのできるマルチレンダーターゲット(Multi-Render Target)と呼ばれる技術を用いて、書き込み先のバッファを二つにすることでシェーダの1パスでこれら二つの処理を実行することを可能にする。
【0060】
すなわち、シェーダは、変換元画像SRCを解像度変換して第1フレームメモリ47aに現在のフレームCURRとして書き込む処理を行うとともに、変換元画像SRCを解像度変換した結果と過去のフレームPREVとを合成して補間フレームDSTを第2フレームメモリ47bに書き込む処理を行う。変換元画像SRCを変換して現在のフレームCURRを生成する処理に複雑な画像処理が含まれる場合は、この手法を適用することは難しいが、ここでは変換元画像SRCから現在のフレームCURRへの変換は、簡単な解像度変換だけであるから、マルチレンダーターゲットの技術を用いて余分なオーバーヘッドをなくすことができる。
【0061】
画像変換部35がフレーム補間を行って、第2フレームメモリ47bの一つのバッファ92aに補間フレームDSTを書き込んでいる間、ディスプレイコントローラ50は、表示すべきフレームSCANOUTを第2フレームメモリの別のバッファ92bからスキャンアウトする。
【0062】
図5Bを参照して、偶数フレームの変換処理を説明する。画像変換部35が解像度変換後の現在のフレームCURRを第1フレームメモリ47aの右バッファ90bに書き込む。画像変換部35は、右バッファ90bに保持された現在のフレームCURRと、左バッファ90aに保持された一つ前のフレームPREVを所定の合成係数Tで合成し、第2フレームメモリ47bの一つのバッファ92bに補間されたフレームDSTを書き込む。ディスプレイコントローラ50は、表示すべきフレームSCANOUTを別のバッファ92aからスキャンアウトする。なお、実際は4つのバッファ92a〜92dの内、空いているバッファから順に使用される。
【0063】
合成係数Tを描画垂直同期信号と表示垂直同期信号のずれに応じた値に設定することで、グラフィックスプロセッサ30の描画垂直同期周波数で描画された2枚のフレームがディスプレイ60の表示垂直同期周波数に合ったフレームに補間される。
【0064】
フレーム補間モードでは、第2フレームメモリ47bを4つのバッファ92a〜92dで構成することが好ましいが、その理由については後述する。
【0065】
図6(a)、(b)を参照して、描画垂直同期周波数と表示垂直同期周波数の比が整数比である場合と、整数比でない場合で、垂直同期信号のタイミングのずれ方に違いがあることを説明する。
【0066】
図6(a)は、描画垂直同期周波数が60Hz、表示垂直同期周波数が50Hzである場合のそれぞれの垂直同期信号のタイミングを図示する。描画垂直同期周波数と表示垂直同期周波数の比は6:5であるから、描画垂直同期信号が6回発生する時間Tの間に、表示垂直同期信号は5回発生する。したがって、時間T毎に描画垂直同期信号と表示垂直同期信号は同期する。
【0067】
図6(b)は、描画垂直同期周波数が59.94Hz、表示垂直同期周波数が50Hzである場合のそれぞれの垂直同期信号のタイミングを図示する。描画垂直同期周波数と表示垂直同期周波数の比は整数比にならないから、描画垂直同期信号が6回発生する時間T1と、表示垂直同期信号が5回発生する時間T2の間には、短い時間差dが生じる。この短い時間差dがあるために、描画垂直同期信号と表示垂直同期信号は同期することがなく、絶えず微妙な時間差が生じる。このため、50Hzの表示垂直同期信号のタイミング、すなわちフレームバッファからフレームをスキャンアウトするタイミングは、59.94Hzの描画垂直同期信号のタイミングに対して相対的に任意のずれをもちうることになり、スキャンアウトを開始するタイミングを描画垂直同期信号に対して固定したタイミングに決め打ちすることはできない。
【0068】
図7(a)、(b)は、描画垂直同期周波数と表示垂直同期周波数の比が整数比でない場合、スキャンアウトのタイミングが1フレーム分ずれる現象を説明する図である。グラフィックスプロセッサ30は、59.94Hzで発生する描画垂直同期信号(以下、「描画Vシンク」という)VN1、VN2、VN3のタイミングで描画コマンド、画像変換コマンド、およびフリップコマンドを連続して実行する。同図は、描画、画像変換、およびフリップにかかる時間が棒グラフで表示されている。一方、ディスプレイコントローラ50は50Hzで発生する表示垂直同期信号(以下、「表示Vシンク」という)VP1、VP2のタイミングで読み出し先のバッファを切り替えて画像をスキャンアウトする。
【0069】
図7(a)では、グラフィックスプロセッサ30によって描画、画像変換、およびフリップが完了する時間は、第1の表示VシンクVP1のタイミングよりも前であるから、スキャンアウトはその表示VシンクVP1のタイミングで開始される。
【0070】
図7(b)では、グラフィックスプロセッサ30によって描画処理に時間がかかったため、描画、画像変換、およびフリップが完了する時間は、第1の表示VシンクVP1のタイミングよりも後になる。この場合は、第1の表示VシンクVP1のタイミングではスキャンアウトを開始することができないから、スキャンアウトは第2の表示VシンクVP2のタイミングまで待たされる。
【0071】
グラフィックスプロセッサ30による描画処理にかかる時間は、描画対象の複雑さに応じて異なるため、描画と変換処理が完了するのが、第1の表示VシンクVP1の前になるか、後になるかは、前もって予測することはできない。そのため、スキャンアウトするタイミングが第1の表示VシンクVP1になったり、第2の表示VシンクVP2になったりして不確定になる。第1の表示VシンクVP1でスキャンアウトされると仮定して補間したフレームが、第2の表示VシンクVP2でスキャンアウトされると、補間係数が合っていないために動画の連続性が損なわれ、画質が劣化する。
【0072】
また、仮にグラフィックスプロセッサ30による描画処理時間が一定であったとしても、図6(b)で説明したように、50Hzの表示Vシンクは59.94Hzの描画Vシンクに対して微小なずれを時間経過とともに徐々に累積させていくため、表示VシンクVP1の前で実行されていたフリップコマンドであっても、微小なずれの累積により、やがては表示VシンクVP1の後で実行されることになる。
【0073】
このように描画処理時間が不定であることと、描画垂直同期周波数と表示垂直同期周波数の比が正確には整数比ではないことが原因で、フリップ動作のタイミング、言い換えれば、読み出し先のバッファの切り替えのタイミングが不確定になる。
【0074】
このようなフリップ動作の不確定性を避けるため、本実施の形態では、フリップコマンドを描画処理と画像変換処理が終わった直後に実行するのではなく、フリップコマンドの実行を描画処理と画像変換処理から切り離し、フリップコマンドを確定的なタイミングで実行する。
【0075】
図8は、本実施の形態におけるフリップコマンドの実行タイミングを説明する図である。メインプロセッサ10とグラフィックスプロセッサ30は、59.94Hzの描画垂直同期信号周波数で描画を実行する。すなわち、描画VシンクVN1〜VN3の発生タイミングで描画が開始される。一方、ディスプレイコントローラ50は、50Hzの表示垂直同期周波数でスキャンアウトを実行する。すなわち、表示VシンクVP1、VP2の発生タイミングで読み出し先のバッファを切り替えてスキャンアウトが開始される。
【0076】
メインプロセッサ10は、描画VシンクVN1のタイミングαで、描画コマンドと画像変換コマンドを生成する(ステップS1)。メインプロセッサ10は、グラフィックスプロセッサ30による描画処理と画像変換処理の完了が見込まれる最初の描画Vシンク(「目標Vシンク」という)のタイミングを仮定する。ここでは、2番目の描画VシンクVN2を目標Vシンクと仮定し、この目標VシンクVN2のタイミングβまでには、描画・変換処理が完了すると仮定する。
【0077】
次に、メインプロセッサ10は、目標VシンクVN2のタイミングβの直後に発生する表示Vシンク(「直後Vシンク」という)と、目標Vシンクのタイミングβの直前に発生する表示Vシンク(「直前Vシンク」という)のタイミングをそれぞれ取得する。ここでは、直後Vシンクは2番目の表示VシンクVP2であり、直前Vシンクは1番目の表示VシンクVP1である。
【0078】
各表示Vシンクのタイミングに対して所定の先行時間AT(Anticipatory Time)だけ前のタイミングを先行Vシンク(Anticipatory VSYNC)という。直後VシンクVP2のタイミングbより先行時間ATだけ前に直後先行VシンクAVP2が定められ、直前VシンクVP1のタイミングaより先行時間ATだけ前に直前先行VシンクAVP1が定められる。
【0079】
メインプロセッサ10は、目標VシンクVN2のタイミングβが、直後VシンクVP2に対して定められた直後先行VシンクAVP2のタイミングBからずれている割合をもとに、フレーム補間の合成係数Tを求める。具体的には、直後先行VシンクAVP2のタイミングBと、直前先行VシンクAVP1のタイミングAで挟まれる区間において、目標VシンクVN2のタイミングβの相対位置を求める。直前先行VシンクAVP1のタイミングAを0として、直後先行VシンクAVP2のタイミングBを1として、目標VシンクVN2のタイミングβの相対位置を0から1までの値で求め、その値を合成係数Tとする。同図では、目標VシンクVN2のタイミングβの相対位置は0.4であり、合成係数Tの値は0.4になる。
【0080】
直前先行VシンクAVP1から直後先行VシンクAVP2までの時間は、表示垂直同期周期の20ミリ秒であるから、直後先行VシンクAVP2の発生時刻をTB、目標VシンクVN2の発生時刻をTβとすると、合成係数Tは次式で計算される。
T={20−(TB−Tβ)}/20
【0081】
メインプロセッサ10のコマンド生成部12は、このようにして求めた合成係数Tの値をもとに画像変換コマンド24を生成する。また、コマンド生成部12は、後段の目標VシンクVNの正誤判定に必要な値と、フリップに必要な情報をパケット化してパケットキューにキューイングする。
【0082】
グラフィックスプロセッサ30の描画処理部32は描画コマンドにもとづいて描画処理を実行し、画像変換部35は画像変換コマンドにもとづいて画像変換処理を実行する(ステップS2)。なお、ここでは、理解し易いように、メインプロセッサ10による描画・変換コマンドの生成と、グラフィックスプロセッサ30による描画・変換処理とが、同一の垂直同期周期内で実行されているように図示したが、実際には、ある垂直同期周期においてメインプロセッサ10により生成された描画・変換コマンドを次の垂直同期周期においてグラフィックスプロセッサ30が実行するのが通常である。
【0083】
画像変換部35による画像変換処理には解像度変換とフレームレート変換が含まれる。フレームレート変換は、フレーム補間モードで実行される。画像変換部35は、メインプロセッサ10により求められた合成係数Tで2枚のフレームを合成する。具体的には、一つ前のフレームPREVと現在のフレームCURRを画素毎に線形補間式DST=T*PREV+(1−T)*CURRにより、補間して、補間フレームDSTを求める。
【0084】
ここで、上記の線形補間式の意味を説明する。本来は、2枚のフレームを合成する合成係数Tは、描画VシンクVN2のタイミングβと描画VシンクVN3のタイミングγで挟まれる区間において、直後先行VシンクAVP2のタイミングBの相対位置により求めるのが自然である。同図に示すように、直後先行VシンクAVP2のタイミングBが、描画VシンクVN2のタイミングβと描画VシンクVN3のタイミングγで挟まれる区間を(1−T’):T’で内分する場合、補間フレームDSTは、線形補間式DST=T’*PREV+(1−T’)*CURRによって補間して求めることができる。しかしながら、描画VシンクVNの周期は、表示VシンクVPの周期よりも短いため、この線形補間式では不都合が生じる。なぜなら、2つの描画VシンクVNの間に直後先行VシンクAVPが存在しない状況が発生することがあるからである。たとえば、描画Vシンクが59.94Hz、表示Vシンクが50Hzで発生する場合、およそ6回に1回の割合で、このような状況が発生する。
【0085】
そこで、表示Vシンクの周期が描画Vシンクの周期より長いことに着目して、目標VシンクVN2のタイミングβが、直前先行VシンクAVP1のタイミングAと直後先行VシンクAVP2のタイミングBで挟まれる区間に挿入される位置をもって合成係数Tを決めている。このようにすれば、2つの先行VシンクAVPのタイミング間の期間には必ず、目標VシンクVNのタイミングが存在するから、不都合は生じない。目標VシンクVN2のタイミングβは、同図に示すように、直前先行VシンクAVP1のタイミングAと直後先行VシンクAVP2のタイミングBで挟まれる期間をT:(1−T)で内分する点であり、こうして得られる合成係数Tは、上述の本来の合成係数T’に対する逆数的な意味合いをもっていることが理解される。本実施の形態の線形補間式DST=T*PREV+(1−T)*CURRは、本来の合成係数T’を用いた場合の線形補間式から導かれたものである。
【0086】
たとえば、合成係数Tが1であれば、補間フレームの画素のカラー値は、一つ前のフレームの画素のカラー値と同じになり、合成係数Tが0であれば、補間フレームの画素のカラー値は、現在のフレームの画素のカラー値と同じになる。合成係数Tが0.4であれば、補間フレームの画素のカラー値は、一つ前のフレームの画素のカラー値を40%、現在のフレームの画素のカラー値を60%で重み付けして合成した値になる。
【0087】
切替命令発行部14は、フリップコマンドを画像変換処理の直後ではなく、直後先行VシンクAVP2のタイミングBにおいて発行されるように設定する。ここで、直後VシンクVP2の発生タイミングbを「スキャンアウトタイミング」と呼び、そのスキャンアウトタイミングbよりも先行時間ATだけ前の直後先行VシンクAVP2の発生タイミングBを「フリップタイミング」と呼ぶことにする。
【0088】
切替命令発行部14は、フリップタイミングBにおいてフリップ関数が実行されるようにアプリケーションにコールバックを提供し、プロセスを一旦スリープさせる。すなわち、コマンドバッファにフリップコマンドをキューイングする代わりに、フリップ関数をシステムコールする方法を取る。スキャンアウトタイミングよりも先行時間ATだけ前のフリップタイミングにおいてフリップ動作をドライバに実行させる関数をコールする。実際のスキャンアウトタイミングよりも先行時間ATだけ余裕をもたせて前もってフリップ関数を呼び出すのは、スキャンアウトタイミングで関数呼び出しをすると、ドライバによる実際のフリップ動作がスキャンアウトのタイミングに間に合わなくなるからである。
【0089】
目標VシンクVN2のタイミングβにおいて、59.94Hz系の割り込み処理が発生する(ステップS3)。この割り込み処理において、パケットキューの先頭にある未マークのパケットを参照し、ステップ1において目標VシンクVN2のタイミングβまでに描画・変換処理が完了すると仮定したことが正しかったかどうかを検証する。仮定が正しかった場合、すなわち描画・変換処理が実際に目標VシンクVN2のタイミングβまでに完了していた場合、そのパケットに検証済みのマークを付ける。仮定が正しくなかった場合、すなわち描画・変換処理が目標VシンクVN2のタイミングβまでに完了しなかった場合は、フレーム落ちが生じることになる。この場合、合成係数Tを再計算してフレーム補間をやり直す例外処理を実行する。この例外処理については後述する。
【0090】
直後先行VシンクAVP2のタイミング(フリップタイミング)Bにおいて、割り込み処理が発生する(ステップS4)。この割り込み処理において、アプリケーションプロセスがタイマーで起床し、フリップ関数がシステムコールによって呼び出される。より具体的には、パケットキューの先頭のパケットが参照され、ステップS3の59.94Hz系の割り込み処理で検証済みのマークが付けられたパケットについて、フリップ関数が直ちに実行され、パケットはキューから取り除かれる。未マークのため処理の時期を逃してしまったパケットはこの段階でキューから取り除かれ、破棄される。
【0091】
先行時間ATの経過後、直後VシンクVP2のタイミング(スキャンアウト予定タイミング)bにおいて、50Hz系の割り込み処理が発生する(ステップS5)。この割り込み処理において、次の先行Vシンクのタイミングでアプリケーションプロセスを起こすためのタイマーが設定される。それと同時に、実際のフリップ動作が実行され、バッファが切り替えられ、合成係数Tで補間されたフレーム画像のスキャンアウトが開始される。
【0092】
以上説明したフレーム変換処理を念頭において、フレーム補間モードにおいて第2フレームメモリ47bが4つのバッファで構成される理由を説明する。描画垂直同期周波数が表示垂直同期周波数より大きいため、フレームの書き込みとフレームの読み出しが同期せず、フレームの書き込みが先行して行われることから、まず3枚のバッファが必要となる点は、フレームドロップモードの場合と同じである。さらに、フレーム補間モードでは、スキャンアウトタイミングよりも先行時間ATだけ前もってフリップ関数を呼び出すため、さらに1フレーム分のバッファリングをしておかなければならない。そのため、第2フレームメモリを合計4枚のバッファで構成する必要がある。先行時間ATがゼロであるなら、3枚のバッファでも足りるが、先行時間ATをゼロにすると、フリップ動作に支障を来すため、一定の先行時間ATを確保して、4枚のバッファをもたせることが好適である。
【0093】
次に、図9(a)、(b)を参照して、フレーム補間モードにおいて、フリップコマンドを画像変換処理の直後に実行せずに、画像変換処理から切り離したことによる効果を説明する。
【0094】
図9(a)では、グラフィックスプロセッサ30による描画・変換処理が第1の表示VシンクVP1よりも前に完了しているが、フリップコマンドはこのタイミングでは発行されず、画像変換処理の完了が見込まれる描画VシンクVN2の後に発生する第2の表示VシンクVP2の先行時間ATだけ前のタイミングで発行され、スキャンアウトは第2の表示VシンクVP2のタイミングで開始される。
【0095】
図9(b)のように、グラフィックスプロセッサ30による描画処理が長引いて、描画・変換処理が完了するのが、第1の表示VシンクVP1よりも後になった場合でも、フリップコマンドは図9(a)の場合と同様、第2の表示VシンクVP2の先行時間ATだけ前のタイミングで発行されるので、スキャンアウトは第2の表示VシンクVP2のタイミングで開始される。
【0096】
このように、描画処理時間の長短によって、描画・変換処理の完了時点が第1の表示VシンクVP1の前になったり、後になったりする場合でも、スキャンアウトは第2の表示VシンクVP2のタイミングで開始されるため、フリップ動作の不確定性をなくすことができる。
【0097】
図8では、描画・変換処理の完了が見込まれる目標VシンクVN2のタイミングβ(「見込みタイミング」という)を想定し、見込みタイミングβで実際に画像変換処理が完了していた場合を示したが、見込みタイミングβで画像変換処理が完了していない場合には、それ以降のフレーム補間処理を修正するフィードバックをかける例外処理が実行される。図10A、図10Bおよび図10Cを参照してこの例外処理を説明する。
【0098】
まず、比較のために図10Aに見込みタイミングで実際に画像変換処理が完了していた場合を示す。ステップ1〜ステップ5までの動作は図8で説明した通りである。この例では、目標VシンクVN2のタイミングβ(見込みタイミング)は、直前先行VシンクAVP1のタイミングAと直後先行VシンクAVP2のタイミングBで挟まれる区間において、0.9の位置にあり、合成係数Tは0.9に設定される。見込みタイミングβにおいて、描画・変換処理が予想通り完了したため、予定通り、スキャンアウトタイミングbに対して先行時間ATだけ手前のフリップタイミングBにフリップコマンドが発行され、スキャンアウトタイミングbにおいて合成係数T=0.9で補間されたフレームがスキャンアウトされる。
【0099】
図10Bは、見込みタイミングで実際には画像変換処理が完了していなかった場合の過渡的な状態を説明する図である。同図に示すように、グラフィックスプロセッサ30による描画処理に時間がかかり、ステップS3の見込みタイミングβにおける割り込み処理において、描画・変換処理が完了していないことが確認される。このとき、画像変換部35は新たに描画・変換処理の完了が見込まれる3番目の描画VシンクVN3を目標Vシンクとして、目標VシンクVN3のタイミングγを見込みタイミングに再設定し、一方、切替命令発行部14は、フリップコマンドを直後先行VシンクAVP3のタイミングCにおいて発行されるように設定する。
【0100】
見込みタイミングβにおいて描画・変換処理が完了しないことから、フレーム落ちが生じることになる。このとき、コマンド生成部12は、一つの描画・変換コマンドが何回の描画VシンクVN内で処理されたかを記憶する変数Iを1だけインクリメントする。変数Iの初期値は1である。変数Iはフレーム落ちが生じた回数に1を足した値になる。
【0101】
コマンド生成部12は、次の描画・変換コマンドを生成する際、変数Iの値を考慮して目標Vシンクを決めてコマンドバッファ22に蓄積する。1VSYNC内で正常に描画・変換コマンドが処理されている間は、変数Iは1であり、それ以降の描画・変換コマンドについて、目標Vシンクを1VSYNC内で設定する。変数Iが2であれば、描画・変換コマンドの処理に2VSYNCかかっていることになるから、それ以降の描画・変換コマンドについて、目標Vシンクを2VSYNC先に設定する。
【0102】
なお、実装上では、メインプロセッサ10による描画・変換コマンドの生成は、グラフィックスプロセッサ30による描画・変換コマンドの実行に先立って行われるから、何個の描画・変換コマンドを先行生成しているかも考慮して、目標Vシンクが設定される。すなわち、目標Vシンクは、先行して生成されたコマンド数に変数Iの値を乗じた値だけ先の描画Vシンクのタイミングに設定される。
【0103】
1VSYNC内で画像変換処理が完了せず、フレーム落ちが生じたとき、コマンド生成部12が、それ以降に生成される描画・変換コマンドについて目標Vシンクを変数Iにもとづいて設定するため、やがては正しい合成係数Tのもとでフレーム補間がなされる正常状態に復帰する。しかし、正常状態に復帰する前は、コマンド生成部12がいったん見込みタイミングβを仮定して生成した描画・変換コマンドを変更することはできないため、見込みタイミングβを前提として求めた合成係数Tをそのまま使ってフレーム補間が行われる。
【0104】
グラフィックスプロセッサ30による描画・変換処理は予想通り、新たな見込みタイミングγまでに完了する(ステップS2’)。目標VシンクVN3のタイミングγにおいて、59.94Hz系の割り込み処理が発生する(ステップS3’)。この割り込み処理において、再設定された目標VシンクVN3のタイミングγまでに描画・変換処理が完了すると仮定したことが正しかったことが検証される。
【0105】
直後先行VシンクAVP3のタイミング(フリップタイミング)Cにおいて、割り込み処理が発生し、フリップ関数がシステムコールによって呼び出される(ステップS4’)。先行時間ATの経過後、直後VシンクVP3のタイミング(スキャンアウトタイミング)bにおいて、50Hz系の割り込み処理が発生し、実際のフリップ動作が実行され、バッファが切り替えられ、合成係数T=0.9で補間されたフレーム画像のスキャンアウトが開始される(ステップS5’)。
【0106】
このように、描画・変換処理が1VSYNC内に完了せず、2VSYNCかかるような場合は、スキャンアウトのタイミングがずれ、もはや正しくはない合成係数Tのもとで補間されたフレームが出力されることになる。しかしこれは過渡的な状態に過ぎず、これ以降の描画・変換処理が定常的に2VSYNCかかるようになるなら、2VSYNCを前提として目標Vシンクが設定され、合成係数Tが正しく計算されるため、正常状態に復帰する。なお、実装上は、描画・変換コマンドが先行生成されるため、既に生成された描画・変換コマンドの処理が終わるまでは過渡的な状態が続くことになる。
【0107】
図10Cは、図10Bの過渡的な状態の後、正常状態に復帰する様子を説明する図である。ここでは、描画・変換処理が定常的に2VSYNCかかるようになった場合を説明する。
【0108】
コマンド生成部12は、描画VシンクVN6のタイミングαで、描画コマンドと画像変換コマンドを生成する(ステップS1)が、このとき、変数Iが2であることから、2VSYNC後の描画VシンクVN8を目標Vシンクに設定する。次に、コマンド生成部12は、目標VシンクVN8に対して、直前先行VシンクAVP6と直後先行VシンクAVP7を決める。
【0109】
コマンド生成部12は、目標VシンクVN8のタイミング(見込みタイミング)γが、直前先行VシンクAVP6のタイミングBと直後先行VシンクAVP7のタイミングCで挟まれる区間において、0.7の位置にあることから、合成係数Tを0.7に設定する。
【0110】
画像変換部35は、解像度変換処理(ステップS2)の後、コマンド生成部12により設定された合成係数T=0.7で2枚のフレームを合成する。
【0111】
一方、切替命令発行部14は、フリップコマンドを直後先行VシンクAVP7のタイミングCにおいて発行されるように設定する。
【0112】
グラフィックスプロセッサ30による描画・変換処理は予想通り、見込みタイミングγまでに完了し、見込みタイミングγにおいて、59.94Hz系の割り込み処理が発生する(ステップS3)。
【0113】
直後先行VシンクAVP7のタイミング(フリップタイミング)Cにおいて、割り込み処理が発生し、フリップ関数が呼び出され(ステップS4)、直後VシンクVP7のタイミング(スキャンアウトタイミング)cにおいて、50Hz系の割り込み処理が発生し、実際のフリップ動作が実行され、バッファが切り替えられ、合成係数T=0.7で補間されたフレーム画像のスキャンアウトが開始される(ステップS5)。
【0114】
このように、描画・変換処理が定常的に2VSYNCかかるようになった場合、2VSYNC先の目標Vシンクを前提として計算された正しい合成係数Tでフレームが補間され、正しいスキャンアウトタイミングで補間されたフレームが出力される。
【0115】
図10A〜図10Cで説明した例外処理は、次の2つの状況を想定している。
(1)描画処理にかかる時間が定常的に1VSYNCから2VSYNCに変化し、しばらく時間が経過してから、再び1VSYNCに戻るような粒度の粗いフレームレートの変化が発生する状況。
(2)突発的に1フレーム程度のフレーム落ちが発生する状況。
【0116】
上記の(1)は、グラフィックスプロセッサ30が通常は59.94Hzで描画しているが、ある時点を境に、たとえば、描画対象が複雑化するなどの理由で、平常時の半分の29.97Hzで描画するようになり、しばらく時間が経過すると、再び59.94Hzで描画することが可能になるような状況である。(2)は、システムが一時的に過負荷になるなどの理由で突発的にフレーム落ちが発生するが、すぐに元に戻るような状況である。
【0117】
(1)の状況について言えば、59.94Hzから29.97Hzに切り替わった直後は、図10Bで説明した過渡的な状態になるが、29.97Hzでの描画が定常的になると、やがては2VSYNCの描画を前提とした正しい合成係数Tのもとでフレーム補間がなされるようになる。そして、29.97Hzから59.94Hzに戻った直後は、やはり過渡的な状態になるが、59.94Hzでの描画が定常的になると、やがては1VSYNCの描画を前提とした正しい合成係数Tのもとでフレーム補間がなされるようになる。
【0118】
(2)の状況については、突発的なフレーム落ちが生じた時点では、図10Bの過渡的な状態になるが、その前後の定常状態では、正しい合成係数Tのもとでフレーム補間がなされる。
【0119】
以上、図3でフレームレート無変換モード、図4でフレームドロップモード、図5A〜図10Bを参照してフレーム補間モードを説明した。
【0120】
フレーム補間モードの線形補間式DST=T*PREV+(1−T)*CURRにおいて、合成係数Tを1にすると、補間フレームDSTは一つ前のフレームPREVになり、合成係数Tを0にすると、補間フレームDSTは現在のフレームCURRになる。合成係数Tが0のときは、一つ前のフレームPREVがスキャンアウトされず、合成係数Tが1のときは、現在のフレームCURRがスキャンアウトされないことになるから、これは実質的にはフレームドロップモードの動作と同じである。第4および第5の拡張モードはこの性質を利用する。
【0121】
第4のスロー時ドロップモードでは、画像変換部35は平常時、フレーム補間モードで動作し、描画に時間がかかるスロー時には実質的にフレームドロップモードで動作する。描画・変換処理が1Vシンク内で完了する平常状態では、画像変換部35は、計算で求めた合成係数Tでフレーム補間を行うフレーム補間モードで動作し、描画・変換処理が1Vシンクを超える例外的なスロー状態になった場合、フレーム補間モードにおいて合成係数Tを0または1に設定して、実質的にはフレームドロップモードで動作する。
【0122】
スロー状態になった場合、通常のフレーム補間モードにおいて計算された合成係数Tが0.5より小さいならば、合成係数Tを0に設定し直し、合成係数Tが0.5以上ならば、合成係数Tを1に設定し直す。画像変換部35は、新たに設定された合成係数T(0または1)のもとで線形補間を実行する。実質的には、合成係数Tが1の場合は、現在のフレームCURRをドロップし、合成係数Tが0のときは、一つ前のフレームPREVをドロップすることになる。
【0123】
描画処理部32により描画された画像に対する画像変換処理がグラフィックスプロセッサ30の垂直同期周期内に完了する限り、フレーム補間モードで動作し、グラフィックスプロセッサ30によって描画された画像に対する画像変換処理がグラフィックスプロセッサ30の垂直同期周期内に完了しない場合は、実質的にフレームドロップモードに切り替えて動作する。アプリケーションが想定する垂直同期周波数にもとづく垂直同期信号の発生間隔、すなわち1VSYNC内で描画と画像変換が完了する限りは、フレーム補間モードによって画質の高い補間画像が表示され、1VSYNC内で描画と画像変換が完了しない場合は、実質的にフレームドロップモードに切り替えて、フレーム落ちによる応急処理を施すことができる。1VSYNC内で描画と画像変換が完了せず、フレーム落ちするような状況では、フレームを補間するよりもフレームをドロップした方が画質的には良いことが多いため、第4のスロー時ドロップモードは、そのような場合に採用するのが好ましい。
【0124】
第5の可変混合モードでは、フレームドロップモードとフレーム補間モードに二者択一ではなく、フレーム補間モードの合成係数を調整することでフレーム補間モードと実質的なフレームドロップモードとの中間的なモードを実現する。フレーム補間モードにおいて使用される合成係数の値と、フレーム補間モードにおいて実質的にフレームを落とすことと等価となる合成係数の値との間の値をとる新たな合成係数を定め、その新たな合成係数で第1フレームメモリに保持された2枚の画像を合成する。
【0125】
具体的には、通常のフレーム補間モードにおいて計算された合成係数Tと値1をアプリケーションが指定する可変の混合比Rで次式のように配分して、新たな合成係数T’を求める。
T’=R*1.0+(1−R)*T
ただし、Rは0から1の値を取る。
【0126】
新たに設定された合成係数T’で2枚のフレームが合成されて補間フレームが生成される。混合比Rを1に設定すると、実質的に1つ前のフレームを落として現在のフレームをスキャンアウトするドロップモードと同じ振る舞いになり、混合比Rを0に設定すると、通常のフレーム補間モードと同じ振る舞いになる。混合比Rが0から1の間の値であれば、ドロップモードとフレーム補間モードを混合したような中間的な振る舞いになる。
【0127】
可変混合モードでは、アプリケーションが状況に応じて混合比Rを調整することでフレーム補間モードとドロップモードの間をアナログ的に変化させることができ、柔軟性をもたせることができる。たとえば、オブジェクトの動きが激しく、フレーム間の差分が大きいときは、フレーム補間をすると、残像感が大きくなるため、一つ前のフレームを落として、現在のフレームを表示する方が視覚的には良いことがある。
【0128】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。そのような変形例を説明する。
【0129】
上記の実施の形態では、NTSC方式の垂直同期周波数で描画された画像をPAL方式の垂直同期周波数の画像にフレームレート変換する例を説明したが、フレームレート変換はこれに限られない。PAL/SECAM方式からNTSC方式へ変換する場合にも本発明を適用できる。また、NTSC/PAL/SECAMのテレビジョン信号方式の垂直同期周波数を前提として描画された画像に対して、コンピュータディスプレイの垂直同期周波数に合ったフレームレートに変換する場合、逆にコンピュータディスプレイの垂直同期周波数を前提として描画された画像に対して、テレビジョン信号方式の垂直同期周波数に合ったフレームレートに変換する場合にも本発明は適用できる。
【0130】
また、実施の形態では、グラフィックスプロセッサ30の垂直同期周波数とディスプレイ60の垂直同期周波数の比が整数比ではない場合を説明したが、これが整数比である場合でも、描画処理時間の長短によってフリップ動作の不確定性の問題が生じるため、実施の形態のフレームレート変換処理を適用するメリットがある。
【図面の簡単な説明】
【0131】
【図1】実施の形態に係る描画処理装置の構成図である。
【図2】図1のグラフィックスプロセッサの画像変換処理に係る構成を詳細に説明する図である。
【図3】図2の画像変換部がフレームレート無変換モードで動作する場合を説明する図である。
【図4】図2の画像変換部がフレームドロップモードで動作する場合を説明する図である。
【図5A】図2の画像変換部がフレーム補間モードで動作する場合を説明する図である。
【図5B】図2の画像変換部がフレーム補間モードで動作する場合を説明する図である。
【図6】図6(a)、(b)は、描画垂直同期周波数と表示垂直同期周波数の比が整数比である場合と、整数比でない場合で、垂直同期信号のタイミングのずれ方に違いがあることを説明する図である。
【図7】図7(a)、(b)は、描画垂直同期周波数と表示垂直同期周波数の比が整数比でない場合、スキャンアウトのタイミングが1フレーム分ずれる現象を説明する図である。
【図8】本実施の形態におけるフリップコマンドの実行タイミングを説明する図である。
【図9】図9(a)、(b)は、フレーム補間モードにおいて、フリップコマンドを画像変換処理の直後に実行せずに、画像変換処理から切り離したことによる効果を説明する図である。
【図10A】描画・変換処理の完了が見込まれるタイミングで実際に画像変換処理が完了していた場合のフレームレート変換処理を説明する図である。
【図10B】描画・変換処理の完了が見込まれるタイミングで実際には画像変換処理が完了していなかった場合の過渡的な状態を説明する図である。
【図10C】図10Bの過渡的な状態の後、正常状態に復帰する様子を説明する図である。
【符号の説明】
【0132】
10 メインプロセッサ、 12 コマンド生成部、 14 切替命令発行部、 20 メインメモリ、 22 コマンドバッファ、 23 描画コマンド、 24 画像変換コマンド、 25 フリップコマンド、 30 グラフィックスプロセッサ、 32 描画処理部、 35 画像変換部、 40 ローカルメモリ、 43 ユーザ管理バッファ、 45 ライブラリ管理領域、 47 フレームメモリ、 50 ディスプレイコントローラ、 60 ディスプレイ、 70 テクスチャユニット、 80 通信部、 100 描画処理装置。
【技術分野】
【0001】
この発明は、描画処理技術に関し、特に表示装置に適した画像データを生成するための描画処理技術に関する。
【背景技術】
【0002】
液晶ディスプレイやプラズマディスプレイなどの薄型ディスプレイ製造技術が向上し、価格が低下してきたことにつれて、現在では、多種多様な表示装置が身の回りに存在する。ディスプレイ装置には、DVDプレイヤにより再生された高画質の映像が表示されたり、コンピュータグラフィックスにより生成された動画像が表示される。
【0003】
コンピュータやDVDプレイヤから出力される画像データを表示装置に表示するためには、画像信号の水平周波数や垂直周波数などを変換することにより、画像信号を表示装置の仕様に整合する形式に変換するコンバータの機能をもつディスプレイコントローラが必要である。
【0004】
また、NTSC/PAL/SECAMのテレビジョン方式のディスプレイに画像を出力するには、NTSC/PAL/SECAMの垂直同期周波数に合わせて画像を出力する必要があり、グラフィックスプロセッサによって描画された画像の解像度やフレームレートを変換する処理が必要となる。
【発明の開示】
【発明が解決しようとする課題】
【0005】
表示装置の種類によって、表示可能な画像信号の仕様、例えば、フレームレートや解像度などが異なる。ディスプレイコントローラが出力先の表示装置の仕様に合わせて画像信号を変換するためには、各種のコンバータが必要となり、回路規模が大きくなり、製造コストがかさむという問題がある。また、ハードウエアでコンバータを構成して出荷すると、新しいディスプレイの技術や規格にすぐには対応することができないため、柔軟性や拡張性が制限される。
【0006】
また、グラフィックスプロセッサにより画像が描画される際の垂直同期信号と表示装置に画像が表示される際の垂直同期信号のタイミングがずれることが、画像のフレームレート変換処理に不測の影響を及ぼすことがあり、表示装置に表示される画像の品質を維持することは難しい。
【0007】
本発明はこうした課題に鑑みてなされたものであり、その目的は、グラフィックスプロセッサにより描画される画像を表示装置の仕様に適した画像に変換することのできる画像変換技術を提供することにある。
【課題を解決するための手段】
【0008】
上記課題を解決するために、本発明のある態様の画像変換装置は、グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を保持する第1フレームメモリと、前記第1フレームメモリに保持された画像をディスプレイの仕様に適した画像に変換する画像変換部と、前記画像変換部により変換された画像を複数のフレームバッファを切り替えながら保持するフレームメモリであって、前記ディスプレイの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第2フレームメモリと、次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換部による画像変換処理の実行直後ではなく、前記ディスプレイの垂直同期タイミングに合わせて発行する切替命令発行部とを含む。
【0009】
本発明の別の態様もまた、画像変換装置である。この装置は、グラフィックスプロセッサによって描画される画像をテレビジョン方式の画像に変換する装置であって、グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を保持する第1フレームメモリと、前記第1フレームメモリに保持された画像を出力先のテレビション方式の画像に変換する画像変換部と、前記画像変換部により変換された画像を複数のフレームバッファを切り替えながら保持するフレームメモリであって、出力先のテレビジョンの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第2フレームメモリと、次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換部による画像変換処理の実行直後ではなく、出力先のテレビジョンの垂直同期タイミングに合わせて発行する切替命令発行部とを含む。
【0010】
本発明のさらに別の態様は、画像変換方法である。この方法は、グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を第1フレームメモリに保持するステップと、前記第1フレームメモリに保持された画像をディスプレイの仕様に適した画像に変換する画像変換処理ステップと、切り替え可能な複数のフレームバッファを有するフレームメモリであって、前記ディスプレイの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第2フレームメモリに前記画像変換処理ステップにより変換された画像を保持するステップと、次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換処理ステップによる画像変換処理の実行直後ではなく、前記ディスプレイの垂直同期タイミングに合わせて発行するステップとを含む。
【0011】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラム、データ構造、記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0012】
本発明によれば、グラフィックスプロセッサにより描画される画像を表示装置の仕様に適した画像に変換することができる。
【発明を実施するための最良の形態】
【0013】
図1は、実施の形態に係る描画処理装置100の構成図である。描画処理装置100は、描画対象となるオブジェクト(以下、単に「オブジェクト」という)の3次元モデル情報にもとづいて画面に表示するための描画データを生成するレンダリング処理を行う。同図は機能に着目したブロック図を描いており、これらの機能ブロックはハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現することができる。
【0014】
描画処理装置100は、メインプロセッサ10、メインメモリ20、グラフィックスプロセッサ30、ローカルメモリ40、ディスプレイコントローラ50、ディスプレイ60、テクスチャユニット70、および通信部80を含む。これらは図示しないバスに接続されている。
【0015】
メインメモリ20は、主にメインプロセッサ10によって使用される記憶領域であり、オブジェクトの頂点データや制御パラメータが記憶される。
【0016】
メインプロセッサ10は、オブジェクトのジオメトリ演算処理などを行い、グラフィックスプロセッサ30に対してオブジェクトの描画を指示する描画コマンドを生成する。
【0017】
メインプロセッサ10は、コマンド生成部12と切替命令発行部14の機能を有する。コマンド生成部12は、描画コマンドを生成してコマンドバッファに蓄積する。コマンドバッファに蓄積された描画コマンドはグラフィックスプロセッサ30によって読み出され、実行される。グラフィックスプロセッサ30によって描画された画像はフレームメモリ47に蓄積される。切替命令発行部14は、マルチバッファで構成されるフレームメモリ47の切り替えタイミングと切り替え先のバッファを指示するための切替命令を発行する。
【0018】
ローカルメモリ40は、主にグラフィックスプロセッサ30によって使用される記憶領域であり、描画アルゴリズムを実行するためのシェーダプログラムやオブジェクトの表面に貼り付けるためのテクスチャなどが記憶される。また、ローカルメモリ40内には描画データの中間結果や最終結果を保持するためのフレームバッファが設けられる。
【0019】
ローカルメモリ40内に設けられるフレームバッファには、ユーザ管理バッファ43とライブラリ管理領域45がある。ユーザ管理バッファ43はアプリケーションによって利用されるユーザ領域であり、ライブラリ管理領域45はグラフィックスライブラリによって管理される領域である。
【0020】
グラフィックスプロセッサ30は、オブジェクトをレンダリングして描画データを生成し、ローカルメモリ40に描画データを格納する。グラフィックスプロセッサ30は、描画処理部32と画像変換部35の機能を有する。これらの機能はプログラマブルシェーダの機能の一部として提供される。
【0021】
描画処理部32は、メインプロセッサ10から指示される描画コマンドにしたがって、オブジェクトに対してシェーディング、テクスチャマッピングなどの様々な描画演算処理を行い、描画データをローカルメモリ40内のユーザ管理バッファ43に書き出す。
【0022】
描画処理部32は、テクスチャマッピングを行う場合は、テクスチャユニット70のテクスチャマッピング機能を利用する。テクスチャユニット70は、ローカルメモリ40に記憶されたテクスチャデータを読み出し、オブジェクト表面にマッピングすべきテクスチャの値をバイリニア補間などにより求め、描画処理部32に与える。
【0023】
画像変換部35は、描画処理部32により生成された描画データをディスプレイ60の仕様に適した表示画像データに変換するためのソフトウエアモジュールである。このソフトウエアモジュールは、グラフィックスプロセッサ30用に提供される画像変換ライブラリの形態でプログラマに提供される。
【0024】
画像変換部35は、描画処理部32により生成された描画データをユーザ管理バッファ43から読み出し、フィルタリング処理を施し、ディスプレイ60の仕様に適した表示画像データに変換する。フィルタリングの一例として、解像度変換、色空間変換、ガンマ補正、ダウンサンプリング、時間軸フィルタリング(temporal filtering)、アンチエイリアシング、モーションブラーなどがある。
【0025】
ここで、解像度変換は、たとえば、出力先のディスプレイ60のアスペクト比の違いに対応したり、SD(Standard Definition)画像とHD(High Definition)画像の間で変換する際に行われるものであり、画素の補間処理を伴う。画像変換部35は、テクスチャユニット70のバイリニア補間の機能を利用して、解像度変換の際に必要となる画素値を周囲の画素値から補間して求める。すなわち、テクスチャユニット70は、解像度変換前の画像をテクスチャとしてサンプリングし、画素をバイリニア補間して解像度変換後の画像の画素データを生成する。
【0026】
時間軸フィルタリングは、たとえば、画像のフレームを落としたり、2枚のフレーム画像を合成して時間軸方向に補間されたフレーム画像を生成するなどにより、時間軸方向に画像をフィルタリングすることである。グラフィックスプロセッサ30が描画する際に前提とする垂直同期周波数と、ディスプレイ60の実際の垂直同期周波数とが一致しない場合、この時間軸フィルタリングにより画像のフレームレートを変換する。
【0027】
画像変換部35は、画像変換処理にあたってローカルメモリ40内のライブラリ管理領域45に設けられたフレームメモリ47を中間データの保持のために利用し、変換処理後の表示画像データをフレームメモリ47に書き込む。
【0028】
ライブラリ管理領域45に設けられたフレームメモリ47は、表示画像データの書き込みと読み出しを独立に行えるように、ダブルバッファやトリプルバッファなどのマルチバッファで構成され、ディスプレイコントローラ50によって読み出し中のバッファとは別のバッファに次のフレームの表示画像データが書き込まれる。ディスプレイコントローラ50は、ディスプレイ60の垂直同期周波数(「リフレッシュレート」とも呼ばれる)に合わせて、マルチバッファで構成されるフレームメモリ47を順次切り替えてスキャンする。
【0029】
ディスプレイコントローラ50は、切替命令発行部14により発行された切替命令に応じてマルチバッファで構成されたフレームメモリ47を切り替えながらスキャンして表示画像データを読み出す。
【0030】
ディスプレイコントローラ50によるフレームメモリ47のスキャン動作をより詳しく説明する。ディスプレイコントローラ50は、フレームメモリ47から表示画像データのピクセルデータをライン状に順次読み込む。すなわち、ディスプレイコントローラ50は、フレームメモリ47の左上隅の画素から水平方向にスキャンし、最初の横一列の画素データを読み出す。次に、垂直方向に1画素だけ移動して、次の横一列の画素を読み出す。最下段の画素列までスキャンが終わると、再び最上段の画素列から同様のスキャンを行う。
【0031】
ここで、フレームメモリ47は、マルチバッファで構成されているため、ディスプレイコントローラ50は、ディスプレイ60の垂直同期信号(VSYNC;vertical synchronizing signal)に合わせて発生する切替信号に応じて、表示画像データをスキャンするフレームバッファを切り替える。ディスプレイコントローラ50は、垂直同期信号のタイミングで、それまでスキャンしていた第1のフレームバッファから第2のフレームバッファに切り替え、第2のフレームバッファから表示画像データを読み出す。
【0032】
ディスプレイコントローラ50は、このようにしてフレームメモリ47から読み出したRGBのカラー値からなる表示画像データをディスプレイ60に対応したフォーマットの画像信号に変換してディスプレイ60に供給する。
【0033】
ディスプレイ60は、コンピュータ向けのCRTディスプレイや液晶ディスプレイなどのいわゆる「コンピュータディスプレイ」であってもよく、あるいは、テレビジョン受信機向けのブラウン管ディスプレイ、液晶ディスプレイ、プラズマディスプレイなどのいわゆる「テレビディスプレイ」であってもよい。
【0034】
なお、グラフィックスプロセッサ30とメインプロセッサ10は図示しない入出力インタフェースを介して接続されており、グラフィックスプロセッサ30は、入出力インタフェースを介してメインメモリ20にアクセスすることができ、逆に、メインプロセッサ10は、入出力インタフェースを介してローカルメモリ40にアクセスすることができる。
【0035】
通信部80は、メインプロセッサ10からの命令にしたがって、ネットワーク経由でデータを送受信することができる。通信部80により送受信されるデータは、メインメモリ20に保持される。
【0036】
図2は、グラフィックスプロセッサ30の画像変換処理に係る構成を詳細に説明する図である。同図を参照しながら、画像変換処理の動作を具体的に説明する。
【0037】
メインプロセッサ10のコマンド生成部12は、オブジェクトを描画するための描画コマンド23を生成し、コマンドバッファ22に蓄積する。描画コマンド23はグラフィックスプロセッサ30の描画処理部32により順次読み出されて実行され、ユーザ管理バッファ43に描画データが書き込まれる。
【0038】
コマンド生成部12は、描画コマンド23を生成する際、解像度変換やフレームレート変換などの各種フィルタリング処理を行うための関数とパラメータを指定する画像変換コマンド24と、マルチバッファで構成されるフレームメモリにおいて次に読み出すバッファを指定するフリップコマンド25とを生成し、画像変換コマンド24とフリップコマンド25を描画コマンド23に付加してコマンドバッファ22に蓄積する。
【0039】
画像変換部35は、画像変換コマンド24をコマンドバッファ22から読み出し、ユーザ管理バッファ43に保持された画像に対して各種のフィルタリング処理を施し、ライブラリ管理領域45内のダブルバッファ92a、92bで構成されるフレームメモリ47に変換後の画像を書き込む。切替命令発行部14は、フリップコマンド25をコマンドバッファ22から読み出して実行し、切替部76に読み出し先のバッファを切り替えるための切替信号を与える。ディスプレイコントローラ50は、切替部76により選択された読み出し先のバッファから画像をスキャンアウトする。
【0040】
画像変換部35によるフィルタリング処理にフレームレート変換処理が含まれる場合は、現在のフレーム以外に過去のフレームをフレームメモリ47に保持する必要がある。そのため、フレームメモリ47は、解像度変換などフレームレート変換以外のフィルタリング処理後のフレーム画像を少なくとも2枚保持するための第1フレームメモリと、第1フレームメモリに保持された少なくとも2枚のフレーム画像を用いてフレームレート変換を施し、フレームレート変換後のフレーム画像を保持するための第2フレームメモリの二つの領域に分けて用いられる。
【0041】
ここでは、一般的な構成としてフリップコマンド25をコマンドバッファ22にキューイングしている形態を図示しているが、後述のように、本実施の形態では、フリップコマンド25をコマンドバッファ22にキューイングする代わりに、フリップ動作をドライバに実行させる関数をコールバックする方法を採用する。メインプロセッサ10の切替命令発行部14は、フリップコマンド25を画像変換部35による画像変換処理の実行直後ではなく、ディスプレイ60の垂直同期信号のタイミングに合わせて確定的なタイミングで発行されるように設定する。フリップ関数は、タイマ割り込みにより自動的に呼び出される。
【0042】
画像変換部35によるフレームレート変換処理は、5つのモードのいずれかで動作する。まず、基本的な3つのモードを挙げる。
(1)フレームレート無変換モード
描画処理部32によって所与の垂直同期周波数で描画された画像のフレームレートを全く変換しないモードである。
(2)フレームドロップモード
描画処理部32によって所与の垂直同期周波数で描画されたフレームを間引きするモードである。
(3)フレーム補間モード
描画処理部32によって所与の垂直同期周波数で描画された2枚の画像を所定の合成係数で合成するモードである。
【0043】
これら3つの基本モードの他、以下の2つの拡張モードがある。
(4)スロー時ドロップモード
描画処理が垂直同期周期一つ分(1VSYNC)以内で完了する平常時はフレーム補間を行い、描画処理に垂直同期周期二つ分(2VSYNC)かかるようなスロー時にはフレームを落とすモードである。
【0044】
(5)可変混合モード
フレーム補間の合成係数を調整することでフレーム補間モードと実質的なフレームドロップモードを混合するモードである。
【0045】
画像変換部35のフレームレート変換の各動作モードを図面を参照しながら説明する。以下では、簡単のため、画像変換部35は解像度変換とフレームレート変換を行う場合を説明するが、解像度変換以外のフィルタリングを行う場合も同様である。
【0046】
図3(a)、(b)は、画像変換部35がフレームレート無変換モードで動作する場合を説明する図である。
【0047】
描画処理部32により描画された画像がユーザ管理バッファ43に保持される。画像変換部35は、ユーザ管理バッファ43に保持された変換元画像SRCに対して解像度変換処理を施し、変換された画像DSTをライブラリ管理領域45のフレームメモリ47に書き込む。フレームメモリ47は、ダブルバッファ92a、92bで構成されており、奇数フレームでは、画像変換部35が変換画像DSTを左バッファ92aに書き込む間、ディスプレイコントローラ50は、表示すべき画像SCANOUTを右バッファ92bからスキャンアウトする(図3(a))。偶数フレームでは、画像変換部35が変換画像DSTを右バッファ92bに書き込む間、ディスプレイコントローラ50は、表示すべき画像SCANOUTを左バッファ92aからスキャンアウトする(図3(b))。
【0048】
フレーム無変換モードでは、グラフィックスプロセッサ30の垂直同期周波数で描画された画像のフレームレートは変更されずにディスプレイ60に出力される。グラフィックスプロセッサ30がNTSC方式の垂直同期周波数で描画しており、ディスプレイ60がNTSC方式のテレビであれば、または、グラフィックスプロセッサ30がPAL方式の垂直同期周波数で描画しており、ディスプレイ60がPAL方式のテレビであれば、画像変換部35をフレーム無変換モードで動作させればよい。
【0049】
フレーム無変換モードでは、フレームメモリ47は、書き込み用のバッファ1枚と読み出し用のバッファ1枚の合計2枚のダブルバッファで構成すればよい。
【0050】
図4は、画像変換部35がフレームドロップモードで動作する場合を説明する図である。フレームドロップモードでは、描画処理部32が描画する画像のフレームレートが、ディスプレイ60のフレームレートよりも速く、描画処理部32により描画されたフレーム画像が間引きされる。ライブラリ管理領域45に設けられたフレームメモリ47は、3つのバッファ92a、92b、92cで構成される。画像変換部35は既に左バッファ92aに変換画像DSTの書き込みを完了し、今、ユーザ管理バッファ43に保持された変換元画像SRCを解像度変換して中央バッファ92bに書き込んでいる。このとき、ディスプレイコントローラ50は、表示すべき画像SCANOUTを右バッファ92cからスキャンアウトしている。
【0051】
画像変換部35は、描画処理部32が描画する画像のフレームレートとディスプレイ60に表示される画像のフレームレートの違いを吸収するために、フレームの間引きを行う。たとえば、ディスプレイコントローラ50は、切替命令発行部14から発行される切替命令にしたがって、次にスキャンアウトされるべき画像を右バッファ92aではなく、中央バッファ92bから読み出すことにより、右バッファ92aに保持されたフレームを間引きする。
【0052】
このように、フレームドロップモードでは、グラフィックスプロセッサ30の垂直同期周波数で描画された画像について意図的にフレーム落ちを生じさせることで、ディスプレイ60の垂直同期周波数に合ったフレームレートの画像に変換される。たとえば、グラフィックスプロセッサ30がNTSC方式の垂直同期周波数59.94Hz(ヘルツ)で描画し、出力先のディスプレイ60がPAL方式の垂直同期周波数50Hzである場合、およそ6フレーム毎に1枚のフレームを落とすことで画像のフレームレートを59.94Hzから50Hzに変換することができる。
【0053】
フレームドロップモードでは、描画垂直同期周波数が表示垂直同期周波数より大きいため、フレームの書き込みとフレームの読み出しが同期せず、フレームの書き込みが先行して行われることになるため、書き込み用のバッファを2フレーム分用意する必要がある。したがって、書き込み用のバッファ2枚と読み出し用のバッファ1枚の合計3枚のトリプルバッファでフレームメモリ47を構成する必要がある。
【0054】
フレームドロップモードは、簡単にフレームレート変換を実現できる点で有利であるが、フレーム落ちによって動画が不連続に見えるというデメリットがある。
【0055】
図5A、図5Bは、画像変換部35がフレーム補間モードで動作する場合を説明する図である。図5Aは、画像変換部35が奇数フレームについて画像変換する様子を示し、図5Bは、画像変換部35が偶数フレームについて画像変換する様子を示す。
【0056】
ライブラリ管理領域45は、グラフィックスプロセッサ30が描画するときに前提とする垂直同期周波数(以下、「描画垂直同期周波数」という)で画像が書き込まれる第1フレームメモリ47aと、ディスプレイ60に画像が表示される差異の実際の垂直同期周波数(以下、「表示垂直同期周波数」という)で画像がスキャンアウトされる第2フレームメモリ47bを含む。ここでは、描画垂直同期周波数はNTSC方式の59.94Hz、表示垂直同期周波数は、PAL方式の50Hzであるとする。
【0057】
画像変換部35は、ユーザ管理バッファ43に保持された変換元画像SRCを解像度変換し、変換画像を第1フレームメモリ47aに書き込む。第1フレームメモリ47aは、現在のフレームCURRと、一つ前のフレームPREVを保持するために、ダブルバッファ90a、90bで構成される。図5Aでは、左バッファ90aに現在のフレームCURRが、右バッファ90bに一つ前のフレームPREVが保持されている。画像変換部35が左バッファ90aに書き込んだ現在のフレームCURRは、次の垂直同期信号のタイミングでは、図5Bに示すように、一つ前のフレームPREVとして用いられる。
【0058】
画像変換部35は、現在のフレームCURRと、過去のフレームPREVとを所定の合成係数Tで合成することにより、補間フレームDSTを生成し、第2フレームメモリ47bに書き込む。合成係数Tは、グラフィックスプロセッサ30の描画垂直同期信号とディスプレイ60の表示垂直同期信号のずれにもとづく値であり、0から1までの値を取る。このフレーム補間処理は、合成係数Tをアルファ値として2枚のフレームを合成する「アルファブレンディング」であり、シェーダの線形補間機能を用いて実行することができる。
【0059】
なお、変換元画像SRCを解像度変換して第1フレームメモリ47aに現在のフレームCURRとして書き込む処理と、第1フレームメモリ47aから現在のフレームCURRと過去のフレームPREVを読み出して合成係数Tで合成する処理とを同時に実行すると、現在のフレームCURRを保持するバッファへの書き込みと読み出しが競合する。競合を避けるためには、マルチパスレンダリング(Multi-Pass Rendering)が可能なシェーダにおいて、書き込み処理と読み出し処理を別々のパス(pass)に分けて2パスで処理を実行しなければならなくなる。そのオーバーヘッドを避けるために、複数のバッファに同時にレンダリングすることのできるマルチレンダーターゲット(Multi-Render Target)と呼ばれる技術を用いて、書き込み先のバッファを二つにすることでシェーダの1パスでこれら二つの処理を実行することを可能にする。
【0060】
すなわち、シェーダは、変換元画像SRCを解像度変換して第1フレームメモリ47aに現在のフレームCURRとして書き込む処理を行うとともに、変換元画像SRCを解像度変換した結果と過去のフレームPREVとを合成して補間フレームDSTを第2フレームメモリ47bに書き込む処理を行う。変換元画像SRCを変換して現在のフレームCURRを生成する処理に複雑な画像処理が含まれる場合は、この手法を適用することは難しいが、ここでは変換元画像SRCから現在のフレームCURRへの変換は、簡単な解像度変換だけであるから、マルチレンダーターゲットの技術を用いて余分なオーバーヘッドをなくすことができる。
【0061】
画像変換部35がフレーム補間を行って、第2フレームメモリ47bの一つのバッファ92aに補間フレームDSTを書き込んでいる間、ディスプレイコントローラ50は、表示すべきフレームSCANOUTを第2フレームメモリの別のバッファ92bからスキャンアウトする。
【0062】
図5Bを参照して、偶数フレームの変換処理を説明する。画像変換部35が解像度変換後の現在のフレームCURRを第1フレームメモリ47aの右バッファ90bに書き込む。画像変換部35は、右バッファ90bに保持された現在のフレームCURRと、左バッファ90aに保持された一つ前のフレームPREVを所定の合成係数Tで合成し、第2フレームメモリ47bの一つのバッファ92bに補間されたフレームDSTを書き込む。ディスプレイコントローラ50は、表示すべきフレームSCANOUTを別のバッファ92aからスキャンアウトする。なお、実際は4つのバッファ92a〜92dの内、空いているバッファから順に使用される。
【0063】
合成係数Tを描画垂直同期信号と表示垂直同期信号のずれに応じた値に設定することで、グラフィックスプロセッサ30の描画垂直同期周波数で描画された2枚のフレームがディスプレイ60の表示垂直同期周波数に合ったフレームに補間される。
【0064】
フレーム補間モードでは、第2フレームメモリ47bを4つのバッファ92a〜92dで構成することが好ましいが、その理由については後述する。
【0065】
図6(a)、(b)を参照して、描画垂直同期周波数と表示垂直同期周波数の比が整数比である場合と、整数比でない場合で、垂直同期信号のタイミングのずれ方に違いがあることを説明する。
【0066】
図6(a)は、描画垂直同期周波数が60Hz、表示垂直同期周波数が50Hzである場合のそれぞれの垂直同期信号のタイミングを図示する。描画垂直同期周波数と表示垂直同期周波数の比は6:5であるから、描画垂直同期信号が6回発生する時間Tの間に、表示垂直同期信号は5回発生する。したがって、時間T毎に描画垂直同期信号と表示垂直同期信号は同期する。
【0067】
図6(b)は、描画垂直同期周波数が59.94Hz、表示垂直同期周波数が50Hzである場合のそれぞれの垂直同期信号のタイミングを図示する。描画垂直同期周波数と表示垂直同期周波数の比は整数比にならないから、描画垂直同期信号が6回発生する時間T1と、表示垂直同期信号が5回発生する時間T2の間には、短い時間差dが生じる。この短い時間差dがあるために、描画垂直同期信号と表示垂直同期信号は同期することがなく、絶えず微妙な時間差が生じる。このため、50Hzの表示垂直同期信号のタイミング、すなわちフレームバッファからフレームをスキャンアウトするタイミングは、59.94Hzの描画垂直同期信号のタイミングに対して相対的に任意のずれをもちうることになり、スキャンアウトを開始するタイミングを描画垂直同期信号に対して固定したタイミングに決め打ちすることはできない。
【0068】
図7(a)、(b)は、描画垂直同期周波数と表示垂直同期周波数の比が整数比でない場合、スキャンアウトのタイミングが1フレーム分ずれる現象を説明する図である。グラフィックスプロセッサ30は、59.94Hzで発生する描画垂直同期信号(以下、「描画Vシンク」という)VN1、VN2、VN3のタイミングで描画コマンド、画像変換コマンド、およびフリップコマンドを連続して実行する。同図は、描画、画像変換、およびフリップにかかる時間が棒グラフで表示されている。一方、ディスプレイコントローラ50は50Hzで発生する表示垂直同期信号(以下、「表示Vシンク」という)VP1、VP2のタイミングで読み出し先のバッファを切り替えて画像をスキャンアウトする。
【0069】
図7(a)では、グラフィックスプロセッサ30によって描画、画像変換、およびフリップが完了する時間は、第1の表示VシンクVP1のタイミングよりも前であるから、スキャンアウトはその表示VシンクVP1のタイミングで開始される。
【0070】
図7(b)では、グラフィックスプロセッサ30によって描画処理に時間がかかったため、描画、画像変換、およびフリップが完了する時間は、第1の表示VシンクVP1のタイミングよりも後になる。この場合は、第1の表示VシンクVP1のタイミングではスキャンアウトを開始することができないから、スキャンアウトは第2の表示VシンクVP2のタイミングまで待たされる。
【0071】
グラフィックスプロセッサ30による描画処理にかかる時間は、描画対象の複雑さに応じて異なるため、描画と変換処理が完了するのが、第1の表示VシンクVP1の前になるか、後になるかは、前もって予測することはできない。そのため、スキャンアウトするタイミングが第1の表示VシンクVP1になったり、第2の表示VシンクVP2になったりして不確定になる。第1の表示VシンクVP1でスキャンアウトされると仮定して補間したフレームが、第2の表示VシンクVP2でスキャンアウトされると、補間係数が合っていないために動画の連続性が損なわれ、画質が劣化する。
【0072】
また、仮にグラフィックスプロセッサ30による描画処理時間が一定であったとしても、図6(b)で説明したように、50Hzの表示Vシンクは59.94Hzの描画Vシンクに対して微小なずれを時間経過とともに徐々に累積させていくため、表示VシンクVP1の前で実行されていたフリップコマンドであっても、微小なずれの累積により、やがては表示VシンクVP1の後で実行されることになる。
【0073】
このように描画処理時間が不定であることと、描画垂直同期周波数と表示垂直同期周波数の比が正確には整数比ではないことが原因で、フリップ動作のタイミング、言い換えれば、読み出し先のバッファの切り替えのタイミングが不確定になる。
【0074】
このようなフリップ動作の不確定性を避けるため、本実施の形態では、フリップコマンドを描画処理と画像変換処理が終わった直後に実行するのではなく、フリップコマンドの実行を描画処理と画像変換処理から切り離し、フリップコマンドを確定的なタイミングで実行する。
【0075】
図8は、本実施の形態におけるフリップコマンドの実行タイミングを説明する図である。メインプロセッサ10とグラフィックスプロセッサ30は、59.94Hzの描画垂直同期信号周波数で描画を実行する。すなわち、描画VシンクVN1〜VN3の発生タイミングで描画が開始される。一方、ディスプレイコントローラ50は、50Hzの表示垂直同期周波数でスキャンアウトを実行する。すなわち、表示VシンクVP1、VP2の発生タイミングで読み出し先のバッファを切り替えてスキャンアウトが開始される。
【0076】
メインプロセッサ10は、描画VシンクVN1のタイミングαで、描画コマンドと画像変換コマンドを生成する(ステップS1)。メインプロセッサ10は、グラフィックスプロセッサ30による描画処理と画像変換処理の完了が見込まれる最初の描画Vシンク(「目標Vシンク」という)のタイミングを仮定する。ここでは、2番目の描画VシンクVN2を目標Vシンクと仮定し、この目標VシンクVN2のタイミングβまでには、描画・変換処理が完了すると仮定する。
【0077】
次に、メインプロセッサ10は、目標VシンクVN2のタイミングβの直後に発生する表示Vシンク(「直後Vシンク」という)と、目標Vシンクのタイミングβの直前に発生する表示Vシンク(「直前Vシンク」という)のタイミングをそれぞれ取得する。ここでは、直後Vシンクは2番目の表示VシンクVP2であり、直前Vシンクは1番目の表示VシンクVP1である。
【0078】
各表示Vシンクのタイミングに対して所定の先行時間AT(Anticipatory Time)だけ前のタイミングを先行Vシンク(Anticipatory VSYNC)という。直後VシンクVP2のタイミングbより先行時間ATだけ前に直後先行VシンクAVP2が定められ、直前VシンクVP1のタイミングaより先行時間ATだけ前に直前先行VシンクAVP1が定められる。
【0079】
メインプロセッサ10は、目標VシンクVN2のタイミングβが、直後VシンクVP2に対して定められた直後先行VシンクAVP2のタイミングBからずれている割合をもとに、フレーム補間の合成係数Tを求める。具体的には、直後先行VシンクAVP2のタイミングBと、直前先行VシンクAVP1のタイミングAで挟まれる区間において、目標VシンクVN2のタイミングβの相対位置を求める。直前先行VシンクAVP1のタイミングAを0として、直後先行VシンクAVP2のタイミングBを1として、目標VシンクVN2のタイミングβの相対位置を0から1までの値で求め、その値を合成係数Tとする。同図では、目標VシンクVN2のタイミングβの相対位置は0.4であり、合成係数Tの値は0.4になる。
【0080】
直前先行VシンクAVP1から直後先行VシンクAVP2までの時間は、表示垂直同期周期の20ミリ秒であるから、直後先行VシンクAVP2の発生時刻をTB、目標VシンクVN2の発生時刻をTβとすると、合成係数Tは次式で計算される。
T={20−(TB−Tβ)}/20
【0081】
メインプロセッサ10のコマンド生成部12は、このようにして求めた合成係数Tの値をもとに画像変換コマンド24を生成する。また、コマンド生成部12は、後段の目標VシンクVNの正誤判定に必要な値と、フリップに必要な情報をパケット化してパケットキューにキューイングする。
【0082】
グラフィックスプロセッサ30の描画処理部32は描画コマンドにもとづいて描画処理を実行し、画像変換部35は画像変換コマンドにもとづいて画像変換処理を実行する(ステップS2)。なお、ここでは、理解し易いように、メインプロセッサ10による描画・変換コマンドの生成と、グラフィックスプロセッサ30による描画・変換処理とが、同一の垂直同期周期内で実行されているように図示したが、実際には、ある垂直同期周期においてメインプロセッサ10により生成された描画・変換コマンドを次の垂直同期周期においてグラフィックスプロセッサ30が実行するのが通常である。
【0083】
画像変換部35による画像変換処理には解像度変換とフレームレート変換が含まれる。フレームレート変換は、フレーム補間モードで実行される。画像変換部35は、メインプロセッサ10により求められた合成係数Tで2枚のフレームを合成する。具体的には、一つ前のフレームPREVと現在のフレームCURRを画素毎に線形補間式DST=T*PREV+(1−T)*CURRにより、補間して、補間フレームDSTを求める。
【0084】
ここで、上記の線形補間式の意味を説明する。本来は、2枚のフレームを合成する合成係数Tは、描画VシンクVN2のタイミングβと描画VシンクVN3のタイミングγで挟まれる区間において、直後先行VシンクAVP2のタイミングBの相対位置により求めるのが自然である。同図に示すように、直後先行VシンクAVP2のタイミングBが、描画VシンクVN2のタイミングβと描画VシンクVN3のタイミングγで挟まれる区間を(1−T’):T’で内分する場合、補間フレームDSTは、線形補間式DST=T’*PREV+(1−T’)*CURRによって補間して求めることができる。しかしながら、描画VシンクVNの周期は、表示VシンクVPの周期よりも短いため、この線形補間式では不都合が生じる。なぜなら、2つの描画VシンクVNの間に直後先行VシンクAVPが存在しない状況が発生することがあるからである。たとえば、描画Vシンクが59.94Hz、表示Vシンクが50Hzで発生する場合、およそ6回に1回の割合で、このような状況が発生する。
【0085】
そこで、表示Vシンクの周期が描画Vシンクの周期より長いことに着目して、目標VシンクVN2のタイミングβが、直前先行VシンクAVP1のタイミングAと直後先行VシンクAVP2のタイミングBで挟まれる区間に挿入される位置をもって合成係数Tを決めている。このようにすれば、2つの先行VシンクAVPのタイミング間の期間には必ず、目標VシンクVNのタイミングが存在するから、不都合は生じない。目標VシンクVN2のタイミングβは、同図に示すように、直前先行VシンクAVP1のタイミングAと直後先行VシンクAVP2のタイミングBで挟まれる期間をT:(1−T)で内分する点であり、こうして得られる合成係数Tは、上述の本来の合成係数T’に対する逆数的な意味合いをもっていることが理解される。本実施の形態の線形補間式DST=T*PREV+(1−T)*CURRは、本来の合成係数T’を用いた場合の線形補間式から導かれたものである。
【0086】
たとえば、合成係数Tが1であれば、補間フレームの画素のカラー値は、一つ前のフレームの画素のカラー値と同じになり、合成係数Tが0であれば、補間フレームの画素のカラー値は、現在のフレームの画素のカラー値と同じになる。合成係数Tが0.4であれば、補間フレームの画素のカラー値は、一つ前のフレームの画素のカラー値を40%、現在のフレームの画素のカラー値を60%で重み付けして合成した値になる。
【0087】
切替命令発行部14は、フリップコマンドを画像変換処理の直後ではなく、直後先行VシンクAVP2のタイミングBにおいて発行されるように設定する。ここで、直後VシンクVP2の発生タイミングbを「スキャンアウトタイミング」と呼び、そのスキャンアウトタイミングbよりも先行時間ATだけ前の直後先行VシンクAVP2の発生タイミングBを「フリップタイミング」と呼ぶことにする。
【0088】
切替命令発行部14は、フリップタイミングBにおいてフリップ関数が実行されるようにアプリケーションにコールバックを提供し、プロセスを一旦スリープさせる。すなわち、コマンドバッファにフリップコマンドをキューイングする代わりに、フリップ関数をシステムコールする方法を取る。スキャンアウトタイミングよりも先行時間ATだけ前のフリップタイミングにおいてフリップ動作をドライバに実行させる関数をコールする。実際のスキャンアウトタイミングよりも先行時間ATだけ余裕をもたせて前もってフリップ関数を呼び出すのは、スキャンアウトタイミングで関数呼び出しをすると、ドライバによる実際のフリップ動作がスキャンアウトのタイミングに間に合わなくなるからである。
【0089】
目標VシンクVN2のタイミングβにおいて、59.94Hz系の割り込み処理が発生する(ステップS3)。この割り込み処理において、パケットキューの先頭にある未マークのパケットを参照し、ステップ1において目標VシンクVN2のタイミングβまでに描画・変換処理が完了すると仮定したことが正しかったかどうかを検証する。仮定が正しかった場合、すなわち描画・変換処理が実際に目標VシンクVN2のタイミングβまでに完了していた場合、そのパケットに検証済みのマークを付ける。仮定が正しくなかった場合、すなわち描画・変換処理が目標VシンクVN2のタイミングβまでに完了しなかった場合は、フレーム落ちが生じることになる。この場合、合成係数Tを再計算してフレーム補間をやり直す例外処理を実行する。この例外処理については後述する。
【0090】
直後先行VシンクAVP2のタイミング(フリップタイミング)Bにおいて、割り込み処理が発生する(ステップS4)。この割り込み処理において、アプリケーションプロセスがタイマーで起床し、フリップ関数がシステムコールによって呼び出される。より具体的には、パケットキューの先頭のパケットが参照され、ステップS3の59.94Hz系の割り込み処理で検証済みのマークが付けられたパケットについて、フリップ関数が直ちに実行され、パケットはキューから取り除かれる。未マークのため処理の時期を逃してしまったパケットはこの段階でキューから取り除かれ、破棄される。
【0091】
先行時間ATの経過後、直後VシンクVP2のタイミング(スキャンアウト予定タイミング)bにおいて、50Hz系の割り込み処理が発生する(ステップS5)。この割り込み処理において、次の先行Vシンクのタイミングでアプリケーションプロセスを起こすためのタイマーが設定される。それと同時に、実際のフリップ動作が実行され、バッファが切り替えられ、合成係数Tで補間されたフレーム画像のスキャンアウトが開始される。
【0092】
以上説明したフレーム変換処理を念頭において、フレーム補間モードにおいて第2フレームメモリ47bが4つのバッファで構成される理由を説明する。描画垂直同期周波数が表示垂直同期周波数より大きいため、フレームの書き込みとフレームの読み出しが同期せず、フレームの書き込みが先行して行われることから、まず3枚のバッファが必要となる点は、フレームドロップモードの場合と同じである。さらに、フレーム補間モードでは、スキャンアウトタイミングよりも先行時間ATだけ前もってフリップ関数を呼び出すため、さらに1フレーム分のバッファリングをしておかなければならない。そのため、第2フレームメモリを合計4枚のバッファで構成する必要がある。先行時間ATがゼロであるなら、3枚のバッファでも足りるが、先行時間ATをゼロにすると、フリップ動作に支障を来すため、一定の先行時間ATを確保して、4枚のバッファをもたせることが好適である。
【0093】
次に、図9(a)、(b)を参照して、フレーム補間モードにおいて、フリップコマンドを画像変換処理の直後に実行せずに、画像変換処理から切り離したことによる効果を説明する。
【0094】
図9(a)では、グラフィックスプロセッサ30による描画・変換処理が第1の表示VシンクVP1よりも前に完了しているが、フリップコマンドはこのタイミングでは発行されず、画像変換処理の完了が見込まれる描画VシンクVN2の後に発生する第2の表示VシンクVP2の先行時間ATだけ前のタイミングで発行され、スキャンアウトは第2の表示VシンクVP2のタイミングで開始される。
【0095】
図9(b)のように、グラフィックスプロセッサ30による描画処理が長引いて、描画・変換処理が完了するのが、第1の表示VシンクVP1よりも後になった場合でも、フリップコマンドは図9(a)の場合と同様、第2の表示VシンクVP2の先行時間ATだけ前のタイミングで発行されるので、スキャンアウトは第2の表示VシンクVP2のタイミングで開始される。
【0096】
このように、描画処理時間の長短によって、描画・変換処理の完了時点が第1の表示VシンクVP1の前になったり、後になったりする場合でも、スキャンアウトは第2の表示VシンクVP2のタイミングで開始されるため、フリップ動作の不確定性をなくすことができる。
【0097】
図8では、描画・変換処理の完了が見込まれる目標VシンクVN2のタイミングβ(「見込みタイミング」という)を想定し、見込みタイミングβで実際に画像変換処理が完了していた場合を示したが、見込みタイミングβで画像変換処理が完了していない場合には、それ以降のフレーム補間処理を修正するフィードバックをかける例外処理が実行される。図10A、図10Bおよび図10Cを参照してこの例外処理を説明する。
【0098】
まず、比較のために図10Aに見込みタイミングで実際に画像変換処理が完了していた場合を示す。ステップ1〜ステップ5までの動作は図8で説明した通りである。この例では、目標VシンクVN2のタイミングβ(見込みタイミング)は、直前先行VシンクAVP1のタイミングAと直後先行VシンクAVP2のタイミングBで挟まれる区間において、0.9の位置にあり、合成係数Tは0.9に設定される。見込みタイミングβにおいて、描画・変換処理が予想通り完了したため、予定通り、スキャンアウトタイミングbに対して先行時間ATだけ手前のフリップタイミングBにフリップコマンドが発行され、スキャンアウトタイミングbにおいて合成係数T=0.9で補間されたフレームがスキャンアウトされる。
【0099】
図10Bは、見込みタイミングで実際には画像変換処理が完了していなかった場合の過渡的な状態を説明する図である。同図に示すように、グラフィックスプロセッサ30による描画処理に時間がかかり、ステップS3の見込みタイミングβにおける割り込み処理において、描画・変換処理が完了していないことが確認される。このとき、画像変換部35は新たに描画・変換処理の完了が見込まれる3番目の描画VシンクVN3を目標Vシンクとして、目標VシンクVN3のタイミングγを見込みタイミングに再設定し、一方、切替命令発行部14は、フリップコマンドを直後先行VシンクAVP3のタイミングCにおいて発行されるように設定する。
【0100】
見込みタイミングβにおいて描画・変換処理が完了しないことから、フレーム落ちが生じることになる。このとき、コマンド生成部12は、一つの描画・変換コマンドが何回の描画VシンクVN内で処理されたかを記憶する変数Iを1だけインクリメントする。変数Iの初期値は1である。変数Iはフレーム落ちが生じた回数に1を足した値になる。
【0101】
コマンド生成部12は、次の描画・変換コマンドを生成する際、変数Iの値を考慮して目標Vシンクを決めてコマンドバッファ22に蓄積する。1VSYNC内で正常に描画・変換コマンドが処理されている間は、変数Iは1であり、それ以降の描画・変換コマンドについて、目標Vシンクを1VSYNC内で設定する。変数Iが2であれば、描画・変換コマンドの処理に2VSYNCかかっていることになるから、それ以降の描画・変換コマンドについて、目標Vシンクを2VSYNC先に設定する。
【0102】
なお、実装上では、メインプロセッサ10による描画・変換コマンドの生成は、グラフィックスプロセッサ30による描画・変換コマンドの実行に先立って行われるから、何個の描画・変換コマンドを先行生成しているかも考慮して、目標Vシンクが設定される。すなわち、目標Vシンクは、先行して生成されたコマンド数に変数Iの値を乗じた値だけ先の描画Vシンクのタイミングに設定される。
【0103】
1VSYNC内で画像変換処理が完了せず、フレーム落ちが生じたとき、コマンド生成部12が、それ以降に生成される描画・変換コマンドについて目標Vシンクを変数Iにもとづいて設定するため、やがては正しい合成係数Tのもとでフレーム補間がなされる正常状態に復帰する。しかし、正常状態に復帰する前は、コマンド生成部12がいったん見込みタイミングβを仮定して生成した描画・変換コマンドを変更することはできないため、見込みタイミングβを前提として求めた合成係数Tをそのまま使ってフレーム補間が行われる。
【0104】
グラフィックスプロセッサ30による描画・変換処理は予想通り、新たな見込みタイミングγまでに完了する(ステップS2’)。目標VシンクVN3のタイミングγにおいて、59.94Hz系の割り込み処理が発生する(ステップS3’)。この割り込み処理において、再設定された目標VシンクVN3のタイミングγまでに描画・変換処理が完了すると仮定したことが正しかったことが検証される。
【0105】
直後先行VシンクAVP3のタイミング(フリップタイミング)Cにおいて、割り込み処理が発生し、フリップ関数がシステムコールによって呼び出される(ステップS4’)。先行時間ATの経過後、直後VシンクVP3のタイミング(スキャンアウトタイミング)bにおいて、50Hz系の割り込み処理が発生し、実際のフリップ動作が実行され、バッファが切り替えられ、合成係数T=0.9で補間されたフレーム画像のスキャンアウトが開始される(ステップS5’)。
【0106】
このように、描画・変換処理が1VSYNC内に完了せず、2VSYNCかかるような場合は、スキャンアウトのタイミングがずれ、もはや正しくはない合成係数Tのもとで補間されたフレームが出力されることになる。しかしこれは過渡的な状態に過ぎず、これ以降の描画・変換処理が定常的に2VSYNCかかるようになるなら、2VSYNCを前提として目標Vシンクが設定され、合成係数Tが正しく計算されるため、正常状態に復帰する。なお、実装上は、描画・変換コマンドが先行生成されるため、既に生成された描画・変換コマンドの処理が終わるまでは過渡的な状態が続くことになる。
【0107】
図10Cは、図10Bの過渡的な状態の後、正常状態に復帰する様子を説明する図である。ここでは、描画・変換処理が定常的に2VSYNCかかるようになった場合を説明する。
【0108】
コマンド生成部12は、描画VシンクVN6のタイミングαで、描画コマンドと画像変換コマンドを生成する(ステップS1)が、このとき、変数Iが2であることから、2VSYNC後の描画VシンクVN8を目標Vシンクに設定する。次に、コマンド生成部12は、目標VシンクVN8に対して、直前先行VシンクAVP6と直後先行VシンクAVP7を決める。
【0109】
コマンド生成部12は、目標VシンクVN8のタイミング(見込みタイミング)γが、直前先行VシンクAVP6のタイミングBと直後先行VシンクAVP7のタイミングCで挟まれる区間において、0.7の位置にあることから、合成係数Tを0.7に設定する。
【0110】
画像変換部35は、解像度変換処理(ステップS2)の後、コマンド生成部12により設定された合成係数T=0.7で2枚のフレームを合成する。
【0111】
一方、切替命令発行部14は、フリップコマンドを直後先行VシンクAVP7のタイミングCにおいて発行されるように設定する。
【0112】
グラフィックスプロセッサ30による描画・変換処理は予想通り、見込みタイミングγまでに完了し、見込みタイミングγにおいて、59.94Hz系の割り込み処理が発生する(ステップS3)。
【0113】
直後先行VシンクAVP7のタイミング(フリップタイミング)Cにおいて、割り込み処理が発生し、フリップ関数が呼び出され(ステップS4)、直後VシンクVP7のタイミング(スキャンアウトタイミング)cにおいて、50Hz系の割り込み処理が発生し、実際のフリップ動作が実行され、バッファが切り替えられ、合成係数T=0.7で補間されたフレーム画像のスキャンアウトが開始される(ステップS5)。
【0114】
このように、描画・変換処理が定常的に2VSYNCかかるようになった場合、2VSYNC先の目標Vシンクを前提として計算された正しい合成係数Tでフレームが補間され、正しいスキャンアウトタイミングで補間されたフレームが出力される。
【0115】
図10A〜図10Cで説明した例外処理は、次の2つの状況を想定している。
(1)描画処理にかかる時間が定常的に1VSYNCから2VSYNCに変化し、しばらく時間が経過してから、再び1VSYNCに戻るような粒度の粗いフレームレートの変化が発生する状況。
(2)突発的に1フレーム程度のフレーム落ちが発生する状況。
【0116】
上記の(1)は、グラフィックスプロセッサ30が通常は59.94Hzで描画しているが、ある時点を境に、たとえば、描画対象が複雑化するなどの理由で、平常時の半分の29.97Hzで描画するようになり、しばらく時間が経過すると、再び59.94Hzで描画することが可能になるような状況である。(2)は、システムが一時的に過負荷になるなどの理由で突発的にフレーム落ちが発生するが、すぐに元に戻るような状況である。
【0117】
(1)の状況について言えば、59.94Hzから29.97Hzに切り替わった直後は、図10Bで説明した過渡的な状態になるが、29.97Hzでの描画が定常的になると、やがては2VSYNCの描画を前提とした正しい合成係数Tのもとでフレーム補間がなされるようになる。そして、29.97Hzから59.94Hzに戻った直後は、やはり過渡的な状態になるが、59.94Hzでの描画が定常的になると、やがては1VSYNCの描画を前提とした正しい合成係数Tのもとでフレーム補間がなされるようになる。
【0118】
(2)の状況については、突発的なフレーム落ちが生じた時点では、図10Bの過渡的な状態になるが、その前後の定常状態では、正しい合成係数Tのもとでフレーム補間がなされる。
【0119】
以上、図3でフレームレート無変換モード、図4でフレームドロップモード、図5A〜図10Bを参照してフレーム補間モードを説明した。
【0120】
フレーム補間モードの線形補間式DST=T*PREV+(1−T)*CURRにおいて、合成係数Tを1にすると、補間フレームDSTは一つ前のフレームPREVになり、合成係数Tを0にすると、補間フレームDSTは現在のフレームCURRになる。合成係数Tが0のときは、一つ前のフレームPREVがスキャンアウトされず、合成係数Tが1のときは、現在のフレームCURRがスキャンアウトされないことになるから、これは実質的にはフレームドロップモードの動作と同じである。第4および第5の拡張モードはこの性質を利用する。
【0121】
第4のスロー時ドロップモードでは、画像変換部35は平常時、フレーム補間モードで動作し、描画に時間がかかるスロー時には実質的にフレームドロップモードで動作する。描画・変換処理が1Vシンク内で完了する平常状態では、画像変換部35は、計算で求めた合成係数Tでフレーム補間を行うフレーム補間モードで動作し、描画・変換処理が1Vシンクを超える例外的なスロー状態になった場合、フレーム補間モードにおいて合成係数Tを0または1に設定して、実質的にはフレームドロップモードで動作する。
【0122】
スロー状態になった場合、通常のフレーム補間モードにおいて計算された合成係数Tが0.5より小さいならば、合成係数Tを0に設定し直し、合成係数Tが0.5以上ならば、合成係数Tを1に設定し直す。画像変換部35は、新たに設定された合成係数T(0または1)のもとで線形補間を実行する。実質的には、合成係数Tが1の場合は、現在のフレームCURRをドロップし、合成係数Tが0のときは、一つ前のフレームPREVをドロップすることになる。
【0123】
描画処理部32により描画された画像に対する画像変換処理がグラフィックスプロセッサ30の垂直同期周期内に完了する限り、フレーム補間モードで動作し、グラフィックスプロセッサ30によって描画された画像に対する画像変換処理がグラフィックスプロセッサ30の垂直同期周期内に完了しない場合は、実質的にフレームドロップモードに切り替えて動作する。アプリケーションが想定する垂直同期周波数にもとづく垂直同期信号の発生間隔、すなわち1VSYNC内で描画と画像変換が完了する限りは、フレーム補間モードによって画質の高い補間画像が表示され、1VSYNC内で描画と画像変換が完了しない場合は、実質的にフレームドロップモードに切り替えて、フレーム落ちによる応急処理を施すことができる。1VSYNC内で描画と画像変換が完了せず、フレーム落ちするような状況では、フレームを補間するよりもフレームをドロップした方が画質的には良いことが多いため、第4のスロー時ドロップモードは、そのような場合に採用するのが好ましい。
【0124】
第5の可変混合モードでは、フレームドロップモードとフレーム補間モードに二者択一ではなく、フレーム補間モードの合成係数を調整することでフレーム補間モードと実質的なフレームドロップモードとの中間的なモードを実現する。フレーム補間モードにおいて使用される合成係数の値と、フレーム補間モードにおいて実質的にフレームを落とすことと等価となる合成係数の値との間の値をとる新たな合成係数を定め、その新たな合成係数で第1フレームメモリに保持された2枚の画像を合成する。
【0125】
具体的には、通常のフレーム補間モードにおいて計算された合成係数Tと値1をアプリケーションが指定する可変の混合比Rで次式のように配分して、新たな合成係数T’を求める。
T’=R*1.0+(1−R)*T
ただし、Rは0から1の値を取る。
【0126】
新たに設定された合成係数T’で2枚のフレームが合成されて補間フレームが生成される。混合比Rを1に設定すると、実質的に1つ前のフレームを落として現在のフレームをスキャンアウトするドロップモードと同じ振る舞いになり、混合比Rを0に設定すると、通常のフレーム補間モードと同じ振る舞いになる。混合比Rが0から1の間の値であれば、ドロップモードとフレーム補間モードを混合したような中間的な振る舞いになる。
【0127】
可変混合モードでは、アプリケーションが状況に応じて混合比Rを調整することでフレーム補間モードとドロップモードの間をアナログ的に変化させることができ、柔軟性をもたせることができる。たとえば、オブジェクトの動きが激しく、フレーム間の差分が大きいときは、フレーム補間をすると、残像感が大きくなるため、一つ前のフレームを落として、現在のフレームを表示する方が視覚的には良いことがある。
【0128】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。そのような変形例を説明する。
【0129】
上記の実施の形態では、NTSC方式の垂直同期周波数で描画された画像をPAL方式の垂直同期周波数の画像にフレームレート変換する例を説明したが、フレームレート変換はこれに限られない。PAL/SECAM方式からNTSC方式へ変換する場合にも本発明を適用できる。また、NTSC/PAL/SECAMのテレビジョン信号方式の垂直同期周波数を前提として描画された画像に対して、コンピュータディスプレイの垂直同期周波数に合ったフレームレートに変換する場合、逆にコンピュータディスプレイの垂直同期周波数を前提として描画された画像に対して、テレビジョン信号方式の垂直同期周波数に合ったフレームレートに変換する場合にも本発明は適用できる。
【0130】
また、実施の形態では、グラフィックスプロセッサ30の垂直同期周波数とディスプレイ60の垂直同期周波数の比が整数比ではない場合を説明したが、これが整数比である場合でも、描画処理時間の長短によってフリップ動作の不確定性の問題が生じるため、実施の形態のフレームレート変換処理を適用するメリットがある。
【図面の簡単な説明】
【0131】
【図1】実施の形態に係る描画処理装置の構成図である。
【図2】図1のグラフィックスプロセッサの画像変換処理に係る構成を詳細に説明する図である。
【図3】図2の画像変換部がフレームレート無変換モードで動作する場合を説明する図である。
【図4】図2の画像変換部がフレームドロップモードで動作する場合を説明する図である。
【図5A】図2の画像変換部がフレーム補間モードで動作する場合を説明する図である。
【図5B】図2の画像変換部がフレーム補間モードで動作する場合を説明する図である。
【図6】図6(a)、(b)は、描画垂直同期周波数と表示垂直同期周波数の比が整数比である場合と、整数比でない場合で、垂直同期信号のタイミングのずれ方に違いがあることを説明する図である。
【図7】図7(a)、(b)は、描画垂直同期周波数と表示垂直同期周波数の比が整数比でない場合、スキャンアウトのタイミングが1フレーム分ずれる現象を説明する図である。
【図8】本実施の形態におけるフリップコマンドの実行タイミングを説明する図である。
【図9】図9(a)、(b)は、フレーム補間モードにおいて、フリップコマンドを画像変換処理の直後に実行せずに、画像変換処理から切り離したことによる効果を説明する図である。
【図10A】描画・変換処理の完了が見込まれるタイミングで実際に画像変換処理が完了していた場合のフレームレート変換処理を説明する図である。
【図10B】描画・変換処理の完了が見込まれるタイミングで実際には画像変換処理が完了していなかった場合の過渡的な状態を説明する図である。
【図10C】図10Bの過渡的な状態の後、正常状態に復帰する様子を説明する図である。
【符号の説明】
【0132】
10 メインプロセッサ、 12 コマンド生成部、 14 切替命令発行部、 20 メインメモリ、 22 コマンドバッファ、 23 描画コマンド、 24 画像変換コマンド、 25 フリップコマンド、 30 グラフィックスプロセッサ、 32 描画処理部、 35 画像変換部、 40 ローカルメモリ、 43 ユーザ管理バッファ、 45 ライブラリ管理領域、 47 フレームメモリ、 50 ディスプレイコントローラ、 60 ディスプレイ、 70 テクスチャユニット、 80 通信部、 100 描画処理装置。
【特許請求の範囲】
【請求項1】
グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を保持する第1フレームメモリと、
前記第1フレームメモリに保持された画像をディスプレイの仕様に適した画像に変換する画像変換部と、
前記画像変換部により変換された画像を複数のフレームバッファを切り替えながら保持するフレームメモリであって、前記ディスプレイの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第2フレームメモリと、
次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換部による画像変換処理の実行直後ではなく、前記ディスプレイの垂直同期タイミングに合わせて発行する切替命令発行部とを含むことを特徴とする画像変換装置。
【請求項2】
前記グラフィックスプロセッサの垂直同期周波数と前記ディスプレイの垂直同期周波数の比は、整数比ではないことを特徴とする請求項1に記載の画像変換装置。
【請求項3】
前記画像変換部による画像変換処理は、前記グラフィックスプロセッサによって描画された画像の解像度およびフレームレートの少なくとも一方を前記ディスプレイの仕様に合わせるように変換する処理を含むことを特徴とする請求項1または2に記載の画像変換装置。
【請求項4】
前記画像変換部は、前記グラフィックスプロセッサの垂直同期タイミングが前記ディスプレイの垂直同期タイミングに対してずれている割合にもとづいた合成係数で前記第1フレームメモリに保持された2枚の画像を合成することにより、前記グラフィックスプロセッサによって描画された画像のフレームレートを前記ディスプレイの仕様に合うように変換することを特徴とする請求項1から3のいずれかに記載の画像変換装置。
【請求項5】
前記画像変換部は、前記グラフィックスプロセッサによって描画された画像に対する画像変換処理の完了が見込まれる前記グラフィックスプロセッサの垂直同期タイミングがその見込みの垂直同期タイミングのすぐ後に発生する前記ディスプレイの垂直同期タイミングに対してずれている割合にもとづいた合成係数で前記第1フレームメモリに保持された2枚の画像を合成することにより、前記グラフィックスプロセッサによって描画された画像のフレームレートを前記ディスプレイの仕様に合うように変換することを特徴とする請求項1から3のいずれかに記載の画像変換装置。
【請求項6】
前記切替命令発行部は、前記見込みの垂直同期タイミングのすぐ後に発生する前記ディスプレイの垂直同期タイミングに合わせて、前記フレームバッファ切替命令を発行することを特徴とする請求項5に記載の画像変換装置。
【請求項7】
前記見込みの垂直同期タイミングにおいて、実際には前記画像変換処理が完了していない場合、それ以降の画像変換処理については、改めて前記画像変換処理の完了が見込まれる前記グラフィックスプロセッサの垂直同期タイミングが設定され、前記画像変換部は、改めて設定された見込みの垂直同期タイミングが、その見込みの垂直同期タイミングのすぐ後に発生する前記ディスプレイの垂直同期タイミングに対してずれている割合にもとづいた合成係数で前記第1フレームメモリに保持された2枚の画像を合成することを特徴とする請求項5または6に記載の画像変換装置。
【請求項8】
前記切替命令発行部は、前記フレームバッファ切替命令を、改めて設定された見込みの垂直同期タイミングのすぐ後に発生する前記ディスプレイの垂直同期タイミングに合わせて発行することを特徴とする請求項7に記載の画像変換装置。
【請求項9】
前記切替命令発行部は、前記フレームバッファ切替命令を、前記ディスプレイの垂直同期タイミングよりも所定の余裕時間だけ前に発行することを特徴とする請求項1、6および8のいずれかに記載の画像変換装置。
【請求項10】
前記画像変換部は、前記グラフィックスプロセッサによって描画された画像のフレームレート変換のために、前記第1フレームメモリに保持された2枚の画像を所定の合成係数で合成するフレーム補間モードを備え、
前記画像変換部は、前記グラフィックスプロセッサによって描画された画像に対する画像変換処理が前記グラフィックスプロセッサの垂直同期周期内に完了する限り、前記所定の合成係数のもとで前記フレーム補間モードで動作し、前記グラフィックスプロセッサによって描画された画像に対する画像変換処理が前記グラフィックスプロセッサの垂直同期周期内に完了しない場合は、前記合成係数を前記2枚の画像の内、一方を実質的に落とすことになる値に変更した上で前記フレーム補間モードで動作することにより、前記グラフィックスプロセッサによって描画された画像のフレームレートを前記ディスプレイの仕様に合うように変換することを特徴とする請求項1から3のいずれかに記載の画像変換装置。
【請求項11】
前記画像変換部は、前記グラフィックスプロセッサによって描画された画像のフレームレート変換のために、前記第1フレームメモリに保持された2枚の画像を所定の合成係数で合成するフレーム補間モードを備え、
前記画像変換部は、前記フレーム補間モードにおいて使用される前記合成係数の値と、前記フレーム補間モードにおいて前記2枚の画像の内、一方を落とすことと実質的に等価となる合成係数の値との中間値で新たな合成係数を定め、その新たな合成係数で前記第1フレームメモリに保持された2枚の画像を合成することにより、前記グラフィックスプロセッサによって描画された画像のフレームレートを前記ディスプレイの仕様に合うように変換することを特徴とする請求項1から3のいずれかに記載の画像変換装置。
【請求項12】
グラフィックスプロセッサによって描画される画像をテレビジョン方式の画像に変換する装置であって、
グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を保持する第1フレームメモリと、
前記第1フレームメモリに保持された画像を出力先のテレビション方式の画像に変換する画像変換部と、
前記画像変換部により変換された画像を複数のフレームバッファを切り替えながら保持するフレームメモリであって、出力先のテレビジョンの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第2フレームメモリと、
次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換部による画像変換処理の実行直後ではなく、出力先のテレビジョンの垂直同期タイミングに合わせて発行する切替命令発行部とを含むことを特徴とする画像変換装置。
【請求項13】
前記グラフィックスプロセッサの垂直同期周波数は、特定のテレビジョン方式の垂直同期周波数であり、前記出力先のテレビションの垂直同期周波数は、その特定のテレビジョン方式以外の垂直同期周波数であることを特徴とする請求項12に記載の画像変換装置。
【請求項14】
グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を第1フレームメモリに保持するステップと、
前記第1フレームメモリに保持された画像をディスプレイの仕様に適した画像に変換する画像変換処理ステップと、
切り替え可能な複数のフレームバッファを有するフレームメモリであって、前記ディスプレイの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第2フレームメモリに前記画像変換処理ステップにより変換された画像を保持するステップと、
次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換処理ステップによる画像変換処理の実行直後ではなく、前記ディスプレイの垂直同期タイミングに合わせて発行するステップとを含むことを特徴とする画像変換方法。
【請求項15】
グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を第1フレームメモリに保持する機能と、
前記第1フレームメモリに保持された画像をディスプレイの仕様に適した画像に変換する画像変換機能と、
切り替え可能な複数のフレームバッファを有するフレームメモリであって、前記ディスプレイの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第2フレームメモリに前記画像変換機能により変換された画像を保持する機能と、
次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換機能による画像変換処理の実行直後ではなく、前記ディスプレイの垂直同期タイミングに合わせて発行する機能とをコンピュータに実現させることを特徴とするプログラム。
【請求項1】
グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を保持する第1フレームメモリと、
前記第1フレームメモリに保持された画像をディスプレイの仕様に適した画像に変換する画像変換部と、
前記画像変換部により変換された画像を複数のフレームバッファを切り替えながら保持するフレームメモリであって、前記ディスプレイの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第2フレームメモリと、
次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換部による画像変換処理の実行直後ではなく、前記ディスプレイの垂直同期タイミングに合わせて発行する切替命令発行部とを含むことを特徴とする画像変換装置。
【請求項2】
前記グラフィックスプロセッサの垂直同期周波数と前記ディスプレイの垂直同期周波数の比は、整数比ではないことを特徴とする請求項1に記載の画像変換装置。
【請求項3】
前記画像変換部による画像変換処理は、前記グラフィックスプロセッサによって描画された画像の解像度およびフレームレートの少なくとも一方を前記ディスプレイの仕様に合わせるように変換する処理を含むことを特徴とする請求項1または2に記載の画像変換装置。
【請求項4】
前記画像変換部は、前記グラフィックスプロセッサの垂直同期タイミングが前記ディスプレイの垂直同期タイミングに対してずれている割合にもとづいた合成係数で前記第1フレームメモリに保持された2枚の画像を合成することにより、前記グラフィックスプロセッサによって描画された画像のフレームレートを前記ディスプレイの仕様に合うように変換することを特徴とする請求項1から3のいずれかに記載の画像変換装置。
【請求項5】
前記画像変換部は、前記グラフィックスプロセッサによって描画された画像に対する画像変換処理の完了が見込まれる前記グラフィックスプロセッサの垂直同期タイミングがその見込みの垂直同期タイミングのすぐ後に発生する前記ディスプレイの垂直同期タイミングに対してずれている割合にもとづいた合成係数で前記第1フレームメモリに保持された2枚の画像を合成することにより、前記グラフィックスプロセッサによって描画された画像のフレームレートを前記ディスプレイの仕様に合うように変換することを特徴とする請求項1から3のいずれかに記載の画像変換装置。
【請求項6】
前記切替命令発行部は、前記見込みの垂直同期タイミングのすぐ後に発生する前記ディスプレイの垂直同期タイミングに合わせて、前記フレームバッファ切替命令を発行することを特徴とする請求項5に記載の画像変換装置。
【請求項7】
前記見込みの垂直同期タイミングにおいて、実際には前記画像変換処理が完了していない場合、それ以降の画像変換処理については、改めて前記画像変換処理の完了が見込まれる前記グラフィックスプロセッサの垂直同期タイミングが設定され、前記画像変換部は、改めて設定された見込みの垂直同期タイミングが、その見込みの垂直同期タイミングのすぐ後に発生する前記ディスプレイの垂直同期タイミングに対してずれている割合にもとづいた合成係数で前記第1フレームメモリに保持された2枚の画像を合成することを特徴とする請求項5または6に記載の画像変換装置。
【請求項8】
前記切替命令発行部は、前記フレームバッファ切替命令を、改めて設定された見込みの垂直同期タイミングのすぐ後に発生する前記ディスプレイの垂直同期タイミングに合わせて発行することを特徴とする請求項7に記載の画像変換装置。
【請求項9】
前記切替命令発行部は、前記フレームバッファ切替命令を、前記ディスプレイの垂直同期タイミングよりも所定の余裕時間だけ前に発行することを特徴とする請求項1、6および8のいずれかに記載の画像変換装置。
【請求項10】
前記画像変換部は、前記グラフィックスプロセッサによって描画された画像のフレームレート変換のために、前記第1フレームメモリに保持された2枚の画像を所定の合成係数で合成するフレーム補間モードを備え、
前記画像変換部は、前記グラフィックスプロセッサによって描画された画像に対する画像変換処理が前記グラフィックスプロセッサの垂直同期周期内に完了する限り、前記所定の合成係数のもとで前記フレーム補間モードで動作し、前記グラフィックスプロセッサによって描画された画像に対する画像変換処理が前記グラフィックスプロセッサの垂直同期周期内に完了しない場合は、前記合成係数を前記2枚の画像の内、一方を実質的に落とすことになる値に変更した上で前記フレーム補間モードで動作することにより、前記グラフィックスプロセッサによって描画された画像のフレームレートを前記ディスプレイの仕様に合うように変換することを特徴とする請求項1から3のいずれかに記載の画像変換装置。
【請求項11】
前記画像変換部は、前記グラフィックスプロセッサによって描画された画像のフレームレート変換のために、前記第1フレームメモリに保持された2枚の画像を所定の合成係数で合成するフレーム補間モードを備え、
前記画像変換部は、前記フレーム補間モードにおいて使用される前記合成係数の値と、前記フレーム補間モードにおいて前記2枚の画像の内、一方を落とすことと実質的に等価となる合成係数の値との中間値で新たな合成係数を定め、その新たな合成係数で前記第1フレームメモリに保持された2枚の画像を合成することにより、前記グラフィックスプロセッサによって描画された画像のフレームレートを前記ディスプレイの仕様に合うように変換することを特徴とする請求項1から3のいずれかに記載の画像変換装置。
【請求項12】
グラフィックスプロセッサによって描画される画像をテレビジョン方式の画像に変換する装置であって、
グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を保持する第1フレームメモリと、
前記第1フレームメモリに保持された画像を出力先のテレビション方式の画像に変換する画像変換部と、
前記画像変換部により変換された画像を複数のフレームバッファを切り替えながら保持するフレームメモリであって、出力先のテレビジョンの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第2フレームメモリと、
次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換部による画像変換処理の実行直後ではなく、出力先のテレビジョンの垂直同期タイミングに合わせて発行する切替命令発行部とを含むことを特徴とする画像変換装置。
【請求項13】
前記グラフィックスプロセッサの垂直同期周波数は、特定のテレビジョン方式の垂直同期周波数であり、前記出力先のテレビションの垂直同期周波数は、その特定のテレビジョン方式以外の垂直同期周波数であることを特徴とする請求項12に記載の画像変換装置。
【請求項14】
グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を第1フレームメモリに保持するステップと、
前記第1フレームメモリに保持された画像をディスプレイの仕様に適した画像に変換する画像変換処理ステップと、
切り替え可能な複数のフレームバッファを有するフレームメモリであって、前記ディスプレイの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第2フレームメモリに前記画像変換処理ステップにより変換された画像を保持するステップと、
次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換処理ステップによる画像変換処理の実行直後ではなく、前記ディスプレイの垂直同期タイミングに合わせて発行するステップとを含むことを特徴とする画像変換方法。
【請求項15】
グラフィックスプロセッサによって所与の垂直同期周波数で描画された画像を第1フレームメモリに保持する機能と、
前記第1フレームメモリに保持された画像をディスプレイの仕様に適した画像に変換する画像変換機能と、
切り替え可能な複数のフレームバッファを有するフレームメモリであって、前記ディスプレイの垂直同期周波数にしたがっていずれかのフレームバッファが選択されて画像がスキャンアウトされる第2フレームメモリに前記画像変換機能により変換された画像を保持する機能と、
次にスキャンアウトされるべきフレームバッファを指定するためのフレームバッファ切替命令を、前記画像変換機能による画像変換処理の実行直後ではなく、前記ディスプレイの垂直同期タイミングに合わせて発行する機能とをコンピュータに実現させることを特徴とするプログラム。
【図1】
【図2】
【図3】
【図4】
【図5A】
【図5B】
【図6】
【図7】
【図8】
【図9】
【図10A】
【図10B】
【図10C】
【図2】
【図3】
【図4】
【図5A】
【図5B】
【図6】
【図7】
【図8】
【図9】
【図10A】
【図10B】
【図10C】
【公開番号】特開2008−197394(P2008−197394A)
【公開日】平成20年8月28日(2008.8.28)
【国際特許分類】
【出願番号】特願2007−32717(P2007−32717)
【出願日】平成19年2月13日(2007.2.13)
【出願人】(395015319)株式会社ソニー・コンピュータエンタテインメント (871)
【Fターム(参考)】
【公開日】平成20年8月28日(2008.8.28)
【国際特許分類】
【出願日】平成19年2月13日(2007.2.13)
【出願人】(395015319)株式会社ソニー・コンピュータエンタテインメント (871)
【Fターム(参考)】
[ Back to top ]