00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#ifndef __TIME_DEFS_H
00025
#define __TIME_DEFS_H 1
00026
00027
#include <stdio.h>
00028
00029
#include "mnstream.h"
00030
#include "MNString.h"
00031
#include "MNValid.h"
00032
00033
00034
00035
00036
00037 class ParseTimeBase
00038 {
00039
public:
00040 enum Kind
00041 {
00042
SMPTE,
00043
UTC,
00044
NPT
00045 };
00046
00047
private:
00048 Kind _kind;
00049
00050 DECLARE_VALID
00051
00052
public:
00053
ParseTimeBase( Kind k );
00054
ParseTimeBase(
const ParseTimeBase& orig );
00055
virtual ~ParseTimeBase( );
00056
00057
const Kind&
kind() const;
00058
00059 virtual
ParseTimeBase* clone( ) const = 0;
00060 virtual
int getAsNptSeconds( ) const = 0;
00061
00062 virtual
void dump( ostream& out ) const = 0;
00063 virtual
MNString toString() const = 0;
00064 };
00065
00066
00067
00068
00069
00070 class
ParseTimeRange
00071 {
00072
ParseTimeBase* _start;
00073
ParseTimeBase* _end;
00074
ParseTimeBase* _defer;
00075
00076 DECLARE_VALID
00077
00078
public:
00079 ParseTimeRange(
ParseTimeBase* start,
ParseTimeBase* end );
00080 ParseTimeRange(
const ParseTimeRange& orig );
00081 ~ParseTimeRange( );
00082
00083
void setDeferred(
ParseTimeBase* d );
00084
ParseTimeBase* getDeferred( )
const;
00085
00086
bool hasStart();
00087
bool hasEnd();
00088
bool bDeferred();
00089
00090
ParseTimeBase* getStart()
const;
00091
ParseTimeBase* getEnd()
const;
00092
00093
int getDurationAsSeconds( )
const;
00094
00095
void setStart(
ParseTimeBase* newStart );
00096
00097
MNString toString()
const;
00098 };
00099
00100
00101
00102
00103
00104 class ParseTimeSmpte :
public ParseTimeBase
00105 {
00106
int _hours;
00107
int _minutes;
00108
int _seconds;
00109
int _frames;
00110
int _subframes;
00111
public:
00121
ParseTimeSmpte(
const char* text );
00122
00125
ParseTimeSmpte(
int hours,
00126
int minutes,
00127
int seconds,
00128
int frames,
00129
int subframes );
00130
00132
ParseTimeSmpte(
const ParseTimeSmpte& orig );
00133
00134 virtual ~
ParseTimeSmpte() { };
00135
00136
virtual ParseTimeBase*
clone( ) const;
00137
00142 virtual
int getAsNptSeconds( ) const;
00143
00144 virtual
void dump( ostream& out ) const;
00145 virtual
MNString toString( ) const;
00146 };
00147
00148
00149
00150
00151
00152 class
ParseTimeUtc : public
ParseTimeBase
00153 {
00154
int _year;
00155
int _month;
00156
int _day;
00157
int _hours;
00158
int _minutes;
00159
int _seconds;
00160
int _fraction;
00161
00162
bool _good;
00163
public:
00164
ParseTimeUtc(
const char* text );
00165
ParseTimeUtc(
const ParseTimeUtc& orig );
00166 virtual ~
ParseTimeUtc() { };
00167
00168
virtual ParseTimeBase*
clone( ) const;
00169 virtual
int getAsNptSeconds( ) const;
00170 virtual
void dump( ostream& out ) const;
00171
00172
int year() const;
00173
int month() const;
00174
int day() const;
00175
int hours() const;
00176
int minutes() const;
00177
int seconds() const;
00178
int fraction() const;
00179
00180
bool good() const;
00181 virtual
MNString toString( ) const;
00182 };
00183
00184
00185
00186
00187
00188 class
ParseTimeNpt : public ParseTimeBase
00189 {
00190
public:
00191 enum Type {
00192 T_SEC,
00193 T_TIME,
00194 T_NOW
00195 };
00196
00197
private:
00198
int _hi;
00199
int _low;
00200
bool _now;
00201
00202
public:
00203
ParseTimeNpt( Type t,
const char* text = NULL );
00204
ParseTimeNpt(
const ParseTimeNpt& orig );
00205 virtual ~
ParseTimeNpt() { };
00206
00207
virtual ParseTimeBase*
clone( ) const;
00208 virtual
int getAsNptSeconds( ) const;
00209 virtual
void dump( ostream& out ) const;
00210 virtual
MNString toString( ) const;
00211 };
00212
00213
00214
00215
00216
00217 ostream& operator<<( ostream& ostr, const ParseTimeBase& t );
00218
00219
00220
00221 struct
SMPTE_TIME
00222 {
00223 int hours;
00224 int minutes;
00225 int seconds;
00226 int frames;
00227 int subframes;
00228 };
00229
00230 struct SMPTE_RANGE
00231 {
00232 int type;
00233 bool bStart;
00234 bool bEnd;
00235 struct SMPTE_TIME Start;
00236 struct SMPTE_TIME End;
00237 };
00238
00239
#define SMPTE_TYPE 1
00240
#define SMPTE_30_DROP_TYPE 2
00241
#define SMPTE_25 4
00242
#endif
00243