summaryrefslogtreecommitdiff
path: root/dxr3audio-oss.c
diff options
context:
space:
mode:
authorChristian Gmeiner <christian.gmeiner@gmail.com>2009-02-25 13:09:36 +0100
committerChristian Gmeiner <christian.gmeiner@gmail.com>2009-02-25 13:09:36 +0100
commitda29390ac2d8593434a94f08896ff776e3e9392a (patch)
tree95bdac749d2dbdb9ee6197dbae4d13739beaef8f /dxr3audio-oss.c
parent5344138582d635e9bb24a74c6529bd081430b521 (diff)
downloadvdr-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.c19
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: