Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[vdr] Re: vdradmin bigpatch: error in showing timer collisions



On Sun, 08 Feb 2004 09:41:28 +0100, Emil Naepflein
<Emil.Naepflein@philosys.de> wrote:

> To correct this a more sophisticated algorithm has to be used to find
> the overlaps.

Ok, here is a patch against vdradmin including bigpatch which improves
the collision handling:
- handle parallel recordings on same transponder on one card
- handle recordings on cards with CA (only one recording per CA type)

Enjoy,
Emil


diff -Naur vdradmin-0.95.orig/vdradmind.pl vdradmin/vdradmind.pl
--- vdradmin-0.95.orig/vdradmind.pl	2004-01-29 17:54:43.000000000 +0100
+++ vdradmin/vdradmind.pl	2004-02-08 14:02:40.000000000 +0100
@@ -524,6 +524,30 @@
   }
 }
 
+sub get_transponder_from_vdrid {
+  my $vdr_id = shift;
+  if($vdr_id) {
+    for my $channel (@CHAN) {
+      if($channel->{vdr_id} == $vdr_id) {
+        return("$channel->{source}" . "-" . 
+	       "$channel->{polarization}" . "-" .
+	       "$channel->{frequency}");
+      }
+    }
+  }
+}
+
+sub get_ca_from_vdrid {
+  my $vdr_id = shift;
+  if($vdr_id) {
+    for my $channel (@CHAN) {
+      if($channel->{vdr_id} == $vdr_id) {
+        return($channel->{ca});
+      }
+    }
+  }
+}
+
 
 #############################################################################
 # EPG functions
@@ -1325,6 +1349,8 @@
           active    => $active,
           event_id  => $event_id,
           cdesc     => get_name_from_vdrid($vdr_id),
+	  transponder => get_transponder_from_vdrid($vdr_id),
+	  ca	    => get_ca_from_vdrid($vdr_id),
           dor       => $dor,
           prio      => $prio,
           lft       => $lft,
@@ -1347,6 +1373,8 @@
         active    => $active,
         event_id  => $event_id,
         cdesc     => get_name_from_vdrid($vdr_id),
+	transponder => get_transponder_from_vdrid($vdr_id),
+	ca	  => get_ca_from_vdrid($vdr_id),
         dor       => $dor,
         prio      => $prio,
         lft       => $lft,
@@ -2035,17 +2063,50 @@
       for ($jj = 0; $jj < $ii; $jj++)  {
         if ($timer[$ii]->{startsse} >= $timer[$jj]->{startsse} &&
         $timer[$ii]->{startsse} < $timer[$jj]->{stopsse}) {
-          if ($timer[$ii]->{active} && $timer[$jj]->{active}) {
-            ($timer[$ii]->{collision})++;
-            ($timer[$jj]->{collision})++;
-          }
+          if ($timer[$ii]->{active} && $timer[$jj]->{active})  { 
+            if ($timer[$ii]->{ca} >= 100 && $timer[$jj]->{ca} >= 100 &&
+	        $timer[$ii]->{ca} == $timer[$jj]->{ca})  {
+	        if ($timer[$ii]->{vdr_id} ne $timer[$jj]->{vdr_id}) {
+                  ($timer[$ii]->{collision}) += ($CONFIG{RECORDINGS});
+		}
+		else  {
+                  ($timer[$ii]->{collision})++;
+		}
+	    }  
+	    else  {
+	      if ($timer[$ii]->{transponder} ne $timer[$jj]->{transponder}) {
+                ($timer[$ii]->{collision})++;
+              }
+	    }
+	  }
         }
       }
     }
     splice(@timer, $last + 1);
     for ($ii = 0; $ii < @timer; $ii++)  {
       $timer[$ii]->{critical} = $timer[$ii]->{collision} >= $CONFIG{RECORDINGS};
+      if ($timer[$ii]->{critical} > 0)  {
+        for ($jj = $ii - 1; $jj >= 0; $jj--)  {
+	  if ($timer[$jj]->{stopsse} > $timer[$ii]->{startsse})  {
+	    $timer[$jj]->{critical} = 1;
+	  }
+	  else  {
+	    last;
+	  }
+        }
+      }
       $timer[$ii]->{collision} = $timer[$ii]->{collision} >= ($CONFIG{RECORDINGS} - 1);
+      if ($timer[$ii]->{collision} > 0)  {
+        for ($jj = $ii - 1; $jj >= 0; $jj--)  {
+	  if ($timer[$jj]->{stopsse} > $timer[$ii]->{startsse})  {
+	    $timer[$jj]->{collision} = 1;
+	  }
+	  else  {
+	    last;
+	  }
+        }
+      }
+      $timer[$ii]->{collision} |= ($timer[$ii]->{ca} >= 100);
     }
   }


-- 
Info:
To unsubscribe send a mail to ecartis@linuxtv.org with "unsubscribe vdr" as subject.



Home | Main Index | Thread Index