- /* 
-     SMPEG - SDL MPEG Player Library 
-     Copyright (C) 1999  Loki Entertainment Software 
-      
-     - Modified by Michel Darricau from eProcess <mdarricau@eprocess.fr>  for popcorn - 
-   
-     This library is free software; you can redistribute it and/or 
-     modify it under the terms of the GNU Library General Public 
-     License as published by the Free Software Foundation; either 
-     version 2 of the License, or (at your option) any later version. 
-   
-     This library is distributed in the hope that it will be useful, 
-     but WITHOUT ANY WARRANTY; without even the implied warranty of 
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-     Library General Public License for more details. 
-   
-     You should have received a copy of the GNU Library General Public 
-     License along with this library; if not, write to the Free 
-     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 
- */ 
-   
- /* A virtual class to provide basic MPEG playback actions */ 
-   
- #ifndef _MPEGACTION_H_ 
- #define _MPEGACTION_H_ 
-   
- #include "SDL.h" 
- #include "MPEGfilter.h" 
-   
- typedef enum { 
-     MPEG_ERROR = -1, 
-     MPEG_STOPPED, 
-     MPEG_PLAYING 
- } MPEGstatus; 
-   
- class MPEGaction { 
- public: 
-     MPEGaction() { 
-         playing = false; 
-         paused = false; 
-         looping = false; 
-         play_time = 0.0; 
-     } 
-     virtual void Loop(bool toggle) { 
-         looping = toggle; 
-     } 
-     virtual double Time(void) {  /* Returns the time in seconds since start */ 
-         return play_time; 
-     } 
-     virtual void Play(void) = 0; 
-     virtual void Stop(void) = 0; 
-     virtual void Rewind(void) = 0; 
-     virtual void ResetSynchro(double) = 0; 
-     virtual void Skip(float seconds) = 0; 
-     virtual void Pause(void) {  /* A toggle action */ 
-         if ( paused ) { 
-             paused = false; 
-             Play(); 
-         } else { 
-             Stop(); 
-             paused = true; 
-         } 
-     } 
-                 /* Michel Darricau from eProcess <mdarricau@eprocess.fr>  conflict name in popcorn */ 
-     virtual MPEGstatus GetStatus(void) = 0; 
-   
- protected: 
-     bool playing; 
-     bool paused; 
-     bool looping; 
-     double play_time; 
-   
-     bool force_exit; 
-      
-     void ResetPause(void) { 
-         paused = false; 
-     } 
- }; 
-   
- /* For getting info about the audio portion of the stream */ 
- typedef struct MPEG_AudioInfo { 
-     int mpegversion; 
-     int mode; 
-     int frequency; 
-     int layer; 
-     int bitrate; 
-     int current_frame; 
- } MPEG_AudioInfo; 
-   
- /* Audio action class */ 
- class MPEGaudioaction : public MPEGaction { 
- public: 
-     virtual bool GetAudioInfo(MPEG_AudioInfo *info) { 
-         return(true); 
-     } 
-     virtual void Volume(int vol) = 0; 
- }; 
-   
- /* Matches the declaration of SDL_UpdateRect() */ 
- typedef void(*MPEG_DisplayCallback)(SDL_Surface* dst, int x, int y, 
-                                      unsigned int w, unsigned int h); 
-   
- /* For getting info about the video portion of the stream */ 
- typedef struct MPEG_VideoInfo { 
-     int width; 
-     int height; 
-     int current_frame; 
-     double current_fps; 
- } MPEG_VideoInfo; 
-   
- /* Video action class */ 
- class MPEGvideoaction : public MPEGaction { 
- public: 
-     virtual void SetTimeSource(MPEGaudioaction *source) { 
-         time_source = source; 
-     } 
-     virtual bool GetVideoInfo(MPEG_VideoInfo *info) { 
-         return(false); 
-     } 
-     virtual bool SetDisplay(SDL_Surface *dst, SDL_mutex *lock, 
-                                 MPEG_DisplayCallback callback) = 0; 
-     virtual void MoveDisplay(int x, int y) = 0; 
-     virtual void ScaleDisplayXY(int w, int h) = 0; 
-     virtual void SetDisplayRegion(int x, int y, int w, int h) = 0; 
-     virtual void RenderFrame(int frame) = 0; 
-     virtual void RenderFinal(SDL_Surface *dst, int x, int y) = 0; 
-     virtual SMPEG_Filter * Filter(SMPEG_Filter * filter) = 0; 
- protected: 
-     MPEGaudioaction *time_source; 
- }; 
-   
-   
- /* For getting info about the system portion of the stream */ 
- typedef struct MPEG_SystemInfo { 
-     int total_size; 
-     int current_offset; 
-     double total_time; 
-     double current_time; 
- } MPEG_SystemInfo; 
-   
- #endif /* _MPEGACTION_H_ */ 
-