Applied Magnet's Patch
[sdlgit/SDL_perl.git] / lib / SDL / SMPEG.pm
1 #!perl
2 package SDL::SMPEG;
3
4 use strict;
5 use warnings;
6 use Carp;
7 use SDL;
8 use SDL::Surface;
9 use SDL::MPEG;
10
11 sub new {
12         my $proto = shift;
13         my $class = ref($proto) || $proto;
14         my %options = @_;
15
16         verify (%options, qw/ -name -audio / ) if $SDL::DEBUG;
17
18         my $n = $options{-name} || die "SDL::SMPEG must supply a filename to SDL::SMPEG::new\n";
19         my $a = $options{'-audio'} ? 1 : 0;
20         my $info = new SDL::MPEG();
21         
22         my $self = \SDL::NewSMPEG($n,$$info,$a);
23         croak SDL::GetError() unless $$self;
24         bless $self,$class;
25         $self->audio(1);
26         $self->video(1);
27         return $self, $info;
28 }
29
30 sub DESTROY {
31         SDL::FreeSMPEG(${$_[0]});
32 }
33
34 sub error {
35         SDL::SMPEGError(${$_[0]});
36 }
37
38 sub audio {
39         SDL::SMPEGEnableAudio( ${$_[0]}, $_[1]);
40 }
41
42 sub video {
43         SDL::SMPEGEnableSMPEG( ${$_[0]}, $_[1]);
44 }
45
46 sub volume {
47         SDL::SMPEGSetVolume( ${$_[0]}, $_[1] );
48 }
49
50 sub display {
51         croak "SDL::SMPEG::Display requires a SDL::Surface\n" unless $_[1]->isa('SDL::Surface');
52         SDL::SMPEGSetDisplay( ${$_[0]}, ${$_[1]}, 0);
53 }
54
55 sub scale {
56         return SDL::SMPEGScaleXY(${$_[0]},$_[1],$_[2]) if (@_ == 3 );
57         return SDL::SMPEGScaleXY(${$_[0]},$_[1]->width(),$_[1]->height()) if $_[1]->isa('SDL::Surface');
58         SDL::SMPEGScale(${$_[0]},$_[1]);
59 }
60
61 sub play {
62         SDL::SMPEGPlay(${$_[0]});
63 }
64
65 sub pause {
66         SDL::SMPEGPause(${$_[0]});
67 }
68
69 sub stop {
70         SDL::SMPEGStop(${$_[0]});
71 }
72
73 sub rewind {
74         SDL::SMPEGRewind(${$_[0]});
75 }
76
77 sub seek {
78         SDL::SMPEGSeek(${$_[0]},$_[1]);
79 }
80
81 sub skip {
82         SDL::SMPEGSkip(${$_[0]},$_[1]);
83 }
84
85 sub loop {
86         SDL::SMPEGLoop(${$_[0]},$_[1]);
87 }
88
89 sub region {
90         croak "SDL::SMPEG::region requires a SDL::Rect\n" unless $_[1]->isa('SDL::Rect');
91         SDL::SMPEGDisplayRegion(${$_[0]},${$_[1]});
92 }
93
94 sub frame {
95         SDL::SMPEGRenderFrame(${$_[0]},$_[1]);
96 }
97
98 sub info {
99         new SDL::MPEG -from => $_[0];
100 }
101
102 sub status {
103         SDL::SMPEGStatus(${$_[0]});
104 }
105
106 1;