diff options
author | Christian Gmeiner <christian.gmeiner@gmail.com> | 2009-02-25 13:09:36 +0100 |
---|---|---|
committer | Christian Gmeiner <christian.gmeiner@gmail.com> | 2009-02-25 13:09:36 +0100 |
commit | da29390ac2d8593434a94f08896ff776e3e9392a (patch) | |
tree | 95bdac749d2dbdb9ee6197dbae4d13739beaef8f /dxr3audio-oss.c | |
parent | 5344138582d635e9bb24a74c6529bd081430b521 (diff) | |
download | vdr-plugin-dxr3-da29390ac2d8593434a94f08896ff776e3e9392a.tar.gz vdr-plugin-dxr3-da29390ac2d8593434a94f08896ff776e3e9392a.tar.bz2 |
improve audio device handling
- keep track if sound device is open
- use pass-by-reference-to-const instead of pass-by-value (no copying needed)
Diffstat (limited to 'dxr3audio-oss.c')
-rw-r--r-- | dxr3audio-oss.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/dxr3audio-oss.c b/dxr3audio-oss.c index 94b3e21..16c7adc 100644 --- a/dxr3audio-oss.c +++ b/dxr3audio-oss.c @@ -26,13 +26,11 @@ static const char *DEV_DXR3_OSS = "_ma"; -cAudioOss::~cAudioOss() -{ - close(fd); -} - void cAudioOss::openDevice() { + if (open) + return; + fd = cDxr3Interface::Dxr3Open(DEV_DXR3_OSS, O_RDWR | O_NONBLOCK); if (!fd) { @@ -47,14 +45,21 @@ void cAudioOss::openDevice() dsyslog("[dxr3-audio-oss] audio mode: analog"); setAudioMode(Analog); } + + open = true; } void cAudioOss::releaseDevice() { + if (!open) + return; + close(fd); + + open = false; } -void cAudioOss::setup(SampleContext ctx) +void cAudioOss::setup(const SampleContext& ctx) { // set sample rate if (curContext.samplerate != ctx.samplerate) { @@ -82,7 +87,7 @@ void cAudioOss::write(uchar* data, size_t size) void cAudioOss::setAudioMode(AudioMode mode) { - uint32_t ioval; + uint32_t ioval = 0; switch (mode) { case Analog: |