X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fvideo_filter%2Fosdmenu.c;h=377f7407b23d657002931dac12b9d1c0af06c98b;hb=0820fb75f362afb97b6b11ece174c1e2f19abdd5;hp=82816578b1a0a323a28aabbc2707152aabe6b6d6;hpb=72fa5a9d8e8f5a1bbe0d83ffd1f30b3265a531c7;p=vlc diff --git a/modules/video_filter/osdmenu.c b/modules/video_filter/osdmenu.c index 82816578b1..377f7407b2 100644 --- a/modules/video_filter/osdmenu.c +++ b/modules/video_filter/osdmenu.c @@ -113,6 +113,16 @@ static int MouseEvent( vlc_object_t *, char const *, #define OSD_UPDATE_MAX 1000 vlc_module_begin () + set_capability( "sub filter", 100 ) + set_description( N_("On Screen Display menu") ) + set_shortname( N_("OSD menu") ) + add_shortcut( "osdmenu" ) + + set_category( CAT_VIDEO ) + set_subcategory( SUBCAT_VIDEO_SUBPIC ) + + set_callbacks( CreateFilter, DestroyFilter ) + add_integer( OSD_CFG "x", -1, NULL, POSX_TEXT, POSX_LONGTEXT, false ) add_integer( OSD_CFG "y", -1, NULL, POSY_TEXT, POSY_LONGTEXT, false ) add_integer( OSD_CFG "position", 8, NULL, POS_TEXT, POS_LONGTEXT, @@ -130,15 +140,6 @@ vlc_module_begin () add_integer_with_range( OSD_CFG "alpha", 255, 0, 255, NULL, OSD_ALPHA_TEXT, OSD_ALPHA_LONGTEXT, true ) - set_capability( "sub filter", 100 ) - set_description( N_("On Screen Display menu") ) - set_shortname( N_("OSD menu") ) - add_shortcut( "osdmenu" ) - - set_category( CAT_VIDEO ) - set_subcategory( SUBCAT_VIDEO_SUBPIC ) - - set_callbacks( CreateFilter, DestroyFilter ) vlc_module_end () /***************************************************************************** @@ -218,6 +219,7 @@ static int CreateFilter ( vlc_object_t *p_this ) if( p_sys->p_menu == NULL ) goto error; + /* FIXME: this plugin is not at all thread-safe w.r.t. callbacks */ p_sys->p_menu->i_position = p_sys->i_position; /* Check if menu position was overridden */ @@ -251,18 +253,12 @@ static int CreateFilter ( vlc_object_t *p_this ) /* Attach subpicture filter callback */ p_filter->pf_sub_filter = Filter; - p_sys->p_vout = vlc_object_find( p_this, VLC_OBJECT_VOUT, FIND_ANYWHERE ); + 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-x", - MouseEvent, p_sys ); - var_AddCallback( p_sys->p_vout, "mouse-y", - MouseEvent, p_sys ); var_AddCallback( p_sys->p_vout, "mouse-clicked", MouseEvent, p_sys ); - } - 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; return VLC_SUCCESS; @@ -289,25 +285,16 @@ static void DestroyFilter( vlc_object_t *p_this ) var_DelCallback( p_filter, OSD_CFG "update", OSDMenuCallback, p_sys ); var_DelCallback( p_filter, OSD_CFG "alpha", OSDMenuCallback, p_sys ); - if( p_sys ) - { - var_DelCallback( p_sys->p_menu, "osd-menu-update", - OSDMenuUpdateEvent, p_filter ); - var_DelCallback( p_sys->p_menu, "osd-menu-visible", - OSDMenuVisibleEvent, p_filter ); - } + var_DelCallback( p_sys->p_menu, "osd-menu-update", + OSDMenuUpdateEvent, p_filter ); + var_DelCallback( p_sys->p_menu, "osd-menu-visible", + OSDMenuVisibleEvent, p_filter ); - if( p_sys && p_sys->p_vout ) + if( p_sys->p_vout ) { - var_DelCallback( p_sys->p_vout, "mouse-x", - MouseEvent, p_sys ); - var_DelCallback( p_sys->p_vout, "mouse-y", - MouseEvent, p_sys ); var_DelCallback( p_sys->p_vout, "mouse-clicked", MouseEvent, p_sys ); - vlc_object_release( p_sys->p_vout ); - p_sys->p_vout = NULL; } var_Destroy( p_this, OSD_CFG "file-path" ); @@ -319,14 +306,10 @@ static void DestroyFilter( vlc_object_t *p_this ) var_Destroy( p_this, OSD_CFG "update" ); var_Destroy( p_this, OSD_CFG "alpha" ); - if( p_sys ) - { - osd_MenuDelete( p_filter, p_sys->p_menu ); - - free( p_sys->psz_path ); - free( p_sys->psz_file ); - free( p_sys ); - } + osd_MenuDelete( p_filter, p_sys->p_menu ); + free( p_sys->psz_path ); + free( p_sys->psz_file ); + free( p_sys ); } /***************************************************************************** @@ -369,8 +352,7 @@ static subpicture_region_t *create_text_region( filter_t *p_filter, subpicture_t /* Create new SPU region */ memset( &fmt, 0, sizeof(video_format_t) ); - fmt.i_chroma = VLC_FOURCC( 'T','E','X','T' ); - fmt.i_aspect = VOUT_ASPECT_FACTOR; + fmt.i_chroma = VLC_CODEC_TEXT; fmt.i_sar_num = fmt.i_sar_den = 1; fmt.i_width = fmt.i_visible_width = i_width; fmt.i_height = fmt.i_visible_height = i_height; @@ -407,13 +389,12 @@ static subpicture_region_t *create_picture_region( filter_t *p_filter, subpictur /* Create new SPU region */ memset( &fmt, 0, sizeof(video_format_t) ); - fmt.i_chroma = (p_pic == NULL) ? VLC_FOURCC('Y','U','V','P') : VLC_FOURCC('Y','U','V','A'); - fmt.i_aspect = VOUT_ASPECT_FACTOR; + fmt.i_chroma = (p_pic == NULL) ? VLC_CODEC_YUVP : VLC_CODEC_YUVA; fmt.i_sar_num = fmt.i_sar_den = 1; fmt.i_width = fmt.i_visible_width = i_width; fmt.i_height = fmt.i_visible_height = i_height; fmt.i_x_offset = fmt.i_y_offset = 0; - if( fmt.i_chroma == VLC_FOURCC('Y','U','V','P') ) + if( fmt.i_chroma == VLC_CODEC_YUVP ) { fmt.p_palette = &palette; fmt.p_palette->i_entries = 0; @@ -662,35 +643,18 @@ static int OSDMenuCallback( vlc_object_t *p_this, char const *psz_var, static int MouseEvent( vlc_object_t *p_this, char const *psz_var, vlc_value_t oldval, vlc_value_t newval, void *p_data ) { - VLC_UNUSED(oldval); VLC_UNUSED(newval); + VLC_UNUSED(oldval); filter_sys_t *p_sys = (filter_sys_t *)p_data; vout_thread_t *p_vout = (vout_thread_t*)p_sys->p_vout; - int i_x, i_y; - int i_v; - -#define MOUSE_DOWN 1 -#define MOUSE_CLICKED 2 -#define MOUSE_MOVE_X 4 -#define MOUSE_MOVE_Y 8 -#define MOUSE_MOVE 12 - uint8_t mouse= 0; - + int i_x = newval.coords.x; + int i_y = newval.coords.y; int v_h = p_vout->output.i_height; int v_w = p_vout->output.i_width; - if( psz_var[6] == 'x' ) mouse |= MOUSE_MOVE_X; - if( psz_var[6] == 'y' ) mouse |= MOUSE_MOVE_Y; - if( psz_var[6] == 'c' ) mouse |= MOUSE_CLICKED; - - i_v = var_GetInteger( p_sys->p_vout, "mouse-button-down" ); - if( i_v & 0x1 ) mouse |= MOUSE_DOWN; - i_y = var_GetInteger( p_sys->p_vout, "mouse-y" ); - i_x = var_GetInteger( p_sys->p_vout, "mouse-x" ); - if( i_y < 0 || i_x < 0 || i_y >= v_h || i_x >= v_w ) return VLC_SUCCESS; - if( mouse & MOUSE_CLICKED ) + do { int i_scale_width, i_scale_height; osd_button_t *p_button = NULL; @@ -710,5 +674,6 @@ static int MouseEvent( vlc_object_t *p_this, char const *psz_var, msg_Dbg( p_this, "mouse clicked %s (%d,%d)", p_button->psz_name, i_x, i_y ); } } + while(0); return VLC_SUCCESS; }