/lib/SDL/SMPEG.pm

http://github.com/PerlGameDev/SDL · Perl · 119 lines · 91 code · 27 blank · 1 comment · 4 complexity · 2fbe91b8c072df40288018e86af25d92 MD5 · raw file

  1. package SDL::SMPEG;
  2. use strict;
  3. use warnings;
  4. use Carp;
  5. use SDL;
  6. use SDL::Surface;
  7. use SDL::SMPEG::Info;
  8. use Scalar::Util 'refaddr';
  9. use Data::Dumper;
  10. our @ISA = qw(Exporter DynaLoader);
  11. use SDL::Internal::Loader;
  12. internal_load_dlls(__PACKAGE__);
  13. our $VERSION = 2.548;
  14. bootstrap SDL::SMPEG;
  15. my %_info;
  16. sub new {
  17. my $class = shift;
  18. my %options = @_;
  19. my $n = $options{-name}
  20. || die "SDL::SMPEG must supply a filename to SDL::SMPEG::new\n";
  21. my $a = $options{'-audio'} ? 1 : 0;
  22. my $info = SDL::SMPEG::Info->new();
  23. my $self = NewSMPEG( $n, $info, $a );
  24. $_info{ refaddr $self } = $info;
  25. Carp::confess SDL::get_error() unless $self;
  26. $self->audio(1);
  27. $self->video(1);
  28. return $self;
  29. }
  30. sub DESTROY {
  31. FreeSMPEG( $_[0] );
  32. }
  33. sub error {
  34. SMPEGError( $_[0] );
  35. }
  36. sub audio {
  37. SMPEGEnableAudio( $_[0], $_[1] );
  38. }
  39. sub video {
  40. SMPEGEnableVideo( $_[0], $_[1] );
  41. }
  42. sub volume {
  43. SMPEGSetVolume( $_[0] , $_[1] );
  44. }
  45. sub display {
  46. Carp::confess "Display requires a SDL::Surface\n"
  47. unless $_[1]->isa('SDL::Surface');
  48. SMPEGSetDisplay( $_[0], $_[1] , 0 );
  49. }
  50. sub scale {
  51. return SMPEGScaleXY( $_[0], $_[1], $_[2] ) if ( @_ == 3 );
  52. return SMPEGScaleXY( $_[0], $_[1]->width(), $_[1]->height() )
  53. if $_[1]->isa('SDL::Surface');
  54. SMPEGScale( $_[0] , $_[1] );
  55. }
  56. sub play {
  57. SMPEGPlay( $_[0]);
  58. }
  59. sub pause {
  60. SMPEGPause( $_[0] );
  61. }
  62. sub stop {
  63. SMPEGStop( $_[0] );
  64. }
  65. sub rewind {
  66. SMPEGRewind( $_[0] );
  67. }
  68. sub seek {
  69. SMPEGSeek( $_[0], $_[1] );
  70. }
  71. sub skip {
  72. SMPEGSkip( $_[0], $_[1] );
  73. }
  74. sub loop {
  75. SMPEGLoop( $_[0], $_[1] );
  76. }
  77. sub region {
  78. Carp::confess "region requires a SDL::Rect\n"
  79. unless $_[1]->isa('SDL::Rect');
  80. SMPEGDisplayRegion( $_[0], $_[1] );
  81. }
  82. sub frame {
  83. SMPEGRenderFrame( $_[0], $_[1] );
  84. }
  85. sub info {
  86. # SDL::SMPEG::Info->new( -from => $_[0] );
  87. $_info{ refaddr $_[0] };
  88. }
  89. sub status {
  90. SMPEGStatus( $_[0] );
  91. }
  92. 1;