static gboolean new_osd(xosd **_osd, guint lines) { xosd *osd = *_osd; if(osd) { if(xosd_get_number_lines(osd) == lines) return TRUE; xosd_destroy(osd); } if(lines <= 0) { osd = NULL; return FALSE; } osd = xosd_create(lines); xosd_set_pos(osd, XOSD_bottom); xosd_set_vertical_offset(osd, 16); xosd_set_align(osd, XOSD_center); xosd_set_horizontal_offset(osd, 0); xosd_set_font(osd, XOSD_FONT); xosd_set_outline_offset(osd, 1); xosd_set_outline_colour(osd, XOSD_OUTLINE_COLOR); xosd_set_shadow_offset(osd, 2); xosd_set_colour(osd, XOSD_COLOR); *_osd = osd; return TRUE; }
xosd * configure_osd(int lines) { xosd *osd; osd = xosd_create (NKEYS); xosd_set_font(osd, SK_FONT); xosd_set_pos(osd, SK_POS); xosd_set_align(osd, SK_ALIGN); xosd_set_colour(osd, SK_FG); xosd_set_outline_colour(osd, SK_OUTLINE); xosd_set_outline_offset(osd, SK_OFFSET); xosd_set_shadow_colour(osd, SK_SHADOW); xosd_set_shadow_offset(osd, SK_SHOFFSET); xosd_set_timeout(osd, SK_TIMEOUT); return osd; }
/***************************************************************************** * Open: initialize and create stuff *****************************************************************************/ static int Open( vlc_object_t *p_this ) { intf_thread_t *p_intf = (intf_thread_t *)p_this; intf_sys_t *p_sys; xosd *p_osd; char *psz_font, *psz_colour; if( getenv( "DISPLAY" ) == NULL ) { msg_Err( p_intf, "no display, please set the DISPLAY variable" ); return VLC_EGENERIC; } /* Allocate instance and initialize some members */ p_sys = p_intf->p_sys = malloc( sizeof( intf_sys_t ) ); if( p_sys == NULL ) return VLC_ENOMEM; /* Initialize library */ psz_font = config_GetPsz( p_intf, "xosd-font" ); psz_colour = config_GetPsz( p_intf, "xosd-colour" ); p_osd = xosd_create( 1 ); if( p_osd == NULL ) { msg_Err( p_intf, "couldn't initialize libxosd" ); free( psz_colour ); free( psz_font ); free( p_sys ); return VLC_EGENERIC; } p_sys->p_osd = p_osd; /* Set user preferences */ xosd_set_outline_colour( p_osd, "black" ); xosd_set_font( p_osd, psz_font ); xosd_set_colour( p_osd, psz_colour ); xosd_set_timeout( p_osd, 3 ); xosd_set_pos( p_osd, config_GetInt( p_intf, "xosd-position" ) ? XOSD_bottom: XOSD_top ); xosd_set_horizontal_offset( p_osd, config_GetInt( p_intf, "xosd-text-offset" ) ); xosd_set_vertical_offset( p_osd, config_GetInt( p_intf, "xosd-text-offset" ) ); xosd_set_shadow_offset( p_osd, config_GetInt( p_intf, "xosd-shadow-offset" )); /* Initialize to NULL */ xosd_display( p_osd, 0, XOSD_string, "XOSD interface initialized" ); free( psz_colour ); free( psz_font ); // Initialize mutex and condition variable before adding the callbacks vlc_mutex_init( &p_sys->lock ); vlc_cond_init( &p_sys->cond ); // Add the callbacks playlist_t *p_playlist = pl_Hold( p_intf ); var_AddCallback( p_playlist, "item-current", PlaylistNext, p_this ); var_AddCallback( p_playlist, "item-change", PlaylistNext, p_this ); pl_Release( p_intf ); p_sys->b_need_update = true; p_intf->pf_run = Run; return VLC_SUCCESS; }
/***************************************************************************** * Open: initialize and create stuff *****************************************************************************/ static int Open( vlc_object_t *p_this ) { intf_thread_t *p_intf = (intf_thread_t *)p_this; xosd *p_osd; /* Allocate instance and initialize some members */ p_intf->p_sys = (intf_sys_t *)malloc( sizeof( intf_sys_t ) ); if( p_intf->p_sys == NULL ) { msg_Err( p_intf, "out of memory" ); return VLC_ENOMEM; } if( getenv( "DISPLAY" ) == NULL ) { msg_Err( p_intf, "no display, please set the DISPLAY variable" ); return VLC_EGENERIC; } /* Initialize library */ #if defined(HAVE_XOSD_VERSION_0) || defined(HAVE_XOSD_VERSION_1) p_osd = p_intf->p_sys->p_osd = xosd_init( config_GetPsz( p_intf, "xosd-font" ), config_GetPsz( p_intf,"xosd-colour" ), 3, XOSD_top, 0, 1 ); if( p_intf->p_sys->p_osd == NULL ) { msg_Err( p_intf, "couldn't initialize libxosd" ); return VLC_EGENERIC; } #else p_osd = p_intf->p_sys->p_osd = xosd_create( 1 ); if( p_osd == NULL ) { msg_Err( p_intf, "couldn't initialize libxosd" ); return VLC_EGENERIC; } xosd_set_colour( p_osd, config_GetPsz( p_intf,"xosd-colour" ) ); xosd_set_timeout( p_osd, 3 ); #endif playlist_t *p_playlist = (playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); if( p_playlist == NULL ) { return VLC_EGENERIC; } var_AddCallback( p_playlist, "playlist-current", PlaylistNext, p_this ); var_AddCallback( p_playlist, "item-change", PlaylistNext, p_this ); vlc_object_release( p_playlist ); /* Set user preferences */ xosd_set_font( p_intf->p_sys->p_osd, config_GetPsz( p_intf, "xosd-font" ) ); xosd_set_outline_colour( p_intf->p_sys->p_osd,"black" ); #ifdef HAVE_XOSD_VERSION_2 xosd_set_horizontal_offset( p_intf->p_sys->p_osd, config_GetInt( p_intf, "xosd-text-offset" ) ); xosd_set_vertical_offset( p_intf->p_sys->p_osd, config_GetInt( p_intf, "xosd-text-offset" ) ); #else xosd_set_offset( p_intf->p_sys->p_osd, config_GetInt( p_intf, "xosd-text-offset" ) ); #endif xosd_set_shadow_offset( p_intf->p_sys->p_osd, config_GetInt( p_intf, "xosd-shadow-offset" )); xosd_set_pos( p_intf->p_sys->p_osd, config_GetInt( p_intf, "xosd-position" ) ? XOSD_bottom: XOSD_top ); /* Initialize to NULL */ xosd_display( p_osd, 0, XOSD_string, "XOSD interface initialized" ); p_intf->pf_run = Run; p_intf->p_sys->b_need_update = VLC_TRUE; return VLC_SUCCESS; }