On 02.03.2012 18:13, Udo Richter wrote:
Am 02.03.2012 11:06, schrieb Klaus Schmidinger:
On 29.02.2012 21:33, Udo Richter wrote:
Roughly, the callback should be at the places where these two get called:


(Thats how VDR's own receivers get out of way.)

There are two places in GetDevice() where
cStatus::MsgChannelSwitch(this, 0)
is called, but they are both *after* the final call to GetDevice().
And there is this comment

   // only report status if we are actually going to switch the channel

which refers to a change that was made in version 1.1.10:

- Only calling cStatus::MsgChannelSwitch() if a channel is actually
going to
   be switched or has actually been switched successfully (thanks to Stefan

Good point. What if VDR wants to switch, but fails. Is it possible that
the channel change still fails after deleting liveSubtitle and
dvbSubtitleConverter? How does VDR itself handle this? Need to
investigate this.

If switching to a certain channel fails, VDR will notice that the
primary device no longer HasProgramme() and will try to switch to
a different channel.

If a call to MsgChannelSwitch(this, 0) was done on channel change, we
have to make sure that the corresponding call for the new channel does
happen, or - worst case - there's a call for the old channel again.

What I really see as a problem here now is that the first call to
GetDevice() may call a device's DetachAllReceivers() and the second
GetDevice() call may then decide to actually use a different device.
I'm currently considering giving GetDevice() another parameter:

   static cDevice *GetDevice(const cChannel *Channel, int Priority, bool
LiveView, bool Query = false);

+1, as I know that something like this was on some wish lists for some
time. ;)

I'll release version 1.7.25 later today, so that all these changes can
be reviewed and tested.


vdr mailing list

Reply via email to