xfreerdp-server: cleanup

This commit is contained in:
Marc-André Moreau 2013-02-17 13:21:52 -05:00
parent f12e4ff89d
commit 47167b8c98
4 changed files with 10 additions and 131 deletions

View File

@ -38,27 +38,12 @@ XImage* xf_snapshot(xfPeerContext* xfp, int x, int y, int width, int height)
if (xfi->use_xshm) if (xfi->use_xshm)
{ {
pthread_mutex_lock(&(xfp->mutex)); XCopyArea(xfi->display, xfi->root_window, xfi->fb_pixmap, xfi->xdamage_gc, x, y, width, height, x, y);
XCopyArea(xfi->display, xfi->root_window, xfi->fb_pixmap,
xfi->xdamage_gc, x, y, width, height, x, y);
XSync(xfi->display, False);
image = xfi->fb_image; image = xfi->fb_image;
pthread_mutex_unlock(&(xfp->mutex));
} }
else else
{ {
pthread_mutex_lock(&(xfp->mutex)); image = XGetImage(xfi->display, xfi->root_window, x, y, width, height, AllPlanes, ZPixmap);
image = XGetImage(xfi->display, xfi->root_window,
x, y, width, height, AllPlanes, ZPixmap);
XSync(xfi->display, False);
pthread_mutex_unlock(&(xfp->mutex));
} }
return image; return image;
@ -75,10 +60,8 @@ void xf_xdamage_subtract_region(xfPeerContext* xfp, int x, int y, int width, int
region.height = height; region.height = height;
#ifdef WITH_XFIXES #ifdef WITH_XFIXES
pthread_mutex_lock(&(xfp->mutex));
XFixesSetRegion(xfi->display, xfi->xdamage_region, &region, 1); XFixesSetRegion(xfi->display, xfi->xdamage_region, &region, 1);
XDamageSubtract(xfi->display, xfi->xdamage, xfi->xdamage_region, None); XDamageSubtract(xfi->display, xfi->xdamage, xfi->xdamage_region, None);
pthread_mutex_unlock(&(xfp->mutex));
#endif #endif
} }
@ -132,7 +115,6 @@ void* xf_monitor_updates(void* param)
XEvent xevent; XEvent xevent;
fd_set rfds_set; fd_set rfds_set;
int select_status; int select_status;
int pending_events;
xfPeerContext* xfp; xfPeerContext* xfp;
freerdp_peer* client; freerdp_peer* client;
UINT32 wait_interval; UINT32 wait_interval;
@ -171,16 +153,10 @@ void* xf_monitor_updates(void* param)
} }
pthread_mutex_lock(&(xfp->mutex)); while (XPending(xfi->display) > 0)
pending_events = XPending(xfi->display);
pthread_mutex_unlock(&(xfp->mutex));
if (pending_events > 0)
{ {
pthread_mutex_lock(&(xfp->mutex));
ZeroMemory(&xevent, sizeof(xevent)); ZeroMemory(&xevent, sizeof(xevent));
XNextEvent(xfi->display, &xevent); XNextEvent(xfi->display, &xevent);
pthread_mutex_unlock(&(xfp->mutex));
if (xevent.type == xfi->xdamage_notify_event) if (xevent.type == xfi->xdamage_notify_event)
{ {
@ -191,11 +167,11 @@ void* xf_monitor_updates(void* param)
width = notify->area.width; width = notify->area.width;
height = notify->area.height; height = notify->area.height;
xf_xdamage_subtract_region(xfp, x, y, width, height);
pthread_mutex_lock(&(xfp->mutex)); pthread_mutex_lock(&(xfp->mutex));
gdi_InvalidateRegion(xfp->hdc, x, y, width, height); gdi_InvalidateRegion(xfp->hdc, x, y, width, height);
pthread_mutex_unlock(&(xfp->mutex)); pthread_mutex_unlock(&(xfp->mutex));
xf_xdamage_subtract_region(xfp, x, y, width, height);
} }
} }
} }

View File

