From c1b4872b0910c9aa784d878dca771b21c4690048 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 22 May 2007 22:53:09 +0000 Subject: lots of work git-svn-id: file:///home/lennart/svn/public/libsydney/trunk@30 9ba3c220-e4d3-45a2-8aa3-73fcc9aff6ce --- common.c | 71 ++++++++++++++++++++++++++++------------------------------------ 1 file changed, 31 insertions(+), 40 deletions(-) (limited to 'common.c') diff --git a/common.c b/common.c index 5f3ff57..5a81d02 100644 --- a/common.c +++ b/common.c @@ -540,7 +540,11 @@ int sa_stream_get_state(sa_stream_t *s, sa_state_t *state) { sa_mutex_lock(s->mutex); sa_return_val_if_fail_mutex(s->mutex, state, SA_ERROR_INVALID); - ret = driver_get_state(s, state); + if (s->state == SA_STATE_INIT) { + *state = s->state; + ret = SA_SUCCESS; + } else + ret = driver_get_state(s, state); sa_mutex_unlock(s->mutex); return ret; @@ -895,79 +899,66 @@ int sa_stream_get_position(sa_stream_t *s, sa_position_t position, int64_t *pos) } int sa_stream_read(sa_stream_t *s, void *data, size_t nbytes) { - return sa_stream_pread(s, data, nbytes, 0, SA_SEEK_RELATIVE); -} - -int sa_stream_write(sa_stream_t *s, const void *data, size_t nbytes) { - return sa_stream_pwrite(s, data, nbytes, 0, SA_SEEK_RELATIVE); -} - -int sa_stream_read_ni(sa_stream_t *s, unsigned channel, void *data, size_t nbytes) { - return sa_stream_pread_ni(s, channel, data, nbytes, 0, SA_SEEK_RELATIVE); -} - -int sa_stream_write_ni(sa_stream_t *s, unsigned channel, const void *data, size_t nbytes) { - return sa_stream_pwrite_ni(s, channel, data, nbytes, 0, SA_SEEK_RELATIVE); -} - -int sa_stream_pread(sa_stream_t *s, void *data, size_t nbytes, int64_t offset, sa_seek_t whence) { int ret; - sa_return_val_if_fail(s, SA_ERROR_INVALID); sa_return_val_if_fail(data, SA_ERROR_INVALID); sa_return_val_if_fail(nbytes > 0, SA_ERROR_INVALID); - sa_return_val_if_fail(whence == SA_SEEK_RELATIVE || whence == SA_SEEK_ABSOLUTE || whence == SA_SEEK_RELATIVE_END, SA_ERROR_INVALID); sa_mutex_lock(s->mutex); sa_return_val_if_fail_mutex(s->mutex, !s->ni_enabled, SA_ERROR_STATE); sa_return_val_if_fail_mutex(s->mutex, s->codec || (nbytes % s->pcm_frame_size) == 0, SA_ERROR_INVALID); - sa_return_val_if_fail_mutex(s->mutex, s->codec || (offset % s->pcm_frame_size) == 0, SA_ERROR_INVALID); sa_return_val_if_fail_mutex(s->mutex, s->mode & SA_MODE_RDONLY, SA_ERROR_STATE); sa_return_val_if_fail_mutex(s->mutex, s->state == SA_STATE_RUNNING || s->state == SA_STATE_STOPPED, SA_ERROR_STATE); - ret = driver_pread(s, data, nbytes, offset, whence); + ret = driver_read(s, data, nbytes); sa_mutex_unlock(s->mutex); return ret; } -int sa_stream_pwrite(sa_stream_t *s, const void *data, size_t nbytes, int64_t offset, sa_seek_t whence) { +int sa_stream_read_ni(sa_stream_t *s, unsigned channel, void *data, size_t nbytes) { int ret; - + sa_return_val_if_fail(s, SA_ERROR_INVALID); sa_return_val_if_fail(data, SA_ERROR_INVALID); sa_return_val_if_fail(nbytes > 0, SA_ERROR_INVALID); - sa_return_val_if_fail(whence == SA_SEEK_RELATIVE || whence == SA_SEEK_ABSOLUTE || whence == SA_SEEK_RELATIVE_END, SA_ERROR_INVALID); sa_mutex_lock(s->mutex); - sa_return_val_if_fail_mutex(s->mutex, !s->ni_enabled, SA_ERROR_STATE); - sa_return_val_if_fail_mutex(s->mutex, s->codec || (nbytes % s->pcm_frame_size) == 0, SA_ERROR_INVALID); - sa_return_val_if_fail_mutex(s->mutex, s->codec || (offset % s->pcm_frame_size) == 0, SA_ERROR_INVALID); - sa_return_val_if_fail_mutex(s->mutex, s->mode & SA_MODE_WRONLY, SA_ERROR_STATE); + sa_return_val_if_fail_mutex(s->mutex, !s->codec, SA_ERROR_STATE); + sa_return_val_if_fail_mutex(s->mutex, channel < s->pcm_attrs.nchannels, SA_ERROR_INVALID); + sa_return_val_if_fail_mutex(s->mutex, s->ni_enabled, SA_ERROR_STATE); + sa_return_val_if_fail_mutex(s->mutex, (nbytes % s->pcm_sample_size) == 0, SA_ERROR_INVALID); + sa_return_val_if_fail_mutex(s->mutex, s->mode & SA_MODE_RDONLY, SA_ERROR_STATE); sa_return_val_if_fail_mutex(s->mutex, s->state == SA_STATE_RUNNING || s->state == SA_STATE_STOPPED, SA_ERROR_STATE); - ret = driver_pwrite(s, data, nbytes, offset, whence); - + ret = driver_read_ni(s, channel, data, nbytes); + sa_mutex_unlock(s->mutex); return ret; } -int sa_stream_pread_ni(sa_stream_t *s, unsigned channel, void *data, size_t nbytes, int64_t offset, sa_seek_t whence) { - int ret; +int sa_stream_write(sa_stream_t *s, const void *data, size_t nbytes) { + return sa_stream_pwrite(s, data, nbytes, 0, SA_SEEK_RELATIVE); +} +int sa_stream_write_ni(sa_stream_t *s, unsigned channel, const void *data, size_t nbytes) { + return sa_stream_pwrite_ni(s, channel, data, nbytes, 0, SA_SEEK_RELATIVE); +} + +int sa_stream_pwrite(sa_stream_t *s, const void *data, size_t nbytes, int64_t offset, sa_seek_t whence) { + int ret; + sa_return_val_if_fail(s, SA_ERROR_INVALID); sa_return_val_if_fail(data, SA_ERROR_INVALID); sa_return_val_if_fail(nbytes > 0, SA_ERROR_INVALID); sa_return_val_if_fail(whence == SA_SEEK_RELATIVE || whence == SA_SEEK_ABSOLUTE || whence == SA_SEEK_RELATIVE_END, SA_ERROR_INVALID); sa_mutex_lock(s->mutex); - sa_return_val_if_fail_mutex(s->mutex, !s->codec, SA_ERROR_STATE); - sa_return_val_if_fail_mutex(s->mutex, channel < s->pcm_attrs.nchannels, SA_ERROR_INVALID); - sa_return_val_if_fail_mutex(s->mutex, s->ni_enabled, SA_ERROR_STATE); - sa_return_val_if_fail_mutex(s->mutex, (nbytes % s->pcm_sample_size) == 0, SA_ERROR_INVALID); - sa_return_val_if_fail_mutex(s->mutex, (offset % s->pcm_sample_size) == 0, SA_ERROR_INVALID); - sa_return_val_if_fail_mutex(s->mutex, s->mode & SA_MODE_RDONLY, SA_ERROR_STATE); + sa_return_val_if_fail_mutex(s->mutex, !s->ni_enabled, SA_ERROR_STATE); + sa_return_val_if_fail_mutex(s->mutex, s->codec || (nbytes % s->pcm_frame_size) == 0, SA_ERROR_INVALID); + sa_return_val_if_fail_mutex(s->mutex, s->codec || (offset % s->pcm_frame_size) == 0, SA_ERROR_INVALID); + sa_return_val_if_fail_mutex(s->mutex, s->mode & SA_MODE_WRONLY, SA_ERROR_STATE); sa_return_val_if_fail_mutex(s->mutex, s->state == SA_STATE_RUNNING || s->state == SA_STATE_STOPPED, SA_ERROR_STATE); - ret = driver_pread_ni(s, channel, data, nbytes, offset, whence); - + ret = driver_pwrite(s, data, nbytes, offset, whence); + sa_mutex_unlock(s->mutex); return ret; } -- cgit