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
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,
params.periods = 3;
err = snd_pcm_slave_conf(root, dopen.slave, &sconf, 8,
- SND_PCM_HW_PARAM_FORMAT, 0, ¶ms.format,
+ SND_PCM_HW_PARAM_FORMAT, SCONF_UNCHANGED, ¶ms.format,
SND_PCM_HW_PARAM_RATE, 0, ¶ms.rate,
SND_PCM_HW_PARAM_CHANNELS, 0, ¶ms.channels,
SND_PCM_HW_PARAM_PERIOD_TIME, 0, ¶ms.period_time,
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;