]> git.alsa-project.org Git - alsa-lib.git/commitdiff
dmix - Enable auto format detection as default
authorTakashi Iwai <tiwai@suse.de>
Fri, 18 Jan 2008 12:42:51 +0000 (13:42 +0100)
committerTakashi Iwai <tiwai@suse.de>
Fri, 18 Jan 2008 12:42:51 +0000 (13:42 +0100)
The direct plugins have the automatic format-detection feature but it
wasn't enabled properly in the interface.  Now you can pass the format
"unchanged" to make the plugin detect a proper format.

This will change the default format of some drivers, such as, HD-audio.

src/conf/alsa.conf
src/pcm/pcm_direct.c
src/pcm/pcm_dmix.c

index 449bdad375753b9cb77dd7737d2746a853715c3b..4bf8f07e3d9e5f6c6c0b59b59685434655ebfd2c 100644 (file)
@@ -68,7 +68,7 @@ defaults.pcm.ipc_gid audio
 defaults.pcm.ipc_perm 0660
 defaults.pcm.dmix.max_periods 0
 defaults.pcm.dmix.rate 48000
-defaults.pcm.dmix.format S16_LE
+defaults.pcm.dmix.format "unchanged"
 defaults.pcm.dmix.card defaults.pcm.card
 defaults.pcm.dmix.device defaults.pcm.device
 defaults.pcm.dsnoop.card defaults.pcm.card
index 75d540d4174041f5c7e7df37b21f7c558a0598fd..a884b120423e431ca990e39d4d4d236b362c6734 100644 (file)
@@ -874,7 +874,11 @@ int snd_pcm_direct_initialize_slave(snd_pcm_direct_t *dmix, snd_pcm_t *spcm, str
                        return ret;
                }
        }
-       ret = snd_pcm_hw_params_set_format(spcm, hw_params, params->format);
+       if (params->format == SND_PCM_FORMAT_UNKNOWN)
+               ret = -EINVAL;
+       else
+               ret = snd_pcm_hw_params_set_format(spcm, hw_params,
+                                                  params->format);
        if (ret < 0) {
                static const snd_pcm_format_t dmix_formats[] = {
                        SND_PCM_FORMAT_S32,
index e54cf922ad73889cd961630633dab6e49a6f63bf..4d21e9badad38438e609a6083f62100f4fdd9838 100644 (file)
@@ -1267,7 +1267,7 @@ int _snd_pcm_dmix_open(snd_pcm_t **pcmp, const char *name,
        params.periods = 3;
 
        err = snd_pcm_slave_conf(root, dopen.slave, &sconf, 8,
-                                SND_PCM_HW_PARAM_FORMAT, 0, &params.format,
+                                SND_PCM_HW_PARAM_FORMAT, SCONF_UNCHANGED, &params.format,
                                 SND_PCM_HW_PARAM_RATE, 0, &params.rate,
                                 SND_PCM_HW_PARAM_CHANNELS, 0, &params.channels,
                                 SND_PCM_HW_PARAM_PERIOD_TIME, 0, &params.period_time,
@@ -1282,8 +1282,10 @@ int _snd_pcm_dmix_open(snd_pcm_t **pcmp, const char *name,
        if (psize == -1 && params.period_time == -1)
                params.period_time = 125000;    /* 0.125 seconds */
 
-       /* sorry, limited features */
-       if (! (dmix_supported_format & (1ULL << params.format))) {
+       if (params.format == -2)
+               params.format = SND_PCM_FORMAT_UNKNOWN;
+       else if (!(dmix_supported_format & (1ULL << params.format))) {
+               /* sorry, limited features */
                SNDERR("Unsupported format");
                snd_config_delete(sconf);
                return -EINVAL;