[vlc-commits] remoteosd: remove

Rémi Denis-Courmont git at videolan.org
Wed May 15 19:36:23 CEST 2019


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed May 15 20:20:52 2019 +0300| [56fb22c5a4f2c924103d37d3b3dff6f749d6079d] | committer: Rémi Denis-Courmont

remoteosd: remove

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=56fb22c5a4f2c924103d37d3b3dff6f749d6079d
---

 NEWS                             |    1 +
 modules/spu/Makefile.am          |    7 -
 modules/spu/remoteosd.c          | 1349 --------------------------------------
 modules/spu/remoteosd_rfbproto.h |  729 --------------------
 po/POTFILES.in                   |    1 -
 5 files changed, 1 insertion(+), 2086 deletions(-)

diff --git a/NEWS b/NEWS
index df6d552ce4..a90762a649 100644
--- a/NEWS
+++ b/NEWS
@@ -53,6 +53,7 @@ Video output:
 
 Video filter:
  * Update yadif
+ * Remove remote OSD plugin
 
 Stream output:
  * New SDI output with improved audio and ancillary support.
diff --git a/modules/spu/Makefile.am b/modules/spu/Makefile.am
index ec956b29fe..571fcca299 100644
--- a/modules/spu/Makefile.am
+++ b/modules/spu/Makefile.am
@@ -29,10 +29,3 @@ libdynamicoverlay_plugin_la_SOURCES = \
 if !HAVE_WIN32
 spu_LTLIBRARIES += libdynamicoverlay_plugin.la
 endif
