diff options
author | 2011-01-10 20:31:54 +0100 | |
---|---|---|
committer | 2011-01-10 21:02:40 +0100 | |
commit | bad68f332469178ffb81a0dd2ac74ae62301af72 (patch) | |
tree | c6b2d0387a145511d12198e9035368cb8b178f3b /plugins/oss | |
parent | 822c99debf259c6648654143abc9d772ea447f73 (diff) |
fixed resume in paused state;
changed output plugin setformat method to return error code
changed setformat to restore state before the call
Diffstat (limited to 'plugins/oss')
-rw-r--r-- | plugins/oss/oss.c | 51 |
1 files changed, 35 insertions, 16 deletions
diff --git a/plugins/oss/oss.c b/plugins/oss/oss.c index ccc0d32c..d9e99f96 100644 --- a/plugins/oss/oss.c +++ b/plugins/oss/oss.c @@ -147,22 +147,6 @@ oss_init (void) { return 0; } -static void -oss_setformat (ddb_waveformat_t *fmt) { - trace ("oss_setformat\n"); - if (!fd) { - memcpy (&plugin.fmt, fmt, sizeof (ddb_waveformat_t)); - } - if (!memcmp (fmt, &plugin.fmt, sizeof (ddb_waveformat_t))) { - return; - } - deadbeef->mutex_lock (mutex); - - oss_set_hwparams (fmt); - - deadbeef->mutex_unlock (mutex); -} - static int oss_free (void) { trace ("oss_free\n"); @@ -215,6 +199,41 @@ oss_pause (void) { return 0; } + +static int +oss_setformat (ddb_waveformat_t *fmt) { + trace ("oss_setformat\n"); + if (!fd) { + memcpy (&plugin.fmt, fmt, sizeof (ddb_waveformat_t)); + } + if (!memcmp (fmt, &plugin.fmt, sizeof (ddb_waveformat_t))) { + return 0; + } + deadbeef->mutex_lock (mutex); + + if (0 != oss_set_hwparams (fmt)) { + return -1; + } + + deadbeef->mutex_unlock (mutex); + + switch (state) { + case OUTPUT_STATE_STOPPED: + return oss_stop (); + case OUTPUT_STATE_PLAYING: + return oss_play (); + case OUTPUT_STATE_PAUSED: + if (0 != oss_play ()) { + return -1; + } + if (0 != oss_pause ()) { + return -1; + } + break; + } + return 0; +} + static int oss_unpause (void) { oss_play (); |