receive data with low prio, so user-action can detach the receiver

Message ID 43BA9EF9.7030807@gmx.de
State New
Headers

Commit Message

Patrick Fischer Jan. 3, 2006, 3:57 p.m. UTC
  I have written a quick and dirty patch to build my requested function.
It is too dirty to use it. It only work in the case you use always the 
transfermode.

But now I can show how it should work.

are actually going to switch the channel
         if (CaDevice->SetChannel(Channel, false) == scrOk) // calling 
SetChannel() directly, not SwitchChannel()!
  

Patch

--- vdr-1.3.37_orig/device.c    2005-11-26 13:56:09.000000000 +0100
+++ vdr-1.3.37/device.c 2006-01-03 16:54:18.000000000 +0100
@@ -588,7 +588,23 @@ 
   // use the card that actually can receive it and transfer data from 
there:

   if (NeedsTransferMode) {
-     cDevice *CaDevice = GetDevice(Channel, 0);
+     bool ntd;
+     cDevice *CaDevice = GetDevice(Channel, 0, &ntd);
+     if (ntd){//detach all receivers from device
+        dsyslog("need to detach all receivers from device");
+        for (int i = 0; i < MAXRECEIVERS; i++) {
+          //  CaDevice->receiver[i]->Detach();
+          if (CaDevice->receiver[i]){
+              dsyslog("%d will be detached",i);
+              CaDevice->receiver[i]->Detach();
+              //CaDevice->receiver[i]->Activate(false);
+              //CaDevice->receiver[i] = NULL;
+              //CaDevice->receiver[i]->device = NULL;
+              //for (int n = 0; n < CaDevice->receiver[i]->numPids; n++)
+              //    DelPid(CaDevice->receiver[i]->pids[n]);
+          }
+        }
+      }
      if (CaDevice && CanReplay()) {
         cStatus::MsgChannelSwitch(this, 0); // only report status if we