JP2013541295A - 画像圧縮のためのエントロピーコーダー - Google Patents

画像圧縮のためのエントロピーコーダー Download PDF

Info

Publication number
JP2013541295A
JP2013541295A JP2013531627A JP2013531627A JP2013541295A JP 2013541295 A JP2013541295 A JP 2013541295A JP 2013531627 A JP2013531627 A JP 2013531627A JP 2013531627 A JP2013531627 A JP 2013531627A JP 2013541295 A JP2013541295 A JP 2013541295A
Authority
JP
Japan
Prior art keywords
encoded
data
graphic data
computer
client
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2013531627A
Other languages
English (en)
Other versions
JP2013541295A5 (ja
Inventor
ワイ.アブド ナディム
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2013541295A publication Critical patent/JP2013541295A/ja
Publication of JP2013541295A5 publication Critical patent/JP2013541295A5/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/93Run-length coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/41Bandwidth or redundancy reduction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/13Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/164Feedback from the receiver or from the transmission channel
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/156Availability of hardware or computational resources, e.g. encoding based on power-saving criteria
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/63Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using sub-band based transform, e.g. wavelets

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Information Transfer Between Computers (AREA)
  • Compression Of Band Width Or Redundancy In Fax (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

本開示の例示の実施形態では、リアルタイム画像圧縮において使用するための高速のエントロピー符号器/復号器を提供する。リモートコンピュータ装置への送信のためにグラフィックデータを処理する方法は、描画されるクライアント画面を表現するグラフィックデータを受け取るステップ、送信に利用可能な帯域幅を示す情報を受け取るステップ、この情報に基づき、利用可能な帯域幅が所定の閾値を満たすと判定するステップ、および固定ビットサイズの符号化ストリームを使用してグラフィックデータをエントロピー符号化するステップであって、連続するゼロが固定ビットサイズの可変個のユニットに符号化され、リテラル値が、直近に使用されたリテラル値のキャッシュ内のエントリまたは固定ビットサイズの可変個のユニットのうちの1つを使用して符号化されるステップを含んでよい。

Description

本願発明は、画像データの処理に関する。
大衆向けの形態のネットワーキングで増加しているものの1つに、一般的にはリモートプレゼンテーションシステムと呼ばれるものがあり、このシステムではRDP(Remote Desktop Protocol)およびICA(Independent Computing Architecture)などのプロトコルを使用して、サーバ上で実行中のデスクトップや他のアプリケーションをリモートクライアントと共有することができる。そのようなコンピュータシステムでは、典型的にはネットワーク接続(例えば、インターネット)を介して、キーボード押下やマウスのクリックまたは選択をクライアントからサーバに送信し、反対方向に画面の更新を中継して返す。このように、実際には、サーバ側で見られるのと同様なデスクトップまたはアプリケーションのスクリーンショットがクライアント装置に送られるだけで、ユーザは自分のマシンが完全にローカルに動作しているかのような経験をする。
リモートデスクトップ環境においては、クライアントに送信されるグラフィックを表すデータが、典型的には、サーバにより圧縮され、ネットワークを介してサーバからクライアントに送信され、クライアントにより圧縮解除されてローカルのユーザのディスプレイ上に表示される。データの符号化の処理は、典型的にはデータを圧縮および圧縮解除するためにかなりのプロセッサ計算サイクルを必要とする。そのような処理の必要性により、サーバからクライアントに対して符号化および復号化のレイテンシに直接的な影響を与え、リモートのユーザの経験に否定的な影響を与える可能性がある。
米国特許第7,460,725号明細書 米国特許出願第12/399,302号明細書
リモートプレゼンテーションシステムの1つの問題点は、そのようなシステムはプロセッサのパフォーマンスを犠牲にしてデータの圧縮を優先させる傾向があるということである。多くのシステムでは、帯域幅(bandwidth)は制限される可能性が高いということを前提としており、従って高レベルのデータ圧縮を実現するためにプロセッサのパフォーマンスを犠牲にし、従って制限された帯域幅のデータリンクを介して送信される必要があるデータ量を減少させる。しかし、今日、多くのリモートプレゼンテーションのクライアントは、低速のプロセッサを使用するが十分に広帯域な帯域幅にアクセスすることができる、よりローエンドの装置である。そのような場合、全体のパフォーマンスおよびユーザ経験は、たとえ圧縮が低下することになっても、より簡素な圧縮器(コンプレッサー)や計算をあまり必要としない圧縮技術を使用することにより、改善することができる。
種々の実施形態において、リアルタイムの画像圧縮において使用するための高速のエントロピーコーダー/デコーダーに関する方法およびシステムを開示する。例えば、リモートコンピュータ装置への送信のためにグラフィックデータを処理する方法は、描画されるクライアント画面を表現するグラフィックデータを受け取るステップ、送信のために利用可能な帯域幅を示す情報を受け取るステップ、この情報に基づき、利用可能な帯域幅が所定の閾値を満たすと判定するステップ、および固定ビットサイズの符号化ストリームを使用してグラフィックデータをエントロピー符号化するステップであって、連続するゼロが固定ビットサイズの可変個のユニットに符号化され、リテラル値が、直近に使用されたリテラル値のキャッシュ内のエントリまたは固定ビットサイズの可変個のユニットのうちの1つを使用して符号化されるステップを含んでよい。
本明細書に従う、リモートコンピュータ装置への送信のためのグラフィックデータに関するシステム、方法、およびコンピュータ可読媒体について、添付の図面を参照してさらに記載する。
本明細書に従う、仮想的な環境における観点を改めるためのシステム、方法、およびコンピュータ可読媒体について、添付の図面を参照してさらに記載する。
本開示の態様を実装可能な一例のコンピュータシステムを示す図である。 本開示の態様を実装可能な一例のコンピュータシステムを示す図である。 本開示の態様を実施するための動作環境を示す図である。 本開示の態様を実施するための動作環境を示す図である。 リモートデスクトップサービスを実施するための電気回路を含むコンピュータシステムを示す図である。 リモートサービスを実施するための電気回路を含むコンピュータシステムを示す図である。 復号化プロセスの一例を示す図である。 符号化プロセスの一例を示す図である。 クライアントコンピュータへの送信のためにグラフィックデータを処理する動作手順の一例を示す図である。 クライアントコンピュータへの送信のためにグラフィックデータを処理する動作手順の一例を示す図である。 クライアントコンピュータへの送信のためにグラフィックデータを処理する一例のシステムを示す図である。
概括的なコンピュータ環境
本開示の種々の実施形態が完全に理解されるよう、特定の具体的な詳細を以下の記載および図面において記述する。本開示の種々の実施形態を無用に曖昧にすることを避けるために、コンピュータおよびソフトウェアの技術に関連することが多い特定の周知の詳細は、以下の開示においては記述しない。さらに、以下に記載する1つまたは複数の詳細を必要とすることなく本開示の他の実施形態を実践可能であることを、当業者は理解するであろう。最後に、種々の方法を以下の開示においてステップおよび順序を参照して記載するが、そのような記載は本開示の実施形態の明確な実装を提供するためのものであり、そのステップおよびステップの順序が本開示を実践するために必要とされるものであると解釈されるべきではない。
本明細書に記載する種々の技術を、ハードウェアもしくはソフトウェアに関連して、または適切な場合にはその両方の組み合わせに関連して実装して良いことは、理解されるべきである。従って、本開示の方法および装置、または特定の態様もしくはその一部は、フロッピー(登録商標)ディスク、CD−ROM、ハードドライブ、または任意の他のマシン可読記憶媒体などの有形の媒体において具現化されるプログラムコード(すなわち命令)の形式をとってよく、プログラムコードがコンピュータなどのマシンにロードされてマシンにより実行されると、マシンが本開示を実践するための装置となる。プログラム可能なコンピュータ上でプログラムコードが実行される場合、コンピュータ装置には、一般的にプロセッサ、プロセッサが可読の記憶媒体(揮発性および不揮発性のメモリおよび/または記憶素子を含む)、少なくとも1つの入力装置、および少なくとも1つの出力装置を含む。1つまたは複数のプログラムが、例えば、API(application programming interfacde)、再利用可能制御などの使用を介して、本開示に関連して記載するプロセスを実装または利用してよい。そのようなプログラムは、好ましくは高レベルの手続き型またはオブジェクト指向のプログラミング言語で実装されて、コンピュータシステムと通信を行う。しかし、プログラム(複数可)は必要に応じてアセンブリ言語または機械語で実装することが可能である。いずれの場合も、言語はコンパイラ型言語またはインタープリタ型言語であってよく、ハードウェア実装と組み合わせてもよい。
リモートデスクトップシステムは、クライアントコンピュータシステムによりリモートで実行可能なアプリケーションを維持するコンピュータシステムである。入力はクライアントコンピュータシステムにおいて行われ、ネットワークを介して(例えば、RDP(Remote Desktop Protocol)などのプロトコルであるITU(International Telecommunications Union)T.120系に基づくプロトコルを使用して)、ターミナルサーバ上のアプリケーションに転送される。アプリケーションは、入力がターミナルサーバで行われたかのように入力を処理する。アプリケーションは受け取った入力に応答して出力を生成し、出力がネットワークを介してクライアントに転送される。
実施形態を、1つまたは複数のコンピュータ上で実行してよい。図1および2ならびに以下の検討は、本開示を実装することができる適切なコンピュータ環境の簡単な概要の記載を提供することを意図している。コンピュータシステム200、300が図1および2のコンピュータ100について記載する構成要素の内のいくつかまたは全てを有することが可能であることを、当業者は理解できよう。
本開示を通じて使用される用語「電気回路」には、ハードウェア構成要素、例えば、ハードウェア割り込みコントローラ、ハードドライブ、ネットワークアダプタ、グラフィックプロセッサ、ハードウェアベースのビデオ/オーディオコーデック、およびそのようなハードウェアの動作に使用されるファームウェア/ソフトウェアなどを含めることができる。用語「電気回路」にはまた、ファームウェアにより機能(複数可)を実行するべく、または、特定の方法または1つもしくは複数の論理プロセッサ、例えば、マルチコア汎用処理装置の1つまたは複数のコアで設定されるスイッチにより機能を実行するべく構成されるマイクロプロセッサを含めることも可能である。本例の論理プロセッサ(複数可)は、メモリ、例えばRAM、ROM、ファームウェア、および/または仮想メモリからロードされる機能(複数可)を実行するべく動作可能な論理を具現化するソフトウェア命令により構成可能である。電気回路にハードウェアおよびソフトウェアの組み合わせが含まれる例示の実施形態において、開発者は論理を具現化するソースコードを書くことができ、これは次に論理プロセッサにより実行可能なマシン可読コードにコンパイルされる。ハードウェア、ソフトウェア、またはハードウェア/ソフトウェアの組み合わせの間にはほとんど違いがないという点に技術の状態が発展しているということを当業者が理解可能であるため、機能を達成するためのハードウェアかソフトウェアかという選択は、単なる設計上の選択である。従って、ソフトウェアのプロセスを等価のハードウェア構造に転換可能であること、および、ハードウェア構造自体を等価のソフトウェアのプロセスに転換可能であることを当業者が理解可能であるため、ハードウェア実装かソフトウェア実装かの選択はささいなことであり、開発者の裁量に任されるものである。
図1は、本開示の態様を用いて構成されるコンピュータシステムの一例を示す。コンピュータシステムには、処理装置21、システムメモリ22、およびシステムメモリを含む種々のシステム構成要素を処理装置21に連結させるシステムバス23を含むコンピュータ20などを含むことができる。システムバス23は、メモリバスまたはメモリコントローラ、周辺機器用バス、および様々なバスアーキテクチャのいずれかを使用するローカルバスを含む、いくつかのタイプのバス構造のいずれかであってよい。システムメモリには、ROM(read only memory)24およびRAM(random access memory)25を含む。BIOS(basic input/output system)26は、起動時などにコンピュータ20内の要素間で情報の転送を支援する基本ルーチンを含み、ROM24内に記憶される。コンピュータ20には、ハードディスク(図示せず)に対して読み書きを行うハードディスクドライブ27、着脱可能磁気ディスク29に対して読み書きを行う磁気ディスクドライブ28、および、CD−ROMまたは他の光媒体などの着脱可能光ディスク31に対して読み書きを行う光ディスクドライブ30をさらに含んでよい。いくつかの例示の実施形態において、本開示の態様を具現化するコンピュータ実行可能命令を、ROM24、ハードディスク(図示せず)、RAM25、着脱可能磁気ディスク29、光ディスク31、および/または処理装置21のキャッシュに記憶してよい。ハードディスクドライブ27、磁気ディスクドライブ28、および光ディスクドライブ30は、システムバス23に対してそれぞれハードディスクドライブインターフェース32、磁気ディスクドライブインターフェース33、および光ドライブインターフェース34により接続される。ドライブおよびそれに関連するコンピュータ可読媒体により、コンピュータ可読命令、データ構造、プログラムモジュール、およびコンピュータ20用の他のデータの不揮発性記憶装置を提供する。本明細書に記載する環境ではハードディスク、着脱可能磁気ディスク29、および着脱可能光ディスク31を採用するが、コンピュータによりアクセス可能なデータを記憶できる他のタイプのコンピュータ可読媒体、例えば、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌイカートリッジ、RAM(random access memory)、ROM(read only memory)なども動作環境において使用してよいことは、当業者により理解されるべきである。
多数のプログラムモジュールを、ハードディスク、磁気ディスク29、光ディスク31、ROM24、またはオペレーティングシステム35を含むRAM25、1つまたは複数のアプリケーションプログラム36、他のプログラムモジュール37、およびプログラムデータ38上に記憶してよい。ユーザは、コマンドおよび情報をキーボード40およびポインティングデバイス42などの入力装置を介してコンピュータ20に入力することができる。他の入力装置(図示せず)には、マイクロフォン、ジョイスティック、ゲームパッド、衛星ディスク、スキャナなどを含めてよい。これらおよび他の入力装置は、システムバスに連結されるシリアルポートインターフェース46を介して処理装置21に接続されることが多いが、パラレルポート、ゲームポート、またはUSB(universal serial bus)などの他のインターフェースによって接続してもよい。ディスプレイ47または他のタイプのディスプレイ装置を、ビデオアダプタ48などのインターフェースを介してシステムバス23に接続することも可能である。ディスプレイ47に加えて、コンピュータには、典型的にはスピーカおよびプリンタなどの他の周辺出力装置(図示せず)を含む。図1のシステムにはまた、ホストアダプタ55、SCSI(Small Computer System Interface)バス56、およびSCSIバス56に接続される外部記憶装置62も含む。
コンピュータ20は、ネットワーク化された環境においてリモートコンピュータ49などの1つまたは複数のリモートコンピュータに対する論理接続を使用して動作することができる。リモートコンピュータ49は、別のコンピュータ、サーバ、ルータ、ネットワークPC、ピア装置または他の共通ネットワークノード、仮想マシンとすることができ、また、典型的にはコンピュータ20に関連して上述した要素の内の多くまたは全てを含むことができるが、図1にはメモリ記憶装置50のみが例示されている。図1に示される論理接続には、LAN(local area network)51およびWAN(wide area network)52を含むことができる。そのようなネットワーク環境は、事務所、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいては一般的である。
LANネットワーク環境において使用される時、コンピュータ20は、ネットワークインターフェースまたはアダプタ53を介してLAN51に接続可能である。WANネットワーク環境において使用される時、コンピュータ20には、典型的にはモデム54、またはインターネットなどのワイドエリアネットワーク52を介して通信を確立するための他の手段を含むことができる。モデム54は、内蔵または外付けであってよく、シリアルポートインターフェース46を介してシステムバス23に接続可能である。ネットワーク化された環境において、コンピュータ20に関連して示されるプログラムモジュールまたはその一部を、リモートメモリ記憶装置内に記憶してよい。図示されるネットワーク接続は例であり、コンピュータ間の通信リンクを確立する他の手段を使用してよいことは理解されるであろう。さらに、本開示の多数の実施形態がコンピュータシステムに対して特に良好に適することが想定されているが、本文書では本開示がそのような実施形態に限定されることは意図しない。
ここで図2を参照すると、例示的なコンピュータシステム100の別の実施形態が示されている。コンピュータシステム100には、論理プロセッサ102、例えば実行コアを含むことができる。1つの論理プロセッサ102が例示されているが、他の実施形態において、コンピュータシステム100は、例えば、1つのプロセッサ基板に複数の実行コア、および/または、それぞれ複数の実行コアを有することができる複数のプロセッサ基板など、複数の論理プロセッサを有することができる。図面に示されるように、種々のコンピュータ可読記憶媒体110を、種々のシステム構成要素を論理プロセッサ102に連結させる1つまたは複数のシステムバスにより相互接続することが可能である。システムバスは、メモリバスまたはメモリコントローラ、周辺機器用バス、および様々なバスアーキテクチャのいずれかを使用するローカルバスを含むいくつのタイプのバス構造いずれかであってよい。例示の実施形態において、コンピュータ可読記憶媒体110に含めることが可能なものには、例えば、RAM(random access memory)104、例えば電気機械的ハードドライブ、ソリッドステートハードドライブなどといった記憶装置106、例えばフラッシュRAMまたはROMといったファームウェア108、および、例えばCD−ROM、フロッピーディスク、DVD、フラッシュドライブ、外部記憶装置などといった着脱可能記憶装置118がある。磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌイカートリッジなどの他のタイプのコンピュータ可読記憶媒体が使用可能であることは、当業者には理解されるべきである。
コンピュータ可読記憶媒体により、プロセッサ実行可能命令122、データ構造、プログラムモジュール、およびコンピュータ100用の他のデータの不揮発性記憶装置を提供する。BIOS(basic input/output system)120は、起動時などにコンピュータ100内の要素間で情報の転送を支援する基本ルーチンを含み、ファームウェア108内に記憶させることができる。多数のプログラムを、ファームウェア108、記憶装置106、RAM104、および/または着脱可能記憶装置118上に記憶して、オペレーティングシステムおよび/またはアプリケーションプログラムを含む論理プロセッサ102により実行してよい。
コマンドおよび情報を、キーボードおよびポインティングデバイスを含むことができるがこれに限定されない入力装置116を介して、コンピュータ100が受け取ってよい。他の入力装置には、マイクロフォン、ジョイスティック、ゲームパッド、スキャナなどを含めてよい。これらおよび他の入力装置は、システムバスに連結されるシリアルポートインターフェースを介して論理プロセッサ102に接続されることが多いが、パラレルポートゲームポートまたはUSB(universal serial bus)などの他のインターフェースによって接続してもよい。ディスプレイまたは他のタイプのディスプレイ装置を、グラフィックプロセッサ112の一部とすることまたはグラフィックプロセッサ112に接続されることが可能であるビデオアダプタなどのインターフェースを介して、システムバスに接続することも可能である。ディスプレイに加えて、コンピュータには、典型的にはスピーカおよびプリンタなどの他の周辺出力装置(図示せず)を含む。図1の例示のシステムはまた、ホストアダプタ、SCSI(Small Computer System Interface)バス、およびSCSIバスに接続される外部記憶装置も含むことができる。
コンピュータシステム100は、ネットワーク化された環境においてリモートコンピュータなどの1つまたは複数のリモートコンピュータに対する論理接続を使用して動作することができる。リモートコンピュータは、別のコンピュータ、サーバ、ルータ、ネットワークPC、ピア装置または他の共通ネットワークノードとすることができ、また、典型的にはコンピュータシステム100に関連して上述した要素の内の多くまたは全てを含むことができる。
LANまたはWANのネットワーク環境において使用される時、コンピュータシステム100を、ネットワークインターフェースカード114を介してLANまたはWANに接続することが可能である。NIC114は、内蔵または外付けであってよく、システムバスに接続可能である。ネットワーク化された環境において、コンピュータシステム100に関連して示されるプログラムモジュールまたはその一部を、リモートメモリ記憶装置内に記憶してよい。ここで記載したネットワーク接続は例であり、コンピュータ間の通信リンクを確立する他の手段を使用してよいことは理解されるであろう。さらに、本開示の多数の実施形態がコンピュータ化されたシステムに対して特に良好に適することが想定されているが、本文書では本開示がそのような実施形態に限定されることは意図しない。
リモートデスクトップシステムは、クライアントコンピュータシステムによりリモートで実行可能なアプリケーションを維持するコンピュータシステムである。入力はクライアントコンピュータシステムにおいて行われ、ネットワークを介して(例えば、RDP(Remote Desktop Protocol)などのプロトコルであるITU(International Telecommunications Union)T.120系に基づくプロトコルを使用して)、ターミナルサーバ上のアプリケーションに転送される。アプリケーションは、入力がターミナルサーバで行われたかのように入力を処理する。アプリケーションは受け取った入力に応答して出力を生成し、出力がネットワークを介してクライアントコンピュータシステムに転送される。クライアントコンピュータシステムは、出力データを提示する。従って、クライアントコンピュータシステムで入力を受け取って、出力を提示する一方、処理は実際にはターミナルサーバで発生する。セッションには、シェル、および、例えばデスクトップ、デスクトップ内のマウスの動きを追跡するサブシステム、アイコン上のマウスクリックをプログラムのインスタンスを発行するコマンドに変換するサブシステムなどのユーザインターフェースを含むことができる。別の例示の実施形態において、セッションにはアプリケーションを含むことが可能である。この例では、アプリケーションが描画される間に、デスクトップ環境はそのまま生成されてユーザから隠されるようにしてよい。前述の検討は例であり、ここに開示する主題を種々のクライアント/サーバ環境において実装してよく、特定のターミナルサービス製品に限定されないことは理解されるべきである。
全てのリモートデスクトップ環境ではないにせよ、大抵の場合、入力データ(クライアントコンピュータシステムで入力される)は、典型的にはアプリケーションに対するコマンドを表すマウスやキーボードのデータを含み、出力データ(ターミナルサーバでアプリケーションにより生成される)は、典型的には映像出力装置上に表示される映像データを含む。多くのリモートデスクトップ環境が、他のタイプのデータを転送するべく拡張される機能性も含む。
通信チャネルを使用して、RDP接続を介してプラグインにデータを転送させることによりRDPプロトコルを拡張することができる。多くのそのような拡張が存在する。プリンタのリダイレクト、クリップボードのリダイレクト、ポートのリダイレクトなどの機能は、通信チャネル技術を使用する。従って、入出力データに加えて、データ転送のために必要な多くの通信チャネルがあってよい。それにより、出力データの転送という不定期な要求や、他のデータの転送という1つまたは複数のチャネル要求があり得、利用可能なネットワーク帯域幅を取り合う。
ここで図3および4を参照すると、仮想マシンを達成する(effectuate)べく構成されるコンピュータシステムの高レベルのブロック図が示されている。図示されるように、コンピュータシステム100には、図1および2に記載した要素、および仮想マシンを達成するべく動作可能な構成要素を含むことができる。そのような一構成要素には、当技術分野においては仮想マシンモニタとも称されることがあるハイパーバイザ202がある。図示される実施形態におけるハイパーバイザ202を、コンピュータシステム100のハードウェアへのアクセスを制御かつ裁定するべく構成することが可能である。概して説明すると、ハイパーバイザ202は、子パーティション1から子パーティションN(Nは1以上の整数)などのパーティションと呼ばれる実行環境を生成可能である。実施形態において、子パーティションは、ハイパーバイザ202によりサポートされる独立性(isolation)の基本単位であると考えることができ、すなわち、各子パーティションを、ハイパーバイザ202の制御下にあるハードウェアリソース、例えば、メモリ、装置、論理プロセッサのサイクルなどの組に対してマッピングすることが可能であり、かつ/または、親パーティションおよびハイパーバイザ202が、1つのパーティションを別のパーティションのリソースにアクセスすることから隔離することができる。実施形態において、ハイパーバイザ202は、スタンドアロンのソフトウェア製品、オペレーティングシステムの一部、マザーボードのファームウェア内に埋め込まれるもの、専用の集積回路、またはその組み合わせとすることができる。
上記の例では、コンピュータシステム100には親パーティション204を含み、これはオープンソースコミュニティにおけるドメイン0と考えることもできる。親パーティション204を、オープンソースコミュニティにおいてバックエンドドライバとしても既知である仮想化サービスプロバイダ228(VSP)を使用することにより、子パーティション1からNにおいて実行されるゲストオペレーティングシステムにリソースを提供するべく構成することが可能である。本例のアーキテクチャにおいては、親パーティション204は、下層にあるハードウェアへのアクセスをゲート制御することができる。VSP228を使用して、オープンソースコミュニティにおけるフロントエンドドライバとしても既知である仮想化サービスクライアント(VSC)を利用して、インターフェースをハードウェアリソースに対して多重化することが可能である。各子パーティションには、仮想プロセッサ230から232などの1つまたは複数の仮想プロセッサを含むことができ、この仮想プロセッサはゲストオペレーティングシステム220から222により管理可能であり、かつゲストオペレーティングシステムはその上で実行されるスレッドをスケジューリング可能である。概して、仮想プロセッサ230から232は、物理的プロセッサの具象(representation)に特定のアーキテクチャを提供する実行可能命令および関連する状態情報である。例えば、ある仮想マシンがIntelx86プロセッサの特徴を有する仮想プロセッサを持ち、一方、別の仮想プロセッサがPowerPCプロセッサの特徴を持つということでよい。本例の仮想プロセッサを、コンピュータシステムの論理プロセッサにマッピングして、仮想プロセッサを有効に命令が論理プロセッサによって支持されるようにすることが可能である。従って、これらの例示の実施形態において、複数の仮想プロセッサが、例えば、別の論理プロセッサがハイパーバイザ命令を実行中に、同時に実行していることが可能である。概して言えば、また、図面に例示するように、パーティションにおける仮想プロセッサ、種々のVSC、およびメモリの組み合わせを、仮想マシン240または242などの仮想マシンと考えることができる。
概して、ゲストオペレーティングシステム220から222には、例えば、Microsoft(登録商標)社、Apple(登録商標)社、オープンソースコミュニティなどのオペレーティングシステムなどの任意のオペレーティングシステムを含むことができる。ゲストオペレーティングシステムには、ユーザ/カーネルモードの動作を含むことが可能であり、スケジューラ、メモリマネージャなどを含むことができるカーネルを有することが可能である。カーネルモードには、論理プロセッサにおいて少なくとも特権的プロセッサ命令へのアクセスを許可する実行モードを含むことができる。各ゲストオペレーティングシステム220から222は、ターミナルサーバ、電子商取引サーバ、電子メールサーバなど、またゲストオペレーティングシステム自体などのアプリケーションをその上に記憶させることが可能な関連ファイルシステムを有することができる。ゲストオペレーティングシステム220から222は、仮想プロセッサ230から232上で実行されるスレッドをスケジューリング可能であり、そのようなアプリケーションのインスタンスの達成が可能である。
ここで図4を参照すると、仮想マシンを実装するために使用可能な代替のアーキテクチャが例示されている。図4は、図3のものと同様の構成要素を示すが、本例示の実施形態においては、ハイパーバイザ202に仮想化サービスプロバイダ228およびデバイスドライバ224を含むことができ、親パーティション204に構成ユーティリティ236を含むことができる。本アーキテクチャでは、ハイパーバイザ202は図2のハイパーバイザ202と同一または同様の機能を実行可能である。図4のハイパーバイザ202は、スタンドアロンのソフトウェア製品、オペレーティングシステムの一部、マザーボードのファームウェア内に埋め込まれるものとすることができ、またはハイパーバイザ202の一部は専用の集積回路により実装可能である。本例において、親パーティション204は、ハイパーバイザ202を構成するべく使用可能な命令を有してよいが、ハードウェアアクセス要求は、親パーティション204に渡す代わりにハイパーバイザ202により扱ってもよい。
ここで図5を参照すると、コンピュータ100には、リモートデスクトップサービスを接続クライアントに提供するべく構成される電気回路を含んでよい。一例の実施形態において、図示されるオペレーティングシステム400を、ハードウェア上で直接実行させてもよく、または、ゲストオペレーティングシステム220または222をVM216またはVM218などの仮想マシンにより達成してもよい。下層にあるハードウェア208、210、234、212および214が、ハードウェアを仮想化可能であることを確認するために破線による例示形式で示される。
リモートサービスは、クライアント401などの少なくとも1つのクライアントに対して提供可能である(1つのクライアントが示されているが、リモートサービスはより多くのクライアントに対して提供可能である)。例示のクライアント401には、ユーザ入力をリモートサーバセッションに向けるべく、かつセッションにより生成されるユーザインターフェース情報を表示するべく構成されるハードウェアにより実装されるコンピュータ端末を含むことが可能である。別の実施形態において、クライアント401は、図1bのコンピュータ100のものと同様の要素を含むコンピュータにより実現可能である。本実施形態において、クライアント401には、オペレーティングシステムを実装するべく構成された電気回路、および、端末の機能性、例えば1つまたは複数の論理プロセッサ102により実行可能なリモートデスクトップクライアントアプリケーションをエミュレートするべく構成される電気回路を含むことができる。オペレーティングシステムを達成するべく構成される電気回路が、端末をエミュレートするべく構成される電気回路を含むことも可能であることは、当業者には理解できるであろう。
各接続クライアントは、コンピュータ100上に記憶されたデータおよびアプリケーションへのアクセスをクライアントに許可するセッション(セッション404など)を有することができる。概して、アプリケーションおよび特定のオペレーティングシステム構成要素を、セッションに割り当てられるメモリの領域にロードすることが可能である。従って、特定のインスタンスにおいて、いくつかのOS構成要素をN回(Nは現行セッションの数を表す)生成することができる。これらの種々のOS構成要素は、例えば、メモリを管理する、ディスクの読み/書きを円滑にする、論理プロセッサ102上で実行される各セッションからスレッドを構成することが可能であるオペレーティングシステムカーネル418に、サービスを要求することができる。セッションスペースにロード可能ないくつかの例示のサブシステムには、デスクトップ環境を生成するサブシステム、デスクトップ内のマウスの動きを追跡するサブシステム、アイコン上のマウスクリックをプログラムのインスタンスを発行するコマンドに変換するサブシステムなどを含むことができる。例えばマウスの動きの追跡といったこれらのサービスを実装するプロセスを、セッションに関連する識別子でタグ付けし、セッションに割り当てられるメモリの領域にロードする。
セッションは、セッションマネージャ416、例えばプロセスにより生成可能である。例えば、セッションマネージャ416は、セッションスペースに対してセッション識別子を生成すること、メモリをセッションスペースに割り当てること、および、サブシステムプロセスのシステム環境変数およびインスタンスをセッションスペースに割り当てたメモリにおいて生成することにより、各リモートセッションを初期化および管理することが可能である。セッションマネージャ416は、リモートデスクトップセッションを求める要求をオペレーティングシステム400により受け取ると、起動可能である。
接続要求は、まず、トランスポートスタック410、例えば、RDP(remote desktop protocol)スタックにより扱うことができる。トランスポートスタック410の命令は、特定のポート上で接続メッセージをリッスンし、それをセッションマネージャ416に転送するべく論理プロセッサ102を構成することができる。セッションが生成されると、トランスポートスタック410が各セッションのリモートデスクトッププロトコルスタックインスタンスを作成することができる。スタックインスタンス414は、セッション404に対して生成可能な一例のスタックインスタンスである。概して、各リモートデスクトッププロトコルスタックインスタンスを、適切なリモートセッションに対して、出力を関連するクライアントにルーティングし、クライアント入力を環境サブシステム444にルーティングするべく構成することが可能である。
図面により示されるように、一実施形態において、アプリケーション448を実行させ、かつビットのアレイの生成を行うことが可能である(1つのアプリケーションが示されているが、他のアプリケーションも実行可能である)。アレイはグラフィックインターフェース446により処理可能であり、グラフィックインターフェースは次にビットマップ、例えばピクセル値のアレイを描画することができ、ビットアレイはメモリに記憶可能である。図面により示されるように、描画の呼び出しをキャプチャし、ネットワークを介してその呼び出しをセッションのスタックインスタンス414を経由してクライアント401に送ることができるリモートディスプレイサブシステム420を、インスタンス化することが可能である。
グラフィックとオーディオのリモーティングに加えて、プリンタ、mp3プレイヤ、クライアントファイルシステム、CD−ROMドライブなどの多様な装置をリモーティングするために、プラグアンドプレイリダイレクタ458をインスタンス化することが可能である。プラグアンドプレイリダイレクタ458は、クライアント401に連結される周辺装置を識別する情報をクライアント側の構成要素から受け取ることができる。次に、プラグアンドプレイリダイレクタ458は、クライアント401の周辺機器のためのリダイレクトデバイスドライバをロードするべくオペレーティングシステム400を構成することができる。リダイレクトデバイスドライバは、周辺機器にアクセスするというオペレーティングシステム400からの呼び出しを受け取り、ネットワークを介してその呼び出しをクライアント401に送ることができる。
上記で検討したように、クライアントは、RDP(Remote Desktop Protocol)などのリモートプレゼンテーションサービスを提供するためのプロトコルを使用して、ターミナルサービスを使用してリソースに接続することができる。リモートデスクトップクライアントがターミナルサーバゲートウェイを介してターミナルサーバに接続すると、ゲートウェイは、ターミナルサーバとのソケット接続を開いて、クライアントトラフィックをリモートプレゼンテーションポートまたはリモートアクセスサービス専用のポートにリダイレクトすることができる。ゲートウェイは、HTTPSを介して送信されるターミナルサーバゲートウェイプロトコルを使用して、特定のゲートウェイ特有の交換をクライアントとの間で実行してもよい。
図6を参照すると、リモートサービスを実装し、かつ本開示の態様を組み込むための電気回路を含むコンピュータシステム100が示されている。図面により示されるように、一実施形態において、コンピュータシステム100は、図2および図5に記載したものと同様の構成要素が含むことができ、リモートプレゼンテーションセッションを実装することができる。本開示の一実施形態において、リモートプレゼンテーションセッションは、例えばコンピュータシステムを使用してユーザに対して生成されるセッションといったコンソールセッションの態様、および、リモートセッションの態様を含むことができる。上記の記載と同様に、セッションマネージャ416は、リモートプレゼンテーションセッションを有効にするために構成要素を有効化/無効化することにより、リモートプレゼンテーションセッションを初期化および管理することが可能である。
リモートプレゼンテーションセッション内にロード可能な構成要素のうちの1組は、高忠実度のリモーティングを可能にするコンソール構成要素、すなわち、3Dハードウェアにより描画される3Dグラフィックおよび2Dグラフィックの利点を生かした構成要素である。
3Dハードウェアにより描画される3D/2Dグラフィックには、ユーザモードドライバ522、API520、グラフィックカーネル524、およびカーネルモードドライバ530を含むドライバモデルを使用して、アクセスすることができる。アプリケーション448(または3Dグラフィックを生成するユーザインターフェースなどの任意の他のプロセス)は、APIコンストラクトを生成すること、および、それらをMicrosoft(登録商標)社のDirect3DなどのAPI(application programing interface)520に送ることができる。API520は次にユーザモードドライバ522と通信することができ、ユーザモードドライバはプリミティブを生成し、例えばメモリのページといったバッファ内に記憶することができる。プリミティブは、例えば、頂点および定数で表されるコンピュータグラフィックにおいて使用される基本の幾何学的図形であって、他の図形のビルディングブロックとして使用される。一実施形態において、アプリケーション448は、バッファをどのように使用する予定であるか、例えば、どの型のデータをバッファに記憶させる予定であるかを宣言することができる。ビデオゲームなどのアプリケーションでは、アバター用のプリミティブを記憶するために動的バッファを、建物または森を表すデータなどのそれほど頻繁には変更されないであろうデータを記憶するために静的バッファを使用してよい。
ドライバモデルについての記載を続けると、アプリケーションは、バッファをプリミティブで満たし、実行コマンドを発行することができる。アプリケーションが実行コマンドを発行すると、カーネルモデルドライバ530により実行リストにバッファを付加すること、グラフィックカーネルスケジューラ528によりバッファをスケジューリングすることが可能である。各グラフィックソース、例えばアプリケーションまたはユーザインターフェースは、コンテキストおよびそれ自身の実行リストを有することができる。グラフィックカーネル524を、種々のコンテキストをスケジューリングしてグラフィック処理装置112上で実行させるべく構成することができる。GPUスケジューラ528は論理プロセッサ102により実行可能であり、スケジューラ528はコマンドをカーネルモデルドライバ530に対して発行してバッファのコンテンツをレンダリングさせることが可能である。スタックインスタンス414は、コマンドを受け取り、クライアントのGPUによるバッファの処理が可能であるクライアント401にネットワークを介してバッファのコンテンツを送るべく構成可能である。
ここで、リモートプレゼンテーションサービスを呼び出すアプリケーションと合わせて使用される仮想化GPUの動作の一例を示す。図6を参照すると、一実施形態において、仮想マシンセッションはコンピュータ100により生成可能である。例えば、セッションマネージャ416は論理プロセッサ102により実行可能であり、特定のリモート構成要素を含むリモートセッションを初期化することが可能である。本例において、生成されるセッションには、カーネル418、グラフィックカーネル524、ユーザモードディスプレイドライバ522、およびカーネルモデルディスプレイドライバ530を含むことができる。ユーザモードドライバ522は、メモリ内に記憶可能なグラフィックプリミティブを生成することができる。例えば、API520には、オペレーティングシステム400のユーザインターフェースまたはアプリケーション448などのプロセスに対してエクスポーズされ得るインターフェースを含むことが可能である。プロセスは、ポイントリスト、ラインリスト、ラインストリップ、トライアングルリスト、トライアングルストリップ、またはトライアングルファンなどの高レベルのAPIコマンドをAPI420に送ることが可能である。API520は、これらのコマンドを受け取り、ユーザモードドライバ522に対するコマンドに変換することが可能であり、ユーザモードドライバは次に、頂点を生成し1つまたは複数のバッファ内に記憶することができる。GPUスケジューラ528を実行させ、バッファ内のコンテンツをレンダリングすることを判定することができる。本例において、サーバのグラフィック処理装置112へのコマンドのキャプチャが可能であり、ネットワークインターフェースカード114を介してバッファのコンテンツ(プリミティブ)をクライアント401へ送ることが可能である。一実施形態において、APIは、仮想GPUが利用可能であるかどうかを判定するために構成要素が相互作用するセッションマネージャ416によりエクスポーズされ得る。
一実施形態において、図3または4の仮想マシン240などの仮想マシンをインスタンス化することが可能であり、仮想マシンはオペレーティングシステム400の実行のためのプラットフォームとして働くことが可能である。ゲストオペレーティングシステム220は、本例においてはオペレーティングシステム400を具現化することができる。ネットワークを介して接続要求を受け取ると、仮想マシンをインスタンス化してよい。例えば、親パーティション204は、トランスポートスタック410のインスタンスを含んでよく、また、親パーティション204を、接続要求を受け取るべく構成してよい。親パーティション204は、リモートセッションを有効にする能力を含むゲストオペレーティングシステムと共に接続要求に応答して、仮想マシンを初期化してよい。接続要求を次にゲストオペレーティングシステム220のトランスポートスタック410に渡すことが可能である。本例において、各リモートセッションを、自身の仮想マシンにより実行されるオペレーティングシステム上でインスタンス化してよい。
一実施形態において、仮想マシンのインスタンス化が可能であり、オペレーティングシステム400を具現化するゲストオペレーティングシステム220の実行が可能である。上記の記載と同様に、ネットワークを介して接続要求を受け取ると、仮想マシンをインスタンス化してよい。リモートセッションをオペレーティングシステムにより生成してよい。セッションマネージャ416を、要求が3Dグラフィック描画をサポートするセッションを求めるものであると判定するべく構成することが可能であり、セッションマネージャ416はコンソールセッションをロードすることが可能である。コンソールセッションのロードに加えて、セッションマネージャ416は、ユーザモードディスプレイドライバ522により生成されるプリミティブをキャプチャするためにセッション用のスタックインスタンス414’および構成システムをロードすることができる。
ユーザモードドライバ522は、キャプチャされてトランスポートスタック410がアクセス可能なバッファ内に記憶されることが可能なグラフィックプリミティブを生成してよい。カーネルモデルドライバ530は、バッファをアプリケーションの実行リストに付加することができ、GPUスケジューラ528を実行させ、バッファ用の描画コマンドをいつ発行するかを判定することが可能である。スケジューラ528が描画コマンドを発行すると、コマンドを、例えば、カーネルモデルドライバ530によりキャプチャし、スタックインスタンス414を介してクライアント401に送ることが可能である。
GPUスケジューラ528を実行させ、バッファのコンテンツを描画する命令を発行することを判定して良い。本例において、描画の命令に関連するグラフィックプリミティブは、ネットワークインターフェースカード114を介してクライアント401に送ることが可能である。
一実施形態において、少なくとも1つのカーネルモードのプロセスが、少なくとも1つの論理プロセッサ112により実行可能であり、少なくとも1つの論理プロセッサ112は、異なるバッファ内に記憶された頂点の描画を同期させることが可能である。例えば、グラフィック処理スケジューラ528は、オペレーティングシステムスケジューラと同様に動作可能であるもので、GPUの動作をスケジューリングすることができる。GPUスケジューラ528は、頂点の別々のバッファを正しい実行順序に統合(merge)して、クライアント401のグラフィック処理装置が、頂点を正しく描画させる順番でコマンドを実行するようにすることができる。
ビデオゲームなどのプロセスの1つまたは複数のスレッドは、複数のバッファをマッピングしてよく、各スレッドはドローコマンドを発行してよい。頂点の識別情報、例えば、バッファごと、頂点ごと、またはバッファ内の頂点のバッチごとに生成された情報を、GPUスケジューラ528に送信することが可能である。情報を、同一または他のプロセスからの頂点に関連する識別情報と共にテーブルに記憶して、種々のバッファの描画を同期させるために使用してよい。
ワードプロセシングプログラムなどのアプリケーションは、例えば、2つのバッファを実行かつ宣言することができる。2つのバッファの1つは3Dメニューを生成するための頂点を記憶するもの、他方はメニューに入れる文字を生成するためのコマンドを記憶するものとすることができる。アプリケーションは、バッファをマッピングし、ドローコマンドを発行してよい。GPUスケジューラ528は、2つのバッファを実行するための順番を判定して、メニューが文字と共に見映えがよくなるように描画されるようにすることができる。例えば、他のプロセスがドローコマンドを同時またはほぼ同様の時に発行してよく、また、頂点が同期されない場合は、異なるプロセスの異なるスレッドからの頂点がクライアント401上で非同期的に描画され、これにより、表示される最終的な画像を混沌または混乱したものに見せる可能性がある。
バルク圧縮器450を使用して、クライアント401にデータのストリームを送る前にグラフィックプリミティブを圧縮することができる。一実施形態において、バルク圧縮器450を、スタックインスタンス414のユーザモード(図示せず)またはカーネルモードの構成要素とすることができ、クライアント401に送ろうとしているデータのストリーム内の類似するパターンを探すべく構成することが可能である。本実施形態において、バルク圧縮器450が複数のアプリケーションから、複数のAPIコンストラクトを受け取る代わりに、頂点のストリームを受け取るので、バルク圧縮器450は頂点のより大きなデータセットを持つことになり、圧縮の機会を見つけるためにこれを検査する。すなわち、多様なAPIを呼び出す代わりに、複数のプロセスのための頂点がリモーティングされているため、バルク圧縮器450が所与のストリーム内に類似するパターンを発見するチャンスが大きい。
一実施形態において、グラフィック処理装置112を、メモリの物理アドレスの代わりに仮想アドレス指定を使用するべく構成してよい。従って、バッファとして使用されるメモリのページを、システムRAMに、またはビデオメモリからディスクに、ページングすることが可能である。グラフィックカーネル528からの描画コマンドをキャプチャするとバッファの仮想アドレスを取得するべく、かつ仮想アドレスからコンテンツを送るべく、スタックインスタンス414’を構成することができる。
オペレーティングシステム400を、例えば、種々のサブシステムおよびドライバをロードして、プリミティブをキャプチャしクライアント401などのリモートコンピュータに送ることができるように構成してもよい。上記の記載と同様に、セッションマネージャ416は論理プロセッサ102により実行可能であり、特定のリモート構成要素を含むセッションを初期化することが可能である。本例において、生成されるセッションには、カーネル418、グラフィックカーネル524、ユーザモードディスプレイドライバ522、およびカーネルモードディスプレイドライバ530を含むことができる。
グラフィックカーネルは、GPUの動作をスケジューリングすることができる。GPUスケジューラ528は、頂点の別々のバッファを正しい実行順序に統合して、クライアント401のグラフィック処理装置が、頂点が正しくレンダリングされる順番でコマンドを実行するようにすることができる。
図7を参照すると、本開示の一実施形態に従う、復号化プロセスを例示するブロック図が示されている。符号化プロセスが図8に示されている。符号化されるタイルを、RLGR復号器900を介して最初に実行して、量子化タイル係数を生成してよい。これをCPU上で実行してよい。
逆量子化705を、SSE2命令を使用してCPU上に実装してよい。逆量子化の後、タイルのうちの3個の構成要素の10個のサブバンドを、フォーマットL16の3個のDirect3Dテクスチャバッファにコピーしてよく、Y、U、およびVのそれぞれに1つである。これら3個のテクスチャをGPUに対してアップロードしてよく、逆DWTのステージ710により入力として使用することが可能である。
上述のパーティションを実装するためのこれらのバリエーションは全て、単なる例示の実装であり、本明細書の記載は本開示を任意の特定の仮想化の態様に限定するものと解釈されるべきではない。
エントロピー符号器
仮想デスクトップまたはリモートプレゼンテーションセッションにおいて、ユーザのグラフィックおよびビデオを各ユーザのサーバにおいて描画してよい。結果として得られるビットマップを、表示および対話用にクライアントに送ってよい。ネットワークに対する帯域幅の要件を減らすために、ビットマップをクライアントに送る前に圧縮してよい。圧縮技術はレイテンシが低く効率がよいことが望ましい。
ビットマップおよび他のグラフィックデータを符号化および復号化するためのシステムおよび方法を、本明細書において記載する。符号化システムには、最初にソース画像データをデータタイルに分割するタイリングモジュールを有するタイリングシステムを含んでよい。フレーム間差分モジュールは次に変更されたデータタイルだけを種々の処理モジュールに出力してよく、該モジュールでは変更されたデータタイルを対応するタイル構成要素に変換する。一実施形態において、量子化器がタイル構成要素に対して圧縮プロシージャを実行して、調整可能量子化パラメータに従って圧縮されたデータを生成してよい。適応エントロピー符号器セレクタが次に、複数のエントロピー符号器のうちの1つを選択してエントロピー符号化プロシージャ実行し、それにより、符号化されたデータを作成することができる。エントロピー符号器は、フィードバックループを利用して、現在の送信帯域幅の特徴を考慮して量子化パラメータを調整することもできる。本明細書において参照する、グラフィックデータを圧縮、符号化、および復号化するプロセスは、同一出願による「電子情報の効率的符号化及び復号化システム及びその方法(System And Method For Effectively Encoding And Decoding Electronic Information)」と題する特許文献1、および、2009年3月6日出願の「フレームキャプチャ、符号化および送信管理(FrameCapture,Encoding,And Transmission Management」と題する特許文献2において記載され、その全体が参照により本明細書に組み込まれる、1つまたは複数の方法およびシステムを概して使用することができる。
本明細書に開示する種々の方法およびシステムにおいて、上述の種々のプロセスの処理および扱いに対する改良を使用して、より効率的な処理、従って、よりタイムリーかつリッチなユーザ経験を提供し得る。本方法およびシステムは、ネットワークおよび/またはシステムのリソースが適切な帯域幅を提供している時、ならびに/または、クライアント装置がより低速の処理速度またはリソースを有する時、そのようなグラフィックのサポートの提供における改良をも提供する。グラフィックデータを描画、符号化、および送信するための本明細書に開示する実施形態を、ハードウェアおよびソフトウェアのプロセスの種々の組み合わせを使用して実装してよい。いくつかの実施形態において、機能を完全にハードウェアで実行してもよい。他の実施形態において、機能を完全にソフトウェアで実行してもよい。さらなる実施形態において、機能をハードウェアおよびソフトウェアのプロセスの組み合わせを使用して実装してもよい。そのようなプロセスを、1つまたは複数のCPU、および/または、GPU(graphics processing unit)もしくは他の専用のグラフィック描画装置などの1つまたは複数の特殊なプロセッサを使用してさらに実装してもよい。
さらに、以下の記載をリモートプレゼンテーションシステムの文脈で提供するが、開示する実施形態を、グラフィックデータがネットワークを介した配信のために符号化および圧縮される任意のタイプのシステムにおいて実装してよいことは理解されるべきである。
種々の実施形態が、タイルの個々のYUVコンポーネントを対応するYUVタイルのサブバンドに変換するためのDWT(discrete wavelet transform)機能の使用を組み込んでよい。量子化機能は、タイルのサブバンドを圧縮するための適切な量子化技術を利用することにより、量子化プロシージャを実行することができる。量子化機能では、エントロピー符号器からのフィードバックループを介して受け取る適応量子化パラメータにより指定されてよい特定の圧縮率に従って、タイルのビットレートを減少させることにより、圧縮された画像データを作成することができる。
一実施形態において、GPUには、圧縮される必要がある変更された矩形を有するビットマップを与えてよい。ビットマップを論理タイルにさらに分割してよく、変更された矩形内で変更するタイルのみを符号化し圧縮する。このように、プロセスはクライアントと協調してキャッシングスキームを効果的に実装し、クライアントでは結果として得られる復号化された画像が維持され表示される。
リモートプレゼンテーション圧縮アルゴリズムを採用して、ディスプレイストリームの帯域幅をローカルエリアネットワーク、ワイドエリアネットワーク、および低帯域幅ネットワークを介する送信で許容できるレベルに減少させる。そのようなアルゴリズムは、典型的にはより低い望ましい帯域幅に対してサーバ側のCPU時間をトレードオフする。
エントロピー符号器と呼ばれるフェーズを採用することができる画像圧縮器を使用してよい。エントロピー符号器の機能では、エントロピー符号化プロシージャを実行して符号化データを生成することができる。特定の実施形態において、エントロピー符号化プロシージャでは、適切なコードを量子化器から受け取った圧縮された画像データ内の対応するビットパターンと置き換えることにより、圧縮された画像のビットレートをさらに減少させる。
リモートプレゼンテーションシステムにおいて採用されるエントロピー符号化では、概して、CPUパフォーマンス(すなわち、速度)と圧縮率とのバランスをとる。エントロピー符号器を、合理的なCPU速度での良好な圧縮のために調整してよい。典型的なエントロピー符号器には、ランレングス符号器、ハフマン符号器、算術符号器、ゴロム・ライス符号器の変形が含まれる。リモートプレゼンテーションアプリケーションのための効率的なエントロピー符号器を設計する上で主要な問題の一つは、典型的には符号化すべき整数のブロックの統計値に大きな変動があるということである。研究により、ほとんどの場合、量子化前のデータがガウス分布よりも著しくゼロ近辺に集中する確率分布を持つことが示されている。
本開示は、圧縮性を失う可能性を有しながらも符号化および復号化の速度を改善するべく構成される簡素なエントロピー符号器を実装することに関する。しかし、多くの状況において、このトレードオフは許容可能であり、帯域幅ではなく低速なCPUによって制限されるようなシナリオにおいて実際に、より望ましい。最終結果として、現在の符号器/復号器よりも約10%から20%の圧縮性の損失で2倍または3倍速い符号器/復号器を提供することができる。
そのような符号器/復号器は、プロセッサ速度についての最適化が全ての帯域幅を確保することより優先されるようなシナリオを可能にするため、有用であり得る。例えば、よりローエンドのクライアント装置が、より良好なパフォーマンスをより簡素な圧縮器で達成して、より速い処理を可能にすることができる。リモートプレゼンテーションシステムを、典型的にはCPUのコストおよび能力に関わらず帯域幅を減少させるべく最適化する。今日多くのシステムにおいて、帯域幅が十分である一方、クライアント装置はセットトップボックスまたはシンクライアントなどのより簡素な装置であってよい。
一実施形態において、エントロピー符号器を、可変ビットストリームフォーマットの使用を回避するべく構成してよい。可変ビットストリームを採用することは、効率的な符号化および復号化が常に遅くなるということである。一実施形態において、符号器を、ニブルのサイズ(4ビットとしても知られる)のコードを使用して、通常サイズの固定サイズ符号化ストリームを達成するよう構成してもよい。そのようなストリームを使用することにより、ストリームは、CPUのコストをそれほどかけずに、復号化がより速くなり、安全に復号化できる(フルオーバーフローチェックを用いて)。
一例のスキームでは、符号器は以下のタイプの演算を符号化する。
1)連続するゼロ(エントロピー符号器への通常の入力)―連続するゼロは、連続の大多数が非常に短いという統計的観測に合致する可変個のクワッドに符号化される。
2)リテラル値−リテラル値は、最も直近のリテラル値のテーブル(キャッシュ)内に見られるLRU(Least Recently Used(最近最も使用されない))ヒットとして符号化されるか、または、小さい値ほど発生しやすいという統計的特性からの恩恵を受けて再度可変個のクワッドとして符号化される。
両方の場合において、効果的に2つのストリームが存在する。(a)演算コード(op-code)のクワッドストリーム、および(b)大きな値のストリームである。ランレングスまたはリテラルレングスのいずれかの特定の演算コードが単に「大きな値のストリーム内の次の値を取得せよ」ということを示す。
大きな値より小さな値に対して少ないバイトを使用するが、同時に固定バイト境界上でのみ動作することが保証されるという基本のマルチバイト符号化スキームを用いて大きな値のストリームを符号化してよい。そのような符号化スキームを使用することにより、複雑なビットシフトまたは可変ビット復号化スキームを必要とすることなくクワッドストリームおよび値ストリームの両方の復号化が可能であり、従って、もっと一般的/複雑なエントロピー符号器(例えば、RLGRまたは種々のハフマン系のスキーム)よりも速いパフォーマンスが可能となる。そのような簡素化された符号器を、任意の数のビット、例えば1から32ビットの符号化が可能であるように構成することができる。より複雑な符号化においては、可変ビットのため、および、典型的には、処理中に多くのコーディング分岐および大量のブックキーピングを要求する必要な処理のために、復号化はコンピュータ的には困難なものとなる。この簡素なスキームを使用することで、通常サイズの構造(例えば、クワッド)を使用することによりそのような複雑さを最小限にすることができる。そのようなスキームにおいて、4ビットより大きな出力シンボルはなく、データは、シフトもロールもないバイトの倍数単位である。1つのバイトには、必要であれば並行して処理可能な2つのコードを含んでよい。さらに、クワッドの数が既知である場合、バッファのオーバーランは回避可能である。典型的なリモートプレゼンテーションのシナリオを使用する検査では、現在利用可能なCPUを使用して2から3倍のパフォーマンスの増加で、10から20%だけ圧縮性の損失が測定された。
いくつかの実施形態において、より複雑/低速のエントロピー符号器と本明細書に記載するようなより簡素な符号器との間の切替えのために論理を提供してもよい。例えば、図9を参照すると、リモートプレゼンテーションシステムでは、少なくとも2つの符号器910および920を提供してよい。符号器910は、RLGRを実装するものなど複雑なエントロピー符号器であってよい。符号器920は、本開示に従う簡素化された符号器であってよい。ネットワーク930の条件により、システムは符号器910または920のうちの1つを選択してデータ900を符号化してよい。例えば、ネットワーク条件が、ネットワークが過密状態であること、および、利用可能な帯域幅が制限されていることを示す場合、ネットワーク930を介して送信されるデータ量を最小限にする目的で、複雑な符号器910をデータ900の符号化のために選択してよい。同様に、ネットワーク条件が、ネットワークが過密状態ではないことを示す場合、クライアントにおいてより高速なプロセッサパフォーマンスを提供する目的で、簡素化された符号器910をデータ900の符号化のために選択してよい。
付録Aでは、本開示に従う、簡素化された符号器の例示の実装を提供する。
図10は、動作1000、1002、1004および1006を含む、クライアントコンピュータへの送信のためにグラフィックデータを処理する例示の動作手順を示す。図10を参照すると、動作1000で動作手順を開始し、動作1002では、仮想マシンセッションに関連するクライアント画面を表現するグラフィックデータを受けるステップを例示する。動作1004では、前記送信に利用可能な帯域幅を示す情報を受け取り、この情報に基づき、利用可能な帯域幅が所定の閾値を満たすことを判定するステップを例示する。動作1006では、バイト境界に整列したビットトークンのコンパクトなストリームを使用して、変換されたグラフィックデータの係数をエントロピー符号化するステップを例示する。一実施形態において、連続するゼロが量子サイズの可変個の倍数に符号化され、リテラル値が、直近に使用されたリテラル値のキャッシュ内のエントリを使用して符号化され、他の値は量子サイズの最少個の倍数を使用して符号化される。ビットトークンは、データのユニットを定義するビット列であってよい。例えば、ニブルベースのシステムでは4ビットトークンが使用される。
種々の実施形態において、量子サイズをニブルとしてもよい。いくつかの実施形態において、動作手順には、エントロピー符号化演算コードのストリームおよび大きな値のストリームを生成するステップを含んでよい。手順には、大きな値より小さな値に対して少ないバイトを使用するというマルチバイト符号化スキームを用いて、大きな値のストリームをエントロピー符号化するステップ、前記グラフィックデータをデータタイルに分割するステップ、前記データタイルをタイル構成要素に処理するステップ、および前記エントロピー符号化を前記タイル構成要素に対して実行するステップを含んでよい。符号化スキームを、固定バイト境界上でのみ動作するべく構成してよい。
図11は、上述のようなクライアントコンピュータへの送信のためにグラフィックデータを処理する例示のシステムを示す。図11を参照すると、システム1100は、プロセッサ1110およびメモリ1120を備える。メモリ1120は、リモートコンピュータ装置への送信のためにグラフィックデータを処理するべく構成されるコンピュータ命令をさらに備える。ブロック1122は、仮想マシンセッションに関連するクライアント画面を表すグラフィックデータを受け取るステップを例示する。ブロック1124は、前記グラフィックデータをデータタイルに分割するステップを例示する。ブロック1126は、バイト境界に整列されたビットトークンのストリームを使用して、変換されたデータタイルの係数をエントロピー符号化するステップを例示する。
上述の態様のいずれも、方法、システム、コンピュータ可読媒体、または任意のタイプの製品において実装可能である。例えば、コンピュータ可読媒体には、クライアントコンピュータへの送信のためにグラフィックデータを処理するコンピュータ実行可能命令を記憶させることができる。そのような媒体は、仮想マシンセッションに関連するクライアント画面を表現するグラフィックデータを受け取るための命令の第1のサブセット、および符号化されたデータをバイトベースの復号化プロセスを使用して復号化できるようにするために、バイト境界に整列したビットトークンのコンパクトなストリームを使用して、変換されたグラフィックデータの係数をエントロピー符号化するための命令の第2のサブセットを備えることができる。当業者は理解するであろうが、追加の命令セットを使用して本明細書に記載した種々の他の態様を獲得することが可能であり、また、目下開示している2つ命令サブセットは本開示を通じて詳細を変更可能である。
上述の詳細な記載では、例および/または動作図を通じてシステムおよび/またはプロセスの種々の実施形態を記述した。そのようなブロック図および/または例が、1つまたは複数の機能および/または動作を含有する限りにおいて、そのようなブロック図もしくは例の内の各機能および/または動作が、個々におよび/または集合的に、広範囲にハードウェア、ソフトウェア、ファームウェア、または仮想的にその任意の組み合わせにより実行可能であることは、当業者により理解されるであろう。
本明細書に記載した種々の技術を、ハードウェアもしくはソフトウェアに関連して、または適切な場合にはその両方の組み合わせに関連して実装して良いことは、理解されるべきである。従って、本開示の方法および装置、または特定の態様もしくはその一部は、フロッピーディスク、CD−ROM、ハードドライブ、または任意の他のマシン可読記憶媒体などの有形の媒体において具現化されるプログラムコード(すなわち命令)の形式をとってよく、プログラムコードがコンピュータなどのマシンにロードされてマシンにより実行されると、マシンが本開示を実践するための装置となる。プログラム可能なコンピュータ上でプログラムコードが実行される場合、コンピュータ装置には、一般的にプロセッサ、プロセッサが可読の記憶媒体(揮発性および不揮発性のメモリおよび/または記憶素子を含む)、少なくとも1つの入力装置、および少なくとも1つの出力装置を含む。1つまたは複数のプログラムが、例えば、API(application programming interface)、再利用可能制御などの使用を介して、本開示に関連して記載したプロセスを実装または利用してよい。そのようなプログラムは、好ましくは高レベルの手続き型またはオブジェクト指向のプログラミング言語で実装されて、コンピュータシステムと通信を行う。しかし、プログラム(複数可)は必要に応じてアセンブリ言語または機械語で実装することが可能である。いずれの場合も、言語はコンパイラ型言語またはインタープリタ型言語であってよく、ハードウェア実装と組み合わせてもよい。
本発明をその好適な実施形態を参照して具体的に示し記載したが、以下の請求の範囲において記載する本発明の範囲から逸脱することなく、形式および詳細における種々の変更がなされてよいことは当業者により理解されるであろう。さらに、本発明の要素を単数形で記載および特許請求していても、単数形に制限することが明示的に記載されない限り、複数であることを考慮している。

Claims (10)

  1. リモートコンピュータ装置への送信のためにグラフィックデータを処理する方法であって、
    仮想マシンセッションに関連するクライアント画面を表現するグラフィックデータを受けるステップと、
    前記送信に利用可能な帯域幅を示す情報を受け取り、前記情報に基づき、前記利用可能な帯域幅が所定の閾値を満たすことを判定するステップと、
    バイト境界に整列するグループを形成するビットトークンのコンパクトなストリームを使用して、変換されたグラフィックデータの係数をエントロピー符号化するステップであって、
    連続するゼロが量子サイズの可変個の倍数に符号化され、
    リテラル値が、直近に使用されたリテラル値のキャッシュ内のエントリを使用して符号化され、
    他の値が前記量子サイズの最少個の倍数を使用して符号化される
    ステップと
    を含むことを特徴とする方法。
  2. エントロピー符号化演算コードのストリームおよび大きな値のストリームを生成するステップをさらに含むことを特徴とする請求項1に記載の方法。
  3. 大きな値より小さな値に対して少ないバイトを使用するというマルチバイト符号化スキームを用いて、前記大きな値のストリームをエントロピー符号化するステップをさらに含むことを特徴とする請求項2に記載の方法。
  4. 前記符号化スキームを固定バイト境界上でのみ動作するべく構成することを特徴とする請求項3に記載の方法
  5. 前記グラフィックデータをデータタイルに分割するステップと、前記データタイルをタイル構成要素に処理するステップと、前記エントロピー符号化を前記タイル構成要素に対して実行するステップとをさらに含むことを特徴とする請求項3に記載の方法。
  6. リモートコンピュータ装置への送信のためにグラフィックデータを処理するシステムであって、
    少なくとも1つのプロセッサを含むコンピュータ装置と、
    前記システムが動作可能である時に、前記プロセッサに通信可能に連結されるメモリであって、前記少なくとも1つのプロセッサにより実行されると、前記プロセッサに
    仮想マシンセッションに関連するクライアント画面を表現するグラフィックデータを受けるステップと、
    前記グラフィックデータをデータタイルに分割するステップと、
    バイト境界に整列するグループを形成するビットトークンのストリームを使用して、変換されたデータタイルの係数をエントロピー符号化するステップであって、
    連続するゼロが量子サイズの可変個の倍数に符号化され、
    リテラル値が、直近に使用されたリテラル値のキャッシュ内のエントリを使用して符号化され、
    他の値が前記量子サイズの最少個のユニットを使用して符号化される
    ステップと
    を実行させるコンピュータ命令を記憶したメモリと
    を備えることを特徴とするシステム。
  7. 前記符号化された係数を、前記符号化された係数を前記量子サイズに基づき処理するべく構成されたコンピュータ装置に送信するステップをさらに含むことを特徴とする請求項6に記載のシステム。
  8. 前記符号化されたデータが、前記符号化されたデータに対してバイトごとに動作するべく構成されたエントロピー復号化プロセスによる効率的な復号のために、演算可能であることを特徴とする請求項6に記載のシステム。
  9. 大きな値より小さな値に対して少ないバイトを使用するというマルチバイト符号化スキームを用いて、大きな値のストリームをエントロピー符号化するステップをさらに含むことを特徴とする請求項6に記載のシステム。
  10. クライアントコンピュータへの送信のためにグラフィックデータを処理するコンピュータ実行可能命令を記憶するコンピュータ可読記憶媒体であって、前記命令が、
    仮想マシンセッションに関連するクライアント画面を表現するグラフィックデータを受けるステップと、
    符号化されたデータをバイトベースの復号化プロセスを使用して復号化できるようにするために、バイト境界に整列するグループを形成するビットトークンのコンパクトなストリームを使用して、変換されたグラフィックデータの係数をエントロピー符号化するステップであって、
    連続するゼロがニブルの可変個の倍数に符号化され、
    リテラル値が、直近に使用されたリテラル値のキャッシュ内のエントリを使用して符号化され、
    他の値がニブルの最少個の倍数を使用して符号化される
    ステップと
    に対する命令であることを特徴とする記憶媒体。
JP2013531627A 2010-09-30 2011-09-14 画像圧縮のためのエントロピーコーダー Pending JP2013541295A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/894,793 US20120082395A1 (en) 2010-09-30 2010-09-30 Entropy Coder for Image Compression
US12/894,793 2010-09-30
PCT/US2011/051660 WO2012050722A2 (en) 2010-09-30 2011-09-14 Entropy coder for image compression

Publications (2)

Publication Number Publication Date
JP2013541295A true JP2013541295A (ja) 2013-11-07
JP2013541295A5 JP2013541295A5 (ja) 2014-10-30

Family

ID=45889897

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013531627A Pending JP2013541295A (ja) 2010-09-30 2011-09-14 画像圧縮のためのエントロピーコーダー

Country Status (10)

Country Link
US (1) US20120082395A1 (ja)
EP (1) EP2622507A4 (ja)
JP (1) JP2013541295A (ja)
KR (1) KR20140006778A (ja)
CN (1) CN102523443A (ja)
AU (1) AU2011314228B2 (ja)
BR (1) BR112013007612A2 (ja)
CA (1) CA2812740A1 (ja)
MX (1) MX2013003615A (ja)
WO (1) WO2012050722A2 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8886699B2 (en) * 2011-01-21 2014-11-11 Cloudium Systems Limited Offloading the processing of signals
US11935190B2 (en) 2012-06-10 2024-03-19 Apple Inc. Representing traffic along a route
US10119831B2 (en) 2012-06-10 2018-11-06 Apple Inc. Representing traffic along a route
CN102833583B (zh) * 2012-07-27 2015-07-01 北京视博云科技有限公司 一种视频图像的处理方法及装置
KR101597637B1 (ko) * 2013-09-02 2016-02-29 주식회사 쏠리드 Fpga 이미지 다운로드시 네트워크 부하를 경감하기 위한 압축 방법
US10007612B2 (en) * 2015-10-21 2018-06-26 Dell Products L.P. Systems and methods for pre-population of graphics image cache in virtual desktop environment
US9990691B2 (en) * 2016-02-17 2018-06-05 Intel Corporation Ray compression for efficient processing of graphics data at computing devices
US9875076B1 (en) * 2016-07-26 2018-01-23 Wyse Technology L.L.C. Remoting client having GPU off-loader
GB2567427B (en) * 2017-10-06 2020-10-07 Imagination Tech Ltd Data compression
US11366738B2 (en) * 2018-03-12 2022-06-21 Headspin, Inc. System to determine performance based on entropy values
WO2019200141A1 (en) * 2018-04-12 2019-10-17 Google Llc Vertex split connectivity prediction for improved progressive mesh compression
US11256528B2 (en) * 2018-10-26 2022-02-22 Nvidia Corporation Individual application window streaming suitable for remote desktop applications
CN115460182A (zh) * 2021-05-21 2022-12-09 华为技术有限公司 编解码方法、装置、设备、存储介质及计算机程序

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10500273A (ja) * 1995-02-03 1998-01-06 フィリップス エレクトロニクス ネムローゼ フェンノートシャップ ビデオ画像カラーエンコーディング
JPH11317673A (ja) * 1998-05-07 1999-11-16 Ricoh Co Ltd ランレングス符号化方法及び復号化方法
JP2000509212A (ja) * 1995-10-19 2000-07-18 ジョンソングレース カンパニー 二次元データ圧縮装置および方法
US20030179937A1 (en) * 2002-01-09 2003-09-25 Brake Wilfred F. Method for using a JPEG engine to assist in efficiently constructing MPEG I-frames
JP2007507182A (ja) * 2003-09-25 2007-03-22 ピアレス・システムズ・コーポレーション 分割式ランレングス符号化方法および装置
JP2007214997A (ja) * 2006-02-10 2007-08-23 Fuji Xerox Co Ltd 符号化装置、復号化装置、符号化方法、復号化方法、及びプログラム
JP2010509840A (ja) * 2006-11-09 2010-03-25 マイクロソフト コーポレーション 電子情報の効率的符号化及び復号化システム及びその方法
WO2010050924A1 (en) * 2008-10-27 2010-05-06 Micro Motion, Inc. Method and apparatus for compressing and decompressing data records
US20100111410A1 (en) * 2008-10-30 2010-05-06 Microsoft Corporation Remote computing platforms providing high-fidelity display and interactivity for clients
US20100226441A1 (en) * 2009-03-06 2010-09-09 Microsoft Corporation Frame Capture, Encoding, and Transmission Management

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5784631A (en) * 1992-06-30 1998-07-21 Discovision Associates Huffman decoder
US5689255A (en) * 1995-08-22 1997-11-18 Hewlett-Packard Company Method and apparatus for compressing and decompressing image data
US6618506B1 (en) * 1997-09-23 2003-09-09 International Business Machines Corporation Method and apparatus for improved compression and decompression
US6356660B1 (en) * 1997-10-15 2002-03-12 Hewlett-Packard Co. Method for compressing raster data
US6298164B1 (en) * 1998-10-02 2001-10-02 Canon Kabushiki Kaisha PCL conversion of JETSEND images
US20020026391A1 (en) * 2000-07-13 2002-02-28 Laster Scott A. Method and system for collecting rich inventory via computer system
CN101448162B (zh) * 2001-12-17 2013-01-02 微软公司 处理视频图像的方法
US7373008B2 (en) * 2002-03-28 2008-05-13 Hewlett-Packard Development Company, L.P. Grayscale and binary image data compression
US7016547B1 (en) * 2002-06-28 2006-03-21 Microsoft Corporation Adaptive entropy encoding/decoding for screen capture content
US7606314B2 (en) * 2002-08-29 2009-10-20 Raritan America, Inc. Method and apparatus for caching, compressing and transmitting video signals
US7039247B2 (en) * 2003-01-31 2006-05-02 Sony Corporation Graphic codec for network transmission
TW595124B (en) * 2003-10-08 2004-06-21 Mediatek Inc Method and apparatus for encoding video signals
US7602850B2 (en) * 2003-12-19 2009-10-13 Intel Corporation Content adaptive variable length coding (CAVLC) decoding
US7471840B2 (en) * 2004-08-18 2008-12-30 Cisco Technology, Inc. Two-dimensional variable length coding of runs of zero and non-zero transform coefficients for image compression
US20060176953A1 (en) * 2005-02-04 2006-08-10 Nader Mohsenian Method and system for video encoding with rate control
US20060195464A1 (en) * 2005-02-28 2006-08-31 Microsoft Corporation Dynamic data delivery
US8171169B2 (en) * 2005-03-14 2012-05-01 Citrix Systems, Inc. Method and apparatus for updating a graphical display in a distributed processing environment
US7822278B1 (en) * 2005-09-20 2010-10-26 Teradici Corporation Methods and apparatus for encoding a digital video signal
US8135071B2 (en) * 2007-01-16 2012-03-13 Cisco Technology, Inc. Breakpoint determining for hybrid variable length coding using relationship to neighboring blocks
US7827237B2 (en) * 2007-03-12 2010-11-02 Citrix Systems, Inc. Systems and methods for identifying long matches of data in a compression history
US7501964B2 (en) * 2007-04-16 2009-03-10 Texas Instruments Incorporated Entropy coding for digital codecs
US7605721B2 (en) * 2007-11-30 2009-10-20 Red Hat, Inc. Adaptive entropy coding compression output formats
US20100225655A1 (en) * 2009-03-06 2010-09-09 Microsoft Corporation Concurrent Encoding/Decoding of Tiled Data
US20110052087A1 (en) * 2009-08-27 2011-03-03 Debargha Mukherjee Method and system for coding images
US8255528B2 (en) * 2009-12-23 2012-08-28 Citrix Systems, Inc. Systems and methods for GSLB spillover

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10500273A (ja) * 1995-02-03 1998-01-06 フィリップス エレクトロニクス ネムローゼ フェンノートシャップ ビデオ画像カラーエンコーディング
JP2000509212A (ja) * 1995-10-19 2000-07-18 ジョンソングレース カンパニー 二次元データ圧縮装置および方法
JPH11317673A (ja) * 1998-05-07 1999-11-16 Ricoh Co Ltd ランレングス符号化方法及び復号化方法
US20030179937A1 (en) * 2002-01-09 2003-09-25 Brake Wilfred F. Method for using a JPEG engine to assist in efficiently constructing MPEG I-frames
JP2007507182A (ja) * 2003-09-25 2007-03-22 ピアレス・システムズ・コーポレーション 分割式ランレングス符号化方法および装置
JP2007214997A (ja) * 2006-02-10 2007-08-23 Fuji Xerox Co Ltd 符号化装置、復号化装置、符号化方法、復号化方法、及びプログラム
JP2010509840A (ja) * 2006-11-09 2010-03-25 マイクロソフト コーポレーション 電子情報の効率的符号化及び復号化システム及びその方法
WO2010050924A1 (en) * 2008-10-27 2010-05-06 Micro Motion, Inc. Method and apparatus for compressing and decompressing data records
US20100111410A1 (en) * 2008-10-30 2010-05-06 Microsoft Corporation Remote computing platforms providing high-fidelity display and interactivity for clients
US20100226441A1 (en) * 2009-03-06 2010-09-09 Microsoft Corporation Frame Capture, Encoding, and Transmission Management

Also Published As

Publication number Publication date
RU2013114349A (ru) 2014-10-10
EP2622507A4 (en) 2015-08-26
WO2012050722A3 (en) 2012-07-19
US20120082395A1 (en) 2012-04-05
WO2012050722A2 (en) 2012-04-19
AU2011314228B2 (en) 2014-07-31
CN102523443A (zh) 2012-06-27
BR112013007612A2 (pt) 2019-09-24
EP2622507A2 (en) 2013-08-07
CA2812740A1 (en) 2012-04-19
AU2011314228A1 (en) 2013-03-28
KR20140006778A (ko) 2014-01-16
MX2013003615A (es) 2013-05-09

Similar Documents

Publication Publication Date Title
JP2013541295A (ja) 画像圧縮のためのエントロピーコーダー
US9075560B2 (en) Real-time compression with GPU/CPU
US10542301B2 (en) Multimedia redirection method, device, and system
US8638337B2 (en) Image frame buffer management
US9146884B2 (en) Push pull adaptive capture
US10555010B2 (en) Network-enabled graphics processing module
US8760453B2 (en) Adaptive grid generation for improved caching and image classification
US9235452B2 (en) Graphics remoting using augmentation data
US10002403B2 (en) Command remoting
US20100013839A1 (en) Integrated GPU, NIC and Compression Hardware for Hosted Graphics
US20120075346A1 (en) Low Complexity Method For Motion Compensation Of DWT Based Systems
US10699361B2 (en) Method and apparatus for enhanced processing of three dimensional (3D) graphics data
US20100225655A1 (en) Concurrent Encoding/Decoding of Tiled Data
US11005496B2 (en) Multi-mode compression acceleration
WO2011126712A2 (en) Classification and encoder selection based on content
JP2012523176A (ja) 複数のプロセッサを用いた画像圧縮の加速
JP7077396B2 (ja) ビデオエンコードの延期されたポストプロセスのためのシステムおよび方法
US10237566B2 (en) Video decoding using point sprites
CN115767161A (zh) 一种视频播放方法、装置、计算机设备及存储介质
RU2575679C2 (ru) Энтропийный кодер для сжатия изображения
CN116599942A (zh) 一种虚拟桌面的图像处理方法、装置、服务端和存储介质

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140908

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140908

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20150523

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151013

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151020

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20160315