00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00030 #if ! defined( PLAYER_HH )
00031 #define PLAYER_HH
00032
00033
00034 #include <signal.h>
00035 #include <unistd.h>
00036 #include <fcntl.h>
00037 #include <sys/stat.h>
00038 #include <sys/time.h>
00039
00040
00041 #include <string>
00042
00043
00044 #include "piave_base.hh"
00045 #include "storybase.hh"
00046
00047
00048 namespace PIAVE {
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063 class Player
00064 {
00065 public:
00066 enum State { not_ready, stopped, paused, playing };
00067
00068 public:
00069 Player();
00070 ~Player();
00071
00073 double getSpeed() const { return _speed; }
00074 Time getPos() const { return _pos; }
00075 State getState() const { return _state; }
00076
00078 void setStoryBoard( StoryBoard * s ) { _theStory = s; }
00079 void setVideoOut( OutAVStreamIFace * vo ) { _videoOut = vo; }
00080 void setAudioOut( OutAudioStreamIFace * ao ) { _audioOut = ao; }
00081 void setSpeed( double s ) { _speed = s; }
00082 void setStart( Time s ) { _start = s; }
00083 void setStop( Time s ) { _stop = s; }
00084
00086 void switchToPlay();
00087 void switchToStop();
00088 void switchToPause();
00089
00090
00091
00092
00093 void playNextFrame();
00094
00095 private:
00096
00097
00098
00099 bool diffTime( timespec * r, const timeval * x, timeval * y );
00100
00102 void addTime( timeval * r, const timeval * x, const timeval * y );
00103
00104
00105 private:
00107 State _state;
00108
00110 StoryBoard * _theStory;
00111
00113 OutAVStreamIFace * _videoOut;
00114
00116 OutAudioStreamIFace * _audioOut;
00117
00119 double _speed;
00120
00122 Time _start;
00123
00125 Time _stop;
00126
00128 Time _pos;
00129
00132 timeval _firstFlash;
00133
00137 timeval _lastFlash;
00138 };
00139
00140 };
00141
00142 #endif