diff options
-rw-r--r-- | libasound.c | 44 | ||||
-rw-r--r-- | stubs.h | 5 |
2 files changed, 42 insertions, 7 deletions
diff --git a/libasound.c b/libasound.c index d1700a0..3d67f6b 100644 --- a/libasound.c +++ b/libasound.c @@ -157,7 +157,7 @@ snd_pcm_open(snd_pcm_t **pcm, const char *name, snd_pcm_stream_t stream, int mod if (!((*pcm)->hdl = device_open(*pcm, name, stream, mode))) return -1; - (*pcm)->name = name; + (*pcm)->name = (name ? name : "default"); return (sio_getcap((*pcm)->hdl, &(*pcm)->cap) && sio_getpar((*pcm)->hdl, &(*pcm)->hw.par) ? 0 : -1); } @@ -169,6 +169,12 @@ snd_pcm_close(snd_pcm_t *pcm) return 0; } +const char* +snd_pcm_name(snd_pcm_t *pcm) +{ + return pcm->name; +} + int snd_pcm_nonblock(snd_pcm_t *pcm, int nonblock) { @@ -190,6 +196,15 @@ snd_pcm_nonblock(snd_pcm_t *pcm, int nonblock) #endif } +snd_pcm_state_t +snd_pcm_state(snd_pcm_t *pcm) +{ + if (pcm->started) + return SND_PCM_STATE_RUNNING; + + return SND_PCM_STATE_OPEN; +} + snd_pcm_sframes_t snd_pcm_writei(snd_pcm_t *pcm, const void *buffer, snd_pcm_uframes_t size) { @@ -206,7 +221,15 @@ snd_pcm_sframes_t snd_pcm_avail_update(snd_pcm_t *pcm) { // FIXME: not correct, but fine since we force blocking for now - return snd_pcm_bytes_to_frames(pcm, pcm->hw.par.appbufsz); + return snd_pcm_bytes_to_frames(pcm, pcm->hw.par.bufsz); +} + +int +snd_pcm_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp) +{ + // FIXME: not correct, but fine since we force blocking for now + if (delayp) *delayp = 0; + return 0; } int @@ -748,4 +771,21 @@ snd_pcm_sw_params_current(snd_pcm_t *pcm, snd_pcm_sw_params_t *params) return 0; } +int +snd_pcm_set_params(snd_pcm_t *pcm, snd_pcm_format_t format, snd_pcm_access_t access, unsigned int channels, unsigned int rate, int soft_resample, unsigned int latency) +{ + snd_pcm_hw_params_t params; + return (!snd_pcm_hw_params_any(pcm, ¶ms) && !snd_pcm_hw_params_set_format(pcm, ¶ms, format) && + !snd_pcm_hw_params_set_access(pcm, ¶ms, access) && !snd_pcm_hw_params_set_channels(pcm, ¶ms, channels) && + !snd_pcm_hw_params_set_rate(pcm, ¶ms, rate, 0) && !snd_pcm_hw_params(pcm, ¶ms) ? 0 : -1); +} + +int +snd_pcm_get_params(snd_pcm_t *pcm, snd_pcm_uframes_t *buffer_size, snd_pcm_uframes_t *period_size) +{ + if (buffer_size) *buffer_size = pcm->hw.par.appbufsz; + if (period_size) *period_size = pcm->hw.par.round; + return 0; +} + #include "symversioning-hell.h" @@ -471,7 +471,6 @@ int snd_output_putc(snd_output_t *output, int c) { WARNX1("stub"); return 0; } int snd_output_flush(snd_output_t *output) { WARNX1("stub"); return 0; } int snd_pcm_open_lconf(snd_pcm_t **pcm, const char *name, snd_pcm_stream_t stream, int mode, snd_config_t *lconf) { WARNX1("stub"); return 0; } int snd_pcm_open_fallback(snd_pcm_t **pcm, snd_config_t *root, const char *name, const char *orig_name, snd_pcm_stream_t stream, int mode) { WARNX1("stub"); return 0; } -const char *snd_pcm_name(snd_pcm_t *pcm) { WARNX1("stub"); return NULL; } snd_pcm_type_t snd_pcm_type(snd_pcm_t *pcm) { WARNX1("stub"); return 0; } snd_pcm_stream_t snd_pcm_stream(snd_pcm_t *pcm) { WARNX1("stub"); return 0; } int snd_pcm_poll_descriptors_count(snd_pcm_t *pcm) { WARNX1("stub"); return 0; } @@ -484,9 +483,7 @@ int snd_pcm_hw_free(snd_pcm_t *pcm) { WARNX1("stub"); return 0; } int snd_pcm_sw_params(snd_pcm_t *pcm, snd_pcm_sw_params_t *params) { WARNX1("stub"); return 0; } int snd_pcm_reset(snd_pcm_t *pcm) { WARNX1("stub"); return 0; } int snd_pcm_status(snd_pcm_t *pcm, snd_pcm_status_t *status) { WARNX1("stub"); return 0; } -snd_pcm_state_t snd_pcm_state(snd_pcm_t *pcm) { WARNX1("stub"); return 0; } int snd_pcm_hwsync(snd_pcm_t *pcm) { WARNX1("stub"); return 0; } -int snd_pcm_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp) { WARNX1("stub"); return 0; } int snd_pcm_htimestamp(snd_pcm_t *pcm, snd_pcm_uframes_t *avail, snd_htimestamp_t *tstamp) { WARNX1("stub"); return 0; } snd_pcm_sframes_t snd_pcm_avail(snd_pcm_t *pcm) { WARNX1("stub"); return 0; } int snd_pcm_avail_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *availp, snd_pcm_sframes_t *delayp) { WARNX1("stub"); return 0; } @@ -511,8 +508,6 @@ int snd_pcm_chmap_print(const snd_pcm_chmap_t *map, size_t maxlen, char *buf) { unsigned int snd_pcm_chmap_from_string(const char *str) { WARNX1("stub"); return 0; } snd_pcm_chmap_t *snd_pcm_chmap_parse_string(const char *str) { WARNX1("stub"); return NULL; } int snd_pcm_recover(snd_pcm_t *pcm, int err, int silent) { WARNX1("stub"); return 0; } -int snd_pcm_set_params(snd_pcm_t *pcm, snd_pcm_format_t format, snd_pcm_access_t access, unsigned int channels, unsigned int rate, int soft_resample, unsigned int latency) { WARNX1("stub"); return 0; } -int snd_pcm_get_params(snd_pcm_t *pcm, snd_pcm_uframes_t *buffer_size, snd_pcm_uframes_t *period_size) { WARNX1("stub"); return 0; } size_t snd_pcm_info_sizeof(void) { WARNX1("stub"); return 0; } int snd_pcm_info_malloc(snd_pcm_info_t **ptr) { WARNX1("stub"); return 0; } void snd_pcm_info_free(snd_pcm_info_t *obj) { WARNX1("stub"); } |