特許第5663009号(P5663009)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ティーヴィー ワン リミテッドの特許一覧

特許5663009原画像をワープまたは回転させて表示する装置、その方法、そのコンピュータプログラムおよびそれを記録した記録媒体
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5663009
(24)【登録日】2014年12月12日
(45)【発行日】2015年2月4日
(54)【発明の名称】原画像をワープまたは回転させて表示する装置、その方法、そのコンピュータプログラムおよびそれを記録した記録媒体
(51)【国際特許分類】
   G09G 5/395 20060101AFI20150115BHJP
   G09G 5/393 20060101ALI20150115BHJP
   G09G 5/39 20060101ALI20150115BHJP
   G09G 5/36 20060101ALI20150115BHJP
【FI】
   G09G5/36 530F
   G09G5/36 530E
   G09G5/36 530G
   G09G5/36 520E
   G09G5/36 520K
【請求項の数】16
【全頁数】34
(21)【出願番号】特願2012-516837(P2012-516837)
(86)(22)【出願日】2010年6月4日
(65)【公表番号】特表2012-530953(P2012-530953A)
(43)【公表日】2012年12月6日
(86)【国際出願番号】GB2010001089
(87)【国際公開番号】WO2010149946
(87)【国際公開日】20101229
【審査請求日】2013年5月31日
(31)【優先権主張番号】0911045.3
(32)【優先日】2009年6月25日
(33)【優先権主張国】GB
(31)【優先権主張番号】12/604,700
(32)【優先日】2009年10月23日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】511312768
【氏名又は名称】ティーヴィー ワン リミテッド
【氏名又は名称原語表記】TV One Limited
(74)【代理人】
【識別番号】100062764
【弁理士】
【氏名又は名称】樺澤 襄
(74)【代理人】
【識別番号】100092565
【弁理士】
【氏名又は名称】樺澤 聡
(74)【代理人】
【識別番号】100112449
【弁理士】
【氏名又は名称】山田 哲也
(72)【発明者】
【氏名】マレット,リチャード ピーター ディズニー
【審査官】 小川 浩史
(56)【参考文献】
【文献】 特開平7−210666(JP,A)
【文献】 特開昭62−71990(JP,A)
【文献】 実開昭59−108370(JP,U)
(58)【調査した分野】(Int.Cl.,DB名)
G09G 5/00−5/42
(57)【特許請求の範囲】
【請求項1】
原画像をワープまたは回転させて表示する装置であって、
前記原画像複数の画素行をそれぞれ格納する複数の第1のメモリと、
これら第1のメモリに格納された前記画素行を読み出し、これら画素行を組み合わせて画素ブロックとするブロック格納制御装置であって、各画素ブロックが前記原画像の隣接する水平画素および垂直画素を含み、第2のメモリ中の連続するメモリ位置に格納されるブロック格納制御装置と、
表示装置上の出力画素位置に対応する出力座標を生成する出力座標生成器と、
前記原画像の画素位置に対応する入力座標に前記出力座標をマッピングするエンジンと、
前記入力座標を、この入力座標を有する画素を含む画素ブロックが格納された第2のメモリの対応するバンク、行、および列のアドレスに変換することで、この画素ブロックが格納された前記第2のメモリのメモリ位置を識別するブロック要求変換器と、
前記識別された画素ブロックを要求するブロック要求生成器と、
前記要求された画素ブロックを前記第2のメモリから取り出すメモリコントローラと、
最新の取り出された画素ブロックのアドレスを記録するブロック要求キャッシュと、
前記入力座標を有する画素の値を出力して対応する出力画素位置に表示する表示コントローラと、を備え、
前記メモリコントローラは、前記ブロック要求キャッシュが記録したアドレスを参照して、前記ブロック要求生成器により要求された画素ブロックが前記第2のメモリからの要求または取り出しがあったばかりの画素ブロックである場合には、この画素ブロックを取り出さない
ことを特徴とする装置。
【請求項2】
前記第2のメモリはSDRAMを備え、各画素ブロックが前記SDRAMの連続する列にわたって格納され、前記ブロック要求変換器が、前記入力座標を変換することで、この入力座標を有する画素を含む前記画素ブロックが格納された前記SDRAMの対応するバンク、行、および列のアドレスを識別する
ことを特徴とする請求項1記載の装置。
【請求項3】
前記原画像の隣接する画素ブロックがグループ化されてより大型の画素ブロックとなり、これらのグループ化されたより大型の画素ブロックが前記SDRAMの同じ行に格納される
ことを特徴とする請求項2記載の装置。
【請求項4】
前記出力座標生成器によって生成された出力座標を受信して、オフセットされていない前記出力座標から垂直方向にオフセットされた複数のオフセット出力座標を生成するとともに、オフセットされていない前記出力座標および前記各オフセット出力座標を前記エンジンに提供する垂直オフセット生成エンジンをさらに備えた
ことを特徴とする請求項1ないし3いずれか一記載の装置。
【請求項5】
データ値のフィールドをそれぞれ有する複数の入力座標エントリを格納するシフトレジスタ構成と、
このシフトレジスタ構成の入力座標と任意に取り出した画素ブロックの画素の入力座標とを比較して、一致がある場合は、前記一致した画素のデータ値のフィールドを埋めるポピュレータと、をさらに備えた
ことを特徴とする請求項1ないし4いずれか一記載の装置。
【請求項6】
識別された第2のメモリのメモリ位置を前記ブロック要求変換器から受信し、前記識別された第2のメモリのメモリ位置から内部画素ブロックIDを生成するID生成器と、
このID生成器から前記画素ブロックIDを受信して遅延させるID遅延ラインと、
このID遅延ラインから前記画素ブロックIDを受信して、一致する画素ブロックIDを有する画素ブロックをキャッシュから取り出すルックアップエンジンと、をさらに備えた
ことを特徴とする請求項1ないし5いずれか一記載の装置。
【請求項7】
使用されていない画素ブロックIDのリストを格納するIDリストと、
次に使用可能なブロックID値を指し示す読み出しポインタと、
再利用されたブロックIDを指し示す書き込みポインタと、をさらに備えた
ことを特徴とする請求項6記載の装置。
【請求項8】
前記識別された第2のメモリのメモリ位置を前記ブロック要求変換器から受信し、新しく識別されたブロックの第2のメモリのメモリ位置と比較して、一致がある場合は、前記一致するメモリ位置を有する画素ブロックのブロックIDを再利用し、一致がない場合は、前記識別された画素ブロックに新しいブロックIDを使用するブロックID比較器をさらに備えた
ことを特徴とする請求項6または7記載の装置
【請求項9】
前記メモリコントローラが、取り出された画素ブロックをキャッシュに格納する
ことを特徴とする請求項1ないしいずれか一記載の装置。
【請求項10】
前記メモリコントローラが、前記画素ブロックの隣接する画素を前記キャッシュの異なる領域に格納する
ことを特徴とする請求項記載の装置。
【請求項11】
前記キャッシュは連想メモリを備える
ことを特徴とする請求項または10記載の装置。
【請求項12】
前記出力座標生成器が、ある出力画素周波数で前記出力座標を生成する同期パルス生成器を備えた
ことを特徴とする請求項1ないし11いずれか一記載の装置。
【請求項13】
記エンジンが前記出力座標を非整数座標にマッピングした場合に双線形補間を行う補間器をさらに備え、
前記ブロック要求変換器が、前記非整数座標に寄与する前記原画像の画素の入力座標を識別するとともに、前記寄与画素を含む前記画素ブロックが格納された前記第2のメモリのメモリ位置を識別し、
前記ブロック要求生成器が、前記識別された画素ブロックを要求し、
前記メモリコントローラが、前記要求された画素ブロックを前記第2のメモリから取り出し、
前記補間器が、前記非整数座標に対応する出力画素の補間出力値を決定し、
前記表示コントローラが、前記補間値を出力して対応する出力画素位置に表示する
ことを特徴とする請求項1ないし12いずれか一記載の装置。
【請求項14】
原画像をワープまたは回転させて表示する方法であって、
前記原画像をその複数の画素行に分割する工程と、
前記画素行を組み合わせて画素ブロックとする工程であって、各画素ブロックが前記原画像の隣接する水平画素および垂直画素を含み、さらに各画素ブロックを第2のメモリ中の連続するメモリ位置に格納する工程と、
前記原画像の座標に対して前記連続する第2のメモリ中の固定された位置を割り当てる工程と、
表示装置上の出力画素位置に対応する出力座標を生成する工程と、
前記原画像の画素位置に対応する入力座標に前記出力座標をマッピングする工程と、
前記入力座標を有する画素を含む画素ブロックが格納された第2のメモリでのメモリ位置を識別する工程と、
前記識別された画素ブロックを要求する工程と、
前記要求された画素ブロックを前記第2のメモリから取り出す工程と、
前記入力座標を有する前記画素の値を出力して対応する出力画素位置に表示する工程と、
ブロック要求キャッシュ中の最新の要求された画素ブロックの前記メモリ位置を記録する工程と、
を備え
前記要求された画素ブロックを前記第2のメモリから取り出す工程では、前記ブロック要求キャッシュが記録した前記メモリ位置を参照して、前記第2のメモリからの要求または取り出しがあったばかりの画素ブロックが要求された場合には、この画素ブロックを取り出さない
ことを特徴とする方法。
【請求項15】
原画像をワープまたは回転させて表示するコンピュータプログラムであって、
前記原画像をその複数の画素行に分割するステップと、
前記画素行を組み合わせて画素ブロックとするステップであって、各画素ブロックが前記原画像の隣接する水平画素および垂直画素を含み、さらに各画素ブロックを第2のメモリ中の連続するメモリ位置に格納するステップと、
前記原画像の座標に対して前記連続する第2のメモリ中の固定された位置を割り当てるステップと、
表示装置上の出力画素位置に対応する出力座標を生成するステップと、
前記原画像の画素位置に対応する入力座標に前記出力座標をマッピングするステップと、
前記入力座標を有する画素を含む画素ブロックが格納された第2のメモリでのメモリ位置を識別するステップと、
前記識別された画素ブロックを要求するステップと、
前記要求された画素ブロックを前記第2のメモリから取り出すステップと、
前記入力座標を有する前記画素の値を出力して対応する出力画素位置に表示するステップと、
ブロック要求キャッシュ中の最新の要求された画素ブロックの前記メモリ位置を記録するステップと、
を備え
前記要求された画素ブロックを前記第2のメモリから取り出すステップでは、前記ブロック要求キャッシュが記録した前記メモリ位置を参照して、前記第2のメモリからの要求または取り出しがあったばかりの画素ブロックが要求された場合には、この画素ブロックを取り出さない
ことを特徴とするコンピュータプログラム。
【請求項16】
請求項15記載のコンピュータプログラムが、コンピュータ読み取り可能に記録された
コンピュータプログラムを記録した記録媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、原画像をワープまたは回転させて表示する装置、方法、そのコンピュータプログラムおよびそれを記録した記録媒体に関する。
【背景技術】
【0002】
コンピュータまたは専用の映像処理ハードウェアで処理された映像は、個々の静止画の連続と考えることができる。各画像は、通常は矩形のアレイまたはマトリクスに配列された多数の画素で構成されている。また、画像中の如何なる画素であっても、それが位置する画像中の水平ライン(または行)および垂直ライン(または列)を識別することによって、その座標を決定することができる。
【0003】
ほとんどの映像スケーラアーキテクチャでは、画像を構成する個々の画素の到着順に、入力映像信号をメモリに格納する。したがって、映像を構成する最初の画像の最上行については、当該行の左端の画素から右端の画素へとその全体が格納される。その後、これらの画素は、ひとつのユニットとしてメモリに格納される。この処理は、2番目の行以降も、画像を構成するすべての画素が格納されるまで繰り返される。そして、映像を構成するすべての画像に対してこの処理が繰り返される。
【0004】
このように映像データを格納するには、同期ダイナミックランダムアクセスメモリ(SDRAM:Synchronous Dynamic Random Access Memory)チップが特に好適である。SDRAMでは、データがバンク、行、および列に格納される。SDRAMチップの構成を視覚化する場合、SDRAMメモリの各バンクを、行方向および列方向に多数の引き出しを有する大型のファイルキャビネットと見なす方法がある。各引き出しは、一定量の情報を格納し、それが位置する特定のファイルキャビネットの特定行および特定列を指定することによって識別することができる。
【0005】
SDRAM内のアドレスとして使用される行および列と画像を構成する行および列との混同を避けるため、本明細書では、後者を一般的に「水平ライン」および「垂直ライン」とそれぞれ称するものとする。
【0006】
一実施態様において、各画素には24ビットの情報が含まれる。これは、各画素が224=16,777,216の色値のうちの1つを表すことが可能であることを意味する。48ビット幅のデータバスであれば48ビットを格納可能であるが、これは、各画素が24ビット長であることから2画素分の情報に相当する。この2画素分の情報は、「データワード」と称することが多い。ダブルデータレート同期ダイナミックランダムアクセスメモリ(DDR2 SDRAM:Double Data Rate Synchronous Dynamic Random Access Memory)チップでは、クロックサイクルごとに2つのデータワードを転送する。これは、各クロックサイクルに4画素分の情報を格納可能であることを意味する。したがって、8つのデータワードに相当する16画素分の格納には、4回のクロックサイクルを要する。
【0007】
図1は、8000 2,Federal Way,P.O.Box6,Boise,ID 83707−006,USAに本社を置くMicron Technology社またはそのウェブサイトhttp://download.micron.com/pdf/datasheets/dram/ddr2/256MbDDR2.pdfより入手可能なMicron 256Mb DDR2のデータシートから取得したタイミングチャートである。
【0008】
図1は、標準的なDDR2 SDRAMにおける順次列アクセスを示す。順次列アクセスは、SDRAMメモリの特定行の任意の列にアクセスすることを意味する。時刻T0では、READコマンドの発行により、SDRAMメモリの特定バンクにおける特定行から列nが読み出される。その後の時刻T2では、別のREADコマンドの発行により、同じバンクおよび行の異なる列bが読み出される。時刻T3では、列nに含まれるすべてのデータが返される。図1に見られるように、列nからデータが返されるまでには、T0とT3との間にクロックサイクル3回分の遅れが生じている。SDRAMに対するこれら各READコマンドは、4つのデータワードに相当する。すなわち、2回のクロックサイクルで、SDRAMの関連する列から「DQ」が取り出される。したがって、クロック2回のデータ転送では、8画素分の画像データに相当する4つのDQが取り出される。
【0009】
T2では、最初の4つのDQが実際に取り出される前に2番目のREADコマンドが発行されている。これは「パイプライン方式」と称し、READコマンドが連続的に発行されていなくても1つの行からアクセスされているデータストリームに空白が生じないようにするためのものである。
【0010】
時刻T3以降は、クロックサイクルごとに2つのデータワードが取り出し可能である。これは、一度オープンとなった行の異なる列からは、1回のクロックサイクルで2つのデータワードが読み出されることを意味する。
【0011】
図2は、同じMicron 256 Micron 256Mb DDR2のデータシートから取得したタイミングチャートである。この図2は、標準的なDDR2 SDRAMにおける順次行アクセスを示す。図2は、同じ行の異なる列に順次アクセスする代わりに異なる行に順次アクセスする点で図1とは異なる。順次行アクセスは、たとえば90°回転に必要である。
【0012】
最初にアクセスする行(ここでは行A)は、時刻T1のACT(ACTivate)コマンドの発行によりアクティブとなる。そして、時刻T4のREADコマンドの発行により、行Aから所要列(列n)が読み出される。異なる行からデータを読み出したい場合は、対応する列からの読み出しであろうがなかろうが、まずは行Aを「プリチャージ」すなわちクローズしなければならない。時刻T6にPREコマンドが発行され、3回のクロックサイクル(tRP)が経過すると、時刻T9では行Aがクローズとなって別のACTコマンドが発行可能となる。
【0013】
1つの行の連続する列を順次読み出すのとは対照的に、異なる行からの順次読み出しには8回のクロックサイクルを要する。これは、次の行の読み出しが可能になる前に、各行のオープンおよびクローズを行わなければならないためである。要約すれば、連続する行の読み出しは、同じ行の連続する列の読み出しの8倍遅くなる。
【発明の概要】
【発明が解決しようとする課題】
【0014】
一部のデータ処理構成、特に画像処理構成においては、データ処理に際して順次行アクセスを頻繁に行う必要があり、データ処理時間が長くなるとともにシステムリソースが集中的に使用されることになる。そして、入力画像を非矩形にマッピングする画像のワープ処理には、ランダム行アクセスが必要である。これらおよび他の映像ベースのデータアクセスに関する特徴により、映像データの処理および使用が課題となっている。
【課題を解決するための手段】
【0015】
本発明は、多数の実施形態および適用例として例示するが、その一部を以下に概説する。
【0016】
本発明の種々の実施形態は、上述の問題のほか、特に映像データまたは画像データの処理に適するその他の問題にも対応する。本発明は、種々の実施形態において、順次行アクセスが必要な場合のデータ処理オーバーロードに対応する。
【0017】
本発明の第1の態様によれば、原画像をワープまたは回転させて表示する装置であって、原画像の複数の画素行をそれぞれ格納する複数の第1のメモリと、これら第1のメモリに格納された画素行を読み出し、これら画素行を組み合わせて画素ブロックとするブロック格納制御装置であって、各画素ブロックが原画像の隣接する水平画素および垂直画素を含み、第2のメモリ中の連続するメモリ位置に格納されるブロック格納制御装置と、表示装置上の出力画素位置に対応する出力座標を生成する出力座標生成器と、原画像の画素位置に対応する入力座標に出力座標をマッピングするエンジンと、入力座標を、この入力座標を有する画素を含む画素ブロックが格納された第2のメモリの対応するバンク、行、および列のアドレスに変換することで、この画素ブロックが格納された第2のメモリのメモリ位置を識別するブロック要求変換器と、上記識別された画素ブロックを要求するブロック要求生成器と、上記要求された画素ブロックを第2のメモリから取り出すメモリコントローラと、最新の取り出された画素ブロックのアドレスを記録するブロック要求キャッシュと、入力座標を有する画素の値を出力して対応する出力画素位置に表示する表示コントローラと、を備え、メモリコントローラが、ブロック要求キャッシュが記録したアドレスを参照して、ブロック要求生成器により要求された画素ブロックが前記第2のメモリからの要求または取り出しがあったばかりの画素ブロックである場合には、この画素ブロックを取り出さないことを特徴とする装置が提供される。
【0018】
この装置では、アレイをブロックに分割することによって、処理能力をより効率的に使用可能である。このことは、データのマッピングまたは変形が必要な状況において特に都合が良い。本明細書における「ブロック」という用語は、すべての画素が同じ水平ラインまたは垂直ラインに位置するのとは異なり、入力画像の隣接する水平ラインおよび垂直ラインに位置する隣接画素の任意のグループまたはサブユニットを意味する。たとえば、ブロックは、好ましくは矩形アレイまたは単純なL字形状であってもよいが、その他の形状のブロックについてもこの用語の範囲内である。そして、不必要なメモリアクセスは最小限に抑えられる
【0019】
上記第2のメモリがSDRAMを備え、各画素ブロックが当該SDRAMの連続する列にわたって格納され、上記ブロック要求変換器が、入力座標を変換することで、この入力座標を有する画素を含む上記所要の画素ブロックが格納されたSDRAMの対応するバンク、行、および列のアドレスを識別してもよい。SDRAMへのアクセスでは通常、入力画像のマッピングに順次行アクセスが必要となってしまう。入力画像を構成する画素がブロックに格納されていれば、SDRAMへのアクセス量が少なくなる可能性がある。
【0020】
上記原画像の隣接する画素ブロックがグループ化されてより大型の画素ブロック(依然、単一行内に存在)となり、これらのグループ化されたより大型の各画素ブロックがSDRAMの同じ行に格納されてもよい。このようにバンクをインターリーブすると、より大型の画素ブロックに含まれる画素へのアクセスが高速化可能となる。
【0021】
上記装置は、上記出力座標生成器によって生成された出力座標を受信して、オフセットされていない当該出力座標からそれぞれ垂直方向にオフセットされた複数のオフセット出力座標を生成するとともに、オフセットされていない出力座標および各オフセット出力座標を上記エンジンに提供する垂直オフセット生成エンジンをさらに備えていてもよい。このようにして、入力座標の複数のラインを生成可能である。
【0022】
上記装置は、データ値のフィールドをそれぞれ有する複数の入力座標エントリを格納するシフトレジスタ構成と、シフトレジスタ構成の入力座標と任意に取り出した画素ブロックの画素の入力座標とを比較して、一致がある場合は、当該一致した画素のデータ値のフィールドを埋めるポピュレータと、をさらに備えていてもよい。このシフトレジスタ構成は、メモリから所要の画素値を取り出す際の遅延を補完するために使用可能である。
【0023】
上記装置は、識別された第2のメモリのメモリ位置を上記ブロック要求変換器から受信し、当該識別された第2のメモリのメモリ位置から内部画素ブロックIDを生成するID生成器と、ID生成器から上記画素ブロックIDを受信して遅延させるID遅延ラインと、このID遅延ラインから上記画素ブロックIDを受信して、一致する画素ブロックIDを有する画素ブロックをキャッシュから取り出すルックアップエンジンと、をさらに備えていてもよい。このID生成器は、特定の画素ブロックを識別する際の有用なエンジンを提供する。また、ID遅延は、第2のメモリから画素情報を取り出す際の遅延を補完するために使用可能である。
【0024】
上記装置は、使用されていない画素ブロックIDのリストを格納するIDリストと、次に使用可能なブロックID値を指し示す読み出しポインタと、再利用されたブロックIDを指し示す書き込みポインタと、をさらに備えていてもよい。このIDリストは、正しい画素ブロックに正しいIDが割り当てられるようにするために使用可能である。
【0025】
上記装置は、識別された第2のメモリのメモリ位置を上記ブロック要求変換器から受信し、新しく識別されたブロックの第2のメモリのメモリ位置と比較して、一致がある場合は、当該一致するメモリ位置を有する画素ブロックのブロックIDを再利用し、一致がない場合は、上記識別された画素ブロックに新しいブロックIDを使用するブロックID比較器をさらに備えていてもよい。このブロックID比較器は、装置の動作を簡素化するブロックIDの使用を管理するためのものである。
【0026】
記メモリコントローラが、取り出された画素ブロックをキャッシュに格納してもよい。このように、不必要なメモリアクセスは最小限に抑えられる。
【0027】
上記メモリコントローラが、上記画素ブロックの隣接する画素を上記キャッシュの異なる領域に格納してもよい。これにより、双線形補間が容易になる。
【0028】
上記キャッシュが連想メモリを備えていてもよい。これにより、画素の読み返しに使用するメモリを少なくすることができる。
【0029】
上記出力座標生成器が、ある出力画素周波数で上記出力座標を生成する同期パルス生成器を備えていてもよい。
【0030】
上記装置は、上記エンジンが出力座標を非整数座標にマッピングした場合に双線形補間を行う補間器をさらに備え、上記ブロック要求変換器が、非整数座標に寄与する原画像の画素の入力座標を識別するとともに、当該寄与画素を含む画素ブロックが格納された第2のメモリのメモリ位置を識別し、上記ブロック要求生成器が、上記識別された画素ブロックを要求し、上記メモリコントローラが、上記要求された画素ブロックを第2のメモリから取り出し、上記補間器が、非整数座標に対応する出力画素の補間出力値を決定し、上記表示コントローラが、当該補間値を出力して対応する出力画素位置に表示してもよい。これによって、より正確な出力を提供する双線形補間が容易になる。
【0031】
本発明の第2の態様によれば、原画像をワープまたは回転させて表示する方法であって、原画像をその複数の画素行に分割する工程と、画素行を組み合わせて画素ブロックとする工程であって、各画素ブロックが原画像の隣接する水平画素および垂直画素を含み、さらに各画素ブロックを第2のメモリ中の連続するメモリ位置に格納する工程と、原画像の座標に対して連続する第2のメモリ中の固定された位置を割り当てる工程と、表示装置上の出力画素位置に対応する出力座標を生成する工程と、原画像の画素位置に対応する入力座標に出力座標をマッピングする工程と、入力座標を有する画素を含む画素ブロックが格納された第2のメモリでのメモリ位置を識別する工程と、上記識別された画素ブロックを要求する工程と、上記要求された画素ブロックを第2のメモリから取り出す工程と、入力座標を有する画素の値を出力して対応する出力画素位置に表示する工程と、ブロック要求キャッシュ中の最新の要求された画素ブロックのメモリ位置を記録する工程と、を含み、要求された画素ブロックを第2のメモリから取り出す工程では、ブロック要求キャッシュが記録したメモリ位置を参照して、第2のメモリからの要求または取り出しがあったばかりの画素ブロックが要求された場合には、この画素ブロックを取り出さない方法が提供される。
【0032】
本発明のその他の態様によれば、実行により上記方法をデータ処理装置に行わせる命令を含むコンピュータプログラム、当該コンピュータプログラムを含むコンピュータ可読媒体が提供される。
【0033】
一実施例に関連して、データ処理装置は、受信器回路、メモリコントローラ回路、およびポピュレータ回路を具備する。受信器回路は、水平ラインおよび垂直ラインに配列されたデータ要素アレイの形式でデータを受信する。メモリコントローラ回路は、(たとえばメモリの制御等によって)アレイの隣接する各水平ラインおよび各垂直ラインのデータ要素サブセットを含むアレイのサブユニットをメモリ位置に格納する。ポピュレータ回路は、当該メモリ位置からサブユニットを取り出して処理する。これらの各回路は、たとえば指示された機能を実行するようにプログラムされたコンピュータとして実装してもよい。また、この用途に対して、以下の例をさらに実装してもよい。
【0034】
別の実施例に関連して、映像データ処理装置は、受信器回路、複数のラインバッファ回路、メモリコントローラ回路、およびポピュレータ回路を具備する。受信器回路は、水平ラインおよび垂直ラインに配列された、画像を表す画素アレイの形式でデータを受信する。ラインバッファ回路は、受信したアレイの異なる画素ラインをそれぞれ保持する。メモリコントローラ回路は、少なくとも2つのラインバッファからの画素サブセットを含むアレイのサブブロックを単一のメモリ位置に格納する。この場合、各画素サブセットには、各ラインのすべての画素が含まれるわけではない。また、各画素ブロックは、画像のサブポーションを表す。ポピュレータ回路は、当該メモリ位置からサブブロックを取り出して処理する。
【0035】
別の実施例は、水平ラインおよび垂直ラインに配列されたデータ要素アレイの形式でデータを受信する工程と、アレイの隣接する各水平ラインおよび各垂直ラインのデータ要素サブセットを含むアレイのサブユニットをメモリ位置に格納する工程と、当該メモリ位置からサブユニットを取り出して処理する工程と、を行わせる命令を実行するプログラマブルコンピュータによる実装方法に関する。
【0036】
本発明の別の態様例によれば、データ処理装置は、水平ラインおよび垂直ラインに配列されたデータ要素アレイの形式でデータを受信する受信器と、アレイの隣接する水平ラインおよび垂直ラインのデータ要素を含むアレイのサブユニットをメモリ位置に格納するメモリコントローラと、当該メモリ位置からサブユニットを取り出して処理するポピュレータとを具備する。
【0037】
この装置では、1本のみの水平ラインではなくアレイの隣接する水平ラインおよび垂直ラインのデータ要素を含むサブユニットにアレイを分割することによって、処理能力をより効率的に使用可能である。このことは、データのマッピングまたは変形が必要な状況において特に適用可能である。
【0038】
上記装置は、受信器で受信したアレイのデータ要素数を少なくするダウンスケーラを備えていてもよい。このダウンスケーラは、たとえばデータ要素の一部が実際には処理する必要がない場合に、データ処理要求全体のオーバーヘッドを低減するために使用可能である。
【0039】
上記装置は、アレイの異なる水平ラインのデータ要素をそれぞれ保持する複数のラインバッファを備えていてもよい。
【0040】
上記装置は、2つ以上のラインバッファからの異なる水平ラインのデータ要素を同じメモリ位置のサブユニットとしてメモリコントローラに格納させる格納コントローラを備えていてもよい。
【0041】
上記装置は、出力座標を生成する出力座標生成器を備えていてもよい。また、この出力座標生成器は、同期パルス生成器であってもよい。
【0042】
上記装置は、出力座標を所要データ要素の元のデータ座標に変換するマッパーを備えていてもよい。この所要データ要素は、情報を対応する出力座標に提供するメモリに格納されたデータ要素である。また、マッパーは、ルックアップテーブルを用いて変換してもよい。この変換の数学的変形を定義するのが困難または不可能な場合は、ルックアップテーブルが特に有用である。あるいは、マッパーは、数学的変形を用いて変換してもよい。
【0043】
上記装置は、所要データ要素の元のデータ座標を受信して、当該所要のデータ要素を含むメモリに格納されたデータ要素のサブユニットのメモリ位置を決定する変換器を備えていてもよい。
【0044】
上記装置は、新たに要求されたサブユニットのメモリ位置をキャッシュするキャッシュを備えていてもよい。
【0045】
上記装置は、所要データ要素の元のデータ座標を対応するデータ値とともに格納するシフトレジスタを備えていてもよい。
【0046】
上記装置は、シフトレジスタに保持された元のデータ座標と第2のメモリから取り出されたサブユニットの元のデータ座標とを一致させることにより、データ要素の当該サブユニットを用いてデータ値を書き込むポピュレータを備えていてもよい。
【0047】
上記装置は、複数のシフトレジスタおよび補間器を備え、元のデータ座標が非整数値座標である場合は、整数値の元のデータ座標を有する隣接データ要素のデータ値を取り出すように上記ポピュレータが構成され、整数の元のデータ座標の取り出された各データ値に対する重み付けがなされた寄与から成る出力を提供するように上記補間器が構成されていてもよい。これにより、たとえば非整数値の座標がありそうな場合に、データの複雑なマッピングが提供される。
【0048】
上記出力座標生成器は、同期パルス生成器を構成する代わりに、あるメモリ周波数で出力データ座標セットを生成するメモリ側出力データ座標生成器およびある表示周波数で出力表示座標を生成する表示装置側出力座標生成器を備えていてもよい。
【0049】
上記装置は、メモリ側出力データ座標生成器から出力データ座標を受信して、出力データ座標の別のラインに対応する別の出力データ座標セットを生成するオフセット構成を備えていてもよい。
【0050】
上記装置は、上記別の出力データ座標セットを受信して元のデータ座標に変換するマッパーを備えていてもよい。
【0051】
上記装置は、元のデータ座標を受信して、当該元のデータ座標のデータ要素が位置するサブユニットまたはユニットの第2のメモリのメモリ位置を示すメモリアドレスに変換する変換器を備えていてもよい。このアドレスには、サブユニットが位置する第2のメモリのバンク、行、および列と、当該サブユニットの特定の所要データ要素を示すオフセット値とが含まれていてもよい。
【0052】
上記装置は、アドレスを用いて内部ID値を生成するID生成器を備えていてもよい。この内部ID値には、バンク、行、および列の各アドレスの下位ビットが含まれていてもよい。これにより、多数のデータ要素に対して一意に有効な小サイズのID値が得られる。
【0053】
上記装置は、新たに要求されたサブユニットを格納するキャッシュを備えていてもよい。
【0054】
上記装置は、元の座標を保持する遅延器を備えていてもよい。
【0055】
上記装置は、ID値を用いてキャッシュ内を探索し、同じID値を有するデータ要素の関連サブユニットを取り出して、ラインバッファにおける対応する元のデータ座標のデータエントリを書き込むルックアップエンジンを備えていてもよい。
【0056】
上記装置は、複数のラインバッファを備え、メモリ側出力座標生成器によって生成された出力座標が一部のラインバッファに書き込まれ、その他のラインバッファから対応するデータ値が読み出し可能であってもよい。
【0057】
上記装置は、映像スケーラを備えていてもよい。
【0058】
上記装置は、メモリ位置を含むメモリを備えていてもよい。このメモリ位置には、SDRAMにおける位置が含まれていてもよい。SDRAMは、SRAM等の他の形式のメモリよりも若干安い可能性があるため、装置の全体コストが低減される。SDRAMは、DDR2 SDRAMを構成していてもよい。
【0059】
処理するデータには、映像データが含まれていてもよい。データ要素のアレイには、画像が含まれていてもよい。また、データ要素には、画像の画素が含まれていてもよい。上記装置は、映像データの処理に特に好適である。
【0060】
本発明の別の態様によれば、水平ラインおよび垂直ラインに配列されたデータ要素アレイの形式でデータを受信する工程と、アレイの隣接する水平ラインおよび垂直ラインのデータ要素を含むアレイのサブユニットを第2のメモリのメモリ位置に格納する工程と、当該メモリ位置からサブユニットを取り出して処理する工程と、を含むデータ処理方法が提供される。
【0061】
特に、メモリがSDRAMメモリである場合、この方法は、SDRAMメモリの1つのバンクのメモリ位置にサブアレイを格納する工程と、SDRAMメモリの異なるバンクにアレイの隣接するサブユニットを格納する工程と、を含んでいてもよい。この方法は、SDRAMのバンクのインターリーブに使用可能であり、データ処理要求を低減可能である。
【0062】
本発明の別の態様によれば、実行により上記データ処理方法をデータ処理装置に行わせる命令を含むコンピュータプログラムが提供される。コンピュータ可読媒体は、コンピュータプログラムを含んでいてもよい。
【0063】
上記発明の概要は、本発明の例示された各実施形態またはすべての実施態様を説明するためのものではない。
【図面の簡単な説明】
【0064】
本発明は、添付の図面に関連して種々の実施形態の詳細な説明を考慮すれば、より完全に理解可能である。
図1図1は、隣接列にデータ要素を含むサブアレイへのアクセスに関して種々の実施例の態様を適用可能なDDR2 SDRAMにおける順次列アクセスのタイミングチャートである。
図2図2は、隣接行にデータ要素を含むサブアレイへのアクセスに関して種々の実施例の態様を適用可能なDDR2 SDRAMにおける順次行アクセスのタイミングチャートである。
図3図3は、本発明の1または複数の実施例に係る、第1データ処理構成の概略図である。
図4図4は、本発明の1または複数の実施例に係る、SDRAMのバンクのインターリーブを視覚的に表した図である。
図5図5は、本発明の1または複数の実施例に係る、入力画像を示した図である。
図6図6は、本発明の1または複数の実施例に係る、ラインに基づいて格納された入力画像を示した図である。
図7図7は、本発明の1または複数の実施例に係る、ブロックに基づいて格納された入力画像を示した図である。
図8図8は、本発明の1または複数の実施例に係る、図5に示した入力画像に対応する時計回りに90°回転された出力画像を示した図である。
図9図9は、本発明の1または複数の実施例に係る、第2データ処理構成の概略図である。
図10図10は、本発明の1または複数の実施例に係る、第3データ処理構成の概略図である。
図11図11は、本発明の1または複数の実施例に係る、第4データ処理構成の概略図である。
図12図12は、本発明の1または複数の実施例に係る、図11に示した第4データ処理構成の下位構成の概略図である。
図13図13は、本発明の1または複数の実施例に係る、出力ストライプを視覚的に表した図である。
図14図14は、本発明の1または複数の実施例に係る、入力ストライプを視覚的に表した図である。
図15図15は、本発明の別の実施例に係る、図11に示した第4データ処理構成のアンチエイリアシングまたはスムージングのための下位構成の概略図である。
図16図16は、別の実施例に係る、SDRAMにデータを格納する構成を示した図である。
図17図17は、別の実施例に係る、連想メモリ(CAM:Content Addressable Memory)での増強を行った構成を示した図である。
図18図18は、本発明の1または複数の実施例に係る、第5データ処理構成の概略図である。
図19図19は、別の実施例に係る、ブロックIDを視覚的に表した図である。
図20図20は、別の実施例に係る、IDリストを視覚的に表した図である。
図21図21は、別の実施例に係る、双線形補間を視覚的に表した図である。
図22図22は、別の実施例に係る、隣接画素の異なるキャッシュ領域への格納を視覚的に表した図である。
図23図23は、本発明の1または複数の実施例に係る、第6データ処理構成の概略図である。
【発明を実施するための形態】
【0065】
本発明は、様々な異なる種類のデータ処理デバイス、構成、および方法に適用可能と考えられる。また、映像データ等のデータ処理を含む用途において特に有用であることが分かっている。本発明は、必ずしもこのような方法には限定されず、その種々の態様は、このような背景および他の背景の種々の事例を論じることによって理解可能である。
【0066】
種々の実施例に関連して、本明細書における「サブユニット」という用語は、(たとえば、すべてのデータ要素が同じ水平ラインまたは垂直ラインに位置する場合に関して)、隣接する水平ラインおよび垂直ラインに位置する隣接データ要素(画素等)の任意のグループを意味する。たとえば、サブユニットは、好ましくは矩形アレイまたは単純なL字形状であってもよいが、その他の形状のサブユニットについてもこの用語の範囲内である。また、サブユニットは、データ要素のブロックを構成していてもよい。ブロックは、サブユニットの有用な形状を提供し、すべての方向のデータ要素への近似的なランダムアクセスを可能とする。種々の実施例に関連して、このようなサブユニットへのアクセスには、隣接する水平ラインおよび垂直ラインのデータ要素への同時アクセスを伴ってもよい。これらデータ要素は、(サブユニットとしてのグループ化を行わなければ)水平ラインアクセスまたは垂直ラインアクセスを介した同時アクセスが不可能である。
【0067】
種々の実施形態において、サブユニットは、アレイの隣接する垂直ラインおよび水平ラインのデータ要素で構成された4×4のアレイを含む。これにより、特に効率的な方法で16個のデータ要素を処理することができる。
【0068】
ここで図面を参照して、図3は、データ(この例では、映像データまたは画像データ)の格納およびアクセスのためのデータ処理構成300を示している。この構成300は、インターネット等の通信ネットワークまたは映像を記録したソースから直接、入力映像信号を受信する入力映像信号受信器302を有する。
【0069】
入力映像信号には、ダウンスケーラ304によるダウンスケーリングが任意で行われる。ダウンスケーラ304は、構成300で処理する画素の数を少なくする。ダウンスケーリングは、処理される画素の総数を少なくすることによって、構成300の後段で必要となる処理量を制限するのに有用である。このことは、入力映像の解像度(画素数)が、それが表示されるデバイスによってサポートされるであろう解像度よりも著しく高い場合に役立つ可能性がある。この場合、入力映像信号のすべての画素を処理する必要はない。
【0070】
構成300においては、所定数のラインが蓄積されるまで、入力映像信号のいくつかの画素ラインがラインバッファ306に保持される。この例では、入力映像信号の画素ライン全体をそれぞれ格納する4つのラインバッファ306が存在する。4つのラインバッファ306がいっぱいになったら、ラインバッファ306から16個の画素が読み出され、ブロック格納制御装置308に渡される。ブロック格納制御装置308は、これら4つのラインからの画素を、画素16個の4×4のブロックとしてSDRAMメモリの連続する列に格納する。これは、このようなブロック格納制御装置308を有さない従来の画像格納方法と対照的である。その後、画素ブロックは、SDRAMコントローラ310に送信されて、SDRAMメモリ312の特定のバンク、および当該バンクの特定行および複数の列のアドレスに格納される。
【0071】
構成300は、格納された画像データブロックにアクセスして表示するため、同期パルス生成器(SPG:Sync Pulse Generator)314を具備する。SPG314は、水平パルスおよび垂直パルスの形式で標準的な映像タイミング信号を生成するものであって、画面に表示する出力画像の画素の出力X座標およびY座標または位置(OX、OY)を生成する際に使用する。すなわち、SPG314は、表示画面上の左端最上部の画素(OX、OY)=(0、0)に対応するパルスを生成した後、そのすぐ右側の画素(OX、OY)=(1、0)に対応するパルスを生成し、右端最下部の画素まで同様に画面上を走査する。表示画面上の画素位置を識別するための座標(OX、OY)は、本明細書では「出力」座標または位置と称する。これは、以下に説明する入力画像すなわち原画像の「元の」座標または位置(WX、WY)と対照的である。
【0072】
出力座標(すなわち表示座標(OX、OY))は、マッパーすなわちマッピングエンジン316に供給される。マッパー316は、出力映像信号中のどの画素が入力映像中のどの画素に対応するかを決定するためのものである。すなわち、入力画像からどの画素を取り出して表示装置上に出力画像を表示する必要があるのかを決定するためのものである。これを行うため、マッパー316は、数学的変形を用いて座標(WX、WY)に出力座標(OX、OY)をマッピングするようにしてもよい。あるいは、マッパー316は、ルックアップテーブルを用いて座標(WX、WY)を生成してもよい。後者の方法では、たとえば数学的変形による定義が困難または不可能な場合に、出力画素(OX、OY)と元の(WX、WY)画素間の対応付けまたはマッピングをこのテーブルにより指し示してもよい。その一例としては、元の画像の「ジャンブル」がマッピングに含まれる場合が挙げられる。
【0073】
従来の映像スケーラでは、入力画像の水平画素ラインを単位として画素が格納されていることによりそれら画素へのすべてのアクセスが制限されているため、複雑なマッピングは効率的でない。直ちに利用できる「マッピング」は、水平方向または垂直方向の「フリップ」のみである。水平方向のフリップ(すなわち垂直軸周りの回転)は、出力画像の第1水平ラインのすべての画素が元の画像の第1水平ラインに含まれ、順序が逆になるだけであるため、従来のスケーラの範疇である。同様に、垂直方向のフリップについても、出力画像の第1水平ラインのすべての画素が入力画像の最下水平画素ラインの対応位置に存在するため、従来のスケーラの範疇である。当然のことながら、従来のスケーラは、数学的変形またはルックアップテーブルの使用が制限され、入力座標(WX、WY)と同じ座標(OX、OY)を出力するか、または、出力座標(OX、OY)に単純なスケーリングファクタを適用して元の座標(WX、WY)を決定するだけの「通常」の入力/出力マッピングに好適である。
【0074】
前述の通り、マッパー316により決定された元の座標(WX、WY)は、入力映像信号の関連する画素座標を指定し、これにより、SDRAMメモリ312から関連する画素が取り出される。元の座標(WX、WY)はブロック要求変換器318に渡され、そこで元の座標(WX、WY)は、当該画素を含むブロックが格納されたSDRAMメモリ312の対応するバンク、行、および列のアドレスに変換される。すなわち、ブロック要求変換器318は、元の画素座標(WX、WY)を、SDRAMメモリ312の所望の画素を含む複数の画素が格納された単一のブロックのアドレスに変換する。
【0075】
画素の順次アクセスではしばしば、結果的に、元の画像の隣接する水平ラインおよび垂直ラインの画素をSDRAMメモリ312から取得する必要があるため、ブロック要求キャッシュ320を採用して新たに要求されたブロックを記憶するようにする。このキャッシュ320は、ブロック自体の内容を格納するのではなく、アクセスがあったという事実のみを格納する。要求ブロックが取り出されたばかりの場合、ブロック要求キャッシュ320を用いれば、SDRAMメモリ312から当該特定のブロックを取り出すようメモリコントローラ310に別の指令を発行する必要がなくなる。これは、当該ブロックが既にオープン状態となっているか、またはSDRAMコントローラ310によるフェッチが実行中となるためである。
【0076】
SDRAMメモリ312から特定のブロックが取り出されると、当該ブロックの画素情報が出力画像の空の画素にポピュレートされる。これを行うため、ポピュレータすなわちマッチ/フィルエンジン322は、シフトレジスタ324と通信を行って、出力画像の画素にポピュレートする。シフトレジスタ324は、マッパー316から出力されてSDRAMメモリ312から取り出される元の座標(WX、WY)を格納するために採用されている。このシフトレジスタ324は、その長さを任意とすることで、入力映像からの所要の元の画素に関連する元の座標(WX、WY)の、マッパー316による初期計算と、SDRAMメモリ312からの当該画素の実際の受信との間の遅延を可能とする。この遅延は、関連する元の画素が要求された後のセミランダムな時点となる。特定の画素またはブロックの要求とSDRAMメモリ312からの当該ブロックの実際の取り出しとの間の遅延が長い場合は、より長いシフトレジスタを用いてもよい。
【0077】
シフトレジスタ324は、マッパー316によって新しい座標(WX、WY)が生成されるとシフトする。当該画素は値が未知であるために最初は空であるが、シフトレジスタ324には、その画素の画素値またはデータ値(D)のフィールドが含まれる。ブロック要求が達成されてSDRAMメモリ312から画素ブロックが取り出されると、ブロックとシフトレジスタ324の全エントリとを比較することにより、当該ブロックのいずれかの画素情報をシフトレジスタ324のいずれかの空エントリに書き込みできるか否かの確認が行なわれる。その一例としては、取り出されたブロックの画素の座標(WX、WY)がシフトレジスタ324に既存の別の座標(WX、WY)と一致する場合が挙げられる。各ブロックにはいくつかの画素(この例では16個の画素)が取り出されているため、既に生成済みであれば、取り出された単一のブロックでシフトレジスタの複数の位置が満たされてもよい。
【0078】
一致がある場合、すなわちシフトレジスタ324の座標(WX、WY)がSDRAMメモリ312から取り出されたブロックの同じ画素(WX、WY)に対応する場合は、対応する画素データDがシフトレジスタ324の対応するデータ位置(WX、WY)に格納される。
【0079】
シフトレジスタ324が最初から最後までシフトし終えるまでに、その各座標(WX、WY)には、ポピュレータ322によってデータ値Dが格納されているべきである。このデータ値Dは、シフトレジスタ324の長さだけ遅延された、所与の出力画素座標(OX、OY)に対する所要の出力画素値である。この遅延は、SPG314で生成された出力座標(OX、OY)を進めることによって実現可能である。
【0080】
シフトレジスタ324が完全にポピュレートされると、たとえばTV、PCモニタ、またはプロジェクタ等の表示デバイスに対応する画像が出力される(符号326)。
【0081】
このプロセス全体は、SDRAMメモリ312のバンクのインターリーブによって高速化可能である。元の画像の隣接する画素ブロックの格納には、SDRAMの異なるバンクを利用できるためである。図4に示すように、入力画像の各画素ブロックは、このように、SDRAMのバンク0、1、2、3に格納されたブロックによって囲まれている。バンクのオープンまたはクローズ中に別のバンクの読み出しが可能であるため、データ処理全体に要する時間は短くなる。
【0082】
図5は、16個の画素またはデータ要素{a00、a01、・・・、a33}で構成された4×4のアレイを示しており、全体として入力映像信号の元の画像を表している。各データ要素a00、a01、・・・、a33は、16画素の元の画像中の1つの画素に対応し、関連する値D00、D01、・・・、D33を有している。データ要素または画素aijは、元の画像の第i行および第j列(j=0、1、・・・)に存在する。実際のところ、ほとんどの画像には画素が16個以上含まれるが、ここでは本発明の初期理解を助けるため、少ない画素数を使用している。
【0083】
図6は、元の画像を4本の水平画素ライン{a00、a01、a02、a03}、{a10、a11、a12、a13}、{a20、a21、a22、a23}、{a30、a31、a32、a33}に分割する従来の方法を示している。各水平ラインには、4つの画素が含まれる。従来、これらのラインは、たとえばSDRAMメモリ312等に順次格納されていた(図3)。
【0084】
メモリから特定の画素を取り出すため、従来は、当該画素を含む水平ラインが要求され、SDRAMメモリから取り出されていた。従来のこの動作では、当該水平ラインの4つの画素がすべて取り出されていた。したがって、たとえば画素a21を取り出す指令を出すと、従来は、画素a20、a21、a22、a23を含む3番目の水平ラインが取り出されていた。
【0085】
これに対して、図7は、アレイを2×2の4つのサブユニットまたはブロック{a00、a01、a10、a11}、{a02、a03、a12、a13}、{a20、a21、a30、a31}、{a22、a23、a32、a33}に分割して格納する改善された方法を示している。各サブユニットには4つの画素が含まれる。画素の数は図6の方法と同じであるが、格納される画素の境界が異なる。
【0086】
図8は、図5の元の画像を時計回りに90°(すなわちπ/2ラジアン)回転処理またはマッピングした出力画像を示している。上記と同じ命名法を採用して、図5のアレイは「元の」アレイと称し、図8の回転アレイは「出力アレイ」と称する。これは、SPG314が表示用の出力画素位置(OX、OY)を生成し、それらが処理によって、元の原画像の対応する画素位置(WX、WY)に戻されるためである。左端最上部の画素すなわち「元の画素」a30は、出力アレイでは(OX、OY)=(0、0)と表されるが、元のアレイ中では左端最下部の画素であって、元の画像中での座標は(WX、WY)=(3、0)である。出力アレイにおける元の画素のすぐ右側の画素a20は、出力座標(OX、OY)=(1、0)を有するが、元のアレイ中では左端最下部の画素のすぐ上側にあって、元の座標は(WX、WY)=(2、0)である。それ以外の画素についても同様である。
【0087】
表示用の出力画素座標(OX、OY)のSPG314(図3)からの出力は、元の画素(OX、OY)=(0、0)から始まり、最上水平ライン(OX、OY)=(1、0)、(2、0)、(3、0)に沿って水平に動作した後、2番目の水平ラインの左端の画素(OX、OY)=(0、1)に移動して、右端最下部の画素(OX、OY)=(3、3)である最終画素の出力座標がレンダリングまたは生成されるまで続けられる。
【0088】
出力画像における元の画素の座標(OX、OY)=(0、0)は、マッパー316(図3)に渡されて、この出力座標に対し、元の座標(WX、WY)=(3、0)へのマッピングが行われる。したがって、メモリから最初に読み出す必要がある画素はa30である。SDRAMコントローラ310(図3)は、SDRAMメモリ312(図3)から、画素a30を含む特定の画素ブロックを要求する。このブロックには、画素a20、a21、a30、a31が含まれる。SDRAMメモリ312(図3)からは、このブロック全体が取り出されて、画素a30へのアクセスが可能となる。
【0089】
出力画像で次に必要な画素の出力座標は、(OX、OY)=(1、0)である。この出力座標は、マッパー316(図3)に供給されて、座標(WX、WY)=(2、0)に変換される。これは、画素a20が必要であることを意味するが、この画素もSDRAMメモリ312(図3)から取り出されたばかりの画素a30と同じブロックに位置する。したがって、この画素は直ちに使用可能であり、SDRAMメモリ312(図3)から別のブロックを取り出して画素a20を取得する必要がない。
【0090】
出力画像で次に必要な2つの画素a10、a00は、前に取り出されたブロックには位置していないため、別のブロックを取り出さなくてはならい。しかしながら、両画素とも、画素a00、a01、a10、a11が位置するブロックに含まれるため、この2番目のブロックをいったん取り出せば、画素a10、a00を実質的に同時にレンダリングすることができる。
【0091】
出力座標(OX、OY)=(0、1)、(1、1)、(2、1)、(3、1)を有し、a31、a21、a11、a01と表される出力画像の2番目の水平画素ラインについても、取り出されたばかりの2つのブロックに位置するため、これら2つの画素ブロックにアクセスするだけで、同じようなプロセスにより画素のレンダリングが続く。
【0092】
これは、ブロックを単位とするのではなく従来のように水平ラインを単位として画素が格納されている場合に時計回りに90°回転させる従来の手順とは対照的である。出力画像のレンダリングに必要な出力画素位置(OX、OY)=(0、0)、(1、0)、(2、0)、(3、0)を有する最初の4つの画素すなわち画素a30、a20、a10、a00はすべて、元の画像での水平ラインが異なるため(図6参照)、SDRAMメモリ312(図3)の異なる位置に存在する。したがって、出力画像の1番目の水平ラインをレンダリング可能とする前に、元の画像を構成する4本の水平画素ラインすべてをSDRAMメモリ312(図3)から順次取り出す必要がある。
【0093】
そして、出力画像の2番目の水平ラインをレンダリングするには、画素a31、a21、a11、a01をSDRAMメモリ312(図3)から取り出す必要がある。再び図6を参照すると、これらの画素も、SDRAMメモリ312(図3)の異なる位置に位置している。
【0094】
この例から、ブロックに基づく処理方法では、従来のラインに基づく方法の2倍の速さで時計回りに90°回転可能であることが分かる。この2倍の高速化は、メモリアクセス速度が従来のたった半分でよいことを意味する。
【0095】
256個の画素を含む16×16の画像(不図示)を時計回りに90°回転させる場合、ラインに基づく従来の方法では、出力画像の1番目の水平ラインをレンダリング可能とする前に、16個の画素で構成された16本の水平ライン(の1番目の画素)をすべてSDRAMメモリ312(図3)から読み出す必要がある。全体として、出力画像を完全にポピュレートするには、256個のメモリ位置にアクセスする必要がある。
【0096】
しかしながら、16個の画素をそれぞれ含む16個の4×4ブロックとして元の画像が格納されている場合は、(元の画像の1番目の垂直ラインの画素を含む)4つの画素ブロックを取り出すだけで、出力画像の1番目の水平ラインがポピュレートされる。出力画像の2番目の水平ラインをポピュレートする場合にも、同じ4つのブロックを再度取り出す必要がある。全体として、出力画像を完全にポピュレートするために取り出す必要のあるブロックは、64個だけである。
【0097】
この例は、ブロックに基づく方法が、ラインに基づく従来の格納方法の4倍速いことを意味する。実際のところ、従来は、16個の画素で構成されたラインを取り出して当該ラインの1つの画素のみを利用するのに、10回のクロックサイクルを要していた。これは、図2を参照すると、16画素分に相当する8つのDQを取り出す場合、4つのDQを取り出すのに8回のクロックサイクル(T1〜T9の間)を要し、さらに4つのDQを追加で取り出すのに2回のクロックサイクル(T9〜T11の間)を別途要するためである。
【0098】
ブロックに基づく方法では、16個の画素で構成されたブロック全体を取り出すのに10回のサイクルを要するが、このうちの4つの画素が実質的に同時に使用されることになる。
【0099】
ブロックを単位として画素を格納することには、ブロック内の画素の順次読み出しが水平方向または対角方向と垂直方法とで同じ長さになるという利点があるが、この方法にもある程度の非効率性が存在することが分かる。ほとんどの映像処理の場合、同じ行の画素のみが順次アクセスされるためである。これは、16個の画素のうちの12個が使われない可能性が高いことを意味する。しかしながら、何らかのマッピング形式が必要な場合は、ブロックに基づく方法の方が、大いに有効である。
【0100】
上記構成300は、整数の座標値を有する位置(WX、WY)の個々の画素を取り出すのに適している。しかしながら、たとえば特殊な角度の回転においては、元の入力画像の画素に対して、座標位置(WX、WY)の非整数値がマッパー316(図3)によって付与されることが頻繁にある。
【0101】
図9は、このような場合に適用可能な改善された構成900を示している。図9図5に類似しているが、簡潔化のため、構成900のアクセス側のみを示している。同様の構成要素には、図3中の対応する符号を付しているが、先頭のみ「3」を「9」に変更している。
【0102】
図9に見られるように、SPG914は、表示用の出力座標(OX、OY)を生成し、マッパー916にて、出力座標(OX、OY)は、入力映像の所要画素の元の座標(WX、WY)に変換される。この座標(WX、WY)は、ブロック要求変換器918によって、SDRAMメモリ(図9には図示せず)内の対応するバンク、行、および列のアドレスに変換される。当該位置(WX、WY)の画素を含む関連ブロックは、メモリから取り出されて、図3に示したように、ポピュレータ922によって利用される。これは、ブロック要求キャッシュ920を確認して当該ブロックが要求されたばかりであるか否かを判定する対象となる。
【0103】
ただし、単一のシフトレジスタ(図3の符号324)ではなく、複数のシフトレジスタ924を採用している。
【0104】
元の画像の非整数位置(WX、WY)が取り出されるようにするため、元の画像に含まれる複数の整数の隣接画素位置からの寄与を用いて、出力画像の対応する画素値を生成することができる。これらの寄与は、元の画像の関連する各隣接画素の寄与を重み付けするとともに、各寄与を合算することによって得られる。
【0105】
たとえば、出力画素位置を(OX、OY)=(2、1)として元の画像が垂直方向に2倍に拡大されている場合のように、元の画像の非整数座標(WX、WY)=(0.5、2)が要求された場合は、位置(WX、WY)=(2、0)の画素からの50%寄与を位置(WX、WY)=(2、1)の画素からの50%寄与に加算して用いることにより、関連する出力画素値を得ることができる。この結果、元の画像の使用可能な2つの整数位置間に補間画素が設けられる。したがって、図5の用語を採用して、(出力画像が8×4のアレイとなるように)当該入力画像が垂直方向に2倍に拡大されている場合は、出力画像の(OX、OY)=(2、1)の画素を0.5×D(a20)+0.5×D(a21)と表すことができる。ここで、D(aij)は、元の画像の位置(i、j)におけるエントリaの値Dである。
【0106】
これら寄与画素の両者は、メモリに格納された同じ画素ブロックに位置している可能性が非常に高いため、SDRAMへのアクセスを別途行わなくても、この補間を容易化することができる。実際のところ、上記例を用いれば、両画素a20、a21がメモリの同じブロック{a20、a30、a21、a31}(図7参照)ひいては同じ位置に位置する。従来は、メモリ内の異なる水平ライン(図6参照)ひいては異なる位置に格納されていた。
【0107】
補間に必要となるのは、元の画像の多くとも4つの隣接画素である。たとえば、(WX、WY)=(2.2、6.9)等の非整数位置を探索する場合は、(WX、WY)=(2、6)、(WX、WY)=(2、7)、(WX、WY)=(3、6)、および(WX、WY)=(3、7)の画素からの寄与それぞれに対し、所定のスキームに従って決定した重み付けを施して使用してもよい。この重み付けは、理想的には、元の画像中の寄与する整数位置に対する非整数座標位置の近さによって決定してもよい。したがって、この例では、(WX、WY)=(2、7)における元の画素が(WX、WY)=(3、6)における元の画素よりも大きく寄与する。
【0108】
非整数画素に寄与する元の画像の整数画素は隣接しているため、すべて同じ画素ブロックに位置する可能性が非常に高い。この場合は、SDRAMへのアクセスを別途行わなくても補間が可能である。あるいは、SDRAMメモリからのアクセス直後またはアクセス直前の隣接ブロックに含まれる可能性が非常に高い。これにより、SDRAMのアクティビティが増える可能性が低くなる。
【0109】
非整数位置の構成を考慮に入れるため、シフトレジスタ924と映像出力用表示装置926との間には、補間器928が設けられている。補間器928は、重み付け係数を決定し、各寄与画素からの画素値情報Dをそれぞれの重み付け係数に乗じた後、これら値を合算して最終的な出力画素値に到達する。
【0110】
上記説明において、マッパー316、916は、SPG314、914によって生成された各出力画素位置(OX、OY)に対して、整数であろうが非整数であろうが、単一の画素位置(WX、WY)を生成する。しかしながら、図10に示すように、変更されたマッパー1016であれば、SPG1014によって生成された単一の出力画素位置(OX、OY)に対応して、出力画像の次のライン用に元の画像の複数の座標(WX、WY)を生成するようにも構成することができる。メモリから取り出された各画素ブロックには、元の画像のいくつかの画素ライン(この例では、4本の画素ライン)が含まれるため、複数の出力ラインを実質的に同時にポピュレート可能である。これは、出力画像の後続ラインの対応する元の位置(WX、WY)が、ある出力ラインと次の出力ラインとでわずかしか違わないことで、メモリ内の同じ画素ブロックに位置する可能性が高いためである。
【0111】
したがって、SPG1014が出力座標(OX、OY)を生成する場合、マッパー1016は、当該出力座標(OX、OY)に対応する座標(WX、WY)を生成可能であるだけでなく、出力座標(OX、OY+1)、(OX、OY+2)、および(OX、OY+3)に対応する座標(WX’、WY’)、(WX’’、WY’’)、および(WX’’’、WY’’’)も生成可能である。これらの出力座標は、水平方向の出力座標値は同じであるが、垂直方向の出力座標値はオフセットしている。たとえば、SPG1014が出力原点座標(OX、OY)=(0、0)を生成するとき、オフセットした出力座標(OX、OY+1)=(0、1)、(OX、OY+2)=(0、2)、および(OX、OY+3)=(0、3)も生成されるため、4つの座標がそれぞれ同時に生成されることとなる。
【0112】
(OX、OY)=(0、0)→(WX、WY)
(OX、OY+1)=(0、1)→(WX’、WY’)
(OX、OY+2)=(0、2)→(WX’’、WY’’)
(OX、OY+3)=(0、3)→(WX’’’、WY’’’)
【0113】
4×4の画素ブロックを使用する例では、図10に示すように、4本の水平出力ラインがマッパー1016によって同時に生成可能である。この際、ポピュレータ1022およびシフトレジスタ1024は、適宜拡張されている。したがって、SDRAMメモリ(図10には図示せず)から取り出された4×4画素の単一ブロックを用いることにより、4本の出力ラインOY、OY+1、OY+2、OY+3のすべてに対して、一度に画素データを書き込むことができる。
【0114】
シフトレジスタ1024の後にはラインバッファ1030を追加して、出力映像信号を作成する際に、正しい順序で追加ラインが処理できるようにしている。
【0115】
このような構成により、出力信号または画像を生成する際に必要となるSDRAMの負荷が大幅に低減される。しかしながら、この構成には、4つのマッピングエンジン1016が必要なため、回路の複雑化という代償を伴う。
【0116】
上記構成300、900、1000によれば、特定の画像マッピングの処理時間が大幅に短縮されるが、ポピュレータ322、922、1022については、以下に説明する別の構成によって置き換え可能である。
【0117】
図11および図12は、画像データを処理する別の構成1100を示している。出力XY生成器1102は、SDRAM周波数で動作することにより、出力座標(OX、OY)を生成する。これは、左端最上部の画素からそのすぐ右側の画素まで走査し、右端最下部の画素の座標が生成されるまですべての水平ラインの走査を進める従来の方法の範疇である。SPG314、914、1014が表示装置の周波数すなわち出力画素周波数で動作していたのに対して、出力XY生成器1102は、SDRAM周波数で動作する。
【0118】
Yオフセット生成器1104は、出力画像の所定数の水平ライン座標に対してYオフセットを生成する。この例では、所定数は4である。したがって、Yオフセット生成器1104は、4本の水平ラインに対応するYオフセット値0、1、2、3を生成して、XY生成器1102から単一の出力座標(OX、OY)を受信するYオフセット加算器1106にこれらオフセット値を提供する。したがって、XY生成器1102から出力された各出力座標(OX、OY)に対して、さらに3つの座標(OX、OY+1)、(OX、OY+2)、および(OX、OY+3)が生成される。構成1100のこの部分からの出力は、{(0、0)、(0、1)、(0、2)、(0、3)}、{(1、0)、(1、1)、(1、2)、(1、3)}・・・が一例として考えられる。
【0119】
これらの出力座標は、4画素幅の出力画素ストリップを左から右へと走査した後、出力画像に含まれる次のストリップ(水平ライン4〜7)を走査する。単一のマッパー1108は、これら出力座標(OX、OY)のストリップを受信し、元の入力画像における画素位置に関連して、対応する座標(WX、WY)のストリップを生成する。これら座標(WX、WY)は、画素がブロックに格納されていることによりSDRAMメモリ内の類似位置を共有するため、後続のマッピング座標(WX、WY)は、記憶装置内の同じブロックまたは隣接するブロックに含まれる可能性が非常に高い。
【0120】
図13および図14はそれぞれ、出力画像を水平方向に走査する「出力ストリップ」および元の入力画像を対角方向に走査する「元のストリップ」を示している。出力映像が元の映像を回転させたものである場合、元の各画素位置(WX、WY)が、概してこの画素位置に非常に近接する画素にアクセスする格納ブロックセットを一掃することが分かる。元の画像は水平ラインではなく画素ブロックを単位として格納されているため、SDRAMメモリへ頻繁にアクセスする必要がなく、このため、処理の全体的な速度は向上する。
【0121】
図11および図12に戻って、元の座標(WX、WY)は、マッパー1108によりひとたび生成されると、BRC変換器1110に渡される。このBRC変換器1110は、元の各座標(WX、WY)をSDRAMメモリのバンク、行、列、およびオフセットのアドレスに変換する。すなわち、バンク、行、および列のアドレスは、所要画素を含むブロックが位置するSDRAMメモリの特定のバンクにおける行および列位置を指し示す。この特定バンクの行および列へのアクセスにより、16画素のブロックを取り出して処理することができる。オフセット値は、当該特定ブロックにおける特定の画素を示す。したがって、4×4の画素ブロックのオフセット値は、0〜15の間の値を有する。1〜16の値ではなく0〜15の値を使用するのが好ましい。16までを表すには5ビットを要するのに対し、15までであれば4ビットで表すことができるためである。
【0122】
SDRAMメモリの各バンクには、たとえば8192行および128列等、多数の行および列が存在する可能性があるため、SDRAMメモリに格納された個々の画素を一意に識別するには、非常に大きなBRC値(オフセットを含む)が必要となる場合がある。これを克服するため、ブロック要求/ID生成器1112は、当該バンク、行、および列の値の内部ID値を生成する。これは、たとえばバンク、行、および列のアドレスの下位の有効2ビットのみを合わせて構成される6ビットのアドレスである。下位ビットの数は、特定の状況に応じて1や3等に変更してもよい。これにより、SDRAMメモリの2(=64)個のメモリ位置を、それらが位置するバンクおよび当該特定バンクにおける行および列に基づいて識別可能となる。
【0123】
図14を参照して説明したように、元の座標(WX、WY)は、4×4のメモリブロックにわたって掃引または走査を行うことが多いため、少なくとも4つのバンクと4つの行または4つの列のいずれかとは、同じIDの新しいBRC値が発生する前に帳消しとなる。これは、丸々64画素分に相当するから、ID値が少なくとも64画素に対して一意に有効となることを意味する。行および列の要求の重複するカテゴリが除外され、作業負荷が軽くなる。座標(WX、WY)の掃引特性を考えると、メモリ内の同じブロックの画素が要求されることになるため、これら要求のエントリが重複する可能性は非常に高い。
【0124】
新しいブロック要求の検出には、最新のブロック要求のローカルキャッシュを利用する。新しいBRC値が要求されると、SDRAMコントローラ1116は、SDRAMメモリから当該特定ブロックを取り出す。なお、6ビットのID値については、当該ID値がSDRAMコントローラ1116ではSDRAMメモリのアドレスとは認識されない内部値であるため、使用しない。SDRAMコントローラ1116では、当該画素ブロックが格納されたSDRAM内の正しい位置をBRCアドレス全体で一意に識別できるようにする必要がある。ID値は、この例では64個の値の1つに過ぎないが、全BRC値を格納する64の位置メモリのアドレスとして使用する。したがって、同じIDの新しいBRC値が検出された場合であっても、要求はSDRAMコントローラ1116に到達して、メモリから当該ブロックが取得される。
【0125】
上記特定の位置(WX、WY)に対して生成されたID値(オフセット値を含む。この場合は、16画素ブロック内の特定画素の0〜15の間の値)は、遅延発生器1118に渡されて、SDRAMコントローラ1116がSDRAMメモリから所要の画素ブロックを取り出すのに十分な時間を確保できるようにしている。一方、SDRAMコントローラ1116は、関連するBRCアドレスにおけるブロック内に含まれる要求BRCデータを64のエントリキャッシュに格納している。
【0126】
ルックアップエンジン1120は、遅延されたID値およびオフセットを用いてキャッシュ1114を探索し、取り出された値を大容量のラインバッファメモリ1124に格納する。この例では、少なくとも4つのラインバッファ1124に情報を書き込むことができる。取り出されたデータ値には、上述のように補間を施してもよい。遅延出力画素座標(OX、OY)は、構成1100の出力座標(OX、OY)および座標(WX、WY)を生成する部位1102、1104、1106とラインバッファ1124との間に位置する遅延器1122に保持されている。この遅延出力座標(OX、OY)は、ラインバッファ1124のどの位置にデータを格納するかを指し示すポインタとして使用する。
【0127】
構成1100の画素クロック側では、出力画素周波数クロックで動作しYオフセットを加算してストリップとするのではなく通常は出力位置(OX、OY)をカウントする別の出力XY生成器1126が、ラインバッファ1124から出力画素を読み出して送出することにより別途使用可能としている。
【0128】
ラインバッファ1124がアクセスされる直前に書き込まれるように、画素クロック側およびSDRAMクロック側は、部分的に同期させる必要がある。ダブルバッファ法を用いて、画素クロック側が前のラインにアクセスしている間にSDRAMクロック側が次のデータラインにアクセスするようにしてもよい。すなわち、SDRAMクロックロジックおよび画素クロックロジックは、画素側の出力XYロジック1125がラインバッファ1124の半分を読み出している間にSDRAM側の出力XY生成器1102がラインバッファ1124の残りの半分に書き込みを行うように、同期させる必要がある。その後、ラインバッファ1124の半分ずつを交換して、ラインバッファ1124への書き込みが読み出しを追い越すことのないように簡単なダブルバッファシステムを構成する。
【0129】
また、ブロック要求/遅延/キャッシング構成1112、1114、1118、1120(図11においてパターン背景を施した構成要素)の複数の事例により、出力画像のアンチエイリアシングまたはスムージングを実現することも可能である。出力座標(OX、OY)の小数部から作成されたデータを用いて、後で統合される追加座標(WX、WY)を導入することができる。ブロック要求器1112では、BRCキャッシュ1504が1つで済むように、多対1FIFO(First In First Out)1502(図15参照)が必要になる。SDRAMコントローラ1116からのデータは、ブロック要求器1112から送られた遅延IDから取り出されたデータとともに、複数のキャッシュエントリまたは単一のマルチポートメモリに格納される。そして、このデータは、上述の補間と類似の方法で、小数値を用いて単一の画素に統合され、ラインバッファ1124に格納される。
【0130】
複数の入力ソースを用いる場合は、SDRAMメモリ1116内の異なる位置に格納可能である。また、要求された座標(WX、WY)をマッパー1108が再生成してSDRAMメモリ1116内の異なるソースを指し示す前または後のいずれかに、ソースマッピング機能を実施することができる。マッパー1108によるマッピングの前にソースマッピングを行うこととすれば、個々のウィンドウを別々にマッピング可能となる。マッパー1108によるマッピングの後にソースマッピングを行うこととすれば、マッパー1108によるマッピングを一度に複数のウィンドウに適用可能となる。
【0131】
図16は、別の実施例に係る、SDRAMにデータを格納する構成を示している。図4を参照すると、隣接する4×4の画素ブロックは、同じSDRAMメモリ内の異なるバンクに格納される。しかしながら、図16では、64個の4×4画素ブロックは、SDRAMメモリ内の1つのバンクの同じ行に格納される。SDRAMの各行は通常、512個の列アドレスで構成され、前述の通り、各列アドレスには2画素分の画像データを格納できる。したがって、SDRAMの各行には1024画素分の情報を格納できる。16個の画素で構成される4×4の各ブロックには8つの列アドレスが必要であって、これは、64個の4×4ブロックをSDRAMの各行に格納可能であることを意味する。これら64個のブロックは、16画素のブロックの8×8アレイとして格納される。この結果、SDRAMメモリの単一のバンクの単一のSDRAM行には、合計32×32(=1024)個の画素が含まれることになる。
【0132】
隣接する32×32の画素アレイは、アレイごとにSDRAMの1つの行が必要であるが、SDRAMメモリの同じバンクの異なる行ではなく、異なるバンクに格納される。異なるバンクへは高速なアクセスが可能であるため、このようにすることで、隣接する画素アレイ間の移動を速くすることができる。
【0133】
このように画素を格納することにより、SDRAMから画素が取り出されると、SDRAMの同じ行が(たとえば、図4に示す構成と比較して)長期間にわたってアクティブな状態を維持する。これは、SDRAMの同じ行に、より多くの隣接画素が位置するためである。この結果、前述の通り、SDRAMの各行のオープンおよびクローズを頻繁に行う必要がなくなるため、処理時間が短縮される。SDRAMメモリ内のすべてのバンクは同時にオープン可能なため、この格納構成によれば、4096個の画素に相当する16×16個の4×4画素ブロックに対して、実質的に瞬時にアクセス可能となる。
【0134】
図17は、別の実施例に係る、連想メモリ(CAM:Content Addressable Memory)での増強を行った構成を示している。CAMでの増強により、画素の読み返し中に使用されるメモリ量を減らすことができる。これは、CAMが、新たに使用された4×4画素ブロックのランダムアクセスキャッシュを保持できるためである。このキャッシュには、全表示ライン分のブロックを格納可能である。
【0135】
前述の通り、標準的なSDRAMでは、SDRAMからデータを取り出すためのメモリアドレスが必要である。一方、連想メモリでは、所要の特定データを格納する位置を決定する。画像の回転またはワープ処理では、近い位置のランダムアドレス(予測不可能)をSDRAMから取得する必要があるため、最新のブロック要求のキャッシュ1114(図11)が最終的な表示解像度と同じ大きさである必要がある。たとえば90°回転を行う場合、表示幅が2048画素であれば、2048×2048画素分のキャッシュが必要となる。
【0136】
本実施形態では、CAMが4×4の画素データとともにブロック位置(たとえば、元の原画像の左上ブロックの位置である(0、0)、その右隣の(1、0)等)を格納する。ブロック要求があると、CAMに対する一致ブロックの特定ブロック位置の問い合わせが行われる。当該ブロックがCAMに存在しない場合は、要求がSDRAMに送られて、当該ブロックの取り出しが行われる。また、当該ブロックがCAMに存在する場合は、CAM位置が既知であるとともに4×4の画素データを有することから、CAM内のアドレスを用いて当該所要のブロックをCAMから容易に取得することができる。
【0137】
一実施態様において、CAMは、上述のように元のブロック位置を格納する。この際、CAMのアドレスは、当該ブロックの4×4個の画素を含む通常のメモリキャッシュアドレス(ID)となっている。これは、CAMに格納するデータが少ないため容量を減らすことができ、複雑化およびコストの問題に対処可能であることを意味する。
【0138】
CAMを使用する場合は、図12を参照して説明したようにバンク、行、および列のアドレスの下位の有効2ビットからID(キャッシュ位置)値が生成されることはない。その代わりに、当該特定ブロックをCAM内で探索して見つかったCAMアドレス位置、すなわち一致するBRCアドレスを有するメモリ位置がID値となる。CAMのどこにもブロック位置(バンク、行、列)データが見つからない場合、すなわち当該ブロック位置を有するブロックが以前に取り出されていない場合は、次の位置IDを有する新しい次のCAMメモリ位置がカウンタにより生成され、要求されたBRCアドレスはその位置に格納される。その後、同じBRCに対して要求があれば、このCAMアドレスが生成される。これが構成するIDは、遅延ラインの後、図11に示した4×4の画素キャッシュ1114に渡される。
【0139】
この方法によれば、SDRAMメモリは、方向や角度、またはどのワープ機能によるかに関わらず読み出し可能となる。また、CAMには、SDRAMの位置に関係なく、最新のブロック要求が記憶される。これに関連する図12に示す方法では、正方グリッドの隣接画素のローカルキャッシュが格納されるのに対して、CAMを用いる方法では画素を如何なる形状にも格納可能である。
【0140】
一例として、2048×2048画素の出力解像度では、各CAM位置に4画素分の情報を格納できることから、全画素ラインを網羅するのに少なくとも512個のCAM位置が必要となる。また、各CAM位置のアドレスは、18ビット幅(バンクに2ビット、列に6ビット、行に10ビット)であってもよい。したがって、ビット単位でのCAMサイズは、512×18=9216ビットとなる。この値は、比較的小さく見えるかもしれないが、FPGA内に当該所要データを配置するには、およそ10,000個以上のロジックセルが必要となる。通常のFPGAでは、総数およそ20,000個のロジックセルを要するため、多すぎて実用化できない可能性がある。したがって、外部CAMを使用しない場合、この方法はASIC用として、より適している。
【0141】
CAMの使用を伴う場合、図11に示した複数のラインバッファ1124が削除され、どの時点においても、(たとえば複数のラインではなく)1ラインごとに処理が行われる実施形態もある。
【0142】
上述の例(各ラインの最後にデータが保存されるため、CAM法は除く)においては、単一の大容量マルチブロックキャッシュが用いられる。この大容量マルチブロックキャッシュには、通常、サイズが4×4または4×2画素のより小さなブロックが含まれており、より小さなブロックはそれぞれ、1回のSDRAMバーストでアクセス可能となっている。
【0143】
このキャッシュは、「ウィンドウ」が原画像を横切って移動する画像の比較的小さな部分にのみ使用する。このキャッシュの保存はラインごとではないため、出力が1本の出力ラインを走査して次のラインに進む場合は、キャッシュを再ポピュレートする必要がある。この際、前回の出力ラインと同じデータを用いることが多い。
【0144】
効率改善のため、Yオフセット生成器により、出力側で左から右へと走査している間に、複数の出力ラインを一度に処理してもよい。複数の出力ラインは隣接する原ラインから生成されるため、同じキャッシュデータが複数回再利用されることになり、同じSDRAMアクセスで、より多くの画素が得られることになる。
【0145】
上記例示したアーキテクチャをさらに改善するには、主に3つの分野が挙げられる。
【0146】
第1に、表示装置上で複数の画像が隣同士にワープ処理される場合、上記例示した大容量のキャッシュでは画像のデータを区別できないため、原画像ごとに別々のキャッシュが必要となる。これは、画面上のウィンドウ数に対応する追加キャッシュが必要となって、必要なFPGAリソースが増大することを意味する。
【0147】
第2に、一度に別々のラインとして生成された複数のラインを分けるには、複数のラインバッファが必要である。これは、FPGAのサイズアップおよび複雑化を招く。
【0148】
第3に、出力画素周波数およびSDRAM周波数という2つの周波数に跨ってシステムが分かれているため、設計が若干複雑になる。
【0149】
さらに、図16を再び参照して、SDRAMには、1回のSDRAMバーストで容易にアクセスできるように、より小さな4×4の画素ブロックが格納されている。このサイズは、SDRAMのデータ幅に応じて、4×4、4×2、2×4、2×2、8×4等であってもよい。そして、より小さな多数のブロック(図16の例では16個)がより大きな32×32の画素ブロックを構成し、これらすべてのブロックがSDRAMの同じ行に格納されている。これにより、SDRAMは、異なる行を頻繁に「プリチャージ」(クローズ)および「アクティベート」(オープン)することなく、元の画像すなわち原画像の画素を如何なる方向にでも高速にアクセス可能である。この結果、処理時間を短縮することができる。隣接する32×32ブロックは、SDRAMの異なるバンクに格納されているため、元の画像への画素アクセスが行の境界を越える場合、すなわち、より大きな異なる32×32画素ブロックから原画素を探索する場合は、SDRAMアクセスが新たなバンクに切り替わるため、高速アクセスが維持される。
【0150】
図18は、別のアーキテクチャ1800を示している。
【0151】
この別のアーキテクチャ1800において、キャッシュには、より小さな画素ブロックで構成された大きなマルチブロックが格納されない代わりに、新たに使用したブロックが記憶される。新たに使用した各ブロックは、別々のブロックキャッシュエントリに格納される。一度に走査されるのは1本の出力ラインだけであるため、アーキテクチャ1800が簡素化される。この結果、ラインバッファブロックは不要となる。さらには、SDRAMコントローラを除くその他すべての構成要素がSDRAM周波数ではなく出力画素周波数で動作する。
【0152】
SPG1802は、一対の出力座標(OX、OY)を生成する。これらは、すべての標準的な映像システムと同じく、また上述したように、左から右、上から下へと走査したものである。
【0153】
出力座標(OX、OY)は、エンジン1804によって処理され、座標(WX、WY)が生成される。座標(WX、WY)は、上述のように、元の原画像における所望の画素位置を示している。
【0154】
WX、WY)画素は、計算が行われると、ブロック要求変換器1806によって原ブロックのSDRAM位置に変換される。メモリ位置は、ブロックBRC(バンク、行、および列)の形式である。これは、所要の(WX、WY)画素を含む4×4画素ブロックのメモリ位置である。
【0155】
このブロックのSDRAM位置は、比較器1808によって、隣接する出力画素すなわち同じラインの前回の画素(OX−1、OY)および直前のラインの隣接画素(OX−1、OY−1)、(OX、OY−1)、(OX+1、OY−1)から生成されたSDRAMの元の画素の位置と比較される。これらは、以下に詳述するライン遅延によって得られる。
【0156】
現在のSDRAM位置は、出力画面上で1画素しか離れていない出力画素位置(OX、OY)に対応する別のSDRAM位置と比較されるため、これらは一致する可能性が非常に高い。言い換えれば、現在探索中の画素は、SDRAMから取り出し済みの画素ブロックに見つかる可能性が高いことを意味する。結果として、このデータは新しく取り出されたばかりであるため、システムによりSDRAMに対して再度要求する必要はない。
【0157】
BRCの一致がある場合は、当該前回の一致ブロックのIDがコピーされ、ライン遅延1810に渡される。
【0158】
一致がない場合は、次に使用可能なIDナンバーが使用され、ライン遅延1810に渡される。SDRAMコントローラ1812には要求が送られ、SDRAMから所要の画素ブロックが取り出されるとともに、当該位置(ID)の画素ブロックキャッシュ1814に格納される。
【0159】
IDおよび現在の位置(WX、WY)をライン遅延1810に渡す目的は2つある。第1に、SDRAMコントローラ1812に、所要の画素ブロックを取り出すのに十分な時間が提供されるためである。第2に、前の工程で説明した比較、すなわち位置(WX、WY)に対応するBRCと前回の出力ラインのBRCとの比較を可能にするためである。
【0160】
ライン遅延1810からの出力は、次の出力画素ラインが処理された場合の比較に利用できるように、上述のブロック比較器1808にフィードバックされる。また、ライン遅延1810からの出力は、ID値を用いて画素ブロックキャッシュ1814から現在の所要画素を取り出すのにも使用される。
【0161】
画素ブロックキャッシュ1814からは、ID値を用いて(WX、WY)値の下位ビットに基づくことにより、正しい画素が取り出される。その後、表示装置に出力される。
【0162】
この例では、真に必要な場合にしかSDRAMアクセスは生じない。通常のワープ画像または回転画像の場合、隣接する原画素(WX、WY)は、出力画像(OX、OY)においても近い関係を維持するため、SDRAMメモリに格納された同じ画素ブロックに存在する可能性が高い。上述の比較すなわち「隣接性」確認によれば、SDRAMから取り出された画素ブロックキャッシュ1814の任意の前回ブロックが可能な限り再利用されることが確実となる。
【0163】
図19は、画素ブロックキャッシュに格納された画素ブロックの再利用の例を示している。図19中の矢印は、元の原画像における画素の走査経路を示している。矢印はわずかな角度で、出力ラインごとに1ラインずつ下がっている。
【0164】
予想されることではあるが、1番目の出力ラインに関しては、画素ブロックキャッシュが空でありライン遅延に位置(WX、WY)が存在しないことから、すべての所要画素ブロックがSDRAMメモリ自体からアクセスされる必要がある。しかしながら、前回のラインで使用された同じブロックを矢印が横切るため、後続の各出力ラインに関しては、SDRAMから取り出される必要のあるブロックが少なくなる。実際のところ、この例の2番目、3番目、および4番目の出力ラインでは、新しいブロックが1つだけSDRAMから取り出され、画素を探索するその他5つの画素ブロックについては、画素ブロックキャッシュに格納済みとなっている。
【0165】
上記ブロックキャッシュは、わずか1本の映像データラインを保持するのに十分な容量があればよい。これは、1本の出力ラインに必要なブロックが次の出力ラインで使用される場合に備えておく必要があるためである。
【0166】
たとえば、1920×1080の出力解像度の場合、非回転マッピングであれば、およそ512個の4×4ブロックを格納できる画素ブロックキャッシュが必要となる。これは、4×512=2048となって、水平出力ラインの1920個の画素を網羅するのに十分だからである。
【0167】
90°回転の場合は、表示装置の水平方向に1080個しか画素が出力されないため、必要なブロック数はより少なくなる。
【0168】
45°回転の場合は、1920×1080の三角形の斜辺が2202画素であるため、表示装置に出力される斜め方向の画素数が増えることから、1本の水平出力ラインを表示するのにより多くのブロックが必要となる場合がある。
【0169】
データのキャッシングの実施は、一般的には容易である。しかしながら、この場合、ID生成器は、どのIDが使用可能か、どのIDが使用中であるために利用不可能かを追跡する必要がある。この実施態様では、IDは画素ブロックキャッシュのアドレスすなわち画素ブロックキャッシュ内のどこに格納されているかに対応する。一部の画素ブロックは、フレーム全体にわたって、他のブロックよりも再利用される回数が多い。これは特に、特殊なワープの場合に該当し、また一部の回転においても該当する。したがって、ID生成器は、最大のID値が割り当てられている場合(たとえば、0〜511、0〜511等)は、単にID値を順番に発行して再び先頭に戻るということはできない。
【0170】
画素ブロックキャッシュは、多数のライン(おそらくは画像全体にわたって)IDの繰り返し利用回数が最大となるように、十分な容量を有する必要がある。あるいは、どのIDが再使用可能か否かを把握する必要がある。
【0171】
したがって、ブロックキャッシュは、使用中の(すなわち、現在の出力ラインに必要な)ブロックキャッシュ(ID)エントリを上書きせず、また、不要となった(すなわち、前回のラインの出力には使用されたが、現在の出力ラインには使用されていない)ブロックキャッシュ(ID)エントリを再利用することを理解できる程度のインテリジェンスを備えている必要がある。これをFPGAに実装するのは比較的困難である。
【0172】
図20は、このインテリジェンスをFPGAに実装可能な構成を示している。
【0173】
メモリには、IDリスト2000が格納される。IDリストは、メモリアドレスに対応して、キャッシュされた各画素ブロックの位置を有しており、理想的には各フレームの最上部でリセットされて、512ブロックのキャッシュすなわち512個のメモリ位置を有するキャッシュの場合に、すべてのIDを順番に(0、1、2、3、4・・・510、511)リストアップするものである。
【0174】
また、0から始まる読み出しポインタ2002および0から始まる書き込みポインタ2004が作成される。読み出しポインタ2002は、次に使用可能なID値を指し示す。書き込みポインタ2004は、任意の解放ID値すなわち再利用ID値の書き戻し位置を指し示す。新しいID値が必要な場合は、次に使用可能なID値を読み出しポインタ2002が指し示すので、これが読み出しポインタ2002から読み出される。
【0175】
1番目の出力ラインの場合は、次に使用可能なID値が有効となるため、読み出しポインタ2002が1ずつインクリメントされる。その後、読み出しポインタ2002は、次に使用可能なID値をいつでもIDリスト2000から出力可能となる。1番目の出力ラインではSDRAMから新しいデータを取り出す必要があるため、読み出しポインタ2002は、この時点でかなり大きな値を指し示すことになる。たとえば、1920×1080の出力解像度の場合は、480という数を指し示すことがある。これは、480個の4画素幅のブロックがそれぞれの一意のID値とともに要求される可能性があるためである。この時点で、任意の解放ID値すなわち再利用ID値の書き戻し位置を指し示す書き込みポインタ2004は、ID値が一切解放すなわち再利用されていないため、0のままである。
【0176】
2番目の出力ラインの画素を計算している際、1番目の出力ラインで使用されなかったIDの一部は依然として使用可能であるが、一部は1番目の出力ラインと一致したSDRAMブロック位置を有する。
【0177】
1番目のラインのID値が再利用されていることが分かると、当該IDが循環中であることから、IDリスト2000に変更は行われない。しかしながら、1番目のラインのID値が再利用されていないことが分かると、当該ID値は書き込みポインタ2004の位置でIDリスト2000に書き戻され、書き込みポインタ2004はインクリメントされる。これにより、当該IDは循環から引き出されてIDリスト2000に戻され、その後いつでも使用可能となる。
【0178】
このように、2番目のラインで再利用されない1番目のラインの任意のID値は、IDリスト2000に書き戻される。ID値は、読み出しと同じ順序でIDリスト2000に書き戻されることが多いが、これは、関連するワープまたは回転によって異なる。このプロセスは、後続の各出力ラインに対して継続され、次に使用可能なID値がIDリスト2000から読み出されるとともに、読み出しポインタ2002がインクリメントされる。これと同時に、任意の非使用IDがIDリスト2000に書き戻されるとともに、書き込みポインタ2004がインクリメントされる。
【0179】
これにより、再利用の頻度が高いIDはIDリスト2000に書き戻されないため、特定のIDが何度再利用されても上書きされることはなく、その代り、不要となるまで1ライン遅延で循環し続け、不要となった時点でIDリスト2000に書き戻される。一部のワープでは、上から下まですべての出力ラインに関して1つのID値が使用される可能性がある。
【0180】
(使用可能なIDの)IDリスト2000と1ライン遅延で「循環中」のIDとを組み合わせた場合は常に、重複も省略もない完全なIDリストが得られるべきである。このリストを作成して維持する際に使用されるロジックは、IDが画素番号Nでいったん再利用された場合は、当該IDが画素N+1、N+2、N+3等においても再使用可能であることを保証するものでなくてはならない。ただし、異なるIDすなわちIDリストからの新しいID、または前回のラインからの異なるIDが事前に必要となっていない場合に限る。
【0181】
たとえば、最初の画素ラインで以下のIDが使用されるものとし、
ライン1:0 0 0 0 1 1 1 1 2 2 2 ・・・
次のラインで以下のように再利用しようとする場合(「50」は新しいIDの要求)、
ライン2 0 0 0 0 1 50 50 1 2 2 2 ・・・
ID「1」が新たなID要求によって「分割」されていることが分かる。そして、以下のラインが生成されると、
ライン3 0 0 0 0 50 50 50 50 2 2 2 ・・・
この場合は、ライン2の両ID「1」がIDリストに戻されることになるため、IDリストで重複が起こり、最終画像が破損してしまう。
【0182】
これを解決するには、前回のラインからのIDを継続的に再使用可能とするしかない。そうすれば、上記の代わりに以下のようなラインが生成される。
ライン1 0 0 0 0 1 1 1 1 2 2 2 ・・・
ライン2 0 0 0 0 1 50 50 51 2 2 2 ・・・
ライン3 0 0 0 0 50 50 50 50 2 2 2 ・・・
【0183】
ID「1」は、使用を不連続とすることによって、2回目の使用がなされないようにして再利用不可能となったため、代わりに新しいID「51」が生成されている。これによって、SDRAMから当該同じ画素ブロックが新たに要求される。言い換えれば、ID「1」および「51」には同じ画素ブロックが保持される。このような若干の非効率性はまれにしか発生せず、IDリストの破損を防止するために必要である。
【0184】
図21は、双線形補間を示している。双線形補間は、非整数の原画素位置(WX、WY)を整数の原画素位置の値および乗算値のセットに変換する際に使用する。その考え方は、中間の画素値を周囲の画素に基づいて補間する方法として周知である。
【0185】
図21の黒円は、SDRAMメモリに存在する既知の値を有する整数画素座標を示している。中空円は、非整数の画素位置(WX、WY)=(fx、fy)を示しており、その値は、周囲の整数画素値の寄与を重み付けして決定される。この非整数画素値を生成するには、周知の簡単な計算が使用可能である。
【0186】
D(fx、fy)=P(0、0)*(1−fx)*(1−fy)+P(1、0)*fx*(1−fy)+P(0、1)*(1−fx)*fy+P(1、1)*fx*fy
【0187】
したがって、図示の例(WX、WY)=(fx、fy)=(0.25、0.5)の場合、非整数画素の値Dは以下のように求められる。
【0188】
D(0.25、0.5)=P(0、0)*(1−0.25)*(1−0.5)+P(1、0)*0.25*(1−0.5)+P(0、1)*(1−0.25)*0.5+P(1、1)*0.25*0.5
=P(0、0)*0.375+P(1、0)*0.125+P(0、1)*0.375+P(1、1)*0.125
【0189】
双線形補間を行うには、隣接する4つの画素に同時にアクセスする必要がある。
【0190】
上記から、非整数座標(WX、WY)について双線形補間を用いて取り扱い可能であることが思い起こされる。図22は、これを実現するための画素キャッシュを用いた1つの可能な方法を示しており、画素ブロックキャッシュを同時に読み出し可能な複数の部位に分割している。図22に示すように、画素ブロックキャッシュへのデータの格納は、隣接する画素が4つの異なるキャッシュ領域(0、1、2、3)のうちの1つに格納されるように行われる。
【0191】
図22には、それぞれ16個の画素を含む4つの異なる4×4画素ブロックを示している。画素の格納には4つの異なるメモリ領域が使用される。画素上の番号は、その画素が格納される領域を示している。このように、メモリ領域0は偶数WXおよび偶数WYの座標(たとえば(0、0))に対応し、メモリ領域1は奇数WXおよび偶数WYの座標(たとえば(1、0))に対応し、メモリ領域2は偶数WXおよび奇数WYの座標(たとえば(0、1))に対応し、メモリ領域3は奇数WXおよび奇数WYの座標(たとえば(1、1))に対応する。
【0192】
4×4の各画素ブロックには、キャッシュ領域が1つしかない場合と同じく、同じID値が割り当てられている。しかしながら、各4×4ブロックの16個の画素は、4つの異なるメモリ領域(0、1、2、3)に散在している。これにより、隣接する4つの画素のいずれか1つが各メモリ0、1、2、3に存在することになるため、どの画素にも同時にアクセス可能となる。
【0193】
所要の画素が図22に示される4つの中央画素であって、4つの異なる4×4ブロックおよびID値に跨っていても、これら4つのメモリ領域は依然として上記の効果を奏する。ただし、4つの中央画素は異なる4×4画素ブロックおよびキャッシュ位置に存在するため、各領域は異なるID値を受け取る。
【0194】
図23は、このような方法で双線形補間を可能にするデータ処理アーキテクチャ2300を、どのようにして適応させられるかを示している。
【0195】
非整数(WX、WY)値は、変換器2302によって、双線形補間を行うために必要な隣接する4つの整数座標に変換される。これら各整数座標は、その整数座標画素が位置する画素ブロックのSDRAM位置(バンク、行、および列)を識別するために変換される。
【0196】
これらのBRC値は、比較器によって、前回の出力画素の4つのBRC値セットのほか、その上の出力ラインにおける3つの隣接画素の4つのBRC値セットと比較される。一致がある場合、すなわちBRC値が要求済みである場合は、対応するIDが再利用される。一致がない場合、すなわちBRC値が未要求の場合は、4つのIDリストのうちの1つによって次に必要なIDが生成され、それに伴うSDRAM要求によって、そのメモリから関連する画素ブロックが取り出される。各IDリストは、双線形補間回路の4つの所要画素が4つのブロック間の境界を跨ぐ場合のように、最大4つまでの異なるブロックが一度にアクセス可能となるように、異なるブロックパターンに割り当てられている。
【0197】
4つのIDおよび座標(WX、WY)は、1ライン遅延2306に供給される。これらの値は、後続の出力ラインを処理する際の比較のため比較器に戻され、各キャッシュメモリ領域(0、1、2、3)で必要な4つの整数座標画素を取り出すためにキャッシュ読み出し部に渡される。そして、これら4つの整数画素値を用いることにより、補間器2308で双線形補間を行って、最終的に補間された単一の画素を生成することができる。
【0198】
以上、複数の具体的な実施例を参照して本発明の特定の態様を説明したが、当業者であれば、本発明の趣旨と範囲から逸脱することなく、本発明に対する多くの変更が可能であることが分かるであろう。たとえば、様々な方法に関連して、種々の回路、メモリ、および関連する構成要素を実装してもよく、1または複数のコンピュータ、プログラマブル回路、実行により工程をコンピュータに行わせる命令を含むプロセッサ可読媒体等が挙げられる。本発明の態様は、以下の特許請求の範囲にて規定される。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23