aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2012-03-31 17:34:10 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2012-03-31 17:34:10 +0000
commitbbc2ba59e6400a87ce9345521b271b7a8331605a (patch)
tree37d48cc47822d41b0f1a200dc1bf83df77eef009
parent6a16cb7d86d721986d1bc264b899eaafe53cd92f (diff)
downloadqmmp-bbc2ba59e6400a87ce9345521b271b7a8331605a.tar.gz
qmmp-bbc2ba59e6400a87ce9345521b271b7a8331605a.tar.bz2
qmmp-bbc2ba59e6400a87ce9345521b271b7a8331605a.zip
added freebsd patches, using oss4 by default, disable oss 3.x support by default
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@2697 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--CMakeLists.txt3
-rw-r--r--src/plugins/Output/CMakeLists.txt4
-rw-r--r--src/plugins/Output/oss/outputoss.cpp25
-rw-r--r--src/plugins/Output/oss4/CMakeLists.txt2
-rw-r--r--src/plugins/Output/oss4/outputoss4.cpp58
-rw-r--r--src/plugins/Output/oss4/outputoss4.h6
-rw-r--r--src/plugins/Output/oss4/outputoss4factory.cpp2
-rw-r--r--src/qmmp/output.cpp2
8 files changed, 33 insertions, 69 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9675a55c4..8490e6202 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,8 @@
cmake_minimum_required(VERSION 2.6.0)
+#freebsd include
+include_directories(/usr/local/include)
+
#extract version from qmmp.h
FILE(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/src/qmmp/qmmp.h"
QMMP_VERSION_DATA REGEX "^#define[ \t]+QMMP_VERSION_[A-Z]+[ \t]+[0-9]+.*$")
diff --git a/src/plugins/Output/CMakeLists.txt b/src/plugins/Output/CMakeLists.txt
index dad290460..f819335e5 100644
--- a/src/plugins/Output/CMakeLists.txt
+++ b/src/plugins/Output/CMakeLists.txt
@@ -1,7 +1,7 @@
SET(USE_ALSA TRUE CACHE BOOL "enable/disable alsa plugin")
SET(USE_JACK TRUE CACHE BOOL "enable/disable jack plugin")
-SET(USE_OSS TRUE CACHE BOOL "enable/disable oss plugin")
-SET(USE_OSS4 FALSE CACHE BOOL "enable/disable oss4 plugin")
+SET(USE_OSS FALSE CACHE BOOL "enable/disable oss plugin")
+SET(USE_OSS4 TRUE CACHE BOOL "enable/disable oss4 plugin")
SET(USE_PULSE TRUE CACHE BOOL "enable/disable pulse audio plugin")
SET(USE_NULL TRUE CACHE BOOL "enable/disable null output plugin")
SET(USE_WAVEOUT TRUE CACHE BOOL "enable/disable Win32 waveout plugin")
diff --git a/src/plugins/Output/oss/outputoss.cpp b/src/plugins/Output/oss/outputoss.cpp
index db2165353..f6b5e1e8d 100644
--- a/src/plugins/Output/oss/outputoss.cpp
+++ b/src/plugins/Output/oss/outputoss.cpp
@@ -48,6 +48,7 @@ OutputOSS::OutputOSS(QObject * parent) : Output(parent), do_select(true), m_audi
{
QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
m_audio_device = settings.value("OSS/device","/dev/dsp").toString();
+ do_select = false;
}
OutputOSS::~OutputOSS()
@@ -72,7 +73,7 @@ void OutputOSS::sync()
bool OutputOSS::initialize(quint32 freq, int chan, Qmmp::AudioFormat format)
{
- m_audio_fd = open(m_audio_device.toAscii(), O_WRONLY, 0);
+ m_audio_fd = open(m_audio_device.toAscii(), O_WRONLY);
if (m_audio_fd < 0)
{
@@ -80,19 +81,7 @@ bool OutputOSS::initialize(quint32 freq, int chan, Qmmp::AudioFormat format)
return false;
}
- int flags;
- if ((flags = fcntl(m_audio_fd, F_GETFL, 0)) > 0)
- {
- flags &= O_NDELAY;
- fcntl(m_audio_fd, F_SETFL, flags);
- }
- fd_set afd;
- FD_ZERO(&afd);
- FD_SET(m_audio_fd, &afd);
- struct timeval tv;
- tv.tv_sec = 0l;
- tv.tv_usec = 50000l;
- do_select = (select(m_audio_fd + 1, 0, &afd, 0, &tv) > 0);
+ ioctl(m_audio_fd, SNDCTL_DSP_RESET, 0);
int p;
switch (format)
@@ -112,7 +101,11 @@ bool OutputOSS::initialize(quint32 freq, int chan, Qmmp::AudioFormat format)
return false;
}
- ioctl(m_audio_fd, SNDCTL_DSP_SYNC, 0);
+ //ioctl(m_audio_fd, SNDCTL_DSP_SYNC, 0);
+
+ if (ioctl(m_audio_fd, SNDCTL_DSP_SETFMT, &p) == -1)
+ qWarning("OutputOSS: ioctl SNDCTL_DSP_SETFMT failed: %s",strerror(errno));
+
if(ioctl(m_audio_fd, SNDCTL_DSP_CHANNELS, &chan) == -1)
qWarning("OutputOSS: ioctl SNDCTL_DSP_CHANNELS failed: %s", strerror(errno));
@@ -125,8 +118,6 @@ bool OutputOSS::initialize(quint32 freq, int chan, Qmmp::AudioFormat format)
chan = param + 1;
}
- if (ioctl(m_audio_fd, SNDCTL_DSP_SETFMT, &p) == -1)
- qWarning("OutputOSS: ioctl SNDCTL_DSP_SETFMT failed: %s",strerror(errno));
if (ioctl(m_audio_fd, SNDCTL_DSP_SPEED, &freq) < 0)
qWarning("OutputOSS: ioctl SNDCTL_DSP_SPEED failed: %s", strerror(errno));
diff --git a/src/plugins/Output/oss4/CMakeLists.txt b/src/plugins/Output/oss4/CMakeLists.txt
index bcedcaada..20b7524fb 100644
--- a/src/plugins/Output/oss4/CMakeLists.txt
+++ b/src/plugins/Output/oss4/CMakeLists.txt
@@ -44,7 +44,7 @@ CHECK_CXX_SOURCE_COMPILES("
#include <soundcard.h>
#endif
-#if OSS_VERSION < 0x040000
+#ifndef SNDCTL_DSP_COOKEDMODE
#error \\\"oss test failed\\\"
#endif
diff --git a/src/plugins/Output/oss4/outputoss4.cpp b/src/plugins/Output/oss4/outputoss4.cpp
index 6d3bad527..84cd6c17b 100644
--- a/src/plugins/Output/oss4/outputoss4.cpp
+++ b/src/plugins/Output/oss4/outputoss4.cpp
@@ -49,7 +49,6 @@ VolumeOSS4 *OutputOSS4::m_vc = 0;
OutputOSS4::OutputOSS4(QObject *parent) : Output(parent)
{
- m_do_select = true;
m_audio_fd = -1;
QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
m_audio_device = settings.value("OSS4/device", DEFAULT_DEV).toString();
@@ -89,7 +88,7 @@ void OutputOSS4::sync()
bool OutputOSS4::initialize(quint32 freq, int chan, Qmmp::AudioFormat format)
{
- m_audio_fd = open(m_audio_device.toAscii(), O_WRONLY, 0);
+ m_audio_fd = open(m_audio_device.toAscii(), O_WRONLY);
if (m_audio_fd < 0)
{
@@ -98,19 +97,8 @@ bool OutputOSS4::initialize(quint32 freq, int chan, Qmmp::AudioFormat format)
return false;
}
- int flags;
- if ((flags = fcntl(m_audio_fd, F_GETFL, 0)) > 0)
- {
- flags &= O_NDELAY;
- fcntl(m_audio_fd, F_SETFL, flags);
- }
- fd_set afd;
- FD_ZERO(&afd);
- FD_SET(m_audio_fd, &afd);
- struct timeval tv;
- tv.tv_sec = 0l;
- tv.tv_usec = 50000l;
- m_do_select = (select(m_audio_fd + 1, 0, &afd, 0, &tv) > 0);
+ ioctl(m_audio_fd, SNDCTL_DSP_RESET, 0);
+
int p;
switch (format)
{
@@ -130,22 +118,21 @@ bool OutputOSS4::initialize(quint32 freq, int chan, Qmmp::AudioFormat format)
qWarning("OutputOSS4: unsupported audio format");
return false;
}
- ioctl(m_audio_fd, SNDCTL_DSP_SYNC, 0);
-
- int enabled = 1;
- if(ioctl(m_audio_fd, SNDCTL_DSP_COOKEDMODE, &enabled) == -1)
- qWarning("OutputOSS4: ioctl SNDCTL_DSP_COOKEDMODE: %s", strerror(errno));
+
+ if (ioctl(m_audio_fd, SNDCTL_DSP_SETFMT, &p) == -1)
+ qWarning("OutputOSS4: ioctl SNDCTL_DSP_SETFMT failed: %s",strerror(errno));
if(ioctl(m_audio_fd, SNDCTL_DSP_CHANNELS, &chan) == -1)
qWarning("OutputOSS4: ioctl SNDCTL_DSP_CHANNELS failed: %s", strerror(errno));
- if (ioctl(m_audio_fd, SNDCTL_DSP_SETFMT, &p) == -1)
- qWarning("OutputOSS4: ioctl SNDCTL_DSP_SETFMT failed: %s",strerror(errno));
-
if (ioctl(m_audio_fd, SNDCTL_DSP_SPEED, &freq) < 0)
qWarning("OutputOSS4: ioctl SNDCTL_DSP_SPEED failed: %s", strerror(errno));
- ioctl(m_audio_fd, SNDCTL_DSP_HALT, 0);
+ int enabled = 1;
+ if(ioctl(m_audio_fd, SNDCTL_DSP_COOKEDMODE, &enabled) == -1)
+ qWarning("OutputOSS4: ioctl SNDCTL_DSP_COOKEDMODE: %s", strerror(errno));
+
+ ioctl(m_audio_fd, SNDCTL_DSP_RESET, 0);
configure(freq, chan, format);
@@ -161,23 +148,7 @@ qint64 OutputOSS4::latency()
qint64 OutputOSS4::writeAudio(unsigned char *data, qint64 maxSize)
{
- fd_set afd;
- struct timeval tv;
- qint64 m = -1, l;
- FD_ZERO(&afd);
- FD_SET(m_audio_fd, &afd);
- // nice long poll timeout
- tv.tv_sec = 5l;
- tv.tv_usec = 0l;
- if ((!m_do_select || (select(m_audio_fd + 1, 0, &afd, 0, &tv) > 0 &&
- FD_ISSET(m_audio_fd, &afd))))
- {
- l = qMin(int(2048), int(maxSize));
- if (l > 0)
- {
- m = write(m_audio_fd, data, l);
- }
- }
+ qint64 m = write(m_audio_fd, data, maxSize);
post();
return m;
}
@@ -199,7 +170,6 @@ VolumeOSS4::VolumeOSS4()
QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
m_volume = settings.value("OSS4/volume", 0x3232).toInt();
OutputOSS4::m_vc = this;
- restore();
}
VolumeOSS4::~VolumeOSS4()
@@ -242,5 +212,7 @@ int VolumeOSS4::volume(int channel)
void VolumeOSS4::restore()
{
- setVolume((m_volume & 0x00FF), (m_volume & 0xFF00) >> 8);
+ int v = m_volume;
+ setVolume(Volume::LEFT_CHANNEL, (v & 0x00FF));
+ setVolume(Volume::RIGHT_CHANNEL, (v & 0xFF00) >> 8);
}
diff --git a/src/plugins/Output/oss4/outputoss4.h b/src/plugins/Output/oss4/outputoss4.h
index 06d4b13e3..3ac8a259d 100644
--- a/src/plugins/Output/oss4/outputoss4.h
+++ b/src/plugins/Output/oss4/outputoss4.h
@@ -36,7 +36,7 @@ class OutputOSS4 : public Output
{
Q_OBJECT
public:
- OutputOSS4();
+ OutputOSS4(QObject *parent = 0);
virtual ~OutputOSS4();
bool initialize(quint32, int, Qmmp::AudioFormat format);
@@ -56,7 +56,6 @@ private:
void post();
void sync();
QString m_audio_device;
- bool m_do_select;
int m_audio_fd;
static OutputOSS4 *m_instance;
@@ -64,9 +63,8 @@ private:
class VolumeOSS4 : public Volume
{
- Q_OBJECT
public:
- VolumeOSS4(QObject *parent);
+ VolumeOSS4();
~VolumeOSS4();
void setVolume(int channel, int value);
diff --git a/src/plugins/Output/oss4/outputoss4factory.cpp b/src/plugins/Output/oss4/outputoss4factory.cpp
index aeac150dd..d66d53c78 100644
--- a/src/plugins/Output/oss4/outputoss4factory.cpp
+++ b/src/plugins/Output/oss4/outputoss4factory.cpp
@@ -40,7 +40,7 @@ const OutputProperties OutputOSS4Factory::properties() const
return properties;
}
-Volume *OutputOSS4Factory::createVolumeControl()
+Volume *OutputOSS4Factory::createVolume()
{
return new VolumeOSS4;
}
diff --git a/src/qmmp/output.cpp b/src/qmmp/output.cpp
index 4370f9ee3..4e8d7041d 100644
--- a/src/qmmp/output.cpp
+++ b/src/qmmp/output.cpp
@@ -479,7 +479,7 @@ OutputFactory *Output::currentFactory()
#ifdef Q_OS_LINUX
QString name = settings.value("Output/current_plugin", "alsa").toString();
#else
- QString name = settings.value("Output/current_plugin", "oss").toString();
+ QString name = settings.value("Output/current_plugin", "oss4").toString();
#endif
foreach(OutputFactory *factory, *m_factories)
{