(57)【特許請求の範囲】
【請求項１】
コンピューティングデバイスに下記の方法を実行させるための、一又は複数のプロセッサを含む前記コンピューティングデバイスによって実行可能な命令を記憶する非一時的コンピュータ可読記憶媒体であって、
前記方法は、
ピクセルシーケンスを取得すること、
前記ピクセルシーケンス内で、非繰り返しピクセル値を有するピクセルからなる非繰り返しサブシーケンスと、単一の繰り返しピクセル値を有するピクセルからなる繰り返しサブシーケンスと、を識別すること、及び
その識別に応じて、前記単一の繰り返しピクセル値のランレングスを使用して前記繰り返しサブシーケンスをエンコードし、マルチピクセルキャッシュエンコーディングスキームを使用して前記非繰り返しサブシーケンスをエンコードすることを含み、
前記マルチピクセルキャッシュエンコーディングスキームは、前記非繰り返しサブシーケンスの各前記非繰り返しサブシーケンスに対して以下の動作を実行することを含む：
所与の非繰り返しサブシーケンスに含まれる非繰り返しピクセル値の総数を決定すること、及び
前記所与の非繰り返しサブシーケンスを、（１）前記所与の非繰り返しサブシーケンスに含まれる非繰り返しピクセル値の総数に関連付けられた複数のサブキャッシュのうちのサブキャッシュを参照する第１の値と、（２）前記所与の非繰り返しサブシーケンスが格納される参照サブキャッシュ内の格納位置のインデックス値と、を含むデータストリングに変換すること、
非一時的コンピュータ可読記憶媒体。
【請求項２】
前記複数のサブキャッシュの各サブキャッシュが異なる数のピクセルからなるサブシーケンスを表すデータを格納するように構成される、
請求項１に記載の非一時的コンピュータ可読記憶媒体。
【請求項３】
前記複数のサブキャッシュが、単一ピクセルキャッシュを含む、
請求項２に記載の非一時的コンピュータ可読記憶媒体。
【請求項４】
前記非繰り返しサブシーケンスの少なくとも一つのサブシーケンスが、前記複数のサブキャッシュに格納されておらず、前記単一ピクセルキャッシュを使用して前記サブシーケンスの各ピクセルがエンコードされる、
請求項３に記載の非一時的コンピュータ可読記憶媒体。
【請求項５】
前記複数のサブキャッシュが、１から１４のピクセルの間の長さからなるサブシーケンスを表すデータを格納するように構成された１４個のサブキャッシュを含む、
請求項３に記載の非一時的コンピュータ可読記憶媒体。
【請求項６】
前記コンピューティングデバイスによって実行可能な前記命令が、
さらに、前記コンピューティングデバイスに、
前記マルチピクセルキャッシュに格納されていない前記非繰り返しサブシーケンスを前記マルチピクセルキャッシュに加え、前記マルチピクセルキャッシュに格納されていない前記非繰り返しサブシーケンスの各ピクセルを前記マルチピクセルキャッシュの前記単一ピクセルキャッシュに加えることを実行させる
請求項３に記載の非一時的コンピュータ可読記憶媒体。
【請求項７】
前記インデックス値が、前記所与の非繰り返しサブシーケンスについて計算されたハッシュ値を含む、
請求項１に記載の非一時的コンピュータ可読記憶媒体。
【請求項８】
前記ハッシュ値が、非繰り返しピクセル値のＸＯＲ演算を使用して計算される、
請求項７に記載の非一時的コンピュータ可読記憶媒体。
【請求項９】
前記コンピューティングデバイスによって実行可能な前記命令が、
さらに、前記コンピューティングデバイスに
マルチピクセルキャッシュに格納されていない非繰り返しサブシーケンスの少なくとも一つを、前記非繰り返しサブシーケンスの少なくとも一つに含まれている前記非繰り返しピクセルの値を使用してエンコードすることを実行させる、
請求項１に記載の非一時的コンピュータ可読記憶媒体。
【請求項１０】
ピクセルシーケンスをエンコードするための第１のコンピューティングデバイスであって、
マルチピクセルキャッシュを格納し、前記マルチピクセルキャッシュが、異なる長さの前記ピクセルシーケンスを格納するように構成された一又は複数のサブキャッシュを含み、前記サブキャッシュが前記シーケンスのインデックス及びピクセルの値を含む、少なくとも一つのデータストレージと、
ピクセルシーケンス内の、複数の連続した非繰り返しピクセルを含むピクセルの第１のストリングのハッシュ値を決定し、
前記ハッシュ値及びピクセルの前記第１のストリングの長さを使用してピクセルの前記第１のストリングを含むマルチピクセルキャッシュのサブキャッシュを識別し、
前記ピクセルシーケンス内のピクセルの第２のストリングであって、前記ピクセルシーケンス内においてピクセルの前記第１のストリングとは異なる位置に存在しており、かつ、ピクセルの前記第１のストリングに含まれるピクセルの配列と同じピクセルの配列を構成しているピクセルの前記第２のストリングが、前記マルチピクセルキャッシュの識別されたサブキャッシュ内に存在することを判定し、
ピクセルの前記第２のストリングを、ピクセルの第２のストリングのためのピクセルデータのバイトの総数を低減するために前記マルチピクセルキャッシュの識別されたサブキャッシュを参照する１バイトのデータと前記ハッシュ値を表すもう１バイトのデータとを含むピクセルデータの２バイトを使用して、エンコードする
ように構成されたエンコーダと、を含む、
第１のコンピューティングデバイス。
【請求項１１】
単一ピクセルキャッシュが、前記マルチピクセルキャッシュ内の複数のサブキャッシュのうちの１つである、
請求項１０に記載の第１のコンピューティングデバイス。
【請求項１２】
前記エンコーダが、前記単一ピクセルキャッシュを使用して、前記マルチピクセルキャッシュに格納されていない非繰り返しサブシーケンスの各ピクセルをエンコードする、
請求項１１に記載の第１のコンピューティングデバイス。
【請求項１３】
前記エンコーダが、前記マルチピクセルキャッシュに格納されていない非繰り返しサブシーケンスを前記マルチピクセルキャッシュに加え、前記マルチピクセルキャッシュに格納されていない前記非繰り返しサブシーケンスの各ピクセルを前記マルチピクセルキャッシュの前記単一のピクセルキャッシュに加えるようにさらに構成される、
請求項１１に記載の第１のコンピューティングデバイス。
【請求項１４】
前記マルチピクセルキャッシュ内のピクセルのサブシーケンスに対するインデックス値は、前記サブシーケンスに対して計算されたハッシュ値である、
請求項１０に記載の第１のコンピューティングデバイス。
【請求項１５】
前記エンコーダが、前記非繰り返しサブシーケンス内のピクセルの値を使用して、前記マルチピクセルキャッシュに格納されていない非繰り返しサブシーケンスをエンコードするようにさらに構成される、
請求項１０に記載の第１のコンピューティングデバイス。
【請求項１６】
一又は複数のプロセッサによって実行される方法であって、
ピクセルシーケンス内の、複数の連続した非繰り返しピクセルを含むピクセルの第１のストリングのハッシュ値を決定すること、
前記ハッシュ値及びピクセルの前記第１のストリングの長さを使用してピクセルの前記第１のストリングを含むマルチピクセルキャッシュのサブキャッシュを識別すること、
前記ピクセルシーケンス内のピクセルの第２のストリングであって、前記ピクセルシーケンス内においてピクセルの前記第１のストリングとは異なる位置に存在しており、かつ、ピクセルの前記第１のストリングに含まれるピクセルの配列と同じピクセルの配列を構成しているピクセルの前記第２のストリングが、前記マルチピクセルキャッシュの識別されたサブキャッシュ内に存在することを判定すること、及び
ピクセルの前記第２のストリングを、ピクセルの第２のストリングのためのピクセルデータのバイトの総数を低減するために前記マルチピクセルキャッシュの識別されたサブキャッシュを参照する１バイトのデータと前記ハッシュ値を表すもう１バイトのデータとを含むピクセルデータの２バイトを使用して、エンコードすること
を含む、方法。
【請求項１７】
前記マルチピクセルキャッシュが、複数のサブキャッシュを含み、
前記複数のサブキャッシュの各サブキャッシュが異なる数のピクセルからなるサブシーケンスを表すデータを格納するように構成される、
請求項１６に記載の方法。
【請求項１８】
前記複数のサブキャッシュが、単一ピクセルキャッシュを含む、
請求項１７に記載の方法。
【請求項１９】
前記マルチピクセルキャッシュに格納されていない非繰り返しサブシーケンスが、前記単一ピクセルキャッシュを使用してエンコードされることをさらに含む、
請求項１８に記載の方法。
【請求項２０】
前記マルチピクセルキャッシュに格納されていない非繰り返しサブシーケンスを前記マルチピクセルキャッシュに加え、前記マルチピクセルキャッシュに格納されていない前記非繰り返しサブシーケンスの各ピクセルを前記マルチピクセルキャッシュの前記単一ピクセルキャッシュに加える、
請求項１８に記載の方法。
【請求項２１】
前記マルチピクセルキャッシュ内のピクセルのサブシーケンスの値の格納位置が、前記サブシーケンスについて計算されたハッシュ値を使用して参照される、
請求項１６に記載の方法。
【請求項２２】
前記非繰り返しサブシーケンス内に含まれる非繰り返しピクセルの値を使用して、前記マルチピクセルキャッシュに格納されていない非繰り返しサブシーケンスをエンコードすることをさらに含む、
請求項１６に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
現代のコンピューティングシステムは、多種多様なソフトウェアアプリケーション及びプラットフォームを動作することができる。コンピューティングシステムは、コンピューティングシステム上で実行されるアプリケーションがコンピューティングシステムのハードウェアコンポーネントにアクセスし、それと対話することを可能にするオペレーティングシステムを提供することができる。この対話を通じて、ソフトウェアアプリケーションはユーザ入力を受け入れ、出力を提供することができ、この出力を、ディスプレイデバイス上に表示されるグラフィカルユーザインターフェースを通じてユーザに示すことができる。さらに、出力を、リモートコンピューティングデバイスに転送することができる。
【０００２】
リモートコンピューティング技術は、ユーザがコンピューティングシステムに物理的に位置することなく、コンピューティングシステムを使用することを可能にする。リモートアクセスを介して、ユーザは、パブリックネットワーク又はプライベイトネットワーク上のリモートコンピューティングシステムに接続することができる。ユーザは入力をリモートコンピューティングシステムに送信するためにローカルコンピューティングシステムを使用することができ、リモートコンピューティングシステムは応答することができる。物理的にはリモートコンピューティングシステムに存在しないが、ユーザは、あたかもユーザがシステムを直接使用しているかのように、リモートコンピューティングシステムと対話することができる。
【０００３】
さらに、仮想化技術が、限られたコンピュータハードウェアリソースを共有するために広く使用されている。プラットフォーム仮想化環境と呼ばれることもあるハードウェア仮想化環境では、一又はそれ以上の仮想マシンがそれ自体のオペレーティングシステムを用いてホストコンピュータをシミュレートすることができる。具体的には、これらの仮想マシン上で実行されるソフトウェアは、基礎となるハードウェアリソースから分離することができる。その結果、同じホストコンピュータ上で動作する仮想マシンは、それぞれ、それ自体のオペレーティングシステムを有することができる。例えば、Microsoft Windowsオペレーティングシステムを実行しているコンピュータは、Linuxベースのソフトウェアを実行することができるLinuxオペレーティングシステムを実行しているコンピュータをシミュレートする仮想マシンをホストすることができる。
【０００４】
さらに、仮想化技術は、パブリック又はプライベイトネットワークを介してコンピュータリソースへのリモートアクセスを提供することができる。ユーザは、様々なクライアントを使用して、仮想化環境内のホストコンピュータ上で動作する仮想デスクトップ又はアプリケーションにアクセスすることができる。これらのクライアントはホストコンピュータに直接接続することができ、又は、パブリック又はプライベイトネットワークを介して仮想化環境に接続することができる。クライアントはユーザ入力を取り込み、それをネットワークを介してホストコンピュータの仮想環境に転送することができる。ユーザ入力を受信するアプリケーションは何らかのアクションを実行し応答をユーザに提示することによって応答することができる。仮想化は、各ユーザが専用のリモートコンピューティングシステムに接続することを要求する代わりに、複数のユーザがハードウェアリソースを共有することを可能にする。
【０００５】
リモート、ローカル又は仮想化されたコンピューティング環境で実行されるアプリケーションは、ディスプレイデバイス上に表示する出力を更新するユーザ入力に応答することができる。アプリケーションは、グラフィカルユーザインターフェースを更新するための命令をオペレーティングシステムに提供することができる。次いで、オペレーティングシステムはコマンドを処理し、グラフィカルインターフェース上に更新を表示することができる。多くの現在及び過去のシステムアーキテクチャでは、アプリケーションがオペレーティングシステムを介してフレームバッファに直接書き込むことができる。表示されるべきフレームに加えて、オペレーティングシステムは、生描画コマンドと、表示されたコンテンツのコンテンツタイプ、出力された表示（ディスプレイ）フレームの修正領域、及び、出力された表示フレームに関する他のメタデータなどの更新された表示フレームに関する追加情報とを提供することができる。この情報は、ネットワークを介してビジュアルディスプレイを表す帯域幅集約的なグラフィックを単に送信する代わりに、システムが生描画コマンドと表示フレームに関する追加の情報とを組み合わせてリモートコンピューティング環境に送信されるデータを最適化することができるので、リモート技術にとって有用であり得る。この最適化はリモートコンピューティングに必要なネットワーク帯域幅を制限しながら、はるかに良好なユーザ体験を可能にした。
【０００６】
現代のオペレーティングシステムは、ユーザインタフェースのレンダリングをグラフィックス処理ユニットにオフロードすることによって、過去の表示メカニズムから離れてきた。結果として、オペレーティングシステムはアプリケーションから更新を受信し、グラフィックス処理ユニットを使用してそれらの更新を表示フレームに合成し、合成されたフレームを表すグラフィック又はビットマップをディスプレイデバイス又はグラフィックスシステムに提供する。コンピューティング環境のグラフィックスシステムは、追加のメタデータ又は描画コマンドなしに、最終的な合成表示フレームを受信するのみである。したがって、遠隔接続されたユーザにディスプレイを転送するグラフィックスドライバは、以前に提供された情報からもはや利益を得ることができず、仮想及び遠隔コンピューティング環境における表示フレームの処理、エンコード、及び、配信の効率を改善する必要性がある。
【図面の簡単な説明】
【０００７】
次に、本開示の例示的な実施形態を示す添付の図面を参照する。図面は、以下の通りである。
【図１】図１は、本開示の実施形態と一致する、例示的なネットワーク環境のブロック図である。
【図２Ａ】図２Ａは、本開示の実施形態と一致する、例示的なコンピューティングデバイスのブロック図である。
【図２Ｂ】図２Ｂは、本開示の実施形態と一致する、例示的なコンピューティングデバイスのブロック図である。
【図２Ｃ】図２Ｃは、本開示の実施形態と一致する、例示的なコンピューティングデバイスのブロック図である。
【図３】図３は、本開示の実施形態と一致する、ピクセルシーケンスをエンコードするための例示的な方法のフローチャートである。
【図４】図４は、本開示の実施形態と一致する、例示的なキャッシュを示す。
【図５】図５は、本開示の実施形態と一致する、ピクセルシーケンスをエンコードするための例示的な方法のフローチャートである。
【図６】図６は、本開示の実施形態と一致する、例示的なキャッシュを示す。
【図７】図７は、本開示の実施形態と一致する、ピクセルシーケンスをデコードするための例示的な方法のフローチャートである。
【発明を実施するための形態】
【０００８】
以下、本開示に従って実施される例示的な実施形態を詳細に参照し、その例を添付の図面に示す。図面において、同一の参照記号は、可能な限り同一又は類似の要素に用いる。
【０００９】
本明細書で説明される実施形態は、表示フレームデータをエンコードするための複数のテクノロジー及び技術を提供する。これらのテクノロジーは、仮想環境及び非仮想環境の両方でオペレートすることができ、リモートクライアントに転送される表示出力の最適化を可能にする。これらの技術は、エンコードされたフレームの圧縮において改良を提供し、パブリック又はプライベイトなネットワークを介して表示データを転送する際の帯域幅の使用を小さくする。これは、帯域幅が制限されたネットワークにおいてより良いエンドユーザ経験を提供することができ、又はバイト当たりの支払い、従量制の支払い、又は、言い換えれば制限されたデータスキーム（例えば、セルラーデータプラン）が使用される場合のコストを低減することができる。さらに、本明細書で説明される複数のテクノロジー及び技術は、コンピューティングリソースの要求の最小限の又は無視できる程度の増加で、効率的なエンコードを提供することができる。
【００１０】
本開示と一致する実施形態によれば、表示フレームデータを、様々なエンコード方法を使用してエンコードすることができる。例えば、表示フレームの幾つかの領域を、それらの領域のメモリフットプリントを低減するために、不可逆圧縮アルゴリズム（例えば、ＪＰＥＧ（Joint Photographic Experts Group））又は圧縮ＪＰＥＧを保持するＴＩＦＦ（Tagged Image File Format）コンテナを使用してエンコードすることができる。さらに、表示フレームの他の領域を、品質を保持するために、可逆圧縮アルゴリズム（例えば、ピクセルデータ当たり８ビットのグラフィックス相互交換フォーマット（Graphics Interchange Format：ＧＩＦ）、ポータブルネットワークグラフィックス（Portable Network Graphics：ＰＮＧ）、パックビット（PackBits）を保持するＴＩＦＦコンテナ、トゥルービジョンティージーエー（TrueVision TGA：ＴＧＡ）、又はランレングスエンコーディング（Run Length Encoding：ＲＬＥ））を使用してエンコードすることができる。可逆エンコーディング中に達成される圧縮比は、不可逆エンコーディング中に達成される圧縮比と比較して著しく低い。これは、表示フレームデータの可逆エンコーディングを最適化するための新しいメカニズムを必要とする。
【００１１】
本開示と一致する複数の実施形態は、可逆エンコーダのためのマルチピクセルキャッシングスキームに関するシステム及び方法を含む。システム及び方法は、ピクセルのシーケンスを取得することと、ピクセルシーケンスの単一の繰り返しピクセルからなる繰り返しサブシーケンスと、ピクセルシーケンスの非繰り返しサブシーケンスと、を決定することと、決定に応じて、繰り返しピクセルのランレングスを使用して繰り返しサブシーケンスをエンコードし、マルチピクセルキャッシュを使用して非繰り返しサブシーケンスをエンコードすることと、を含み、マルチピクセルキャッシュを使用してエンコードすることが、マルチピクセルキャッシュ内に格納された非繰り返しサブシーケンスを、マルチピクセルキャッシュ内の非繰り返しサブシーケンスの位置としてエンコードすることと、非繰り返しサブシーケンスでのピクセルの値を使用して、マルチピクセルキャッシュ内に格納されていない非繰り返しサブシーケンスをエンコードすることと、を含む。
【００１２】
本明細書で説明される実施形態は、コンピュータリソースの消費が無視できる程度増加することを必要とするだけで、送信に必要な帯域幅を低減するために、画像及び他のデータのエンコーディングの改善を提供することができる。各生ピクセルが３バイトのデータ（ピクセルの赤（Ｒ）成分、緑（Ｇ）成分及び青（Ｂ）成分に対してそれぞれ１バイトのデータ）を使用して表される視覚データをエンコードするシステムでは、本開示と一致する実施形態が、マルチピクセルキャッシュを利用して、シーケンスに対してわずか２バイトのデータを使用して多くの異なるピクセルを含む繰り返しシーケンスを格納し及びエンコードすることができる。開示されたテクノロジーは、ピクセルシーケンスを表すのに必要なデータの量を最小限にし、既存の可逆エンコーディング方法に対して改善を提供する。ビデオの単一の画像又はフレームが何百万ものピクセルになり得る現在の環境では、ピクセルレベルでの記憶の減少が、効率の大幅な上昇をもたらし、エンコードされたデータをネットワークを介して提供するために必要な帯域幅及びリソースの大幅な減少をもたらすことができる。
【００１３】
図１は、例示的なネットワーク環境１００のブロック図である。例示的なネットワーク環境１００は仮想ネットワーク環境を対象とするが、ネットワーク環境はパケットを使用して通信する任意のタイプのネットワークとすることができることを理解されたい。ネットワーク環境１００は、一又はそれ以上のクライアントデバイス１０２Ａ−Ｆ、パブリックネットワーク１０４、プライベイトネットワーク１１０、メインオフィス１１４、ブランチオフィス１１６及びデータセンタ１２０を含むことができる。
【００１４】
一又はそれ以上のクライアントデバイス１０２Ａ−Ｆ（まとめて１０２）は、様々な手段を介してデータセンタ１２０からリモートサービスを取得することができるデバイスである。クライアントデバイス１０２Ａ−Ｆはデータセンタ１２０と直接（例えば、クライアントデバイス１０２Ｅ）又はパブリックネットワーク１０４（例えば、クライアントデバイス１０２Ａ−Ｄ）若しくはプライベイトネットワーク１１０（例えば、クライアントデバイス１０２Ｆ）を介して間接的に通信することができる。幾つかの実施形態では、メインオフィス１１４及びブランチオフィス１１６がクライアントデバイス１０２Ａ−Ｆに類似する一又はそれ以上のクライアントデバイスも含むことができる。メインオフィス１１４は、例えば会社の主たる事業所に位置することができる。ブランチオフィス１１６は、例えばメインオフィス１１４から遠く離れた場所に位置することができる。幾つかの実施形態では、メインオフィス１１４及びブランチオフィス１１６のクライアントデバイスが、例えばプライベイトネットワーク１１０を介してデータセンタ１２０からリモートサービスを取得することもできる。
【００１５】
クライアントデバイス１０２がパブリックネットワーク１０４又はプライベイトネットワーク１１０を介して通信するとき、通信リンクを確立することができる。例えば、パブリックネットワーク１０４によって通信リンクを確立することができ、それにより、クライアントデバイス（例えば、クライアントデバイス１０２Ａ−Ｄ）がデータセンタ１２０にアクセスできるようになる。プライベイトネットワーク１１０によって通信リンクを確立することもでき、それによってクライアントデバイス１０２Ｆ、メインオフィス１１４及び／又はブランチオフィス１１６がデータセンタ１２０にアクセスすることができる。クライアントデバイス１０２Ａ−Ｄはコンピュータ（例えばクライアントデバイス１０２Ａ）、ラップトップ（例えばクライアントデバイス１０２Ｂ）、タブレット（例えばクライアントデバイス１０２Ｃ）、及びモバイルスマートフォン（例えばクライアントデバイス１０２Ｄ）として描かれているが、クライアントデバイス１０２はデータセンタ１２０との間でパケットを通信する任意のタイプのデバイス（例えばスマートウォッチ又は任意の他のウェアラブルデバイス）であり得ることが理解される。
【００１６】
パブリックネットワーク１０４及びプライベイトネットワーク１１０は、広域ネットワーク（ＷＡＮ）、ローカルエリアネットワーク（ＬＡＮ）又はメトロポリタンエリアネットワーク（ＭＡＮ）などの任意のタイプのネットワークとすることができる。一例として、ＷＡＮはインターネット又はワールドワイドウェブとすることができ、ＬＡＮは企業イントラネットとすることができる。パブリックネットワーク１０４及びプライベイトネットワーク１１０は、有線ネットワーク、無線ネットワーク又は両方の組合せとすることができる。
【００１７】
データセンタ１２０は、特定の公共エンティティ又は私的エンティティに関するデータ及び情報の記憶、管理及び配布のための、物理的又は仮想のいずれかの中央リポジトリとすることができる。データセンタ１２０は、コンピュータシステムと一又はそれ以上の物理サーバ、仮想サーバ及びストレージシステムなどの関連コンポーネントとを収容するために使用され得る。データセンタ１２０は、とりわけ、一又はそれ以上のサーバ（例えばサーバ１２２）、デスクトップデリバリーコントローラ１２４、仮想デスクトップ１２６、アプリケーション１２８及びバックエンドシステム１３０を含むことができる。
【００１８】
サーバ１２２はＩＰアドレスによって表されるエンティティであってもよく、単一のエンティティ又はサーバファームのメンバとして存在することができる。サーバ１２２は、物理サーバであってもよく、仮想サーバであってもよい。幾つかの実施形態では、サーバ１２２が、ハードウェア層、オペレーティングシステム、通信サブシステム及び一又はそれ以上の仮想マシンを作成又は管理するハイパーバイザを含む。サーバ１２２は、一又はそれ以上のサービスをエンドポイントに提供することができる。これらのサービスは、一又はそれ以上のアプリケーション１２８を一又はそれ以上のエンドポイント（例えばクライアントデバイス１０２Ａ−Ｆ）に提供することを含むことができる。例えば、一又はそれ以上のアプリケーション１２８は、Windows（登録商標）又はＳＡＰ（登録商標）ベースのアプリケーション及びコンピューティングリソースを含むことができる。通信サブシステムを経由して、サーバ１２２は様々なタイプのネットワーク（例えばプライベイトネットワーク１１０及びパブリックネットワーク１０４）を介して他のデバイス（例えばクライアントデバイス１０２）と通信することができる。サーバ１２２は、仮想デスクトップ１２６、アプリケーション１２８及び／又はデスクトップデリバリーコントローラ１２４などの、データセンタ１２０の他のコンポーネントに提供される機能を含むことができる。幾つかの実施形態では、クライアントデバイスが、サーバ１２２と一致する機能を提供することによって、サーバ１２２として動作する。
【００１９】
デスクトップデリバリーコントローラ１２４は、サービスをクライアントデバイス（例えばクライアントデバイス１０２Ａ−Ｆ）へ配信することを可能にする、仮想デスクトップ１２６のようなデバイスであり得る。デスクトップデリバリーコントローラ１２４はすべての仮想デスクトップ通信を管理し維持し最適化するのに必要な機能を提供することができる。幾つかの実施形態では、デスクトップデリバリーコントローラ１２４がアプリケーション１２８のプロビジョニングを制御、管理、維持又は最適化することができる。
【００２０】
幾つかの実施形態では、一又はそれ以上の仮想デスクトップ１２６が一又はそれ以上のアプリケーション１２８を提供する。仮想デスクトップ１２６は、複数のユーザが単一の共有リモートデスクトップサービスデスクトップにアクセスすることを可能にするホスト型共有デスクトップ、各ユーザが自分自身の仮想マシン、ストリーミングディスクイメージ、ローカル仮想マシン、個々のアプリケーション（例えば一又はそれ以上のアプリケーション１２８）又はそれらの組み合わせを有することを可能にする仮想デスクトップインフラストラクチャを含むことができる。ユーザは、クライアントデバイス１０２を介して一又はそれ以上の仮想デスクトップ１２６と対話することができる。幾つかの実施形態では、仮想デスクトップ１２６は、仮想デスクトップからクライアントデバイスに転送される更新された視覚ディスプレイを提供することによって、ユーザ入力に応答する。
【００２１】
バックエンドシステム１３０は、コンピュータネットワーキングハードウェア、アプライアンス又はサーバファーム又はサーババンク内のサーバの単一の又は複数のインスタンスであってもよい。バックエンドシステム１３０は、サーバ１２２と直接又は間接的に接続することができる。例えば、バックエンドシステム１３０は、ＬＤＡＰ（Lightweight Directory Access Protocol）ディレクトリサービス、Kerberosベースの認証、ＤＮＳ（Domain Name System）ベースの命名及び他のネットワーク情報、並びに幾つかのサーバ間のディレクトリ更新の同期を含む、幾つかのネットワークサービスを提供することができる、Microsoft（登録商標）Active Directoryを含むことができる。バックエンドシステム１３０は、とりわけ、Oracleバックエンドサーバー、ＳＱＬサーバーバックエンド及び／又はＤＨＣＰ（Dynamic Host Configuration Protocol）サーバを含むこともできる。バックエンドシステム１３０は、データ、サービス又はその両方の組合せをデータセンタ１２０に提供することができ、データセンタ１２０は次にその情報を様々な形式を介してクライアントデバイス１０２又はブランチオフィス１４０に提供することができる。
【００２２】
図２Ａ−２Ｃは、本開示の実施形態と一致する例示的なコンピューティングデバイス２００のブロック図である。コンピューティングデバイス２００は、図１に示したようなデータセンタ１２０内のサーバ１２２とすることができる。図２Ａに示されるように、コンピューティングデバイス２００は、一又はそれ以上のセントラルプロセッシングユニット（ＣＰＵ）２２１、一又はそれ以上のグラフィックスプロセッシングユニット（ＧＰＵ）２２５、システムメモリ２２２及びグラフィックメモリ２２６を含むことができる。ＣＰＵ２２１はシステムメモリ２２２からフェッチされた命令に応答しそれを処理する任意の論理回路とすることができる。ＣＰＵ２２１は、メモリ（例えばシステムメモリ２２２）又はキャッシュ（例えばキャッシュ２４０）に記憶された特定の組の命令を実行することができる単一又は複数のマイクロプロセッサ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又はデジタルシグナルプロセッサ（ＤＳＰ）とすることができる。ＣＰＵ２２１は、また、可変タイプのデータを記憶するための複数のプロセッサレジスタを含むことができる。例えば、これらのレジスタは、データ、命令、浮動小数点値、条件値、及び／又は、システムメモリ２２２内の位置のアドレスを記憶することができる。ＣＰＵレジスタは、命令ポインタ、命令カウンタ及び／又はメモリスタックポインタなど、実行プロセスに関連するデータを記憶するために使用される専用レジスタを含むことができる。システムメモリ２２２は、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ（Compact Disk Read-Only Memory）、ＭＯ(Magneto-Optical）ドライブ、ＤＶＤ−ＲＯＭ（Digital Versatile Disk Read-Only Memory）、ＤＶＤ−ＲＡＭ（Digital Versatile Disk Random-Access Memory）、フラッシュドライブ及び／又はフラッシュメモリ、プロセッサキャッシュ、メモリレジスタ、又は、半導体メモリなどの有形及び／又は非一時的なコンピュータ可読媒体を含むことができる。システムメモリ２２２は、データを格納し、任意の格納場所がＣＰＵ２２１によって直接アクセスされることを可能にする一又はそれ以上のメモリチップとすることができる。システムメモリ２２２は、任意のタイプのＲＡＭ(Random Access Memory)又は本明細書で説明するように動作することができる任意の他の利用可能なメモリチップであってもよい。図２Ａに示される例示的な実施形態では、ＣＰＵ２２１がシステムインターフェース２５０を介してシステムメモリ２２２と通信することができる。ＧＰＵ２２５は、ディスプレイデバイス（例えばディスプレイデバイス２２４）に出力するためのフレームバッファ（例えば図２Ｂに示されるフレームバッファ２１７）に格納された画像の作成を提供及び／又は加速するために、メモリ（例えばグラフィックメモリ２２６）を操作及び変更することができる任意のタイプの専用回路とすることができる。ＧＰＵ２２５は、グラフィカルデータの大きなブロックの処理が並列に実行され得るアルゴリズムに関して、汎用ＣＰＵ２２１よりもそれらをより効果的にする高度な並列構造を有し得る。さらに、ＧＰＵ２２５の機能を、他の何らかのタイプの専用処理ユニット又はコプロセッサのチップセットに含めることもできる。
【００２３】
ＣＰＵ２２１は、システムメモリ２２２及びシステムインターフェース２５０に接続することができる。ＣＰＵ２２１は、システムメモリ２２２に格納されたプログラミング命令を実行し、システムメモリ２２２に格納されたデータを演算し、ＣＰＵ２２１とＧＰＵ２２５との間の通信をブリッジするシステムインターフェース２５０を介してＧＰＵ２２５と通信することができる。幾つかの実施形態では、ＣＰＵ２２１、ＧＰＵ２２５、システムインターフェース２５０又はそれらの任意の組合せは単一の処理ユニットに統合されることができる。ＧＰＵ２２５は、システムメモリ２２２又はグラフィックメモリ２２６内のグラフィックデータストアを操作するために、システムメモリ２２２内に格納された特定の命令セットを実行することができる。例えば、ＧＰＵ２２５は、ＣＰＵ２２１によって送信された命令を受信し、グラフィックメモリ２２６に格納されたグラフィックデータをレンダリングするために命令を処理することができる。グラフィックメモリ２２６は、ローカルメモリ、システムメモリ、オンチップメモリ及びハードディスクを含む、ＧＰＵ２２５によってアクセス可能な任意のメモリ空間であってもよい。ＧＰＵ２２５は、グラフィックメモリ２２６に格納されたグラフィックデータをディスプレイデバイス２２４上に表示することができる。
【００２４】
コンピューティングデバイス２００は、また、システムインターフェース２５０を介して通信する、ディスプレイデバイス２２４と、入力／出力（Ｉ／Ｏ）コントローラ２２３を介して接続される入力／出力（Ｉ／Ｏ）デバイス２３０（例えば、キーボード、マウス又はポインティングデバイス）とを含むことができる。ＣＰＵ２２１が、シリアル通信方式又はポイントツーポイント通信方式などのような、システムインターフェース２５０を介する以外の方式で、システムメモリ２２２及び他のデバイスと通信することもできることを理解されたい。同様に、ＧＰＵ２２５は、システムインターフェース２５０以外の方式でグラフィックメモリ２２６及び他のデバイスと通信することもできる。さらに、Ｉ／Ｏデバイス２３０は、コンピューティングデバイス２００に対して、ストレージ及び／又はインストール媒体を提供することもできる。
【００２５】
図２Ｂは、ＣＰＵ２２１がメモリポート２０３を介してシステムメモリ２２２と直接通信し、同様にＧＰＵ２２５がグラフィックメモリ２２６と直接通信する、例示的なコンピューティングデバイス２００の実施形態を示す。ＣＰＵ２２１は、バックサイドバスと呼ばれることもある２次バスを介してキャッシュ２４０と通信することができる。幾つかの実施形態では、ＣＰＵ２２１がシステムインターフェース２５０を介してキャッシュ２４０と通信する。キャッシュ２４０は、典型的にはシステムメモリ２２２よりも速い応答時間を有する。図２Ｂに示される実施形態のような幾つかの実施形態では、ＣＰＵ２２１がＩ／Ｏポートを介してＩ／Ｏデバイス２３０と直接通信する。更なる実施形態では、Ｉ／Ｏデバイス２３０がシステムインターフェース２５０と外部通信バスとの間のブリッジ２６０であり得る。外部通信バスには、例えば、ＵＳＢバス、Apple Desktopバス、ＲＳ―２３２シリアル接続、ＳＣＳＩバス、FireWireバス、FireWire 800バス、イーサネットバス、AppleTalkバス、ギガビットイーサネットバス、非同期転送モードバス、ＨＩＰＰＩバス、スーパーＨＩＰＰＩバス、SerialPlusバス、ＳＣｌ／ＬＡＭＰバス、FireChannelバス、Thunderbolt（登録商標）バス、又はシリアル接続小型コンピュータシステムインターフェースバスなどがある。
【００２６】
図２Ｂに示されるように、ＧＰＵ２２５は、また、グラフィックメモリ２２６及びディスプレイデバイス２２４と直接通信することができる。ＧＰＵ２２５は、システムインターフェース２５０を介してＣＰＵ２２１及び他のデバイスと通信することができる。グラフィックメモリ２２６は、また、フレームバッファ２１７を含むことができる。フレームバッファ２１７は、グラフィックデータの完全なフレームを含むグラフィックメモリ２２６のメモリバッファからディスプレイデバイス（例えばディスプレイデバイス２２４）を駆動するグラフィック出力デバイス(graphic output device)であり得る。フレームバッファ２１７は、ディスプレイデバイス２２４上に表示されるべき最終グラフィックフレームを格納することができる。
【００２７】
図２Ａに示されるように、コンピューティングデバイス２００は、３．５インチのディスク、５．２５インチのディスク又はＺＩＰディスクなどのフロッピーディスクを受け取るフロッピーディスクドライブ、ＣＤ−ＲＯＭドライブ、ＣＤ−Ｒ／ＲＷドライブ、ＤＶＤ−ＲＯＭドライブ、様々なフォーマットのテープドライブ、ＵＳＢデバイス、ハードドライブ、フラッシュドライブ、又は任意のクライアントエージェント２２０又はその一部のようなソフトウェア及びプログラムをインストールするのに適した任意の他のデバイスなど、任意の適切なインストールデバイス２１６をサポートすることができる。コンピューティングデバイス２００は、オペレーティングシステム及び他の関連ソフトウェアを格納し、クライアントエージェント２２０に関連する任意のプログラムなどのアプリケーションソフトウェアプログラムを格納するための、一又はそれ以上のハードディスクドライブ又は独立した複数のディスクの冗長アレイなどのストレージデバイス２２８を、さらに備えることができる。任意選択で、任意のインストールデバイス２１６をストレージデバイス２２８として使用することもできる。
【００２８】
さらに、コンピューティングデバイス２００は、標準的な電話回線、ＬＡＮ又はＷＡＮリンク（例えば、８０２．１１、Ｔ１、Ｔ３、５６ｋｂ、Ｘ．２５）、ブロードバンド接続（例えば、ＩＳＤＮ、フレームリレー、ＡＴＭ）、ワイヤレス接続、又は上記のいずれか若しくはすべての何らかの組み合わせを含むが、これらに限定されない、様々な接続方式を用いてＬＡＮ、ＷＡＮ、ＭＡＮ又はインターネットに接続するためのネットワークインターフェース２１８を含むことができる。ネットワークインターフェース２１８は、内蔵ネットワークアダプタ、ネットワークインターフェースカード、ＰＣＭＣＩＡネットワークカード、カードバスネットワークアダプタ、ワイヤレスネットワークアダプタ、ＵＳＢネットワークアダプタ、モデム、又は、本明細書で説明される通信及び演算を実行することができる任意のタイプのネットワークにコンピューティングデバイス２００を接続するのに適した任意の他のデバイスを備えることができる。
【００２９】
幾つかの実施形態では、オペレーティングシステムがコンピューティングデバイス２００のコンポーネント上で実行される。オペレーティングシステムは、グラフィックスドライバを使用して、グラフィックスシステム（例えば、ＧＰＵ２２５、グラフィックメモリ２２６、フレームバッファ２１７及びディスプレイデバイス２２４）と対話することができる。グラフィックスドライバは、仮想化及び非仮想化コンピューティング環境に存在することができる。グラフィックスドライバは、演算を実行し、ディスプレイデバイス２２４に表示するためにその結果をフレームバッファ２１７に格納するように、ＧＰＵ２２５に命令することができる。幾つかの実施形態では、フレームバッファ２１７の内容をディスプレイデバイス２２４に表示する代わりに、グラフィックスドライバは、フレームバッファ２１７に格納された表示フレームをさらに処理し、フレームバッファ２１７の内容を、通信可能に結合された（例えばネットワークインターフェース２１８を介して）コンピューティングデバイス（例えばクライアント１０２）に転送する。
【００３０】
図２Ｃは、例示的なコンピューティングデバイス２００の実施形態を示す。コンピューティングデバイス２００は、ストレージ２２８、Ｉ／Ｏデバイス２３０、ＣＰＵ２２１、システムメモリ２２２、フレームバッファ２１７、グラフィックメモリ２２６を、（図２Ａ−２Ｂに示すように構造化することができる）ハードウェア層２０１の一部として含むことができる。コンピューティングデバイス２００は、オペレーティングシステム２５１を実行することができる。さらに、コンピューティングデバイス２００は、アプリケーション２６０Ａ−Ｃを実行することができる。アプリケーション２６０Ａ−Ｃは、オペレーティングシステム２５１によって提供される機能を使用して、コンピューティングデバイス２００によって提供されるハードウェア層２０１と対話することができる。
【００３１】
オペレーティングシステム２５１は、デバイスドライバを使用して、ハードウェア層２０１内のコンポーネントと通信することができる。例えば、オペレーティングシステム２５１は、ディスクドライバ２５６を使用してストレージ２２８と対話し、デバイスドライバ２５５を使用して様々なＩ／Ｏデバイス２３０と対話し、グラフィックスドライバ２５３を使用してフレームバッファ２１７、グラフィックメモリ２２６及びグラフィックスシステムの他の態様（例えば、図２Ａ−２Ｂに示すようなＧＰＵ２２５及びディスプレイデバイス２２４）と対話することができる。コンピューティングデバイス２００は、図示されていない他のハードウェアとの対話を容易にするために、多くの追加のデバイスドライバを含むことができる。
【００３２】
さらに、オペレーティングシステム２５１は、コンピューティングデバイス２００を強化することに関連する異なるタスクを実行するように設計されたコンポーネントと対話することができる。エンコーダ２７０は、オペレーティングシステム２５１及びフレームバッファ２１７と通信して、オペレーティングシステム２５１によって生成された表示フレームをさらに処理することができる。エンコーダ２７０はリモートコンピューティングデバイス（例えば、クライアントデバイス１０２）への表示フレームの送信を最適化するための特別な機能を提供することができる。幾つかの実施形態では、エンコーダ２７０がストレージフットプリントを低減しネットワークを介して表示フレームを送信するためのサイズと品質との間のバランスを提供するように表示フレームをエンコードする。
【００３３】
エンコーダ２７０は、一又はそれ以上のモジュールであり、当該モジュールを、関連する機能の特定の機能を実行する他のコンポーネント（例えば、集積回路の一部）又は（コンピュータ可読媒体に格納される）プログラムの一部と共に使用するように設計されたパッケージ化された機能ハードウェアユニットとすることができる。エンコーダ２７０の一又はそれ以上のモジュールは、過渡領域ディテクタ２７１、過渡領域エンコーダ２７２及びビットマッププロセッサ２７５を含むことができる。幾つかの実施形態では、これらの構成要素がエンコーダ２７０内に含まれる代わりに、エンコーダ２７０に通信可能に結合された別個のモジュールである。過渡領域ディテクタ２７１は、画面の急速に変化している領域を決定するために、前の表示フレームとメモリ（例えば、システムメモリ２２２、キャッシュ２４０又はＣＰＵレジスタ）に格納されたデータとを、表示フレームと比較する一又はそれ以上のモジュールとすることができる。様々な特性は、領域が過渡的であることを示すことができる。過渡領域ディテクタ２７１は、表示フレームを、過渡領域エンコーダ２７２に提供される過渡領域と、ビットマッププロセッサ２７５に提供される非過渡領域とに分割することができる。幾つかの実施形態では、過渡領域ディテクタ２７１が、以前に識別された過渡領域がもはや過渡的ではなくなったときを検出し、エンコーダに、後続のエンコードのためにその領域をビットマッププロセッサ２７５に提供させる。
【００３４】
ビットマッププロセッサ２７５は、非過渡領域を処理するための一又はそれ以上のモジュールとすることができる。処理を支援するために、ビットマッププロセッサ２７５は、ビットマップエンコーダ２７６及びビットマップキャッシュ２７８を含むことができる。ビットマッププロセッサ２７５は、ビットマップキャッシュ２７８で以前に処理された非過渡領域を得ることができる。ビットマッププロセッサ２７５は、ビットマップキャッシュ２７８内に見つからない任意の領域を、追加の処理のためにビットマップエンコーダ２７６に提供することができる。幾つかの実施形態では、ビットマップエンコーダ２７６及び／又はビットマップキャッシュ２７８がビットマッププロセッサ２７５及び／又はエンコーダ２７０とは分離されており別個である。表示フレームの全ての領域がエンコードされた後、エンコーダ２７０は、フレームをリモートデバイス（例えばクライアントデバイス１０２）に転送するか、又は、エンコードされた表示フレームをコンピューティングシステム２００の別のコンポーネントに提供することができる。
【００３５】
ビットマップエンコーダ２７６は、表示フレームの非過渡領域の種々の領域に対する最適な符号化方法を決定するための一又はそれ以上のモジュールであり得る。ビットマップエンコーダ２７６は、これらの符号化方法を決定するために複数の技術を使用することができる。幾つかの実施形態では例えば、ビットマップエンコーダ２７６は、表示フレームの領域を、大きな変化又は小さな変化を有するものとして分類する。これらの実施形態において、小さな変化を有する領域は不可逆圧縮アルゴリズム（例えばＪＰＥＧ又は圧縮されたＪＰＥＧを保持するＴＩＦＦコンテナ）を用いて符号化され得る。さらに、大きな変化を有する領域は、品質を保存するために、可逆エンコーディングアルゴリズム（例えば、ＲＬＥ、ピクセル画像データ当たり８ビットのＧＩＦ、ＰＮＧ又はPackBitsを保持するＴＩＦＦコンテナ）を使用して符号化することができる。
【００３６】
本開示と一致する実施形態は、データの可逆エンコーディングを改善することに関する。エンコードされたデータは、それぞれが複数のバイトによって表される何百万ものピクセルを含むことができる。したがって、圧縮における小さな利得でさえも、送信されなければならないデータ量において巨大な節約をもたらすことができる。さらに、本明細書で説明されるテクノロジー及び技術は、コンピューティングリソース要件の最小限又は無視できる増加で、効率的な可逆エンコーディングを提供することができる。
【００３７】
図３は、本開示の実施形態と一致する、ＲＬＥ及び単一ピクセルキャッシュを使用するピクセルシーケンスの可逆エンコーディングの例示的な方法のフローチャートである。例示的な方法は、例えば、ビットマップエンコーダ２７６によって実行され得る。図示された手順は、ステップの順序を変更し、ステップを削除し、又は追加のステップをさらに含むように変更できることが容易に理解されよう。
【００３８】
最初のステップ３００の後、エンコーダ（例えばビットマップエンコーダ２７６）は、可逆エンコーディングのためのピクセルシーケンスを取得することができる（ステップ３０５）。幾つかの実施形態では、ピクセルシーケンスが、ビットマップエンコーダ２７６によって可逆エンコーディングのために識別された表示フレームの非過渡領域を含むことができる。幾つかの実施形態では、表示フレーム内の各ピクセルが、各１バイトのデータがピクセルの赤（Ｒ）成分、緑（Ｇ）成分及び青（Ｂ）成分のためのデータである３バイトのデータを使用してエンコードされ得る。エンコーダは、ピクセルシーケンスの可逆エンコーディングを提供することができる。例えば、エンコーダは、文字列「ＡＢＡＡＡＡＡＡＡＣＣＣＣＤＢ」として表される１５個のピクセル（一例を提供するために、各文字は一意のピクセルを表し、繰り返される文字は正確に同じ３バイト値を有するピクセルを表す）を、１５個のピクセルの各々に対して３バイトのデータを用いた４５バイトのデータを使用して、処理することができる。
【００３９】
幾つかの実施形態において、エンコーダは、ピクセルシーケンスが、全体が繰り返しピクセルからなる任意のサブシーケンスを含むかどうかを決定することができる（ステップ３１０）。全体が繰り返しピクセルからなる任意のサブシーケンスは、ＲＬＥを用いて符号化することができる（ステップ３１５）。ＲＬＥは、ランレングスを使用して、文字列「ＡＢＡＡＡＡＡＡＡＣＣＣＣＤＢ」として表されるピクセルシーケンスを「ＡＢＡＹ６ＣＹ３ＤＢ」としてエンコードすることができる。ここで、「Ｙ６」及び「Ｙ３」はそれぞれ前のピクセルの繰り返し発生数を表示する１バイトのデータを表す。したがって、この実施形態では、ＲＬＥが４５バイトの生ピクセルデータと比較して、２０バイトのデータ（それぞれ３バイトの６ピクセル及びランレングスを表す「Ｙ６」、「Ｙ３」の２バイトのデータ）を使用して、この例示的なピクセルシーケンスの出力をエンコードすることによって、可逆エンコーディングを提供することができる。
【００４０】
さらに、エンコーダ（例えばビットマップエンコーダ２７６）は、単一ピクセルキャッシュ構造を使用して、ステップ３１５によって処理されない任意の残りのピクセルをエンコードすることができる。単一ピクセルキャッシュ構造は、繰り返しピクセルのいかなるランも示さないシーケンスに対して効率的なエンコーディングを提供することができる。例えば、上述したような基本的なＲＬＥは、文字列「ＡＢＣＤＡＢＡＣＡＢＤＥ」として表されるシーケンスのような繰り返しを何ら有さないピクセルシーケンスに対して、何らの圧縮利益を与えることができず、３６バイトのデータ（各々３バイトの１２ピクセル）を使用してこの例示的なシーケンスをエンコードするだろう。単一ピクセルキャッシュ構造を使用するエンコーダ（例えばビットマップエンコーダ２７６）は、各ピクセルについてハッシュ値を計算することができる（ステップ３２０）。幾つかの実施形態では、ハッシュアルゴリズムが、０から２５４までの間のハッシュ値を生成するために、所定の値とのＸＯＲ演算であり得る。幾つかの実施形態は、ハッシュ値を生成するために他のハッシュアルゴリズムを使用することができる。異なるハッシュアルゴリズムは、コスト、衝突の確率（例えば、同じハッシュ値が２つの異なるピクセルに対して生成される場合）、及び、計算リソースのバランスをとるという要求に基づいて選択されることができる。計算されたハッシュ値は、図４を参照して説明するように、単一ピクセルキャッシュへのルックアップインデックスとして使用することができる（ステップ３２５）。
【００４１】
図４は、本開示の実施形態と一致する、例示的な単一ピクセルキャッシュデータ構造４０１を示す。単一ピクセルキャッシュ４０１は、単一ピクセルを表すデータを、それらの格納されたピクセルの参照記号とともに格納できる任意のデータストレージコンポーネント（例えば、ストレージ２２８、システムメモリ２２２、キャッシュ２４０及び／又はＣＰＵレジスタ）であり得る。単一ピクセルキャッシュ４０１は、単一ピクセルに対して計算されたハッシュ値のインデックス４０５と、各ピクセルを表す３バイトデータ４１０とからなるデータ構造を含むことができる。任意のハッシュ値が与えられると、単一ピクセルキャッシュ４０１は、ハッシュ値に等しいインデックス４０５を見つけ、特定のピクセルを表す３バイトのデータ４１０を取り出すことができる。例えば、図４を参照すると、「１２９」のハッシュ値が与えられると、単一ピクセルキャッシュは、ピクセル「Ｃ」を表す３バイトのデータを取り出すことができる。
【００４２】
図３を再び参照すると、エンコーダは、現在のピクセルを、計算されたハッシュ値によってインデックス付けされた単一ピクセルキャッシュの位置に格納されたピクセルと比較することができる（ステップ３３０）。ステップ３３０における比較が厳密な一致を生じない場合、エンコーダは、キャッシュミスとしてピクセルをエンコードすることができる（ステップ３４０）。例えば、文字列「ＡＢＣＤＡＢＡＣＡＢＤＥ」として表されるピクセルシーケンスについて、ピクセルのいずれも単一ピクセルキャッシュに既に存在しないと仮定すると、最初の４つのピクセル「Ａ」、「Ｂ」、「Ｃ」及び「Ｄ」を、キャッシュミスとしてエンコードすることができる。エンコーダは、ピクセルデータを表す３バイトとキャッシュミスであることをシグナルする１バイトのデータとを使用してキャッシュミスをエンコードできる。幾つかの実施形態では、ハッシュ値のインデックス２５５に対応する単一ピクセルキャッシュの格納場所を、例えば、ハッシュ値２５５に対応する１バイトのデータを表す記号「Ｘ２５５」を使用して単一ピクセルキャッシュミスを示すために（図４に示すように）予約することができ、単一ピクセル「Ａ」のキャッシュミスを、合計４バイトを使用してエンコードすることができ、「Ｘ２５５Ａ」として表すことができる。例示的なシーケンス「ＡＢＣＤＡＢＡＣＡＢＤＥ」のピクセル「Ａ」、「Ｂ」、「Ｃ」及び「Ｄ」の最初の４つのキャッシュミスを、「Ｘ２５５ＡＸ２５５ＢＸ２５５ＣＸ２５５Ｄ」として合計１６バイト使用してエンコードできる。
【００４３】
さらに、エンコーダ（例えばビットマップエンコーダ２７６）は、キャッシュミスに対応するピクセルデータで単一ピクセルキャッシュ４０１を更新することができる（ステップ３４５）。例えば、「Ａ」として表されるピクセルについて計算された「２」のハッシュ値と、単一ピクセル「Ａ」についてステップ３３０で検出されたキャッシュミスとについて、単一ピクセルキャッシュ４０１内のハッシュ値のインデックス「２」に対応する格納場所を、「Ａ」を表すデータで更新することができる。
【００４４】
ステップ３３０における比較が厳密な一致をもたらす場合、エンコーダは、そのピクセルをキャッシュヒットとしてエンコードすることができる（ステップ３３５）。エンコーダは、エンコードされたデータの出力において、３バイトの生ピクセルデータを省き、計算されたハッシュ値をエンコードデータ出力に含めることのみによってキャッシュヒットをシグナルすることができる。文字列「ＡＢＣＤＡＢＡＣＡＢＤＥ」として表される例示的なピクセルシーケンスについて、最初の４つのピクセル「ＡＢＣＤ」がキャッシュミス「Ｘ２５５ＡＸ２５５ＢＸ２５５ＣＸ２５５Ｄ」としてエンコードされ、次の７つのピクセル「ＡＢＡＣＡＢＤ」（キャッシュヒット）はそれらのハッシュ値のみを使用してエンコードされ、文字列「Ｘ２Ｘ１２６Ｘ２Ｘ１２９Ｘ２Ｘ１２６Ｘ２５３」として表され得る。ここで「Ｘ２」、「Ｘ１２６」、「Ｘ１２９」及び「Ｘ２５３」は、それぞれ、単一ピクセルキャッシュ４０１内のピクセル「Ａ」、「Ｂ」、「Ｃ」、「Ｄ」の単一バイトハッシュ値インデックス位置を表す。したがって、７つのピクセルに対応する２１バイトのデータを、７バイトのデータだけを使用してエンコードできる。キャッシュヒットをシグナルするために１バイトのデータと、単一ピクセルキャッシュ４０１内の格納場所を指定するためのデータの追加バイトとを使用する代わりに、１バイトのハッシュ値データをこれらの機能の両方を実行するために使用できるので、この例示的な方法は圧縮性能を改善することができる。
【００４５】
ステップ３２０でハッシュ値を計算するために使用されるハッシュアルゴリズムは、衝突を最小限に抑えるように選択されることができるが、実際に起こる衝突はキャッシュミスと同様に処理されることができる。文字列「ＡＢＣＤＡＢＡＣＡＢＤＥ」として表される例示的なピクセルのシーケンスについて、最後のピクセル（「Ｅ」によって表される）が「Ａ」によって表される前のピクセルと同じハッシュ値（「Ｘ２」によって表される）を取得する場合、エンコーダは、「Ｅ」を「Ｘ２５５Ｅ」としてエンコードすることができる（キャッシュミスについてのステップ３４０と同様）。さらに、エンコーダは、ハッシュ値「Ｘ２」に対応する単一ピクセルキャッシュ位置を、「Ａ」を表すデータから「Ｅ」を表すデータに更新することができる（キャッシュミスの場合のステップ３４５と同様）。
【００４６】
エンコーダ（例えばビットマップエンコーダ２７６）は全ての利用可能なピクセルについてステップ３２０−３４５を繰り返し、送信のためにエンコードされたピクセルデータをアセンブルすることができる。したがって、文字列「ＡＢＣＤＡＢＡＣＡＢＤＥ」として表される１２個の例示的なピクセルのシーケンスは、文字列「Ｘ２５５ＡＸ２５５ＢＸ２５５ＣＸ２５５ＤＸ２Ｘ１２６Ｘ２Ｘ１２９Ｘ２Ｘ１２６Ｘ２５３Ｘ２５５Ｅ」としてデータ出力においてエンコードされ得る。これは、単一ピクセルキャッシュなしのＲＬＥでの３６バイトのデータ（それぞれ３バイトの１２ピクセル）と比較して、合計２７バイトのデータ（それぞれ４バイトの４つのキャッシュミス、それぞれ１バイトの７つのキャッシュヒット、それぞれ４バイトの１つの衝突）を利用することによって、効率的な圧縮を提供することができる。
【００４７】
図５は、本開示の実施形態と一致する、ＲＬＥ及びマルチピクセルキャッシュ構造を使用してピクセルシーケンスを可逆エンコードする例示的な方法のフローチャートである。例示的な方法は、例えば、ビットマップエンコーダ２７６によって実行されることができる。図５を参照すると、図示された手順を、ステップの順序を変更し、ステップを削除し、又は追加のステップをさらに含むように変更できることが容易に理解されよう。
【００４８】
最初のステップ５００の後、エンコーダ（例えばビットマップエンコーダ２７６）は、可逆エンコーディングのためのピクセルシーケンスを取得することができる（ステップ５０５）。幾つかの実施形態では、ピクセルシーケンスがビットマップエンコーダ２７６によって可逆エンコーディングのために識別された表示フレームの非過渡領域を含むことができる。幾つかの実施形態において、エンコーダは、ピクセルシーケンスが全体が繰り返しピクセルからなる任意のサブシーケンスを含むかどうかを決定することができる（ステップ５１０）。全体が繰り返しピクセルからなる任意のサブシーケンスを、ＲＬＥ(上記図３を参照して説明したものと同様）を用いてエンコードすることができる（ステップ５１５）。
【００４９】
さらに、エンコーダ（例えばビットマップエンコーダ２７６）は、マルチピクセルキャッシュ構造を使用して、ステップ５１５によって処理されない任意の残りのピクセルのサブシーケンスをエンコードすることができる。ハッシュアルゴリズムを、各残りのサブシーケンスに対するハッシュ値を計算するために使用することができる（ステップ５２０）。サブシーケンス全体に対して単一のハッシュ値が計算されることができる。幾つかの実施形態では、０から２５５までの間のハッシュ値を生成するために、ハッシュアルゴリズムを、所定の値とのＸＯＲ演算とすることができる。幾つかの実施形態は、ハッシュ値を生成するために他のハッシュアルゴリズムを使用することができる。ハッシュアルゴリズムは、コスト、衝突の確率（例えば、同じ長さの２つの異なるサブシーケンスに対して生成される同じハッシュ値）、及び、計算ソースのバランスをとるように選択され得る。計算されたハッシュ値を、図６を参照して説明するように、マルチピクセルキャッシュへのルックアップインデックスとして使用することができる（ステップ５２５）。
【００５０】
図６は、本開示の実施形態と一致する、例示的なマルチピクセルキャッシュデータ構造６００を示す。マルチピクセルキャッシュ６００を、格納されたデータへの参照記号と共に単一又は複数のピクセルを含むサブシーケンスを表すデータの格納を可能にする任意のデータストレージコンポーネント（例えばストレージ２２８、システムメモリ２２２、キャッシュ２４０及び／又はＣＰＵレジスタ）とすることができる。マルチピクセルキャッシュ６００は、サブキャッシュを含むことができる。例えば、マルチピクセルキャッシュは１４個のサブキャッシュを備えることができ、第１のサブキャッシュ６０５は単一ピクセルのサブシーケンスを表すデータを格納し、第２のサブキャッシュ６１０は２ピクセルのサブシーケンスを表すデータを格納し、同様の構造は、１４ピクセルのサブシーケンスを表すデータを格納する第１４のサブキャッシュ６７０まで拡張され得る。
【００５１】
マルチピクセルキャッシュ６００は、１４より少ないサブキャッシュ又は１４より多いサブキャッシュを含むことができる。サブキャッシュの数は、マルチピクセルキャッシュ６００が格納されるメモリの物理的制限によってのみ制限され、マルチピクセルキャッシュ６００が利用できるサブキャッシュの数には理論的な制限はない。さらに、幾つかの実施形態では、マルチピクセルキャッシュヒットの確率が、サブシーケンスのピクセル長が増加することにつれて急速に減少する可能性があり、したがって、サブキャッシュの数を増加することは必ずしも性能の線形的な改善を提供するとは限らない。使用されるサブキャッシュの最適数は、実験データ、解析、統計解析、ユーザによって行われる任意の選択、又は、幾つかのサブキャッシュを選択する任意の他の方法に基づくことができる。さらに、サブキャッシュの数を、性能とシステム要求とのバランスをとるために、経時的に変更することができる。
【００５２】
マルチピクセルサブキャッシュの各々は、（単一ピクセル又はマルチピクセルサブシーケンスから計算される）ハッシュ値インデックス（例えば、６０６、６１１、６７１）と、単一ピクセル又はマルチピクセルサブシーケンスを表す対応するデータ（例えば、６０７、６１２、６７２）とからなるデータ構造を含むことができる。マルチピクセルキャッシュ内の単一ピクセルサブキャッシュ６０５は、単一ピクセルについて計算されたハッシュ値のインデックス６０６を含み、単一ピクセルを表す３バイトのデータ６０７を格納する、図４に関連して説明した単一ピクセルキャッシュ構造と構造的に等価であり得る。
【００５３】
エンコーダは、ピクセルサブシーケンスの長さと、マルチピクセルキャッシュへのインデックスとして計算されたハッシュ値とを、使用することができる（ステップ５２５）。例えば、２ピクセルサブシーケンスについて計算された「１２６」のハッシュ値について、図６に例示されるマルチピクセルキャッシュ６００は、２ピクセルサブキャッシュ６１０内の「１２６」とインデックス付けされた位置から、文字列「ＬＧ」として表される２つのピクセルに対応するデータを読み出すことができる。しかしながら、１４ピクセルサブシーケンスに対して計算された同じハッシュ値「１２６」について、図６に例示されたマルチピクセルキャッシュ６００は、１４ピクセルサブキャッシュ６７０内の「１２６」とインデックス付けされた位置から、文字列「ＬＢＶＣＡＬＫＦＲＵＴＹＮＦ」として表される１４ピクセルに対応するデータを読み出すことができる。
【００５４】
図５に戻って参照すると、エンコーダは、現在のサブシーケンスを、参照されたマルチピクセルキャッシュ位置に格納されたサブシーケンスと比較することができる（ステップ５３０）。ステップ５３０における比較が厳密な一致を生じない場合、エンコーダは、単一ピクセルサブキャッシュ６０５を使用して、サブシーケンスをエンコードすることができる（ステップ５４５）。文字列「ＡＢＣＤＥＥＥＥＥＥＥＥＥＥＡＢＣＤＥ」として表される例示的なピクセルのシーケンスは、３つのサブシーケンス、すなわち「ＡＢＣＤＥ」、「ＥＥＥＥＥＥＥＥＥ」及び「ＡＢＣＤＥ」に分割することができる。中央のシーケンス「ＥＥＥＥＥＥＥＥＥ」は前のピクセル「Ｅ」の９回の繰り返しとしてＲＬＥを使用してエンコードされることができ、「Ｙ９」として表されることができる。「Ｙ９」は前のピクセルの９回の繰り返しを示す１バイトのデータを表す。最初のサブシーケンス「ＡＢＣＤＥ」がマルチピクセルキャッシュ６００にまだ存在しないと仮定すると、「ＡＢＣＤＥ」はマルチピクセルキャッシュミスであり、単一ピクセルサブキャッシュ６０５を使用してエンコードされることができる（ステップ５４５）。単一ピクセルサブキャッシュ６０５にすでに存在する単一ピクセルがないと仮定すると、サブシーケンス「ＡＢＣＤＥ」は５つの単一ピクセルサブキャッシュミス「Ｘ２５５ＡＸ２５５ＢＸ２５５ＣＸ２５５ＤＸ２５５Ｅ」としてエンコードされることができ、記号「Ｘ２５５」は、各単一ピクセルサブキャッシュミス（図３を参照して説明した単一ピクセルキャッシュミスと同様）をシグナルするために使用される１バイトのデータを表す。さらに、エンコーダは、単一ピクセル「Ａ」、「Ｂ」、「Ｃ」、「Ｄ」及び「Ｅ」に対応するデータで単一ピクセルサブキャッシュ６０５を更新し（図３を参照して説明した単一ピクセルキャッシュの更新と同様）、サブシーケンス全体「ＡＢＣＤＥ」に対応するデータで５ピクセルサブキャッシュを更新することもできる（ステップ５５０）。
【００５５】
ステップ５３０における比較が厳密な一致を生じる場合、エンコーダは、マルチピクセルキャッシュヒットとしてサブシーケンスをエンコードすることができる（ステップ５３５）。幾つかの実施形態では、単一ピクセルサブキャッシュ６０５内の冒頭の位置を、マルチピクセルキャッシュヒットをシグナルするために予約できる。例えば、１４個のサブキャッシュ６０５―６７０を備えるマルチピクセルキャッシュ構造では、単一ピクセルサブキャッシュ６０５内の冒頭の位置０−１２を、特定のマルチピクセルサブキャッシュヒットをシグナルするために予約できる。「０」とインデックス付けされた位置を２ピクセルサブキャッシュヒットのために予約でき、「１」とインデックス付けされた位置を３ピクセルサブキャッシュヒットのために予約でき、同様の論理は、１４ピクセルサブキャッシュヒットのために予約された「１２」とインデックス付けされた位置まで拡張される。したがって、上述の例示的なシーケンス「ＡＢＣＤＥＥＥＥＥＥＥＥＥＥＡＢＣＤＥ」内に含まれる第３のサブシーケンス「ＡＢＣＤＥ」のマルチピクセルキャッシュヒットは、５ピクセルサブキャッシュを参照するための「Ｘ３」によって表される１バイトのデータと、５ピクセルサブキャッシュ内の格納位置のハッシュ値インデックスについての「Ｘ５ｎ」によって表される１バイトのデータとでなる文字列「Ｘ３Ｘ５ｎ」として表される２バイトのデータのみを使用してエンコードされることができる。したがって、ストリング「ＡＢＣＤＥＥＥＥＥＥＥＥＥＥＡＢＣＤＥ」として表される例示的なシーケンスは、出力のために「Ｘ２５５ＡＸ２５５ＢＸ２５５ＣＸ２５５ＤＸ２５５ＥＹ９Ｘ３Ｘ５ｎ」としてエンコードされることができる。
【００５６】
さらに、幾つかの実施形態において、単一ピクセルサブキャッシュ６０５は、単一ピクセルサブキャッシュ６０５内に欠落しているが、マルチピクセルサブシーケンス内に含まれる任意の単一ピクセルで更新されることができる（ステップ５４０）。これは、単一ピクセルサブキャッシュをもっとも最近エンコードされた単一ピクセルで更新された状態に保つことができる。例えば、文字列「ＡＢＣＤＥ」として表されるサブシーケンスに対するマルチピクセルキャッシュヒットの場合、単一ピクセル「Ａ」、「Ｂ」、「Ｃ」、「Ｄ」又は「Ｅ」の何れかが単一ピクセルサブキャッシュにまだ存在しない場合、単一ピクセルサブキャッシュ６０５を更新することができる。
【００５７】
幾つかの実施形態では、エンコーダ（例えばビットマップエンコーダ２７６）はマルチピクセルキャッシュミスを特にシグナルしないことによって、１バイトのデータを節約することができる。これは、上述のようにマルチピクセルキャッシュヒットをシグナルするために単一ピクセルサブキャッシュ６０５内の冒頭位置を予約することによって実施することができる。例えば、図６に示され、１４個のサブキャッシュ６０５−６７０を含むマルチピクセルキャッシュ６００の場合、単一ピクセルサブキャッシュ６０５内の冒頭位置０−１２を、特定のマルチピクセルキャッシュヒットをシグナルするために予約することができ、１２より大きい値がマルチピクセルキャッシュミスのシグナルを示すことができる。マルチピクセルキャッシュミスをシグナルするために追加のバイトは必要ない。さらに、単一ピクセルハッシュアルゴリズムを、単一ピクセルのキャッシュのために、これらの位置を使用することを除外するために、１３から２５４の間（双方を含む）の値を生成するように修正することができる。
【００５８】
マルチピクセルサブキャッシュの何れかによって提供される最大値より長いピクセルサブシーケンスは、マルチピクセルキャッシュミスのシナリオと同様に、単一ピクセルサブキャッシュを使用してエンコードされることができる。１４個のサブキャッシュを有するマルチピクセルキャッシュの実施形態の場合、１４個のピクセルよりも長い任意のサブシーケンスは、図３に例示される単一ピクセル方式を使用してエンコードされることができる。幾つかの実施形態では、１４ピクセルよりも長いサブシーケンスが、最大サブシーケンス値よりも小さい複数のサブシーケンスに分割されることができ、次いで、各新しいサブシーケンスはマルチピクセルキャッシュを使用して処理されることができる。
【００５９】
ＲＬＥ及びマルチピクセルキャッシュ構造を使用する、ピクセルシーケンスの可逆エンコーディングの例示的な方法は、ＲＬＥのみを使用する、又は、図３に関連して説明したＲＬＥ及び単一ピクセルキャッシュを使用する例示的な方法と比較して、より多くの圧縮による利益を提供できる。例えば、これらの圧縮方法のいずれをも使用しない可逆エンコーダは、５７バイトのデータ（各３バイトのデータで１９ピクセル）を使用して文字列「ＡＢＣＤＥＥＥＥＥＥＥＥＥＥＡＢＣＤＥ」として表されるピクセルシーケンスをエンコードすることができる。ＲＬＥのみを使用する可逆エンコーダは、３１バイトのデータ（それぞれ３バイトのデータで１０ピクセル、及び繰り返しピクセル「Ｅ」のランレングスを表す１バイトのデータ「Ｙ９」）を使用して、この例示的なシーケンスを「ＡＢＣＤＥＹ９ＡＢＣＤＥ」としてエンコードできる。図３で説明した例示的な方法（ＲＬＥ及び単一ピクセルキャッシュ）を使用する可逆エンコーダは、２６バイトのデータ（それぞれ４バイトのデータで５つの単一ピクセルキャッシュミス、繰り返しピクセル「Ｅ」のランレングスを表す１バイトのデータ、及び、それぞれ１バイトのデータで５つの単一ピクセルキャッシュヒット）を使用して、この例示的なシーケンスを「Ｘ２５５ＡＸ２５５ＢＸ２５５ＣＸ２５５ＤＸ２５５ＥＹ９Ｘ２Ｘ１２６Ｘ１２９Ｘ２５３Ｘ２０１」としてエンコードできる。図５に示す例示的な方式（ＲＬＥ及びマルチピクセルキャッシュ）を使用する可逆エンコーダは、２３バイトのデータ（それぞれ４バイトのデータでの５つの単一ピクセルキャッシュミスとしてエンコードされた冒頭のマルチピクセルキャッシュミス、繰り返されるピクセル「Ｅ」のランレングスを表す１バイトのデータ、及び、５ピクセルサブキャッシュヒットを表す２バイトのデータ）を使用して、この例示的なシーケンスを「Ｘ２５５ＡＸ２５５ＢＸ２５５ＣＸ２５５ＤＸ２５５ＥＹ９Ｘ３Ｘ５ｎ」として符号化することができる。したがって、マルチピクセルキャッシュを使用するエンコーダは、単一ピクセルキャッシュを使用するエンコーダ又はキャッシュ構造を使用しないエンコーダと比較して優れた可逆圧縮による利益を提供できる。
【００６０】
エンコードされたデータを、リモートデバイス（例えばクライアントデバイス１０２）又はコンピューティングシステム２００の別のコンポーネントに転送することができる。リモートデバイス内又はコンピューティングシステム２００内のデコーダを、エンコードされたデータストリームをデコードするために使用されることができる。デコーダは、図６に示すようなマルチピクセルキャッシュ構造を利用することができる。
【００６１】
図７は、本開示の実施形態と一致する、エンコードされたデータをデコードするための例示的な方法のフローチャートである。図７を参照すると、図示された手順を、ステップの順序を変更し、ステップを削除し、又は追加のステップをさらに含むように変更できることが容易に理解されよう。最初のステップ７００の後、デコーダは、デコーディングのためにエンコードされたデータストリームを取得することができる（ステップ７０５）。例えば、デコーダは、図５に関して説明したような例示的な方法を使用して、文字列「ＡＢＣＤＥＥＥＥＥＥＥＥＥＥＡＢＣＤＥ」として表されるピクセルシーケンスを「Ｘ２５５ＡＸ２５５ＢＸ２５５ＣＸ２５５ＤＸ２５５ＥＹ９Ｘ３Ｘ５ｎ」としてエンコードする可逆エンコーダ（例えばビットマップエンコーダ２７６）から送信されたエンコードされたデータを受信できる。さらに、デコーダは、自身のマルチピクセルキャッシュを使用することができる。
【００６２】
デコーダは、データが繰り返しピクセルのランを含むかどうかを判断することができる（ステップ７１０）。デコーダは、エンコードされたランレングスデータを使用して、繰り返しピクセルの任意のランをデコードすることができる（ステップ７１５）。例示的なエンコードされたデータ「Ｘ２５５ＡＸ２５５ＢＸ２５５ＣＸ２５５ＤＸ２５５ＥＹ９Ｘ３Ｘ５ｎ」に対して、「Ｙ９」によって表される１バイトのデータは、その前のピクセルの９つの繰り返し発生としてデコードされ、「ＥＥＥＥＥＥＥＥＥ」として表される。
【００６３】
デコーダは、また、残りのデータが任意のマルチピクセルキャッシュヒット又は任意のマルチピクセルキャッシュミスをシグナルしているかどうかを判断することができる（ステップ７２０）。マルチピクセルキャッシュミスの場合、デコーダは、単一ピクセルサブキャッシュを使用してデータをデコードすることができる（ステップ７３５）。すべてのマルチピクセルキャッシュミスに対して、デコーダは、単一ピクセルサブキャッシュヒットがあるかどうかを決定することができる（ステップ７４０）。任意の単一ピクセルサブキャッシュヒットに対して、デコーダは、単一ピクセルサブキャッシュにすでに格納されているデータを使用してデコードすることができる（ステップ７４５）。任意の単一ピクセルサブキャッシュミスに対して、デコーダはデータストリーム内の生ピクセルデータを使用することができる（ステップ７５０）。例示的な符号化データ「Ｘ２５５ＡＸ２５５ＢＸ２５５ＣＸ２５５ＤＸ２５５ＥＹ９Ｘ３Ｘ５ｎ」の場合、「Ｘ２５５」によって表される１バイトのデータを、マルチピクセルキャッシュミス及び単一ピクセルキャッシュミスとしてデコードすることができ、「Ｘ２５５ＡＸ２５５ＢＸ２５５ＣＸ２５５ＤＸ２５５Ｅ」として表される文字列データをデコードでき、「ＡＢＣＤＥ」として表すことができる。
【００６４】
さらに、デコーダは、５つの単一ピクセルキャッシュミス「Ａ」、「Ｂ」、「Ｃ」、「Ｄ」、「Ｅ」で、その単一ピクセルサブキャッシュを更新することができる（ステップ７５５）。デコーダは、また、「ＡＢＣＤＥ」として表される５ピクセルの文字列のマルチピクセルキャッシュミスで、マルチピクセルキャッシュ内の５ピクセルサブキャッシュを更新することもできる（ステップ７６０）。データがデコードされるときにそれ自体の単一ピクセルキャッシュ及びマルチピクセルキャッシュを更新することによって、デコーダは、キャッシュデータが、デコードされている所定の値がエンコーダによって処理されたときにエンコーダに格納されたデータと一致すること、及び、デコーダによって処理された将来のキャッシュヒットが適切な値を返すことを保証することができる。
【００６５】
ステップ７２０で検出されたマルチピクセルキャッシュヒットに対して、デコーダは、マルチピクセルキャッシュにすでに格納されているデータを使用してデコードすることができる（ステップ７２５）。例示的なエンコードされたデータ「Ｘ２５５ＡＸ２５５ＢＸ２５５ＣＸ２５５ＤＸ２５５ＥＹ９Ｘ３Ｘ５ｎ」の場合、「Ｘ３」によって表される１バイトのデータは、５ピクセルサブキャッシュのマルチピクセルキャッシュヒットとして復号され、「Ｘ５ｎ」によって表される１バイトのデータは、５ピクセルサブシーケンスを表すデータの格納位置インデックスとして復号デコードされることができる。デコーダは、そのマルチピクセルキャッシュからデータを読み出し、２バイトのエンコードされたデータ「Ｘ３Ｘ５ｎ」をデコードし、それを「ＡＢＣＤＥ」として表すことができる。デコーダは、ステップ７０５で得られた全てのデータがデコードされるまで、これらのステップを繰り返すことができる。エンコーダ（例えばビットマップエンコーダ２７６）から受信され、「Ｘ２５５ＡＸ２５５ＢＸ２５５ＣＸ２５５ＤＸ２５５ＥＹ９Ｘ３Ｘ５ｎ」として表されるエンコードされたデータの例示的なシーケンスは、デコードされ、文字列「ＡＢＣＤＥＥＥＥＥＥＥＥＥＥＡＢＣＤＥ」として表されることができる。
【００６６】
幾つかの実施形態では、デコーダ内の冒頭の単一ピクセルサブキャッシュ位置を、エンコーダ内の同様の予約にマッチするために、マルチピクセルキャッシュヒットをシグナルするために予約することができる。さらに、幾つかの実施形態では、デコーダがエンコーダをマッチングし、単一ピクセルサブキャッシュを、単一ピクセルサブキャッシュにおいて欠落しているマルチピクセルキャッシュヒット内に含まれる任意のピクセルで更新することができる（ステップ７３０）。
【００６７】
前述の明細書では、幾つかの実施形態が実装ごとに変わり得る多数の具体的な詳細を参照して説明された。記載された実施形態の特定の適応及び修正がなされ得る。他の実施形態は、本明細書の考察及び本明細書に開示される本発明の実施から当業者に明らかであり得る。明細書及び実施例は、単に例示として考えられることが意図される。また、図に示されるステップのシーケンスは例示目的のためだけのものであり、任意の特定のステップのシーケンスに限定されることを意図しないことも意図される。したがって、当業者は、これらのステップが同じ方法を実施しながら異なる順序で実行され得ることを理解することができる。
【図１】
0006861801.tif 000002
【図２Ａ】
0006861801.tif 000003
【図２Ｂ】
0006861801.tif 000004
【図２Ｃ】
0006861801.tif 000005
【図３】
0006861801.tif 000006
【図４】
0006861801.tif 000007
【図５】
0006861801.tif 000008
【図６】
0006861801.tif 000009
【図７】
0006861801.tif 000010