File Coverage

blib/lib/App/Video/Generator.pm
Criterion Covered Total %
statement 27 53 50.9
branch 0 10 0.0
condition 0 6 0.0
subroutine 9 10 90.0
pod 2 2 100.0
total 38 81 46.9


line stmt bran cond sub pod time code
1             package App::Video::Generator;
2              
3 3     3   74358 use strict;
  3         19  
  3         107  
4 3     3   17 use warnings;
  3         6  
  3         76  
5              
6 3     3   1676 use English;
  3         11592  
  3         17  
7 3     3   2852 use Error::Pure qw(err);
  3         22399  
  3         1957  
8 3     3   8205 use Getopt::Std;
  3         156  
  3         174  
9 3     3   1455 use Image::Select;
  3         253997  
  3         115  
10 3     3   32 use Readonly;
  3         6  
  3         156  
11 3     3   1809 use Video::Generator;
  3         194841  
  3         1629  
12              
13             # Constants.
14             Readonly::Scalar our $EMPTY_STR => q{};
15              
16             our $VERSION = 0.09;
17              
18             # Constructor.
19             sub new {
20 1     1 1 88 my $class = shift;
21              
22             # Create object.
23 1         3 my $self = bless {}, $class;
24              
25             # Object.
26 1         3 return $self;
27             }
28              
29             # Run script.
30             sub run {
31 0     0 1   my $self = shift;
32              
33             # Process arguments.
34 0           $self->{'_opts'} = {
35             'd' => 10000,
36             'f' => 60,
37             'h' => 0,
38             'i' => $EMPTY_STR,
39             's' => '1920x1080',
40             'v' => 0,
41             };
42 0 0 0       if (! getopts('d:f:hi:s:v', $self->{'_opts'}) || @ARGV < 1
      0        
43             || $self->{'_opts'}->{'h'}) {
44              
45 0           print STDERR "Usage: $0 [-d duration] [-f fps] [-h]\n\t".
46             "[-i input_dir] [-s size] [-v] [--version] ".
47             "output_file\n\n";
48 0           print STDERR "\t-d duration\tDuration in numeric value or ".
49             "with ms/s/min/h suffix\n\t\t\t(default value is ".
50             "10000 [=10s]).\n";
51 0           print STDERR "\t-f fps\t\tFrame rate\n";
52 0           print STDERR "\t-h\t\tPrint help.\n";
53 0           print STDERR "\t-i input_dir\tInput directory with ".
54             "images (default value is nothing).\n";
55 0           print STDERR "\t-s size\t\tSize (default value is ".
56             "1920x1080).\n";
57 0           print STDERR "\t-v\t\tVerbose mode.\n";
58 0           print STDERR "\t--version\tPrint version.\n";
59 0           exit 1;
60             }
61 0           $self->{'_output_file'} = $ARGV[0];
62              
63             # Check size.
64 0 0         if ($self->{'_opts'}->{'s'} !~ m/^(\d+)x(\d+)$/ms) {
65 0           err 'Bad size value.', 'Value', $self->{'_opts'}->{'s'};
66             }
67 0           $self->{'_width'} = $1;
68 0           $self->{'_height'} = $2;
69              
70             # Run.
71 0           eval {
72             # Images from directory.
73 0           my $image_generator;
74 0 0         if ($self->{'_opts'}->{'i'} ne $EMPTY_STR) {
75             $image_generator = Image::Select->new(
76             'debug' => ($self->{'_opts'}->{'v'} ? 1 : 0),
77             'height' => $self->{'_height'},
78             'path_to_images' => $self->{'_opts'}->{'i'},
79 0 0         'width' => $self->{'_width'},
80             );
81             }
82              
83             my $vg = Video::Generator->new(
84             'duration' => $self->{'_opts'}->{'d'},
85             'fps' => $self->{'_opts'}->{'f'},
86             'height' => $self->{'_height'},
87             'image_generator' => $image_generator,
88             'verbose' => $self->{'_opts'}->{'v'},
89 0           'width' => $self->{'_width'},
90             );
91 0           $vg->create($self->{'_output_file'});
92             };
93 0 0         if ($EVAL_ERROR) {
94 0           err 'Cannot create video.';
95             }
96 0           return 0;
97             }
98              
99             1;
100              
101             __END__