HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ImfTimeCode.h
Go to the documentation of this file.
1 ///////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
4 // Digital Ltd. LLC
5 //
6 // All rights reserved.
7 //
8 // Redistribution and use in source and binary forms, with or without
9 // modification, are permitted provided that the following conditions are
10 // met:
11 // * Redistributions of source code must retain the above copyright
12 // notice, this list of conditions and the following disclaimer.
13 // * Redistributions in binary form must reproduce the above
14 // copyright notice, this list of conditions and the following disclaimer
15 // in the documentation and/or other materials provided with the
16 // distribution.
17 // * Neither the name of Industrial Light & Magic nor the names of
18 // its contributors may be used to endorse or promote products derived
19 // from this software without specific prior written permission.
20 //
21 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 //
33 ///////////////////////////////////////////////////////////////////////////
34 
35 
36 #ifndef INCLUDED_IMF_TIME_CODE_H
37 #define INCLUDED_IMF_TIME_CODE_H
38 
39 #include "ImfExport.h"
40 #include "ImfNamespace.h"
41 
42 //-----------------------------------------------------------------------------
43 //
44 // class TimeCode
45 //
46 // A TimeCode object stores time and control codes as described
47 // in SMPTE standard 12M-1999. A TimeCode object contains the
48 // following fields:
49 //
50 // Time Address:
51 //
52 // hours integer, range 0 - 23
53 // minutes integer, range 0 - 59
54 // seconds integer, range 0 - 59
55 // frame integer, range 0 - 29
56 //
57 // Flags:
58 //
59 // drop frame flag boolean
60 // color frame flag boolean
61 // field/phase flag boolean
62 // bgf0 boolean
63 // bgf1 boolean
64 // bgf2 boolean
65 //
66 // Binary groups for user-defined data and control codes:
67 //
68 // binary group 1 integer, range 0 - 15
69 // binary group 2 integer, range 0 - 15
70 // ...
71 // binary group 8 integer, range 0 - 15
72 //
73 // Class TimeCode contains methods to convert between the fields
74 // listed above and a more compact representation where the fields
75 // are packed into two unsigned 32-bit integers. In the packed
76 // integer representations, bit 0 is the least significant bit,
77 // and bit 31 is the most significant bit of the integer value.
78 //
79 // The time address and flags fields can be packed in three
80 // different ways:
81 //
82 // bits packing for packing for packing for
83 // 24-frame 60-field 50-field
84 // film television television
85 //
86 // 0 - 3 frame units frame units frame units
87 // 4 - 5 frame tens frame tens frame tens
88 // 6 unused, set to 0 drop frame flag unused, set to 0
89 // 7 unused, set to 0 color frame flag color frame flag
90 // 8 - 11 seconds units seconds units seconds units
91 // 12 - 14 seconds tens seconds tens seconds tens
92 // 15 phase flag field/phase flag bgf0
93 // 16 - 19 minutes units minutes units minutes units
94 // 20 - 22 minutes tens minutes tens minutes tens
95 // 23 bgf0 bgf0 bgf2
96 // 24 - 27 hours units hours units hours units
97 // 28 - 29 hours tens hours tens hours tens
98 // 30 bgf1 bgf1 bgf1
99 // 31 bgf2 bgf2 field/phase flag
100 //
101 // User-defined data and control codes are packed as follows:
102 //
103 // bits field
104 //
105 // 0 - 3 binary group 1
106 // 4 - 7 binary group 2
107 // 8 - 11 binary group 3
108 // 12 - 15 binary group 4
109 // 16 - 19 binary group 5
110 // 20 - 23 binary group 6
111 // 24 - 27 binary group 7
112 // 28 - 31 binary group 8
113 //
114 //-----------------------------------------------------------------------------
115 
117 
118 
120 {
121  public:
122 
123  //---------------------
124  // Bit packing variants
125  //---------------------
126 
127  enum Packing
128  {
129  TV60_PACKING, // packing for 60-field television
130  TV50_PACKING, // packing for 50-field television
131  FILM24_PACKING // packing for 24-frame film
132  };
133 
134 
135  //-------------------------------------
136  // Constructors and assignment operator
137  //-------------------------------------
138 
139  TimeCode (); // all fields set to 0 or false
140 
141  TimeCode (int hours,
142  int minutes,
143  int seconds,
144  int frame,
145  bool dropFrame = false,
146  bool colorFrame = false,
147  bool fieldPhase = false,
148  bool bgf0 = false,
149  bool bgf1 = false,
150  bool bgf2 = false,
151  int binaryGroup1 = 0,
152  int binaryGroup2 = 0,
153  int binaryGroup3 = 0,
154  int binaryGroup4 = 0,
155  int binaryGroup5 = 0,
156  int binaryGroup6 = 0,
157  int binaryGroup7 = 0,
158  int binaryGroup8 = 0);
159 
160  TimeCode (unsigned int timeAndFlags,
161  unsigned int userData = 0,
162  Packing packing = TV60_PACKING);
163 
164  TimeCode (const TimeCode &other);
165 
166  TimeCode & operator = (const TimeCode &other);
167 
168 
169  //----------------------------
170  // Access to individual fields
171  //----------------------------
172 
173  int hours () const;
174  void setHours (int value);
175 
176  int minutes () const;
177  void setMinutes (int value);
178 
179  int seconds () const;
180  void setSeconds (int value);
181 
182  int frame () const;
183  void setFrame (int value);
184 
185  bool dropFrame () const;
186  void setDropFrame (bool value);
187 
188  bool colorFrame () const;
189  void setColorFrame (bool value);
190 
191  bool fieldPhase () const;
192  void setFieldPhase (bool value);
193 
194  bool bgf0 () const;
195  void setBgf0 (bool value);
196 
197  bool bgf1 () const;
198  void setBgf1 (bool value);
199 
200  bool bgf2 () const;
201  void setBgf2 (bool value);
202 
203  int binaryGroup (int group) const; // group must be between 1 and 8
204  void setBinaryGroup (int group, int value);
205 
206 
207  //---------------------------------
208  // Access to packed representations
209  //---------------------------------
210 
211  unsigned int timeAndFlags (Packing packing = TV60_PACKING) const;
212 
213  void setTimeAndFlags (unsigned int value,
214  Packing packing = TV60_PACKING);
215 
216  unsigned int userData () const;
217 
218  void setUserData (unsigned int value);
219 
220 
221  //---------
222  // Equality
223  //---------
224 
225  bool operator == (const TimeCode &v) const;
226  bool operator != (const TimeCode &v) const;
227 
228  private:
229 
230  unsigned int _time;
231  unsigned int _user;
232 };
233 
234 
235 
237 
238 
239 
240 
241 
242 #endif
#define OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT
Definition: ImfNamespace.h:109
const GLdouble * v
Definition: glcorearb.h:836
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
#define IMF_EXPORT
Definition: ImfExport.h:59
GLsizei const GLfloat * value
Definition: glcorearb.h:823
#define OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER
Definition: ImfNamespace.h:108
bool operator!=(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:165