-
-libremoteosd_plugin_la_SOURCES = spu/remoteosd.c spu/remoteosd_rfbproto.h
-libremoteosd_plugin_la_CFLAGS = $(AM_CFLAGS) $(GCRYPT_CFLAGS)
-libremoteosd_plugin_la_LIBADD = $(GCRYPT_LIBS) $(SOCKET_LIBS)
-if HAVE_GCRYPT
-spu_LTLIBRARIES += libremoteosd_plugin.la
-endif
diff --git a/modules/spu/remoteosd.c b/modules/spu/remoteosd.c
deleted file mode 100644
index bfa52a8784..0000000000
--- a/modules/spu/remoteosd.c
+++ /dev/null
@@ -1,1349 +0,0 @@
-/*****************************************************************************
- * remoteosd.c: remote osd over vnc filter module
- *****************************************************************************
- * Copyright (C) 2007-2008 Matthias Bauer
- *
- * Authors: Matthias Bauer <matthias dot bauer #_at_# gmx dot ch>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implid warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * RemoteOSD uses the RFB-Protocol of VNC to display an On-Screen-Display
- * menu generated by a streaming server as overlay for the streamed video.
- *
- * The streaming server that implements this is the ffnetdev plugin for VDR.
- * VDR (VideoDiskRecorder) is an Linux based OpenSource harddisk recorder
- * software.
- * The VDR ffnetdev plugin emulates the hardware MPEG decoder and streams the
- * video over the network instead of hardware video outputs.
- * The OSD menu of VDR is offered with the RFB protocol to a VNC client.
- *
- * In fact this video-filter is a simple VNC client that could be also used to
- * connect to a real VNC host.
- * Only 8-bit color is supported at the moment.
- * Using password protected VNC hosts is supported but not recommended, because
- * you need to insert the used password in the plugin configuration page of
- * VLC configuration in plain text and it's saved in plain text.
- *****************************************************************************/
-
-//#define VNC_DEBUG
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <vlc_common.h>
-#include <vlc_plugin.h>
-#include <vlc_filter.h>
-#include <vlc_mouse.h>
-#include <vlc_subpicture.h>
-#include <vlc_actions.h>               /* KEY_MODIFIER_CTRL */
-
-#include <vlc_network.h>               /* htonl */
-#include <vlc_tls.h>
-#include <gcrypt.h>                    /* to encrypt password */
-#include <vlc_gcrypt.h>
-
-#include "remoteosd_rfbproto.h" /* type definitions of the RFB protocol for VNC */
-
-/*****************************************************************************
- * Module descriptor
- *****************************************************************************/
-#define READ_BUFFER_SIZE 1000000
-
-#define RMTOSD_HOST_TEXT N_("VNC Host")
-#define RMTOSD_HOST_LONGTEXT N_( \
-    "VNC hostname or IP address." )
-
-#define RMTOSD_PORT_TEXT N_("VNC Port")
-#define RMTOSD_PORT_LONGTEXT N_( \
-    "VNC port number." )
-
-#define RMTOSD_PASSWORD_TEXT N_("VNC Password")
-#define RMTOSD_PASSWORD_LONGTEXT N_( \
-    "VNC password." )
-
-#define RMTOSD_UPDATE_TEXT N_("VNC poll interval" )
-#define RMTOSD_UPDATE_LONGTEXT N_( \
-    "In this interval an update from VNC is requested, default every 300 ms.")
-
-#define RMTOSD_POLL_TEXT N_("VNC polling")
-#define RMTOSD_POLL_LONGTEXT N_( \
-    "Activate VNC polling. Do NOT activate for use as VDR ffnetdev client." )
-
-#define RMTOSD_MOUSE_TEXT N_("Mouse events")
-#define RMTOSD_MOUSE_LONGTEXT N_( \
-    "Send mouse events to VNC host. Not needed for use as VDR ffnetdev client." )
-
-#define RMTOSD_KEYS_TEXT N_("Key events")
-#define RMTOSD_KEYS_LONGTEXT N_( \
-    "Send key events to VNC host." )
-
-#define RMTOSD_ALPHA_TEXT N_("Alpha transparency value (default 255)")
-#define RMTOSD_ALPHA_LONGTEXT N_( \
-    "The transparency of the OSD VNC can be changed by giving a value " \
-    "between 0 and 255. A lower value specifies more transparency a higher " \
-    "means less transparency. The default is being not transparent " \
-    "(value 255) the minimum is fully transparent (value 0)." )
-
-#define RMTOSD_CFG "rmtosd-"
-
-#define RMTOSD_UPDATE_MIN     200
-#define RMTOSD_UPDATE_DEFAULT 1000
-#define RMTOSD_UPDATE_MAX     300
-
-static int  CreateFilter ( vlc_object_t * );
-static void DestroyFilter( vlc_object_t * );
-
-vlc_module_begin ()
-    set_description( N_("Remote-OSD over VNC") )
-    set_capability( "sub source", 100 )
-    set_shortname( N_("Remote-OSD") )
-    set_category( CAT_VIDEO )
-    set_subcategory( SUBCAT_VIDEO_SUBPIC )
-    add_shortcut( "rmtosd" )
-    set_callbacks( CreateFilter, DestroyFilter )
-
-    add_string( RMTOSD_CFG "host", "myvdr", RMTOSD_HOST_TEXT,
-        RMTOSD_HOST_LONGTEXT, false )
-    add_integer_with_range( RMTOSD_CFG "port", 20001, 1, 0xFFFF,
-        RMTOSD_PORT_TEXT, RMTOSD_PORT_LONGTEXT, false )
-    add_password(RMTOSD_CFG "password", "", RMTOSD_PASSWORD_TEXT,
-                 RMTOSD_PASSWORD_LONGTEXT)
-    add_integer_with_range( RMTOSD_CFG "update", RMTOSD_UPDATE_DEFAULT,
-        RMTOSD_UPDATE_MIN, RMTOSD_UPDATE_MAX, RMTOSD_UPDATE_TEXT,
-        RMTOSD_UPDATE_LONGTEXT, true )
-    add_bool( RMTOSD_CFG "vnc-polling", false,
-              RMTOSD_POLL_TEXT , RMTOSD_POLL_LONGTEXT, false )
-    add_bool( RMTOSD_CFG "mouse-events", false,
-              RMTOSD_MOUSE_TEXT , RMTOSD_MOUSE_LONGTEXT, false )
-    add_bool( RMTOSD_CFG "key-events", false,
-              RMTOSD_KEYS_TEXT , RMTOSD_KEYS_LONGTEXT, false )
-    add_integer_with_range( RMTOSD_CFG "alpha", 255, 0, 255,
-        RMTOSD_ALPHA_TEXT, RMTOSD_ALPHA_LONGTEXT, true )
-
-vlc_module_end ()
-
-
-/*****************************************************************************
- * Local prototypes
- *****************************************************************************/
-#define CHALLENGESIZE 16
-#define MAX_VNC_SERVER_NAME_LENGTH 255
-
-typedef struct filter_sys_t filter_sys_t;
-
-/* subsource functions */
-static subpicture_t *Filter( filter_t *, vlc_tick_t );
-
-static int MouseEvent( filter_t *,
-                       const vlc_mouse_t *,
-                       const vlc_mouse_t *,
-                       const video_format_t * );
-
-static int KeyEvent( vlc_object_t *p_this, char const *psz_var,
-                     vlc_value_t oldval, vlc_value_t newval, void *p_data );
-
-static void* vnc_worker_thread ( void * );
-
-static void* update_request_thread( void * );
-
-static bool process_server_message ( filter_t *p_filter,
-                                     rfbServerToClientMsg *msg );
-
-static inline void rgb_to_yuv( uint8_t *y, uint8_t *u, uint8_t *v,
-                               int r, int g, int b );
-
-static inline bool fill_rect( filter_sys_t* p_sys,
-                              uint16_t i_x, uint16_t i_y,
-                              uint16_t i_w, uint16_t i_h,
-                              uint8_t i_color );
-static inline bool copy_rect( filter_sys_t* p_sys,
-                              uint16_t i_x, uint16_t i_y,
-                              uint16_t i_w, uint16_t i_h,
-                              uint16_t i_sx, uint16_t i_sy );
-
-
-static inline bool raw_line(  filter_sys_t* p_sys,
-                              uint16_t i_x, uint16_t i_y,
-                              uint16_t i_w );
-
-static int vnc_encrypt_bytes( unsigned char *bytes, char *passwd );
-
-
-/*****************************************************************************
- * Sub source code
- *****************************************************************************/
-
-/*****************************************************************************
- * Local prototypes
- *****************************************************************************/
-struct filter_sys_t
-{
-    vlc_mutex_t   lock;                /* To lock for read/write on picture */
-
-    bool          b_need_update;       /* VNC picture is updated, do update the OSD*/
-    uint8_t       i_alpha;             /* alpha transparency value */
-
-    char          *psz_host;           /* VNC host */
-
-    char          *psz_passwd;         /* VNC password */
-
-    picture_t     *p_pic;              /* The picture with OSD data from VNC */
-
-    vlc_tls_t    *i_socket;            /* Socket used for VNC */
-
-    uint16_t      i_vnc_width;          /* The with of the VNC screen */
-    uint16_t      i_vnc_height;         /* The height of the VNC screen */
-
-    bool          b_vnc_key_events;    /* Send KeyEvents ? */
-    bool    b_alpha_from_vnc;    /* Special ffnetdev alpha feature enabled ? */
-
-    char          read_buffer[READ_BUFFER_SIZE];
-
-    vlc_thread_t  worker_thread;
-
-    uint8_t       ar_color_table_yuv[256][4];
-};
-
-/*****************************************************************************
- * CreateFilter: Create the filter and open the definition file
- *****************************************************************************/
-static int CreateFilter ( vlc_object_t *p_this )
-{
-    filter_t *p_filter = (filter_t *)p_this;
-
-    filter_sys_t *p_sys = malloc( sizeof (*p_sys) );
-    if( unlikely(p_sys == NULL) )
-        return VLC_ENOMEM;
-
-    /* Populating struct */
-    vlc_mutex_init( &p_sys->lock );
-    p_sys->b_need_update = false;
-    p_sys->psz_host = var_InheritString( p_this, RMTOSD_CFG "host" );
-    p_sys->psz_passwd = var_InheritString( p_this, RMTOSD_CFG "password" );
-    p_sys->i_alpha = var_InheritInteger( p_this, RMTOSD_CFG "alpha" );
-    p_sys->p_pic = NULL;
-    p_sys->i_socket = NULL;
-
-    memset( p_sys->ar_color_table_yuv, 255,
-            sizeof( p_sys->ar_color_table_yuv ) );
-
-    if( p_sys->psz_host == NULL )
-    {
-        msg_Err( p_filter, "unable to get vnc host" );
-        goto error;
-    }
-
-    if( p_sys->psz_passwd == NULL )
-    {
-        msg_Err( p_filter, "unable to get vnc password" );
-        goto error;
-    }
-
-    p_filter->p_sys = p_sys;
-
-    vlc_gcrypt_init();
-
-    /* create the vnc worker thread */
-    if( vlc_clone( &p_sys->worker_thread,
-                   vnc_worker_thread, p_filter, VLC_THREAD_PRIORITY_LOW ) )
-    {
-        msg_Err( p_filter, "cannot spawn vnc message reader thread" );
-        goto error;
-    }
-
-    /* Attach subpicture source callback */
-    p_filter->pf_sub_source = Filter;
-
-    es_format_Init( &p_filter->fmt_out, SPU_ES, VLC_CODEC_SPU );
-    p_filter->fmt_out.i_priority = ES_PRIORITY_SELECTABLE_MIN;
-
-    if( var_InheritBool( p_this, RMTOSD_CFG "mouse-events" ) )
-        p_filter->pf_sub_mouse = MouseEvent;
-
-    p_sys->b_vnc_key_events = var_InheritBool( p_this,
-                                               RMTOSD_CFG "key-events" );
-    if( p_sys->b_vnc_key_events )
-        var_AddCallback( vlc_object_instance(p_filter), "key-pressed",
-                         KeyEvent, p_this );
-
-    msg_Dbg( p_filter, "osdvnc filter started" );
-
-    return VLC_SUCCESS;
-
-error:
-    msg_Err( p_filter, "osdvnc filter discarded" );
-
-    vlc_mutex_destroy( &p_sys->lock );
-    free( p_sys->psz_host );
-    free( p_sys->psz_passwd );
-    free( p_sys );
-
-    return VLC_EGENERIC;
-}
-
-/*****************************************************************************
- * DestroyFilter: Make a clean exit of this plugin
- *****************************************************************************/
-static void DestroyFilter( vlc_object_t *p_this )
-{
-    filter_t     *p_filter = (filter_t*)p_this;
-    filter_sys_t *p_sys = p_filter->p_sys;
-
-    msg_Dbg( p_filter, "DestroyFilter called." );
-
-    if( p_sys->b_vnc_key_events )
-        var_DelCallback( vlc_object_instance(p_filter), "key-pressed",
-                         KeyEvent, p_this );
-
-    vlc_cancel( p_sys->worker_thread );
-    vlc_join( p_sys->worker_thread, NULL );
-
-    if( p_sys->p_pic != NULL )
-        picture_Release( p_sys->p_pic );
-    if( p_sys->i_socket != NULL )
-        vlc_tls_Close( p_sys->i_socket );
-
-    vlc_mutex_destroy( &p_sys->lock );
-    free( p_sys->psz_host );
-    free( p_sys->psz_passwd );
-    free( p_sys );
-}
-
-static bool read_exact( vlc_tls_t *fd, void *buf, size_t len )
-{
-    return (ssize_t)len == vlc_tls_Read( fd, buf, len, true );
-}
-
-
-static bool write_exact( vlc_tls_t *fd, const void *buf, size_t len )
-{
-    return (ssize_t)len == vlc_tls_Write( fd, buf, len );
-}
-
-static vlc_tls_t *vnc_connect( filter_t *p_filter )
-{
-    filter_sys_t *p_sys = p_filter->p_sys;
-
-    int port = var_InheritInteger( p_filter, RMTOSD_CFG "port" );
-
-    vlc_tls_t *fd = vlc_tls_SocketOpenTCP( VLC_OBJECT(p_filter),
-                                           p_sys->psz_host, port );
-    if( fd == NULL )
-    {
-        msg_Err( p_filter, "Could not connect to VNC host" );
-        return NULL;
-    }
-
-    msg_Dbg( p_filter, "Reading protocol version" );
-
-    rfbProtocolVersionMsg pv;
-    if ( !read_exact( fd, pv, sz_rfbProtocolVersionMsg ) )
-    {
-        msg_Err( p_filter, "Could not read version message" );
-        goto error;
-    }
-    pv[sz_rfbProtocolVersionMsg] = '\0'; /* pv size is sz_rfbProtocolVersionMsg+1 */
-
-    msg_Dbg( p_filter, "Server version is %s", pv );
-
-    static const char version[sz_rfbProtocolVersionMsg] = "RFB 003.003\n";
-
-    if( !write_exact(fd, version, sz_rfbProtocolVersionMsg) )
-    {
-        msg_Err( p_filter, "Could not write version message" );
-        goto error;
-    }
-
-    msg_Dbg( p_filter, "Reading authentication scheme" );
-    uint32_t i_authScheme;
-    if( !read_exact( fd, &i_authScheme, 4 ) )
-    {
-        msg_Err( p_filter, "Could not read authentication scheme" );
-        goto error;
-    }
-    i_authScheme = htonl(i_authScheme);
-
-    msg_Dbg( p_filter, "Authentication scheme = %x", i_authScheme );
-    if ( i_authScheme == rfbConnFailed )
-    {
-        msg_Err( p_filter, "Connection rejected by server" );
-        goto error;
-    }
-    if (i_authScheme == rfbVncAuth)
-    {
-        unsigned char challenge[CHALLENGESIZE];
-        if ( !read_exact( fd, challenge, CHALLENGESIZE ) )
-        {
-            msg_Err( p_filter, "Could not read password challenge" );
-            goto error;
-        }
-
-        int err = vnc_encrypt_bytes( challenge, p_sys->psz_passwd );
-        if (err != VLC_SUCCESS)
-            return false;
-
-        if( !write_exact(fd, challenge, CHALLENGESIZE ) )
-        {
-            msg_Err( p_filter, "Could not write password" );
-            goto error;
-        }
-        uint32_t i_authResult;
-        if( !read_exact( fd, &i_authResult, 4 ) )
-        {
-            msg_Err( p_filter, "Could not read authentication result" );
-            goto error;
-        }
-        i_authResult = htonl(i_authResult);
-        if (i_authResult != rfbVncAuthOK)
-        {
-            msg_Err( p_filter, "VNC authentication failed" );
-            goto error;
-        }
-    }
-
-    msg_Dbg( p_filter, "Writing client init message" );
-    rfbClientInitMsg ci;
-    ci.shared = 1;
-    if( !write_exact( fd, &ci, sz_rfbClientInitMsg ) )
-    {
-        msg_Err( p_filter, "Could not write client init message" );
-        goto error;
-    }
-
-    msg_Dbg( p_filter, "Reading server init message" );
-    rfbServerInitMsg si;
-    if( !read_exact( fd, &si, sz_rfbServerInitMsg ) )
-    {
-        msg_Err( p_filter, "Could not read server init message" );
-        goto error;
-    }
-    si.framebufferWidth = htons(si.framebufferWidth);
-    si.framebufferHeight = htons(si.framebufferHeight);
-    si.format.redMax = htons(si.format.redMax);
-    si.format.greenMax = htons(si.format.greenMax);
-    si.format.blueMax = htons(si.format.blueMax);
-
-    p_sys->i_vnc_width = si.framebufferWidth;
-    p_sys->i_vnc_height = si.framebufferHeight;
-
-    msg_Dbg( p_filter, "Servers preferred pixelformat: "
-                        "%ux%u, R(%u),G(%u),B(%u), %u bit, depht=%u, %s",
-                        si.framebufferWidth,
-                        si.framebufferHeight,
-                        si.format.redMax,
-                        si.format.greenMax,
-                        si.format.blueMax,
-                        si.format.bitsPerPixel,
-                        si.format.depth,
-                        si.format.trueColour ? "TrueColor" : "Not-TrueColor");
-
-    uint32_t i_nameLength = htonl(si.nameLength);
-    if( i_nameLength > MAX_VNC_SERVER_NAME_LENGTH )
-    {
-        msg_Err( p_filter, "Server name too long" );
-        goto error;
-    }
-    char s_ServerName[MAX_VNC_SERVER_NAME_LENGTH+1];
-
-    msg_Dbg( p_filter, "Reading server name with size = %u", i_nameLength );
-    if( !read_exact( fd, s_ServerName, i_nameLength ) )
-    {
-        msg_Err( p_filter, "Could not read server name" );
-        goto error;
-    }
-    s_ServerName[i_nameLength] = '\0';
-
-    if( strcmp( s_ServerName, "VDR-OSD") == 0 )
-    {
-        msg_Dbg( p_filter, "Server is a VDR" );
-        p_sys->b_alpha_from_vnc = true;
-    }
-    else
-    {
-        msg_Dbg( p_filter, "Server is a normal VNC" );
-        p_sys->b_alpha_from_vnc = false;
-    }
-
-
-    msg_Dbg( p_filter, "Server init message read properly" );
-    msg_Dbg( p_filter, "Server name is %s", s_ServerName );
-
-    msg_Dbg( p_filter, "Writing SetPixelFormat message" );
-
-    rfbSetPixelFormatMsg sp;
-    sp.type = rfbSetPixelFormat;
-    sp.pad1 = sp.pad2 = 0;
-    sp.format.bitsPerPixel = 8;
-    sp.format.depth = 8 ;
-    sp.format.bigEndian = 1;
-    sp.format.trueColour = 0;
-    sp.format.redMax = htons(31);
-    sp.format.greenMax = htons(31);
-    sp.format.blueMax = htons(31);
-    sp.format.redShift = 10;
-    sp.format.greenShift = 5;
-    sp.format.blueShift = 0;
-    sp.format.pad1 = sp.format.pad2 = 0;
-
-    if( !write_exact( fd, &sp, sz_rfbSetPixelFormatMsg) )
-    {
-        msg_Err( p_filter, "Could not write SetPixelFormat message" );
-        goto error;
-    }
-
-    msg_Dbg( p_filter, "Writing SetEncodings message" );
-
-    rfbSetEncodingsMsg se;
-    se.type = rfbSetEncodings;
-    se.pad = 0;
-    se.nEncodings = htons( p_sys->b_alpha_from_vnc ? 3 : 2 );
-
-    if( !write_exact( fd, &se, sz_rfbSetEncodingsMsg) )
-    {
-        msg_Err( p_filter, "Could not write SetEncodings message begin" );
-        goto error;
-    }
-
-    uint32_t i_encoding;
-
-    msg_Dbg( p_filter, "Writing SetEncodings rfbEncodingCopyRect" );
-    i_encoding = htonl(rfbEncodingCopyRect);
-    if( !write_exact( fd, &i_encoding, 4) )
-    {
-        msg_Err( p_filter, "Could not write encoding type rfbEncodingCopyRect." );
-        goto error;
-    }
-
-    msg_Dbg( p_filter, "Writing SetEncodings rfbEncodingRRE" );
-    i_encoding = htonl(rfbEncodingRRE);
-    if( !write_exact(fd, &i_encoding, 4) )
-    {
-        msg_Err( p_filter, "Could not write encoding type rfbEncodingRRE." );
-        goto error;
-    }
-
-    if( p_sys->b_alpha_from_vnc )
-    {
-        msg_Dbg( p_filter, "Writing SetEncodings rfbEncSpecialUseAlpha" );
-        i_encoding = 0x00F0FFFF; /* rfbEncSpecialUseAlpha is 0xFFFFF000
-                                  * before we swap it */
-        if( !write_exact(fd, &i_encoding, 4) )
-        {
-            msg_Err( p_filter, "Could not write encoding type rfbEncSpecialUseAlpha." );
-            goto error;
-        }
-    }
-
-    return fd;
-error:
-    vlc_tls_Close( fd );
-    return NULL;
-}
-
-static int write_update_request(filter_t *p_filter, bool incremental)
-{
-    filter_sys_t *p_sys = p_filter->p_sys;
-    rfbFramebufferUpdateRequestMsg udr;
-
-    udr.type = rfbFramebufferUpdateRequest;
-    udr.incremental = incremental;
-    udr.x = 0;
-    udr.y = 0;
-    udr.w = htons(p_sys->i_vnc_width);
-    udr.h = htons(p_sys->i_vnc_height);
-
-    int w = write_exact(p_sys->i_socket, &udr,
-                        sz_rfbFramebufferUpdateRequestMsg);
-    if( !w )
-        msg_Err( p_filter, "Could not write rfbFramebufferUpdateRequestMsg." );
-    return w;
-}
-
-static void update_thread_cleanup( void *p )
-{
-    vlc_thread_t *th = p;
-
-    vlc_cancel( *th );
-    vlc_join( *th, NULL );
-}
-
-static void dummy_cleanup( void *p )
-{
-    (void) p;
-}
-
-static void* vnc_worker_thread( void *obj )
-{
-    filter_t* p_filter = (filter_t*)obj;
-    filter_sys_t *p_sys = p_filter->p_sys;
-    vlc_thread_t update_thread;
-    int canc = vlc_savecancel ();
-
-    msg_Dbg( p_filter, "VNC worker thread started" );
-
-    vlc_tls_t *fd = vnc_connect( p_filter );
-    if( fd == NULL )
-    {
-        msg_Err( p_filter, "Error occurred while handshaking VNC host" );
-        return NULL;
-    }
-
-    /* Create an empty picture for VNC the data */
-    picture_t *pic =  picture_New( VLC_CODEC_YUVA, p_sys->i_vnc_width,
-                                   p_sys->i_vnc_height, 1, 1 );
-    if( likely(pic != NULL) )
-    {
-        vlc_mutex_lock( &p_sys->lock );
-        p_sys->i_socket = fd;
-        p_sys->p_pic = pic;
-        vlc_mutex_unlock( &p_sys->lock );
-    }
-    else
-    {
-        vlc_tls_Close( fd );
-        return NULL;
-    }
-
-    write_update_request( p_filter, false );
-
-    /* create the update request thread */
-    bool polling = var_InheritBool( p_filter, RMTOSD_CFG "vnc-polling" );
-    if( polling
-     && vlc_clone( &update_thread, update_request_thread,
-                   p_filter, VLC_THREAD_PRIORITY_LOW ) )
-    {
-        msg_Err( p_filter, "cannot spawn VNC update request thread" );
-        polling = false;
-    }
-
-    vlc_cleanup_push( polling ? update_thread_cleanup : dummy_cleanup,
-                      &update_thread );
-
-    /* connection is initialized, now read and handle server messages */
-    for( ;; )
-    {
-        rfbServerToClientMsg msg;
-        int i_msgSize;
-
-        memset( &msg, 0, sizeof(msg) );
-        vlc_restorecancel (canc);
-
-        if( !read_exact(fd, &msg, 1 ) )
-        {
-            msg_Err( p_filter, "Error while waiting for next server message");
-            break;
-        }
-        switch (msg.type)
-        {
-        case rfbFramebufferUpdate:
-            i_msgSize = sz_rfbFramebufferUpdateMsg;
-            break;
-        case rfbSetColourMapEntries:
-            i_msgSize = sz_rfbSetColourMapEntriesMsg;
-            break;
-        case rfbBell:
-            i_msgSize = sz_rfbBellMsg;
-            break;
-        case rfbServerCutText:
-            i_msgSize = sz_rfbServerCutTextMsg;
-            break;
-        case rfbReSizeFrameBuffer:
-            i_msgSize = sz_rfbReSizeFrameBufferMsg;
-            break;
-        default:
-            i_msgSize = 0;
-            msg_Err( p_filter, "Invalid message %u received", msg.type );
-            break;
-        }
-
-        if( i_msgSize <= 0 )
-            break;
-
-        if( --i_msgSize > 0 )
-        {
-            if ( !read_exact( fd, ((char *)&msg) + 1, i_msgSize ) )
-            {
-                msg_Err( p_filter, "Error while reading message of type %u",
-                         msg.type );
-                break;
-            }
-        }
-
-        canc = vlc_savecancel ();
-        process_server_message( p_filter, &msg);
-    }
-
-    vlc_cleanup_pop();
-    if( polling )
-        update_thread_cleanup( &update_thread );
-
-    msg_Dbg( p_filter, "VNC message reader thread ended" );
-    vlc_restorecancel (canc);
-    return NULL;
-}
-
-static void* update_request_thread( void *obj )
-{
-    filter_t* p_filter = (filter_t*)obj;
-    int canc = vlc_savecancel();
-    vlc_tick_t interval = VLC_TICK_FROM_MS( var_InheritInteger( p_filter, RMTOSD_CFG "update" ) );
-    vlc_restorecancel(canc);
-
-    if( interval < VLC_TICK_FROM_MS(100) )
-        interval = VLC_TICK_FROM_MS(100);
-
-    do
-        vlc_tick_sleep( interval );
-    while( write_update_request( p_filter, true ) );
-
-    return NULL;
-}
-
-static bool process_server_message ( filter_t *p_filter,
-                                     rfbServerToClientMsg *msg )
-{
-    filter_sys_t *p_sys = p_filter->p_sys;
-
-    switch (msg->type)
-    {
-    case rfbFramebufferUpdate:
-        {
-            msg->fu.nRects = htons(msg->fu.nRects);
-            rfbFramebufferUpdateRectHeader hdr;
-
-            for (int i_rect = 0; i_rect < msg->fu.nRects; i_rect++)
-            {
-                if (!read_exact(p_sys->i_socket, &hdr,
-                                sz_rfbFramebufferUpdateRectHeader ) )
-                {
-                    msg_Err( p_filter, "Could not read FrameBufferUpdate header" );
-                    return false;
-                }
-                hdr.r.x = htons(hdr.r.x);
-                hdr.r.y = htons(hdr.r.y);
-                hdr.r.w = htons(hdr.r.w);
-                hdr.r.h = htons(hdr.r.h);
-                hdr.encoding = htonl(hdr.encoding);
-
-                switch (hdr.encoding)
-                {
-                case rfbEncodingRaw:
-                    {
-                        int i_line;
-                        for (i_line = 0; i_line < hdr.r.h; i_line++)
-                        {
-                            if ( !read_exact( p_sys->i_socket,
-                                    p_sys->read_buffer, hdr.r.w ) )
-                            {
-                                msg_Err( p_filter,
-                                 "Could not read FrameBufferUpdate line data" );
-                               return false;
-                            }
-                            vlc_mutex_lock( &p_sys->lock );
-                            if ( !raw_line( p_sys, hdr.r.x,
-                                            hdr.r.y + i_line,
-                                            hdr.r.w ) )
-                            {
-                                msg_Err( p_filter, "raw_line failed." );
-                                vlc_mutex_unlock( &p_sys->lock );
-                                return false;
-                            }
-                            vlc_mutex_unlock( &p_sys->lock );
-                        }
-                    }
-                    break;
-
-                case rfbEncodingCopyRect:
-                    {
-                        rfbCopyRect rect;
-
-                        if ( !read_exact( p_sys->i_socket,
-                                          &rect, sz_rfbCopyRect ) )
-                        {
-                            msg_Err( p_filter, "Could not read rfbCopyRect" );
-                            return false;
-                        }
-                        rect.srcX = htons( rect.srcX );
-                        rect.srcY = htons( rect.srcY );
-
-                        vlc_mutex_lock( &p_sys->lock );
-                        if ( !copy_rect( p_sys,
-                                         hdr.r.x,   hdr.r.y,
-                                         hdr.r.w,   hdr.r.h,
-                                         rect.srcX, rect.srcY ) )
-                        {
-                            msg_Err( p_filter, "copy_rect failed." );
-                            vlc_mutex_unlock( &p_sys->lock );
-                            return false;
-                        }
-                        vlc_mutex_unlock( &p_sys->lock );
-                    }
-                    break;
-
-                case rfbEncodingRRE:
-                    {
-                        rfbRREHeader rrehdr;
-                        if ( !read_exact( p_sys->i_socket,
-                                          &rrehdr, sz_rfbRREHeader ) )
-                        {
-                            msg_Err( p_filter, "Could not read rfbRREHeader" );
-                            return false;
-                        }
-                        uint8_t i_pixcolor;
-                        if ( !read_exact( p_sys->i_socket,
-                                          &i_pixcolor, 1 ) )
-                        {
-                            msg_Err( p_filter, "Could not read RRE pixcolor" );
-                            return false;
-                        }
-
-                        vlc_mutex_lock( &p_sys->lock );
-                        if ( !fill_rect( p_sys,
-                                        hdr.r.x, hdr.r.y,
-                                        hdr.r.w, hdr.r.h,
-                                        i_pixcolor) )
-                        {
-                            msg_Err( p_filter, "main fill_rect failed." );
-                            vlc_mutex_unlock( &p_sys->lock );
-                            return false;
-                        }
-                        vlc_mutex_unlock( &p_sys->lock );
-
-                        rrehdr.nSubrects = htonl(rrehdr.nSubrects);
-
-                        int i_datasize = rrehdr.nSubrects *
-                                     ( sizeof(i_pixcolor) + sz_rfbRectangle ) ;
-                        if ( i_datasize > READ_BUFFER_SIZE )
-                        {
-                            msg_Err( p_filter, "Buffer too small, "
-                                     "need %u bytes", i_datasize );
-                            return false;
-                        }
-                        if ( !read_exact( p_sys->i_socket,
-                                          p_sys->read_buffer, i_datasize ) )
-                        {
-                            msg_Err( p_filter,
-                                     "Could not read RRE subrect data" );
-                            return false;
-                        }
-
-                        uint32_t i_subrect;
-                        rfbRectangle* p_subrect;
-                        int i_offset = 0;
-                        vlc_mutex_lock( &p_sys->lock );
-                        for ( i_subrect = 0;
-                              i_subrect < rrehdr.nSubrects; i_subrect++)
-                        {
-                            i_pixcolor = p_sys->read_buffer[i_offset];
-                            i_offset += sizeof(i_pixcolor);
-                            p_subrect =
-                               (rfbRectangle*)(p_sys->read_buffer + i_offset);
-                            i_offset += sz_rfbRectangle;
-
-                            if (!fill_rect( p_sys,
-                                            htons(p_subrect->x) + hdr.r.x,
-                                            htons(p_subrect->y) + hdr.r.y,
-                                            htons(p_subrect->w),
-                                            htons(p_subrect->h),
-                                            i_pixcolor) )
-                            {
-                                msg_Err( p_filter,
-                                    "subrect %u fill_rect failed.", i_subrect );
-                                vlc_mutex_unlock( &p_sys->lock );
-                                return false;
-                            }
-                        }
-                        vlc_mutex_unlock( &p_sys->lock );
-                    }
-                    break;
-
-                }
-
-            }
-            vlc_mutex_lock( &p_sys->lock );
-            p_sys->b_need_update = true;
-            vlc_mutex_unlock( &p_sys->lock );
-        }
-        return true;
-
-    case rfbSetColourMapEntries:
-        {
-            msg->scme.nColours = htons(msg->scme.nColours);
-            msg->scme.firstColour = htons(msg->scme.firstColour);
-            int i_datasize;
-            if ( p_sys->b_alpha_from_vnc )
-            {
-                i_datasize = 2 * msg->scme.nColours * 4;
-            }
-            else
-            {
-                i_datasize = 2 * msg->scme.nColours * 3;
-            }
-            if ( i_datasize > READ_BUFFER_SIZE )
-            {
-                msg_Err( p_filter, "Buffer too small, need %u bytes",
-                                   i_datasize );
-                return false;
-            }
-
-            if ( !read_exact( p_sys->i_socket,
-                              p_sys->read_buffer, i_datasize ) )
-            {
-                msg_Err( p_filter, "Could not read color map data" );
-                return false;
-            }
-
-            uint8_t i_red, i_green, i_blue, i_alpha, i_color_index;
-            uint16_t i_offset = 0;
-            i_alpha = 255;
-
-            for (int i = 0; i < msg->scme.nColours; i++)
-            {
-                i_color_index = i+msg->scme.firstColour;
-                if ( p_sys->b_alpha_from_vnc )
-                {
-                    i_alpha = p_sys->read_buffer[i_offset];
-                    i_offset += 2;
-                }
-                i_red   = p_sys->read_buffer[i_offset];
-                i_offset += 2;
-                i_green = p_sys->read_buffer[i_offset];
-                i_offset += 2;
-                i_blue  = p_sys->read_buffer[i_offset];
-                i_offset += 2;
-                rgb_to_yuv( &p_sys->ar_color_table_yuv[i_color_index][0],
-                            &p_sys->ar_color_table_yuv[i_color_index][1],
-                            &p_sys->ar_color_table_yuv[i_color_index][2],
-                            i_red,
-                            i_green,
-                            i_blue );
-                p_sys->ar_color_table_yuv[i][3] = i_alpha;
-            }
-        }
-        return true;
-
-    case rfbBell:
-        msg_Err( p_filter, "rfbBell received" );
-        return true;
-
-    case rfbServerCutText:
-        msg->sct.length = htons(msg->sct.length);
-        if ( msg->sct.length > READ_BUFFER_SIZE )
-        {
-            msg_Err( p_filter, "Buffer too small, need %u bytes", msg->sct.length );
-            return false;
-        }
-        if ( !read_exact( p_sys->i_socket,
-                          p_sys->read_buffer, msg->sct.length ) )
-        {
-            msg_Err( p_filter, "Could not read Reading rfbServerCutText data" );
-            return false;
-        }
-        return true;
-
-    case rfbReSizeFrameBuffer:
-        msg_Err( p_filter, "Reading rfbReSizeFrameBuffer not implemented" );
-        return false;
-
-    default:
-        msg_Err( p_filter, "Invalid message %u received", msg->type );
-        return false;
-    }
-    return false;
-}
-
-/****************************************************************************
- * Filter: the whole thing
- ****************************************************************************
- * This function outputs subpictures at regular time intervals.
- ****************************************************************************/
-static subpicture_t *Filter( filter_t *p_filter, vlc_tick_t date )
-{
-    filter_sys_t *p_sys = p_filter->p_sys;
-    subpicture_t *p_spu;
-    subpicture_region_t *p_region;
-    video_format_t fmt;
-    picture_t *p_pic = NULL;
-
-    vlc_mutex_lock( &p_sys->lock );
-
-    if( p_sys->b_need_update )
-        p_pic = p_sys->p_pic;
-
-    if( p_pic == NULL )
-    {
-        vlc_mutex_unlock( &p_sys->lock );
-        return NULL;
-    }
-
-    /* Allocate the subpicture internal data. */
-    p_spu = filter_NewSubpicture( p_filter );
-    if( !p_spu )
-    {
-        vlc_mutex_unlock( &p_sys->lock );
-        return NULL;
-    }
-
-    p_spu->b_absolute = false;
-    p_spu->i_start = date;
-    p_spu->i_stop = 0;
-    p_spu->b_ephemer = true;
-
-    /* Create new SPU region */
-    video_format_Init( &fmt, VLC_CODEC_YUVA );
-    fmt.i_sar_num = fmt.i_sar_den = 1;
-    fmt.i_width = fmt.i_visible_width = p_pic->p[Y_PLANE].i_visible_pitch;
-    fmt.i_height = fmt.i_visible_height = p_pic->p[Y_PLANE].i_visible_lines;
-    fmt.i_x_offset = fmt.i_y_offset = 0;
-    p_region = subpicture_region_New( &fmt );
-    if( !p_region )
-    {
-        msg_Err( p_filter, "cannot allocate SPU region" );
-        subpicture_Delete( p_spu );
-        vlc_mutex_unlock( &p_sys->lock );
-        return NULL;
-    }
-
-    /* FIXME the copy is probably not needed anymore */
-    picture_Copy( p_region->p_picture, p_pic );
-
-    p_sys->b_need_update = false;
-
-    vlc_mutex_unlock( &p_sys->lock );
-
-    /* set to one of the 9 relative locations */
-    p_region->i_align = 0; /* Center */
-    p_spu->b_absolute = false;
-
-
-    p_spu->i_original_picture_width = 0; /*Let vout core do the horizontal scaling */
-    p_spu->i_original_picture_height = fmt.i_height;
-
-    p_spu->p_region = p_region;
-
-    p_spu->i_alpha = ( p_sys->i_alpha );
-
-    return p_spu;
-}
-
-
-static inline void rgb_to_yuv( uint8_t *y, uint8_t *u, uint8_t *v,
-                               int r, int g, int b )
-{
-    *y = ( ( (  66 * r + 129 * g +  25 * b + 128 ) >> 8 ) + 16 );
-    *u =   ( ( -38 * r -  74 * g + 112 * b + 128 ) >> 8 ) + 128 ;
-    *v =   ( ( 112 * r -  94 * g -  18 * b + 128 ) >> 8 ) + 128 ;
-}
-
-static inline bool fill_rect( filter_sys_t* p_sys,
-                              uint16_t i_x, uint16_t i_y,
-                              uint16_t i_w, uint16_t i_h,
-                              uint8_t i_color)
-{
-    plane_t *p_outY = p_sys->p_pic->p+Y_PLANE;
-    plane_t *p_outU = p_sys->p_pic->p+U_PLANE;
-    plane_t *p_outV = p_sys->p_pic->p+V_PLANE;
-    plane_t *p_outA = p_sys->p_pic->p+A_PLANE;
-    int i_pitch = p_outY->i_pitch;
-    int i_lines = p_outY->i_lines;
-    if ( i_x + i_w > i_pitch)
-        return false;
-    if ( i_y + i_h > i_lines)
-        return false;
-    int i_line_offset = i_y * i_pitch;
-    uint8_t i_yuv_y = p_sys->ar_color_table_yuv[i_color][0];
-    uint8_t i_yuv_u = p_sys->ar_color_table_yuv[i_color][1];
-    uint8_t i_yuv_v = p_sys->ar_color_table_yuv[i_color][2];
-    uint8_t i_alpha = p_sys->ar_color_table_yuv[i_color][3];
-    for( int i_line = 0; i_line < i_h; i_line++ )
-    {
-        for( int i_column = 0; i_column < i_w; i_column++ )
-        {
-            int i_total_offset = i_line_offset + i_x + i_column;
-            p_outY->p_pixels[ i_total_offset ] = i_yuv_y;
-            p_outU->p_pixels[ i_total_offset ] = i_yuv_u;
-            p_outV->p_pixels[ i_total_offset ] = i_yuv_v;
-            p_outA->p_pixels[ i_total_offset ] = i_alpha;
-        }
-        i_line_offset += i_pitch;
-    }
-    return true;
-}
-
-static inline bool copy_rect( filter_sys_t* p_sys,
-                              uint16_t i_x, uint16_t i_y,
-                              uint16_t i_w, uint16_t i_h,
-                              uint16_t i_sx, uint16_t i_sy )
-{
-    plane_t *p_Y = p_sys->p_pic->p+Y_PLANE;
-    plane_t *p_U = p_sys->p_pic->p+U_PLANE;
-    plane_t *p_V = p_sys->p_pic->p+V_PLANE;
-    plane_t *p_A = p_sys->p_pic->p+A_PLANE;
-
-    int i_pitch = p_Y->i_pitch;
-    int i_lines = p_Y->i_lines;
-
-    fprintf( stderr, "copy_rect: (%d,%d)+(%d,%d) -> (%d,%d)\n", i_x, i_y, i_w, i_h, i_sx, i_sy );
-
-    if( i_x + i_w > i_pitch || i_sx + i_w > i_pitch )
-        return false;
-    if( i_y + i_h > i_lines || i_sy + i_h > i_lines)
-        return false;
-
-    if( i_w <= 0 || i_h <= 0 )
-        return true;
-
-    uint8_t *pb_buffer = calloc( i_w * i_h, 4 );
-    if( !pb_buffer )
-        return false;
-
-    for( int i_line = 0; i_line < i_h; i_line++ )
-    {
-        for( int i_column = 0; i_column < i_w; i_column++ )
-        {
-            const int i_src_offset = ( i_sy + i_line ) * i_pitch + i_sx + i_column;
-            const int i_tmp_offset = (    0 + i_line ) *     i_w +    0 + i_column;
-
-            pb_buffer[4*i_tmp_offset + 0] = p_Y->p_pixels[i_src_offset];
-            pb_buffer[4*i_tmp_offset + 1] = p_U->p_pixels[i_src_offset];
-            pb_buffer[4*i_tmp_offset + 2] = p_V->p_pixels[i_src_offset];
-            pb_buffer[4*i_tmp_offset + 3] = p_A->p_pixels[i_src_offset];
-        }
-    }
-
-    for( int i_line = 0; i_line < i_h; i_line++ )
-    {
-        for( int i_column = 0; i_column < i_w; i_column++ )
-        {
-            const int i_tmp_offset = (   0 + i_line ) *     i_w +   0 + i_column;
-            const int i_dst_offset = ( i_y + i_line ) * i_pitch + i_x + i_column;
-
-            p_Y->p_pixels[i_dst_offset] = pb_buffer[4*i_tmp_offset + 0];
-            p_U->p_pixels[i_dst_offset] = pb_buffer[4*i_tmp_offset + 1];
-            p_V->p_pixels[i_dst_offset] = pb_buffer[4*i_tmp_offset + 2];
-            p_A->p_pixels[i_dst_offset] = pb_buffer[4*i_tmp_offset + 3];
-        }
-    }
-    free( pb_buffer );
-    return true;
-
-}
-
-static inline bool raw_line(  filter_sys_t* p_sys,
-                              uint16_t i_x, uint16_t i_y,
-                              uint16_t i_w )
-{
-    plane_t *p_outY = p_sys->p_pic->p+Y_PLANE;
-    plane_t *p_outU = p_sys->p_pic->p+U_PLANE;
-    plane_t *p_outV = p_sys->p_pic->p+V_PLANE;
-    plane_t *p_outA = p_sys->p_pic->p+A_PLANE;
-    int i_pitch = p_outY->i_pitch;
-    int i_lines = p_outY->i_lines;
-    if ( i_x + i_w > i_pitch)
-        return false;
-    if ( i_y > i_lines)
-        return false;
-
-    int i_line_offset = i_y * i_pitch + i_x;
-
-    for( int i_column = 0; i_column < i_w; i_column++ )
-    {
-        int i_offset = i_line_offset + i_column;
-        uint8_t i_color = p_sys->read_buffer[i_column];
-        p_outY->p_pixels[ i_offset ] = p_sys->ar_color_table_yuv[i_color][0];
-        p_outU->p_pixels[ i_offset ] = p_sys->ar_color_table_yuv[i_color][1];
-        p_outV->p_pixels[ i_offset ] = p_sys->ar_color_table_yuv[i_color][2];
-        p_outA->p_pixels[ i_offset ] = p_sys->ar_color_table_yuv[i_color][3];
-    }
-
-    return true;
-}
-
-
-/*****************************************************************************
- * MouseEvent: callback for mouse events
- *****************************************************************************/
-static int MouseEvent( filter_t *p_filter,
-                       const vlc_mouse_t *p_old,
-                       const vlc_mouse_t *p_new,
-                       const video_format_t *p_fmt )
-{
-    filter_sys_t *p_sys = p_filter->p_sys;
-    VLC_UNUSED(p_old);
-
-    int i_v = p_new->i_pressed;
-    int i_x = p_new->i_x;
-    int i_y = p_new->i_y;
-
-    vlc_mutex_lock( &p_sys->lock );
-
-    const int v_h = p_fmt->i_visible_height;
-    const int v_w = p_sys->i_vnc_width * v_h / p_sys->i_vnc_height;
-    const int v_x = (p_fmt->i_visible_width-v_w)/2;
-
-    i_x -= v_x;
-
-    if( i_y < 0 || i_x < 0 || i_y >= v_h || i_x >= v_w )
-    {
-        vlc_mutex_unlock( &p_sys->lock );
-        msg_Dbg( p_filter, "invalid mouse event? x=%d y=%d btn=%x", i_x, i_y, i_v );
-        return VLC_SUCCESS;
-    }
-
-    if( p_sys->i_socket == NULL )
-    {
-        vlc_mutex_unlock( &p_sys->lock );
-        return VLC_SUCCESS;
-    }
-
-#ifdef VNC_DEBUG
-    msg_Dbg( p_filter, "mouse event x=%d y=%d btn=%x", i_x, i_y, i_v );
-#endif
-
-    /* */
-    i_x = i_x * p_sys->i_vnc_width / v_w;
-    i_y = i_y * p_sys->i_vnc_height / v_h;
-
-    /* buttonMask bits 0-7 are buttons 1-8, 0=up, 1=down */
-    rfbPointerEventMsg ev;
-    ev.type = rfbPointerEvent;
-    ev.buttonMask = i_v;
-    ev.x = htons(i_x);
-    ev.y = htons(i_y);
-
-    write_exact( p_sys->i_socket, &ev, sz_rfbPointerEventMsg);
-    vlc_mutex_unlock( &p_sys->lock );
-
-    return VLC_EGENERIC;
-}
-
-/*****************************************************************************
- * KeyEvent: callback for keyboard events
- *****************************************************************************/
-static int KeyEvent( vlc_object_t *p_this, char const *psz_var,
-                     vlc_value_t oldval, vlc_value_t newval, void *p_data )
-{
-    VLC_UNUSED(psz_var); VLC_UNUSED(oldval);
-
-    filter_t *p_filter = (filter_t *)p_data;
-    filter_sys_t *p_sys = p_filter->p_sys;
-
-    msg_Dbg( p_this, "key pressed (%"PRId64") ", newval.i_int );
-
-    if ( !newval.i_int )
-    {
-        msg_Err( p_this, "Received invalid key event 0" );
-        return VLC_EGENERIC;
-    }
-
-    vlc_mutex_lock( &p_sys->lock );
-    if( p_sys->i_socket == NULL )
-    {
-        vlc_mutex_unlock( &p_sys->lock );
-        return VLC_SUCCESS;
-    }
-
-    uint32_t i_key32 = newval.i_int;
-    i_key32 = htonl(i_key32);
-    rfbKeyEventMsg ev;
-
-    ev.type = rfbKeyEvent;
-    ev.down = 1;
-    ev.pad = 0;
-
-    /* first key-down for modifier-keys */
-    if (newval.i_int & KEY_MODIFIER_CTRL)
-    {
-        ev.key = 0xffe3;
-        write_exact( p_sys->i_socket, &ev, sz_rfbKeyEventMsg );
-    }
-    if (newval.i_int & KEY_MODIFIER_SHIFT)
-    {
-        ev.key = 0xffe1;
-        write_exact( p_sys->i_socket, &ev, sz_rfbKeyEventMsg );
-    }
-    if (newval.i_int & KEY_MODIFIER_ALT)
-    {
-        ev.key = 0xffe9;
-        write_exact( p_sys->i_socket, &ev, sz_rfbKeyEventMsg );
-    }
-
-    /* then key-down for the pressed key */
-    ev.key = i_key32;
-    write_exact( p_sys->i_socket, &ev, sz_rfbKeyEventMsg );
-
-    ev.down = 0;
-
-    /* then key-up for the pressed key */
-    write_exact( p_sys->i_socket, &ev, sz_rfbKeyEventMsg );
-
-    /* last key-down for modifier-keys */
-    if (newval.i_int & KEY_MODIFIER_CTRL)
-    {
-        ev.key = 0xffe3;
-        write_exact( p_sys->i_socket, &ev, sz_rfbKeyEventMsg );
-    }
-    if (newval.i_int & KEY_MODIFIER_SHIFT)
-    {
-        ev.key = 0xffe1;
-        write_exact( p_sys->i_socket, &ev, sz_rfbKeyEventMsg );
-    }
-    if (newval.i_int & KEY_MODIFIER_ALT)
-    {
-       ev.key = 0xffe9;
-       write_exact( p_sys->i_socket, &ev, sz_rfbKeyEventMsg );
-    }
-    vlc_mutex_unlock( &p_sys->lock );
-
-    return VLC_SUCCESS;
-}
-
-static int vnc_encrypt_bytes( unsigned char *bytes, char *passwd )
-{
-    unsigned char key[8];
-
-    for( unsigned i = 0; i < 8; i++ )
-        key[i] = i < strlen( passwd ) ? passwd[i] : '\0';
-
-    gcry_cipher_hd_t ctx;
-    int err = gcry_cipher_open( &ctx, GCRY_CIPHER_DES, GCRY_CIPHER_MODE_ECB,0);
-    if (err)
-        return VLC_EGENERIC;
-
-    /* reverse bits of the key */
-    for( unsigned i = 0 ; i < 8 ; i++ )
-        key[i] =
-            (key[i] >> 7) +
-            (((key[i] >> 6) & 0x01 ) << 1 ) +
-            (((key[i] >> 5) & 0x01 ) << 2 ) +
-            (((key[i] >> 4) & 0x01 ) << 3 ) +
-            (((key[i] >> 3) & 0x01 ) << 4 ) +
-            (((key[i] >> 2) & 0x01 ) << 5 ) +
-            (((key[i] >> 1) & 0x01 ) << 6 ) +
-            ((key[i] & 0x01) << 7 );
-
-    gcry_cipher_setkey( ctx, key, 8 );
-    gcry_cipher_encrypt( ctx, bytes, CHALLENGESIZE, bytes, CHALLENGESIZE );
-    gcry_cipher_close( ctx );
-    return VLC_SUCCESS;
-}
-
diff --git a/modules/spu/remoteosd_rfbproto.h b/modules/spu/remoteosd_rfbproto.h
deleted file mode 100644
index c8ca85b017..0000000000
--- a/modules/spu/remoteosd_rfbproto.h
+++ /dev/null
@@ -1,729 +0,0 @@
-/*
- *  Copyright (C) 2002 RealVNC Ltd.  All Rights Reserved.
- *  Copyright (C) 1999 AT&T Laboratories Cambridge.  All Rights Reserved.
- *
- *  This is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This software is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this software; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
- *  USA.
- */
-
-/*
- * rfbproto.h - header file for the RFB protocol version 3.3
- *
- * Uses types CARD<n> for an n-bit unsigned integer, INT<n> for an n-bit signed
- * integer (for n = 8, 16 and 32).
- *
- * All multiple byte integers are in big endian (network) order (most
- * significant byte first).  Unless noted otherwise there is no special
- * alignment of protocol structures.
- *
- *
- * Once the initial handshaking is done, all messages start with a type byte,
- * (usually) followed by message-specific data.  The order of definitions in
- * this file is as follows:
- *
- *  (1) Structures used in several types of message.
- *  (2) Structures used in the initial handshaking.
- *  (3) Message types.
- *  (4) Encoding types.
- *  (5) For each message type, the form of the data following the type byte.
- *      Sometimes this is defined by a single structure but the more complex
- *      messages have to be explained by comments.
- */
-
-/*****************************************************************************
- *
- * Structures used in several messages
- *
- *****************************************************************************/
-
-#include "inttypes.h"
-#define CARD8  uint8_t
-#define CARD16 uint16_t
-#define CARD32 uint32_t
-
-/*-----------------------------------------------------------------------------
- * Structure used to specify a rectangle.  This structure is a multiple of 4
- * bytes so that it can be interspersed with 32-bit pixel data without
- * affecting alignment.
- */
-typedef struct {
-    CARD16 x;
-    CARD16 y;
-    CARD16 w;
-    CARD16 h;
-} rfbRectangle;
-
-#define sz_rfbRectangle 8
-
-
-/*-----------------------------------------------------------------------------
- * Structure used to specify pixel format.
- */
-
-typedef struct {
-
-    CARD8 bitsPerPixel;		/* 8,16,32 only */
-
-    CARD8 depth;		/* 8 to 32 */
-
-    CARD8 bigEndian;		/* True if multi-byte pixels are interpreted
-				   as big endian, or if single-bit-per-pixel
-				   has most significant bit of the byte
-				   corresponding to first (leftmost) pixel. Of
-				   course this is meaningless for 8 bits/pix */
-
-    CARD8 trueColour;		/* If false then we need a "colour map" to
-				   convert pixels to RGB.  If true, xxxMax and
-				   xxxShift specify bits used for red, green
-				   and blue */
-
-    /* the following fields are only meaningful if trueColour is true */
-
-    CARD16 redMax;		/* maximum red value (= 2^n - 1 where n is the
-				   number of bits used for red). Note this
-				   value is always in big endian order. */
-
-    CARD16 greenMax;		/* similar for green */
-
-    CARD16 blueMax;		/* and blue */
-
-    CARD8 redShift;		/* number of shifts needed to get the red
-				   value in a pixel to the least significant
-				   bit. To find the red value from a given
-				   pixel, do the following:
-				   1) Swap pixel value according to bigEndian
-				      (e.g. if bigEndian is false and host byte
-				      order is big endian, then swap).
-				   2) Shift right by redShift.
-				   3) AND with redMax (in host byte order).
-				   4) You now have the red value between 0 and
-				      redMax. */
-
-    CARD8 greenShift;		/* similar for green */
-
-    CARD8 blueShift;		/* and blue */
-
-    CARD8 pad1;
-    CARD16 pad2;
-
-} rfbPixelFormat;
-
-#define sz_rfbPixelFormat 16
-
-
-
-/*****************************************************************************
- *
- * Initial handshaking messages
- *
- *****************************************************************************/
-
-/*-----------------------------------------------------------------------------
- * Protocol Version
- *
- * The server always sends 12 bytes to start which identifies the latest RFB
- * protocol version number which it supports.  These bytes are interpreted
- * as a string of 12 ASCII characters in the format "RFB xxx.yyy\n" where
- * xxx and yyy are the major and minor version numbers (for version 3.3
- * this is "RFB 003.003\n").
- *
- * The client then replies with a similar 12-byte message giving the version
- * number of the protocol which should actually be used (which may be different
- * to that quoted by the server).
- *
- * It is intended that both clients and servers may provide some level of
- * backwards compatibility by this mechanism.  Servers in particular should
- * attempt to provide backwards compatibility, and even forwards compatibility
- * to some extent.  For example if a client demands version 3.1 of the
- * protocol, a 3.0 server can probably assume that by ignoring requests for
- * encoding types it doesn't understand, everything will still work OK.  This
- * will probably not be the case for changes in the major version number.
- *
- * The format string below can be used in sprintf or sscanf to generate or
- * decode the version string respectively.
- */
-
-#define rfbProtocolVersionFormat "RFB %03d.%03d\n"
-#define rfbProtocolMajorVersion 3
-#define rfbProtocolMinorVersion 3
-
-typedef char rfbProtocolVersionMsg[13];	/* allow extra byte for null */
-
-#define sz_rfbProtocolVersionMsg 12
-
-
-/*-----------------------------------------------------------------------------
- * Authentication
- *
- * Once the protocol version has been decided, the server then sends a 32-bit
- * word indicating whether any authentication is needed on the connection.
- * The value of this word determines the authentication scheme in use.  For
- * version 3.0 of the protocol this may have one of the following values:
- */
-
-#define rfbConnFailed 0
-#define rfbNoAuth 1
-#define rfbVncAuth 2
-
-/*
- * rfbConnFailed:	For some reason the connection failed (e.g. the server
- *			cannot support the desired protocol version).  This is
- *			followed by a string describing the reason (where a
- *			string is specified as a 32-bit length followed by that
- *			many ASCII characters).
- *
- * rfbNoAuth:		No authentication is needed.
- *
- * rfbVncAuth:		The VNC authentication scheme is to be used.  A 16-byte
- *			challenge follows, which the client encrypts as
- *			appropriate using the password and sends the resulting
- *			16-byte response.  If the response is correct, the
- *			server sends the 32-bit word rfbVncAuthOK.  If a simple
- *			failure happens, the server sends rfbVncAuthFailed and
- *			closes the connection. If the server decides that too
- *			many failures have occurred, it sends rfbVncAuthTooMany
- *			and closes the connection.  In the latter case, the
- *			server should not allow an immediate reconnection by
- *			the client.
- */
-
-#define rfbVncAuthOK 0
-#define rfbVncAuthFailed 1
-#define rfbVncAuthTooMany 2
-
-
-/*-----------------------------------------------------------------------------
- * Client Initialisation Message
- *
- * Once the client and server are sure that they're happy to talk to one
- * another, the client sends an initialisation message.  At present this
- * message only consists of a boolean indicating whether the server should try
- * to share the desktop by leaving other clients connected, or give exclusive
- * access to this client by disconnecting all other clients.
- */
-
-typedef struct {
-    CARD8 shared;
-} rfbClientInitMsg;
-
-#define sz_rfbClientInitMsg 1
-
-
-/*-----------------------------------------------------------------------------
- * Server Initialisation Message
- *
- * After the client initialisation message, the server sends one of its own.
- * This tells the client the width and height of the server's framebuffer,
- * its pixel format and the name associated with the desktop.
- */
-
-typedef struct {
-    CARD16 framebufferWidth;
-    CARD16 framebufferHeight;
-    rfbPixelFormat format;	/* the server's preferred pixel format */
-    CARD32 nameLength;
-    /* followed by char name[nameLength] */
-} rfbServerInitMsg;
-
-#define sz_rfbServerInitMsg (8 + sz_rfbPixelFormat)
-
-
-/*
- * Following the server initialisation message it's up to the client to send
- * whichever protocol messages it wants.  Typically it will send a
- * SetPixelFormat message and a SetEncodings message, followed by a
- * FramebufferUpdateRequest.  From then on the server will send
- * FramebufferUpdate messages in response to the client's
- * FramebufferUpdateRequest messages.  The client should send
- * FramebufferUpdateRequest messages with incremental set to true when it has
- * finished processing one FramebufferUpdate and is ready to process another.
- * With a fast client, the rate at which FramebufferUpdateRequests are sent
- * should be regulated to avoid hogging the network.
- */
-
-
-
-/*****************************************************************************
- *
- * Message types
- *
- *****************************************************************************/
-
-/* server -> client */
-
-#define rfbFramebufferUpdate 0
-#define rfbSetColourMapEntries 1
-#define rfbBell 2
-#define rfbServerCutText 3
-#define rfbReSizeFrameBuffer 0xF
-
-
-/* client -> server */
-
-#define rfbSetPixelFormat 0
-#define rfbFixColourMapEntries 1	/* not currently supported */
-#define rfbSetEncodings 2
-#define rfbFramebufferUpdateRequest 3
-#define rfbKeyEvent 4
-#define rfbPointerEvent 5
-#define rfbClientCutText 6
-#define rfbSetScaleFactor 0xF
-
-
-
-
-/*****************************************************************************
- *
- * Encoding types
- *
- *****************************************************************************/
-
-#define rfbEncodingRaw 0
-#define rfbEncodingCopyRect 1
-#define rfbEncodingRRE 2
-#define rfbEncodingCoRRE 4
-#define rfbEncodingHextile 5
-#define rfbEncodingZRLE 16
-
-
-
-/*****************************************************************************
- *
- * Server -> client message definitions
- *
- *****************************************************************************/
-
-
-/*-----------------------------------------------------------------------------
- * FramebufferUpdate - a block of rectangles to be copied to the framebuffer.
- *
- * This message consists of a header giving the number of rectangles of pixel
- * data followed by the rectangles themselves.  The header is padded so that
- * together with the type byte it is an exact multiple of 4 bytes (to help
- * with alignment of 32-bit pixels):
- */
-
-typedef struct {
-    CARD8 type;			/* always rfbFramebufferUpdate */
-    CARD8 pad;
-    CARD16 nRects;
-    /* followed by nRects rectangles */
-} rfbFramebufferUpdateMsg;
-
-#define sz_rfbFramebufferUpdateMsg 4
-
-/*
- * Each rectangle of pixel data consists of a header describing the position
- * and size of the rectangle and a type word describing the encoding of the
- * pixel data, followed finally by the pixel data.  Note that if the client has
- * not sent a SetEncodings message then it will only receive raw pixel data.
- * Also note again that this structure is a multiple of 4 bytes.
- */
-
-typedef struct {
-    rfbRectangle r;
-    CARD32 encoding;	/* one of the encoding types rfbEncoding... */
-} rfbFramebufferUpdateRectHeader;
-
-#define sz_rfbFramebufferUpdateRectHeader (sz_rfbRectangle + 4)
-
-
-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * Raw Encoding.  Pixels are sent in top-to-bottom scanline order,
- * left-to-right within a scanline with no padding in between.
- */
-
-
-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * CopyRect Encoding.  The pixels are specified simply by the x and y position
- * of the source rectangle.
- */
-
-typedef struct {
-    CARD16 srcX;
-    CARD16 srcY;
-} rfbCopyRect;
-
-#define sz_rfbCopyRect 4
-
-
-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * RRE - Rise-and-Run-length Encoding.  We have an rfbRREHeader structure
- * giving the number of subrectangles following.  Finally the data follows in
- * the form [<bgpixel><subrect><subrect>...] where each <subrect> is
- * [<pixel><rfbRectangle>].
- */
-
-typedef struct {
-    CARD32 nSubrects;
-} rfbRREHeader;
-
-#define sz_rfbRREHeader 4
-
-
-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * CoRRE - Compact RRE Encoding.  We have an rfbRREHeader structure giving
- * the number of subrectangles following.  Finally the data follows in the form
- * [<bgpixel><subrect><subrect>...] where each <subrect> is
- * [<pixel><rfbCoRRERectangle>].  This means that
- * the whole rectangle must be at most 255x255 pixels.
- */
-
-typedef struct {
-    CARD8 x;
-    CARD8 y;
-    CARD8 w;
-    CARD8 h;
-} rfbCoRRERectangle;
-
-#define sz_rfbCoRRERectangle 4
-
-
-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * Hextile Encoding.  The rectangle is divided up into "tiles" of 16x16 pixels,
- * starting at the top left going in left-to-right, top-to-bottom order.  If
- * the width of the rectangle is not an exact multiple of 16 then the width of
- * the last tile in each row will be correspondingly smaller.  Similarly if the
- * height is not an exact multiple of 16 then the height of each tile in the
- * final row will also be smaller.  Each tile begins with a "subencoding" type
- * byte, which is a mask made up of a number of bits.  If the Raw bit is set
- * then the other bits are irrelevant; w*h pixel values follow (where w and h
- * are the width and height of the tile).  Otherwise the tile is encoded in a
- * similar way to RRE, except that the position and size of each subrectangle
- * can be specified in just two bytes.  The other bits in the mask are as
- * follows:
- *
- * BackgroundSpecified - if set, a pixel value follows which specifies
- *    the background colour for this tile.  The first non-raw tile in a
- *    rectangle must have this bit set.  If this bit isn't set then the
- *    background is the same as the last tile.
- *
- * ForegroundSpecified - if set, a pixel value follows which specifies
- *    the foreground colour to be used for all subrectangles in this tile.
- *    If this bit is set then the SubrectsColoured bit must be zero.
- *
- * AnySubrects - if set, a single byte follows giving the number of
- *    subrectangles following.  If not set, there are no subrectangles (i.e.
- *    the whole tile is just solid background colour).
- *
- * SubrectsColoured - if set then each subrectangle is preceded by a pixel
- *    value giving the colour of that subrectangle.  If not set, all
- *    subrectangles are the same colour, the foreground colour;  if the
- *    ForegroundSpecified bit wasn't set then the foreground is the same as
- *    the last tile.
- *
- * The position and size of each subrectangle is specified in two bytes.  The
- * Pack macros below can be used to generate the two bytes from x, y, w, h,
- * and the Extract macros can be used to extract the x, y, w, h values from
- * the two bytes.
- */
-
-#define rfbHextileRaw			(1 << 0)
-#define rfbHextileBackgroundSpecified	(1 << 1)
-#define rfbHextileForegroundSpecified	(1 << 2)
-#define rfbHextileAnySubrects		(1 << 3)
-#define rfbHextileSubrectsColoured	(1 << 4)
-
-#define rfbHextilePackXY(x,y) (((x) << 4) | (y))
-#define rfbHextilePackWH(w,h) ((((w)-1) << 4) | ((h)-1))
-#define rfbHextileExtractX(byte) ((byte) >> 4)
-#define rfbHextileExtractY(byte) ((byte) & 0xf)
-#define rfbHextileExtractW(byte) (((byte) >> 4) + 1)
-#define rfbHextileExtractH(byte) (((byte) & 0xf) + 1)
-
-
-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * ZRLE - encoding combining Zlib compression, tiling, palettisation and
- * run-length encoding.
- */
-
-typedef struct {
-    CARD32 length;
-} rfbZRLEHeader;
-
-#define sz_rfbZRLEHeader 4
-
-#define rfbZRLETileWidth 64
-#define rfbZRLETileHeight 64
-
-
-/*-----------------------------------------------------------------------------
- * SetColourMapEntries - these messages are only sent if the pixel
- * format uses a "colour map" (i.e. trueColour false) and the client has not
- * fixed the entire colour map using FixColourMapEntries.  In addition they
- * will only start being sent after the client has sent its first
- * FramebufferUpdateRequest.  So if the client always tells the server to use
- * trueColour then it never needs to process this type of message.
- */
-
-typedef struct {
-    CARD8 type;			/* always rfbSetColourMapEntries */
-    CARD8 pad;
-    CARD16 firstColour;
-    CARD16 nColours;
-
-    /* Followed by nColours * 3 * CARD16
-       r1, g1, b1, r2, g2, b2, r3, g3, b3, ..., rn, bn, gn */
-
-} rfbSetColourMapEntriesMsg;
-
-#define sz_rfbSetColourMapEntriesMsg 6
-
-
-
-/*-----------------------------------------------------------------------------
- * Bell - ring a bell on the client if it has one.
- */
-
-typedef struct {
-    CARD8 type;			/* always rfbBell */
-} rfbBellMsg;
-
-#define sz_rfbBellMsg 1
-
-
-
-/*-----------------------------------------------------------------------------
- * ServerCutText - the server has new text in its cut buffer.
- */
-
-typedef struct {
-    CARD8 type;			/* always rfbServerCutText */
-    CARD8 pad1;
-    CARD16 pad2;
-    CARD32 length;
-    /* followed by char text[length] */
-} rfbServerCutTextMsg;
-
-#define sz_rfbServerCutTextMsg 8
-
-/*-----------------------------------------------------------------------------
- * ReSizeFrameBuffer - tell the RFB client to alter its framebuffer, either
- * due to a resize of the server desktop or a client-requested scaling factor.
- * The pixel format remains unchanged.
- */
-
-typedef struct {
-    CARD8 type;                 /* always rfbReSizeFrameBuffer */
-        CARD8 pad1;
-        CARD16 desktop_w;       /* Desktop width */
-        CARD16 desktop_h;       /* Desktop height */
-        CARD16 buffer_w;        /* FrameBuffer width */
-        CARD16 buffer_h;        /* Framebuffer height */
-    CARD16 pad2;
-
-} rfbReSizeFrameBufferMsg;
-
-#define sz_rfbReSizeFrameBufferMsg (12)
-
-
-
-/*-----------------------------------------------------------------------------
- * Union of all server->client messages.
- */
-
-typedef union {
-    CARD8 type;
-    rfbFramebufferUpdateMsg fu;
-    rfbSetColourMapEntriesMsg scme;
-    rfbBellMsg b;
-    rfbServerCutTextMsg sct;
-    rfbReSizeFrameBufferMsg rsfb;
-} rfbServerToClientMsg;
-
-
-
-/*****************************************************************************
- *
- * Message definitions (client -> server)
- *
- *****************************************************************************/
-
-
-/*-----------------------------------------------------------------------------
- * SetPixelFormat - tell the RFB server the format in which the client wants
- * pixels sent.
- */
-
-typedef struct {
-    CARD8 type;			/* always rfbSetPixelFormat */
-    CARD8 pad1;
-    CARD16 pad2;
-    rfbPixelFormat format;
-} rfbSetPixelFormatMsg;
-
-#define sz_rfbSetPixelFormatMsg (sz_rfbPixelFormat + 4)
-
-
-/*-----------------------------------------------------------------------------
- * FixColourMapEntries - when the pixel format uses a "colour map", fix
- * read-only colour map entries.
- *
- *    ***************** NOT CURRENTLY SUPPORTED *****************
- */
-
-typedef struct {
-    CARD8 type;			/* always rfbFixColourMapEntries */
-    CARD8 pad;
-    CARD16 firstColour;
-    CARD16 nColours;
-
-    /* Followed by nColours * 3 * CARD16
-       r1, g1, b1, r2, g2, b2, r3, g3, b3, ..., rn, bn, gn */
-
-} rfbFixColourMapEntriesMsg;
-
-#define sz_rfbFixColourMapEntriesMsg 6
-
-
-/*-----------------------------------------------------------------------------
- * SetEncodings - tell the RFB server which encoding types we accept.  Put them
- * in order of preference, if we have any.  We may always receive raw
- * encoding, even if we don't specify it here.
- */
-
-typedef struct {
-    CARD8 type;			/* always rfbSetEncodings */
-    CARD8 pad;
-    CARD16 nEncodings;
-    /* followed by nEncodings * CARD32 encoding types */
-} rfbSetEncodingsMsg;
-
-#define sz_rfbSetEncodingsMsg 4
-
-/*-----------------------------------------------------------------------------
- * SetScaleFactor - tell the RFB server to alter the scale factor for the
- * client buffer.
- */
-
-typedef struct {
-	CARD8 type;                 /* always rfbSetScaleFactor */
-	CARD8 scale;                /* Scale factor (positive non-zero integer) */
-	CARD16 pad2;
-} rfbSetScaleFactorMsg;
-
-#define sz_rfbSetScaleFactorMsg (4)
-
-/*-----------------------------------------------------------------------------
- * FramebufferUpdateRequest - request for a framebuffer update.  If incremental
- * is true then the client just wants the changes since the last update.  If
- * false then it wants the whole of the specified rectangle.
- */
-
-typedef struct {
-    CARD8 type;			/* always rfbFramebufferUpdateRequest */
-    CARD8 incremental;
-    CARD16 x;
-    CARD16 y;
-    CARD16 w;
-    CARD16 h;
-} rfbFramebufferUpdateRequestMsg;
-
-#define sz_rfbFramebufferUpdateRequestMsg 10
-
-
-/*-----------------------------------------------------------------------------
- * KeyEvent - key press or release
- *
- * Keys are specified using the "keysym" values defined by the X Window System.
- * For most ordinary keys, the keysym is the same as the corresponding ASCII
- * value.  Other common keys are:
- *
- * BackSpace		0xff08
- * Tab			0xff09
- * Return or Enter	0xff0d
- * Escape		0xff1b
- * Insert		0xff63
- * Delete		0xffff
- * Home			0xff50
- * End			0xff57
- * Page Up		0xff55
- * Page Down		0xff56
- * Left			0xff51
- * Up			0xff52
- * Right		0xff53
- * Down			0xff54
- * F1			0xffbe
- * F2			0xffbf
- * ...			...
- * F12			0xffc9
- * Shift		0xffe1
- * Control		0xffe3
- * Meta			0xffe7
- * Alt			0xffe9
- */
-
-typedef struct {
-    CARD8 type;			/* always rfbKeyEvent */
-    CARD8 down;			/* true if down (press), false if up */
-    CARD16 pad;
-    CARD32 key;			/* key is specified as an X keysym */
-} rfbKeyEventMsg;
-
-#define sz_rfbKeyEventMsg 8
-
-
-/*-----------------------------------------------------------------------------
- * PointerEvent - mouse/pen move and/or button press.
- */
-
-typedef struct {
-    CARD8 type;			/* always rfbPointerEvent */
-    CARD8 buttonMask;		/* bits 0-7 are buttons 1-8, 0=up, 1=down */
-    CARD16 x;
-    CARD16 y;
-} rfbPointerEventMsg;
-
-#define rfbButton1Mask 1
-#define rfbButton2Mask 2
-#define rfbButton3Mask 4
-#define rfbButton4Mask 8
-#define rfbButton5Mask 16
-#define rfbWheelUpMask rfbButton4Mask
-#define rfbWheelDownMask rfbButton5Mask
-
-#define sz_rfbPointerEventMsg 6
-
-
-
-/*-----------------------------------------------------------------------------
- * ClientCutText - the client has new text in its cut buffer.
- */
-
-typedef struct {
-    CARD8 type;			/* always rfbClientCutText */
-    CARD8 pad1;
-    CARD16 pad2;
-    CARD32 length;
-    /* followed by char text[length] */
-} rfbClientCutTextMsg;
-
-#define sz_rfbClientCutTextMsg 8
-
-/*-----------------------------------------------------------------------------
- * Union of all client->server messages.
- */
-
-typedef union {
-    CARD8 type;
-    rfbSetPixelFormatMsg spf;
-    rfbSetScaleFactorMsg ssf;
-    rfbFixColourMapEntriesMsg fcme;
-    rfbSetEncodingsMsg se;
-    rfbFramebufferUpdateRequestMsg fur;
-    rfbKeyEventMsg ke;
-    rfbPointerEventMsg pe;
-    rfbClientCutTextMsg cct;
-} rfbClientToServerMsg;
diff --git a/po/POTFILES.in b/po/POTFILES.in
index e7a9f0e948..5c6b2725b2 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1090,7 +1090,6 @@ modules/spu/dynamicoverlay/dynamicoverlay.c
 modules/spu/logo.c
 modules/spu/marq.c
 modules/spu/mosaic.c
-modules/spu/remoteosd.c
 modules/spu/rss.c
 modules/spu/subsdelay.c
 modules/stream_extractor/archive.c



More information about the vlc-commits mailing list