Merge pull request #2865 from akallabeth/h264_ignore_errors

[H264] ignore decoder errors
This commit is contained in:
Norbert Federa 2015-09-03 14:42:36 +02:00
commit 72d901454c
4 changed files with 40 additions and 154 deletions

View File

@ -38,52 +38,12 @@
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_decode_uncompressed(RDPGFX_PLUGIN* gfx, RDPGFX_SURFACE_COMMAND* cmd) static UINT rdpgfx_read_h264_metablock(RDPGFX_PLUGIN* gfx, wStream* s, RDPGFX_H264_METABLOCK* meta)
{
return CHANNEL_RC_OK;
}
/**
* Function description
*
* @return 0 on success, otherwise a Win32 error code
*/
UINT rdpgfx_decode_remotefx(RDPGFX_PLUGIN* gfx, RDPGFX_SURFACE_COMMAND* cmd)
{
return CHANNEL_RC_OK;
}
/**
* Function description
*
* @return 0 on success, otherwise a Win32 error code
*/
UINT rdpgfx_decode_clear(RDPGFX_PLUGIN* gfx, RDPGFX_SURFACE_COMMAND* cmd)
{
return CHANNEL_RC_OK;
}
/**
* Function description
*
* @return 0 on success, otherwise a Win32 error code
*/
UINT rdpgfx_decode_planar(RDPGFX_PLUGIN* gfx, RDPGFX_SURFACE_COMMAND* cmd)
{
return CHANNEL_RC_OK;
}
/**
* Function description
*
* @return 0 on success, otherwise a Win32 error code
*/
UINT rdpgfx_read_h264_metablock(RDPGFX_PLUGIN* gfx, wStream* s, RDPGFX_H264_METABLOCK* meta)
{ {
UINT32 index; UINT32 index;
RDPGFX_RECT16* regionRect; RDPGFX_RECT16* regionRect;
RDPGFX_H264_QUANT_QUALITY* quantQualityVal; RDPGFX_H264_QUANT_QUALITY* quantQualityVal;
UINT error; UINT error = ERROR_INVALID_DATA;
meta->regionRects = NULL; meta->regionRects = NULL;
meta->quantQualityVals = NULL; meta->quantQualityVals = NULL;
@ -91,7 +51,7 @@ UINT rdpgfx_read_h264_metablock(RDPGFX_PLUGIN* gfx, wStream* s, RDPGFX_H264_META
if (Stream_GetRemainingLength(s) < 4) if (Stream_GetRemainingLength(s) < 4)
{ {
WLog_ERR(TAG, "not enough data!"); WLog_ERR(TAG, "not enough data!");
return ERROR_INVALID_DATA; goto error_out;
} }
Stream_Read_UINT32(s, meta->numRegionRects); /* numRegionRects (4 bytes) */ Stream_Read_UINT32(s, meta->numRegionRects); /* numRegionRects (4 bytes) */
@ -99,7 +59,7 @@ UINT rdpgfx_read_h264_metablock(RDPGFX_PLUGIN* gfx, wStream* s, RDPGFX_H264_META
if (Stream_GetRemainingLength(s) < (meta->numRegionRects * 8)) if (Stream_GetRemainingLength(s) < (meta->numRegionRects * 8))
{ {
WLog_ERR(TAG, "not enough data!"); WLog_ERR(TAG, "not enough data!");
return ERROR_INVALID_DATA; goto error_out;
} }
meta->regionRects = (RDPGFX_RECT16*) malloc(meta->numRegionRects * sizeof(RDPGFX_RECT16)); meta->regionRects = (RDPGFX_RECT16*) malloc(meta->numRegionRects * sizeof(RDPGFX_RECT16));
@ -107,7 +67,8 @@ UINT rdpgfx_read_h264_metablock(RDPGFX_PLUGIN* gfx, wStream* s, RDPGFX_H264_META
if (!meta->regionRects) if (!meta->regionRects)
{ {
WLog_ERR(TAG, "malloc failed!"); WLog_ERR(TAG, "malloc failed!");
return CHANNEL_RC_NO_MEMORY; error = CHANNEL_RC_NO_MEMORY;
goto error_out;
} }
meta->quantQualityVals = (RDPGFX_H264_QUANT_QUALITY*) malloc(meta->numRegionRects * sizeof(RDPGFX_H264_QUANT_QUALITY)); meta->quantQualityVals = (RDPGFX_H264_QUANT_QUALITY*) malloc(meta->numRegionRects * sizeof(RDPGFX_H264_QUANT_QUALITY));
@ -136,7 +97,8 @@ UINT rdpgfx_read_h264_metablock(RDPGFX_PLUGIN* gfx, wStream* s, RDPGFX_H264_META
if (Stream_GetRemainingLength(s) < (meta->numRegionRects * 2)) if (Stream_GetRemainingLength(s) < (meta->numRegionRects * 2))
{ {
WLog_ERR(TAG, "not enough data!"); WLog_ERR(TAG, "not enough data!");
return ERROR_INVALID_DATA; error = ERROR_INVALID_DATA;
goto error_out;
} }
for (index = 0; index < meta->numRegionRects; index++) for (index = 0; index < meta->numRegionRects; index++)
@ -166,7 +128,7 @@ error_out:
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_decode_h264(RDPGFX_PLUGIN* gfx, RDPGFX_SURFACE_COMMAND* cmd) static UINT rdpgfx_decode_h264(RDPGFX_PLUGIN* gfx, RDPGFX_SURFACE_COMMAND* cmd)
{ {
UINT error; UINT error;
wStream* s; wStream* s;
@ -207,26 +169,6 @@ UINT rdpgfx_decode_h264(RDPGFX_PLUGIN* gfx, RDPGFX_SURFACE_COMMAND* cmd)
return error; return error;
} }
/**
* Function description
*
* @return 0 on success, otherwise a Win32 error code
*/
UINT rdpgfx_decode_alpha(RDPGFX_PLUGIN* gfx, RDPGFX_SURFACE_COMMAND* cmd)
{
return CHANNEL_RC_OK;
}
/**
* Function description
*
* @return 0 on success, otherwise a Win32 error code
*/
UINT rdpgfx_decode_progressive(RDPGFX_PLUGIN* gfx, RDPGFX_SURFACE_COMMAND* cmd)
{
return CHANNEL_RC_OK;
}
/** /**
* Function description * Function description
* *
@ -235,42 +177,10 @@ UINT rdpgfx_decode_progressive(RDPGFX_PLUGIN* gfx, RDPGFX_SURFACE_COMMAND* cmd)
UINT rdpgfx_decode(RDPGFX_PLUGIN* gfx, RDPGFX_SURFACE_COMMAND* cmd) UINT rdpgfx_decode(RDPGFX_PLUGIN* gfx, RDPGFX_SURFACE_COMMAND* cmd)
{ {
UINT error = CHANNEL_RC_OK; UINT error = CHANNEL_RC_OK;
RdpgfxClientContext* context = (RdpgfxClientContext*) gfx->iface.pInterface;
switch (cmd->codecId) switch (cmd->codecId)
{ {
case RDPGFX_CODECID_UNCOMPRESSED:
if ((error = rdpgfx_decode_uncompressed(gfx, cmd)))
{
WLog_ERR(TAG, "rdpgfx_decode_uncompressed failed with error %lu", error);
return error;
}
break;
case RDPGFX_CODECID_CAVIDEO:
if ((error = rdpgfx_decode_remotefx(gfx, cmd)))
{
WLog_ERR(TAG, "rdpgfx_decode_remotefx failed with error %lu", error);
return error;
}
break;
case RDPGFX_CODECID_CLEARCODEC:
if ((error = rdpgfx_decode_clear(gfx, cmd)))
{
WLog_ERR(TAG, "rdpgfx_decode_clear failed with error %lu", error);
return error;
}
break;
case RDPGFX_CODECID_PLANAR:
if ((error = rdpgfx_decode_planar(gfx, cmd)))
{
WLog_ERR(TAG, "rdpgfx_decode_planar failed with error %lu", error);
return error;
}
break;
case RDPGFX_CODECID_H264: case RDPGFX_CODECID_H264:
if ((error = rdpgfx_decode_h264(gfx, cmd))) if ((error = rdpgfx_decode_h264(gfx, cmd)))
{ {
@ -279,24 +189,14 @@ UINT rdpgfx_decode(RDPGFX_PLUGIN* gfx, RDPGFX_SURFACE_COMMAND* cmd)
} }
break; break;
case RDPGFX_CODECID_ALPHA: default:
if ((error = rdpgfx_decode_alpha(gfx, cmd))) if (context)
{ {
WLog_ERR(TAG, "rdpgfx_decode_alpha failed with error %lu", error); IFCALLRET(context->SurfaceCommand, error, context, cmd);
return error; if (error)
WLog_ERR(TAG, "context->SurfaceCommand failed with error %lu", error);
} }
break; break;
case RDPGFX_CODECID_CAPROGRESSIVE:
if ((error = rdpgfx_decode_progressive(gfx, cmd)))
{
WLog_ERR(TAG, "rdpgfx_decode_progressive failed with error %lu", error);
return error;
}
break;
case RDPGFX_CODECID_CAPROGRESSIVE_V2:
break;
} }
return error; return error;

View File

@ -50,7 +50,7 @@
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_send_caps_advertise_pdu(RDPGFX_CHANNEL_CALLBACK* callback) static UINT rdpgfx_send_caps_advertise_pdu(RDPGFX_CHANNEL_CALLBACK* callback)
{ {
UINT error; UINT error;
wStream* s; wStream* s;
@ -135,7 +135,7 @@ UINT rdpgfx_send_caps_advertise_pdu(RDPGFX_CHANNEL_CALLBACK* callback)
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_recv_caps_confirm_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s) static UINT rdpgfx_recv_caps_confirm_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s)
{ {
RDPGFX_CAPSET capsSet; RDPGFX_CAPSET capsSet;
UINT32 capsDataLength; UINT32 capsDataLength;
@ -164,7 +164,7 @@ UINT rdpgfx_recv_caps_confirm_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s)
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_send_frame_acknowledge_pdu(RDPGFX_CHANNEL_CALLBACK* callback, RDPGFX_FRAME_ACKNOWLEDGE_PDU* pdu) static UINT rdpgfx_send_frame_acknowledge_pdu(RDPGFX_CHANNEL_CALLBACK* callback, RDPGFX_FRAME_ACKNOWLEDGE_PDU* pdu)
{ {
UINT error; UINT error;
wStream* s; wStream* s;
@ -207,7 +207,7 @@ UINT rdpgfx_send_frame_acknowledge_pdu(RDPGFX_CHANNEL_CALLBACK* callback, RDPGFX
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_recv_reset_graphics_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s) static UINT rdpgfx_recv_reset_graphics_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s)
{ {
int pad; int pad;
UINT32 index; UINT32 index;
@ -282,7 +282,7 @@ UINT rdpgfx_recv_reset_graphics_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream*
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_recv_evict_cache_entry_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s) static UINT rdpgfx_recv_evict_cache_entry_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s)
{ {
RDPGFX_EVICT_CACHE_ENTRY_PDU pdu; RDPGFX_EVICT_CACHE_ENTRY_PDU pdu;
RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) callback->plugin; RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) callback->plugin;
@ -369,7 +369,7 @@ UINT rdpgfx_recv_cache_import_reply_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStre
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_recv_create_surface_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s) static UINT rdpgfx_recv_create_surface_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s)
{ {
RDPGFX_CREATE_SURFACE_PDU pdu; RDPGFX_CREATE_SURFACE_PDU pdu;
RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) callback->plugin; RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) callback->plugin;
@ -437,7 +437,7 @@ UINT rdpgfx_recv_delete_surface_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream*
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_recv_start_frame_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s) static UINT rdpgfx_recv_start_frame_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s)
{ {
RDPGFX_START_FRAME_PDU pdu; RDPGFX_START_FRAME_PDU pdu;
RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) callback->plugin; RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) callback->plugin;
@ -473,7 +473,7 @@ UINT rdpgfx_recv_start_frame_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s)
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_recv_end_frame_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s) static UINT rdpgfx_recv_end_frame_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s)
{ {
RDPGFX_END_FRAME_PDU pdu; RDPGFX_END_FRAME_PDU pdu;
RDPGFX_FRAME_ACKNOWLEDGE_PDU ack; RDPGFX_FRAME_ACKNOWLEDGE_PDU ack;
@ -530,12 +530,11 @@ UINT rdpgfx_recv_end_frame_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s)
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_recv_wire_to_surface_1_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s) static UINT rdpgfx_recv_wire_to_surface_1_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s)
{ {
RDPGFX_SURFACE_COMMAND cmd; RDPGFX_SURFACE_COMMAND cmd;
RDPGFX_WIRE_TO_SURFACE_PDU_1 pdu; RDPGFX_WIRE_TO_SURFACE_PDU_1 pdu;
RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) callback->plugin; RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) callback->plugin;
RdpgfxClientContext* context = (RdpgfxClientContext*) gfx->iface.pInterface;
UINT error; UINT error;
if (Stream_GetRemainingLength(s) < 17) if (Stream_GetRemainingLength(s) < 17)
@ -584,20 +583,8 @@ UINT rdpgfx_recv_wire_to_surface_1_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStrea
cmd.length = pdu.bitmapDataLength; cmd.length = pdu.bitmapDataLength;
cmd.data = pdu.bitmapData; cmd.data = pdu.bitmapData;
if (cmd.codecId == RDPGFX_CODECID_H264) if ((error = rdpgfx_decode(gfx, &cmd)))
{ WLog_ERR(TAG, "rdpgfx_decode failed with error %lu!", error);
if ((error = rdpgfx_decode(gfx, &cmd)))
WLog_ERR(TAG, "rdpgfx_decode failed with error %lu!", error);
}
else
{
if (context)
{
IFCALLRET(context->SurfaceCommand, error, context, &cmd);
if (error)
WLog_ERR(TAG, "context->SurfaceCommand failed with error %lu", error);
}
}
return error; return error;
} }
@ -607,7 +594,7 @@ UINT rdpgfx_recv_wire_to_surface_1_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStrea
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_recv_wire_to_surface_2_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s) static UINT rdpgfx_recv_wire_to_surface_2_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s)
{ {
RDPGFX_SURFACE_COMMAND cmd; RDPGFX_SURFACE_COMMAND cmd;
RDPGFX_WIRE_TO_SURFACE_PDU_2 pdu; RDPGFX_WIRE_TO_SURFACE_PDU_2 pdu;
@ -664,7 +651,7 @@ UINT rdpgfx_recv_wire_to_surface_2_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStrea
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_recv_delete_encoding_context_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s) static UINT rdpgfx_recv_delete_encoding_context_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s)
{ {
RDPGFX_DELETE_ENCODING_CONTEXT_PDU pdu; RDPGFX_DELETE_ENCODING_CONTEXT_PDU pdu;
RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) callback->plugin; RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) callback->plugin;
@ -766,7 +753,7 @@ UINT rdpgfx_recv_solid_fill_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s)
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_recv_surface_to_surface_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s) static UINT rdpgfx_recv_surface_to_surface_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s)
{ {
UINT16 index; UINT16 index;
RDPGFX_POINT16* destPt; RDPGFX_POINT16* destPt;
@ -839,7 +826,7 @@ UINT rdpgfx_recv_surface_to_surface_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStre
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_recv_surface_to_cache_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s) static UINT rdpgfx_recv_surface_to_cache_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s)
{ {
RDPGFX_SURFACE_TO_CACHE_PDU pdu; RDPGFX_SURFACE_TO_CACHE_PDU pdu;
RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) callback->plugin; RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) callback->plugin;
@ -946,7 +933,7 @@ UINT rdpgfx_recv_cache_to_surface_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_recv_map_surface_to_output_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s) static UINT rdpgfx_recv_map_surface_to_output_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s)
{ {
RDPGFX_MAP_SURFACE_TO_OUTPUT_PDU pdu; RDPGFX_MAP_SURFACE_TO_OUTPUT_PDU pdu;
RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) callback->plugin; RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) callback->plugin;
@ -1018,11 +1005,10 @@ UINT rdpgfx_recv_map_surface_to_window_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wS
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_recv_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s) static UINT rdpgfx_recv_pdu(RDPGFX_CHANNEL_CALLBACK* callback, wStream* s)
{ {
int beg, end; int beg, end;
RDPGFX_HEADER header; RDPGFX_HEADER header;
RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) callback->plugin;
UINT error; UINT error;
beg = Stream_GetPosition(s); beg = Stream_GetPosition(s);
@ -1428,7 +1414,7 @@ static UINT rdpgfx_plugin_terminated(IWTSPlugin* pPlugin)
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_set_surface_data(RdpgfxClientContext* context, UINT16 surfaceId, void* pData) static UINT rdpgfx_set_surface_data(RdpgfxClientContext* context, UINT16 surfaceId, void* pData)
{ {
ULONG_PTR key; ULONG_PTR key;
RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) context->handle; RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) context->handle;
@ -1448,7 +1434,7 @@ UINT rdpgfx_set_surface_data(RdpgfxClientContext* context, UINT16 surfaceId, voi
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_get_surface_ids(RdpgfxClientContext* context, UINT16** ppSurfaceIds, UINT16* count_out) static UINT rdpgfx_get_surface_ids(RdpgfxClientContext* context, UINT16** ppSurfaceIds, UINT16* count_out)
{ {
int count; int count;
int index; int index;
@ -1484,7 +1470,7 @@ UINT rdpgfx_get_surface_ids(RdpgfxClientContext* context, UINT16** ppSurfaceIds,
return CHANNEL_RC_OK; return CHANNEL_RC_OK;
} }
void* rdpgfx_get_surface_data(RdpgfxClientContext* context, UINT16 surfaceId) static void* rdpgfx_get_surface_data(RdpgfxClientContext* context, UINT16 surfaceId)
{ {
ULONG_PTR key; ULONG_PTR key;
void* pData = NULL; void* pData = NULL;
@ -1502,7 +1488,7 @@ void* rdpgfx_get_surface_data(RdpgfxClientContext* context, UINT16 surfaceId)
* *
* @return 0 on success, otherwise a Win32 error code * @return 0 on success, otherwise a Win32 error code
*/ */
UINT rdpgfx_set_cache_slot_data(RdpgfxClientContext* context, UINT16 cacheSlot, void* pData) static UINT rdpgfx_set_cache_slot_data(RdpgfxClientContext* context, UINT16 cacheSlot, void* pData)
{ {
RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) context->handle; RDPGFX_PLUGIN* gfx = (RDPGFX_PLUGIN*) context->handle;

View File

@ -478,8 +478,8 @@ UINT xf_SurfaceCommand_H264(xfContext* xfc, RdpgfxClientContext* context, RDPGFX
if (status < 0) if (status < 0)
{ {
WLog_ERR(TAG, "h264_decompress failure: %d",status); WLog_WARN(TAG, "h264_decompress failure: %d, ignoring update.", status);
return ERROR_INTERNAL_ERROR; return CHANNEL_RC_OK;
} }
for (i = 0; i < meta->numRegionRects; i++) for (i = 0; i < meta->numRegionRects; i++)

View File

@ -405,8 +405,8 @@ UINT gdi_SurfaceCommand_H264(rdpGdi* gdi, RdpgfxClientContext* context, RDPGFX_S
if (status < 0) if (status < 0)
{ {
WLog_ERR(TAG, "h264_decompress failure: %d",status); WLog_WARN(TAG, "h264_decompress failure: %d, ignoring update.", status);
return ERROR_INTERNAL_ERROR; return CHANNEL_RC_OK;
} }
for (i = 0; i < meta->numRegionRects; i++) for (i = 0; i < meta->numRegionRects; i++)