Importing SDLPerl 2.2
[sdlgit/SDL_perl.git] / lib / SDL / Video.pm
CommitLineData
bfd90409 1#!/usr/bin/env perl
2#
3# Video.pm
4#
5# Copyright (C) 2005 David J. Goehrig <dgoehrig@cpan.org>
6#
7# ------------------------------------------------------------------------------
8#
9# This library is free software; you can redistribute it and/or
10# modify it under the terms of the GNU Lesser General Public
11# License as published by the Free Software Foundation; either
12# version 2.1 of the License, or (at your option) any later version.
13#
14# This library is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17# Lesser General Public License for more details.
18#
19# You should have received a copy of the GNU Lesser General Public
20# License along with this library; if not, write to the Free Software
21# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22#
23# ------------------------------------------------------------------------------
24#
25# Please feel free to send questions, suggestions or improvements to:
26#
27# David J. Goehrig
28# dgoehrig@cpan.org
29#
30
31package SDL::Video;
32
33use strict;
34use SDL;
35use SDL::Surface;
36use SDL::MPEG;
37
38sub new {
39 my $proto = shift;
40 my $class = ref($proto) || $proto;
41 my %options = @_;
42
43 verify (%options, qw/ -name -audio / ) if $SDL::DEBUG;
44
45 my $n = $options{-name} || die "SDL::Video must supply a filename to SDL::Video::new\n";
46 my $a = $options{'-audio'} ? 1 : 0;
47 my $info = new SDL::MPEG();
48
49 my $self = \SDL::NewSMPEG($n,$$info,$a);
50 die SDL::GetError() unless $$self;
51 bless $self,$class;
52 $self->audio(1);
53 $self->video(1);
54 return $self, $info;
55}
56
57sub DESTROY {
58 SDL::FreeSMPEG(${$_[0]});
59}
60
61sub error {
62 SDL::SMPEGError(${$_[0]});
63}
64
65sub audio {
66 SDL::SMPEGEnableAudio( ${$_[0]}, $_[1]);
67}
68
69sub video {
70 SDL::SMPEGEnableVideo( ${$_[0]}, $_[1]);
71}
72
73sub volume {
74 SDL::SMPEGSetVolume( ${$_[0]}, $_[1] );
75}
76
77sub display {
78 die "SDL::Video::Display requires a SDL::Surface\n" unless $_[1]->isa('SDL::Surface');
79 SDL::SMPEGSetDisplay( ${$_[0]}, ${$_[1]}, 0);
80}
81
82sub scale {
83 return SDL::SMPEGScaleXY(${$_[0]},$_[1],$_[2]) if (@_ == 3 );
84 return SDL::SMPEGScaleXY(${$_[0]},$_[1]->width(),$_[1]->height()) if $_[1]->isa('SDL::Surface');
85 SDL::SMPEGScale(${$_[0]},$_[1]);
86}
87
88sub play {
89 SDL::SMPEGPlay(${$_[0]});
90}
91
92sub pause {
93 SDL::SMPEGPause(${$_[0]});
94}
95
96sub stop {
97 SDL::SMPEGStop(${$_[0]});
98}
99
100sub rewind {
101 SDL::SMPEGRewind(${$_[0]});
102}
103
104sub seek {
105 SDL::SMPEGSeek(${$_[0]},$_[1]);
106}
107
108sub skip {
109 SDL::SMPEGSkip(${$_[0]},$_[1]);
110}
111
112sub loop {
113 SDL::SMPEGLoop(${$_[0]},$_[1]);
114}
115
116sub region {
117 die "SDL::Video::region requires a SDL::Rect\n" unless $_[1]->isa('SDL::Rect');
118 SDL::SMPEGDisplayRegion(${$_[0]},${$_[1]});
119}
120
121sub frame {
122 SDL::SMPEGRenderFrame(${$_[0]},$_[1]);
123}
124
125sub info {
126 new SDL::MPEG -from => $_[0];
127}
128
129sub status {
130 SDL::SMPEGStatus(${$_[0]});
131}
132
1331;
134
135__END__;
136
137=pod
138
139
140=head1 NAME
141
142SDL::Video - a SDL perl extension
143
144=head1 SYNOPSIS
145
146 $video = new SDL::Video ( -name => 'pr0n.mpg' );
147
148=head1 DESCRIPTION
149
150C<SDL::Video> adds support for MPEG video to your
151SDL Perl application. Videos are objects bound to
152surfaces, whose playback is controled through the
153object's interface.
154
155=head2 METHODS
156
157
158=over 4
159
160=item *
161
162C<SDL::Video::error()> returns any error messages associated with playback
163
164=item *
165
166C<SDL::Video::audio(bool)> enables or disables audio playback, (on by default)
167
168=item *
169
170C<SDL::Video::video(bool)> enables or disable video playback, (on by default)
171
172=item *
173
174C<SDL::Video::loop(bool)> enables or disable playback looping (off by default)
175
176=item *
177
178C<SDL::Video::volume(int)> set the volume as per the mixer volume
179
180=item *
181
182C<SDL::Video:display(surface)> binds the clip to a display surface
183
184=item *
185
186C<SDL::Video::scale([x,y]|[surface]|int)> scales the clip by either x,y
187factors, scales to the image dimensions, or a single scalar.
188
189=item *
190
191C<SDL::Video::play()> plays the video clip, call C<SDL::Video::display()> before playing
192
193=item *
194
195C<SDL::Video::pause()> pauses video playback
196
197=item *
198
199C<SDL::Video::stop()> stops video playback
200
201=item *
202
203C<SDL::Video::rewind()> resets the clip to the beginning
204
205=item *
206
207C<SDL::Video::seek(offset)> seeks to a particular byte offset
208
209=item *
210
211C<SDL::Video::skip(time)> skips to a particular time
212
213=item *
214
215C<SDL::Video::region(rect)> takes a SDL::Rect and defines the display area
216
217=item *
218
219C<SDL::Video::frame(int)> renders a specific frame to the screen
220
221=item *
222
223C<SDL::Video::info()> returns a new C<SDL::MPEG> object reflecting the current status
224
225=item *
226
227C<SDL::Video::status()> returns either SMPEG_PLAYING or SMPEG_STOPPED or SMPEG_ERROR
228
229=back
230
231=head1 AUTHOR
232
233David J. Goehrig
234
235=head1 SEE ALSO
236
237perl(1) SDL::Surface(3) SDL::MPEG(3)
238
239=cut
240