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