From a9abe3b1e1a1e260cf1cbf148ab3909a719817d1 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 12 Oct 2012 01:08:29 +0000 Subject: 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 --- libs/timecode/src/time.cc | 102 ++++++++++++++++++++++++++++++++++++++++++ libs/timecode/timecode/time.h | 16 +++++++ 2 files changed, 118 insertions(+) (limited to 'libs/timecode') 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); -- cgit v1.2.3