(58)【調査した分野】(Int.Cl.,DB名)
コンピューティングデバイスに下記の方法を実行させるための、一又は複数のプロセッサを含む前記コンピューティングデバイスによって実行可能な命令を記憶する非一時的コンピュータ可読記憶媒体であって、
前記方法は、
ピクセルシーケンスを取得すること、
前記ピクセルシーケンス内で、非繰り返しピクセル値を有するピクセルからなる非繰り返しサブシーケンスと、単一の繰り返しピクセル値を有するピクセルからなる繰り返しサブシーケンスと、を識別すること、及び
その識別に応じて、前記単一の繰り返しピクセル値のランレングスを使用して前記繰り返しサブシーケンスをエンコードし、マルチピクセルキャッシュエンコーディングスキームを使用して前記非繰り返しサブシーケンスをエンコードすることを含み、
前記マルチピクセルキャッシュエンコーディングスキームは、前記非繰り返しサブシーケンスの各前記非繰り返しサブシーケンスに対して以下の動作を実行することを含む:
所与の非繰り返しサブシーケンスに含まれる非繰り返しピクセル値の総数を決定すること、及び
前記所与の非繰り返しサブシーケンスを、(1)前記所与の非繰り返しサブシーケンスに含まれる非繰り返しピクセル値の総数に関連付けられた複数のサブキャッシュのうちのサブキャッシュを参照する第1の値と、(2)前記所与の非繰り返しサブシーケンスが格納される参照サブキャッシュ内の格納位置のインデックス値と、を含むデータストリングに変換すること、
非一時的コンピュータ可読記憶媒体。
前記エンコーダが、前記単一ピクセルキャッシュを使用して、前記マルチピクセルキャッシュに格納されていない非繰り返しサブシーケンスの各ピクセルをエンコードする、
請求項11に記載の第1のコンピューティングデバイス。
前記エンコーダが、前記非繰り返しサブシーケンス内のピクセルの値を使用して、前記マルチピクセルキャッシュに格納されていない非繰り返しサブシーケンスをエンコードするようにさらに構成される、
請求項10に記載の第1のコンピューティングデバイス。
【発明を実施するための形態】
【0008】
以下、本開示に従って実施される例示的な実施形態を詳細に参照し、その例を添付の図面に示す。図面において、同一の参照記号は、可能な限り同一又は類似の要素に用いる。
【0009】
本明細書で説明される実施形態は、表示フレームデータをエンコードするための複数のテクノロジー及び技術を提供する。これらのテクノロジーは、仮想環境及び非仮想環境の両方でオペレートすることができ、リモートクライアントに転送される表示出力の最適化を可能にする。これらの技術は、エンコードされたフレームの圧縮において改良を提供し、パブリック又はプライベイトなネットワークを介して表示データを転送する際の帯域幅の使用を小さくする。これは、帯域幅が制限されたネットワークにおいてより良いエンドユーザ経験を提供することができ、又はバイト当たりの支払い、従量制の支払い、又は、言い換えれば制限されたデータスキーム(例えば、セルラーデータプラン)が使用される場合のコストを低減することができる。さらに、本明細書で説明される複数のテクノロジー及び技術は、コンピューティングリソースの要求の最小限の又は無視できる程度の増加で、効率的なエンコードを提供することができる。
【0010】
本開示と一致する実施形態によれば、表示フレームデータを、様々なエンコード方法を使用してエンコードすることができる。例えば、表示フレームの幾つかの領域を、それらの領域のメモリフットプリントを低減するために、不可逆圧縮アルゴリズム(例えば、JPEG(Joint Photographic Experts Group))又は圧縮JPEGを保持するTIFF(Tagged Image File Format)コンテナを使用してエンコードすることができる。さらに、表示フレームの他の領域を、品質を保持するために、可逆圧縮アルゴリズム(例えば、ピクセルデータ当たり8ビットのグラフィックス相互交換フォーマット(Graphics Interchange Format:GIF)、ポータブルネットワークグラフィックス(Portable Network Graphics:PNG)、パックビット(PackBits)を保持するTIFFコンテナ、トゥルービジョンティージーエー(TrueVision TGA:TGA)、又はランレングスエンコーディング(Run Length Encoding:RLE))を使用してエンコードすることができる。可逆エンコーディング中に達成される圧縮比は、不可逆エンコーディング中に達成される圧縮比と比較して著しく低い。これは、表示フレームデータの可逆エンコーディングを最適化するための新しいメカニズムを必要とする。
【0011】
本開示と一致する複数の実施形態は、可逆エンコーダのためのマルチピクセルキャッシングスキームに関するシステム及び方法を含む。システム及び方法は、ピクセルのシーケンスを取得することと、ピクセルシーケンスの単一の繰り返しピクセルからなる繰り返しサブシーケンスと、ピクセルシーケンスの非繰り返しサブシーケンスと、を決定することと、決定に応じて、繰り返しピクセルのランレングスを使用して繰り返しサブシーケンスをエンコードし、マルチピクセルキャッシュを使用して非繰り返しサブシーケンスをエンコードすることと、を含み、マルチピクセルキャッシュを使用してエンコードすることが、マルチピクセルキャッシュ内に格納された非繰り返しサブシーケンスを、マルチピクセルキャッシュ内の非繰り返しサブシーケンスの位置としてエンコードすることと、非繰り返しサブシーケンスでのピクセルの値を使用して、マルチピクセルキャッシュ内に格納されていない非繰り返しサブシーケンスをエンコードすることと、を含む。
【0012】
本明細書で説明される実施形態は、コンピュータリソースの消費が無視できる程度増加することを必要とするだけで、送信に必要な帯域幅を低減するために、画像及び他のデータのエンコーディングの改善を提供することができる。各生ピクセルが3バイトのデータ(ピクセルの赤(R)成分、緑(G)成分及び青(B)成分に対してそれぞれ1バイトのデータ)を使用して表される視覚データをエンコードするシステムでは、本開示と一致する実施形態が、マルチピクセルキャッシュを利用して、シーケンスに対してわずか2バイトのデータを使用して多くの異なるピクセルを含む繰り返しシーケンスを格納し及びエンコードすることができる。開示されたテクノロジーは、ピクセルシーケンスを表すのに必要なデータの量を最小限にし、既存の可逆エンコーディング方法に対して改善を提供する。ビデオの単一の画像又はフレームが何百万ものピクセルになり得る現在の環境では、ピクセルレベルでの記憶の減少が、効率の大幅な上昇をもたらし、エンコードされたデータをネットワークを介して提供するために必要な帯域幅及びリソースの大幅な減少をもたらすことができる。
【0013】
図1は、例示的なネットワーク環境100のブロック図である。例示的なネットワーク環境100は仮想ネットワーク環境を対象とするが、ネットワーク環境はパケットを使用して通信する任意のタイプのネットワークとすることができることを理解されたい。ネットワーク環境100は、一又はそれ以上のクライアントデバイス102A−F、パブリックネットワーク104、プライベイトネットワーク110、メインオフィス114、ブランチオフィス116及びデータセンタ120を含むことができる。
【0014】
一又はそれ以上のクライアントデバイス102A−F(まとめて102)は、様々な手段を介してデータセンタ120からリモートサービスを取得することができるデバイスである。クライアントデバイス102A−Fはデータセンタ120と直接(例えば、クライアントデバイス102E)又はパブリックネットワーク104(例えば、クライアントデバイス102A−D)若しくはプライベイトネットワーク110(例えば、クライアントデバイス102F)を介して間接的に通信することができる。幾つかの実施形態では、メインオフィス114及びブランチオフィス116がクライアントデバイス102A−Fに類似する一又はそれ以上のクライアントデバイスも含むことができる。メインオフィス114は、例えば会社の主たる事業所に位置することができる。ブランチオフィス116は、例えばメインオフィス114から遠く離れた場所に位置することができる。幾つかの実施形態では、メインオフィス114及びブランチオフィス116のクライアントデバイスが、例えばプライベイトネットワーク110を介してデータセンタ120からリモートサービスを取得することもできる。
【0015】
クライアントデバイス102がパブリックネットワーク104又はプライベイトネットワーク110を介して通信するとき、通信リンクを確立することができる。例えば、パブリックネットワーク104によって通信リンクを確立することができ、それにより、クライアントデバイス(例えば、クライアントデバイス102A−D)がデータセンタ120にアクセスできるようになる。プライベイトネットワーク110によって通信リンクを確立することもでき、それによってクライアントデバイス102F、メインオフィス114及び/又はブランチオフィス116がデータセンタ120にアクセスすることができる。クライアントデバイス102A−Dはコンピュータ(例えばクライアントデバイス102A)、ラップトップ(例えばクライアントデバイス102B)、タブレット(例えばクライアントデバイス102C)、及びモバイルスマートフォン(例えばクライアントデバイス102D)として描かれているが、クライアントデバイス102はデータセンタ120との間でパケットを通信する任意のタイプのデバイス(例えばスマートウォッチ又は任意の他のウェアラブルデバイス)であり得ることが理解される。
【0016】
パブリックネットワーク104及びプライベイトネットワーク110は、広域ネットワーク(WAN)、ローカルエリアネットワーク(LAN)又はメトロポリタンエリアネットワーク(MAN)などの任意のタイプのネットワークとすることができる。一例として、WANはインターネット又はワールドワイドウェブとすることができ、LANは企業イントラネットとすることができる。パブリックネットワーク104及びプライベイトネットワーク110は、有線ネットワーク、無線ネットワーク又は両方の組合せとすることができる。
【0017】
データセンタ120は、特定の公共エンティティ又は私的エンティティに関するデータ及び情報の記憶、管理及び配布のための、物理的又は仮想のいずれかの中央リポジトリとすることができる。データセンタ120は、コンピュータシステムと一又はそれ以上の物理サーバ、仮想サーバ及びストレージシステムなどの関連コンポーネントとを収容するために使用され得る。データセンタ120は、とりわけ、一又はそれ以上のサーバ(例えばサーバ122)、デスクトップデリバリーコントローラ124、仮想デスクトップ126、アプリケーション128及びバックエンドシステム130を含むことができる。
【0018】
サーバ122はIPアドレスによって表されるエンティティであってもよく、単一のエンティティ又はサーバファームのメンバとして存在することができる。サーバ122は、物理サーバであってもよく、仮想サーバであってもよい。幾つかの実施形態では、サーバ122が、ハードウェア層、オペレーティングシステム、通信サブシステム及び一又はそれ以上の仮想マシンを作成又は管理するハイパーバイザを含む。サーバ122は、一又はそれ以上のサービスをエンドポイントに提供することができる。これらのサービスは、一又はそれ以上のアプリケーション128を一又はそれ以上のエンドポイント(例えばクライアントデバイス102A−F)に提供することを含むことができる。例えば、一又はそれ以上のアプリケーション128は、Windows(登録商標)又はSAP(登録商標)ベースのアプリケーション及びコンピューティングリソースを含むことができる。通信サブシステムを経由して、サーバ122は様々なタイプのネットワーク(例えばプライベイトネットワーク110及びパブリックネットワーク104)を介して他のデバイス(例えばクライアントデバイス102)と通信することができる。サーバ122は、仮想デスクトップ126、アプリケーション128及び/又はデスクトップデリバリーコントローラ124などの、データセンタ120の他のコンポーネントに提供される機能を含むことができる。幾つかの実施形態では、クライアントデバイスが、サーバ122と一致する機能を提供することによって、サーバ122として動作する。
【0019】
デスクトップデリバリーコントローラ124は、サービスをクライアントデバイス(例えばクライアントデバイス102A−F)へ配信することを可能にする、仮想デスクトップ126のようなデバイスであり得る。デスクトップデリバリーコントローラ124はすべての仮想デスクトップ通信を管理し維持し最適化するのに必要な機能を提供することができる。幾つかの実施形態では、デスクトップデリバリーコントローラ124がアプリケーション128のプロビジョニングを制御、管理、維持又は最適化することができる。
【0020】
幾つかの実施形態では、一又はそれ以上の仮想デスクトップ126が一又はそれ以上のアプリケーション128を提供する。仮想デスクトップ126は、複数のユーザが単一の共有リモートデスクトップサービスデスクトップにアクセスすることを可能にするホスト型共有デスクトップ、各ユーザが自分自身の仮想マシン、ストリーミングディスクイメージ、ローカル仮想マシン、個々のアプリケーション(例えば一又はそれ以上のアプリケーション128)又はそれらの組み合わせを有することを可能にする仮想デスクトップインフラストラクチャを含むことができる。ユーザは、クライアントデバイス102を介して一又はそれ以上の仮想デスクトップ126と対話することができる。幾つかの実施形態では、仮想デスクトップ126は、仮想デスクトップからクライアントデバイスに転送される更新された視覚ディスプレイを提供することによって、ユーザ入力に応答する。
【0021】
バックエンドシステム130は、コンピュータネットワーキングハードウェア、アプライアンス又はサーバファーム又はサーババンク内のサーバの単一の又は複数のインスタンスであってもよい。バックエンドシステム130は、サーバ122と直接又は間接的に接続することができる。例えば、バックエンドシステム130は、LDAP(Lightweight Directory Access Protocol)ディレクトリサービス、Kerberosベースの認証、DNS(Domain Name System)ベースの命名及び他のネットワーク情報、並びに幾つかのサーバ間のディレクトリ更新の同期を含む、幾つかのネットワークサービスを提供することができる、Microsoft(登録商標)Active Directoryを含むことができる。バックエンドシステム130は、とりわけ、Oracleバックエンドサーバー、SQLサーバーバックエンド及び/又はDHCP(Dynamic Host Configuration Protocol)サーバを含むこともできる。バックエンドシステム130は、データ、サービス又はその両方の組合せをデータセンタ120に提供することができ、データセンタ120は次にその情報を様々な形式を介してクライアントデバイス102又はブランチオフィス140に提供することができる。
【0022】
図2A−2Cは、本開示の実施形態と一致する例示的なコンピューティングデバイス200のブロック図である。コンピューティングデバイス200は、
図1に示したようなデータセンタ120内のサーバ122とすることができる。
図2Aに示されるように、コンピューティングデバイス200は、一又はそれ以上のセントラルプロセッシングユニット(CPU)221、一又はそれ以上のグラフィックスプロセッシングユニット(GPU)225、システムメモリ222及びグラフィックメモリ226を含むことができる。CPU221はシステムメモリ222からフェッチされた命令に応答しそれを処理する任意の論理回路とすることができる。CPU221は、メモリ(例えばシステムメモリ222)又はキャッシュ(例えばキャッシュ240)に記憶された特定の組の命令を実行することができる単一又は複数のマイクロプロセッサ、フィールドプログラマブルゲートアレイ(FPGA)、又はデジタルシグナルプロセッサ(DSP)とすることができる。CPU221は、また、可変タイプのデータを記憶するための複数のプロセッサレジスタを含むことができる。例えば、これらのレジスタは、データ、命令、浮動小数点値、条件値、及び/又は、システムメモリ222内の位置のアドレスを記憶することができる。CPUレジスタは、命令ポインタ、命令カウンタ及び/又はメモリスタックポインタなど、実行プロセスに関連するデータを記憶するために使用される専用レジスタを含むことができる。システムメモリ222は、フレキシブルディスク、ハードディスク、CD−ROM(Compact Disk Read-Only Memory)、MO(Magneto-Optical)ドライブ、DVD−ROM(Digital Versatile Disk Read-Only Memory)、DVD−RAM(Digital Versatile Disk Random-Access Memory)、フラッシュドライブ及び/又はフラッシュメモリ、プロセッサキャッシュ、メモリレジスタ、又は、半導体メモリなどの有形及び/又は非一時的なコンピュータ可読媒体を含むことができる。システムメモリ222は、データを格納し、任意の格納場所がCPU221によって直接アクセスされることを可能にする一又はそれ以上のメモリチップとすることができる。システムメモリ222は、任意のタイプのRAM(Random Access Memory)又は本明細書で説明するように動作することができる任意の他の利用可能なメモリチップであってもよい。
図2Aに示される例示的な実施形態では、CPU221がシステムインターフェース250を介してシステムメモリ222と通信することができる。GPU225は、ディスプレイデバイス(例えばディスプレイデバイス224)に出力するためのフレームバッファ(例えば
図2Bに示されるフレームバッファ217)に格納された画像の作成を提供及び/又は加速するために、メモリ(例えばグラフィックメモリ226)を操作及び変更することができる任意のタイプの専用回路とすることができる。GPU225は、グラフィカルデータの大きなブロックの処理が並列に実行され得るアルゴリズムに関して、汎用CPU221よりもそれらをより効果的にする高度な並列構造を有し得る。さらに、GPU225の機能を、他の何らかのタイプの専用処理ユニット又はコプロセッサのチップセットに含めることもできる。
【0023】
CPU221は、システムメモリ222及びシステムインターフェース250に接続することができる。CPU221は、システムメモリ222に格納されたプログラミング命令を実行し、システムメモリ222に格納されたデータを演算し、CPU221とGPU225との間の通信をブリッジするシステムインターフェース250を介してGPU225と通信することができる。幾つかの実施形態では、CPU221、GPU225、システムインターフェース250又はそれらの任意の組合せは単一の処理ユニットに統合されることができる。GPU225は、システムメモリ222又はグラフィックメモリ226内のグラフィックデータストアを操作するために、システムメモリ222内に格納された特定の命令セットを実行することができる。例えば、GPU225は、CPU221によって送信された命令を受信し、グラフィックメモリ226に格納されたグラフィックデータをレンダリングするために命令を処理することができる。グラフィックメモリ226は、ローカルメモリ、システムメモリ、オンチップメモリ及びハードディスクを含む、GPU225によってアクセス可能な任意のメモリ空間であってもよい。GPU225は、グラフィックメモリ226に格納されたグラフィックデータをディスプレイデバイス224上に表示することができる。
【0024】
コンピューティングデバイス200は、また、システムインターフェース250を介して通信する、ディスプレイデバイス224と、入力/出力(I/O)コントローラ223を介して接続される入力/出力(I/O)デバイス230(例えば、キーボード、マウス又はポインティングデバイス)とを含むことができる。CPU221が、シリアル通信方式又はポイントツーポイント通信方式などのような、システムインターフェース250を介する以外の方式で、システムメモリ222及び他のデバイスと通信することもできることを理解されたい。同様に、GPU225は、システムインターフェース250以外の方式でグラフィックメモリ226及び他のデバイスと通信することもできる。さらに、I/Oデバイス230は、コンピューティングデバイス200に対して、ストレージ及び/又はインストール媒体を提供することもできる。
【0025】
図2Bは、CPU221がメモリポート203を介してシステムメモリ222と直接通信し、同様にGPU225がグラフィックメモリ226と直接通信する、例示的なコンピューティングデバイス200の実施形態を示す。CPU221は、バックサイドバスと呼ばれることもある2次バスを介してキャッシュ240と通信することができる。幾つかの実施形態では、CPU221がシステムインターフェース250を介してキャッシュ240と通信する。キャッシュ240は、典型的にはシステムメモリ222よりも速い応答時間を有する。
図2Bに示される実施形態のような幾つかの実施形態では、CPU221がI/Oポートを介してI/Oデバイス230と直接通信する。更なる実施形態では、I/Oデバイス230がシステムインターフェース250と外部通信バスとの間のブリッジ260であり得る。外部通信バスには、例えば、USBバス、Apple Desktopバス、RS―232シリアル接続、SCSIバス、FireWireバス、FireWire 800バス、イーサネットバス、AppleTalkバス、ギガビットイーサネットバス、非同期転送モードバス、HIPPIバス、スーパーHIPPIバス、SerialPlusバス、SCl/LAMPバス、FireChannelバス、Thunderbolt(登録商標)バス、又はシリアル接続小型コンピュータシステムインターフェースバスなどがある。
【0026】
図2Bに示されるように、GPU225は、また、グラフィックメモリ226及びディスプレイデバイス224と直接通信することができる。GPU225は、システムインターフェース250を介してCPU221及び他のデバイスと通信することができる。グラフィックメモリ226は、また、フレームバッファ217を含むことができる。フレームバッファ217は、グラフィックデータの完全なフレームを含むグラフィックメモリ226のメモリバッファからディスプレイデバイス(例えばディスプレイデバイス224)を駆動するグラフィック出力デバイス(graphic output device)であり得る。フレームバッファ217は、ディスプレイデバイス224上に表示されるべき最終グラフィックフレームを格納することができる。
【0027】
図2Aに示されるように、コンピューティングデバイス200は、3.5インチのディスク、5.25インチのディスク又はZIPディスクなどのフロッピーディスクを受け取るフロッピーディスクドライブ、CD−ROMドライブ、CD−R/RWドライブ、DVD−ROMドライブ、様々なフォーマットのテープドライブ、USBデバイス、ハードドライブ、フラッシュドライブ、又は任意のクライアントエージェント220又はその一部のようなソフトウェア及びプログラムをインストールするのに適した任意の他のデバイスなど、任意の適切なインストールデバイス216をサポートすることができる。コンピューティングデバイス200は、オペレーティングシステム及び他の関連ソフトウェアを格納し、クライアントエージェント220に関連する任意のプログラムなどのアプリケーションソフトウェアプログラムを格納するための、一又はそれ以上のハードディスクドライブ又は独立した複数のディスクの冗長アレイなどのストレージデバイス228を、さらに備えることができる。任意選択で、任意のインストールデバイス216をストレージデバイス228として使用することもできる。
【0028】
さらに、コンピューティングデバイス200は、標準的な電話回線、LAN又はWANリンク(例えば、802.11、T1、T3、56kb、X.25)、ブロードバンド接続(例えば、ISDN、フレームリレー、ATM)、ワイヤレス接続、又は上記のいずれか若しくはすべての何らかの組み合わせを含むが、これらに限定されない、様々な接続方式を用いてLAN、WAN、MAN又はインターネットに接続するためのネットワークインターフェース218を含むことができる。ネットワークインターフェース218は、内蔵ネットワークアダプタ、ネットワークインターフェースカード、PCMCIAネットワークカード、カードバスネットワークアダプタ、ワイヤレスネットワークアダプタ、USBネットワークアダプタ、モデム、又は、本明細書で説明される通信及び演算を実行することができる任意のタイプのネットワークにコンピューティングデバイス200を接続するのに適した任意の他のデバイスを備えることができる。
【0029】
幾つかの実施形態では、オペレーティングシステムがコンピューティングデバイス200のコンポーネント上で実行される。オペレーティングシステムは、グラフィックスドライバを使用して、グラフィックスシステム(例えば、GPU225、グラフィックメモリ226、フレームバッファ217及びディスプレイデバイス224)と対話することができる。グラフィックスドライバは、仮想化及び非仮想化コンピューティング環境に存在することができる。グラフィックスドライバは、演算を実行し、ディスプレイデバイス224に表示するためにその結果をフレームバッファ217に格納するように、GPU225に命令することができる。幾つかの実施形態では、フレームバッファ217の内容をディスプレイデバイス224に表示する代わりに、グラフィックスドライバは、フレームバッファ217に格納された表示フレームをさらに処理し、フレームバッファ217の内容を、通信可能に結合された(例えばネットワークインターフェース218を介して)コンピューティングデバイス(例えばクライアント102)に転送する。
【0030】
図2Cは、例示的なコンピューティングデバイス200の実施形態を示す。コンピューティングデバイス200は、ストレージ228、I/Oデバイス230、CPU221、システムメモリ222、フレームバッファ217、グラフィックメモリ226を、(
図2A−2Bに示すように構造化することができる)ハードウェア層201の一部として含むことができる。コンピューティングデバイス200は、オペレーティングシステム251を実行することができる。さらに、コンピューティングデバイス200は、アプリケーション260A−Cを実行することができる。アプリケーション260A−Cは、オペレーティングシステム251によって提供される機能を使用して、コンピューティングデバイス200によって提供されるハードウェア層201と対話することができる。
【0031】
オペレーティングシステム251は、デバイスドライバを使用して、ハードウェア層201内のコンポーネントと通信することができる。例えば、オペレーティングシステム251は、ディスクドライバ256を使用してストレージ228と対話し、デバイスドライバ255を使用して様々なI/Oデバイス230と対話し、グラフィックスドライバ253を使用してフレームバッファ217、グラフィックメモリ226及びグラフィックスシステムの他の態様(例えば、
図2A−2Bに示すようなGPU225及びディスプレイデバイス224)と対話することができる。コンピューティングデバイス200は、図示されていない他のハードウェアとの対話を容易にするために、多くの追加のデバイスドライバを含むことができる。
【0032】
さらに、オペレーティングシステム251は、コンピューティングデバイス200を強化することに関連する異なるタスクを実行するように設計されたコンポーネントと対話することができる。エンコーダ270は、オペレーティングシステム251及びフレームバッファ217と通信して、オペレーティングシステム251によって生成された表示フレームをさらに処理することができる。エンコーダ270はリモートコンピューティングデバイス(例えば、クライアントデバイス102)への表示フレームの送信を最適化するための特別な機能を提供することができる。幾つかの実施形態では、エンコーダ270がストレージフットプリントを低減しネットワークを介して表示フレームを送信するためのサイズと品質との間のバランスを提供するように表示フレームをエンコードする。
【0033】
エンコーダ270は、一又はそれ以上のモジュールであり、当該モジュールを、関連する機能の特定の機能を実行する他のコンポーネント(例えば、集積回路の一部)又は(コンピュータ可読媒体に格納される)プログラムの一部と共に使用するように設計されたパッケージ化された機能ハードウェアユニットとすることができる。エンコーダ270の一又はそれ以上のモジュールは、過渡領域ディテクタ271、過渡領域エンコーダ272及びビットマッププロセッサ275を含むことができる。幾つかの実施形態では、これらの構成要素がエンコーダ270内に含まれる代わりに、エンコーダ270に通信可能に結合された別個のモジュールである。過渡領域ディテクタ271は、画面の急速に変化している領域を決定するために、前の表示フレームとメモリ(例えば、システムメモリ222、キャッシュ240又はCPUレジスタ)に格納されたデータとを、表示フレームと比較する一又はそれ以上のモジュールとすることができる。様々な特性は、領域が過渡的であることを示すことができる。過渡領域ディテクタ271は、表示フレームを、過渡領域エンコーダ272に提供される過渡領域と、ビットマッププロセッサ275に提供される非過渡領域とに分割することができる。幾つかの実施形態では、過渡領域ディテクタ271が、以前に識別された過渡領域がもはや過渡的ではなくなったときを検出し、エンコーダに、後続のエンコードのためにその領域をビットマッププロセッサ275に提供させる。
【0034】
ビットマッププロセッサ275は、非過渡領域を処理するための一又はそれ以上のモジュールとすることができる。処理を支援するために、ビットマッププロセッサ275は、ビットマップエンコーダ276及びビットマップキャッシュ278を含むことができる。ビットマッププロセッサ275は、ビットマップキャッシュ278で以前に処理された非過渡領域を得ることができる。ビットマッププロセッサ275は、ビットマップキャッシュ278内に見つからない任意の領域を、追加の処理のためにビットマップエンコーダ276に提供することができる。幾つかの実施形態では、ビットマップエンコーダ276及び/又はビットマップキャッシュ278がビットマッププロセッサ275及び/又はエンコーダ270とは分離されており別個である。表示フレームの全ての領域がエンコードされた後、エンコーダ270は、フレームをリモートデバイス(例えばクライアントデバイス102)に転送するか、又は、エンコードされた表示フレームをコンピューティングシステム200の別のコンポーネントに提供することができる。
【0035】
ビットマップエンコーダ276は、表示フレームの非過渡領域の種々の領域に対する最適な符号化方法を決定するための一又はそれ以上のモジュールであり得る。ビットマップエンコーダ276は、これらの符号化方法を決定するために複数の技術を使用することができる。幾つかの実施形態では例えば、ビットマップエンコーダ276は、表示フレームの領域を、大きな変化又は小さな変化を有するものとして分類する。これらの実施形態において、小さな変化を有する領域は不可逆圧縮アルゴリズム(例えばJPEG又は圧縮されたJPEGを保持するTIFFコンテナ)を用いて符号化され得る。さらに、大きな変化を有する領域は、品質を保存するために、可逆エンコーディングアルゴリズム(例えば、RLE、ピクセル画像データ当たり8ビットのGIF、PNG又はPackBitsを保持するTIFFコンテナ)を使用して符号化することができる。
【0036】
本開示と一致する実施形態は、データの可逆エンコーディングを改善することに関する。エンコードされたデータは、それぞれが複数のバイトによって表される何百万ものピクセルを含むことができる。したがって、圧縮における小さな利得でさえも、送信されなければならないデータ量において巨大な節約をもたらすことができる。さらに、本明細書で説明されるテクノロジー及び技術は、コンピューティングリソース要件の最小限又は無視できる増加で、効率的な可逆エンコーディングを提供することができる。
【0037】
図3は、本開示の実施形態と一致する、RLE及び単一ピクセルキャッシュを使用するピクセルシーケンスの可逆エンコーディングの例示的な方法のフローチャートである。例示的な方法は、例えば、ビットマップエンコーダ276によって実行され得る。図示された手順は、ステップの順序を変更し、ステップを削除し、又は追加のステップをさらに含むように変更できることが容易に理解されよう。
【0038】
最初のステップ300の後、エンコーダ(例えばビットマップエンコーダ276)は、可逆エンコーディングのためのピクセルシーケンスを取得することができる(ステップ305)。幾つかの実施形態では、ピクセルシーケンスが、ビットマップエンコーダ276によって可逆エンコーディングのために識別された表示フレームの非過渡領域を含むことができる。幾つかの実施形態では、表示フレーム内の各ピクセルが、各1バイトのデータがピクセルの赤(R)成分、緑(G)成分及び青(B)成分のためのデータである3バイトのデータを使用してエンコードされ得る。エンコーダは、ピクセルシーケンスの可逆エンコーディングを提供することができる。例えば、エンコーダは、文字列「ABAAAAAAACCCCDB」として表される15個のピクセル(一例を提供するために、各文字は一意のピクセルを表し、繰り返される文字は正確に同じ3バイト値を有するピクセルを表す)を、15個のピクセルの各々に対して3バイトのデータを用いた45バイトのデータを使用して、処理することができる。
【0039】
幾つかの実施形態において、エンコーダは、ピクセルシーケンスが、全体が繰り返しピクセルからなる任意のサブシーケンスを含むかどうかを決定することができる(ステップ310)。全体が繰り返しピクセルからなる任意のサブシーケンスは、RLEを用いて符号化することができる(ステップ315)。RLEは、ランレングスを使用して、文字列「ABAAAAAAACCCCDB」として表されるピクセルシーケンスを「ABAY
6CY
3DB」としてエンコードすることができる。ここで、「Y
6」及び「Y
3」はそれぞれ前のピクセルの繰り返し発生数を表示する1バイトのデータを表す。したがって、この実施形態では、RLEが45バイトの生ピクセルデータと比較して、20バイトのデータ(それぞれ3バイトの6ピクセル及びランレングスを表す「Y
6」、「Y
3」の2バイトのデータ)を使用して、この例示的なピクセルシーケンスの出力をエンコードすることによって、可逆エンコーディングを提供することができる。
【0040】
さらに、エンコーダ(例えばビットマップエンコーダ276)は、単一ピクセルキャッシュ構造を使用して、ステップ315によって処理されない任意の残りのピクセルをエンコードすることができる。単一ピクセルキャッシュ構造は、繰り返しピクセルのいかなるランも示さないシーケンスに対して効率的なエンコーディングを提供することができる。例えば、上述したような基本的なRLEは、文字列「ABCDABACABDE」として表されるシーケンスのような繰り返しを何ら有さないピクセルシーケンスに対して、何らの圧縮利益を与えることができず、36バイトのデータ(各々3バイトの12ピクセル)を使用してこの例示的なシーケンスをエンコードするだろう。単一ピクセルキャッシュ構造を使用するエンコーダ(例えばビットマップエンコーダ276)は、各ピクセルについてハッシュ値を計算することができる(ステップ320)。幾つかの実施形態では、ハッシュアルゴリズムが、0から254までの間のハッシュ値を生成するために、所定の値とのXOR演算であり得る。幾つかの実施形態は、ハッシュ値を生成するために他のハッシュアルゴリズムを使用することができる。異なるハッシュアルゴリズムは、コスト、衝突の確率(例えば、同じハッシュ値が2つの異なるピクセルに対して生成される場合)、及び、計算リソースのバランスをとるという要求に基づいて選択されることができる。計算されたハッシュ値は、
図4を参照して説明するように、単一ピクセルキャッシュへのルックアップインデックスとして使用することができる(ステップ325)。
【0041】
図4は、本開示の実施形態と一致する、例示的な単一ピクセルキャッシュデータ構造401を示す。単一ピクセルキャッシュ401は、単一ピクセルを表すデータを、それらの格納されたピクセルの参照記号とともに格納できる任意のデータストレージコンポーネント(例えば、ストレージ228、システムメモリ222、キャッシュ240及び/又はCPUレジスタ)であり得る。単一ピクセルキャッシュ401は、単一ピクセルに対して計算されたハッシュ値のインデックス405と、各ピクセルを表す3バイトデータ410とからなるデータ構造を含むことができる。任意のハッシュ値が与えられると、単一ピクセルキャッシュ401は、ハッシュ値に等しいインデックス405を見つけ、特定のピクセルを表す3バイトのデータ410を取り出すことができる。例えば、
図4を参照すると、「129」のハッシュ値が与えられると、単一ピクセルキャッシュは、ピクセル「C」を表す3バイトのデータを取り出すことができる。
【0042】
図3を再び参照すると、エンコーダは、現在のピクセルを、計算されたハッシュ値によってインデックス付けされた単一ピクセルキャッシュの位置に格納されたピクセルと比較することができる(ステップ330)。ステップ330における比較が厳密な一致を生じない場合、エンコーダは、キャッシュミスとしてピクセルをエンコードすることができる(ステップ340)。例えば、文字列「ABCDABACABDE」として表されるピクセルシーケンスについて、ピクセルのいずれも単一ピクセルキャッシュに既に存在しないと仮定すると、最初の4つのピクセル「A」、「B」、「C」及び「D」を、キャッシュミスとしてエンコードすることができる。エンコーダは、ピクセルデータを表す3バイトとキャッシュミスであることをシグナルする1バイトのデータとを使用してキャッシュミスをエンコードできる。幾つかの実施形態では、ハッシュ値のインデックス255に対応する単一ピクセルキャッシュの格納場所を、例えば、ハッシュ値255に対応する1バイトのデータを表す記号「X
255」を使用して単一ピクセルキャッシュミスを示すために(
図4に示すように)予約することができ、単一ピクセル「A」のキャッシュミスを、合計4バイトを使用してエンコードすることができ、「X
255A」として表すことができる。例示的なシーケンス「ABCDABACABDE」のピクセル「A」、「B」、「C」及び「D」の最初の4つのキャッシュミスを、「X
255AX
255BX
255CX
255D」として合計16バイト使用してエンコードできる。
【0043】
さらに、エンコーダ(例えばビットマップエンコーダ276)は、キャッシュミスに対応するピクセルデータで単一ピクセルキャッシュ401を更新することができる(ステップ345)。例えば、「A」として表されるピクセルについて計算された「2」のハッシュ値と、単一ピクセル「A」についてステップ330で検出されたキャッシュミスとについて、単一ピクセルキャッシュ401内のハッシュ値のインデックス「2」に対応する格納場所を、「A」を表すデータで更新することができる。
【0044】
ステップ330における比較が厳密な一致をもたらす場合、エンコーダは、そのピクセルをキャッシュヒットとしてエンコードすることができる(ステップ335)。エンコーダは、エンコードされたデータの出力において、3バイトの生ピクセルデータを省き、計算されたハッシュ値をエンコードデータ出力に含めることのみによってキャッシュヒットをシグナルすることができる。文字列「ABCDABACABDE」として表される例示的なピクセルシーケンスについて、最初の4つのピクセル「ABCD」がキャッシュミス「X
255AX
255BX
255CX
255D」としてエンコードされ、次の7つのピクセル「ABACABD」(キャッシュヒット)はそれらのハッシュ値のみを使用してエンコードされ、文字列「X
2X
126X
2X
129X
2X
126X
253」として表され得る。ここで「X
2」、「X
126」、「X
129」及び「X
253」は、それぞれ、単一ピクセルキャッシュ401内のピクセル「A」、「B」、「C」、「D」の単一バイトハッシュ値インデックス位置を表す。したがって、7つのピクセルに対応する21バイトのデータを、7バイトのデータだけを使用してエンコードできる。キャッシュヒットをシグナルするために1バイトのデータと、単一ピクセルキャッシュ401内の格納場所を指定するためのデータの追加バイトとを使用する代わりに、1バイトのハッシュ値データをこれらの機能の両方を実行するために使用できるので、この例示的な方法は圧縮性能を改善することができる。
【0045】
ステップ320でハッシュ値を計算するために使用されるハッシュアルゴリズムは、衝突を最小限に抑えるように選択されることができるが、実際に起こる衝突はキャッシュミスと同様に処理されることができる。文字列「ABCDABACABDE」として表される例示的なピクセルのシーケンスについて、最後のピクセル(「E」によって表される)が「A」によって表される前のピクセルと同じハッシュ値(「X
2」によって表される)を取得する場合、エンコーダは、「E」を「X
255E」としてエンコードすることができる(キャッシュミスについてのステップ340と同様)。さらに、エンコーダは、ハッシュ値「X
2」に対応する単一ピクセルキャッシュ位置を、「A」を表すデータから「E」を表すデータに更新することができる(キャッシュミスの場合のステップ345と同様)。
【0046】
エンコーダ(例えばビットマップエンコーダ276)は全ての利用可能なピクセルについてステップ320−345を繰り返し、送信のためにエンコードされたピクセルデータをアセンブルすることができる。したがって、文字列「ABCDABACABDE」として表される12個の例示的なピクセルのシーケンスは、文字列「X
255AX
255BX
255CX
255DX
2X
126X
2X
129X
2X
126X
253X
255E」としてデータ出力においてエンコードされ得る。これは、単一ピクセルキャッシュなしのRLEでの36バイトのデータ(それぞれ3バイトの12ピクセル)と比較して、合計27バイトのデータ(それぞれ4バイトの4つのキャッシュミス、それぞれ1バイトの7つのキャッシュヒット、それぞれ4バイトの1つの衝突)を利用することによって、効率的な圧縮を提供することができる。
【0047】
図5は、本開示の実施形態と一致する、RLE及びマルチピクセルキャッシュ構造を使用してピクセルシーケンスを可逆エンコードする例示的な方法のフローチャートである。例示的な方法は、例えば、ビットマップエンコーダ276によって実行されることができる。
図5を参照すると、図示された手順を、ステップの順序を変更し、ステップを削除し、又は追加のステップをさらに含むように変更できることが容易に理解されよう。
【0048】
最初のステップ500の後、エンコーダ(例えばビットマップエンコーダ276)は、可逆エンコーディングのためのピクセルシーケンスを取得することができる(ステップ505)。幾つかの実施形態では、ピクセルシーケンスがビットマップエンコーダ276によって可逆エンコーディングのために識別された表示フレームの非過渡領域を含むことができる。幾つかの実施形態において、エンコーダは、ピクセルシーケンスが全体が繰り返しピクセルからなる任意のサブシーケンスを含むかどうかを決定することができる(ステップ510)。全体が繰り返しピクセルからなる任意のサブシーケンスを、RLE(上記
図3を参照して説明したものと同様)を用いてエンコードすることができる(ステップ515)。
【0049】
さらに、エンコーダ(例えばビットマップエンコーダ276)は、マルチピクセルキャッシュ構造を使用して、ステップ515によって処理されない任意の残りのピクセルのサブシーケンスをエンコードすることができる。ハッシュアルゴリズムを、各残りのサブシーケンスに対するハッシュ値を計算するために使用することができる(ステップ520)。サブシーケンス全体に対して単一のハッシュ値が計算されることができる。幾つかの実施形態では、0から255までの間のハッシュ値を生成するために、ハッシュアルゴリズムを、所定の値とのXOR演算とすることができる。幾つかの実施形態は、ハッシュ値を生成するために他のハッシュアルゴリズムを使用することができる。ハッシュアルゴリズムは、コスト、衝突の確率(例えば、同じ長さの2つの異なるサブシーケンスに対して生成される同じハッシュ値)、及び、計算ソースのバランスをとるように選択され得る。計算されたハッシュ値を、
図6を参照して説明するように、マルチピクセルキャッシュへのルックアップインデックスとして使用することができる(ステップ525)。
【0050】
図6は、本開示の実施形態と一致する、例示的なマルチピクセルキャッシュデータ構造600を示す。マルチピクセルキャッシュ600を、格納されたデータへの参照記号と共に単一又は複数のピクセルを含むサブシーケンスを表すデータの格納を可能にする任意のデータストレージコンポーネント(例えばストレージ228、システムメモリ222、キャッシュ240及び/又はCPUレジスタ)とすることができる。マルチピクセルキャッシュ600は、サブキャッシュを含むことができる。例えば、マルチピクセルキャッシュは14個のサブキャッシュを備えることができ、第1のサブキャッシュ605は単一ピクセルのサブシーケンスを表すデータを格納し、第2のサブキャッシュ610は2ピクセルのサブシーケンスを表すデータを格納し、同様の構造は、14ピクセルのサブシーケンスを表すデータを格納する第14のサブキャッシュ670まで拡張され得る。
【0051】
マルチピクセルキャッシュ600は、14より少ないサブキャッシュ又は14より多いサブキャッシュを含むことができる。サブキャッシュの数は、マルチピクセルキャッシュ600が格納されるメモリの物理的制限によってのみ制限され、マルチピクセルキャッシュ600が利用できるサブキャッシュの数には理論的な制限はない。さらに、幾つかの実施形態では、マルチピクセルキャッシュヒットの確率が、サブシーケンスのピクセル長が増加することにつれて急速に減少する可能性があり、したがって、サブキャッシュの数を増加することは必ずしも性能の線形的な改善を提供するとは限らない。使用されるサブキャッシュの最適数は、実験データ、解析、統計解析、ユーザによって行われる任意の選択、又は、幾つかのサブキャッシュを選択する任意の他の方法に基づくことができる。さらに、サブキャッシュの数を、性能とシステム要求とのバランスをとるために、経時的に変更することができる。
【0052】
マルチピクセルサブキャッシュの各々は、(単一ピクセル又はマルチピクセルサブシーケンスから計算される)ハッシュ値インデックス(例えば、606、611、671)と、単一ピクセル又はマルチピクセルサブシーケンスを表す対応するデータ(例えば、607、612、672)とからなるデータ構造を含むことができる。マルチピクセルキャッシュ内の単一ピクセルサブキャッシュ605は、単一ピクセルについて計算されたハッシュ値のインデックス606を含み、単一ピクセルを表す3バイトのデータ607を格納する、
図4に関連して説明した単一ピクセルキャッシュ構造と構造的に等価であり得る。
【0053】
エンコーダは、ピクセルサブシーケンスの長さと、マルチピクセルキャッシュへのインデックスとして計算されたハッシュ値とを、使用することができる(ステップ525)。例えば、2ピクセルサブシーケンスについて計算された「126」のハッシュ値について、
図6に例示されるマルチピクセルキャッシュ600は、2ピクセルサブキャッシュ610内の「126」とインデックス付けされた位置から、文字列「LG」として表される2つのピクセルに対応するデータを読み出すことができる。しかしながら、14ピクセルサブシーケンスに対して計算された同じハッシュ値「126」について、
図6に例示されたマルチピクセルキャッシュ600は、14ピクセルサブキャッシュ670内の「126」とインデックス付けされた位置から、文字列「LBVCALKFRUTYNF」として表される14ピクセルに対応するデータを読み出すことができる。
【0054】
図5に戻って参照すると、エンコーダは、現在のサブシーケンスを、参照されたマルチピクセルキャッシュ位置に格納されたサブシーケンスと比較することができる(ステップ530)。ステップ530における比較が厳密な一致を生じない場合、エンコーダは、単一ピクセルサブキャッシュ605を使用して、サブシーケンスをエンコードすることができる(ステップ545)。文字列「ABCDEEEEEEEEEEABCDE」として表される例示的なピクセルのシーケンスは、3つのサブシーケンス、すなわち「ABCDE」、「EEEEEEEEE」及び「ABCDE」に分割することができる。中央のシーケンス「EEEEEEEEE」は前のピクセル「E」の9回の繰り返しとしてRLEを使用してエンコードされることができ、「Y
9」として表されることができる。「Y
9」は前のピクセルの9回の繰り返しを示す1バイトのデータを表す。最初のサブシーケンス「ABCDE」がマルチピクセルキャッシュ600にまだ存在しないと仮定すると、「ABCDE」はマルチピクセルキャッシュミスであり、単一ピクセルサブキャッシュ605を使用してエンコードされることができる(ステップ545)。単一ピクセルサブキャッシュ605にすでに存在する単一ピクセルがないと仮定すると、サブシーケンス「ABCDE」は5つの単一ピクセルサブキャッシュミス「X
255AX
255BX
255CX
255DX
255E」としてエンコードされることができ、記号「X
255」は、各単一ピクセルサブキャッシュミス(
図3を参照して説明した単一ピクセルキャッシュミスと同様)をシグナルするために使用される1バイトのデータを表す。さらに、エンコーダは、単一ピクセル「A」、「B」、「C」、「D」及び「E」に対応するデータで単一ピクセルサブキャッシュ605を更新し(
図3を参照して説明した単一ピクセルキャッシュの更新と同様)、サブシーケンス全体「ABCDE」に対応するデータで5ピクセルサブキャッシュを更新することもできる(ステップ550)。
【0055】
ステップ530における比較が厳密な一致を生じる場合、エンコーダは、マルチピクセルキャッシュヒットとしてサブシーケンスをエンコードすることができる(ステップ535)。幾つかの実施形態では、単一ピクセルサブキャッシュ605内の冒頭の位置を、マルチピクセルキャッシュヒットをシグナルするために予約できる。例えば、14個のサブキャッシュ605―670を備えるマルチピクセルキャッシュ構造では、単一ピクセルサブキャッシュ605内の冒頭の位置0−12を、特定のマルチピクセルサブキャッシュヒットをシグナルするために予約できる。「0」とインデックス付けされた位置を2ピクセルサブキャッシュヒットのために予約でき、「1」とインデックス付けされた位置を3ピクセルサブキャッシュヒットのために予約でき、同様の論理は、14ピクセルサブキャッシュヒットのために予約された「12」とインデックス付けされた位置まで拡張される。したがって、上述の例示的なシーケンス「ABCDEEEEEEEEEEABCDE」内に含まれる第3のサブシーケンス「ABCDE」のマルチピクセルキャッシュヒットは、5ピクセルサブキャッシュを参照するための「X
3」によって表される1バイトのデータと、5ピクセルサブキャッシュ内の格納位置のハッシュ値インデックスについての「X
5n」によって表される1バイトのデータとでなる文字列「X
3X
5n」として表される2バイトのデータのみを使用してエンコードされることができる。したがって、ストリング「ABCDEEEEEEEEEEABCDE」として表される例示的なシーケンスは、出力のために「X
255AX
255BX
255CX
255DX
255EY
9X
3X
5n」としてエンコードされることができる。
【0056】
さらに、幾つかの実施形態において、単一ピクセルサブキャッシュ605は、単一ピクセルサブキャッシュ605内に欠落しているが、マルチピクセルサブシーケンス内に含まれる任意の単一ピクセルで更新されることができる(ステップ540)。これは、単一ピクセルサブキャッシュをもっとも最近エンコードされた単一ピクセルで更新された状態に保つことができる。例えば、文字列「ABCDE」として表されるサブシーケンスに対するマルチピクセルキャッシュヒットの場合、単一ピクセル「A」、「B」、「C」、「D」又は「E」の何れかが単一ピクセルサブキャッシュにまだ存在しない場合、単一ピクセルサブキャッシュ605を更新することができる。
【0057】
幾つかの実施形態では、エンコーダ(例えばビットマップエンコーダ276)はマルチピクセルキャッシュミスを特にシグナルしないことによって、1バイトのデータを節約することができる。これは、上述のようにマルチピクセルキャッシュヒットをシグナルするために単一ピクセルサブキャッシュ605内の冒頭位置を予約することによって実施することができる。例えば、
図6に示され、14個のサブキャッシュ605−670を含むマルチピクセルキャッシュ600の場合、単一ピクセルサブキャッシュ605内の冒頭位置0−12を、特定のマルチピクセルキャッシュヒットをシグナルするために予約することができ、12より大きい値がマルチピクセルキャッシュミスのシグナルを示すことができる。マルチピクセルキャッシュミスをシグナルするために追加のバイトは必要ない。さらに、単一ピクセルハッシュアルゴリズムを、単一ピクセルのキャッシュのために、これらの位置を使用することを除外するために、13から254の間(双方を含む)の値を生成するように修正することができる。
【0058】
マルチピクセルサブキャッシュの何れかによって提供される最大値より長いピクセルサブシーケンスは、マルチピクセルキャッシュミスのシナリオと同様に、単一ピクセルサブキャッシュを使用してエンコードされることができる。14個のサブキャッシュを有するマルチピクセルキャッシュの実施形態の場合、14個のピクセルよりも長い任意のサブシーケンスは、
図3に例示される単一ピクセル方式を使用してエンコードされることができる。幾つかの実施形態では、14ピクセルよりも長いサブシーケンスが、最大サブシーケンス値よりも小さい複数のサブシーケンスに分割されることができ、次いで、各新しいサブシーケンスはマルチピクセルキャッシュを使用して処理されることができる。
【0059】
RLE及びマルチピクセルキャッシュ構造を使用する、ピクセルシーケンスの可逆エンコーディングの例示的な方法は、RLEのみを使用する、又は、
図3に関連して説明したRLE及び単一ピクセルキャッシュを使用する例示的な方法と比較して、より多くの圧縮による利益を提供できる。例えば、これらの圧縮方法のいずれをも使用しない可逆エンコーダは、57バイトのデータ(各3バイトのデータで19ピクセル)を使用して文字列「ABCDEEEEEEEEEEABCDE」として表されるピクセルシーケンスをエンコードすることができる。RLEのみを使用する可逆エンコーダは、31バイトのデータ(それぞれ3バイトのデータで10ピクセル、及び繰り返しピクセル「E」のランレングスを表す1バイトのデータ「Y
9」)を使用して、この例示的なシーケンスを「ABCDEY
9ABCDE」としてエンコードできる。
図3で説明した例示的な方法(RLE及び単一ピクセルキャッシュ)を使用する可逆エンコーダは、26バイトのデータ(それぞれ4バイトのデータで5つの単一ピクセルキャッシュミス、繰り返しピクセル「E」のランレングスを表す1バイトのデータ、及び、それぞれ1バイトのデータで5つの単一ピクセルキャッシュヒット)を使用して、この例示的なシーケンスを「X
255AX
255BX
255CX
255DX
255EY
9X
2X
126X
129X
253X
201」としてエンコードできる。
図5に示す例示的な方式(RLE及びマルチピクセルキャッシュ)を使用する可逆エンコーダは、23バイトのデータ(それぞれ4バイトのデータでの5つの単一ピクセルキャッシュミスとしてエンコードされた冒頭のマルチピクセルキャッシュミス、繰り返されるピクセル「E」のランレングスを表す1バイトのデータ、及び、5ピクセルサブキャッシュヒットを表す2バイトのデータ)を使用して、この例示的なシーケンスを「X
255AX
255BX
255CX
255DX
255EY
9X
3X
5n」として符号化することができる。したがって、マルチピクセルキャッシュを使用するエンコーダは、単一ピクセルキャッシュを使用するエンコーダ又はキャッシュ構造を使用しないエンコーダと比較して優れた可逆圧縮による利益を提供できる。
【0060】
エンコードされたデータを、リモートデバイス(例えばクライアントデバイス102)又はコンピューティングシステム200の別のコンポーネントに転送することができる。リモートデバイス内又はコンピューティングシステム200内のデコーダを、エンコードされたデータストリームをデコードするために使用されることができる。デコーダは、
図6に示すようなマルチピクセルキャッシュ構造を利用することができる。
【0061】
図7は、本開示の実施形態と一致する、エンコードされたデータをデコードするための例示的な方法のフローチャートである。
図7を参照すると、図示された手順を、ステップの順序を変更し、ステップを削除し、又は追加のステップをさらに含むように変更できることが容易に理解されよう。最初のステップ700の後、デコーダは、デコーディングのためにエンコードされたデータストリームを取得することができる(ステップ705)。例えば、デコーダは、
図5に関して説明したような例示的な方法を使用して、文字列「ABCDEEEEEEEEEEABCDE」として表されるピクセルシーケンスを「X
255AX
255BX
255CX
255DX
255EY
9X
3X
5n」としてエンコードする可逆エンコーダ(例えばビットマップエンコーダ276)から送信されたエンコードされたデータを受信できる。さらに、デコーダは、自身のマルチピクセルキャッシュを使用することができる。
【0062】
デコーダは、データが繰り返しピクセルのランを含むかどうかを判断することができる(ステップ710)。デコーダは、エンコードされたランレングスデータを使用して、繰り返しピクセルの任意のランをデコードすることができる(ステップ715)。例示的なエンコードされたデータ「X
255AX
255BX
255CX
255DX
255EY
9X
3X
5n」に対して、「Y
9」によって表される1バイトのデータは、その前のピクセルの9つの繰り返し発生としてデコードされ、「EEEEEEEEE」として表される。
【0063】
デコーダは、また、残りのデータが任意のマルチピクセルキャッシュヒット又は任意のマルチピクセルキャッシュミスをシグナルしているかどうかを判断することができる(ステップ720)。マルチピクセルキャッシュミスの場合、デコーダは、単一ピクセルサブキャッシュを使用してデータをデコードすることができる(ステップ735)。すべてのマルチピクセルキャッシュミスに対して、デコーダは、単一ピクセルサブキャッシュヒットがあるかどうかを決定することができる(ステップ740)。任意の単一ピクセルサブキャッシュヒットに対して、デコーダは、単一ピクセルサブキャッシュにすでに格納されているデータを使用してデコードすることができる(ステップ745)。任意の単一ピクセルサブキャッシュミスに対して、デコーダはデータストリーム内の生ピクセルデータを使用することができる(ステップ750)。例示的な符号化データ「X
255AX
255BX
255CX
255DX
255EY
9X
3X
5n」の場合、「X
255」によって表される1バイトのデータを、マルチピクセルキャッシュミス及び単一ピクセルキャッシュミスとしてデコードすることができ、「X
255AX
255BX
255CX
255DX
255E」として表される文字列データをデコードでき、「ABCDE」として表すことができる。
【0064】
さらに、デコーダは、5つの単一ピクセルキャッシュミス「A」、「B」、「C」、「D」、「E」で、その単一ピクセルサブキャッシュを更新することができる(ステップ755)。デコーダは、また、「ABCDE」として表される5ピクセルの文字列のマルチピクセルキャッシュミスで、マルチピクセルキャッシュ内の5ピクセルサブキャッシュを更新することもできる(ステップ760)。データがデコードされるときにそれ自体の単一ピクセルキャッシュ及びマルチピクセルキャッシュを更新することによって、デコーダは、キャッシュデータが、デコードされている所定の値がエンコーダによって処理されたときにエンコーダに格納されたデータと一致すること、及び、デコーダによって処理された将来のキャッシュヒットが適切な値を返すことを保証することができる。
【0065】
ステップ720で検出されたマルチピクセルキャッシュヒットに対して、デコーダは、マルチピクセルキャッシュにすでに格納されているデータを使用してデコードすることができる(ステップ725)。例示的なエンコードされたデータ「X
255AX
255BX
255CX
255DX
255EY
9X
3X
5n」の場合、「X
3」によって表される1バイトのデータは、5ピクセルサブキャッシュのマルチピクセルキャッシュヒットとして復号され、「X
5n」によって表される1バイトのデータは、5ピクセルサブシーケンスを表すデータの格納位置インデックスとして復号デコードされることができる。デコーダは、そのマルチピクセルキャッシュからデータを読み出し、2バイトのエンコードされたデータ「X
3X
5n」をデコードし、それを「ABCDE」として表すことができる。デコーダは、ステップ705で得られた全てのデータがデコードされるまで、これらのステップを繰り返すことができる。エンコーダ(例えばビットマップエンコーダ276)から受信され、「X
255AX
255BX
255CX
255DX
255EY
9X
3X
5n」として表されるエンコードされたデータの例示的なシーケンスは、デコードされ、文字列「ABCDEEEEEEEEEEABCDE」として表されることができる。
【0066】
幾つかの実施形態では、デコーダ内の冒頭の単一ピクセルサブキャッシュ位置を、エンコーダ内の同様の予約にマッチするために、マルチピクセルキャッシュヒットをシグナルするために予約することができる。さらに、幾つかの実施形態では、デコーダがエンコーダをマッチングし、単一ピクセルサブキャッシュを、単一ピクセルサブキャッシュにおいて欠落しているマルチピクセルキャッシュヒット内に含まれる任意のピクセルで更新することができる(ステップ730)。
【0067】
前述の明細書では、幾つかの実施形態が実装ごとに変わり得る多数の具体的な詳細を参照して説明された。記載された実施形態の特定の適応及び修正がなされ得る。他の実施形態は、本明細書の考察及び本明細書に開示される本発明の実施から当業者に明らかであり得る。明細書及び実施例は、単に例示として考えられることが意図される。また、図に示されるステップのシーケンスは例示目的のためだけのものであり、任意の特定のステップのシーケンスに限定されることを意図しないことも意図される。したがって、当業者は、これらのステップが同じ方法を実施しながら異なる順序で実行され得ることを理解することができる。