version 1.58, 2019/08/29 07:38:15 |
version 1.59, 2019/09/19 05:02:27 |
|
|
struct dev *dev_new(char *, struct aparams *, unsigned int, unsigned int, |
struct dev *dev_new(char *, struct aparams *, unsigned int, unsigned int, |
unsigned int, unsigned int, unsigned int, unsigned int); |
unsigned int, unsigned int, unsigned int, unsigned int); |
void dev_adjpar(struct dev *, int, int, int); |
void dev_adjpar(struct dev *, int, int, int); |
int dev_open_do(struct dev *); |
int dev_allocbufs(struct dev *); |
int dev_open(struct dev *); |
int dev_open(struct dev *); |
void dev_exitall(struct dev *); |
void dev_exitall(struct dev *); |
void dev_close_do(struct dev *); |
void dev_freebufs(struct dev *); |
void dev_close(struct dev *); |
void dev_close(struct dev *); |
int dev_ref(struct dev *); |
int dev_ref(struct dev *); |
void dev_unref(struct dev *); |
void dev_unref(struct dev *); |
|
|
* monitor, midi control, and any necessary conversions. |
* monitor, midi control, and any necessary conversions. |
*/ |
*/ |
int |
int |
dev_open_do(struct dev *d) |
dev_allocbufs(struct dev *d) |
{ |
{ |
if (!dev_sio_open(d)) { |
|
if (log_level >= 1) { |
|
dev_log(d); |
|
log_puts(": failed to open audio device\n"); |
|
} |
|
return 0; |
|
} |
|
if (d->mode & MODE_REC) { |
if (d->mode & MODE_REC) { |
/* |
/* |
* Create device <-> demuxer buffer |
* Create device <-> demuxer buffer |
|
|
} else |
} else |
d->encbuf = NULL; |
d->encbuf = NULL; |
} |
} |
d->pstate = DEV_INIT; |
|
if (log_level >= 2) { |
if (log_level >= 2) { |
dev_log(d); |
dev_log(d); |
log_puts(": "); |
log_puts(": "); |
|
|
d->pchan = 2; |
d->pchan = 2; |
if (d->rchan == 0) |
if (d->rchan == 0) |
d->rchan = 2; |
d->rchan = 2; |
if (!dev_open_do(d)) |
if (!dev_sio_open(d)) { |
|
if (log_level >= 1) { |
|
dev_log(d); |
|
log_puts(": failed to open audio device\n"); |
|
} |
return 0; |
return 0; |
|
} |
|
if (!dev_allocbufs(d)) |
|
return 0; |
|
d->pstate = DEV_INIT; |
return 1; |
return 1; |
} |
} |
|
|
|
|
* ensure buffers are drained |
* ensure buffers are drained |
*/ |
*/ |
void |
void |
dev_close_do(struct dev *d) |
dev_freebufs(struct dev *d) |
{ |
{ |
#ifdef DEBUG |
#ifdef DEBUG |
if (log_level >= 3) { |
if (log_level >= 3) { |
|
|
log_puts(": closing\n"); |
log_puts(": closing\n"); |
} |
} |
#endif |
#endif |
d->pstate = DEV_CFG; |
|
dev_sio_close(d); |
|
if (d->mode & MODE_PLAY) { |
if (d->mode & MODE_PLAY) { |
if (d->encbuf != NULL) |
if (d->encbuf != NULL) |
xfree(d->encbuf); |
xfree(d->encbuf); |
|
|
dev_close(struct dev *d) |
dev_close(struct dev *d) |
{ |
{ |
dev_exitall(d); |
dev_exitall(d); |
dev_close_do(d); |
d->pstate = DEV_CFG; |
|
dev_sio_close(d); |
|
dev_freebufs(d); |
} |
} |
|
|
int |
int |