summaryrefslogtreecommitdiff
path: root/plugins/oss
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-01-21 21:36:32 +0100
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-01-21 21:47:56 +0100
commit454f852f361477b0f365a9705574a700339497ac (patch)
tree24bf5f0a2239527c74d35fcf95b8c0dbfc284ada /plugins/oss
parentf89029d063c855b03adbcd20d09380fd42cb11c9 (diff)
parent4d12a12570876810d0376d31b280674b5c49054a (diff)
Merge branch 'master' into devel
Conflicts: Makefile.am configure.ac deadbeef.h main.c plugins/oss/Makefile.am plugins/oss/oss.c
Diffstat (limited to 'plugins/oss')
-rw-r--r--plugins/oss/Makefile.am2
-rw-r--r--plugins/oss/oss.c33
2 files changed, 27 insertions, 8 deletions
diff --git a/plugins/oss/Makefile.am b/plugins/oss/Makefile.am
index 810bd249..e2195996 100644
--- a/plugins/oss/Makefile.am
+++ b/plugins/oss/Makefile.am
@@ -1,6 +1,6 @@
ossdir = $(libdir)/$(PACKAGE)
pkglib_LTLIBRARIES = oss.la
-AM_CFLAGS = $(CFLAGS) $(OSS4_CFLAGS)
+AM_CFLAGS = $(CFLAGS) $(OSS_CFLAGS) -std=c99
oss_la_SOURCES = oss.c
oss_la_LDFLAGS = -module
diff --git a/plugins/oss/oss.c b/plugins/oss/oss.c
index 11dd52ee..64f857d3 100644
--- a/plugins/oss/oss.c
+++ b/plugins/oss/oss.c
@@ -15,6 +15,9 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#ifdef HAVE_CONFIG_H
+# include "../../config.h"
+#endif
#include <stdint.h>
#include <unistd.h>
#ifdef __linux__
@@ -22,16 +25,16 @@
#endif
#include <stdio.h>
#include <string.h>
+#if HAVE_SYS_SOUNDCARD_H
#include <sys/soundcard.h>
+#else
+#include <soundcard.h>
+#endif
#include <fcntl.h>
#include <sys/ioctl.h>
#include <stdlib.h>
#include "../../deadbeef.h"
-//#if OSS_VERSION<0x040000
-//#error oss4 plugin: at least oss v4.0 is required to build this plugin
-//#endif
-
#define trace(...) { fprintf(stderr, __VA_ARGS__); }
//#define trace(fmt,...)
@@ -45,6 +48,8 @@ static int state;
static int fd;
static uintptr_t mutex;
+#define BLOCKSIZE 4096
+
static void
oss_thread (void *context);
@@ -68,6 +73,18 @@ oss_init (void) {
return -1;
}
+#if OSS_VERSION>=0x040000
+/*
+ int cooked = 1;
+ ioctl (fd, SNDCTL_DSP_COOKEDMODE, &cooked);
+ trace ("oss: cooked_mode=%d\n", cooked);
+
+ int policy = 3;
+ ioctl (fd, SNDCTL_DSP_POLICY, &policy);
+ trace ("oss: policy=%d\n", policy);
+*/
+#endif
+
int fmt = AFMT_S16_NE;
if (ioctl (fd, SNDCTL_DSP_SETFMT, &fmt) == -1) {
trace ("oss: failed to set format\n");
@@ -157,7 +174,9 @@ oss_free (void) {
static int
oss_play (void) {
if (!oss_tid) {
- oss_init ();
+ if (oss_init () < 0) {
+ return -1;
+ }
}
state = OUTPUT_STATE_PLAYING;
return 0;
@@ -227,8 +246,8 @@ oss_thread (void *context) {
continue;
}
- char buf[1024];
- oss_callback (buf, 1024);
+ char buf[BLOCKSIZE];
+ oss_callback (buf, sizeof (buf));
deadbeef->mutex_lock (mutex);
int res = write (fd, buf, sizeof (buf));
deadbeef->mutex_unlock (mutex);