From a51f4e83f0f03d06d52275af719635da92740103 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sat, 26 Oct 2002 10:12:34 +0200 Subject: [PATCH] Fixed switching audio tracks in 'Transfer Mode' on the primary DVB device --- CONTRIBUTORS | 4 ++++ HISTORY | 3 +++ dvbdevice.c | 9 +++++++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 289e4a94..d087b876 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -155,6 +155,7 @@ Stefan Huelswitt for adding a missing StripAudioPackets() to cDvbPlayer::Action() for improving skipping channels that are (currently) not available for fixing checking the Ca() status of a cDevice + for helping to fix switching audio tracks in 'Transfer Mode' on the primary DVB device Ulrich Röder for pointing out that there are channels that have a symbol rate higher than @@ -444,3 +445,6 @@ Jaakko Hyv Dennis Noordsij for reporting a small glitch when switching channels + +Steffen Barszus + for reporting a bug in switching audio tracks in 'Transfer Mode' on the primary DVB device diff --git a/HISTORY b/HISTORY index 48db9a18..01f082ac 100644 --- a/HISTORY +++ b/HISTORY @@ -1634,3 +1634,6 @@ Video Disk Recorder Revision History by 1000 until it is larger than 1000000. - Fixed skipping unavailable channels when zapping downwards. - Fixed checking the Ca() status of a cDevice (thanks to Stefan Huelswitt). +- Fixed switching audio tracks in 'Transfer Mode' on the primary DVB device + (thanks to Steffen Barszus and Stefan Huelswitt for reporting this one and + helping to fix it). diff --git a/dvbdevice.c b/dvbdevice.c index 184720a1..b68c16e3 100644 --- a/dvbdevice.c +++ b/dvbdevice.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbdevice.c 1.26 2002/10/20 14:10:49 kls Exp $ + * $Id: dvbdevice.c 1.27 2002/10/26 09:44:49 kls Exp $ */ #include "dvbdevice.h" @@ -742,7 +742,7 @@ bool cDvbDevice::SetChannelDevice(const cChannel *Channel, bool LiveView) CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, true)); } else if (StartTransferMode) - cControl::Launch(new cTransferControl(this, Channel->Vpid(), Channel->Apid1(), 0, 0, 0)); + cControl::Launch(new cTransferControl(this, Channel->Vpid(), Channel->Apid1(), Channel->Apid2(), Channel->Dpid1(), Channel->Dpid2())); // Start setting system time: @@ -777,6 +777,8 @@ int cDvbDevice::NumAudioTracksDevice(void) const const char **cDvbDevice::GetAudioTracksDevice(int *CurrentTrack) const { + if (Ca()) + return NULL; // a Ca recording session blocks switching live audio tracks if (NumAudioTracks()) { if (CurrentTrack) *CurrentTrack = (pidHandles[ptAudio].pid == aPid1) ? 0 : 1; @@ -790,8 +792,11 @@ const char **cDvbDevice::GetAudioTracksDevice(int *CurrentTrack) const void cDvbDevice::SetAudioTrackDevice(int Index) { if (0 <= Index && Index < NumAudioTracks()) { + int vpid = pidHandles[ptVideo].pid; // need to turn video PID off/on to restart demux + DelPid(vpid); DelPid(pidHandles[ptAudio].pid); AddPid(Index ? aPid2 : aPid1, ptAudio); + AddPid(vpid, ptVideo); } }