20#ifndef FREERDP_LIB_CODEC_RFX_DIFFERENTIAL_H
21#define FREERDP_LIB_CODEC_RFX_DIFFERENTIAL_H
23#include <freerdp/codec/rfx.h>
24#include <freerdp/api.h>
28static inline BOOL rfx_differential_decode(INT16* WINPR_RESTRICT buffer,
size_t size)
31 INT16* end = &buffer[size - 1];
35 const int tmp = ptr[0] + ptr[1];
36 if ((tmp > INT16_MAX) || (tmp < INT16_MIN))
38 WLog_ERR(RFX_TAG,
"differental: %d <= %d <= %d\n", INT16_MIN, tmp, INT16_MAX);
41 ptr[1] = WINPR_ASSERTING_INT_CAST(INT16, tmp);
47static inline void rfx_differential_encode(INT16* WINPR_RESTRICT buffer,
size_t size)
50 for (
size_t x = 0; x < size - 1; x++)
52 INT16* dst = &buffer[x + 1];
53 const INT16 n2 = *dst;
54 const int tmp = n2 - n1;
55 *dst = WINPR_ASSERTING_INT_CAST(INT16, tmp);