#include <vlc_plugin.h>
#include <vlc_vout.h>
-#include "vlc_filter.h"
-#include "filter_common.h"
-#include "vlc_image.h"
-#include "vlc_osd.h"
-#include "vlc_keys.h"
+#include <vlc_filter.h>
+#include <vlc_image.h>
+#include <vlc_keys.h>
#include <vlc_network.h>
#include <gcrypt.h> /* to encrypt password */
#define RMTOSD_PORT_TEXT N_("VNC Port")
#define RMTOSD_PORT_LONGTEXT N_( \
- "VNC portnumber." )
+ "VNC port number." )
#define RMTOSD_PASSWORD_TEXT N_("VNC Password")
#define RMTOSD_PASSWORD_LONGTEXT N_( \
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 filter", 100 );
- set_shortname( N_("Remote-OSD") );
- set_category( CAT_VIDEO );
- set_subcategory( SUBCAT_VIDEO_SUBPIC );
- add_shortcut( "rmtosd" );
- set_callbacks( CreateFilter, DestroyFilter );
+vlc_module_begin ()
+ set_description( N_("Remote-OSD over VNC") )
+ set_capability( "sub filter", 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", NULL, RMTOSD_HOST_TEXT,
- RMTOSD_HOST_LONGTEXT, false );
+ RMTOSD_HOST_LONGTEXT, false )
add_integer_with_range( RMTOSD_CFG "port", 20001, 1, 0xFFFF, NULL,
- RMTOSD_PORT_TEXT, RMTOSD_PORT_LONGTEXT, false );
+ RMTOSD_PORT_TEXT, RMTOSD_PORT_LONGTEXT, false )
add_password( RMTOSD_CFG "password", "", NULL, RMTOSD_PASSWORD_TEXT,
- RMTOSD_PASSWORD_LONGTEXT, false );
+ RMTOSD_PASSWORD_LONGTEXT, false )
add_integer_with_range( RMTOSD_CFG "update", RMTOSD_UPDATE_DEFAULT,
RMTOSD_UPDATE_MIN, RMTOSD_UPDATE_MAX, NULL, RMTOSD_UPDATE_TEXT,
- RMTOSD_UPDATE_LONGTEXT, true );
- add_bool( RMTOSD_CFG "vnc-polling", 0, NULL,
- RMTOSD_POLL_TEXT , RMTOSD_POLL_LONGTEXT, false );
- add_bool( RMTOSD_CFG "mouse-events", 0, NULL,
- RMTOSD_MOUSE_TEXT , RMTOSD_MOUSE_LONGTEXT, false );
- add_bool( RMTOSD_CFG "key-events", 0, NULL,
- RMTOSD_KEYS_TEXT , RMTOSD_KEYS_LONGTEXT, false );
+ RMTOSD_UPDATE_LONGTEXT, true )
+ add_bool( RMTOSD_CFG "vnc-polling", false, NULL,
+ RMTOSD_POLL_TEXT , RMTOSD_POLL_LONGTEXT, false )
+ add_bool( RMTOSD_CFG "mouse-events", false, NULL,
+ RMTOSD_MOUSE_TEXT , RMTOSD_MOUSE_LONGTEXT, false )
+ add_bool( RMTOSD_CFG "key-events", false, NULL,
+ RMTOSD_KEYS_TEXT , RMTOSD_KEYS_LONGTEXT, false )
add_integer_with_range( RMTOSD_CFG "alpha", 255, 0, 255, NULL,
- RMTOSD_ALPHA_TEXT, RMTOSD_ALPHA_LONGTEXT, true );
+ RMTOSD_ALPHA_TEXT, RMTOSD_ALPHA_LONGTEXT, true )
-vlc_module_end();
+vlc_module_end ()
/*****************************************************************************
/* subfilter functions */
static subpicture_t *Filter( filter_t *, mtime_t );
-static int MouseEvent ( vlc_object_t *p_this, char const *psz_var,
- vlc_value_t oldval, vlc_value_t newval, void *p_data );
+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 );
*****************************************************************************/
struct filter_sys_t
{
- VLC_COMMON_MEMBERS
-
bool b_need_update; /* VNC picture is updated, do update the OSD*/
mtime_t i_vnc_poll_interval; /* Update the OSD menu every n ms */
msg_Dbg( p_filter, "Creating vnc osd filter..." );
- p_filter->p_sys = p_sys = malloc( sizeof(*p_sys) );
+ p_filter->p_sys = p_sys = calloc( 1, sizeof(*p_sys) );
if( !p_filter->p_sys )
return VLC_ENOMEM;
- memset( p_sys, 0, sizeof(*p_sys) );
/* Populating struct */
vlc_mutex_init( &p_sys->lock );
/* Attach subpicture filter callback */
p_filter->pf_sub_filter = Filter;
+ p_filter->pf_sub_mouse = MouseEvent;
p_sys->p_vout = vlc_object_find( p_this, VLC_OBJECT_VOUT, FIND_PARENT );
if( p_sys->p_vout )
{
- var_AddCallback( p_sys->p_vout, "mouse-moved",
- MouseEvent, p_this );
- var_AddCallback( p_sys->p_vout, "mouse-button-down",
- MouseEvent, p_this );
var_AddCallback( p_sys->p_vout->p_libvlc, "key-pressed",
KeyEvent, p_this );
}
- es_format_Init( &p_filter->fmt_out, SPU_ES, VLC_FOURCC( 's','p','u',' ' ) );
+ es_format_Init( &p_filter->fmt_out, SPU_ES, VLC_CODEC_SPU );
p_filter->fmt_out.i_priority = 0;
vlc_gcrypt_init();
sizeof( vlc_object_t ) );
vlc_object_attach( p_sys->p_worker_thread, p_this );
if( vlc_thread_create( p_sys->p_worker_thread, "vnc worker thread",
- vnc_worker_thread,
- VLC_THREAD_PRIORITY_LOW, false ) )
+ vnc_worker_thread, VLC_THREAD_PRIORITY_LOW ) )
{
- vlc_object_detach( p_sys->p_worker_thread );
vlc_object_release( p_sys->p_worker_thread );
msg_Err( p_filter, "cannot spawn vnc message reader thread" );
goto error;
if( p_sys->p_vout )
{
- var_DelCallback( p_sys->p_vout, "mouse-moved",
- MouseEvent, p_this );
- var_DelCallback( p_sys->p_vout, "mouse-button-down",
- MouseEvent, p_this );
var_DelCallback( p_sys->p_vout->p_libvlc, "key-pressed",
KeyEvent, p_this );
msg_Dbg( p_filter, "joining worker_thread" );
vlc_object_kill( p_sys->p_worker_thread );
vlc_thread_join( p_sys->p_worker_thread );
- vlc_object_detach( p_sys->p_worker_thread );
vlc_object_release( p_sys->p_worker_thread );
msg_Dbg( p_filter, "released worker_thread" );
}
/* Create an empty picture for VNC the data */
vlc_mutex_lock( &p_sys->lock );
- p_sys->p_pic = picture_New( VLC_FOURCC('Y','U','V','A'),
- p_sys->i_vnc_width, p_sys->i_vnc_height, VOUT_ASPECT_FACTOR );
+ p_sys->p_pic = picture_New( VLC_CODEC_YUVA,
+ p_sys->i_vnc_width, p_sys->i_vnc_height, 1, 1 );
if( !p_sys->p_pic )
{
vlc_mutex_unlock( &p_sys->lock );
vlc_object_attach( p_update_request_thread, p_filter );
if( vlc_thread_create( p_update_request_thread,
"vnc update request thread",
- update_request_thread,
- VLC_THREAD_PRIORITY_LOW, false ) )
+ update_request_thread, VLC_THREAD_PRIORITY_LOW ) )
{
- vlc_object_detach( p_update_request_thread );
vlc_object_release( p_update_request_thread );
msg_Err( p_filter, "cannot spawn vnc update request thread" );
goto exit;
msg_Dbg( p_filter, "joining update_request_thread" );
vlc_object_kill( p_update_request_thread );
vlc_thread_join( p_update_request_thread );
- vlc_object_detach( p_update_request_thread );
vlc_object_release( p_update_request_thread );
msg_Dbg( p_filter, "released update_request_thread" );
/* Create new SPU region */
memset( &fmt, 0, sizeof(video_format_t) );
- fmt.i_chroma = VLC_FOURCC('Y','U','V','A');
- fmt.i_aspect = VOUT_ASPECT_FACTOR;
+ fmt.i_chroma = 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 = p_spu->pf_create_region( VLC_OBJECT(p_filter), &fmt );
+ p_region = subpicture_region_New( &fmt );
if( !p_region )
{
msg_Err( p_filter, "cannot allocate SPU region" );
/*****************************************************************************
* MouseEvent: callback for mouse events
*****************************************************************************/
-static int MouseEvent( vlc_object_t *p_this, char const *psz_var,
- vlc_value_t oldval, vlc_value_t newval, void *p_data )
+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 )
{
- VLC_UNUSED(oldval); VLC_UNUSED(newval); VLC_UNUSED(psz_var);
-
- filter_t *p_filter = (filter_t *)p_data;
filter_sys_t *p_sys = p_filter->p_sys;
+ VLC_UNUSED(p_old);
if( !p_sys->b_vnc_mouse_events )
return VLC_SUCCESS;
- vout_thread_t *p_vout = (vout_thread_t*)p_sys->p_vout;
- int i_x, i_y;
- int i_v;
-
-
- i_v = var_GetInteger( p_sys->p_vout, "mouse-button-down" );
- i_y = var_GetInteger( p_sys->p_vout, "mouse-y" );
- i_x = var_GetInteger( p_sys->p_vout, "mouse-x" );
+ 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_vout->fmt_in.i_visible_height;
+ 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_vout->fmt_in.i_visible_width-v_w)/2;
+ 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_this, "invalid mouse event? x=%d y=%d btn=%x", i_x, i_y, i_v );
+ 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->b_connection_active )
}
#ifdef VNC_DEBUG
- msg_Dbg( p_this, "mouse event x=%d y=%d btn=%x", i_x, i_y, i_v );
+ msg_Dbg( p_filter, "mouse event x=%d y=%d btn=%x", i_x, i_y, i_v );
#endif
/* */
vlc_mutex_unlock( &p_sys->lock );
- return VLC_SUCCESS;
+ return VLC_EGENERIC;
}
/*****************************************************************************
if( !p_sys->b_vnc_key_events )
return VLC_SUCCESS;
- msg_Dbg( p_this, "key pressed (%d) ", newval.i_int );
+ msg_Dbg( p_this, "key pressed (%"PRId64") ", newval.i_int );
if ( !newval.i_int )
{
- msg_Err( p_this, "Received invalid key event %d", newval.i_int );
+ msg_Err( p_this, "Received invalid key event 0" );
return VLC_EGENERIC;
}