+private:
+ friend struct dcptime_round_up_test;
+
+ Type _t;
+ static const int HZ = 96000;
+};
+
+class ContentTimeDifferentiator {};
+class DCPTimeDifferentiator {};
+
+/* Specializations for the two allowed explicit conversions */
+
+template<>
+Time<ContentTimeDifferentiator, DCPTimeDifferentiator>::Time (Time<DCPTimeDifferentiator, ContentTimeDifferentiator> d, FrameRateChange f);
+
+template<>
+Time<DCPTimeDifferentiator, ContentTimeDifferentiator>::Time (Time<ContentTimeDifferentiator, DCPTimeDifferentiator> d, FrameRateChange f);
+
+/** Time relative to the start or position of a piece of content in its native frame rate */
+typedef Time<ContentTimeDifferentiator, DCPTimeDifferentiator> ContentTime;
+/** Time relative to the start of the output DCP in its frame rate */
+typedef Time<DCPTimeDifferentiator, ContentTimeDifferentiator> DCPTime;
+
+template <class T>
+class TimePeriod
+{
+public:
+ TimePeriod () {}
+
+ TimePeriod (T f, T t)
+ : from (f)
+ , to (t)
+ {}
+
+ /** start time of sampling interval that the period is from */
+ T from;
+ /** start time of next sampling interval after the period */
+ T to;
+
+ T duration () const {
+ return to - from;