JP2015029309A - 単一命令複数ティスパッチ命令を使用するリモートデスクトッププロトコル圧縮アクセラレーション - Google Patents
単一命令複数ティスパッチ命令を使用するリモートデスクトッププロトコル圧縮アクセラレーション Download PDFInfo
- Publication number
- JP2015029309A JP2015029309A JP2014184067A JP2014184067A JP2015029309A JP 2015029309 A JP2015029309 A JP 2015029309A JP 2014184067 A JP2014184067 A JP 2014184067A JP 2014184067 A JP2014184067 A JP 2014184067A JP 2015029309 A JP2015029309 A JP 2015029309A
- Authority
- JP
- Japan
- Prior art keywords
- processor
- image
- pixels
- data
- instructions
- 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.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N1/00—Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
- H04N1/46—Colour picture communication systems
- H04N1/64—Systems for the transmission or the storage of the colour picture signal; Details therefor, e.g. coding or decoding means therefor
- H04N1/646—Transmitting or storing colour television type signals, e.g. PAL, Lab; Their conversion into additive or subtractive colour signals or vice versa therefor
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
- Image Processing (AREA)
- Compression Of Band Width Or Redundancy In Fax (AREA)
- Advance Control (AREA)
Abstract
【解決手段】RGBAフォーマットのソース画像が受信され、一連のベクトルプロセッサ命令を使用して、その画像を個々のR、G、B、Aチャネルに分割する並列処理ステップを行って、次に、それをYCoCg色空間に変換してY、Co、Cgチャネルにそれぞれ圧縮して、次に、そのソース画像の圧縮バージョンに対応する出力画像を記録する。
【選択図】図2
Description
実施形態において、これは、解凍動作と同類(sibling)である。つまり、その解凍動作中に導入された8つのゼロのグループを廃棄する。
以下は、ハイレベルなC言語プログラミングのシンタックスにおけるサンプル擬似コードを備え、ベクトルプロセッサ上で実行される時、図2の詳細な説明で説明したのと同様に本開示の実施形態の方法において、ソース画像“srcImage”に動作する。
NSTestCompress(
NSBitmap& srcImage,
PBYTE pOutputBuf,
ULONG cbMaxOutbufSize,
PBYTE pYBuffer,
PBYTE pCoBuffer,
PBYTE pCgBuffer,
ULONG cbPlaneOutputSize,
PBYTE pWorkBuf,
ULONG cbWorkBuf)
{
BOOL bSubSample = NS_SUBSAMPLE;
// We operate 4 pixels at a time
//
// P0 = R0G0B0A0
// P1 = R1G1B1A1
// P2 = R2G2B2A2
// P3 = R3G3B3A3
//
// First we planarize as follows using CPU
// Rn = R0R1R2R3
// Gn = G0G1G2G3
// Gn
//
//
//
// 16-byte align the output buffer
pYBuffer = (PBYTE)(XROUND_UP_16((ULONG)pYBuffer));
pCoBuffer = (PBYTE)(XROUND_UP_16((ULONG)pCoBuffer));
pCgBuffer = (PBYTE)(XROUND_UP_16((ULONG)pCgBuffer));
PBYTE pYBufferOrig = pYBuffer;
PBYTE pCoBufferOrig = pCoBuffer;
PBYTE pCgBufferOrig = pCgBuffer;
//
// 1) Prep the data by splitting planes
//
PBYTE pRbuffer, pGbuffer, pBbuffer;
//
// 16-byte align channels for SSE perf
//
ULONG cbColorChannelSpace = XROUND_UP_16(srcImage._height * srcImage._width);
if (cbColorChannelSpace * 3 > cbWorkBuf) {
return 0;
}
pRbuffer = pWorkBuf;
pGbuffer = pRbuffer + cbColorChannelSpace;
pBbuffer = pGbuffer + cbColorChannelSpace;
PBYTE pSrcPixel;
PBYTE pEndPixel;
ULONG* pRBufferDWORD = (ULONG*)XROUND_UP_16((ULONG)pRbuffer);
ULONG* pGBufferDWORD = (ULONG*)XROUND_UP_16((ULONG)pGbuffer);
ULONG* pBBufferDWORD = (ULONG*)XROUND_UP_16((ULONG)pBbuffer);
//
// 1) PLANARIZE - EFFICIENT
//
pSrcPixel = srcImage._pImgBits;
pEndPixel = pSrcPixel + srcImage._height* srcImage._stride;
while (pSrcPixel < pEndPixel) {
*pRBufferDWORD++ = X_MAKE_DWORD(pSrcPixel[0], pSrcPixel[4], pSrcPixel[8], pSrcPixel[12]);
*pGBufferDWORD++ = X_MAKE_DWORD(pSrcPixel[1+0], pSrcPixel[1+4], pSrcPixel[1+8], pSrcPixel[1+12]);
*pBBufferDWORD++ = X_MAKE_DWORD(pSrcPixel[2+0], pSrcPixel[2+4], pSrcPixel[2+8], pSrcPixel[2+12]);
pSrcPixel+=16;
}
//
// 2 Compute Y Coefficients
//
__m128i xmmZero = _mm_setzero_si128();
__m128i xmmRvect, xmmGvect, xmmBvect;
__m128i xmmYFirstQWORD, xmmCoFirstQWORD;
PBYTE pRbufferReader = pRbuffer;
PBYTE pGbufferReader = pGbuffer;
PBYTE pBbufferReader = pBbuffer;
PBYTE pBbufferReaderEnd = (pRbuffer + cbColorChannelSpace);
__m128i xmm1, xmm2, xmm3, xmmCo, xmmY, xmmCg;
__m128i xmmCo2, xmmY2, xmmCg2;
__m128i xmmChromaMask = _mm_set_epi16(0x1ff >> X_COLOR_LOSS_LEVEL,
0x1ff >> X_COLOR_LOSS_LEVEL,
0x1ff >> X_COLOR_LOSS_LEVEL,
0x1ff >> X_COLOR_LOSS_LEVEL,
0x1ff >> X_COLOR_LOSS_LEVEL,
0x1ff >> X_COLOR_LOSS_LEVEL,
0x1ff >> X_COLOR_LOSS_LEVEL,
0x1ff >> X_COLOR_LOSS_LEVEL);
while (pRbufferReader < pBbufferReaderEnd) {
//
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// First 64-bits in parallel
//
//
// Read color vectors
//
xmmRvect = _mm_loadl_epi64((__m128i*)pRbufferReader);
xmmGvect = _mm_loadl_epi64((__m128i*)pGbufferReader);
xmmBvect = _mm_loadl_epi64((__m128i*)pBbufferReader);
pRbufferReader += 8;
pGbufferReader += 8;
pBbufferReader += 8;
// unpack to R 0 G 0 B 0 (16 bits per channel to make math per
//16 bit possible)
xmmRvect = _mm_unpacklo_epi8(xmmRvect, xmmZero);
xmmGvect = _mm_unpacklo_epi8(xmmGvect, xmmZero);
xmmBvect = _mm_unpacklo_epi8(xmmBvect, xmmZero); i
// NOTE 3
// co = r - b;
// y = b + (co >> 1);
// cg = g - y;
// y += (cg >> 1);
xmmCo = _mm_subs_epi16(xmmRvect, xmmBvect);// co = R - B
xmm1 = _mm_srai_epi16(xmmCo, 1); // co >> 1
xmmY = _mm_adds_epi16(xmmBvect, xmm1); // y = b + co >> 1
xmmCg = _mm_subs_epi16(xmmGvect, xmmY); // cg = g - y
xmm1 = _mm_srai_epi16(xmmCg, 1); // cg >> 1
xmmY = _mm_adds_epi16(xmmY, xmm1); // y += cg >> 1
// Now do masks on Co and Cg
xmmCo = _mm_srai_epi16(xmmCo, X_COLOR_LOSS_LEVEL);
xmmCo = _mm_and_si128(xmmCo, xmmChromaMask);
xmmCg = _mm_srai_epi16(xmmCg, X_COLOR_LOSS_LEVEL);
xmmCg = _mm_and_si128(xmmCg, xmmChromaMask);
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Second 64-bits
//
//
//
xmmRvect = _mm_loadl_epi64((__m128i*)pRbufferReader);
xmmGvect = _mm_loadl_epi64((__m128i*)pGbufferReader);
xmmBvect = _mm_loadl_epi64((__m128i*)pBbufferReader);
pRbufferReader += 8;
pGbufferReader += 8;
pBbufferReader += 8;
// unpack to R 0 G 0 B 0 (16 bits per channel to make math per
//16 bit possible)
xmmRvect = _mm_unpacklo_epi8(xmmRvect, xmmZero);
xmmGvect = _mm_unpacklo_epi8(xmmGvect, xmmZero);
xmmBvect = _mm_unpacklo_epi8(xmmBvect, xmmZero);
//
// co = r - b;
// y = b + (co >> 1);
// cg = g - y;
// y += (cg >> 1);
xmmCo2 = _mm_subs_epi16(xmmRvect, xmmBvect);// co = R - B
xmm1 = _mm_srai_epi16(xmmCo2, 1); // co >> 1
xmmY2 = _mm_adds_epi16(xmmBvect, xmm1); // y = b + co >> 1
xmmCg2 = _mm_subs_epi16(xmmGvect, xmmY2); // cg = g - y
xmm1 = _mm_srai_epi16(xmmCg2, 1); // cg >> 1
xmmY2 = _mm_adds_epi16(xmmY2, xmm1); // y += cg >> 1
// Now do masks on Co and Cg
xmmCo2 = _mm_srai_epi16(xmmCo2, X_COLOR_LOSS_LEVEL);
xmmCo2 = _mm_and_si128(xmmCo2, xmmChromaMask);
xmmCg2 = _mm_srai_epi16(xmmCg2, X_COLOR_LOSS_LEVEL);
xmmCg2 = _mm_and_si128(xmmCg2, xmmChromaMask);
//
// Now do storage
//
// Y component - pack into 16-bytes
xmmY = _mm_packs_epi16(xmmY, xmmY2);
_mm_store_si128((__m128i*)pYBuffer, xmmY); //stores in one shot
pYBuffer += 16;
// Co component - pack into 16-bytes
xmmCo = _mm_packs_epi16(xmmCo, xmmCo2);
_mm_store_si128((__m128i*)pCoBuffer, xmmCo);
pCoBuffer += 16;
// Cg component - pack into 16-bytes
xmmCg = _mm_packs_epi16(xmmCg, xmmCg2);
_mm_store_si128((__m128i*)pCgBuffer, xmmCg);
pCgBuffer += 16;
}
//
// Now do the ACRUSH magic on each channel!;
//
ULONG retVal;
if (!g_pACContext) {
g_cbACContextSize = RDPCompress_GetContextSize(PACKET_COMPR_TYPE_ACRUSH);
g_pACContext = malloc(g_cbACContextSize);
RDPCompress_InitSendContext(g_pACContext, g_cbACContextSize, PACKET_COMPR_TYPE_ACRUSH);
}
ULONG cbCompressedSize;
ULONG cbOrigSize;
//
// Do Y Channel
//
cbCompressedSize = cbColorChannelSpace;
ULONG cbOutSizeTotal = 0;
PBYTE pCurWriteOutput = pOutputBuf;
//
// ~~~~~~~~~~~~~~~~~~ Y component ~~~~~~~~~~~~~
//
pYBufferOrig,
pCurWriteOutput,
&cbCompressedSize,
g_pACContext);
/// printf("Y: run=%d compr=%d\n", cbRunLength, cbCompressedSize);
if (retVal & PACKET_COMPRESSED) {
cbOutSizeTotal += cbCompressedSize;
}
else {
memcpy(pCurWriteOutput, pYBufferOrig, cbColorChannelSpace);
cbOutSizeTotal += cbColorChannelSpace;
}
pCurWriteOutput += cbOutSizeTotal;
//
// ~~~~~~~~~~~~~~~~~~ Co component ~~~~~~~~~~~~~
//
//
// Downsample CO
//
if (bSubSample) {
ULONG cbSubSampleSize;
cbSubSampleSize = NSSubSample2xColorChannelSSE(pCoBufferOrig, cbColorChannelSpace, srcImage._width, srcImage._height,
pWorkBuf, cbWorkBuf);
pCoBufferOrig = pWorkBuf;
cbCompressedSize = cbSubSampleSize;
}
else {
cbCompressedSize = cbColorChannelSpace;
}
retVal = XRDPCompress(PACKET_COMPR_TYPE_ACRUSH,
pCoBufferOrig,
pCurWriteOutput,
&cbCompressedSize,
g_pACContext);
if (retVal & PACKET_COMPRESSED) {
cbOutSizeTotal += cbCompressedSize;
}
else {
memcpy(pCurWriteOutput, pCoBufferOrig, cbColorChannelSpace);
cbOutSizeTotal += cbColorChannelSpace;
}
pCurWriteOutput += cbCompressedSize;
//
// ~~~~~~~~~~~~~~~~~~ Cg component ~~~~~~~~~~~~~ //exactly same as Co
//
// Downsample CO
//
if (bSubSample) {
ULONG cbSubSampleSize;
cbSubSampleSize = NSSubSample2xColorChannelSSE(pCgBufferOrig, cbColorChannelSpace, srcImage._width, srcImage._height,
pWorkBuf, cbWorkBuf);
pCgBufferOrig = pWorkBuf;
cbCompressedSize = cbSubSampleSize;
}
else {
cbCompressedSize = cbColorChannelSpace;
retVal = XRDPCompress(PACKET_COMPR_TYPE_ACRUSH,
pCgBufferOrig,
pCurWriteOutput,
&cbCompressedSize,
g_pACContext);
if (retVal & PACKET_COMPRESSED) {
cbOutSizeTotal += cbCompressedSize;
}
else {
memcpy(pCurWriteOutput, pCgBufferOrig, cbColorChannelSpace);
cbOutSizeTotal += cbColorChannelSpace;
}
pCurWriteOutput += cbCompressedSize;
return cbOutSizeTotal;
}
NSSubSample2xColorChannelSSE(
PBYTE pSrcBytes,
ULONG cbLength,
ULONG width,
ULONG height,
PBYTE pOutputBytes,
ULONG cbMaxOutputLen
)
{
PBYTE pEndData = pSrcBytes + width*height;
__m128i xmmZero = _mm_setzero_si128();
ULONG* pOutputWriter = (ULONG*)pOutputBytes;
//
// Fix fix no uniform row
//
for (ULONG i=0; i<height-1; i++) {
PBYTE pCurrentRow = pSrcBytes + width * i;
PBYTE pRowEnd = pCurrentRow + width;
__m128i srcDataRow0;
__m128i xmm1;
__m128i srcDataRow1;
while (pCurrentRow < pRowEnd) {
srcDataRow0 = _mm_loadl_epi64((__m128i*)pCurrentRow);
srcDataRow1 = _mm_loadl_epi64((__m128i*)(pCurrentRow+width));
pCurrentRow += 8;
//
// Unpack to 16-bit values
//
srcDataRow0 = _mm_unpacklo_epi8(srcDataRow0, xmmZero);
srcDataRow1 = _mm_unpacklo_epi8(srcDataRow1, xmmZero);
//
// Add with saturate row1+row2
//
srcDataRow0 = _mm_adds_epi16(srcDataRow0, srcDataRow1);
//
//make a copy shuffled to swap each WORD
//
xmm1 = _mm_shufflelo_epi16(srcDataRow0, _MM_SHUFFLE(2,3,0,1));
//
// Now add the alternating cols
//
xmm1 = _mm_adds_epi16(xmm1, srcDataRow0);
xmm1 = _mm_srai_epi16(xmm1, 2);
xmm1 = _mm_shufflehi_epi16(xmm1, _MM_SHUFFLE(3,1,2,0));
xmm1 = _mm_shufflelo_epi16(xmm1, _MM_SHUFFLE(3,1,2,0));
// bring together the unique values in the 2-LOWDWORDS
xmm1 = _mm_shuffle_epi32(xmm1, _MM_SHUFFLE(3,1,2,0));
//
// We now have
// (P00+P01+P10+P11) (P00+P01+P10+P11)
// (P02+P03+P12+P13)(P02+P03+P12+P13)
// net every other 16-bit value is redundant - pack away now
//
xmm1 = _mm_packs_epi16(xmm1, xmmZero);
// low 4 bytes are the averages we want
*pOutputWriter++ = *((ULONG*)&xmm1);
}
}
return cbLength / 4;
}
Claims (16)
- ベクトル処理をサポートするプロセッサ上で各ピクセルが赤―緑―青(RGB)画像データを備えるピクセルを含むソース画像を圧縮するための方法であって、
一連のプロセッサ命令を前記プロセッサに送信することによって前記画像をそのR、G、およびBコンポーネントに分離するステップであって、8つのゼロのシーケンスを前記R、G、およびBコンポーネントのそれぞれの8ビットの前に挿入することを含み、各プロセッサ命令は複数のピクセルのデータに同時に動作するステップと、
一連のプロセッサ命令を前記プロセッサに送信することによって前記分離された画像を輝度―オレンジ―緑(YCoCg)画像データに変換するステップであって、各プロセッサ命令は複数のピクセルのデータに同時に動作するステップと、
一連のプロセッサ命令を前記プロセッサに送信することによって前記YCoCg画像のCoおよびCgコンポーネントを圧縮するステップであって、各プロセッサ命令は複数のピクセルのデータに同時に動作するステップと、
前記圧縮画像データを記憶するステップと
を備えることを特徴とする方法。 - 前記圧縮画像データのCoおよびCgコンポーネントをサブサンプリングするステップをさらに備えることを特徴とする請求項1に記載の方法。
- 前記サブサンプリングは、
前記圧縮画像データを、4ピクセルからなる少なくとも1つのクアッドにセグメント化するステップと、
各クワッドの各行を解凍するステップと、
各クワッドの上部行と下部行とを和することによって、合わされた行を作り出すステップであって、前記上部行内のピクセルと前記下部行内のピクセルとの和が飽和値を越える時、前記上部行内のピクセルと前記下部行内のピクセルとの和を前記飽和値に設定するステップと、
各クワッドの前記合わされた行を、当該クワッドの前記合わされた行のワードシャッフルバージョンと和すステップと、
前記和して合わされた各クワッドの行を4で割るステップと、
前記和して合わされた各クワッドの行を再圧縮するステップと
を備えることを特徴とする請求項2に記載の方法。 - 前記ピクセルは、それぞれが8ビットから成る4つのチャネルを備えるステップを特徴とする請求項1に記載の方法。
- 前記Yコンポーネントは前記ソース画像の輝度に対応し、前記Coコンポーネントは前記ソース画像のオレンジに対応し、前記Cgコンポーネントは前記ソース画像の緑に対応することを特徴とする請求項1に記載の方法。
- リモートデスクトッププロトコル(RDP)プロトコル経由で前記圧縮画像データをネットワークに送信するステップをさらに備えることを特徴とする請求項1に記載の方法。
- ピクセルの各チャネルは8ビットを備え、前記ソース画像の各チャネルを配列することは各チャネルを16ビット配列することを備えることを特徴とする請求項1に記載の方法。
- 前記プロセッサは128ビットで同時に動作することを特徴とする請求項1に記載の方法。
- 前記分離するステップ、前記変換するステップ、および前記記憶するステップのうちの少なくとも1つの動作は、SIMD命令を前記プロセッサに送信して、少なくとも1つのチャネルのそれぞれが複数のピクセルを同時に動作することを備えることを特徴とする請求項1に記載の方法。
- 前記ソース画像は表示されるユーザセッションに対応することを特徴とする請求項1に記載の方法。
- 前記ソース画像および前記圧縮画像データのうちの少なくとも1つは、ビットマップ画像を備えることを特徴とする請求項1に記載の方法。
- 前記CoおよびCgコンポーネントを圧縮するステップは、前記画像を圧縮する量に対応する前記色損失レベルを用いて前記CoおよびCgコンポーネントを圧縮することを備えることを特徴とする請求項1に記載の方法。
- 前記CoおよびCgコンポーネントを圧縮するステップは、レンペルジフ(LZ)アルゴリズムに従ってランレングス符号化を行うことを備えることを特徴とする請求項1に記載の方法。
- ベクトル処理をサポートするプロセッサ上でソース画像を圧縮するためのシステムであって、
プロセッサと、
前記システムが動作可能である時に前記プロセッサと通信可能に接続され、プロセッサ実行可能命令を保持するメモリと、を備え、
前記プロセッサ実行可能命令は、前記プロセッサ上で実行されると、前記システムに少なくとも、
ピクセルを備える前記ソース画像を受信するステップであって、各ピクセルは赤―緑―青(RGB)画像データを備えるステップと、
一連のプロセッサ命令を前記プロセッサに送信することによって前記画像をそのR、G、およびBコンポーネントに分離するステップであって、8つのゼロのシーケンスを前記R、G、およびBコンポーネントのそれぞれの8ビットの前に挿入することを含み、各プロセッサ命令は複数のピクセルのデータに同時に動作するステップと、
一連のプロセッサ命令を前記プロセッサに送信することによって前記分離された画像を輝度―オレンジ―緑(YCoCg)画像データに変換するステップであって、各プロセッサ命令は複数のピクセルのデータに同時に動作するステップと、
一連のプロセッサ命令を前記プロセッサに送信することによって前記YCoCg画像のCoおよびCgコンポーネントを圧縮するステップであって、各プロセッサ命令は複数のピクセルのデータに同時に動作するステップと、
前記圧縮画像データを記憶するステップと
を行わせることを特徴とする方法。 - 前記プロセッサ上で実行されると、少なくとも、前記圧縮画像データを4ピクセルから成る少なくとも1つのグループに分け、4ピクセルから成る各グループをサブサンプリングするステップを前記システムに行わせるプロセッサ実行可能命令を、前記メモリがさらに保持することを特徴とする請求項14に記載のシステム。
- ベクトル処理をサポートするプロセッサ上でピクセルを含むソース画像を圧縮するための、コンピュータ可読命令を備えるコンピュータ可読記憶媒体であって、
前記コンピュータ可読命令は、コンピュータ上で実行されると、前記コンピュータに、
一連のプロセッサ命令を前記プロセッサに送信することによって前記画像をそのコンポーネントカラーに分離するステップであって、8つのゼロのシーケンスを前記R、G、およびBコンポーネントのそれぞれの8ビットの前に挿入することを含み、各プロセッサ命令は複数のピクセルのデータに同時に動作するステップと、
一連のプロセッサ命令を前記プロセッサに送信することによって前記分離された画像を第2の色空間における画像データに変換するステップであって、各プロセッサ命令は複数のピクセルのデータに同時に動作するステップと、
一連のプロセッサ命令を前記プロセッサに送信することによって前記第2の色空間における前記画像データのコンポーネントを圧縮するステップであって、各プロセッサ命令は複数のピクセルのデータに同時に動作するステップと、
前記圧縮画像データを記憶するステップと
を備える動作を行わせることを特徴とするプロセッサ。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/331,170 | 2008-12-09 | ||
US12/331,170 US8194977B2 (en) | 2008-12-09 | 2008-12-09 | Remote desktop protocol compression acceleration using single instruction, multiple dispatch instructions |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011540749A Division JP2012511870A (ja) | 2008-12-09 | 2009-11-11 | 単一命令複数ティスパッチ命令を使用するリモートデスクトッププロトコル圧縮アクセラレーション |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2015029309A true JP2015029309A (ja) | 2015-02-12 |
JP5968384B2 JP5968384B2 (ja) | 2016-08-10 |
Family
ID=42231125
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011540749A Pending JP2012511870A (ja) | 2008-12-09 | 2009-11-11 | 単一命令複数ティスパッチ命令を使用するリモートデスクトッププロトコル圧縮アクセラレーション |
JP2014184067A Active JP5968384B2 (ja) | 2008-12-09 | 2014-09-10 | 単一命令複数ティスパッチ命令を使用するリモートデスクトッププロトコル圧縮アクセラレーション |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011540749A Pending JP2012511870A (ja) | 2008-12-09 | 2009-11-11 | 単一命令複数ティスパッチ命令を使用するリモートデスクトッププロトコル圧縮アクセラレーション |
Country Status (5)
Country | Link |
---|---|
US (1) | US8194977B2 (ja) |
EP (1) | EP2374277A4 (ja) |
JP (2) | JP2012511870A (ja) |
CN (1) | CN102246524B (ja) |
WO (1) | WO2010077444A1 (ja) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8572251B2 (en) * | 2008-11-26 | 2013-10-29 | Microsoft Corporation | Hardware acceleration for remote desktop protocol |
US8194977B2 (en) * | 2008-12-09 | 2012-06-05 | Microsoft Corporation | Remote desktop protocol compression acceleration using single instruction, multiple dispatch instructions |
US8768067B2 (en) * | 2010-04-15 | 2014-07-01 | Microsoft Corporation | Accelerating bitmap remoting by identifying and extracting patterns from source bitmaps through parallel processing techniques |
JP5842357B2 (ja) * | 2011-03-25 | 2016-01-13 | 富士ゼロックス株式会社 | 画像処理装置及び画像処理プログラム |
US10564966B2 (en) | 2011-12-22 | 2020-02-18 | Intel Corporation | Packed data operation mask shift processors, methods, systems, and instructions |
EP2798480B1 (en) * | 2011-12-30 | 2018-09-26 | Intel Corporation | Vector frequency compress instruction |
US20130222411A1 (en) * | 2012-02-28 | 2013-08-29 | Brijesh Tripathi | Extended range color space |
US20130279882A1 (en) * | 2012-04-23 | 2013-10-24 | Apple Inc. | Coding of Video and Audio with Initialization Fragments |
US9613394B2 (en) * | 2013-08-28 | 2017-04-04 | Intel Corporation | Lossy color compression using adaptive quantization |
US9633451B2 (en) * | 2014-02-12 | 2017-04-25 | Mediatek Singapore Pte. Ltd. | Image data processing method of multi-level shuffles for multi-format pixel and associated apparatus |
US10269326B2 (en) | 2015-12-19 | 2019-04-23 | Intel Corporation | Method and apparatus for color buffer compression |
US10747819B2 (en) | 2018-04-20 | 2020-08-18 | International Business Machines Corporation | Rapid partial substring matching |
US10782968B2 (en) * | 2018-08-23 | 2020-09-22 | International Business Machines Corporation | Rapid substring detection within a data element string |
US10732972B2 (en) | 2018-08-23 | 2020-08-04 | International Business Machines Corporation | Non-overlapping substring detection within a data element string |
US11042371B2 (en) | 2019-09-11 | 2021-06-22 | International Business Machines Corporation | Plausability-driven fault detection in result logic and condition codes for fast exact substring match |
US10996951B2 (en) | 2019-09-11 | 2021-05-04 | International Business Machines Corporation | Plausibility-driven fault detection in string termination logic for fast exact substring match |
CN114461371B (zh) * | 2022-04-13 | 2023-02-28 | 苏州浪潮智能科技有限公司 | 一种服务器***中断优化方法、装置、设备及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH1093961A (ja) * | 1996-08-19 | 1998-04-10 | Samsung Electron Co Ltd | ビデオデータ処理方法及び装置 |
JP2003348360A (ja) * | 2002-04-25 | 2003-12-05 | Microsoft Corp | 文書エンコーディングシステム、文書デコーディングシステムおよびその方法 |
US20070250683A1 (en) * | 1997-10-09 | 2007-10-25 | Mips Technologies, Inc. | Alignment and ordering of vector elements for single instruction multiple data processing |
JP2008009253A (ja) * | 2006-06-30 | 2008-01-17 | Seiko Epson Corp | 画像表示システム、画像供給装置および画像表示装置 |
WO2008103774A2 (en) * | 2007-02-21 | 2008-08-28 | Microsoft Corporation | Signaling and use of chroma sample positioning information |
Family Cites Families (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05347758A (ja) * | 1992-06-15 | 1993-12-27 | Ricoh Co Ltd | フレーム間予測符号化方式 |
GB2288520B (en) * | 1994-03-24 | 1998-10-14 | Discovision Ass | Pipeline |
US5801977A (en) * | 1995-01-17 | 1998-09-01 | Hewlett-Packard Company | System and method for clipping integers |
EP0753283A1 (en) * | 1995-07-14 | 1997-01-15 | Hewlett-Packard Company | Method and apparatus for comparing a sample with a reference using a spider diagram |
US5973628A (en) * | 1997-10-03 | 1999-10-26 | Cisco Technology, Inc. | Parallel variable bit encoder |
US6148111A (en) | 1998-04-27 | 2000-11-14 | The United States Of America As Represented By The Secretary Of The Navy | Parallel digital image compression system for exploiting zerotree redundancies in wavelet coefficients |
US6788303B2 (en) * | 2001-02-27 | 2004-09-07 | 3Dlabs Inc., Ltd | Vector instruction set |
US6650784B2 (en) * | 2001-07-02 | 2003-11-18 | Qualcomm, Incorporated | Lossless intraframe encoding using Golomb-Rice |
US7171444B2 (en) | 2001-11-14 | 2007-01-30 | Sharp Laboratories Of America, Inc. | Remote desktop protocol compression system |
US7187383B2 (en) * | 2002-03-01 | 2007-03-06 | 3D Labs Inc., Ltd | Yield enhancement of complex chips |
US7227556B2 (en) * | 2002-03-01 | 2007-06-05 | O'driscoll Gerard | High quality antialiased lines with dual sampling pattern |
US7006699B2 (en) * | 2002-03-27 | 2006-02-28 | Microsoft Corporation | System and method for progressively transforming and coding digital data |
US7174047B2 (en) * | 2002-03-29 | 2007-02-06 | Matsushita Electric Industrial Co., Ltd. | Single-instruction multiple-data (SIMD)-based algorithms for processing video data |
KR100601944B1 (ko) | 2004-03-08 | 2006-07-14 | 삼성전자주식회사 | 색 변환 방법 및 장치 |
JP2005218055A (ja) * | 2004-02-02 | 2005-08-11 | Toshiba Corp | 画像処理装置、画像処理方法および画像処理プログラム |
US7689051B2 (en) * | 2004-04-15 | 2010-03-30 | Microsoft Corporation | Predictive lossless coding of images and video |
US7480417B2 (en) | 2004-10-19 | 2009-01-20 | Microsoft Corp. | System and method for encoding mosaiced image data employing a reversible color transform |
US8423673B2 (en) | 2005-03-14 | 2013-04-16 | Citrix Systems, Inc. | Method and apparatus for updating a graphical display in a distributed processing environment using compression |
JP4627670B2 (ja) * | 2005-03-17 | 2011-02-09 | 株式会社リコー | 画像形成装置、画像形成方法、その方法を実行させるプログラムが格納されたコンピュータ読み取り可能な記憶媒体 |
GB2425423A (en) * | 2005-04-07 | 2006-10-25 | British Broadcasting Corp | Variable quantising for compression encoding |
JP4789148B2 (ja) * | 2005-09-06 | 2011-10-12 | 株式会社メガチップス | 圧縮符号化装置、圧縮符号化方法およびプログラム |
US7956930B2 (en) * | 2006-01-06 | 2011-06-07 | Microsoft Corporation | Resampling and picture resizing operations for multi-resolution video coding and decoding |
US8243340B2 (en) * | 2006-02-23 | 2012-08-14 | Microsoft Corporation | Pre-processing of image data for enhanced compression |
US7676582B2 (en) | 2006-06-30 | 2010-03-09 | Microsoft Corporation | Optimized desktop sharing viewer join |
US8565519B2 (en) * | 2007-02-09 | 2013-10-22 | Qualcomm Incorporated | Programmable pattern-based unpacking and packing of data channel information |
US7827237B2 (en) | 2007-03-12 | 2010-11-02 | Citrix Systems, Inc. | Systems and methods for identifying long matches of data in a compression history |
US8194977B2 (en) * | 2008-12-09 | 2012-06-05 | Microsoft Corporation | Remote desktop protocol compression acceleration using single instruction, multiple dispatch instructions |
-
2008
- 2008-12-09 US US12/331,170 patent/US8194977B2/en active Active
-
2009
- 2009-11-11 JP JP2011540749A patent/JP2012511870A/ja active Pending
- 2009-11-11 EP EP09836589.3A patent/EP2374277A4/en not_active Ceased
- 2009-11-11 CN CN200980150120.7A patent/CN102246524B/zh active Active
- 2009-11-11 WO PCT/US2009/064036 patent/WO2010077444A1/en active Application Filing
-
2014
- 2014-09-10 JP JP2014184067A patent/JP5968384B2/ja active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH1093961A (ja) * | 1996-08-19 | 1998-04-10 | Samsung Electron Co Ltd | ビデオデータ処理方法及び装置 |
US20070250683A1 (en) * | 1997-10-09 | 2007-10-25 | Mips Technologies, Inc. | Alignment and ordering of vector elements for single instruction multiple data processing |
JP2003348360A (ja) * | 2002-04-25 | 2003-12-05 | Microsoft Corp | 文書エンコーディングシステム、文書デコーディングシステムおよびその方法 |
JP2008009253A (ja) * | 2006-06-30 | 2008-01-17 | Seiko Epson Corp | 画像表示システム、画像供給装置および画像表示装置 |
WO2008103774A2 (en) * | 2007-02-21 | 2008-08-28 | Microsoft Corporation | Signaling and use of chroma sample positioning information |
Non-Patent Citations (1)
Title |
---|
JPN6015040361; 牟田 英正 ほか: 'Cell/B.E.を搭載したゲーム機による家庭内分散処理' コンピュータシステム・シンポジウム論文集 第2007巻 第14号, 20071127, p.49〜58 * |
Also Published As
Publication number | Publication date |
---|---|
US8194977B2 (en) | 2012-06-05 |
CN102246524B (zh) | 2014-03-26 |
JP2012511870A (ja) | 2012-05-24 |
EP2374277A1 (en) | 2011-10-12 |
EP2374277A4 (en) | 2013-09-11 |
CN102246524A (zh) | 2011-11-16 |
WO2010077444A1 (en) | 2010-07-08 |
JP5968384B2 (ja) | 2016-08-10 |
US20100142813A1 (en) | 2010-06-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5968384B2 (ja) | 単一命令複数ティスパッチ命令を使用するリモートデスクトッププロトコル圧縮アクセラレーション | |
US8837006B2 (en) | Pre-processing of image data for enhanced compression | |
US7873212B2 (en) | Compression of images for computer graphics | |
US8761528B2 (en) | Compression of image data | |
US20070076971A1 (en) | Compression of images for computer graphics | |
JP6703032B2 (ja) | 後方互換性拡張画像フォーマット | |
US5872965A (en) | System and method for performing multiway branches using a visual instruction set | |
CN1210943C (zh) | 彩色图象数据处理和压缩方法及装置 | |
CA2750195A1 (en) | Rdp bitmap hash acceleration using simd instructions | |
CN113452993A (zh) | 图像数据解压缩 | |
US20180097527A1 (en) | 32-bit hdr pixel format with optimum precision | |
JP4189443B2 (ja) | グラフィックス画像の圧縮及び逆圧縮方法 | |
CN114882149A (zh) | 动画渲染方法、装置、电子设备和存储介质 | |
JP2000049618A (ja) | 90°回転と組合わせたhvq圧縮方法 | |
TWI502550B (zh) | Differential layered image compression method | |
KR100834357B1 (ko) | 영상 데이터의 압축 장치 및 방법 | |
JP2002540685A (ja) | 画像圧縮及び圧縮解除 | |
WO2023177447A1 (en) | Methods and systems for high bit depth and high dynamic range image compression |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20150512 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20150924 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20151007 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20160107 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20160606 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160705 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5968384 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |