00001
00004 #ifndef FBXFILESDK_COMPONENTS_KBASELIB_KLIB_KTIME_H
00005 #define FBXFILESDK_COMPONENTS_KBASELIB_KLIB_KTIME_H
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #include <fbxfilesdk/fbxfilesdk_def.h>
00042
00043 #ifdef K_QUICKTIME_PLUGIN
00044 #ifdef KFBX_DLL
00045 #undef KFBX_DLL
00046 #endif
00047 #define KFBX_DLL
00048 #endif
00049
00050 #include <fbxfilesdk/fbxfilesdk_nsbegin.h>
00051
00052
00053 #define KTIME_INFINITE KTime (K_LONGLONG( 0x7fffffffffffffff))
00054 #define KTIME_MINUS_INFINITE KTime (K_LONGLONG(-0x7fffffffffffffff))
00055 #define KTIME_ZERO KTime (0)
00056 #define KTIME_EPSILON KTime (1)
00057 #define KTIME_ONE_SECOND KTime (K_LONGLONG(46186158000))
00058
00059 #define KTIME_ASSERT_EPSILON 0.5
00060
00061 KFBX_FORWARD(KTimeModeObject);
00062
00071 class KFBX_DLL KTime
00072 {
00073 public:
00077 KTime(kLongLong pTime=0) {mTime=pTime;}
00078
00083
00105
00106
00107
00108
00109
00128 enum ETimeMode
00129 {
00130 eDEFAULT_MODE = 0,
00131 eFRAMES120 = 1,
00132 eFRAMES100 = 2,
00133 eFRAMES60 = 3,
00134 eFRAMES50 = 4,
00135 eFRAMES48 = 5,
00136 eFRAMES30 = 6,
00137 eFRAMES30_DROP = 7,
00138 eNTSC_DROP_FRAME = 8,
00139 eNTSC_FULL_FRAME = 9,
00140 ePAL = 10,
00141 eCINEMA = 11,
00142 eFRAMES1000 = 12,
00143 eCINEMA_ND = 13,
00144 eCUSTOM = 14,
00145 eTIME_MODE_COUNT = 15
00146 };
00147
00154 enum ETimeProtocol
00155 {
00156 eSMPTE,
00157 eFRAME,
00158 eDEFAULT_PROTOCOL,
00159 eTIME_PROTOCOL_COUNT
00160 };
00161
00167 static void SetGlobalTimeMode(ETimeMode pTimeMode, double pFrameRate=0.0);
00168
00173 static ETimeMode GetGlobalTimeMode();
00174
00179 static void SetGlobalTimeProtocol(ETimeProtocol pTimeProtocol);
00180
00185 static ETimeProtocol GetGlobalTimeProtocol();
00186
00191 static double GetFrameRate(ETimeMode pTimeMode);
00192
00199 static ETimeMode ConvertFrameRateToTimeMode(double pFrameRate, double lPrecision = 0.00000001);
00200
00202
00207
00211 inline void Set(kLongLong pTime) {mTime = pTime;}
00212
00216 inline const kLongLong& Get() const {return mTime;}
00217
00221 inline void SetMilliSeconds(kLongLong pMilliSeconds) {mTime = pMilliSeconds * K_LONGLONG(46186158);}
00222
00226 inline kLongLong GetMilliSeconds() const {return mTime / K_LONGLONG(46186158);}
00227
00231 void SetSecondDouble(double pTime);
00232
00236 double GetSecondDouble() const;
00237
00238
00251 void SetTime
00252 (
00253 int pHour,
00254 int pMinute,
00255 int pSecond,
00256 int pFrame = 0,
00257 int pField = 0,
00258 int pTimeMode=eDEFAULT_MODE,
00259 double pFramerate = 0.0
00260 );
00261
00280 void SetTime
00281 (
00282 int pHour,
00283 int pMinute,
00284 int pSecond,
00285 int pFrame,
00286 int pField,
00287 int pResidual,
00288 int pTimeMode,
00289 double pFramerate = 0.0
00290 );
00291
00304 bool GetTime
00305 (
00306 kLongLong& pHour,
00307 kLongLong& pMinute,
00308 kLongLong& pSecond,
00309 kLongLong& pFrame,
00310 kLongLong& pField,
00311 kLongLong& pResidual,
00312 int pTimeMode=eDEFAULT_MODE,
00313 double pFramerate = 0.0
00314 ) const;
00315
00320 KTime GetFramedTime(bool pRound = true);
00321
00328 kLongLong GetHour(bool pCummul=false, int pTimeMode=eDEFAULT_MODE, double pFramerate=0.0) const;
00329
00337 kLongLong GetMinute(bool pCummul=false, int pTimeMode=eDEFAULT_MODE, double pFramerate=0.0) const;
00338
00346 kLongLong GetSecond(bool pCummul=false, int pTimeMode=eDEFAULT_MODE, double pFramerate=0.0) const;
00347
00355 kLongLong GetFrame(bool pCummul=false, int pTimeMode=eDEFAULT_MODE, double pFramerate=0.0) const;
00356
00364 kLongLong GetField(bool pCummul=false, int pTimeMode=eDEFAULT_MODE, double pFramerate=0.0) const;
00365
00371 kLongLong GetResidual(int pTimeMode=eDEFAULT_MODE, double pFramerate=0.0) const;
00372
00388 char* GetTimeString
00389 (
00390 char* pTimeString,
00391 int pInfo=5,
00392 int pTimeMode=eDEFAULT_MODE,
00393 int pTimeFormat=eDEFAULT_PROTOCOL,
00394 double pFramerate = 0.0
00395 ) const;
00396
00409 void SetTimeString(char* pTime, int pTimeMode=eDEFAULT_MODE, int pTimeFormat=eDEFAULT_PROTOCOL, double pFramerate = 0.0);
00410
00412
00417
00422 inline bool operator==(const KTime& pTime) const {return mTime == pTime.mTime;}
00423
00428 inline bool operator!=(const KTime& pTime) const {return mTime != pTime.mTime;}
00429
00434 inline bool operator>=(const KTime& pTime) const {return mTime >= pTime.mTime;}
00435
00440 inline bool operator<=(const KTime& pTime) const {return mTime <= pTime.mTime;}
00441
00446 inline bool operator>(const KTime& pTime) const {return mTime > pTime.mTime;}
00447
00452 inline bool operator<(const KTime& pTime) const {return mTime < pTime.mTime;}
00453
00457 inline KTime& operator=(const KTime& pTime) {mTime = pTime.mTime; return *this;}
00458
00463 inline KTime& operator+=(const KTime& pTime) {mTime += pTime.mTime; return *this;}
00464
00469 inline KTime& operator-=(const KTime& pTime) {mTime -= pTime.mTime; return *this;}
00470
00475 KTime operator+(const KTime& pTime) const;
00476
00481 KTime operator-(const KTime& pTime) const;
00482
00487 KTime operator*(const int Mult) const;
00488
00493 KTime operator/(const KTime &pTime) const;
00494
00499 KTime operator*(const KTime &pTime) const;
00500
00502 inline KTime &operator++() {mTime += 1; return (*this);}
00503
00505 inline const KTime operator++(int) {KTime lOld = *this; ++(*this); return lOld;}
00506
00508 inline KTime &operator--() {mTime -= 1; return (*this);}
00509
00511 inline const KTime operator--(int) {KTime lOld = *this; --(*this); return lOld;}
00512
00514 static KTime GetSystemTimer();
00516
00517
00518
00519
00520
00521
00523 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00524 private:
00525 kLongLong mTime;
00526
00527 static ETimeMode gsGlobalTimeMode;
00528 static ETimeProtocol gsGlobalTimeProtocol;
00529 static KTimeModeObject* gsTimeObject;
00530 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
00531
00532
00533 friend KFBX_DLL KTime::ETimeMode KTime_GetGlobalTimeMode();
00534 friend KFBX_DLL HKTimeModeObject KTime_GetGlobalTimeModeObject();
00535 friend KFBX_DLL KTime::ETimeProtocol KTime_GetGlobalTimeFormat();
00536 friend KFBX_DLL void KTime_SetGlobalTimeMode( KTime::ETimeMode pTimeMode, double pFrameRate=0.0 );
00537 friend KFBX_DLL void KTime_SetGlobalTimeFormat( KTime::ETimeProtocol pTimeFormat );
00538
00539 inline kLongLong GetOneFrameValue ( int pTimeMode, double pFramerate ) const;
00540 };
00541
00542 #define KTS_FORWARD 1
00543 #define KTS_BACKWARD -1
00544
00549 class KFBX_DLL KTimeSpan
00550 {
00551 public:
00553 KTimeSpan() {}
00554
00559 KTimeSpan(KTime pStart, KTime pStop) {mStart=pStart; mStop=pStop;}
00560
00565 inline void Set(KTime pStart, KTime pStop) {mStart=pStart; mStop=pStop;}
00566
00570 inline void SetStart(KTime pStart) {mStart=pStart;}
00571
00575 inline void SetStop(KTime pStop) {mStop=pStop;}
00576
00580 inline KTime GetStart() const {return mStart;}
00581
00585 inline KTime GetStop() const {return mStop;}
00586
00590 inline KTime GetDuration() const {if (mStop>mStart)return mStop-mStart; else return mStart-mStop;}
00591
00595 inline KTime GetSignedDuration() const {return mStop-mStart;}
00596
00600 inline int GetDirection() const {if (mStop>=mStart)return KTS_FORWARD; else return KTS_BACKWARD;}
00601
00606 bool IsInside(KTime pTime) const;
00607
00612 KTimeSpan Intersect(const KTimeSpan &pTime) const;
00613
00618 bool operator!=(const KTimeSpan &pTime) const;
00619
00624 bool operator==(const KTimeSpan &pTime) const;
00625
00630 void UnionAssignment(const KTimeSpan& pSpan);
00631
00632
00634
00635
00636
00637
00638
00639
00641 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00642 private:
00643 KTime mStart;
00644 KTime mStop;
00645 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
00646 };
00647
00663 enum EOldTimeMode
00664 {
00665 eOLD_DEFAULT_MODE,
00666 eOLD_CINEMA,
00667 eOLD_PAL,
00668 eOLD_FRAMES30,
00669 eOLD_NTSC_DROP_FRAME,
00670 eOLD_FRAMES50,
00671 eOLD_FRAMES60,
00672 eOLD_FRAMES100,
00673 eOLD_FRAMES120,
00674 eOLD_NTSC_FULL_FRAME,
00675 eOLD_FRAMES30_DROP,
00676 eOLD_FRAMES1000,
00677 eOLD_TIME_MODE_COUNT
00678 };
00679
00680 class KFBX_DLL KTimeModeObject
00681 {
00682 public:
00683 double mFrameRateValue;
00684 char* mFrameRateString;
00685 KTime::ETimeMode mTimeMode;
00686 EOldTimeMode mOldTimeMode;
00687 char* mTimeModeString;
00688 int mShowValue;
00689
00690 bool mSystemRate;
00691 bool mExistInOldValue;
00692 kLongLong mOneFrameValue;
00693 };
00694
00695
00696 KFBX_DLL KTime::ETimeMode KTime_GetGlobalTimeMode();
00697 KFBX_DLL HKTimeModeObject KTime_GetGlobalTimeModeObject();
00698 KFBX_DLL KTime::ETimeProtocol KTime_GetGlobalTimeFormat();
00699 KFBX_DLL void KTime_SetGlobalTimeMode(KTime::ETimeMode pTimeMode, double pFrameRate);
00700 KFBX_DLL void KTime_SetGlobalTimeFormat(KTime::ETimeProtocol pTimeFormat);
00701
00702
00703
00704 KFBX_DLL int KTime_GetOldTimeModeCorrespondance(KTime::ETimeMode pNewTimeMode);
00705 KFBX_DLL int KTime_GetTimeModeFromOldValue(int pOldTimeMode);
00706
00707
00708
00709 KFBX_DLL int KTime_GetTimeModeFromFrameRate(char* pFrameRate);
00710 KFBX_DLL void KTime_GetControlStringList(char* pControlString, KTime::ETimeProtocol pTimeFormat);
00711 KFBX_DLL char* KTime_GetGlobalFrameRateString(KTime::ETimeMode pTimeMode);
00712 KFBX_DLL char* KTime_GetGlobalTimeModeString(KTime::ETimeMode pTimeMode);
00713 KFBX_DLL double KTime_GetFrameRate(KTime::ETimeMode pTimeMode);
00714
00715
00716
00717 KFBX_DLL int KTime_SelectionToTimeFormat(int pSelection);
00718 KFBX_DLL int KTime_SelectionToTimeMode(int pSelection);
00719 KFBX_DLL int KTime_TimeToSelection(int pTimeMode=KTime::eDEFAULT_MODE, int pTimeFormat=KTime::eDEFAULT_PROTOCOL);
00720 KFBX_DLL char* KTime_GetTimeModeName(int pTimeMode);
00721 KFBX_DLL int KTime_GetFrameRateStringListIndex(KTime::ETimeMode pTimeMode);
00722 KFBX_DLL bool KTime_IsValidCustomFramerate(double pFramerate);
00723 KFBX_DLL bool KTime_GetNearestCustomFramerate(double pFramerate, double& pNearestRate);
00724
00725
00726
00727 #define DEFAULT_MODE KTime::eDEFAULT_MODE
00728 #define CINEMA KTime::eCINEMA
00729 #define PAL KTime::ePAL
00730 #define FRAMES30 KTime::eFRAMES30
00731 #define NTSC_DROP_FRAME KTime::eNTSC_DROP_FRAME
00732 #define FRAMES50 KTime::eFRAMES50
00733 #define FRAMES60 KTime::eFRAMES60
00734 #define FRAMES100 KTime::eFRAMES100
00735 #define FRAMES120 KTime::eFRAMES120
00736 #define NTSC_FULL_FRAME KTime::eNTSC_FULL_FRAME
00737 #define FRAMES30_DROP KTime::eFRAMES30_DROP
00738 #define FRAMES1000 KTime::eFRAMES1000
00739 #define TIMEFORMAT_SMPTE KTime::eSMPTE
00740 #define TIMEFORMAT_FRAME KTime::eFRAME
00741 #define DEFAULT_FORMAT KTime::eDEFAULT_PROTOCOL
00742
00743 #include <fbxfilesdk/fbxfilesdk_nsend.h>
00744
00745 #endif // FBXFILESDK_COMPONENTS_KBASELIB_KLIB_KTIME_H
00746