File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ntp / util / audio-pcm.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:08:38 2012 UTC (12 years, 7 months ago) by misho
Branches: ntp, MAIN
CVS tags: v4_2_6p5p0, v4_2_6p5, HEAD
ntp 4.2.6p5

    1: /*
    2:  * audio-pcm.c - Scope out the PCM audio stuff
    3:  */
    4: #ifdef HAVE_CONFIG_H
    5: # include <config.h>
    6: #endif
    7: 
    8: #if defined(HAVE_MACHINE_SOUNDCARD_H) || defined(HAVE_SYS_SOUNDCARD_H)
    9: 
   10: #include "audio.h"
   11: #include "ntp_stdlib.h"
   12: #include "ntp_syslog.h"
   13: #ifdef HAVE_UNISTD_H
   14: # include <unistd.h>
   15: #endif
   16: #include <stdio.h>
   17: #include "ntp_string.h"
   18: 
   19: #ifdef HAVE_SYS_IOCTL_H
   20: #include <sys/ioctl.h>
   21: #endif /* HAVE_SYS_IOCTL_H */
   22: 
   23: #include <fcntl.h>
   24: 
   25: #ifdef HAVE_MACHINE_SOUNDCARD_H
   26: # include <machine/soundcard.h>
   27: # define PCM_STYLE_SOUND
   28: #else
   29: # ifdef HAVE_SYS_SOUNDCARD_H
   30: #  include <sys/soundcard.h>
   31: #  define PCM_STYLE_SOUND
   32: # endif
   33: #endif
   34: 
   35: /*
   36:  * Global variables
   37:  */
   38: static int ctl_fd;		/* audio control file descriptor */
   39: 
   40: const char *m_names[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES ;
   41: 
   42: void
   43: d_fmt(
   44:       unsigned int format
   45:       )
   46: {
   47: 
   48:   if (format & AFMT_MU_LAW)	printf("MU_LAW ");
   49:   if (format & AFMT_A_LAW)	printf("A_LAW ");
   50:   if (format & AFMT_IMA_ADPCM)	printf("IMA_ADPCM ");
   51:   if (format & AFMT_U8)		printf("U8 ");
   52:   if (format & AFMT_S16_LE)	printf("S16_LE ");
   53:   if (format & AFMT_S16_BE)	printf("S16_BE ");
   54:   if (format & AFMT_S8)		printf("S8 ");
   55:   if (format & AFMT_U16_LE)	printf("U16_LE ");
   56:   if (format & AFMT_U16_BE)	printf("U16_BE ");
   57:   if (format & AFMT_MPEG)	printf("MPEG ");
   58:   if (format & AFMT_AC3)	printf("AC3 ");
   59:   printf("\n");
   60: }
   61: 
   62: void
   63: d_mixer(
   64: 	unsigned int mixer
   65: 	)
   66: {
   67:   int i;
   68:   int n = 0;
   69: 
   70:   for (i = 0; i < SOUND_MIXER_NRDEVICES; ++i)
   71:     if ((1 << i) & mixer) {
   72:       if (n)
   73: 	printf(", ");
   74:       printf("%s", m_names[i]);
   75:       n = 1;
   76:     }
   77:   printf("\n");
   78: }
   79: 
   80: int
   81: main( )
   82: {
   83: 	int	unit = 0;	/* device unit (0-3) */
   84: # define AI_DEV		"/dev/audio%d"
   85: # define AC_DEV		"/dev/mixer%d"
   86: 	char ai_dev[30];
   87: 	char ac_dev[30];
   88: 	struct snd_size s_size;
   89: 	snd_chan_param s_c_p;
   90: 	snd_capabilities s_c;
   91: 	int fd;
   92: 	int rval;
   93: 	char *dname = ai_dev;		/* device name */
   94: 	char *actl = ac_dev;
   95: 	int devmask = 0, recmask = 0, recsrc = 0;
   96: 
   97: 	(void)sprintf(ai_dev, AI_DEV, unit);
   98: 	(void)sprintf(ac_dev, AC_DEV, unit);
   99: 
  100: 	/*
  101: 	 * Open audio device. Do not complain if not there.
  102: 	 */
  103: 	fd = open(dname, O_RDWR | O_NONBLOCK, 0777);
  104: 	if (fd < 0)
  105: 		return (fd);
  106: 
  107: 	/*
  108: 	 * Open audio control device.
  109: 	 */
  110: 	ctl_fd = open(actl, O_RDWR);
  111: 	if (ctl_fd < 0) {
  112: 		fprintf(stderr, "invalid control device <%s>\n", actl);
  113: 		close(fd);
  114: 		return(ctl_fd);
  115: 	}
  116: 
  117: 	printf("input:   <%s> %d\n", dname, fd);
  118: 	printf("control: <%s> %d\n", actl, ctl_fd);
  119: 
  120: 	if (ioctl(ctl_fd, SOUND_MIXER_READ_DEVMASK, &devmask) == -1)
  121: 	    printf("SOUND_MIXER_READ_DEVMASK: %s\n", strerror(errno));
  122: 	if (ioctl(ctl_fd, SOUND_MIXER_READ_RECMASK, &recmask) == -1)
  123: 	    printf("SOUND_MIXER_READ_RECMASK: %s\n", strerror(errno));
  124: 	if (ioctl(ctl_fd, SOUND_MIXER_READ_RECSRC, &recsrc) == -1)
  125: 	    printf("SOUND_MIXER_READ_RECSRC: %s\n", strerror(errno));
  126: 
  127: 	printf("devmask: %#x recmask: %#x recsrc: %#x\n",
  128: 		devmask, recmask, recsrc);
  129: 	printf("Devmask: "); d_mixer(devmask);
  130: 	printf("Recmask: "); d_mixer(recmask);
  131: 	printf("RecSrc:  "); d_mixer(recsrc);
  132: 
  133: 	/*
  134: 	 * Set audio device parameters.
  135: 	 */
  136: 	rval = fd;
  137: 
  138: 	if (ioctl(fd, AIOGSIZE, &s_size) == -1)
  139: 	    printf("AIOGSIZE: %s\n", strerror(errno));
  140: 	else
  141: 	    printf("play_size %d, rec_size %d\n",
  142: 		s_size.play_size, s_size.rec_size);
  143: 
  144: 	if (ioctl(fd, AIOGFMT, &s_c_p) == -1)
  145: 	    printf("AIOGFMT: %s\n", strerror(errno));
  146: 	else {
  147: 	  printf("play_rate %lu, rec_rate %lu, play_format %#lx, rec_format %#lx\n",
  148: 		 s_c_p.play_rate, s_c_p.rec_rate, s_c_p.play_format, s_c_p.rec_format);
  149: 	  printf("Play format: "); d_fmt(s_c_p.play_format);
  150: 	  printf("Rec format:  "); d_fmt(s_c_p.rec_format);
  151: 	}
  152: 
  153: }
  154: #endif /* HAVE_{MACHINE_SOUNDCARD,SYS_SOUNDCARD}_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>