@ -49,8 +49,6 @@ void xf_input_keyboard_event(rdpInput* input, UINT16 flags, UINT16 code)
if (keycode != 0) if (keycode != 0)
{ {
pthread_mutex_lock(&(xfp->mutex));
XTestGrabControl(xfi->display, True); XTestGrabControl(xfi->display, True);
if (flags & KBD_FLAGS_DOWN) if (flags & KBD_FLAGS_DOWN)
@ -59,8 +57,6 @@ void xf_input_keyboard_event(rdpInput* input, UINT16 flags, UINT16 code)
XTestFakeKeyEvent(xfi->display, keycode, False, 0); XTestFakeKeyEvent(xfi->display, keycode, False, 0);
XTestGrabControl(xfi->display, False); XTestGrabControl(xfi->display, False);
pthread_mutex_unlock(&(xfp->mutex));
} }
#endif #endif
} }
@ -78,7 +74,6 @@ void xf_input_mouse_event(rdpInput* input, UINT16 flags, UINT16 x, UINT16 y)
BOOL down = FALSE; BOOL down = FALSE;
xfInfo* xfi = xfp->info; xfInfo* xfi = xfp->info;
pthread_mutex_lock(&(xfp->mutex));
XTestGrabControl(xfi->display, True); XTestGrabControl(xfi->display, True);
if (flags & PTR_FLAGS_WHEEL) if (flags & PTR_FLAGS_WHEEL)
@ -113,7 +108,6 @@ void xf_input_mouse_event(rdpInput* input, UINT16 flags, UINT16 x, UINT16 y)
} }
XTestGrabControl(xfi->display, False); XTestGrabControl(xfi->display, False);
pthread_mutex_unlock(&(xfp->mutex));
#endif #endif
} }
@ -123,11 +117,9 @@ void xf_input_extended_mouse_event(rdpInput* input, UINT16 flags, UINT16 x, UINT
xfPeerContext* xfp = (xfPeerContext*) input->context; xfPeerContext* xfp = (xfPeerContext*) input->context;
xfInfo* xfi = xfp->info; xfInfo* xfi = xfp->info;
pthread_mutex_lock(&(xfp->mutex));
XTestGrabControl(xfi->display, True); XTestGrabControl(xfi->display, True);
XTestFakeMotionEvent(xfi->display, 0, x, y, CurrentTime); XTestFakeMotionEvent(xfi->display, 0, x, y, CurrentTime);
XTestGrabControl(xfi->display, False); XTestGrabControl(xfi->display, False);
pthread_mutex_unlock(&(xfp->mutex));
#endif #endif
} }

View File

