Annotation of embedaddon/ntp/util/audio-pcm.c, revision 1.1.1.1

1.1       misho       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>