summaryrefslogtreecommitdiff
path: root/libs/timecode
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2012-10-12 01:08:29 +0000
committerRobin Gareus <robin@gareus.org>2012-10-12 01:08:29 +0000
commita9abe3b1e1a1e260cf1cbf148ab3909a719817d1 (patch)
treee6eb1f71bbd946abff39260a0232dd61b844c9bc /libs/timecode
parent9116ea83ddc30aebb6bb5a8fa0f4a55be8984ceb (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.cc102
-rw-r--r--libs/timecode/timecode/time.h16
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);