| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Video::CPL::Cue; |
|
2
|
|
|
|
|
|
|
|
|
3
|
1
|
|
|
1
|
|
3
|
use warnings; |
|
|
1
|
|
|
|
|
1
|
|
|
|
1
|
|
|
|
|
41
|
|
|
4
|
1
|
|
|
1
|
|
3
|
use strict; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
15
|
|
|
5
|
1
|
|
|
1
|
|
2
|
use Carp; |
|
|
1
|
|
|
|
|
1
|
|
|
|
1
|
|
|
|
|
53
|
|
|
6
|
1
|
|
|
1
|
|
3
|
use Data::Dumper; |
|
|
1
|
|
|
|
|
1
|
|
|
|
1
|
|
|
|
|
35
|
|
|
7
|
1
|
|
|
1
|
|
3
|
use XML::Writer; |
|
|
1
|
|
|
|
|
1
|
|
|
|
1
|
|
|
|
|
13
|
|
|
8
|
|
|
|
|
|
|
|
|
9
|
1
|
|
|
1
|
|
322
|
use Video::CPL::Annotation; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
22
|
|
|
10
|
1
|
|
|
1
|
|
363
|
use Video::CPL::AnnotationList; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
21
|
|
|
11
|
1
|
|
|
1
|
|
5
|
use Video::CPL::TargetList; |
|
|
1
|
|
|
|
|
0
|
|
|
|
1
|
|
|
|
|
2523
|
|
|
12
|
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
=head1 NAME |
|
14
|
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
Video::CPL::Cue - Create a Cue object. |
|
16
|
|
|
|
|
|
|
|
|
17
|
|
|
|
|
|
|
=head1 VERSION |
|
18
|
|
|
|
|
|
|
|
|
19
|
|
|
|
|
|
|
Version 0.09 |
|
20
|
|
|
|
|
|
|
|
|
21
|
|
|
|
|
|
|
=cut |
|
22
|
|
|
|
|
|
|
|
|
23
|
|
|
|
|
|
|
our $VERSION = '0.09'; |
|
24
|
|
|
|
|
|
|
|
|
25
|
|
|
|
|
|
|
=head1 SYNOPSIS |
|
26
|
|
|
|
|
|
|
|
|
27
|
|
|
|
|
|
|
use Video::CPL::Cue; |
|
28
|
|
|
|
|
|
|
|
|
29
|
|
|
|
|
|
|
my $foo = Video::CPL::Cue->new(cueType=>"regular",name=>"fooba",time=23.7,interestURL="http://foo.com"); |
|
30
|
|
|
|
|
|
|
|
|
31
|
|
|
|
|
|
|
=head1 SUBROUTINES/METHODS |
|
32
|
|
|
|
|
|
|
|
|
33
|
|
|
|
|
|
|
=cut |
|
34
|
|
|
|
|
|
|
our @FIELDS = qw(name cueType time tags interestURL query zeroLen cannotSkip pauseOnEntry modalOnEntry soft js backgroundHTML coincidentWebPoint pauseOnDisplay canBeDestination mxmlInCPL videoBottom useLayout webViewLayout videoHCenter webBottom); |
|
35
|
|
|
|
|
|
|
|
|
36
|
|
|
|
|
|
|
#WARNING be careful accessing time. $x->{time} will give the wrong results. time() can't be called |
|
37
|
|
|
|
|
|
|
#directly in the module. foo(time=>1) and $x->time() work given Perl rules. |
|
38
|
|
|
|
|
|
|
# |
|
39
|
56
|
50
|
|
56
|
0
|
42
|
sub name { my $obj = shift; $obj->{'name'} = shift if @_; return $obj->{'name'}; } |
|
|
56
|
|
|
|
|
71
|
|
|
|
56
|
|
|
|
|
330
|
|
|
40
|
0
|
0
|
|
0
|
0
|
0
|
sub cueType { my $obj = shift; $obj->{'cueType'} = shift if @_; return $obj->{'cueType'}; } |
|
|
0
|
|
|
|
|
0
|
|
|
|
0
|
|
|
|
|
0
|
|
|
41
|
1
|
50
|
|
1
|
0
|
1
|
sub time { my $obj = shift; $obj->{'time'} = shift if @_; return $obj->{'time'}; } |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
4
|
|
|
42
|
3
|
100
|
|
3
|
0
|
4
|
sub tags { my $obj = shift; $obj->{tags} = shift if @_; return $obj->{tags}; } |
|
|
3
|
|
|
|
|
12
|
|
|
|
3
|
|
|
|
|
7
|
|
|
43
|
3
|
100
|
|
3
|
0
|
5
|
sub interestURL { my $obj = shift; $obj->{interestURL} = shift if @_; return $obj->{interestURL}; } |
|
|
3
|
|
|
|
|
11
|
|
|
|
3
|
|
|
|
|
9
|
|
|
44
|
3
|
100
|
|
3
|
0
|
3
|
sub query { my $obj = shift; $obj->{query} = shift if @_; return $obj->{query}; } |
|
|
3
|
|
|
|
|
8
|
|
|
|
3
|
|
|
|
|
8
|
|
|
45
|
3
|
100
|
|
3
|
0
|
4
|
sub zeroLen { my $obj = shift; $obj->{zeroLen} = shift if @_; return $obj->{zeroLen}; } |
|
|
3
|
|
|
|
|
10
|
|
|
|
3
|
|
|
|
|
18
|
|
|
46
|
3
|
100
|
|
3
|
0
|
4
|
sub cannotSkip { my $obj = shift; $obj->{cannotSkip} = shift if @_; return $obj->{cannotSkip}; } |
|
|
3
|
|
|
|
|
8
|
|
|
|
3
|
|
|
|
|
9
|
|
|
47
|
3
|
100
|
|
3
|
0
|
4
|
sub pauseOnEntry { my $obj = shift; $obj->{pauseOnEntry} = shift if @_; return $obj->{pauseOnEntry}; } |
|
|
3
|
|
|
|
|
10
|
|
|
|
3
|
|
|
|
|
10
|
|
|
48
|
3
|
100
|
|
3
|
0
|
11
|
sub modalOnEntry { my $obj = shift; $obj->{modalOnEntry} = shift if @_; return $obj->{modalOnEntry}; } |
|
|
3
|
|
|
|
|
9
|
|
|
|
3
|
|
|
|
|
9
|
|
|
49
|
3
|
100
|
|
3
|
0
|
12
|
sub soft { my $obj = shift; $obj->{soft} = shift if @_; return $obj->{soft}; } |
|
|
3
|
|
|
|
|
15
|
|
|
|
3
|
|
|
|
|
8
|
|
|
50
|
0
|
0
|
|
0
|
0
|
0
|
sub js { my $obj = shift; $obj->{js} = shift if @_; return $obj->{js}; } |
|
|
0
|
|
|
|
|
0
|
|
|
|
0
|
|
|
|
|
0
|
|
|
51
|
3
|
100
|
|
3
|
0
|
6
|
sub backgroundHTML { my $obj = shift; $obj->{backgroundHTML} = shift if @_; return $obj->{backgroundHTML}; } |
|
|
3
|
|
|
|
|
7
|
|
|
|
3
|
|
|
|
|
10
|
|
|
52
|
0
|
0
|
|
0
|
0
|
0
|
sub coincidentWebPoint { my $obj = shift; $obj->{coincidentWebPoint} = shift if @_; return $obj->{coincidentWebPoint}; } |
|
|
0
|
|
|
|
|
0
|
|
|
|
0
|
|
|
|
|
0
|
|
|
53
|
3
|
100
|
|
3
|
0
|
7
|
sub pauseOnDisplay { my $obj = shift; $obj->{pauseOnDisplay} = shift if @_; return $obj->{pauseOnDisplay}; } |
|
|
3
|
|
|
|
|
9
|
|
|
|
3
|
|
|
|
|
8
|
|
|
54
|
0
|
0
|
|
0
|
0
|
0
|
sub mxmlInCPL { my $obj = shift; $obj->{mxmlInCPL} = shift if @_; return $obj->{mxmlInCPL}; } |
|
|
0
|
|
|
|
|
0
|
|
|
|
0
|
|
|
|
|
0
|
|
|
55
|
0
|
0
|
|
0
|
0
|
0
|
sub videoBottom { my $obj = shift; $obj->{videoBottom} = shift if @_; return $obj->{videoBottom}; } |
|
|
0
|
|
|
|
|
0
|
|
|
|
0
|
|
|
|
|
0
|
|
|
56
|
0
|
0
|
|
0
|
0
|
0
|
sub useLayout { my $obj = shift; $obj->{useLayout} = shift if @_; return $obj->{useLayout}; } |
|
|
0
|
|
|
|
|
0
|
|
|
|
0
|
|
|
|
|
0
|
|
|
57
|
3
|
100
|
|
3
|
0
|
5
|
sub webViewLayout { my $obj = shift; $obj->{webViewLayout} = shift if @_; return $obj->{webViewLayout}; } |
|
|
3
|
|
|
|
|
7
|
|
|
|
3
|
|
|
|
|
10
|
|
|
58
|
0
|
0
|
|
0
|
0
|
0
|
sub videoHCenter { my $obj = shift; $obj->{videoHCenter} = shift if @_; return $obj->{videoHCenter}; } |
|
|
0
|
|
|
|
|
0
|
|
|
|
0
|
|
|
|
|
0
|
|
|
59
|
0
|
0
|
|
0
|
0
|
0
|
sub webBottom { my $obj = shift; $obj->{webBottom} = shift if @_; return $obj->{webBottom}; } |
|
|
0
|
|
|
|
|
0
|
|
|
|
0
|
|
|
|
|
0
|
|
|
60
|
|
|
|
|
|
|
|
|
61
|
3
|
100
|
|
3
|
0
|
4
|
sub annotationList { my $obj = shift; $obj->{annotationList} = shift if @_; return $obj->{annotationList}; } |
|
|
3
|
|
|
|
|
6
|
|
|
|
3
|
|
|
|
|
12
|
|
|
62
|
0
|
0
|
|
0
|
0
|
0
|
sub directoryList { my $obj = shift; $obj->{directoryList} = shift if @_; return $obj->{directoryList}; } |
|
|
0
|
|
|
|
|
0
|
|
|
|
0
|
|
|
|
|
0
|
|
|
63
|
1
|
50
|
|
1
|
0
|
2
|
sub targetList { my $obj = shift; $obj->{targetList} = shift if @_; return $obj->{targetList}; } |
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
3
|
|
|
64
|
1
|
50
|
|
1
|
0
|
1
|
sub story { my $obj = shift; $obj->{story} = shift if @_; return $obj->{story}; } |
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
3
|
|
|
65
|
|
|
|
|
|
|
#not an attribute |
|
66
|
1
|
50
|
|
1
|
0
|
1
|
sub parent { my $obj = shift; $obj->{parent} = shift if @_; return $obj->{parent}; } |
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
2
|
|
|
67
|
|
|
|
|
|
|
|
|
68
|
|
|
|
|
|
|
#cue new is normally called from CPL.pm. Newest model is that it sets story and TargetList correctly |
|
69
|
|
|
|
|
|
|
#proposed |
|
70
|
|
|
|
|
|
|
#story |
|
71
|
|
|
|
|
|
|
#picLoc picOverLoc ballonText forever |
|
72
|
|
|
|
|
|
|
#if present will create and add story |
|
73
|
|
|
|
|
|
|
#target [accept array or scalar. Strings or cuePt. return array if wantarray else single target if only one else croak.] |
|
74
|
|
|
|
|
|
|
#backgroundPicLoc |
|
75
|
|
|
|
|
|
|
#operation |
|
76
|
|
|
|
|
|
|
#headerText |
|
77
|
|
|
|
|
|
|
|
|
78
|
|
|
|
|
|
|
=head2 new(); |
|
79
|
|
|
|
|
|
|
|
|
80
|
|
|
|
|
|
|
Return a new Cue object. |
|
81
|
|
|
|
|
|
|
|
|
82
|
|
|
|
|
|
|
=cut |
|
83
|
|
|
|
|
|
|
|
|
84
|
|
|
|
|
|
|
sub new { |
|
85
|
2
|
|
|
2
|
1
|
4
|
my $pkg = shift; |
|
86
|
2
|
|
|
|
|
10
|
my %parms = @_; |
|
87
|
2
|
|
|
|
|
3
|
my $ret = {}; |
|
88
|
2
|
|
|
|
|
3
|
bless $ret,$pkg; |
|
89
|
|
|
|
|
|
|
|
|
90
|
2
|
|
|
|
|
5
|
foreach my $q (@FIELDS,'story','annotationList','targetList'){ |
|
91
|
50
|
100
|
|
|
|
75
|
$ret->{$q} = $parms{$q} if defined($parms{$q}); |
|
92
|
|
|
|
|
|
|
} |
|
93
|
2
|
|
50
|
|
|
13
|
$ret->{parent} = $parms{parent} || undef; |
|
94
|
2
|
50
|
33
|
|
|
20
|
$ret->{zerolen} = $parms{zerolen} || ($parms{cueType} =~ /(goto|regularEnd|returnEnd)/)?"true":"false"; |
|
95
|
|
|
|
|
|
|
|
|
96
|
2
|
|
|
|
|
13
|
return $ret; |
|
97
|
|
|
|
|
|
|
} |
|
98
|
|
|
|
|
|
|
|
|
99
|
|
|
|
|
|
|
=head2 adjust(parm1=>val,parm2=>val,...) |
|
100
|
|
|
|
|
|
|
|
|
101
|
|
|
|
|
|
|
Change arbitrary fields within a Cue point. |
|
102
|
|
|
|
|
|
|
|
|
103
|
|
|
|
|
|
|
=cut |
|
104
|
|
|
|
|
|
|
|
|
105
|
|
|
|
|
|
|
sub adjust { |
|
106
|
0
|
|
|
0
|
1
|
0
|
my $obj = shift; |
|
107
|
0
|
|
|
|
|
0
|
my %parms = @_; |
|
108
|
0
|
0
|
|
|
|
0
|
%parms = $obj->parent()->converttarget(%parms) if defined $parms{target}; |
|
109
|
0
|
0
|
0
|
|
|
0
|
%parms = $obj->parent()->convertstory(%parms) if defined($parms{picLoc}) || defined($parms{picOverLoc}) || defined($parms{balloonText}); |
|
|
|
|
0
|
|
|
|
|
|
110
|
0
|
|
|
|
|
0
|
foreach my $q (@FIELDS,'story','annotationList','targetList'){ |
|
111
|
0
|
0
|
|
|
|
0
|
$obj->{$q} = $parms{$q} if defined($parms{$q}); |
|
112
|
|
|
|
|
|
|
} |
|
113
|
0
|
|
0
|
|
|
0
|
$obj->{parent} = $parms{parent} || undef; |
|
114
|
0
|
0
|
0
|
|
|
0
|
$obj->{zerolen} = $parms{zerolen} || ($parms{cueType} =~ /(goto|regularEnd|returnEnd)/)?"true":"false"; |
|
115
|
0
|
|
|
|
|
0
|
return $obj; |
|
116
|
|
|
|
|
|
|
} |
|
117
|
|
|
|
|
|
|
|
|
118
|
|
|
|
|
|
|
=head2 fromxml() |
|
119
|
|
|
|
|
|
|
|
|
120
|
|
|
|
|
|
|
=cut |
|
121
|
|
|
|
|
|
|
|
|
122
|
|
|
|
|
|
|
sub fromxml { |
|
123
|
1
|
|
|
1
|
1
|
2
|
my $parent = shift; |
|
124
|
1
|
|
|
|
|
1
|
my $s = shift; |
|
125
|
1
|
|
|
|
|
1
|
my %s = %{$s}; |
|
|
1
|
|
|
|
|
10
|
|
|
126
|
1
|
|
|
|
|
3
|
my $cueType = $s{cueType}; |
|
127
|
1
|
|
|
|
|
1
|
my %p; |
|
128
|
1
|
|
|
|
|
2
|
foreach my $q (@FIELDS){ |
|
129
|
22
|
100
|
|
|
|
36
|
$p{$q} = $s{$q} if defined($s{$q}); |
|
130
|
|
|
|
|
|
|
} |
|
131
|
1
|
|
|
|
|
2
|
$p{parent} = $parent; |
|
132
|
|
|
|
|
|
|
|
|
133
|
1
|
50
|
|
|
|
4
|
$p{story} = Video::CPL::Story::fromxml($s{story}[0]) if defined($s{story}[0]); |
|
134
|
1
|
50
|
|
|
|
3
|
$p{targetList} = Video::CPL::TargetList::fromxml($s{targetList}[0]) if defined($s{targetList}[0]); |
|
135
|
1
|
50
|
|
|
|
6
|
$p{annotationList} = Video::CPL::AnnotationList::fromxml($s{annotationList}[0]) if defined($s{annotationList}[0]); |
|
136
|
1
|
|
|
|
|
9
|
return new Video::CPL::Cue(%p); |
|
137
|
|
|
|
|
|
|
} |
|
138
|
|
|
|
|
|
|
|
|
139
|
|
|
|
|
|
|
=head2 setdl() |
|
140
|
|
|
|
|
|
|
|
|
141
|
|
|
|
|
|
|
=cut |
|
142
|
|
|
|
|
|
|
|
|
143
|
|
|
|
|
|
|
sub setdl { |
|
144
|
0
|
|
|
0
|
1
|
0
|
my $obj = shift; |
|
145
|
0
|
|
|
|
|
0
|
$obj->{dl} = shift; |
|
146
|
|
|
|
|
|
|
} |
|
147
|
|
|
|
|
|
|
|
|
148
|
|
|
|
|
|
|
=head2 addanno() |
|
149
|
|
|
|
|
|
|
|
|
150
|
|
|
|
|
|
|
=cut |
|
151
|
|
|
|
|
|
|
|
|
152
|
|
|
|
|
|
|
sub addanno { |
|
153
|
1
|
|
|
1
|
1
|
2
|
my $obj = shift; |
|
154
|
1
|
|
|
|
|
2
|
my @annos = @_; |
|
155
|
1
|
|
|
|
|
2
|
foreach my $x (@annos){ |
|
156
|
1
|
50
|
|
|
|
3
|
confess("Video::CPL::Cue::addanno needs a Video::CPL::Annotation\n") if ref($x) ne "Video::CPL::Annotation"; |
|
157
|
1
|
|
|
|
|
4
|
my $t = new Video::CPL::Target(cuePointRef=>$x->name()); |
|
158
|
1
|
50
|
|
|
|
3
|
if (defined $obj->{annotationList}){ |
|
159
|
0
|
|
|
|
|
0
|
$obj->annotationList()->pusht($t); |
|
160
|
|
|
|
|
|
|
} else { |
|
161
|
1
|
|
|
|
|
9
|
$obj->annotationList(new Video::CPL::AnnotationList(target=>[$t])); |
|
162
|
|
|
|
|
|
|
} |
|
163
|
1
|
|
|
|
|
1
|
push @{$obj->{annotations}},$t; |
|
|
1
|
|
|
|
|
3
|
|
|
164
|
|
|
|
|
|
|
} |
|
165
|
|
|
|
|
|
|
} |
|
166
|
|
|
|
|
|
|
|
|
167
|
|
|
|
|
|
|
=head2 annotations() |
|
168
|
|
|
|
|
|
|
|
|
169
|
|
|
|
|
|
|
=cut |
|
170
|
|
|
|
|
|
|
|
|
171
|
|
|
|
|
|
|
sub annotations { |
|
172
|
0
|
|
|
0
|
1
|
0
|
my $obj = shift; |
|
173
|
0
|
0
|
|
|
|
0
|
return @{$obj->{annotations}} if defined($obj->{annotations}); |
|
|
0
|
|
|
|
|
0
|
|
|
174
|
0
|
|
|
|
|
0
|
return (); |
|
175
|
|
|
|
|
|
|
} |
|
176
|
|
|
|
|
|
|
|
|
177
|
|
|
|
|
|
|
=head2 setstory() |
|
178
|
|
|
|
|
|
|
|
|
179
|
|
|
|
|
|
|
=cut |
|
180
|
|
|
|
|
|
|
|
|
181
|
|
|
|
|
|
|
sub setstory { |
|
182
|
0
|
|
|
0
|
1
|
0
|
my $obj = shift; |
|
183
|
0
|
|
|
|
|
0
|
my %parms = @_; |
|
184
|
0
|
|
0
|
|
|
0
|
my $text = $parms{text} || "no text"; |
|
185
|
0
|
|
0
|
|
|
0
|
my $pic = $parms{pic} || "picofself.jpg"; |
|
186
|
0
|
|
|
|
|
0
|
my $ret = Video::CPL::Story->new(balloon=>$text,pic=>$pic); |
|
187
|
0
|
|
|
|
|
0
|
$obj->{image} = $pic; |
|
188
|
0
|
|
|
|
|
0
|
$obj->{story} = $ret; |
|
189
|
|
|
|
|
|
|
} |
|
190
|
|
|
|
|
|
|
|
|
191
|
|
|
|
|
|
|
=head2 dostandard() |
|
192
|
|
|
|
|
|
|
|
|
193
|
|
|
|
|
|
|
dostandard is an internal utility routine for adding a cuepoint |
|
194
|
|
|
|
|
|
|
|
|
195
|
|
|
|
|
|
|
=cut |
|
196
|
|
|
|
|
|
|
|
|
197
|
|
|
|
|
|
|
sub dostandard { |
|
198
|
0
|
|
|
0
|
1
|
0
|
my $obj = shift; |
|
199
|
0
|
|
|
|
|
0
|
my $cueType = shift; |
|
200
|
0
|
|
|
|
|
0
|
my %parms = @_; |
|
201
|
0
|
0
|
|
|
|
0
|
die "Tried to set cue point ($obj->{name}) at time ($obj->{time}) to $cueType but it has already been set.\n" if !$obj->{setoninit}; |
|
202
|
0
|
|
|
|
|
0
|
$obj->{cueType} = $cueType; |
|
203
|
0
|
0
|
|
|
|
0
|
$obj->{canBeDestination} = $parms{canBeDestination} if defined($parms{canBeDestination}); |
|
204
|
0
|
0
|
|
|
|
0
|
$obj->{tags} = $parms{tags} if defined($parms{tags}); |
|
205
|
0
|
0
|
|
|
|
0
|
$obj->{interestURL} = $parms{URL} if defined($parms{URL}); |
|
206
|
0
|
0
|
|
|
|
0
|
$obj->{query} = $parms{query} if defined($parms{query}); |
|
207
|
0
|
0
|
|
|
|
0
|
$obj->{zerolen} = $parms{zerolen} if defined($parms{zerolen}); |
|
208
|
0
|
0
|
|
|
|
0
|
$obj->{dl} = $parms{dl} if $parms{dl}; |
|
209
|
0
|
0
|
|
|
|
0
|
$obj->{dlforever} = $parms{dlforever} if $parms{dlforever}; |
|
210
|
0
|
0
|
|
|
|
0
|
$obj->{al} = $parms{al} if $parms{al}; |
|
211
|
0
|
0
|
|
|
|
0
|
$obj->{tl} = $parms{tl} if $parms{tl}; |
|
212
|
0
|
0
|
|
|
|
0
|
$obj->{story} = $parms{story} if $parms{story}; |
|
213
|
0
|
|
|
|
|
0
|
$obj->{name} = $parms{name}; |
|
214
|
0
|
|
|
|
|
0
|
return $obj; |
|
215
|
|
|
|
|
|
|
} |
|
216
|
|
|
|
|
|
|
|
|
217
|
|
|
|
|
|
|
=head2 regular() |
|
218
|
|
|
|
|
|
|
|
|
219
|
|
|
|
|
|
|
=cut |
|
220
|
|
|
|
|
|
|
|
|
221
|
|
|
|
|
|
|
sub regular { |
|
222
|
0
|
|
|
0
|
1
|
0
|
my $obj = shift; |
|
223
|
0
|
|
|
|
|
0
|
my %parms = @_; |
|
224
|
0
|
|
|
|
|
0
|
return $obj->dostandard("regular",%parms); |
|
225
|
|
|
|
|
|
|
} |
|
226
|
|
|
|
|
|
|
|
|
227
|
|
|
|
|
|
|
=head2 returnend() |
|
228
|
|
|
|
|
|
|
|
|
229
|
|
|
|
|
|
|
=cut |
|
230
|
|
|
|
|
|
|
|
|
231
|
|
|
|
|
|
|
sub returnend { |
|
232
|
0
|
|
|
0
|
1
|
0
|
my $obj = shift; |
|
233
|
0
|
|
|
|
|
0
|
my %parms = @_; |
|
234
|
0
|
|
|
|
|
0
|
$obj->dostandard("returnEnd",%parms); |
|
235
|
0
|
|
|
|
|
0
|
return; |
|
236
|
|
|
|
|
|
|
} |
|
237
|
|
|
|
|
|
|
|
|
238
|
|
|
|
|
|
|
=head2 programend() |
|
239
|
|
|
|
|
|
|
|
|
240
|
|
|
|
|
|
|
=cut |
|
241
|
|
|
|
|
|
|
|
|
242
|
|
|
|
|
|
|
sub programend { |
|
243
|
0
|
|
|
0
|
1
|
0
|
my $obj = shift; |
|
244
|
0
|
|
|
|
|
0
|
my %parms = @_; |
|
245
|
0
|
|
|
|
|
0
|
$obj->dostandard("programEnd",%parms); |
|
246
|
0
|
|
|
|
|
0
|
return; |
|
247
|
|
|
|
|
|
|
} |
|
248
|
|
|
|
|
|
|
|
|
249
|
|
|
|
|
|
|
=head2 choice() |
|
250
|
|
|
|
|
|
|
|
|
251
|
|
|
|
|
|
|
=cut |
|
252
|
|
|
|
|
|
|
|
|
253
|
|
|
|
|
|
|
sub choice { |
|
254
|
0
|
|
|
0
|
1
|
0
|
my $obj = shift; |
|
255
|
0
|
|
|
|
|
0
|
my %parms = @_; |
|
256
|
0
|
0
|
|
|
|
0
|
die "Tried to set cue point ($obj->{name}) at time ($obj->{time}) to choice but it has already been set.\n" if !$obj->{setoninit}; |
|
257
|
0
|
|
|
|
|
0
|
$obj->{setoninit} = 0; |
|
258
|
0
|
|
|
|
|
0
|
$obj->{cueType} = "userChoice"; |
|
259
|
0
|
0
|
|
|
|
0
|
$obj->{tl} = $parms{tl} if defined($parms{tl}); |
|
260
|
|
|
|
|
|
|
#set up target list; |
|
261
|
|
|
|
|
|
|
#$ctv->numcue(1)->choice(tltext=>"Where do you want to go?",tl=>[@newlabels]); |
|
262
|
0
|
|
|
|
|
0
|
return $obj; |
|
263
|
|
|
|
|
|
|
} |
|
264
|
|
|
|
|
|
|
|
|
265
|
|
|
|
|
|
|
=head2 goto() |
|
266
|
|
|
|
|
|
|
|
|
267
|
|
|
|
|
|
|
=cut |
|
268
|
|
|
|
|
|
|
|
|
269
|
|
|
|
|
|
|
sub goto { |
|
270
|
|
|
|
|
|
|
#OLD CODE |
|
271
|
|
|
|
|
|
|
#my $obj = shift; |
|
272
|
|
|
|
|
|
|
#my %parms = @_; |
|
273
|
|
|
|
|
|
|
#if just a Video::CPL::Cue, throw a warning about deprecated, and make this a goto. |
|
274
|
|
|
|
|
|
|
#otherwise we mean add a goto annotation to this cue point, which therefore |
|
275
|
|
|
|
|
|
|
#needs to have its parent set. |
|
276
|
|
|
|
|
|
|
#my $dest = shift; |
|
277
|
|
|
|
|
|
|
#my $destcue; |
|
278
|
|
|
|
|
|
|
#if (ref($dest) eq "Video::CPL::Cue"){ |
|
279
|
|
|
|
|
|
|
#$destcue = $dest; |
|
280
|
|
|
|
|
|
|
#} else { |
|
281
|
|
|
|
|
|
|
#$destcue = $obj->{parent}->cue($dest); |
|
282
|
|
|
|
|
|
|
#} |
|
283
|
|
|
|
|
|
|
#$obj->{cueType} = "goto"; |
|
284
|
|
|
|
|
|
|
#$obj->{tl} = [$parms{dest}]; |
|
285
|
|
|
|
|
|
|
#$obj->{story} = $parms{story} if defined($parms{story}); |
|
286
|
|
|
|
|
|
|
#return $obj; |
|
287
|
|
|
|
|
|
|
# |
|
288
|
|
|
|
|
|
|
#NEW CODE |
|
289
|
|
|
|
|
|
|
# For the common case that we want to create a unique goto annotation right here |
|
290
|
|
|
|
|
|
|
# That means creating an annotation, |
|
291
|
|
|
|
|
|
|
# adding it to the CPL, |
|
292
|
|
|
|
|
|
|
# and adding a cuePointRef to it to this Cue |
|
293
|
0
|
|
|
0
|
1
|
0
|
my $obj = shift; |
|
294
|
0
|
0
|
|
|
|
0
|
confess("Bad hash to Video::CPL::Cue::goto. Are you using an old version? Try creating a whole new Cue and adding it which will replace the old.\n") if $#_ == 0; |
|
295
|
0
|
|
|
|
|
0
|
my %p = @_; |
|
296
|
0
|
0
|
|
|
|
0
|
confess("Video::CPL::Cue::Annotation called without parent\n") if !defined $obj->parent(); |
|
297
|
0
|
|
|
|
|
0
|
$p{clickBehavior} = "goto"; |
|
298
|
0
|
0
|
|
|
|
0
|
$p{parent} = $obj->parent() if !exists $p{parent}; |
|
299
|
0
|
0
|
|
|
|
0
|
%p = $obj->parent()->converttarget(%p) if exists $p{target}; |
|
300
|
0
|
0
|
|
|
|
0
|
confess("Video::CPL::Cue::goto still has a target, this can not be happening.\n") if exists $p{target}; |
|
301
|
0
|
|
|
|
|
0
|
my $a = new Video::CPL::Annotation(%p); |
|
302
|
0
|
|
|
|
|
0
|
$obj->parent()->addanno($a); |
|
303
|
0
|
|
|
|
|
0
|
$obj->addanno($a); |
|
304
|
0
|
|
|
|
|
0
|
return $a; |
|
305
|
|
|
|
|
|
|
} |
|
306
|
|
|
|
|
|
|
|
|
307
|
|
|
|
|
|
|
=head2 decoration(%parms) |
|
308
|
|
|
|
|
|
|
|
|
309
|
|
|
|
|
|
|
Add a new clickBehavior=decoration annotation to this Video::CPL::Cue. Parameters are the same as for CPL::Annotation::new except that clickBehavior=decoration is implied. |
|
310
|
|
|
|
|
|
|
|
|
311
|
|
|
|
|
|
|
=cut |
|
312
|
|
|
|
|
|
|
|
|
313
|
|
|
|
|
|
|
sub decoration { |
|
314
|
0
|
|
|
0
|
1
|
0
|
my $obj = shift; |
|
315
|
0
|
|
|
|
|
0
|
my %p = @_; |
|
316
|
0
|
0
|
|
|
|
0
|
confess("Video::CPL::Cue::Annotation called without parent\n") if !defined $obj->parent(); |
|
317
|
0
|
|
|
|
|
0
|
$p{clickBehavior} = "decoration"; |
|
318
|
0
|
0
|
|
|
|
0
|
$p{parent} = $obj->parent() if !exists $p{parent}; |
|
319
|
0
|
|
|
|
|
0
|
my $a = new Video::CPL::Annotation(%p); |
|
320
|
0
|
|
|
|
|
0
|
$obj->parent()->addanno($a); |
|
321
|
0
|
|
|
|
|
0
|
$obj->addanno($a); |
|
322
|
0
|
|
|
|
|
0
|
return $a; |
|
323
|
|
|
|
|
|
|
} |
|
324
|
|
|
|
|
|
|
|
|
325
|
|
|
|
|
|
|
=head2 javascript(%parms) |
|
326
|
|
|
|
|
|
|
|
|
327
|
|
|
|
|
|
|
Add a new clickBehavior=javascript annotation to this Video::CPL::Cue. Parameters are the same as for CPL::Annotation::new except that clickBehavior=javascript is implied. |
|
328
|
|
|
|
|
|
|
|
|
329
|
|
|
|
|
|
|
=cut |
|
330
|
|
|
|
|
|
|
|
|
331
|
|
|
|
|
|
|
sub javascript { |
|
332
|
0
|
|
|
0
|
1
|
0
|
my $obj = shift; |
|
333
|
0
|
|
|
|
|
0
|
my %p = @_; |
|
334
|
0
|
0
|
|
|
|
0
|
confess("Video::CPL::Cue::javascript called without parent\n") if !defined $obj->parent(); |
|
335
|
0
|
|
|
|
|
0
|
$p{clickBehavior} = "javascript"; |
|
336
|
0
|
0
|
|
|
|
0
|
$p{parent} = $obj->parent() if !exists $p{parent}; |
|
337
|
0
|
|
|
|
|
0
|
my $a = new Video::CPL::Annotation(%p); |
|
338
|
0
|
|
|
|
|
0
|
$obj->parent()->addanno($a); |
|
339
|
0
|
|
|
|
|
0
|
$obj->addanno($a); |
|
340
|
0
|
|
|
|
|
0
|
return $a; |
|
341
|
|
|
|
|
|
|
} |
|
342
|
|
|
|
|
|
|
|
|
343
|
|
|
|
|
|
|
=head2 returnEnd(%parms) |
|
344
|
|
|
|
|
|
|
|
|
345
|
|
|
|
|
|
|
Add a new clickBehavior=returnEnd annotation to this Video::CPL::Cue. Parameters are the same as for Video::CPL::Annotation::new except that clickBehavior=returnEnd is implied. |
|
346
|
|
|
|
|
|
|
|
|
347
|
|
|
|
|
|
|
=cut |
|
348
|
|
|
|
|
|
|
|
|
349
|
|
|
|
|
|
|
sub returnEnd { |
|
350
|
0
|
|
|
0
|
1
|
0
|
my $obj = shift; |
|
351
|
0
|
|
|
|
|
0
|
my %p = @_; |
|
352
|
0
|
0
|
|
|
|
0
|
confess("Video::CPL::Cue::Annotation called without parent\n") if !defined $obj->parent(); |
|
353
|
0
|
|
|
|
|
0
|
$p{clickBehavior} = "returnEnd"; |
|
354
|
0
|
0
|
|
|
|
0
|
$p{parent} = $obj->parent() if !exists $p{parent}; |
|
355
|
0
|
|
|
|
|
0
|
my $a = new Video::CPL::Annotation(%p); |
|
356
|
0
|
|
|
|
|
0
|
$obj->parent()->addanno($a); |
|
357
|
0
|
|
|
|
|
0
|
$obj->addanno($a); |
|
358
|
0
|
|
|
|
|
0
|
return $a; |
|
359
|
|
|
|
|
|
|
} |
|
360
|
|
|
|
|
|
|
|
|
361
|
|
|
|
|
|
|
=head2 xml() |
|
362
|
|
|
|
|
|
|
|
|
363
|
|
|
|
|
|
|
Return the text form of a Cue object. |
|
364
|
|
|
|
|
|
|
|
|
365
|
|
|
|
|
|
|
=cut |
|
366
|
|
|
|
|
|
|
|
|
367
|
|
|
|
|
|
|
sub xmlo { |
|
368
|
1
|
|
|
1
|
0
|
1
|
my $obj = shift; |
|
369
|
1
|
|
|
|
|
2
|
my $xo = shift; |
|
370
|
1
|
|
|
|
|
1
|
my %p; |
|
371
|
1
|
|
|
|
|
2
|
foreach my $q (@FIELDS){ |
|
372
|
22
|
100
|
|
|
|
42
|
$p{$q} = $obj->{$q} if defined($obj->{$q}); |
|
373
|
|
|
|
|
|
|
} |
|
374
|
1
|
|
|
|
|
9
|
$xo->startTag("cuePt",%p); |
|
375
|
1
|
50
|
|
|
|
154
|
$obj->story()->xmlo($xo) if defined $obj->story(); |
|
376
|
|
|
|
|
|
|
#$obj->mxmlInCPL()->xmlo($xo) if $obj->mxmlInCPL();#seems wrong, it is not a list |
|
377
|
|
|
|
|
|
|
#$obj->directoryList()->xmlo($xo) if $obj->directoryList(); |
|
378
|
1
|
50
|
|
|
|
3
|
$obj->targetList()->xmlo($xo) if $obj->targetList(); |
|
379
|
1
|
50
|
|
|
|
3
|
$obj->annotationList()->xmlo($xo) if defined $obj->annotationList(); |
|
380
|
1
|
|
|
|
|
19
|
$xo->endTag("cuePt"); |
|
381
|
1
|
|
|
|
|
12
|
return; |
|
382
|
|
|
|
|
|
|
} |
|
383
|
|
|
|
|
|
|
|
|
384
|
|
|
|
|
|
|
sub xml { |
|
385
|
0
|
|
|
0
|
1
|
|
my $obj = shift; |
|
386
|
0
|
|
|
|
|
|
my $ret; |
|
387
|
0
|
|
|
|
|
|
my $a = ""; |
|
388
|
0
|
|
|
|
|
|
confess "Video::CPL::Cue::xml not updated\n"; |
|
389
|
0
|
|
|
|
|
|
my $xo = new XML::Writer(OUTPUT=>\$a); |
|
390
|
0
|
|
|
|
|
|
my $cueType = $obj->{cueType}; |
|
391
|
0
|
|
|
|
|
|
my $name = $obj->{name}; |
|
392
|
0
|
|
|
|
|
|
$ret .= "
|
|
393
|
0
|
|
|
|
|
|
foreach my $q (@FIELDS){ |
|
394
|
0
|
0
|
|
|
|
|
$ret .= "$q=\"$obj->{$q}\" " if defined($obj->{$q}); |
|
395
|
|
|
|
|
|
|
} |
|
396
|
0
|
|
|
|
|
|
$ret .= ">\n"; |
|
397
|
0
|
0
|
|
|
|
|
if ($obj->{story}){ |
|
398
|
0
|
|
|
|
|
|
my $st = $obj->{story}; |
|
399
|
0
|
|
|
|
|
|
$ret .= $st->xml(); |
|
400
|
|
|
|
|
|
|
#my $btext = $st->{balloonText}; |
|
401
|
|
|
|
|
|
|
#my $picloc = $st->{picLoc}; |
|
402
|
|
|
|
|
|
|
#$ret .= "\n"; |
|
403
|
|
|
|
|
|
|
} |
|
404
|
0
|
0
|
|
|
|
|
if ($obj->{mxmlInCPL}){ |
|
405
|
0
|
|
|
|
|
|
$ret .= XMLout($obj->{mxmlInCPL}); |
|
406
|
|
|
|
|
|
|
} |
|
407
|
0
|
0
|
|
|
|
|
if ($obj->{dl}){ |
|
408
|
0
|
|
|
|
|
|
my $dl = $obj->{dl}; |
|
409
|
0
|
|
|
|
|
|
my $dltext = $obj->{dltext}; |
|
410
|
0
|
|
|
|
|
|
$ret .= "
|
|
411
|
0
|
0
|
|
|
|
|
$ret .= "forever=\"$obj->{dlforever}\" " if $obj->{dlforever}; |
|
412
|
0
|
|
|
|
|
|
$ret .= "headerText=\"$dltext\">\n"; |
|
413
|
0
|
|
|
|
|
|
foreach my $t (@$dl){ |
|
414
|
0
|
|
|
|
|
|
$ret .= $t->printref($obj->{parent}); |
|
415
|
|
|
|
|
|
|
} |
|
416
|
0
|
|
|
|
|
|
$ret .= "\n"; |
|
417
|
|
|
|
|
|
|
} |
|
418
|
0
|
0
|
|
|
|
|
if ($obj->{tl}){ |
|
419
|
|
|
|
|
|
|
#and here, we will always have an array of cue points? |
|
420
|
|
|
|
|
|
|
#YES until further notice |
|
421
|
0
|
|
|
|
|
|
my $tl = $obj->{tl}; |
|
422
|
0
|
|
|
|
|
|
my $tltext = $obj->{tltext}; |
|
423
|
0
|
|
|
|
|
|
my $tlpic = $obj->{tlpic}; |
|
424
|
0
|
|
|
|
|
|
$ret .= "
|
|
425
|
0
|
0
|
|
|
|
|
$ret .= "headerText=\"$tltext\" " if $tltext; |
|
426
|
0
|
0
|
|
|
|
|
$ret .= "backgroundPicLoc=\"$tlpic\"" if $tlpic; |
|
427
|
0
|
|
|
|
|
|
$ret .= ">\n"; |
|
428
|
0
|
|
|
|
|
|
foreach my $t (@$tl){ |
|
429
|
0
|
0
|
|
|
|
|
if (ref($t)){ |
|
430
|
0
|
|
|
|
|
|
$ret .= $t->printref($obj->{parent}); |
|
431
|
|
|
|
|
|
|
} else { |
|
432
|
|
|
|
|
|
|
#presumed string |
|
433
|
0
|
|
|
|
|
|
$ret .= "\n"; |
|
434
|
|
|
|
|
|
|
} |
|
435
|
|
|
|
|
|
|
} |
|
436
|
0
|
|
|
|
|
|
$ret .= "\n"; |
|
437
|
|
|
|
|
|
|
} |
|
438
|
0
|
|
|
|
|
|
my @anno = @{$obj->{annotations}}; |
|
|
0
|
|
|
|
|
|
|
|
439
|
0
|
0
|
|
|
|
|
if (@anno){ |
|
440
|
0
|
|
|
|
|
|
$ret .= "\n"; |
|
441
|
0
|
|
|
|
|
|
foreach my $x (@anno){ |
|
442
|
0
|
0
|
0
|
|
|
|
confess("Video::CPL::Cue::xml is trying to print out annotations but parent is missing obj(".Dumper($obj).") x(".Dumper($x).")anno(".Dumper(\@anno).")\n") if !$obj->{parent} || !$x; |
|
443
|
0
|
|
|
|
|
|
$ret .= $x->printref($obj->{parent}); |
|
444
|
|
|
|
|
|
|
#my $name = $x->{name}; |
|
445
|
|
|
|
|
|
|
#$ret .= "\n"; |
|
446
|
|
|
|
|
|
|
} |
|
447
|
0
|
|
|
|
|
|
$ret .= "\n"; |
|
448
|
|
|
|
|
|
|
} |
|
449
|
0
|
|
|
|
|
|
$ret .= "\n"; |
|
450
|
0
|
|
|
|
|
|
return $ret; |
|
451
|
|
|
|
|
|
|
} |
|
452
|
|
|
|
|
|
|
|
|
453
|
|
|
|
|
|
|
=head2 reffromobj($cplobj) |
|
454
|
|
|
|
|
|
|
|
|
455
|
|
|
|
|
|
|
return the string needed to refer to this in the context of a particular CPL object. |
|
456
|
|
|
|
|
|
|
|
|
457
|
|
|
|
|
|
|
=cut |
|
458
|
|
|
|
|
|
|
|
|
459
|
|
|
|
|
|
|
sub reffromobj { |
|
460
|
0
|
|
|
0
|
1
|
|
my $obj = shift; |
|
461
|
0
|
|
|
|
|
|
my $cpl = shift; |
|
462
|
0
|
0
|
|
|
|
|
confess("reffromobj but no parent\n") if !defined($obj->{parent}); |
|
463
|
0
|
0
|
|
|
|
|
return $obj->{name} if $obj->parent() == $cpl; |
|
464
|
0
|
|
|
|
|
|
my $ctvfile = $obj->parent()->{ctvfilename}; |
|
465
|
0
|
|
|
|
|
|
return "/$ctvfile\#$obj->{name}"; |
|
466
|
|
|
|
|
|
|
#TODO: support for CPL objects with a different domain, think about dynamic |
|
467
|
|
|
|
|
|
|
} |
|
468
|
|
|
|
|
|
|
|
|
469
|
|
|
|
|
|
|
=head2 printref() |
|
470
|
|
|
|
|
|
|
|
|
471
|
|
|
|
|
|
|
=cut |
|
472
|
|
|
|
|
|
|
|
|
473
|
|
|
|
|
|
|
sub printref { |
|
474
|
0
|
|
|
0
|
1
|
|
my $obj = shift; |
|
475
|
0
|
|
|
|
|
|
my $par = shift; |
|
476
|
0
|
0
|
|
|
|
|
confess("printref but no parent\n") if !defined($obj->{parent}); |
|
477
|
0
|
0
|
|
|
|
|
if ($par eq $obj->{parent}){ |
|
478
|
|
|
|
|
|
|
#local reference |
|
479
|
0
|
|
|
|
|
|
return "{name}\"/>\n"; |
|
480
|
|
|
|
|
|
|
} else { |
|
481
|
|
|
|
|
|
|
#This is a bit fragile and does not support remote or non-top level directories Thought needed |
|
482
|
|
|
|
|
|
|
#remote reference |
|
483
|
|
|
|
|
|
|
#my $ref = $obj->{parent}->{ref}; |
|
484
|
0
|
|
|
|
|
|
my $ctvfile = $obj->{parent}->{ctvfilename}; |
|
485
|
|
|
|
|
|
|
#return "{name}\"/>\n"; |
|
486
|
0
|
|
|
|
|
|
return "{name}\"/>\n"; |
|
487
|
|
|
|
|
|
|
} |
|
488
|
|
|
|
|
|
|
} |
|
489
|
|
|
|
|
|
|
=head1 AUTHOR |
|
490
|
|
|
|
|
|
|
|
|
491
|
|
|
|
|
|
|
Carl Rosenberg, C<< >> |
|
492
|
|
|
|
|
|
|
|
|
493
|
|
|
|
|
|
|
=head1 BUGS |
|
494
|
|
|
|
|
|
|
|
|
495
|
|
|
|
|
|
|
Please report any bugs or feature requests to Coincident TV. |
|
496
|
|
|
|
|
|
|
|
|
497
|
|
|
|
|
|
|
=head1 SUPPORT |
|
498
|
|
|
|
|
|
|
|
|
499
|
|
|
|
|
|
|
You can find documentation for this module with the perldoc command. |
|
500
|
|
|
|
|
|
|
|
|
501
|
|
|
|
|
|
|
perldoc Video::CPL::Cue |
|
502
|
|
|
|
|
|
|
|
|
503
|
|
|
|
|
|
|
|
|
504
|
|
|
|
|
|
|
=head1 LICENSE AND COPYRIGHT |
|
505
|
|
|
|
|
|
|
|
|
506
|
|
|
|
|
|
|
Copyright 2010 Coincident TV |
|
507
|
|
|
|
|
|
|
|
|
508
|
|
|
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License"); |
|
509
|
|
|
|
|
|
|
you may not use this file except in compliance with the License. |
|
510
|
|
|
|
|
|
|
You may obtain a copy of the License at |
|
511
|
|
|
|
|
|
|
|
|
512
|
|
|
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0 |
|
513
|
|
|
|
|
|
|
|
|
514
|
|
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software |
|
515
|
|
|
|
|
|
|
distributed under the License is distributed on an "AS IS" BASIS, |
|
516
|
|
|
|
|
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
517
|
|
|
|
|
|
|
See the License for the specific language governing permissions and |
|
518
|
|
|
|
|
|
|
limitations under the License. |
|
519
|
|
|
|
|
|
|
|
|
520
|
|
|
|
|
|
|
=cut |
|
521
|
|
|
|
|
|
|
|
|
522
|
|
|
|
|
|
|
1; # End of Video::CPL::Cue |