diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 852297bc..f44f4379 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1069,6 +1069,7 @@ Reinhard Nissl for a suggestion that lead to implementing cDevice::Transferring() for fixing replaying recordings of radio channels with many audio tracks for speeding up cRemux::ScanVideoPacket() + for implementing cDevice::ForceTransferMode() Richard Robson for reporting freezing replay if a timer starts while in Transfer Mode from the diff --git a/HISTORY b/HISTORY index e1ee7aa0..aa24e7da 100644 --- a/HISTORY +++ b/HISTORY @@ -4445,3 +4445,5 @@ Video Disk Recorder Revision History - Speeded up cRemux::ScanVideoPacket() (thanks to Reinhard Nissl). - Enhanced logging EPG event data. - Fixed format string handling (thanks to Darren Salt). +- The new function cDevice::ForceTransferMode() can be used to force the primary + device into transfer mode (thanks to Reinhard Nissl). diff --git a/device.c b/device.c index 5eaa8ac2..dfb95f4c 100644 --- a/device.c +++ b/device.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: device.c 1.124 2006/02/24 14:05:26 kls Exp $ + * $Id: device.c 1.125 2006/03/26 09:42:48 kls Exp $ */ #include "device.h" @@ -697,6 +697,15 @@ eSetChannelResult cDevice::SetChannel(const cChannel *Channel, bool LiveView) return Result; } +void cDevice::ForceTransferMode(void) +{ + if (!cTransferControl::ReceiverDevice()) { + cChannel *Channel = Channels.GetByNumber(CurrentChannel()); + if (Channel) + SetChannelDevice(Channel, false); // this implicitly starts Transfer Mode + } +} + bool cDevice::SetChannelDevice(const cChannel *Channel, bool LiveView) { return false; diff --git a/device.h b/device.h index e6e436b2..16fa370b 100644 --- a/device.h +++ b/device.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: device.h 1.72 2006/02/04 14:22:08 kls Exp $ + * $Id: device.h 1.73 2006/03/26 09:42:40 kls Exp $ */ #ifndef __DEVICE_H @@ -236,6 +236,8 @@ protected: public: static int CurrentChannel(void) { return primaryDevice ? currentChannel : 0; } ///< Returns the number of the current channel on the primary device. + void ForceTransferMode(void); + ///< Forces the device into transfermode for the current channel. virtual bool HasLock(int TimeoutMs = 0);//XXX PLUGINS.html ///< Returns true if the device has a lock on the requested transponder. ///< Default is true, a specific device implementation may return false diff --git a/dvbdevice.c b/dvbdevice.c index a722be99..af9b4a84 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.154 2006/03/19 12:34:24 kls Exp $ + * $Id: dvbdevice.c 1.155 2006/03/26 09:42:54 kls Exp $ */ #include "dvbdevice.h" @@ -930,9 +930,7 @@ void cDvbDevice::SetAudioTrackDevice(eTrackType Type) if (!setTransferModeForDolbyDigital) return; // Currently this works only in Transfer Mode - cChannel *Channel = Channels.GetByNumber(CurrentChannel()); - if (Channel) - SetChannelDevice(Channel, false); // this implicitly starts Transfer Mode + ForceTransferMode(); } } }