From 0565b5c2e5062b41e6e1d2b441724899bfdcf38d Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sat, 17 Oct 2009 18:18:55 +0300 Subject: [PATCH] Remove HAL support HAL is officially deprecated. The new udev discs module provide the same functionality in VLC. Moreover, the plugin was waking up the CPU at regular intervals. Last, InitDeviceValues seemed to cause problems with wrong disc paths being saved to vlcrc for some people --- configure.ac | 4 - modules/services_discovery/Modules.am | 1 - modules/services_discovery/hal.c | 346 -------------------------- src/libvlc.c | 78 ------ 4 files changed, 429 deletions(-) delete mode 100644 modules/services_discovery/hal.c diff --git a/configure.ac b/configure.ac index 4082384bc7..270d5279e2 100644 --- a/configure.ac +++ b/configure.ac @@ -4577,10 +4577,6 @@ dnl dnl Bonjour services discovery PKG_ENABLE_MODULES_VLC([BONJOUR], [], [avahi-client >= 0.6], [Bonjour services discovery], [auto]) -dnl -dnl HAL services discovery -PKG_ENABLE_MODULES_VLC([HAL], [], [hal >= 0.5.0], [Linux HAL services discovery], [auto]) - dnl dnl libudev services discovery PKG_ENABLE_MODULES_VLC([UDEV], [], [libudev >= 142], [Linux udev services discovery], [auto]) diff --git a/modules/services_discovery/Modules.am b/modules/services_discovery/Modules.am index dd4f7fb960..71d27a5c61 100644 --- a/modules/services_discovery/Modules.am +++ b/modules/services_discovery/Modules.am @@ -1,5 +1,4 @@ SOURCES_sap = sap.c -SOURCES_hal = hal.c SOURCES_shout = shout.c SOURCES_upnp_cc = upnp_cc.cpp SOURCES_upnp_intel = upnp_intel.cpp upnp_intel.hpp diff --git a/modules/services_discovery/hal.c b/modules/services_discovery/hal.c deleted file mode 100644 index a8241bd85a..0000000000 --- a/modules/services_discovery/hal.c +++ /dev/null @@ -1,346 +0,0 @@ -/***************************************************************************** - * hal.c : HAL interface module - ***************************************************************************** - * Copyright (C) 2004 the VideoLAN team - * Copyright © 2006-2007 Rafaël Carré - * $Id$ - * - * Authors: Clément Stenac - * Rafaël Carré - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. - *****************************************************************************/ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include -#include -#include - -#include - -#include /* ENOMEM */ - -#ifdef HAVE_UNISTD_H -# include -#endif -#ifdef HAVE_SYS_TIME_H -# include -#endif - -#include - -#define MAX_LINE_LENGTH 256 - -/***************************************************************************** - * Local prototypes - *****************************************************************************/ - -/* store relation between item id and udi for ejection */ -struct udi_input_id_t -{ - char *psz_udi; - input_item_t *p_item; -}; - -struct services_discovery_sys_t -{ - vlc_thread_t thread; - LibHalContext *p_ctx; - DBusConnection *p_connection; - int i_devices_number; - struct udi_input_id_t **pp_devices; -}; -static void *Run ( void * ); -static int Open ( vlc_object_t * ); -static void Close( vlc_object_t * ); - -/* HAL callbacks */ -void DeviceAdded( LibHalContext *p_ctx, const char *psz_udi ); -void DeviceRemoved( LibHalContext *p_ctx, const char *psz_udi ); - -/* to retrieve p_sd in HAL callbacks */ -services_discovery_t *p_sd_global; - -/***************************************************************************** - * Module descriptor - *****************************************************************************/ -vlc_module_begin () - set_description( N_("HAL devices detection") ) - set_category( CAT_PLAYLIST ) - set_subcategory( SUBCAT_PLAYLIST_SD ) - - set_capability( "services_discovery", 0 ) - set_callbacks( Open, Close ) - -vlc_module_end () - - -/***************************************************************************** - * Open: initialize and create stuff - *****************************************************************************/ -static int Open( vlc_object_t *p_this ) -{ - services_discovery_t *p_sd = ( services_discovery_t* )p_this; - services_discovery_sys_t *p_sys = malloc( - sizeof( services_discovery_sys_t ) ); - if( !p_sys ) - return VLC_ENOMEM; - - DBusError dbus_error; - DBusConnection *p_connection = NULL; - - p_sd_global = p_sd; - p_sys->i_devices_number = 0; - p_sys->pp_devices = NULL; - - p_sd->p_sys = p_sys; - - dbus_error_init( &dbus_error ); - - p_sys->p_ctx = libhal_ctx_new(); - if( !p_sys->p_ctx ) - { - msg_Err( p_sd, "unable to create HAL context") ; - free( p_sys ); - return VLC_EGENERIC; - } - p_connection = dbus_bus_get( DBUS_BUS_SYSTEM, &dbus_error ); - if( dbus_error_is_set( &dbus_error ) ) - { - msg_Err( p_sd, "unable to connect to DBUS: %s", dbus_error.message ); - goto error; - } - libhal_ctx_set_dbus_connection( p_sys->p_ctx, p_connection ); - p_sys->p_connection = p_connection; - if( !libhal_ctx_init( p_sys->p_ctx, &dbus_error ) ) - { - msg_Err( p_sd, "hal not available : %s", dbus_error.message ); - goto error; - } - - if( !libhal_ctx_set_device_added( p_sys->p_ctx, DeviceAdded ) || - !libhal_ctx_set_device_removed( p_sys->p_ctx, DeviceRemoved ) ) - { - msg_Err( p_sd, "unable to add callback" ); - goto error; - } - - if( vlc_clone( &p_sys->thread, Run, p_this, VLC_THREAD_PRIORITY_LOW ) ) - goto error; - - return VLC_SUCCESS; -error: - if( p_connection ) - dbus_connection_unref( p_connection ); - dbus_error_free( &dbus_error ); - libhal_ctx_free( p_sys->p_ctx ); - free( p_sys ); - return VLC_EGENERIC; -} - -/***************************************************************************** - * Close: - *****************************************************************************/ -static void Close( vlc_object_t *p_this ) -{ - services_discovery_t *p_sd = ( services_discovery_t* )p_this; - services_discovery_sys_t *p_sys = p_sd->p_sys; - - /*vlc_cancel( p_sys->thread );*/ - vlc_object_kill( p_sd ); - vlc_join( p_sys->thread, NULL ); - dbus_connection_unref( p_sys->p_connection ); - struct udi_input_id_t *p_udi_entry; - - while( p_sys->i_devices_number > 0 ) - { - p_udi_entry = p_sys->pp_devices[0]; - free( p_udi_entry->psz_udi ); - TAB_REMOVE( p_sys->i_devices_number, p_sys->pp_devices, - p_sys->pp_devices[0] ); - free( p_udi_entry ); - } - p_sys->pp_devices = NULL; - - libhal_ctx_free( p_sys->p_ctx ); - - free( p_sys ); -} - -static void AddItem( services_discovery_t *p_sd, input_item_t * p_input, - const char* psz_device ) -{ - services_discovery_sys_t *p_sys = p_sd->p_sys; - services_discovery_AddItem( p_sd, p_input, NULL /* no category */ ); - - struct udi_input_id_t *p_udi_entry; - p_udi_entry = malloc( sizeof( struct udi_input_id_t ) ); - if( !p_udi_entry ) - return; - p_udi_entry->psz_udi = strdup( psz_device ); - if( !p_udi_entry->psz_udi ) - { - free( p_udi_entry ); - return; - } - - vlc_gc_incref( p_input ); - p_udi_entry->p_item = p_input; - TAB_APPEND( p_sys->i_devices_number, p_sys->pp_devices, p_udi_entry ); -} - -static void AddDvd( services_discovery_t *p_sd, const char *psz_device ) -{ - char *psz_name; - char *psz_uri; - char *psz_blockdevice; - input_item_t *p_input; - - psz_name = libhal_device_get_property_string( p_sd->p_sys->p_ctx, - psz_device, "volume.label", NULL ); - psz_blockdevice = libhal_device_get_property_string( p_sd->p_sys->p_ctx, - psz_device, "block.device", NULL ); - - if( asprintf( &psz_uri, "dvd://%s", psz_blockdevice ) == -1 ) - return; - /* Create the playlist item here */ - p_input = input_item_New( p_sd, psz_uri, psz_name ); - free( psz_uri ); - if( !p_input ) - { - return; - } - - AddItem( p_sd, p_input, psz_device ); - - vlc_gc_decref( p_input ); -} - -static void DelItem( services_discovery_t *p_sd, const char* psz_udi ) -{ - services_discovery_sys_t *p_sys = p_sd->p_sys; - - int i; - for( i = 0; i < p_sys->i_devices_number; i++ ) - { /* looks for a matching udi */ - if( strcmp( psz_udi, p_sys->pp_devices[i]->psz_udi ) == 0 ) - { /* delete the corresponding item */ - services_discovery_RemoveItem( p_sd, p_sys->pp_devices[i]->p_item ); - vlc_gc_decref( p_sys->pp_devices[i]->p_item ); - free( p_sys->pp_devices[i]->psz_udi ); - TAB_REMOVE( p_sys->i_devices_number, p_sys->pp_devices, - p_sys->pp_devices[i] ); - } - } -} - -static void AddCdda( services_discovery_t *p_sd, const char *psz_device ) -{ - char *psz_uri; - char *psz_blockdevice; - input_item_t *p_input; - - psz_blockdevice = libhal_device_get_property_string( p_sd->p_sys->p_ctx, - psz_device, "block.device", NULL ); - - if( asprintf( &psz_uri, "cdda://%s", psz_blockdevice ) == -1 ) - return; - /* Create the item here */ - p_input = input_item_New( p_sd, psz_uri, "Audio CD" ); - free( psz_uri ); - if( !p_input ) - return; - - AddItem( p_sd, p_input, psz_device ); - - vlc_gc_decref( p_input ); -} - -static void ParseDevice( services_discovery_t *p_sd, const char *psz_device ) -{ - char *psz_disc_type; - services_discovery_sys_t *p_sys = p_sd->p_sys; - - if( !libhal_device_property_exists( p_sys->p_ctx, psz_device, - "volume.disc.type", NULL ) ) - return; - - psz_disc_type = libhal_device_get_property_string( p_sys->p_ctx, - psz_device, - "volume.disc.type", - NULL ); - if( !strncmp( psz_disc_type, "dvd_r", 5 ) ) - { - if (libhal_device_get_property_bool( p_sys->p_ctx, psz_device, - "volume.disc.is_videodvd", NULL ) ) - AddDvd( p_sd, psz_device ); - } - else if( !strncmp( psz_disc_type, "cd_r", 4 ) ) - { - if( libhal_device_get_property_bool( p_sys->p_ctx, psz_device, - "volume.disc.has_audio" , NULL ) ) - AddCdda( p_sd, psz_device ); - } -} - -/***************************************************************************** - * Run: main HAL thread - *****************************************************************************/ -static void *Run( void *data ) -{ - services_discovery_t *p_sd = data; - services_discovery_sys_t *p_sys = p_sd->p_sys; - char **devices; - int i, i_devices; - int canc = vlc_savecancel(); - - /* parse existing devices first */ - if( ( devices = libhal_get_all_devices( p_sys->p_ctx, &i_devices, NULL ) ) ) - { - for( i = 0; i < i_devices; i++ ) - { - ParseDevice( p_sd, devices[ i ] ); - libhal_free_string( devices[ i ] ); - } - free( devices ); - } - - /* FIXME: Totally lame. There are DBus watch functions to do this properly. - * -- Courmisch, 28/08/2008 */ - while( vlc_object_alive (p_sd) ) - { - /* look for events on the bus, blocking 1 second */ - dbus_connection_read_write_dispatch( p_sys->p_connection, 1000 ); - /* HAL 0.5.8.1 can use libhal_ctx_get_dbus_connection(p_sys->p_ctx) */ - } - vlc_restorecancel (canc); - return NULL; -} - -void DeviceAdded( LibHalContext *p_ctx, const char *psz_udi ) -{ - VLC_UNUSED(p_ctx); - ParseDevice( p_sd_global, psz_udi ); -} - -void DeviceRemoved( LibHalContext *p_ctx, const char *psz_udi ) -{ - VLC_UNUSED(p_ctx); - DelItem( p_sd_global, psz_udi ); -} diff --git a/src/libvlc.c b/src/libvlc.c index 9965e3f873..746e6407d7 100644 --- a/src/libvlc.c +++ b/src/libvlc.c @@ -75,10 +75,6 @@ # include #endif -#ifdef HAVE_HAL -# include -#endif - #include #include @@ -227,8 +223,6 @@ static void PauseConsole ( void ); #endif static int ConsoleWidth ( void ); -static void InitDeviceValues( libvlc_int_t * ); - static vlc_mutex_t global_lock = VLC_STATIC_MUTEX; /** @@ -542,11 +536,6 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, return i_ret; } - /* - * Init device values - */ - InitDeviceValues( p_libvlc ); - /* * Override default configuration with config file settings */ @@ -2092,73 +2081,6 @@ static int ConsoleWidth( void ) return i_width; } -/***************************************************************************** - * InitDeviceValues: initialize device values - ***************************************************************************** - * This function inits the dvd, vcd and cd-audio values - *****************************************************************************/ -static void InitDeviceValues( libvlc_int_t *p_vlc ) -{ -#ifdef HAVE_HAL - LibHalContext * ctx = NULL; - int i, i_devices; - char **devices = NULL; - char *block_dev = NULL; - dbus_bool_t b_dvd; - - DBusConnection *p_connection = NULL; - DBusError error; - - ctx = libhal_ctx_new(); - if( !ctx ) return; - dbus_error_init( &error ); - p_connection = dbus_bus_get ( DBUS_BUS_SYSTEM, &error ); - if( dbus_error_is_set( &error ) || !p_connection ) - { - libhal_ctx_free( ctx ); - dbus_error_free( &error ); - return; - } - libhal_ctx_set_dbus_connection( ctx, p_connection ); - if( libhal_ctx_init( ctx, &error ) ) - { - if( ( devices = libhal_get_all_devices( ctx, &i_devices, NULL ) ) ) - { - for( i = 0; i < i_devices; i++ ) - { - if( !libhal_device_property_exists( ctx, devices[i], - "storage.cdrom.dvd", NULL ) ) - { - continue; - } - b_dvd = libhal_device_get_property_bool( ctx, devices[ i ], - "storage.cdrom.dvd", NULL ); - block_dev = libhal_device_get_property_string( ctx, - devices[ i ], "block.device" , NULL ); - if( b_dvd ) - { - config_PutPsz( p_vlc, "dvd", block_dev ); - } - - config_PutPsz( p_vlc, "vcd", block_dev ); - config_PutPsz( p_vlc, "cd-audio", block_dev ); - libhal_free_string( block_dev ); - } - libhal_free_string_array( devices ); - } - libhal_ctx_shutdown( ctx, NULL ); - dbus_connection_unref( p_connection ); - libhal_ctx_free( ctx ); - } - else - { - msg_Warn( p_vlc, "Unable to get HAL device properties" ); - } -#else - (void)p_vlc; -#endif /* HAVE_HAL */ -} - #include void vlc_avcodec_mutex (bool acquire) -- 2.39.2