diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2012-03-31 17:34:10 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2012-03-31 17:34:10 +0000 |
| commit | bbc2ba59e6400a87ce9345521b271b7a8331605a (patch) | |
| tree | 37d48cc47822d41b0f1a200dc1bf83df77eef009 | |
| parent | 6a16cb7d86d721986d1bc264b899eaafe53cd92f (diff) | |
| download | qmmp-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.txt | 3 | ||||
| -rw-r--r-- | src/plugins/Output/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | src/plugins/Output/oss/outputoss.cpp | 25 | ||||
| -rw-r--r-- | src/plugins/Output/oss4/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/plugins/Output/oss4/outputoss4.cpp | 58 | ||||
| -rw-r--r-- | src/plugins/Output/oss4/outputoss4.h | 6 | ||||
| -rw-r--r-- | src/plugins/Output/oss4/outputoss4factory.cpp | 2 | ||||
| -rw-r--r-- | src/qmmp/output.cpp | 2 |
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) { |
