diff options
author | Robin Gareus <robin@gareus.org> | 2012-10-12 01:08:29 +0000 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2012-10-12 01:08:29 +0000 |
commit | a9abe3b1e1a1e260cf1cbf148ab3909a719817d1 (patch) | |
tree | e6eb1f71bbd946abff39260a0232dd61b844c9bc /libs/timecode | |
parent | 9116ea83ddc30aebb6bb5a8fa0f4a55be8984ceb (diff) |
move TimecodeFormat to libtimecode
provide a way to convert any TimecodeFormat to float frame-rate,
not only the currently active timecode_foramt.
git-svn-id: svn://localhost/ardour2/branches/3.0@13249 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/timecode')
-rw-r--r-- | libs/timecode/src/time.cc | 102 | ||||
-rw-r--r-- | libs/timecode/timecode/time.h | 16 |
2 files changed, 118 insertions, 0 deletions
diff --git a/libs/timecode/src/time.cc b/libs/timecode/src/time.cc index 92cede1d9d..6dc123624b 100644 --- a/libs/timecode/src/time.cc +++ b/libs/timecode/src/time.cc @@ -423,6 +423,108 @@ hours_floor(Time& timecode) } } +float +timecode_to_frames_per_second(TimecodeFormat t) +{ + switch (t) { + case timecode_23976: + return (24000.0/1001.0); //23.976; + + break; + case timecode_24: + return 24; + + break; + case timecode_24976: + return (25000.0/1001.0); //24.976; + + break; + case timecode_25: + return 25; + + break; + case timecode_2997: + return 29.97; + + break; + case timecode_2997drop: + return (30000.0/1001.0); //29.97; + + break; + case timecode_30: + return 30; + + break; + case timecode_30drop: + return 30; + + break; + case timecode_5994: + return (60000.0/1001.0); //59.94; + + break; + case timecode_60: + return 60; + + break; + default: + //std::cerr << "Editor received unexpected timecode type" << std::endl; + break; + } + return 30.0; +} + +bool +timecode_has_drop_frames(TimecodeFormat t) +{ + switch (t) { + case timecode_23976: + return false; + + break; + case timecode_24: + return false; + + break; + case timecode_24976: + return false; + + break; + case timecode_25: + return false; + + break; + case timecode_2997: + return false; + + break; + case timecode_2997drop: + return true; + + break; + case timecode_30: + return false; + + break; + case timecode_30drop: + return true; + + break; + case timecode_5994: + return false; + + break; + case timecode_60: + return false; + + break; + default: + //error << "Editor received unexpected timecode type" << endmsg; + break; + } + + return false; +} } // namespace Timecode diff --git a/libs/timecode/timecode/time.h b/libs/timecode/timecode/time.h index bcb078f3f1..090d3851fb 100644 --- a/libs/timecode/timecode/time.h +++ b/libs/timecode/timecode/time.h @@ -32,6 +32,19 @@ enum Wrap { HOURS }; +enum TimecodeFormat { + timecode_23976, + timecode_24, + timecode_24976, + timecode_25, + timecode_2997, + timecode_2997drop, + timecode_30, + timecode_30drop, + timecode_5994, + timecode_60 +}; + struct Time { bool negative; uint32_t hours; @@ -84,6 +97,9 @@ void seconds_floor (Time& timecode); void minutes_floor (Time& timecode); void hours_floor (Time& timecode); +float timecode_to_frames_per_second(TimecodeFormat const t); +bool timecode_has_drop_frames(TimecodeFormat const t); + } // namespace Timecode std::ostream& operator<< (std::ostream& ostr, const Timecode::Time& t); |