Skip to content

Commit

Permalink
Merge pull request #2973 from metalefty/compression-level-options
Browse files Browse the repository at this point in the history
GFX: selectable lossy compression levels
  • Loading branch information
metalefty authored Jul 30, 2024
2 parents 597d30b + e3c83c5 commit ecebe45
Showing 1 changed file with 39 additions and 3 deletions.
42 changes: 39 additions & 3 deletions xrdp/xrdp_encoder.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,31 @@
#define OUT_DATA_BYTES_DEFAULT_SIZE (16 * 1024 * 1024)

#ifdef XRDP_RFXCODEC
/* LH3 LL3, HH3 HL3, HL2 LH2, LH1 HH2, HH1 HL1 todo check this */
static const unsigned char g_rfx_quantization_values[] =
/*
* LH3 LL3, HH3 HL3, HL2 LH2, LH1 HH2, HH1 HL1
* https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-rdprfx/3e9c8af4-7539-4c9d-95de-14b1558b902c
*/

/* standard quality */
static const unsigned char g_rfx_quantization_values_std[] =
{
0x66, 0x66, 0x77, 0x87, 0x98,
0x76, 0x77, 0x88, 0x98, 0x99
};

/* low quality */
static const unsigned char g_rfx_quantization_values_lq[] =
{
0x66, 0x66, 0x77, 0x87, 0x98,
0xAA, 0xAA, 0xAA, 0xAA, 0xAA /* TODO: tentative value */
};

/* ultra low quality */
static const unsigned char g_rfx_quantization_values_ulq[] =
{
0x66, 0x66, 0x77, 0x87, 0x98,
0xBB, 0xBB, 0xBB, 0xBB, 0xBB /* TODO: tentative value */
};
#endif

struct enc_rect
Expand Down Expand Up @@ -180,11 +199,28 @@ xrdp_encoder_create(struct xrdp_mm *mm)
self->in_codec_mode = 1;
client_info->capture_code = CC_GFX_PRO;
self->gfx = 1;
self->quants = (const char *) g_rfx_quantization_values;
self->num_quants = 2;
self->quant_idx_y = 0;
self->quant_idx_u = 1;
self->quant_idx_v = 1;

switch (client_info->mcs_connection_type)
{
case CONNECTION_TYPE_MODEM:
case CONNECTION_TYPE_BROADBAND_LOW:
case CONNECTION_TYPE_SATELLITE:
self->quants = (const char *) g_rfx_quantization_values_ulq;
break;
case CONNECTION_TYPE_BROADBAND_HIGH:
case CONNECTION_TYPE_WAN:
self->quants = (const char *) g_rfx_quantization_values_lq;
break;
case CONNECTION_TYPE_LAN:
case CONNECTION_TYPE_AUTODETECT: /* not implemented yet */
default:
self->quants = (const char *) g_rfx_quantization_values_std;

}
}
else if (client_info->rfx_codec_id != 0)
{
Expand Down

0 comments on commit ecebe45

Please sign in to comment.