#! /usr/bin/perl
# dv_duration.pl -- a script to calcualte clip duration from dv_timestamps 
# used with dvgrab.
#
# (C) 2006,2007 jw@suse.de Novell Inc.
# Distribute under GPLv2


my $start = linear_dv_time(shift);
my $end   = linear_dv_time(shift);

printf "--frames %d\n", $end - $start;
printf "--duration %s\n", broken_dv_time($end-$start);

exit 0;

# returns the number of frames
sub linear_dv_time
{
  my ($t) = @_;
  # 0:01:39:14
  die "linear_dv_time: format H:MM:SS:ff expected, not '$t'" 
    unless $t =~ m{^(\d+):(\d\d):(\d\d):(\d\d)$};
  my ($hh,$mm,$ss,$ff) = ($1,$2,$3,$4);
  die "frame count must be 00..24, not $ff" if $ff > 24;
  return $ff+25*($ss+60*($mm+60*$hh));
}

sub broken_dv_time
{
  my ($ff) = @_;
  my $ss = int($ff/25);
  $ff -= 25 * $ss;
  my $mm = int($ss/60);
  $ss -= 60 * $mm;
  my $hh = int($mm/60);
  $mm -= 60 * $hh;
  return sprintf "%d:%02d:%02d:%02d", $hh, $mm, $ss, $ff;
}
