Tomas Berglund wrote:
Your workaround patch only prevent additional dpids to be set when dolby is 
disabled. I really would like to switch channels with
dolby enabled. The problem is that those additional pids are never removed....or set to false in SetPid().
Is there any other way to add additional pids without setting them with 
ciHandler->SetPid ? If AddPid() is used to set them, they
would be removed in cDevice::DelPid().

Please try the attached patch. At least with my CAM here I don't
get any more sticky PIDs in the CAM now.

Klaus
--- dvbdevice.c	2006/06/11 09:03:55	1.159
+++ dvbdevice.c	2006/08/14 09:38:32
@@ -853,11 +853,6 @@
         esyslog("ERROR: failed to set PIDs for channel %d on device %d", Channel->Number(), CardIndex() + 1);
         return false;
         }
-     //XXX quick workaround for additional live audio PIDs:
-     if (ciHandler) {
-        ciHandler->SetPid(Channel->Apid(1), true);
-        ciHandler->SetPid(Channel->Dpid(0), true);
-        }
      if (IsPrimaryDevice())
         AddPid(Channel->Tpid(), ptTeletext);
      CHECK(ioctl(fd_audio, AUDIO_SET_MUTE, true)); // actually one would expect 'false' here, but according to Marco Schl├╝├čler <[EMAIL PROTECTED]> this works
@@ -927,8 +922,14 @@
      if (IS_AUDIO_TRACK(Type) || (IS_DOLBY_TRACK(Type) && SetAudioBypass(true))) {
         if (pidHandles[ptAudio].pid && pidHandles[ptAudio].pid != TrackId->id) {
            DetachAll(pidHandles[ptAudio].pid);
+           if (ciHandler)
+              ciHandler->SetPid(pidHandles[ptAudio].pid, false);
            pidHandles[ptAudio].pid = TrackId->id;
            SetPid(&pidHandles[ptAudio], ptAudio, true);
+           if (ciHandler) {
+              ciHandler->SetPid(pidHandles[ptAudio].pid, true);
+              ciHandler->StartDecrypting();
+              }
            }
         }
      else if (IS_DOLBY_TRACK(Type)) {
_______________________________________________
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr

Reply via email to