+ /** Construct a Time from a number of seconds and a timecode rate
+ *
+ * @param seconds A number of seconds
+ * @param tcr_ Timecode rate
+ */
+ Time (double seconds, int tcr);
+
+ /** @param time String of the form
+ * HH:MM:SS:EE for SMPTE
+ * HH:MM:SS:E[E[E]] or HH:MM:SS.s[s[s]] for Interop
+ * where HH are hours, MM minutes, SS seconds, EE editable units and
+ * sss millseconds.
+ *
+ * @param tcr_ Timecode rate if this is a SMPTE time, otherwise empty for an Interop time
+ */
+ Time (std::string time, boost::optional<int> tcr);
+
+ int h = 0; ///< hours
+ int m = 0; ///< minutes
+ int s = 0; ///< seconds
+ int e = 0; ///< editable units (where 1 editable unit is 1 / tcr_ seconds)
+ int tcr = 1; ///< timecode rate: the number of editable units per second.
+
+ /** @return A string of the form h:m:s:e padded as in 00:00:00:000 (for Interop) or 00:00:00:00 (for SMPTE) */
+ std::string as_string (Standard standard) const;
+
+ /** @return the total number of seconds that this time consists of */
+ double as_seconds () const;