diff options
author | Christian Gmeiner <christian.gmeiner@gmail.com> | 2010-02-05 13:18:48 +0100 |
---|---|---|
committer | Christian Gmeiner <christian.gmeiner@gmail.com> | 2010-02-05 13:18:48 +0100 |
commit | a273cc426744fc0d3eb3f794862667ea65af9e15 (patch) | |
tree | 29dd75f36833ce9050e40be74df4109bdd524303 | |
parent | ee55394314096e37f54bb62b75fcfb22c2d1c1fb (diff) | |
download | vdr-plugin-dxr3-a273cc426744fc0d3eb3f794862667ea65af9e15.tar.gz vdr-plugin-dxr3-a273cc426744fc0d3eb3f794862667ea65af9e15.tar.bz2 |
better user experience when switching channel
-rw-r--r-- | dxr3device.c | 17 | ||||
-rw-r--r-- | dxr3device.h | 2 |
2 files changed, 19 insertions, 0 deletions
diff --git a/dxr3device.c b/dxr3device.c index 253a09d..4c06bf2 100644 --- a/dxr3device.c +++ b/dxr3device.c @@ -34,10 +34,19 @@ static const char *DEV_DXR3_OSD = "_sp"; static const char *DEV_DXR3_VIDEO = "_mv"; static const char *DEV_DXR3_CONT = ""; +static const int SILENT_AUDIO_SIZE = 16384; + cDxr3Device::cDxr3Device() : pluginOn(true), vPts(0), scrSet(false), playCount(0) { m_spuDecoder = NULL; + silentAudio = new uchar[SILENT_AUDIO_SIZE]; + + if (!silentAudio) { + esyslog("[dxr3-device] failed to allocate silent audio data"); + exit(-2); + } + claimDevices(); if (cSettings::instance()->audioDriver() == OSS) { @@ -57,6 +66,7 @@ cDxr3Device::~cDxr3Device() audioOut->releaseDevice(); delete audioOut; delete aDecoder; + delete[] silentAudio; releaseDevices(); @@ -114,6 +124,8 @@ bool cDxr3Device::SetPlayMode(ePlayMode PlayMode) switch (PlayMode) { case pmNone: + playSilentAudio(); + playBlackFrame(); audioOut->setEnabled(false); scrSet = false; playCount = 0; @@ -540,6 +552,11 @@ void cDxr3Device::playBlackFrame() vertical = 576; } +void cDxr3Device::playSilentAudio() +{ + audioOut->write(silentAudio, SILENT_AUDIO_SIZE); +} + // Local variables: // mode: c++ // c-file-style: "stroustrup" diff --git a/dxr3device.h b/dxr3device.h index f6eefdb..7aecd98 100644 --- a/dxr3device.h +++ b/dxr3device.h @@ -105,7 +105,9 @@ private: void setPlayMode(); void playVideoFrame(cDxr3PesFrame *frame, uint32_t pts); void playBlackFrame(); + void playSilentAudio(); + uchar *silentAudio; cDxr3AudioDecoder *aDecoder; cDxr3SpuDecoder* m_spuDecoder; iAudio *audioOut; |