mirror of
				https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
				synced 2025-11-03 09:01:50 -05:00 
			
		
		
		
	initialize sound cards only after the 'control' object appeared
This commit is contained in:
		
							parent
							
								
									9bea2503d9
								
							
						
					
					
						commit
						ca39fa2c6f
					
				
					 1 changed files with 25 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -121,6 +121,7 @@ static const char *strip_udi(const char *udi) {
 | 
			
		|||
enum alsa_type {
 | 
			
		||||
    ALSA_TYPE_PLAYBACK,
 | 
			
		||||
    ALSA_TYPE_CAPTURE,
 | 
			
		||||
    ALSA_TYPE_CONTROL,
 | 
			
		||||
    ALSA_TYPE_OTHER
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -141,6 +142,8 @@ static enum alsa_type hal_alsa_device_get_type(LibHalContext *context, const cha
 | 
			
		|||
        t = ALSA_TYPE_PLAYBACK;
 | 
			
		||||
    else if (pa_streq(type, "capture"))
 | 
			
		||||
        t = ALSA_TYPE_CAPTURE;
 | 
			
		||||
    else if (pa_streq(type, "control"))
 | 
			
		||||
        t = ALSA_TYPE_CONTROL;
 | 
			
		||||
 | 
			
		||||
    libhal_free_string(type);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -171,7 +174,8 @@ static pa_bool_t hal_alsa_device_is_modem(LibHalContext *context, const char *ud
 | 
			
		|||
 | 
			
		||||
finish:
 | 
			
		||||
    if (dbus_error_is_set(&error)) {
 | 
			
		||||
        pa_log_error("D-Bus error while parsing HAL ALSA data: %s: %s", error.name, error.message);
 | 
			
		||||
        if (!dbus_error_has_name(&error, "org.freedesktop.Hal.NoSuchProperty"))
 | 
			
		||||
            pa_log_error("D-Bus error while parsing HAL ALSA data: %s: %s", error.name, error.message);
 | 
			
		||||
        dbus_error_free(&error);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -193,10 +197,23 @@ static int hal_device_load_alsa(struct userdata *u, const char *udi, struct devi
 | 
			
		|||
 | 
			
		||||
    /* We only care for PCM devices */
 | 
			
		||||
    type = hal_alsa_device_get_type(u->context, udi);
 | 
			
		||||
    if (type == ALSA_TYPE_OTHER)
 | 
			
		||||
 | 
			
		||||
    /* For each ALSA card that appears the control device will be the
 | 
			
		||||
     * last one to be created, this is considered part of the ALSA
 | 
			
		||||
     * usperspace API. We rely on this and load our modules only when
 | 
			
		||||
     * the control device is available assuming that *all* device
 | 
			
		||||
     * nodes have been properly created and assigned the right ACLs at
 | 
			
		||||
     * that time. Also see:
 | 
			
		||||
     *
 | 
			
		||||
     * http://mailman.alsa-project.org/pipermail/alsa-devel/2009-April/015958.html
 | 
			
		||||
     *
 | 
			
		||||
     * and the associated thread.*/
 | 
			
		||||
 | 
			
		||||
    if (type != ALSA_TYPE_CONTROL)
 | 
			
		||||
        goto fail;
 | 
			
		||||
 | 
			
		||||
    /* We don't care for modems */
 | 
			
		||||
    /* We don't care for modems -- this is most likely not set for
 | 
			
		||||
     * control devices, so kind of pointless here. */
 | 
			
		||||
    if (hal_alsa_device_is_modem(u->context, udi))
 | 
			
		||||
        goto fail;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -411,9 +428,10 @@ static int hal_device_add_all(struct userdata *u) {
 | 
			
		|||
        for (i = 0; i < n; i++) {
 | 
			
		||||
            struct device *d;
 | 
			
		||||
 | 
			
		||||
            if ((d = hal_device_add(u, udis[i])))
 | 
			
		||||
            if ((d = hal_device_add(u, udis[i]))) {
 | 
			
		||||
                count++;
 | 
			
		||||
            else
 | 
			
		||||
                pa_log_debug("Loaded device %s", udis[i]);
 | 
			
		||||
            } else
 | 
			
		||||
                pa_log_debug("Not loaded device %s", udis[i]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -449,6 +467,8 @@ static void device_added_cb(LibHalContext *context, const char *udi) {
 | 
			
		|||
 | 
			
		||||
    if (!hal_device_add(u, udi))
 | 
			
		||||
        pa_log_debug("Not loaded device %s", udi);
 | 
			
		||||
    else
 | 
			
		||||
        pa_log_debug("Loaded device %s", udi);
 | 
			
		||||
 | 
			
		||||
finish:
 | 
			
		||||
    if (dbus_error_is_set(&error)) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue