X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fvideo_filter%2Fremoteosd.c;h=817eb495e82ebf435e33a7c082534633481df333;hb=12ade3e3bc975d5426ba4af155b7372c31093b31;hp=e13cd64866b97dd41bf2279023e6eadfd9eabcf5;hpb=05492281965ed211badf7e1f4c2220be720d3356;p=vlc diff --git a/modules/video_filter/remoteosd.c b/modules/video_filter/remoteosd.c index e13cd64866..817eb495e8 100644 --- a/modules/video_filter/remoteosd.c +++ b/modules/video_filter/remoteosd.c @@ -54,11 +54,9 @@ #include #include -#include "vlc_filter.h" -#include "filter_common.h" -#include "vlc_image.h" -#include "vlc_osd.h" -#include "vlc_keys.h" +#include +#include +#include #include #include /* to encrypt password */ @@ -77,7 +75,7 @@ #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_( \ @@ -125,22 +123,22 @@ vlc_module_begin () 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 () @@ -154,8 +152,10 @@ 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 ); @@ -202,8 +202,6 @@ static void vnc_encrypt_bytes( unsigned char *bytes, char *passwd ); *****************************************************************************/ 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 */ @@ -253,10 +251,9 @@ static int CreateFilter ( vlc_object_t *p_this ) 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 ); @@ -310,20 +307,17 @@ static int CreateFilter ( vlc_object_t *p_this ) /* 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(); @@ -333,10 +327,8 @@ static int CreateFilter ( vlc_object_t *p_this ) 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; @@ -373,10 +365,6 @@ static void DestroyFilter( vlc_object_t *p_this ) 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 ); @@ -411,7 +399,6 @@ static void stop_osdvnc ( filter_t *p_filter ) 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" ); } @@ -698,8 +685,8 @@ static void* vnc_worker_thread( vlc_object_t *p_thread_obj ) /* 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 ); @@ -715,10 +702,8 @@ static void* vnc_worker_thread( vlc_object_t *p_thread_obj ) 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; @@ -779,7 +764,6 @@ static void* vnc_worker_thread( vlc_object_t *p_thread_obj ) 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" ); @@ -1156,8 +1140,7 @@ static subpicture_t *Filter( filter_t *p_filter, mtime_t date ) /* 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; @@ -1330,38 +1313,33 @@ static inline bool raw_line( filter_sys_t* p_sys, /***************************************************************************** * 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 ) @@ -1371,7 +1349,7 @@ static int MouseEvent( vlc_object_t *p_this, char const *psz_var, } #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 /* */ @@ -1390,7 +1368,7 @@ static int MouseEvent( vlc_object_t *p_this, char const *psz_var, vlc_mutex_unlock( &p_sys->lock ); - return VLC_SUCCESS; + return VLC_EGENERIC; } /***************************************************************************** @@ -1407,11 +1385,11 @@ static int KeyEvent( vlc_object_t *p_this, char const *psz_var, 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; }