Я ХЗ, насколько это правильно, но вроде работает:bash-4.3# cat vlc-3.0.0-freerdp2.fix-rtklinux-0.patch
diff -Naur vlc-3.0.0.orig/configure.ac vlc-3.0.0.rtklinux/configure.ac
--- vlc-3.0.0.orig/configure.ac 2018-02-07 01:08:00.000000000 +0500
+++ vlc-3.0.0.rtklinux/configure.ac 2018-02-15 06:33:21.000000000 +0500
@@ -1992,7 +1992,7 @@
dnl RDP/Remote Desktop access module
dnl
-PKG_ENABLE_MODULES_VLC([FREERDP], [rdp], [freerdp >= 1.0.1], (RDP/Remote Desktop client support) )
+PKG_ENABLE_MODULES_VLC([FREERDP], [rdp], [freerdp2 >= 2.0.0], (RDP/Remote Desktop client support) )
dnl
dnl Real RTSP plugin
diff -Naur vlc-3.0.0.orig/modules/access/rdp.c vlc-3.0.0.rtklinux/modules/access/rdp.c
--- vlc-3.0.0.orig/modules/access/rdp.c 2017-12-21 14:51:16.000000000 +0500
+++ vlc-3.0.0.rtklinux/modules/access/rdp.c 2018-02-15 10:19:05.000000000 +0500
@@ -45,18 +45,6 @@
# include <freerdp/version.h>
#endif
-#if !defined(FREERDP_VERSION_MAJOR) || \
- (defined(FREERDP_VERSION_MAJOR) && !(FREERDP_VERSION_MAJOR > 1 || (FREERDP_VERSION_MAJOR == 1 && FREERDP_VERSION_MINOR >= 1)))
-# define SoftwareGdi sw_gdi
-# define Fullscreen fullscreen
-# define ServerHostname hostname
-# define Username username
-# define Password password
-# define ServerPort port
-# define EncryptionMethods encryption
-# define ContextSize context_size
-#endif
-
#include <errno.h>
#ifdef HAVE_POLL
# include <poll.h>
@@ -84,9 +72,10 @@
vlc_module_begin()
set_shortname( N_("RDP") )
add_shortcut( "rdp" )
+ set_description( N_("RDP Remote Desktop") )
+
set_category( CAT_INPUT )
set_subcategory( SUBCAT_INPUT_ACCESS )
- set_description( N_("RDP Remote Desktop") )
set_capability( "access_demux", 0 )
add_string( CFG_PREFIX "user", NULL, USER_TEXT, USER_LONGTEXT, false )
@@ -144,6 +133,7 @@
vlcrdp_context_t * p_vlccontext = (vlcrdp_context_t *) p_context;
demux_sys_t *p_sys = p_vlccontext->p_demux->p_sys;
rdpGdi *p_gdi = p_context->gdi;
+ unsigned bytesPerPixel;
if ( p_sys->es )
{
@@ -153,17 +143,21 @@
/* Now init and fill es format */
vlc_fourcc_t i_chroma;
- switch( p_gdi->bytesPerPixel )
+ switch( p_gdi->dstFormat )
{
default:
- case 16:
+ msg_Dbg( p_vlccontext->p_demux, "unhandled dstFormat %x bpp", p_gdi->dstFormat);
+ case PIXEL_FORMAT_BGR16:
i_chroma = VLC_CODEC_RGB16;
+ bytesPerPixel = 16;
break;
- case 24:
+ case PIXEL_FORMAT_BGR24:
i_chroma = VLC_CODEC_RGB24;
+ bytesPerPixel = 24;
break;
- case 32:
+ case PIXEL_FORMAT_BGRA32:
i_chroma = VLC_CODEC_RGB32;
+ bytesPerPixel = 32;
break;
}
es_format_t fmt;
@@ -176,7 +170,7 @@
fmt.video.i_height = p_gdi->height;
fmt.video.i_frame_rate_base = 1000;
fmt.video.i_frame_rate = 1000 * p_sys->f_fps;
- p_sys->i_framebuffersize = p_gdi->width * p_gdi->height * p_gdi->bytesPerPixel;
+ p_sys->i_framebuffersize = p_gdi->width * p_gdi->height * bytesPerPixel;
if ( p_sys->p_block )
p_sys->p_block = block_Realloc( p_sys->p_block, 0, p_sys->i_framebuffersize );
@@ -237,28 +231,19 @@
vlcrdp_context_t * p_vlccontext = (vlcrdp_context_t *) p_instance->context;
msg_Dbg( p_vlccontext->p_demux, "connected to desktop %dx%d (%d bpp)",
-#if defined(FREERDP_VERSION_MAJOR) && (FREERDP_VERSION_MAJOR > 1 || (FREERDP_VERSION_MAJOR == 1 && FREERDP_VERSION_MINOR >= 1))
p_instance->settings->DesktopWidth,
p_instance->settings->DesktopHeight,
p_instance->settings->ColorDepth
-#else
- p_instance->settings->width,
- p_instance->settings->height,
- p_instance->settings->color_depth
-#endif
);
p_instance->update->DesktopResize = desktopResizeHandler;
p_instance->update->BeginPaint = beginPaintHandler;
p_instance->update->EndPaint = endPaintHandler;
- gdi_init( p_instance,
- CLRBUF_16BPP |
-#if defined(FREERDP_VERSION_MAJOR) && defined(FREERDP_VERSION_MINOR) && \
- !(FREERDP_VERSION_MAJOR > 1 || (FREERDP_VERSION_MAJOR == 1 && FREERDP_VERSION_MINOR >= 2))
- CLRBUF_24BPP |
-#endif
- CLRBUF_32BPP, NULL );
+ if ( p_instance->settings->ColorDepth > 16 )
+ gdi_init( p_instance, PIXEL_FORMAT_XRGB32);
+ else
+ gdi_init( p_instance, PIXEL_FORMAT_RGB16);
desktopResizeHandler( p_instance->context );
return true;
@@ -432,10 +417,6 @@
if ( p_sys->f_fps <= 0 ) p_sys->f_fps = 1.0;
p_sys->i_frame_interval = 1000000 / p_sys->f_fps;
-#if FREERDP_VERSION_MAJOR == 1 && FREERDP_VERSION_MINOR < 2
- freerdp_channels_global_init();
-#endif
-
p_sys->p_instance = freerdp_new();
if ( !p_sys->p_instance )
{
@@ -471,25 +452,24 @@
if ( ! freerdp_connect( p_sys->p_instance ) )
{
msg_Err( p_demux, "can't connect to rdp server" );
- goto error;
+ freerdp_free( p_sys->p_instance );
+ free( p_sys->psz_hostname );
+ return VLC_EGENERIC;
}
if ( vlc_clone( &p_sys->thread, DemuxThread, p_demux, VLC_THREAD_PRIORITY_INPUT ) != VLC_SUCCESS )
{
msg_Err( p_demux, "can't spawn thread" );
freerdp_disconnect( p_sys->p_instance );
- goto error;
+ freerdp_free( p_sys->p_instance );
+ free( p_sys->psz_hostname );
+ return VLC_EGENERIC;
}
p_demux->pf_demux = NULL;
p_demux->pf_control = Control;
return VLC_SUCCESS;
-
-error:
- freerdp_free( p_sys->p_instance );
- free( p_sys->psz_hostname );
- return VLC_EGENERIC;
}
/*****************************************************************************
@@ -508,9 +488,6 @@
freerdp_disconnect( p_sys->p_instance );
freerdp_free( p_sys->p_instance );
-#if FREERDP_VERSION_MAJOR == 1 && FREERDP_VERSION_MINOR < 2
- freerdp_channels_global_uninit();
-#endif
if ( p_sys->p_block )
block_Release( p_sys->p_block );