@ -41,9 +41,6 @@
#include <freerdp/utils/file.h> #include <freerdp/utils/file.h>
#include <freerdp/utils/thread.h> #include <freerdp/utils/thread.h>
extern char* xf_pcap_file;
extern BOOL xf_pcap_dump_realtime;
#include "xf_input.h" #include "xf_input.h"
#include "xf_encode.h" #include "xf_encode.h"
@ -133,7 +130,7 @@ void xf_xshm_init(xfInfo* xfi)
xfi->fb_image = XShmCreateImage(xfi->display, xfi->visual, xfi->depth, xfi->fb_image = XShmCreateImage(xfi->display, xfi->visual, xfi->depth,
ZPixmap, NULL, &(xfi->fb_shm_info), xfi->width, xfi->height); ZPixmap, NULL, &(xfi->fb_shm_info), xfi->width, xfi->height);
if (xfi->fb_image == NULL) if (!xfi->fb_image)
{ {
printf("XShmCreateImage failed\n"); printf("XShmCreateImage failed\n");
return; return;
@ -198,7 +195,7 @@ xfInfo* xf_info_init()
xfi->display = XOpenDisplay(NULL); xfi->display = XOpenDisplay(NULL);
if (xfi->display == NULL) if (!xfi->display)
{ {
printf("failed to open display: %s\n", XDisplayName(NULL)); printf("failed to open display: %s\n", XDisplayName(NULL));
exit(1); exit(1);
@ -214,7 +211,7 @@ xfInfo* xf_info_init()
pfs = XListPixmapFormats(xfi->display, &pf_count); pfs = XListPixmapFormats(xfi->display, &pf_count);
if (pfs == NULL) if (!pfs)
{ {
printf("XListPixmapFormats failed\n"); printf("XListPixmapFormats failed\n");
exit(1); exit(1);
@ -331,85 +328,9 @@ STREAM* xf_peer_stream_init(xfPeerContext* context)
void xf_peer_live_rfx(freerdp_peer* client) void xf_peer_live_rfx(freerdp_peer* client)
{ {
xfPeerContext* xfp = (xfPeerContext*) client->context; xfPeerContext* xfp = (xfPeerContext*) client->context;
pthread_create(&(xfp->thread), 0, xf_monitor_updates, (void*) client); pthread_create(&(xfp->thread), 0, xf_monitor_updates, (void*) client);
} }
static BOOL xf_peer_sleep_tsdiff(UINT32 *old_sec, UINT32 *old_usec, UINT32 new_sec, UINT32 new_usec)
{
INT32 sec, usec;
if (*old_sec == 0 && *old_usec == 0)
{
*old_sec = new_sec;
*old_usec = new_usec;
return TRUE;
}
sec = new_sec - *old_sec;
usec = new_usec - *old_usec;
if (sec < 0 || (sec == 0 && usec < 0))
{
printf("Invalid time stamp detected.\n");
return FALSE;
}
*old_sec = new_sec;
*old_usec = new_usec;
while (usec < 0)
{
usec += 1000000;
sec--;
}
if (sec > 0)
Sleep(sec * 1000);
if (usec > 0)
USleep(usec);
return TRUE;
}
void xf_peer_dump_rfx(freerdp_peer* client)
{
STREAM* s;
UINT32 prev_seconds;
UINT32 prev_useconds;
rdpUpdate* update;
rdpPcap* pcap_rfx;
pcap_record record;
s = stream_new(512);
update = client->update;
client->update->pcap_rfx = pcap_open(xf_pcap_file, FALSE);
pcap_rfx = client->update->pcap_rfx;
if (pcap_rfx == NULL)
return;
prev_seconds = prev_useconds = 0;
while (pcap_has_next_record(pcap_rfx))
{
pcap_get_next_record_header(pcap_rfx, &record);
s->data = realloc(s->data, record.length);
record.data = s->data;
s->size = record.length;
pcap_get_next_record_content(pcap_rfx, &record);
s->p = s->data + s->size;
if (xf_pcap_dump_realtime && xf_peer_sleep_tsdiff(&prev_seconds, &prev_useconds, record.header.ts_sec, record.header.ts_usec) == FALSE)
break;
update->SurfaceCommand(update->context, s);
}
}
void xf_peer_rfx_update(freerdp_peer* client, int x, int y, int width, int height) void xf_peer_rfx_update(freerdp_peer* client, int x, int y, int width, int height)
{ {
STREAM* s; STREAM* s;
@ -474,8 +395,6 @@ void xf_peer_rfx_update(freerdp_peer* client, int x, int y, int width, int heigh
cmd->destTop = y; cmd->destTop = y;
cmd->destRight = x + width; cmd->destRight = x + width;
cmd->destBottom = y + height; cmd->destBottom = y + height;
XDestroyImage(image);
} }
cmd->bpp = 32; cmd->bpp = 32;
@ -595,15 +514,7 @@ BOOL xf_peer_activate(freerdp_peer* client)
rfx_context_reset(xfp->rfx_context); rfx_context_reset(xfp->rfx_context);
xfp->activated = TRUE; xfp->activated = TRUE;
if (xf_pcap_file != NULL) xf_peer_live_rfx(client);
{
client->update->dump_rfx = TRUE;
xf_peer_dump_rfx(client);
}
else
{
xf_peer_live_rfx(client);
}
return TRUE; return TRUE;
} }

View File

@ -45,7 +45,7 @@ void xf_server_main_loop(freerdp_listener* instance)
void* rfds[32]; void* rfds[32];
fd_set rfds_set; fd_set rfds_set;
memset(rfds, 0, sizeof(rfds)); ZeroMemory(rfds, sizeof(rfds));
while (1) while (1)
{ {