Klaus Schmidinger wrote:
Klaus: do you have any thoughts on this subject. IMHO current vdr is broken for movable dishes.
(While it may work a bit for live tv on a ff card, recordings require a restart to work and transfer mode does not work either).
Sorry, at this time I don't have any thoughts on this, except for increasing the lock timeout.
Not good since it makes vdr unresponsive (in my case the dish can take 2..3 minutes to go from one extreme to the other).
What about my suggestion?
1) modify cDvbDevice::HasLock to check that the dish is positioned (by querying plugins) 2) remove the wait for HasLock in cDevice::AttachReceiver 3) remove also Receiver->Activate(true) there. In its place mark that this receiver hasn't been activated 4) modify cDevice::Action to wait for HasLock() before the main loop 5) call receiver[i]->Activate(true) in cDevice::Action just befor calling Receive, but only for receivers that haven't been activated yet
I've played with it a bit and it seems to work, however I don't have a ff card. Instead of 1) I checked the dish status directly in 4) (and actually it should check *only* for the dish position and not for a lock, so the recorder thread can notice if there is no data). The "problem" is that all plugins should make sure to detach receivers immediatile during a channel switch, otherwise cDevice::Action wouldn't restart (and that's necessary to check for dish position), and make sure to use Activate(true) to start their own thread (e.g.the ttxtsubtitles plugin doesn't do either). I don't know if all cReceivers used inside of vdr hold to these rules though. Another thing to modify is the section handling (it should check too that the dish is positioned before starting).
Bye