Re: S16_LE + softvol = bad

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2008/1/17, Takashi Iwai <tiwai@xxxxxxx>:
> ... and the below is the fix.  Give it a try.

Tested with no explicit defaults.pcm.dmix.format, with explicit
S16_LE, and with explicit S32_LE, all with Intel HD audio and the PC
speaker (total 6 cases, including one meaningless). In all cases, the
code was able to choose the correct format for talking with hardware
(i.e., the worst of (a) explicitly specified, if any, and (b) the best
hardware-supported one). Thanks for a quick fix!

>
>
> Takashi
>
> diff -r f20b309ff22a src/conf/alsa.conf
> --- a/src/conf/alsa.conf        Tue Jan 15 14:29:34 2008 +0100
> +++ b/src/conf/alsa.conf        Thu Jan 17 15:18:53 2008 +0100
> @@ -68,7 +68,7 @@ defaults.pcm.ipc_perm 0660
>  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
> diff -r f20b309ff22a src/pcm/pcm_direct.c
> --- a/src/pcm/pcm_direct.c      Tue Jan 15 14:29:34 2008 +0100
> +++ b/src/pcm/pcm_direct.c      Thu Jan 17 15:18:53 2008 +0100
> @@ -874,7 +874,11 @@ int snd_pcm_direct_initialize_slave(snd_
>                         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,
> diff -r f20b309ff22a src/pcm/pcm_dmix.c
> --- a/src/pcm/pcm_dmix.c        Tue Jan 15 14:29:34 2008 +0100
> +++ b/src/pcm/pcm_dmix.c        Thu Jan 17 15:18:53 2008 +0100
> @@ -1267,7 +1267,7 @@ int _snd_pcm_dmix_open(snd_pcm_t **pcmp,
>         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,
>         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;
>


-- 
Alexander E. Patrakov
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux