Hello Developers and All,
quick grep on ALSA sources shows, for example, this:
alsa-lib-1.0.17a/src/pcm/pcm_dsnoop.c :
765 int _snd_pcm_dsnoop_open(snd_pcm_t **pcmp, const char *name,
766 snd_config_t *root, snd_config_t *conf,
767 snd_pcm_stream_t stream, int mode)
768 {
769 snd_config_t *sconf;
770 struct slave_params params;
771 struct snd_pcm_direct_open_conf dopen;
772 int bsize, psize;
773 int err;
774
775 err = snd_pcm_direct_parse_open_conf(root, conf, stream,
&dopen);
776 if (err < 0)
777 return err;
778
779 /* the default settings, it might be invalid for some hardware
*/
780 params.format = SND_PCM_FORMAT_S16;
781 params.rate = 48000;
782 params.channels = 2;
783 params.period_time = -1;
784 params.buffer_time = -1;
785 bsize = psize = -1;
786 params.periods = 3;
787 err = snd_pcm_slave_conf(root, dopen.slave, &sconf, 8,
788 SND_PCM_HW_PARAM_FORMAT,
SCONF_UNCHANGED, ¶ms.format,
789 SND_PCM_HW_PARAM_RATE, 0, ¶ms.rate,
790 SND_PCM_HW_PARAM_CHANNELS, 0,
¶ms.channels,
791 SND_PCM_HW_PARAM_PERIOD_TIME, 0,
¶ms.period_time,
792 SND_PCM_HW_PARAM_BUFFER_TIME, 0,
¶ms.buffer_time,
793 SND_PCM_HW_PARAM_PERIOD_SIZE, 0,
&psize,
794 SND_PCM_HW_PARAM_BUFFER_SIZE, 0,
&bsize,
795 SND_PCM_HW_PARAM_PERIODS, 0,
¶ms.periods);
796 if (err < 0)
797 return err;
798
799 /* set a reasonable default */
800 if (psize == -1 && params.period_time == -1)
801 params.period_time = 125000; /* 0.125 seconds */
802
803 if (params.format == -2)
804 params.format = SND_PCM_FORMAT_UNKNOWN;
805
806 params.period_size = psize;
807 params.buffer_size = bsize;
808
809 err = snd_pcm_dsnoop_open(pcmp, name, &dopen, ¶ms,
810 root, sconf, stream, mode);
811 snd_config_delete(sconf);
812 return err;
813 }
.
I question this line:
781 params.rate = 48000;
.
In my opinions this is wrong.
It's wrong in a sense the whole ALSA should have just _one_ place where default
sample rate
is defined, and just _one_ mechanism through which default sample rate is set
(like through
.asoundrc / alsa.conf / /usr/share/alsa/alsa.conf .
As I was taught, numeric constants other than 0, 1, maybe 2 are not allowed in
source code, instead the
constants should all have meaningful names (e.g. "C" macros, C++ constant class
data members, etc.) and
these names and not numeric constants should be used in the code.
Thanks,
Sergei.
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Alsa-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/alsa-user