2
mint: audio output for MINT
4
copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1
5
see COPYING and AUTHORS files in distribution or http://mpg123.org
6
initially written by Petr Stehlik
9
/* derived from LINUX, VOXWARE and SUN for MiNT Audio Device by Petr Stehlik */
11
#include "mpg123app.h"
18
int real_rate_printed = 0;
22
static int rate_best_match(audio_output_t *ao)
26
if(!ai || ao->fn < 0 || ao->rate < 0)
30
ret = ioctl(ao->fn,AIOCSSPEED, (void *)dsp_rate);
31
ret = ioctl(ao->fn,AIOCGSPEED,&dsp_rate);
32
if(ret < 0) return ret;
37
static int set_rate(audio_output_t *ao)
39
int dsp_rate = ao->rate;
43
ret = ioctl(ao->fn, AIOCSSPEED, (void *)dsp_rate);
44
if (ret >= 0 && !real_rate_printed) {
45
ioctl(ao->fn,AIOCGSPEED,&real_rate);
46
if (real_rate != dsp_rate) {
47
fprintf(stderr, "Replay rate: %d Hz\n", real_rate);
48
real_rate_printed = 1;
57
static int set_channels(audio_output_t *ao)
59
int chan = ao->channels;
61
if(ao->channels < 1) return 0;
63
return ioctl(ao->fn, AIOCSCHAN, (void *)chan);
66
static int set_format(audio_output_t *ao)
74
case MPG123_ENC_SIGNED_16:
78
case MPG123_ENC_UNSIGNED_8:
81
case MPG123_ENC_SIGNED_8:
84
case MPG123_ENC_ULAW_8:
89
return ioctl(ao->fn, AIOCSFMT, (void *)fmts);
92
static int reset_parameters(audio_output_t *ao)
95
ret = ioctl(ao->fn,AIOCRESET,NULL);
96
if(ret >= 0) ret = set_format(ai);
97
if(ret >= 0) ret = set_channels(ai);
98
if(ret >= 0) ret = set_rate(ai);
104
static int open_mint(audio_output_t *ao)
109
ao->device = "/dev/audio";
111
ao->fn = open(ao->device,O_WRONLY);
115
error1("Can't open %s!",ao->device);
118
ioctl(ao->fn, AIOCGBLKSIZE, &outburst);
119
if(outburst > MAXOUTBURST)
120
outburst = MAXOUTBURST;
121
if(audio_reset_parameters(ai) < 0) {
129
static int get_formats_mint(audio_output_t *ao)
134
if(ioctl(ao->fn,AIOCGFMTS,&fmts) < 0)
138
ret |= MPG123_ENC_ULAW_8;
140
ret |= MPG123_ENC_SIGNED_16;
142
ret |= MPG123_ENC_UNSIGNED_8;
144
ret |= MPG123_ENC_SIGNED_8;
149
static int write_mint(audio_output_t *ao,unsigned char *buf,int len)
151
return write(ao->fn,buf,len);
154
static int close_mint(audio_output_t *ao)
160
static void flush_mint(audio_output_t *ao)
165
static int init_mint(audio_output_t* ao)
167
if (ao==NULL) return -1;
170
ao->open = open_mint;
171
ao->flush = flush_mint;
172
ao->write = write_mint;
173
ao->get_formats = get_formats_mint;
174
ao->close = close_mint;
185
Module information data structure
187
mpg123_module_t mpg123_output_module_info = {
188
/* api_version */ MPG123_MODULE_API_VERSION,
190
/* description */ "Audio output for MINT.",
191
/* revision */ "$Rev:$",
194
/* init_output */ init_mint,