From 17e086aaa4960e3b4d779ad02d816e9452c0d458 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sun, 13 May 2007 01:24:01 +0000 Subject: add missing accessors git-svn-id: file:///home/lennart/svn/public/libsydney/trunk@8 9ba3c220-e4d3-45a2-8aa3-73fcc9aff6ce --- common.c | 193 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 184 insertions(+), 9 deletions(-) (limited to 'common.c') diff --git a/common.c b/common.c index 7219ae5..89779bb 100644 --- a/common.c +++ b/common.c @@ -137,6 +137,7 @@ int sa_stream_set_write_lower_watermark(sa_stream_t *s, size_t size) { sa_return_val_if_fail(s, SA_ERROR_INVALID); sa_return_val_if_fail(size > 0, SA_ERROR_INVALID); sa_return_val_if_fail(s->state == SA_STATE_INIT, SA_ERROR_STATE); + sa_return_val_if_fail(s->mode & SA_MODE_WRONLY, SA_ERROR_STATE); s->write_lower_watermark = size; return SA_SUCCESS; @@ -147,6 +148,7 @@ int sa_stream_set_read_lower_watermark(sa_stream_t *s, size_t size) { sa_return_val_if_fail(s, SA_ERROR_INVALID); sa_return_val_if_fail(size > 0, SA_ERROR_INVALID); sa_return_val_if_fail(s->state == SA_STATE_INIT, SA_ERROR_STATE); + sa_return_val_if_fail(s->mode & SA_MODE_RDONLY, SA_ERROR_STATE); s->read_lower_watermark = size; return SA_SUCCESS; @@ -157,6 +159,7 @@ int sa_stream_set_write_upper_watermark(sa_stream_t *s, size_t size) { sa_return_val_if_fail(s, SA_ERROR_INVALID); sa_return_val_if_fail(size > 0, SA_ERROR_INVALID); sa_return_val_if_fail(s->state == SA_STATE_INIT, SA_ERROR_STATE); + sa_return_val_if_fail(s->mode & SA_MODE_WRONLY, SA_ERROR_STATE); s->write_upper_watermark = size; return SA_SUCCESS; @@ -167,6 +170,7 @@ int sa_stream_set_read_upper_watermark(sa_stream_t *s, size_t size) { sa_return_val_if_fail(s, SA_ERROR_INVALID); sa_return_val_if_fail(size > 0, SA_ERROR_INVALID); sa_return_val_if_fail(s->state == SA_STATE_INIT, SA_ERROR_STATE); + sa_return_val_if_fail(s->mode & SA_MODE_RDONLY, SA_ERROR_STATE); s->read_upper_watermark = size; return SA_SUCCESS; @@ -183,7 +187,7 @@ int sa_stream_set_channel_map(sa_stream_t *s, const sa_channel_t *map) { sa_return_val_if_fail(!s->codec, SA_ERROR_STATE); for (c = map, n = s->pcm_attrs.nchannels; n > 0; c++, n--) - if (*c >= SA_CHANNEL_MAX) + if (*c >= _SA_CHANNEL_MAX) return SA_ERROR_INVALID; if (!(m = sa_memdup(map, sizeof(sa_channel_t) * s->pcm_attrs.nchannels))) @@ -335,7 +339,7 @@ int sa_stream_change_user_data(sa_stream_t *s, void *value) { return SA_SUCCESS; } -int sa_stream_adjust_rate(sa_stream_t *s, sa_adjust_t direction) { +int sa_stream_set_adjust_rate(sa_stream_t *s, sa_adjust_t direction) { sa_return_val_if_fail(s, SA_ERROR_INVALID); sa_return_val_if_fail(!s->codec, SA_ERROR_STATE); sa_return_val_if_fail(s->state == SA_STATE_INIT, SA_ERROR_STATE); @@ -344,7 +348,7 @@ int sa_stream_adjust_rate(sa_stream_t *s, sa_adjust_t direction) { return SA_SUCCESS; } -int sa_stream_adjust_nchannels(sa_stream_t *s, sa_adjust_t direction) { +int sa_stream_set_adjust_nchannels(sa_stream_t *s, sa_adjust_t direction) { sa_return_val_if_fail(s, SA_ERROR_INVALID); sa_return_val_if_fail(!s->codec, SA_ERROR_STATE); sa_return_val_if_fail(s->state == SA_STATE_INIT, SA_ERROR_STATE); @@ -353,7 +357,7 @@ int sa_stream_adjust_nchannels(sa_stream_t *s, sa_adjust_t direction) { return SA_SUCCESS; } -int sa_stream_adjust_pcm_format(sa_stream_t *s, sa_adjust_t direction) { +int sa_stream_set_adjust_pcm_format(sa_stream_t *s, sa_adjust_t direction) { sa_return_val_if_fail(s, SA_ERROR_INVALID); sa_return_val_if_fail(!s->codec, SA_ERROR_STATE); sa_return_val_if_fail(s->state == SA_STATE_INIT, SA_ERROR_STATE); @@ -396,6 +400,157 @@ int sa_stream_get_pcm_format(sa_stream_t *s, sa_pcm_format_t *pcm_format) { return SA_SUCCESS; } +int sa_stream_get_mode(sa_stream_t *s, sa_mode_t *access_mode) { + sa_return_val_if_fail(s, SA_ERROR_INVALID); + sa_return_val_if_fail(access_mode, SA_ERROR_INVALID); + + *access_mode = s->mode; + return SA_SUCCESS; +} + +int sa_stream_get_codec(sa_stream_t *s, const char **codec) { + sa_return_val_if_fail(s, SA_ERROR_INVALID); + sa_return_val_if_fail(codec, SA_ERROR_INVALID); + sa_return_val_if_fail(s->codec, SA_ERROR_STATE); + + *codec = s->codec; + return SA_SUCCESS; +} + +int sa_stream_get_write_lower_watermark(sa_stream_t *s, size_t *size) { + sa_return_val_if_fail(s, SA_ERROR_INVALID); + sa_return_val_if_fail(size, SA_ERROR_INVALID); + sa_return_val_if_fail(s->mode & SA_MODE_WRONLY, SA_ERROR_STATE); + + *size = s->write_lower_watermark; + return SA_SUCCESS; +} + +int sa_stream_get_read_lower_watermark(sa_stream_t *s, size_t *size) { + sa_return_val_if_fail(s, SA_ERROR_INVALID); + sa_return_val_if_fail(size, SA_ERROR_INVALID); + sa_return_val_if_fail(s->mode & SA_MODE_RDONLY, SA_ERROR_STATE); + + *size = s->read_lower_watermark; + return SA_SUCCESS; +} + +int sa_stream_get_write_upper_watermark(sa_stream_t *s, size_t *size) { + sa_return_val_if_fail(s, SA_ERROR_INVALID); + sa_return_val_if_fail(size, SA_ERROR_INVALID); + sa_return_val_if_fail(s->mode & SA_MODE_WRONLY, SA_ERROR_STATE); + + *size = s->write_upper_watermark; + return SA_SUCCESS; +} + +int sa_stream_get_read_upper_watermark(sa_stream_t *s, size_t *size) { + sa_return_val_if_fail(s, SA_ERROR_INVALID); + sa_return_val_if_fail(size, SA_ERROR_INVALID); + sa_return_val_if_fail(s->mode & SA_MODE_RDONLY, SA_ERROR_STATE); + + *size = s->read_upper_watermark; + return SA_SUCCESS; +} + +int sa_stream_get_channel_map(sa_stream_t *s, const sa_channel_t *map[]) { + sa_return_val_if_fail(s, SA_ERROR_INVALID); + sa_return_val_if_fail(map, SA_ERROR_INVALID); + sa_return_val_if_fail(!s->codec, SA_ERROR_STATE); + + *map = s->pcm_attrs.channel_map; + return SA_SUCCESS; +} + +int sa_stream_get_xrun_mode(sa_stream_t *s, sa_xrun_mode_t *mode) { + sa_return_val_if_fail(s, SA_ERROR_INVALID); + sa_return_val_if_fail(mode, SA_ERROR_INVALID); + + *mode = s->xrun_mode; + return SA_SUCCESS; +} + +int sa_stream_get_ni(sa_stream_t *s, int *enabled) { + sa_return_val_if_fail(s, SA_ERROR_INVALID); + sa_return_val_if_fail(enabled, SA_ERROR_INVALID); + + *enabled = s->ni_enabled; + return SA_SUCCESS; +} + +int sa_stream_get_dynamic_rate(sa_stream_t *s, int *enabled) { + sa_return_val_if_fail(s, SA_ERROR_INVALID); + sa_return_val_if_fail(enabled, SA_ERROR_INVALID); + + *enabled = s->ni_enabled; + return SA_SUCCESS; +} + +int sa_stream_get_driver(sa_stream_t *s, const char **driver) { + sa_return_val_if_fail(s, SA_ERROR_INVALID); + sa_return_val_if_fail(driver, SA_ERROR_INVALID); + sa_return_val_if_fail(s->driver, SA_ERROR_STATE); + + *driver = s->driver; + return SA_SUCCESS; +} + +int sa_stream_get_device(sa_stream_t *s, const char **device_name) { + sa_return_val_if_fail(s, SA_ERROR_INVALID); + sa_return_val_if_fail(device_name, SA_ERROR_INVALID); + sa_return_val_if_fail(s->device, SA_ERROR_STATE); + + *device_name = s->device; + return SA_SUCCESS; +} + +int sa_stream_get_input_volume(sa_stream_t *s, const int *vol[]) { + sa_return_val_if_fail(s, SA_ERROR_INVALID); + sa_return_val_if_fail(vol, SA_ERROR_INVALID); + sa_return_val_if_fail(s->mode & SA_MODE_RDONLY, SA_ERROR_STATE); + sa_return_val_if_fail(s->input_volume, SA_ERROR_STATE); + + *vol = s->input_volume; + return SA_SUCCESS; +} + +int sa_stream_get_output_volume(sa_stream_t *s, const int *vol[]) { + sa_return_val_if_fail(s, SA_ERROR_INVALID); + sa_return_val_if_fail(vol, SA_ERROR_INVALID); + sa_return_val_if_fail(s->mode & SA_MODE_WRONLY, SA_ERROR_STATE); + sa_return_val_if_fail(s->output_volume, SA_ERROR_STATE); + + *vol = s->output_volume; + return SA_SUCCESS; +} + +int sa_stream_get_adjust_rate(sa_stream_t *s, sa_adjust_t *direction) { + sa_return_val_if_fail(s, SA_ERROR_INVALID); + sa_return_val_if_fail(direction, SA_ERROR_INVALID); + sa_return_val_if_fail(!s->codec, SA_ERROR_STATE); + + *direction = s->adjust_rate; + return SA_SUCCESS; +} + +int sa_stream_get_adjust_nchannels(sa_stream_t *s, sa_adjust_t *direction) { + sa_return_val_if_fail(s, SA_ERROR_INVALID); + sa_return_val_if_fail(direction, SA_ERROR_INVALID); + sa_return_val_if_fail(!s->codec, SA_ERROR_STATE); + + *direction = s->adjust_nchannels; + return SA_SUCCESS; +} + +int sa_stream_get_adjust_pcm_format(sa_stream_t *s, sa_adjust_t *direction) { + sa_return_val_if_fail(s, SA_ERROR_INVALID); + sa_return_val_if_fail(direction, SA_ERROR_INVALID); + sa_return_val_if_fail(!s->codec, SA_ERROR_STATE); + + *direction = s->adjust_pcm_format; + return SA_SUCCESS; +} + int sa_stream_get_user_data(sa_stream_t *s, void **value) { sa_return_val_if_fail(s, SA_ERROR_INVALID); sa_return_val_if_fail(value, SA_ERROR_INVALID); @@ -425,7 +580,7 @@ int sa_stream_get_event_notify(sa_stream_t *s, sa_notify_t *notify) { int sa_stream_get_position(sa_stream_t *s, sa_position_t position, int64_t *pos) { sa_return_val_if_fail(s, SA_ERROR_INVALID); sa_return_val_if_fail(pos, SA_ERROR_INVALID); - sa_return_val_if_fail(position < SA_POSITION_MAX, SA_ERROR_INVALID); + sa_return_val_if_fail(position < _SA_POSITION_MAX, SA_ERROR_INVALID); sa_return_val_if_fail(s->state == SA_STATE_RUNNING || s->state == SA_STATE_STOPPED, SA_ERROR_STATE); return driver_get_position(s, position, pos); @@ -693,9 +848,28 @@ int sa_stream_change_meta_data(sa_stream_t *s, const char *name, const void *dat return ret; } +int sa_stream_get_meta_data(sa_stream_t *s, const char *name, const void **data, size_t *size) { + const struct meta_name *m; + + sa_return_val_if_fail(s, SA_ERROR_INVALID); + sa_return_val_if_fail(name, SA_ERROR_INVALID); + sa_return_val_if_fail(data, SA_ERROR_INVALID); + sa_return_val_if_fail(size, SA_ERROR_INVALID); + + if (!(m = lookup_meta_name(name, strlen(name)))) + return SA_ERROR_NO_META; + + if (!s->meta_data[m->idx]) + return SA_ERROR_NO_DATA; + + *data = s->meta_data[m->idx]; + *size = s->meta_data_size[m->idx]; + + return SA_SUCCESS; +} const char *sa_strerror(int code) { - const char * const error_table[-SA_ERROR_MAX] = { + const char * const error_table[-_SA_ERROR_MAX] = { [-SA_SUCCESS] = "Success", [-SA_ERROR_NOT_SUPPORTED] = "Operation not supported", [-SA_ERROR_INVALID] = "Invalid argument", @@ -707,11 +881,12 @@ const char *sa_strerror(int code) { [-SA_ERROR_NO_PCM_FORMAT] = "No such PCM format", [-SA_ERROR_SYSTEM] = "System error", [-SA_ERROR_NO_INIT] = "Not initialized", - [-SA_ERROR_NO_META] ="No such meta name" + [-SA_ERROR_NO_META] = "No such meta name", + [-SA_ERROR_NO_DATA] = "No such data" }; - sa_assert(code <= 0); - sa_assert(code > SA_ERROR_MAX); + sa_return_val_if_fail(code <= 0, NULL); + sa_return_val_if_fail(code > _SA_ERROR_MAX, NULL); return error_table[-code]; } -- cgit