summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Brachold <vdr07@deltab.de>2011-10-03 08:00:56 +0000
committerAndreas Brachold <vdr07@deltab.de>2011-10-03 08:00:56 +0000
commit48386e50a21f95dba13d2e27d7ec2d0f574499c0 (patch)
tree41734db6e2299ffc8cc7a74b75348c8a06f5c170
parentf21b5bf416988471e4f414abc453ba43effc69ad (diff)
downloadxxv-48386e50a21f95dba13d2e27d7ec2d0f574499c0.tar.gz
xxv-48386e50a21f95dba13d2e27d7ec2d0f574499c0.tar.bz2
RECORDS: Add checks if framerate missed, #18381
-rw-r--r--lib/XXV/MODULES/RECORDS.pm16
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/XXV/MODULES/RECORDS.pm b/lib/XXV/MODULES/RECORDS.pm
index 4105ccd..d9836c2 100644
--- a/lib/XXV/MODULES/RECORDS.pm
+++ b/lib/XXV/MODULES/RECORDS.pm
@@ -1402,6 +1402,9 @@ sub _calcmarks {
unless ($marks) {
return $duration;
}
+ unless ($framerate) {
+ return $duration;
+ }
my $frames = 0;
for (my $i = 0; $i < (scalar(@$marks)); $i += 2) {
@@ -1472,7 +1475,10 @@ sub readinfo {
$info->{vpstime} = $1;
}
elsif($zeile =~ /^F\s+(.+)$/s) {
- $info->{framerate} = int($1);
+ my $rate = int($1);
+ if($rate > 0) {
+ $info->{framerate} = $rate;
+ }
}
elsif($zeile =~ /^L\s+(.+)$/s) {
$info->{lifetime} = int($1);
@@ -1941,7 +1947,9 @@ sub play {
$start = &text2frame($params->{start});
}
if($start) {
- if($start < 0 or ($start / $rec->{framerate}) >= ($rec->{duration})) {
+ if($start < 0 or
+ ($rec->{framerate} <= 0) or
+ ($start / $rec->{framerate}) >= ($rec->{duration})) {
$start = 'begin';
} else {
$start = &frame2hms($start);
@@ -2943,6 +2951,10 @@ sub _recordinglength {
return 0 unless($fst and $rst);
if($fst->mode & 00400) { # mode & S_IRUSR
+ unless(int($framerate)>0) {
+ error sprintf("Unknown framerate : '%s'", $index);
+ return 0;
+ }
return int(($fst->size / 8) / $framerate);
} else {
error sprintf("Couldn't read : '%s'", $index);