Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GFX tidy-ups #2921

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 20 additions & 20 deletions neutrinordp/xrdp-neutrinordp.c
Original file line number Diff line number Diff line change
Expand Up @@ -113,26 +113,26 @@ set_keyboard_overrides(struct mod *mod)

if (mod->allow_client_kbd_settings)
{
settings->kbd_type = mod->client_info.keyboard_type;
settings->kbd_subtype = mod->client_info.keyboard_subtype;
settings->kbd_type = mod->client_info->keyboard_type;
settings->kbd_subtype = mod->client_info->keyboard_subtype;
/* Define the most common number of function keys, 12.
because we can't get it from client. */
settings->kbd_fn_keys = 12;
settings->kbd_layout = mod->client_info.keylayout;
settings->kbd_layout = mod->client_info->keylayout;

/* Exception processing for each RDP Keyboard type */
if (mod->client_info.keyboard_type == 0x00)
if (mod->client_info->keyboard_type == 0x00)
{
/* 0x00000000 : Set on Server */
LOG(LOG_LEVEL_WARNING, "keyboard_type:[0x%02x] ,Set on Server",
mod->client_info.keyboard_type);
mod->client_info->keyboard_type);
}
else if (mod->client_info.keyboard_type == 0x04)
else if (mod->client_info->keyboard_type == 0x04)
{
/* 0x00000004 : IBM enhanced (101- or 102-key) keyboard */
/* Nothing to do. */
}
else if (mod->client_info.keyboard_type == 0x07)
else if (mod->client_info->keyboard_type == 0x07)
{
/* 0x00000007 : Japanese keyboard */
/* Nothing to do. */
Expand Down Expand Up @@ -281,7 +281,7 @@ lxrdp_connect(struct mod *mod)
LOG(LOG_LEVEL_ERROR, "NeutrinoRDP proxy connection: status [Failed],"
" RDP client [%s], RDP server [%s:%d], RDP server username [%s],"
" xrdp pamusername [%s], xrdp process id [%d]",
mod->client_info.client_description,
mod->client_info->client_description,
mod->inst->settings->hostname,
mod->inst->settings->port,
mod->inst->settings->username,
Expand All @@ -294,7 +294,7 @@ lxrdp_connect(struct mod *mod)
LOG(LOG_LEVEL_INFO, "NeutrinoRDP proxy connection: status [Success],"
" RDP client [%s], RDP server [%s:%d], RDP server username [%s],"
" xrdp pamusername [%s], xrdp process id [%d]",
mod->client_info.client_description,
mod->client_info->client_description,
mod->inst->settings->hostname,
mod->inst->settings->port,
mod->inst->settings->username,
Expand Down Expand Up @@ -574,7 +574,7 @@ lxrdp_end(struct mod *mod)
LOG(LOG_LEVEL_INFO, "NeutrinoRDP proxy connection: status [Disconnect],"
" RDP client [%s], RDP server [%s:%d], RDP server username [%s],"
" xrdp pamusername [%s], xrdp process id [%d]",
mod->client_info.client_description,
mod->client_info->client_description,
mod->inst->settings->hostname,
mod->inst->settings->port,
mod->inst->settings->username,
Expand Down Expand Up @@ -636,7 +636,7 @@ lxrdp_set_param(struct mod *mod, const char *name, const char *value)
}
else if (g_strcmp(name, "client_info") == 0)
{
g_memcpy(&(mod->client_info), value, sizeof(mod->client_info));
mod->client_info = (struct xrdp_client_info *)value;
/* This is a Struct and cannot be printed in next else*/
LOG_DEVEL(LOG_LEVEL_DEBUG, "Client_info struct ignored");
}
Expand Down Expand Up @@ -1906,15 +1906,15 @@ lfreerdp_pre_connect(freerdp *instance)
instance->settings->password = g_strdup(mod->password);
instance->settings->domain = g_strdup(mod->domain);

if (mod->client_info.rail_enable && (mod->client_info.rail_support_level > 0))
if (mod->client_info->rail_enable && (mod->client_info->rail_support_level > 0))
{
LOG_DEVEL(LOG_LEVEL_INFO, "Railsupport !!!!!!!!!!!!!!!!!!");
instance->settings->remote_app = 1;
instance->settings->rail_langbar_supported = 1;
instance->settings->workarea = 1;
instance->settings->performance_flags = PERF_DISABLE_WALLPAPER | PERF_DISABLE_FULLWINDOWDRAG;
instance->settings->num_icon_caches = mod->client_info.wnd_num_icon_caches;
instance->settings->num_icon_cache_entries = mod->client_info.wnd_num_icon_cache_entries;
instance->settings->num_icon_caches = mod->client_info->wnd_num_icon_caches;
instance->settings->num_icon_cache_entries = mod->client_info->wnd_num_icon_cache_entries;


}
Expand All @@ -1930,14 +1930,14 @@ lfreerdp_pre_connect(freerdp *instance)
/* Allow users or administrators to configure the mstsc experience settings. #1903 */

if ((mod->allow_client_experiencesettings == 1) &&
(mod->client_info.mcs_connection_type == CONNECTION_TYPE_AUTODETECT))
(mod->client_info->mcs_connection_type == CONNECTION_TYPE_AUTODETECT))
{
/* auto-detect not yet supported - use default performance settings */
}
else if (mod->allow_client_experiencesettings == 1)
{
instance->settings->performance_flags =
(mod->client_info.rdp5_performanceflags &
(mod->client_info->rdp5_performanceflags &
/* Mask to avoid accepting invalid flags. */
(PERF_DISABLE_WALLPAPER |
PERF_DISABLE_FULLWINDOWDRAG |
Expand All @@ -1951,11 +1951,11 @@ lfreerdp_pre_connect(freerdp *instance)
LOG(LOG_LEVEL_DEBUG, "RDP client experience settings, "
"rdp5_performance_flags:[0x%08x], "
"masked performance_flags:[0x%08x]",
mod->client_info.rdp5_performanceflags,
mod->client_info->rdp5_performanceflags,
instance->settings->performance_flags);

if (mod->client_info.rail_enable &&
(mod->client_info.rail_support_level > 0))
if (mod->client_info->rail_enable &&
(mod->client_info->rail_support_level > 0))
{
instance->settings->performance_flags |= (PERF_DISABLE_WALLPAPER |
PERF_DISABLE_FULLWINDOWDRAG);
Expand Down Expand Up @@ -1986,7 +1986,7 @@ lfreerdp_pre_connect(freerdp *instance)

// Multi Monitor Settings
const struct display_size_description *display_sizes =
&mod->client_info.display_sizes;
&mod->client_info->display_sizes;
instance->settings->num_monitors = display_sizes->monitorCount;

for (index = 0; index < display_sizes->monitorCount; index++)
Expand Down
6 changes: 4 additions & 2 deletions neutrinordp/xrdp-neutrinordp.h
Original file line number Diff line number Diff line change
Expand Up @@ -184,14 +184,16 @@ struct mod
int srcx, int srcy, int mskx, int msky,
int dstx, int dsty, int width, int height,
int dstformat);
// Module must call this before server_paint_rects / server_paint_rects_ex
int (*server_start_encoder)(struct mod *v);
int (*server_paint_rects)(struct mod *v,
int num_drects, short *drects,
int num_crects, short *crects,
char *data, int width, int height,
int flags, int frame_id);
int (*server_session_info)(struct mod *v, const char *data,
int data_bytes);
tintptr server_dumby[100 - 46]; /* align, 100 minus the number of server
tintptr server_dumby[100 - 47]; /* align, 100 minus the number of server
functions above */
/* common */
tintptr handle; /* pointer to self as long */
Expand All @@ -217,7 +219,7 @@ struct mod
int bool_keyBoardSynced ; /* Numlock can be out of sync, we hold state here to resolve */
int keyBoardLockInfo ; /* Holds initial numlock capslock state */

struct xrdp_client_info client_info;
struct xrdp_client_info *client_info;

struct rdp_freerdp *inst;
struct bitmap_item bitmap_cache[4][4096];
Expand Down
3 changes: 3 additions & 0 deletions xrdp/xrdp.h
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,7 @@ struct display_control_monitor_layout_data
/// This flag is set if the state machine needs to
/// shutdown/startup EGFX
int using_egfx;
int restart_encoder;
};

int
Expand Down Expand Up @@ -534,6 +535,8 @@ server_composite(struct xrdp_mod *mod, int srcidx, int srcformat, int srcwidth,
int srcx, int srcy, int mskx, int msky,
int dstx, int dsty, int width, int height, int dstformat);
int
server_start_encoder(struct xrdp_mod *mod);
int
server_paint_rects(struct xrdp_mod *mod, int num_drects, short *drects,
int num_crects, short *crects,
char *data, int width, int height,
Expand Down
100 changes: 68 additions & 32 deletions xrdp/xrdp_encoder.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,29 +75,30 @@ xrdp_enc_data_done_destructor(void *item, void *closure)
}

/*****************************************************************************/
struct xrdp_encoder *
xrdp_encoder_create(struct xrdp_mm *mm)
/**
* Allocate the xrdp_encoder struct
*
* @param mm Module manager
* @return pointer to encoder, or NULL if one was not allocated.
*
* Finds the best encoder for the session and returns it to
* xrdp_encoder_create() for common initialization.
*/
static struct xrdp_encoder *
xrdp_encoder_new(struct xrdp_mm *mm)
{
LOG_DEVEL(LOG_LEVEL_TRACE, "xrdp_encoder_create:");
LOG_DEVEL(LOG_LEVEL_TRACE, "xrdp_encoder_new:");

struct xrdp_encoder *self;
struct xrdp_client_info *client_info;
char buf[1024];
int pid;

client_info = mm->wm->client_info;

/* RemoteFX 7.1 requires LAN but GFX does not */
if (client_info->mcs_connection_type != CONNECTION_TYPE_LAN)
{
if ((mm->egfx_flags & (XRDP_EGFX_H264 | XRDP_EGFX_RFX_PRO)) == 0)
{
return 0;
}
}
if (client_info->bpp < 24)
{
return 0;
LOG(LOG_LEVEL_INFO,
"xrdp_encoder_new: Insufficient color depth for any codec");
return NULL;
}

self = g_new0(struct xrdp_encoder, 1);
Expand All @@ -109,19 +110,21 @@ xrdp_encoder_create(struct xrdp_mm *mm)

if (client_info->jpeg_codec_id != 0)
{
LOG(LOG_LEVEL_INFO, "xrdp_encoder_create: starting jpeg codec session");
LOG(LOG_LEVEL_INFO, "xrdp_encoder_new: starting jpeg codec session");
self->codec_id = client_info->jpeg_codec_id;
self->in_codec_mode = 1;
self->codec_quality = client_info->jpeg_prop[0];
client_info->capture_code = 0;
client_info->capture_format = XRDP_a8b8g8r8;
self->process_enc = process_enc_jpg;
return self;
}

#ifdef XRDP_RFXCODEC
else if (mm->egfx_flags & XRDP_EGFX_RFX_PRO)
if (mm->egfx_flags & XRDP_EGFX_RFX_PRO)
{
LOG(LOG_LEVEL_INFO,
"xrdp_encoder_create: starting gfx rfx pro codec session");
"xrdp_encoder_new: starting gfx rfx pro codec session");
self->in_codec_mode = 1;
client_info->capture_code = 2;
self->process_enc = process_enc_rfx;
Expand All @@ -136,36 +139,69 @@ xrdp_encoder_create(struct xrdp_mm *mm)
mm->wm->screen->height,
RFX_FORMAT_YUV,
RFX_FLAGS_RLGR1 | RFX_FLAGS_PRO1);
return self;
}
else if (client_info->rfx_codec_id != 0)

if (client_info->rfx_codec_id != 0)
{
LOG(LOG_LEVEL_INFO, "xrdp_encoder_create: starting rfx codec session");
self->codec_id = client_info->rfx_codec_id;
self->in_codec_mode = 1;
client_info->capture_code = 2;
self->process_enc = process_enc_rfx;
self->codec_handle = rfxcodec_encode_create(mm->wm->screen->width,
mm->wm->screen->height,
RFX_FORMAT_YUV, 0);
/* RemoteFX 7.1 requires LAN */
if (client_info->mcs_connection_type != CONNECTION_TYPE_LAN)
{
LOG(LOG_LEVEL_INFO, "xrdp_encoder_new: "
"Skipping rfx codec session - incorrect connection_type");
}
else
{
LOG(LOG_LEVEL_INFO, "xrdp_encoder_new: starting rfx codec session");
self->codec_id = client_info->rfx_codec_id;
self->in_codec_mode = 1;
client_info->capture_code = 2;
self->process_enc = process_enc_rfx;
self->codec_handle = rfxcodec_encode_create(mm->wm->screen->width,
mm->wm->screen->height,
RFX_FORMAT_YUV, 0);
return self;
}
}
#endif
else if (client_info->h264_codec_id != 0)
if (client_info->h264_codec_id != 0)
{
LOG(LOG_LEVEL_INFO, "xrdp_encoder_create: starting h264 codec session");
LOG(LOG_LEVEL_INFO, "xrdp_encoder_new: starting h264 codec session");
self->codec_id = client_info->h264_codec_id;
self->in_codec_mode = 1;
client_info->capture_code = 3;
client_info->capture_format = XRDP_nv12;
self->process_enc = process_enc_h264;
return self;
}
else

LOG(LOG_LEVEL_INFO,
"xrdp_encoder_new: No codec could be found for session");
g_free(self);
return NULL;
}


/*****************************************************************************/
struct xrdp_encoder *
xrdp_encoder_create(struct xrdp_mm *mm)
{
LOG_DEVEL(LOG_LEVEL_TRACE, "xrdp_encoder_create:");

struct xrdp_encoder *self;
char buf[1024];
int pid;
struct xrdp_client_info *client_info;

client_info = mm->wm->client_info;

if ((self = xrdp_encoder_new(mm)) == NULL)
{
g_free(self);
return 0;
return NULL;
}

LOG_DEVEL(LOG_LEVEL_INFO,
"init_xrdp_encoder: initializing encoder codec_id %d",
"xrdp_encoder_create: initializing encoder codec_id %d",
self->codec_id);

/* setup required FIFOs */
Expand Down
Loading
Loading