Fixed broken video data streams on systems without output device when switching live channel to a different transponder while recording

This commit is contained in:
Klaus Schmidinger 2023-02-21 09:31:47 +01:00
parent 5f136032a2
commit 1770a18598
3 changed files with 12 additions and 1 deletions

View File

@ -2552,6 +2552,8 @@ Markus Ehrnsperger <markus.ehrnsperger@googlemail.com>
for suggesting to add a chapter about locking to PLUGINS.html
for fixing unnecessary interruption of ongoing recordings if timers avoided the
transfer mode receiver device
for reporting broken video data streams on systems without output device when switching
live channel to a different transponder while recording
Werner Färber <w.faerber@gmx.de>
for reporting a bug in handling the cPluginManager::Active() result when pressing

View File

@ -9851,3 +9851,8 @@ Video Disk Recorder Revision History
- Fixed unnecessary interruption of ongoing recordings if timers avoided the transfer
mode receiver device (thanks to Markus Ehrnsperger).
- Revised support for kernel based LIRC driver (thanks to Marko Mäkelä).
2023-02-21:
- Fixed broken video data streams on systems without output device when switching live
channel to a different transponder while recording (reported by Markus Ehrnsperger).

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: device.c 5.7 2023/02/16 14:53:38 kls Exp $
* $Id: device.c 5.8 2023/02/21 09:31:47 kls Exp $
*/
#include "device.h"
@ -807,6 +807,10 @@ bool cDevice::MaySwitchTransponder(const cChannel *Channel) const
bool cDevice::SwitchChannel(const cChannel *Channel, bool LiveView)
{
if (LiveView) {
if (!PrimaryDevice()->CanReplay()) {
isyslog("can't switch to live channel %d %s (%s)", Channel->Number(), *Channel->GetChannelID().ToString(), Channel->Name());
return false;
}
isyslog("switching to channel %d %s (%s)", Channel->Number(), *Channel->GetChannelID().ToString(), Channel->Name());
cControl::Shutdown(); // prevents old channel from being shown too long if GetDevice() takes longer
// and, if decrypted, this removes the now superfluous PIDs from the CAM, too