summaryrefslogtreecommitdiff
path: root/plugins/oss
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2011-01-10 20:31:54 +0100
committerGravatar waker <wakeroid@gmail.com>2011-01-10 21:02:40 +0100
commitbad68f332469178ffb81a0dd2ac74ae62301af72 (patch)
treec6b2d0387a145511d12198e9035368cb8b178f3b /plugins/oss
parent822c99debf259c6648654143abc9d772ea447f73 (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.c51
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 ();