mirror of
https://projects.vdr-developer.org/git/vdr-plugin-streamdev.git
synced 2023-10-10 19:16:51 +02:00
Improved channel switch code
- Avoid device allows more efficient code when trying to move live TV to different card - Added some more dsyslog messages to help debugging channel switch issues
This commit is contained in:
parent
abf8a62fe9
commit
9fbc166848
2
HISTORY
2
HISTORY
@ -1,6 +1,8 @@
|
|||||||
VDR Plugin 'streamdev' Revision History
|
VDR Plugin 'streamdev' Revision History
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
|
- more dsyslog messages to help troubleshouting channel switch issues
|
||||||
|
- improved the channel switch code trying to move live TV to different card
|
||||||
- make sure that a client doesn't interrupt replaying on server's FF card
|
- make sure that a client doesn't interrupt replaying on server's FF card
|
||||||
(reported by wtor)
|
(reported by wtor)
|
||||||
- switching away live TV failed even when "always suspended" (reported by
|
- switching away live TV failed even when "always suspended" (reported by
|
||||||
|
@ -303,25 +303,37 @@ cDevice *cServerConnection::GetDevice(const cChannel *Channel, int Priority)
|
|||||||
// can be handled by another device
|
// can be handled by another device
|
||||||
#if VDRVERSNUM >= 10516
|
#if VDRVERSNUM >= 10516
|
||||||
cDevice::SetAvoidDevice(device);
|
cDevice::SetAvoidDevice(device);
|
||||||
cDevice *newdev = cDevice::GetDevice(current, 0, true);
|
if (!Channels.SwitchTo(current->Number())) {
|
||||||
|
if (StreamdevServerSetup.SuspendMode == smAlways) {
|
||||||
|
Channels.SwitchTo(Channel->Number());
|
||||||
|
Skins.Message(mtInfo, tr("Streaming active"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dsyslog("streamdev: GetDevice: Live TV not suspended");
|
||||||
|
device = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
cDevice *newdev = CheckDevice(current, 0, true, device);
|
cDevice *newdev = CheckDevice(current, 0, true, device);
|
||||||
#endif
|
|
||||||
if (newdev) {
|
if (newdev) {
|
||||||
|
dsyslog("streamdev: GetDevice: Trying to move live TV to device %d", newdev->CardIndex());
|
||||||
newdev->SwitchChannel(current, true);
|
newdev->SwitchChannel(current, true);
|
||||||
}
|
}
|
||||||
else if (StreamdevServerSetup.SuspendMode == smAlways) {
|
else if (StreamdevServerSetup.SuspendMode == smAlways) {
|
||||||
Channels.SwitchTo(Channel->Number());
|
Channels.SwitchTo(Channel->Number());
|
||||||
Skins.Message(mtInfo, tr("Streaming active"));
|
Skins.Message(mtInfo, tr("Streaming active"));
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
|
dsyslog("streamdev: GetDevice: Live TV not suspended");
|
||||||
device = NULL;
|
device = NULL;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
if (!device) {
|
if (!device) {
|
||||||
// can't switch - continue the current stream
|
// can't switch - continue the current stream
|
||||||
Attach();
|
Attach();
|
||||||
dsyslog("streamdev: GetDevice failed for channel %s at priority %d", Channel->Name(), Priority);
|
dsyslog("streamdev: GetDevice failed for channel %d (%s) at priority %d (PrimaryDevice=%d, ActualDevice=%d)", Channel->Number(), Channel->Name(), Priority, cDevice::PrimaryDevice()->CardIndex(), cDevice::ActualDevice()->CardIndex());
|
||||||
}
|
}
|
||||||
return device;
|
return device;
|
||||||
}
|
}
|
||||||
@ -351,13 +363,16 @@ bool cServerConnection::ProvidesChannel(const cChannel *Channel, int Priority)
|
|||||||
// now we would have to switch away live tv...let's see if live tv
|
// now we would have to switch away live tv...let's see if live tv
|
||||||
// can be handled by another device
|
// can be handled by another device
|
||||||
cDevice *newdev = CheckDevice(current, 0, true, device);
|
cDevice *newdev = CheckDevice(current, 0, true, device);
|
||||||
if (!newdev) {
|
if (newdev) {
|
||||||
|
dsyslog("streamdev: Providing channel %d (%s) at priority %d requires moving live TV to device %d (PrimaryDevice=%d, ActualDevice=%d)", Channel->Number(), Channel->Name(), Priority, newdev->CardIndex(), cDevice::PrimaryDevice()->CardIndex(), cDevice::ActualDevice()->CardIndex());
|
||||||
|
}
|
||||||
|
else {
|
||||||
device = NULL;
|
device = NULL;
|
||||||
dsyslog("streamdev: Not providing channel %s at priority %d - live TV not suspended", Channel->Name(), Priority);
|
dsyslog("streamdev: Not providing channel %d (%s) at priority %d - live TV not suspended", Channel->Number(), Channel->Name(), Priority);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!device)
|
else if (!device)
|
||||||
dsyslog("streamdev: No device provides channel %s at priority %d", Channel->Name(), Priority);
|
dsyslog("streamdev: No device provides channel %d (%s) at priority %d", Channel->Number(), Channel->Name(), Priority);
|
||||||
}
|
}
|
||||||
return device;
|
return device;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user