libdcp
dcp_time.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2012-2021 Carl Hetherington <cth@carlh.net>
3 
4  This file is part of libdcp.
5 
6  libdcp is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10 
11  libdcp is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with libdcp. If not, see <http://www.gnu.org/licenses/>.
18 
19  In addition, as a special exception, the copyright holders give
20  permission to link the code of portions of this program with the
21  OpenSSL library under certain conditions as described in each
22  individual source file, and distribute linked combinations
23  including the two.
24 
25  You must obey the GNU General Public License in all respects
26  for all of the code used other than OpenSSL. If you modify
27  file(s) with this exception, you may extend this exception to your
28  version of the file(s), but you are not obligated to do so. If you
29  do not wish to do so, delete this exception statement from your
30  version. If you delete this exception statement from all source
31  files in the program, then also delete it here.
32 */
33 
34 
40 #ifndef LIBDCP_TIME_H
41 #define LIBDCP_TIME_H
42 
43 
44 #include "types.h"
45 #include <boost/optional.hpp>
46 #include <stdint.h>
47 #include <string>
48 #include <iostream>
49 
50 
51 namespace dcp {
52 
53 
54 class Time;
55 
56 
57 extern bool operator== (Time const & a, Time const & b);
58 extern bool operator!= (Time const & a, Time const & b);
59 extern bool operator<= (Time const & a, Time const & b);
60 extern bool operator< (Time const & a, Time const & b);
61 extern bool operator> (Time const & a, Time const & b);
62 extern bool operator>= (Time const & a, Time const & b);
63 extern std::ostream & operator<< (std::ostream & s, Time const & t);
64 extern Time operator+ (Time a, Time b);
65 extern Time operator- (Time a, Time b);
66 extern float operator/ (Time a, Time const & b);
67 
68 
72 class Time
73 {
74 public:
76  Time () {}
77 
83  Time (int frame, double frames_per_second, int tcr);
84 
92  Time (int h_, int m_, int s_, int e_, int tcr_)
93  : h (h_)
94  , m (m_)
95  , s (s_)
96  , e (e_)
97  , tcr (tcr_)
98  {}
99 
105  Time (double seconds, int tcr);
106 
115  Time (std::string time, boost::optional<int> tcr);
116 
117  int h = 0;
118  int m = 0;
119  int s = 0;
120  int e = 0;
121  int tcr = 1;
122 
124  std::string as_string (Standard standard) const;
125 
127  double as_seconds () const;
128 
133  int64_t as_editable_units_floor (int tcr_) const;
134 
139  int64_t as_editable_units_ceil (int tcr_) const;
140 
144  Time rebase (int tcr_) const;
145 
146  Time& operator+= (Time const & o) {
147  *this = *this + o;
148  return *this;
149  }
150 
151  Time& operator-= (Time const & o) {
152  *this = *this - o;
153  return *this;
154  }
155 
156 private:
157  void set (double seconds, int tcr);
158 };
159 
160 
161 }
162 
163 
164 #endif
A representation of time within a DCP.
Definition: dcp_time.h:73
int h
hours
Definition: dcp_time.h:117
int e
editable units (where 1 editable unit is 1 / tcr_ seconds)
Definition: dcp_time.h:120
int64_t as_editable_units_ceil(int tcr_) const
Definition: dcp_time.cc:350
int64_t as_editable_units_floor(int tcr_) const
Definition: dcp_time.cc:343
Time(std::string time, boost::optional< int > tcr)
int m
minutes
Definition: dcp_time.h:118
double as_seconds() const
Definition: dcp_time.cc:357
Time rebase(int tcr_) const
Definition: dcp_time.cc:364
int tcr
timecode rate: the number of editable units per second.
Definition: dcp_time.h:121
void set(double seconds, int tcr)
Definition: dcp_time.cc:76
int s
seconds
Definition: dcp_time.h:119
std::string as_string(Standard standard) const
Definition: dcp_time.cc:328
Time(int h_, int m_, int s_, int e_, int tcr_)
Definition: dcp_time.h:92
Namespace for everything in libdcp.
Definition: array_data.h:50
Miscellaneous types.