mirror of https://github.com/FreeRDP/FreeRDP
Merge pull request #3177 from akallabeth/codec_reset_fix
Fixed codec reset, now resetting resolution too.
This commit is contained in:
commit
66ae3f2c77
|
@ -48,14 +48,22 @@ UINT xf_ResetGraphics(RdpgfxClientContext* context, RDPGFX_RESET_GRAPHICS_PDU* r
|
||||||
if (!surface || !surface->outputMapped)
|
if (!surface || !surface->outputMapped)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
freerdp_client_codecs_reset(surface->codecs, FREERDP_CODEC_ALL);
|
if (!freerdp_client_codecs_reset(surface->codecs, FREERDP_CODEC_ALL,
|
||||||
|
surface->width, surface->height))
|
||||||
|
{
|
||||||
|
free(pSurfaceIds);
|
||||||
|
return ERROR_INTERNAL_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
region16_clear(&surface->invalidRegion);
|
region16_clear(&surface->invalidRegion);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(pSurfaceIds);
|
free(pSurfaceIds);
|
||||||
|
|
||||||
freerdp_client_codecs_reset(xfc->codecs, FREERDP_CODEC_ALL);
|
if (!freerdp_client_codecs_reset(xfc->codecs, FREERDP_CODEC_ALL,
|
||||||
|
xfc->settings->DesktopWidth,
|
||||||
|
xfc->settings->DesktopHeight))
|
||||||
|
return ERROR_INTERNAL_ERROR;
|
||||||
|
|
||||||
xfc->graphicsReset = TRUE;
|
xfc->graphicsReset = TRUE;
|
||||||
|
|
||||||
|
@ -673,6 +681,11 @@ UINT xf_SurfaceCommand(RdpgfxClientContext* context, RDPGFX_SURFACE_COMMAND* cmd
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RDPGFX_CODECID_CAPROGRESSIVE_V2:
|
case RDPGFX_CODECID_CAPROGRESSIVE_V2:
|
||||||
|
WLog_WARN(TAG, "SurfaceCommand %08X not implemented", cmd->codecId);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
WLog_WARN(TAG, "Invalid SurfaceCommand %08X", cmd->codecId);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -714,6 +727,13 @@ UINT xf_CreateSurface(RdpgfxClientContext* context, RDPGFX_CREATE_SURFACE_PDU* c
|
||||||
return CHANNEL_RC_NO_MEMORY;
|
return CHANNEL_RC_NO_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!freerdp_client_codecs_reset(surface->codecs, FREERDP_CODEC_ALL,
|
||||||
|
createSurface->width, createSurface->height))
|
||||||
|
{
|
||||||
|
free (surface);
|
||||||
|
return ERROR_INTERNAL_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
surface->surfaceId = createSurface->surfaceId;
|
surface->surfaceId = createSurface->surfaceId;
|
||||||
surface->width = (UINT32) createSurface->width;
|
surface->width = (UINT32) createSurface->width;
|
||||||
surface->height = (UINT32) createSurface->height;
|
surface->height = (UINT32) createSurface->height;
|
||||||
|
|
|
@ -71,7 +71,7 @@ FREERDP_API int clear_compress(CLEAR_CONTEXT* clear, BYTE* pSrcData, UINT32 SrcS
|
||||||
FREERDP_API int clear_decompress(CLEAR_CONTEXT* clear, BYTE* pSrcData, UINT32 SrcSize,
|
FREERDP_API int clear_decompress(CLEAR_CONTEXT* clear, BYTE* pSrcData, UINT32 SrcSize,
|
||||||
BYTE** ppDstData, DWORD DstFormat, int nDstStep, int nXDst, int nYDst, int nWidth, int nHeight);
|
BYTE** ppDstData, DWORD DstFormat, int nDstStep, int nXDst, int nYDst, int nWidth, int nHeight);
|
||||||
|
|
||||||
FREERDP_API int clear_context_reset(CLEAR_CONTEXT* clear);
|
FREERDP_API BOOL clear_context_reset(CLEAR_CONTEXT* clear);
|
||||||
|
|
||||||
FREERDP_API CLEAR_CONTEXT* clear_context_new(BOOL Compressor);
|
FREERDP_API CLEAR_CONTEXT* clear_context_new(BOOL Compressor);
|
||||||
FREERDP_API void clear_context_free(CLEAR_CONTEXT* clear);
|
FREERDP_API void clear_context_free(CLEAR_CONTEXT* clear);
|
||||||
|
|
|
@ -80,7 +80,7 @@ FREERDP_API int h264_decompress(H264_CONTEXT* h264, BYTE* pSrcData, UINT32 SrcSi
|
||||||
BYTE** ppDstData, DWORD DstFormat, int nDstStep, int nDstWidth, int nDstHeight,
|
BYTE** ppDstData, DWORD DstFormat, int nDstStep, int nDstWidth, int nDstHeight,
|
||||||
RDPGFX_RECT16* regionRects, int numRegionRect);
|
RDPGFX_RECT16* regionRects, int numRegionRect);
|
||||||
|
|
||||||
FREERDP_API int h264_context_reset(H264_CONTEXT* h264);
|
FREERDP_API BOOL h264_context_reset(H264_CONTEXT* h264, UINT32 width, UINT32 height);
|
||||||
|
|
||||||
FREERDP_API H264_CONTEXT* h264_context_new(BOOL Compressor);
|
FREERDP_API H264_CONTEXT* h264_context_new(BOOL Compressor);
|
||||||
FREERDP_API void h264_context_free(H264_CONTEXT* h264);
|
FREERDP_API void h264_context_free(H264_CONTEXT* h264);
|
||||||
|
|
|
@ -48,7 +48,7 @@ FREERDP_API int interleaved_decompress(BITMAP_INTERLEAVED_CONTEXT* interleaved,
|
||||||
FREERDP_API int interleaved_compress(BITMAP_INTERLEAVED_CONTEXT* interleaved, BYTE* pDstData, UINT32* pDstSize,
|
FREERDP_API int interleaved_compress(BITMAP_INTERLEAVED_CONTEXT* interleaved, BYTE* pDstData, UINT32* pDstSize,
|
||||||
int nWidth, int nHeight, BYTE* pSrcData, DWORD SrcFormat, int nSrcStep, int nXSrc, int nYSrc, BYTE* palette, int bpp);
|
int nWidth, int nHeight, BYTE* pSrcData, DWORD SrcFormat, int nSrcStep, int nXSrc, int nYSrc, BYTE* palette, int bpp);
|
||||||
|
|
||||||
FREERDP_API int bitmap_interleaved_context_reset(BITMAP_INTERLEAVED_CONTEXT* interleaved);
|
FREERDP_API BOOL bitmap_interleaved_context_reset(BITMAP_INTERLEAVED_CONTEXT* interleaved);
|
||||||
|
|
||||||
FREERDP_API BITMAP_INTERLEAVED_CONTEXT* bitmap_interleaved_context_new(BOOL Compressor);
|
FREERDP_API BITMAP_INTERLEAVED_CONTEXT* bitmap_interleaved_context_new(BOOL Compressor);
|
||||||
FREERDP_API void bitmap_interleaved_context_free(BITMAP_INTERLEAVED_CONTEXT* interleaved);
|
FREERDP_API void bitmap_interleaved_context_free(BITMAP_INTERLEAVED_CONTEXT* interleaved);
|
||||||
|
|
|
@ -93,7 +93,7 @@ FREERDP_API NSC_MESSAGE* nsc_encode_messages(NSC_CONTEXT* context, BYTE* data, i
|
||||||
FREERDP_API int nsc_write_message(NSC_CONTEXT* context, wStream* s, NSC_MESSAGE* message);
|
FREERDP_API int nsc_write_message(NSC_CONTEXT* context, wStream* s, NSC_MESSAGE* message);
|
||||||
FREERDP_API int nsc_message_free(NSC_CONTEXT* context, NSC_MESSAGE* message);
|
FREERDP_API int nsc_message_free(NSC_CONTEXT* context, NSC_MESSAGE* message);
|
||||||
|
|
||||||
FREERDP_API int nsc_context_reset(NSC_CONTEXT* context);
|
FREERDP_API BOOL nsc_context_reset(NSC_CONTEXT* context, UINT32 width, UINT32 height);
|
||||||
|
|
||||||
FREERDP_API NSC_CONTEXT* nsc_context_new(void);
|
FREERDP_API NSC_CONTEXT* nsc_context_new(void);
|
||||||
FREERDP_API void nsc_context_free(NSC_CONTEXT* context);
|
FREERDP_API void nsc_context_free(NSC_CONTEXT* context);
|
||||||
|
|
|
@ -109,7 +109,7 @@ FREERDP_API BOOL freerdp_bitmap_planar_delta_encode_planes(BYTE* inPlanes[4], in
|
||||||
FREERDP_API BYTE* freerdp_bitmap_compress_planar(BITMAP_PLANAR_CONTEXT* context, BYTE* data, UINT32 format,
|
FREERDP_API BYTE* freerdp_bitmap_compress_planar(BITMAP_PLANAR_CONTEXT* context, BYTE* data, UINT32 format,
|
||||||
int width, int height, int scanline, BYTE* dstData, int* pDstSize);
|
int width, int height, int scanline, BYTE* dstData, int* pDstSize);
|
||||||
|
|
||||||
FREERDP_API int freerdp_bitmap_planar_context_reset(BITMAP_PLANAR_CONTEXT* context);
|
FREERDP_API BOOL freerdp_bitmap_planar_context_reset(BITMAP_PLANAR_CONTEXT* context);
|
||||||
|
|
||||||
FREERDP_API BITMAP_PLANAR_CONTEXT* freerdp_bitmap_planar_context_new(DWORD flags, int maxWidth, int maxHeight);
|
FREERDP_API BITMAP_PLANAR_CONTEXT* freerdp_bitmap_planar_context_new(DWORD flags, int maxWidth, int maxHeight);
|
||||||
FREERDP_API void freerdp_bitmap_planar_context_free(BITMAP_PLANAR_CONTEXT* context);
|
FREERDP_API void freerdp_bitmap_planar_context_free(BITMAP_PLANAR_CONTEXT* context);
|
||||||
|
|
|
@ -242,7 +242,7 @@ FREERDP_API int progressive_decompress(PROGRESSIVE_CONTEXT* progressive, BYTE* p
|
||||||
FREERDP_API int progressive_create_surface_context(PROGRESSIVE_CONTEXT* progressive, UINT16 surfaceId, UINT32 width, UINT32 height);
|
FREERDP_API int progressive_create_surface_context(PROGRESSIVE_CONTEXT* progressive, UINT16 surfaceId, UINT32 width, UINT32 height);
|
||||||
FREERDP_API int progressive_delete_surface_context(PROGRESSIVE_CONTEXT* progressive, UINT16 surfaceId);
|
FREERDP_API int progressive_delete_surface_context(PROGRESSIVE_CONTEXT* progressive, UINT16 surfaceId);
|
||||||
|
|
||||||
FREERDP_API int progressive_context_reset(PROGRESSIVE_CONTEXT* progressive);
|
FREERDP_API BOOL progressive_context_reset(PROGRESSIVE_CONTEXT* progressive);
|
||||||
|
|
||||||
FREERDP_API PROGRESSIVE_CONTEXT* progressive_context_new(BOOL Compressor);
|
FREERDP_API PROGRESSIVE_CONTEXT* progressive_context_new(BOOL Compressor);
|
||||||
FREERDP_API void progressive_context_free(PROGRESSIVE_CONTEXT* progressive);
|
FREERDP_API void progressive_context_free(PROGRESSIVE_CONTEXT* progressive);
|
||||||
|
|
|
@ -183,7 +183,7 @@ FREERDP_API RFX_MESSAGE* rfx_encode_messages(RFX_CONTEXT* context, const RFX_REC
|
||||||
BYTE* data, int width, int height, int scanline, int* numMessages, int maxDataSize);
|
BYTE* data, int width, int height, int scanline, int* numMessages, int maxDataSize);
|
||||||
FREERDP_API BOOL rfx_write_message(RFX_CONTEXT* context, wStream* s, RFX_MESSAGE* message);
|
FREERDP_API BOOL rfx_write_message(RFX_CONTEXT* context, wStream* s, RFX_MESSAGE* message);
|
||||||
|
|
||||||
FREERDP_API void rfx_context_reset(RFX_CONTEXT* context);
|
FREERDP_API BOOL rfx_context_reset(RFX_CONTEXT* context, UINT32 width, UINT32 height);
|
||||||
|
|
||||||
FREERDP_API RFX_CONTEXT* rfx_context_new(BOOL encoder);
|
FREERDP_API RFX_CONTEXT* rfx_context_new(BOOL encoder);
|
||||||
FREERDP_API void rfx_context_free(RFX_CONTEXT* context);
|
FREERDP_API void rfx_context_free(RFX_CONTEXT* context);
|
||||||
|
|
|
@ -60,7 +60,8 @@ struct rdp_codecs
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
FREERDP_API BOOL freerdp_client_codecs_prepare(rdpCodecs* codecs, UINT32 flags);
|
FREERDP_API BOOL freerdp_client_codecs_prepare(rdpCodecs* codecs, UINT32 flags);
|
||||||
FREERDP_API BOOL freerdp_client_codecs_reset(rdpCodecs* codecs, UINT32 flags);
|
FREERDP_API BOOL freerdp_client_codecs_reset(rdpCodecs* codecs, UINT32 flags,
|
||||||
|
UINT32 width, UINT32 height);
|
||||||
|
|
||||||
FREERDP_API rdpCodecs* codecs_new(rdpContext* context);
|
FREERDP_API rdpCodecs* codecs_new(rdpContext* context);
|
||||||
FREERDP_API void codecs_free(rdpCodecs* codecs);
|
FREERDP_API void codecs_free(rdpCodecs* codecs);
|
||||||
|
|
|
@ -830,12 +830,16 @@ int clear_compress(CLEAR_CONTEXT* clear, BYTE* pSrcData, UINT32 SrcSize, BYTE**
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int clear_context_reset(CLEAR_CONTEXT* clear)
|
BOOL clear_context_reset(CLEAR_CONTEXT* clear)
|
||||||
{
|
{
|
||||||
|
if (!clear)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
clear->seqNumber = 0;
|
clear->seqNumber = 0;
|
||||||
clear->VBarStorageCursor = 0;
|
clear->VBarStorageCursor = 0;
|
||||||
clear->ShortVBarStorageCursor = 0;
|
clear->ShortVBarStorageCursor = 0;
|
||||||
return 1;
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
CLEAR_CONTEXT* clear_context_new(BOOL Compressor)
|
CLEAR_CONTEXT* clear_context_new(BOOL Compressor)
|
||||||
|
|
|
@ -106,14 +106,14 @@ typedef struct IMFDXGIDeviceManagerVtbl
|
||||||
{
|
{
|
||||||
HRESULT (STDMETHODCALLTYPE * QueryInterface)(IMFDXGIDeviceManager* This, REFIID riid, void** ppvObject);
|
HRESULT (STDMETHODCALLTYPE * QueryInterface)(IMFDXGIDeviceManager* This, REFIID riid, void** ppvObject);
|
||||||
ULONG (STDMETHODCALLTYPE * AddRef)(IMFDXGIDeviceManager* This);
|
ULONG (STDMETHODCALLTYPE * AddRef)(IMFDXGIDeviceManager* This);
|
||||||
ULONG (STDMETHODCALLTYPE * Release)(IMFDXGIDeviceManager* This);
|
ULONG (STDMETHODCALLTYPE * Release)(IMFDXGIDeviceManager* This);
|
||||||
HRESULT (STDMETHODCALLTYPE * CloseDeviceHandle)(IMFDXGIDeviceManager* This, HANDLE hDevice);
|
HRESULT (STDMETHODCALLTYPE * CloseDeviceHandle)(IMFDXGIDeviceManager* This, HANDLE hDevice);
|
||||||
HRESULT (STDMETHODCALLTYPE * GetVideoService)(IMFDXGIDeviceManager* This, HANDLE hDevice, REFIID riid, void** ppService);
|
HRESULT (STDMETHODCALLTYPE * GetVideoService)(IMFDXGIDeviceManager* This, HANDLE hDevice, REFIID riid, void** ppService);
|
||||||
HRESULT (STDMETHODCALLTYPE * LockDevice)(IMFDXGIDeviceManager* This, HANDLE hDevice, REFIID riid, void** ppUnkDevice, BOOL fBlock);
|
HRESULT (STDMETHODCALLTYPE * LockDevice)(IMFDXGIDeviceManager* This, HANDLE hDevice, REFIID riid, void** ppUnkDevice, BOOL fBlock);
|
||||||
HRESULT (STDMETHODCALLTYPE * OpenDeviceHandle)(IMFDXGIDeviceManager* This, HANDLE* phDevice);
|
HRESULT (STDMETHODCALLTYPE * OpenDeviceHandle)(IMFDXGIDeviceManager* This, HANDLE* phDevice);
|
||||||
HRESULT (STDMETHODCALLTYPE * ResetDevice)(IMFDXGIDeviceManager* This, IUnknown* pUnkDevice, UINT resetToken);
|
HRESULT (STDMETHODCALLTYPE * ResetDevice)(IMFDXGIDeviceManager* This, IUnknown* pUnkDevice, UINT resetToken);
|
||||||
HRESULT (STDMETHODCALLTYPE * TestDevice)(IMFDXGIDeviceManager* This, HANDLE hDevice);
|
HRESULT (STDMETHODCALLTYPE * TestDevice)(IMFDXGIDeviceManager* This, HANDLE hDevice);
|
||||||
HRESULT (STDMETHODCALLTYPE * UnlockDevice)(IMFDXGIDeviceManager* This, HANDLE hDevice, BOOL fSaveState);
|
HRESULT (STDMETHODCALLTYPE * UnlockDevice)(IMFDXGIDeviceManager* This, HANDLE hDevice, BOOL fSaveState);
|
||||||
}
|
}
|
||||||
IMFDXGIDeviceManagerVtbl;
|
IMFDXGIDeviceManagerVtbl;
|
||||||
|
|
||||||
|
@ -1514,9 +1514,15 @@ BOOL h264_context_init(H264_CONTEXT* h264)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int h264_context_reset(H264_CONTEXT* h264)
|
BOOL h264_context_reset(H264_CONTEXT* h264, UINT32 width, UINT32 height)
|
||||||
{
|
{
|
||||||
return 1;
|
if (!h264)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
h264->width = width;
|
||||||
|
h264->height = height;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
H264_CONTEXT* h264_context_new(BOOL Compressor)
|
H264_CONTEXT* h264_context_new(BOOL Compressor)
|
||||||
|
|
|
@ -413,9 +413,12 @@ int interleaved_compress(BITMAP_INTERLEAVED_CONTEXT* interleaved, BYTE* pDstData
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
int bitmap_interleaved_context_reset(BITMAP_INTERLEAVED_CONTEXT* interleaved)
|
BOOL bitmap_interleaved_context_reset(BITMAP_INTERLEAVED_CONTEXT* interleaved)
|
||||||
{
|
{
|
||||||
return 1;
|
if (!interleaved)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BITMAP_INTERLEAVED_CONTEXT* bitmap_interleaved_context_new(BOOL Compressor)
|
BITMAP_INTERLEAVED_CONTEXT* bitmap_interleaved_context_new(BOOL Compressor)
|
||||||
|
|
|
@ -266,9 +266,15 @@ static void nsc_profiler_print(NSC_CONTEXT* context)
|
||||||
PROFILER_PRINT_FOOTER;
|
PROFILER_PRINT_FOOTER;
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsc_context_reset(NSC_CONTEXT* context)
|
BOOL nsc_context_reset(NSC_CONTEXT* context, UINT32 width, UINT32 height)
|
||||||
{
|
{
|
||||||
return 1;
|
if (!context)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
context->width = width;
|
||||||
|
context->height = height;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSC_CONTEXT* nsc_context_new(void)
|
NSC_CONTEXT* nsc_context_new(void)
|
||||||
|
|
|
@ -1160,9 +1160,12 @@ BYTE* freerdp_bitmap_compress_planar(BITMAP_PLANAR_CONTEXT* context, BYTE* data,
|
||||||
return dstData;
|
return dstData;
|
||||||
}
|
}
|
||||||
|
|
||||||
int freerdp_bitmap_planar_context_reset(BITMAP_PLANAR_CONTEXT* context)
|
BOOL freerdp_bitmap_planar_context_reset(BITMAP_PLANAR_CONTEXT* context)
|
||||||
{
|
{
|
||||||
return 1;
|
if (!context)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BITMAP_PLANAR_CONTEXT* freerdp_bitmap_planar_context_new(DWORD flags, int maxWidth, int maxHeight)
|
BITMAP_PLANAR_CONTEXT* freerdp_bitmap_planar_context_new(DWORD flags, int maxWidth, int maxHeight)
|
||||||
|
|
|
@ -1880,9 +1880,12 @@ int progressive_compress(PROGRESSIVE_CONTEXT* progressive, BYTE* pSrcData, UINT3
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int progressive_context_reset(PROGRESSIVE_CONTEXT* progressive)
|
BOOL progressive_context_reset(PROGRESSIVE_CONTEXT* progressive)
|
||||||
{
|
{
|
||||||
return 1;
|
if (!progressive)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
PROGRESSIVE_CONTEXT* progressive_context_new(BOOL Compressor)
|
PROGRESSIVE_CONTEXT* progressive_context_new(BOOL Compressor)
|
||||||
|
|
|
@ -357,6 +357,9 @@ void rfx_context_free(RFX_CONTEXT* context)
|
||||||
{
|
{
|
||||||
RFX_CONTEXT_PRIV *priv;
|
RFX_CONTEXT_PRIV *priv;
|
||||||
|
|
||||||
|
if (!context)
|
||||||
|
return;
|
||||||
|
|
||||||
assert(NULL != context);
|
assert(NULL != context);
|
||||||
assert(NULL != context->priv);
|
assert(NULL != context->priv);
|
||||||
assert(NULL != context->priv->TilePool);
|
assert(NULL != context->priv->TilePool);
|
||||||
|
@ -419,10 +422,17 @@ void rfx_context_set_pixel_format(RFX_CONTEXT* context, RDP_PIXEL_FORMAT pixel_f
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void rfx_context_reset(RFX_CONTEXT* context)
|
BOOL rfx_context_reset(RFX_CONTEXT* context, UINT32 width, UINT32 height)
|
||||||
{
|
{
|
||||||
|
if (!context)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
context->width = width;
|
||||||
|
context->height = height;
|
||||||
context->state = RFX_STATE_SEND_HEADERS;
|
context->state = RFX_STATE_SEND_HEADERS;
|
||||||
context->frameIdx = 0;
|
context->frameIdx = 0;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL rfx_process_message_sync(RFX_CONTEXT* context, wStream* s)
|
static BOOL rfx_process_message_sync(RFX_CONTEXT* context, wStream* s)
|
||||||
|
|
|
@ -100,13 +100,19 @@ BOOL freerdp_client_codecs_prepare(rdpCodecs* codecs, UINT32 flags)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL freerdp_client_codecs_reset(rdpCodecs* codecs, UINT32 flags)
|
BOOL freerdp_client_codecs_reset(rdpCodecs* codecs, UINT32 flags,
|
||||||
|
UINT32 width, UINT32 height)
|
||||||
{
|
{
|
||||||
|
BOOL rc = TRUE;
|
||||||
|
|
||||||
|
if (!freerdp_client_codecs_prepare(codecs, flags))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
if (flags & FREERDP_CODEC_INTERLEAVED)
|
if (flags & FREERDP_CODEC_INTERLEAVED)
|
||||||
{
|
{
|
||||||
if (codecs->interleaved)
|
if (codecs->interleaved)
|
||||||
{
|
{
|
||||||
bitmap_interleaved_context_reset(codecs->interleaved);
|
rc &= bitmap_interleaved_context_reset(codecs->interleaved);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,7 +120,7 @@ BOOL freerdp_client_codecs_reset(rdpCodecs* codecs, UINT32 flags)
|
||||||
{
|
{
|
||||||
if (codecs->planar)
|
if (codecs->planar)
|
||||||
{
|
{
|
||||||
freerdp_bitmap_planar_context_reset(codecs->planar);
|
rc &= freerdp_bitmap_planar_context_reset(codecs->planar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,7 +128,7 @@ BOOL freerdp_client_codecs_reset(rdpCodecs* codecs, UINT32 flags)
|
||||||
{
|
{
|
||||||
if (codecs->nsc)
|
if (codecs->nsc)
|
||||||
{
|
{
|
||||||
nsc_context_reset(codecs->nsc);
|
rc &= nsc_context_reset(codecs->nsc, width, height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,7 +136,7 @@ BOOL freerdp_client_codecs_reset(rdpCodecs* codecs, UINT32 flags)
|
||||||
{
|
{
|
||||||
if (codecs->rfx)
|
if (codecs->rfx)
|
||||||
{
|
{
|
||||||
rfx_context_reset(codecs->rfx);
|
rc &= rfx_context_reset(codecs->rfx, width, height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,7 +144,7 @@ BOOL freerdp_client_codecs_reset(rdpCodecs* codecs, UINT32 flags)
|
||||||
{
|
{
|
||||||
if (codecs->clear)
|
if (codecs->clear)
|
||||||
{
|
{
|
||||||
clear_context_reset(codecs->clear);
|
rc &= clear_context_reset(codecs->clear);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,7 +157,7 @@ BOOL freerdp_client_codecs_reset(rdpCodecs* codecs, UINT32 flags)
|
||||||
{
|
{
|
||||||
if (codecs->progressive)
|
if (codecs->progressive)
|
||||||
{
|
{
|
||||||
progressive_context_reset(codecs->progressive);
|
rc &= progressive_context_reset(codecs->progressive);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,11 +165,11 @@ BOOL freerdp_client_codecs_reset(rdpCodecs* codecs, UINT32 flags)
|
||||||
{
|
{
|
||||||
if (codecs->h264)
|
if (codecs->h264)
|
||||||
{
|
{
|
||||||
h264_context_reset(codecs->h264);
|
rc &= h264_context_reset(codecs->h264, width, height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
rdpCodecs* codecs_new(rdpContext* context)
|
rdpCodecs* codecs_new(rdpContext* context)
|
||||||
|
|
|
@ -65,14 +65,21 @@ UINT gdi_ResetGraphics(RdpgfxClientContext* context, RDPGFX_RESET_GRAPHICS_PDU*
|
||||||
if (!surface || !surface->outputMapped)
|
if (!surface || !surface->outputMapped)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
freerdp_client_codecs_reset(surface->codecs, FREERDP_CODEC_ALL);
|
if (!freerdp_client_codecs_reset(surface->codecs, FREERDP_CODEC_ALL,
|
||||||
|
surface->width, surface->height))
|
||||||
|
{
|
||||||
|
free (pSurfaceIds);
|
||||||
|
return ERROR_INTERNAL_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
region16_clear(&surface->invalidRegion);
|
region16_clear(&surface->invalidRegion);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(pSurfaceIds);
|
free(pSurfaceIds);
|
||||||
|
|
||||||
freerdp_client_codecs_reset(gdi->codecs, FREERDP_CODEC_ALL);
|
if (!freerdp_client_codecs_reset(gdi->codecs, FREERDP_CODEC_ALL,
|
||||||
|
gdi->width, gdi->height))
|
||||||
|
return ERROR_INTERNAL_ERROR;
|
||||||
|
|
||||||
gdi->graphicsReset = TRUE;
|
gdi->graphicsReset = TRUE;
|
||||||
|
|
||||||
|
@ -683,6 +690,11 @@ UINT gdi_SurfaceCommand(RdpgfxClientContext* context, RDPGFX_SURFACE_COMMAND* cm
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RDPGFX_CODECID_CAPROGRESSIVE_V2:
|
case RDPGFX_CODECID_CAPROGRESSIVE_V2:
|
||||||
|
WLog_WARN(TAG, "SurfaceCommand %08X not implemented", cmd->codecId);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
WLog_WARN(TAG, "Invalid SurfaceCommand %08X", cmd->codecId);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -722,6 +734,13 @@ UINT gdi_CreateSurface(RdpgfxClientContext* context, RDPGFX_CREATE_SURFACE_PDU*
|
||||||
return CHANNEL_RC_NO_MEMORY;
|
return CHANNEL_RC_NO_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!freerdp_client_codecs_reset(surface->codecs, FREERDP_CODEC_ALL,
|
||||||
|
createSurface->width, createSurface->height))
|
||||||
|
{
|
||||||
|
free (surface);
|
||||||
|
return ERROR_INTERNAL_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
surface->surfaceId = createSurface->surfaceId;
|
surface->surfaceId = createSurface->surfaceId;
|
||||||
surface->width = (UINT32) createSurface->width;
|
surface->width = (UINT32) createSurface->width;
|
||||||
surface->height = (UINT32) createSurface->height;
|
surface->height = (UINT32) createSurface->height;
|
||||||
|
|
|
@ -59,9 +59,12 @@ BOOL test_peer_context_new(freerdp_peer* client, testPeerContext* context)
|
||||||
if (!(context->rfx_context = rfx_context_new(TRUE)))
|
if (!(context->rfx_context = rfx_context_new(TRUE)))
|
||||||
goto fail_rfx_context;
|
goto fail_rfx_context;
|
||||||
|
|
||||||
|
if (!rfx_context_reset(context->rfx_context, SAMPLE_SERVER_DEFAULT_WIDTH,
|
||||||
|
SAMPLE_SERVER_DEFAULT_HEIGHT))
|
||||||
|
goto fail_rfx_context;
|
||||||
|
|
||||||
context->rfx_context->mode = RLGR3;
|
context->rfx_context->mode = RLGR3;
|
||||||
context->rfx_context->width = SAMPLE_SERVER_DEFAULT_WIDTH;
|
|
||||||
context->rfx_context->height = SAMPLE_SERVER_DEFAULT_HEIGHT;
|
|
||||||
rfx_context_set_pixel_format(context->rfx_context, RDP_PIXEL_FORMAT_R8G8B8);
|
rfx_context_set_pixel_format(context->rfx_context, RDP_PIXEL_FORMAT_R8G8B8);
|
||||||
|
|
||||||
if (!(context->nsc_context = nsc_context_new()))
|
if (!(context->nsc_context = nsc_context_new()))
|
||||||
|
@ -547,9 +550,12 @@ BOOL tf_peer_post_connect(freerdp_peer* client)
|
||||||
WLog_DBG(TAG, "");
|
WLog_DBG(TAG, "");
|
||||||
WLog_DBG(TAG, "Client requested desktop: %dx%dx%d",
|
WLog_DBG(TAG, "Client requested desktop: %dx%dx%d",
|
||||||
client->settings->DesktopWidth, client->settings->DesktopHeight, client->settings->ColorDepth);
|
client->settings->DesktopWidth, client->settings->DesktopHeight, client->settings->ColorDepth);
|
||||||
|
|
||||||
#if (SAMPLE_SERVER_USE_CLIENT_RESOLUTION == 1)
|
#if (SAMPLE_SERVER_USE_CLIENT_RESOLUTION == 1)
|
||||||
context->rfx_context->width = client->settings->DesktopWidth;
|
if (!rfx_context_reset(context->rfx_context, client->settings->DesktopWidth,
|
||||||
context->rfx_context->height = client->settings->DesktopHeight;
|
client->settings->DesktopHeight))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
WLog_DBG(TAG, "Using resolution requested by client.");
|
WLog_DBG(TAG, "Using resolution requested by client.");
|
||||||
#else
|
#else
|
||||||
client->settings->DesktopWidth = context->rfx_context->width;
|
client->settings->DesktopWidth = context->rfx_context->width;
|
||||||
|
@ -613,7 +619,6 @@ BOOL tf_peer_activate(freerdp_peer* client)
|
||||||
{
|
{
|
||||||
testPeerContext* context = (testPeerContext*) client->context;
|
testPeerContext* context = (testPeerContext*) client->context;
|
||||||
|
|
||||||
rfx_context_reset(context->rfx_context);
|
|
||||||
context->activated = TRUE;
|
context->activated = TRUE;
|
||||||
|
|
||||||
//client->settings->CompressionLevel = PACKET_COMPR_TYPE_8K;
|
//client->settings->CompressionLevel = PACKET_COMPR_TYPE_8K;
|
||||||
|
@ -658,8 +663,10 @@ BOOL tf_peer_keyboard_event(rdpInput* input, UINT16 flags, UINT16 code)
|
||||||
client->settings->DesktopWidth = SAMPLE_SERVER_DEFAULT_WIDTH;
|
client->settings->DesktopWidth = SAMPLE_SERVER_DEFAULT_WIDTH;
|
||||||
client->settings->DesktopHeight = SAMPLE_SERVER_DEFAULT_HEIGHT;
|
client->settings->DesktopHeight = SAMPLE_SERVER_DEFAULT_HEIGHT;
|
||||||
}
|
}
|
||||||
context->rfx_context->width = client->settings->DesktopWidth;
|
if (!rfx_context_reset(context->rfx_context, client->settings->DesktopWidth,
|
||||||
context->rfx_context->height = client->settings->DesktopHeight;
|
client->settings->DesktopHeight))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
update->DesktopResize(update->context);
|
update->DesktopResize(update->context);
|
||||||
context->activated = FALSE;
|
context->activated = FALSE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -137,7 +137,10 @@ int shadow_encoder_init_rfx(rdpShadowEncoder* encoder)
|
||||||
encoder->rfx = rfx_context_new(TRUE);
|
encoder->rfx = rfx_context_new(TRUE);
|
||||||
|
|
||||||
if (!encoder->rfx)
|
if (!encoder->rfx)
|
||||||
return -1;
|
goto fail;
|
||||||
|
|
||||||
|
if (!rfx_context_reset(encoder->rfx, encoder->width, encoder->height))
|
||||||
|
goto fail;
|
||||||
|
|
||||||
encoder->rfx->mode = RLGR3;
|
encoder->rfx->mode = RLGR3;
|
||||||
encoder->rfx->width = encoder->width;
|
encoder->rfx->width = encoder->width;
|
||||||
|
@ -154,6 +157,10 @@ int shadow_encoder_init_rfx(rdpShadowEncoder* encoder)
|
||||||
encoder->codecs |= FREERDP_CODEC_REMOTEFX;
|
encoder->codecs |= FREERDP_CODEC_REMOTEFX;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
fail:
|
||||||
|
rfx_context_free(encoder->rfx);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int shadow_encoder_init_nsc(rdpShadowEncoder* encoder)
|
int shadow_encoder_init_nsc(rdpShadowEncoder* encoder)
|
||||||
|
|
Loading…
Reference in New Issue