summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Gmeiner <christian.gmeiner@gmail.com>2010-02-05 13:18:48 +0100
committerChristian Gmeiner <christian.gmeiner@gmail.com>2010-02-05 13:18:48 +0100
commita273cc426744fc0d3eb3f794862667ea65af9e15 (patch)
tree29dd75f36833ce9050e40be74df4109bdd524303
parentee55394314096e37f54bb62b75fcfb22c2d1c1fb (diff)
downloadvdr-plugin-dxr3-a273cc426744fc0d3eb3f794862667ea65af9e15.tar.gz
vdr-plugin-dxr3-a273cc426744fc0d3eb3f794862667ea65af9e15.tar.bz2
better user experience when switching channel
-rw-r--r--dxr3device.c17
-rw-r--r--dxr3device.h2
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;