/src/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCode.h
C++ Header | 226 lines | 69 code | 39 blank | 118 comment | 0 complexity | 87bb56994ff6583f9de15dd011f86d74 MD5 | raw 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//----------------------------------------------------------------------------- 40// 41// class TimeCode 42// 43// A TimeCode object stores time and control codes as described 44// in SMPTE standard 12M-1999. A TimeCode object contains the 45// following fields: 46// 47// Time Address: 48// 49// hours integer, range 0 - 23 50// minutes integer, range 0 - 59 51// seconds integer, range 0 - 59 52// frame integer, range 0 - 29 53// 54// Flags: 55// 56// drop frame flag boolean 57// color frame flag boolean 58// field/phase flag boolean 59// bgf0 boolean 60// bgf1 boolean 61// bgf2 boolean 62// 63// Binary groups for user-defined data and control codes: 64// 65// binary group 1 integer, range 0 - 15 66// binary group 2 integer, range 0 - 15 67// ... 68// binary group 8 integer, range 0 - 15 69// 70// Class TimeCode contains methods to convert between the fields 71// listed above and a more compact representation where the fields 72// are packed into two unsigned 32-bit integers. In the packed 73// integer representations, bit 0 is the least significant bit, 74// and bit 31 is the most significant bit of the integer value. 75// 76// The time address and flags fields can be packed in three 77// different ways: 78// 79// bits packing for packing for packing for 80// 24-frame 60-field 50-field 81// film television television 82// 83// 0 - 3 frame units frame units frame units 84// 4 - 5 frame tens frame tens frame tens 85// 6 unused, set to 0 drop frame flag unused, set to 0 86// 7 unused, set to 0 color frame flag color frame flag 87// 8 - 11 seconds units seconds units seconds units 88// 12 - 14 seconds tens seconds tens seconds tens 89// 15 phase flag field/phase flag bgf0 90// 16 - 19 minutes units minutes units minutes units 91// 20 - 22 minutes tens minutes tens minutes tens 92// 23 bgf0 bgf0 bgf2 93// 24 - 27 hours units hours units hours units 94// 28 - 29 hours tens hours tens hours tens 95// 30 bgf1 bgf1 bgf1 96// 31 bgf2 bgf2 field/phase flag 97// 98// User-defined data and control codes are packed as follows: 99// 100// bits field 101// 102// 0 - 3 binary group 1 103// 4 - 7 binary group 2 104// 8 - 11 binary group 3 105// 12 - 15 binary group 4 106// 16 - 19 binary group 5 107// 20 - 23 binary group 6 108// 24 - 27 binary group 7 109// 28 - 31 binary group 8 110// 111//----------------------------------------------------------------------------- 112 113namespace Imf { 114 115 116class TimeCode 117{ 118 public: 119 120 //--------------------- 121 // Bit packing variants 122 //--------------------- 123 124 enum Packing 125 { 126 TV60_PACKING, // packing for 60-field television 127 TV50_PACKING, // packing for 50-field television 128 FILM24_PACKING // packing for 24-frame film 129 }; 130 131 132 //------------------------------------- 133 // Constructors and assignment operator 134 //------------------------------------- 135 136 TimeCode (); // all fields set to 0 or false 137 138 TimeCode (int hours, 139 int minutes, 140 int seconds, 141 int frame, 142 bool dropFrame = false, 143 bool colorFrame = false, 144 bool fieldPhase = false, 145 bool bgf0 = false, 146 bool bgf1 = false, 147 bool bgf2 = false, 148 int binaryGroup1 = 0, 149 int binaryGroup2 = 0, 150 int binaryGroup3 = 0, 151 int binaryGroup4 = 0, 152 int binaryGroup5 = 0, 153 int binaryGroup6 = 0, 154 int binaryGroup7 = 0, 155 int binaryGroup8 = 0); 156 157 TimeCode (unsigned int timeAndFlags, 158 unsigned int userData = 0, 159 Packing packing = TV60_PACKING); 160 161 TimeCode (const TimeCode &other); 162 163 TimeCode & operator = (const TimeCode &other); 164 165 166 //---------------------------- 167 // Access to individual fields 168 //---------------------------- 169 170 int hours () const; 171 void setHours (int value); 172 173 int minutes () const; 174 void setMinutes (int value); 175 176 int seconds () const; 177 void setSeconds (int value); 178 179 int frame () const; 180 void setFrame (int value); 181 182 bool dropFrame () const; 183 void setDropFrame (bool value); 184 185 bool colorFrame () const; 186 void setColorFrame (bool value); 187 188 bool fieldPhase () const; 189 void setFieldPhase (bool value); 190 191 bool bgf0 () const; 192 void setBgf0 (bool value); 193 194 bool bgf1 () const; 195 void setBgf1 (bool value); 196 197 bool bgf2 () const; 198 void setBgf2 (bool value); 199 200 int binaryGroup (int group) const; // group must be between 1 and 8 201 void setBinaryGroup (int group, int value); 202 203 204 //--------------------------------- 205 // Access to packed representations 206 //--------------------------------- 207 208 unsigned int timeAndFlags (Packing packing = TV60_PACKING) const; 209 210 void setTimeAndFlags (unsigned int value, 211 Packing packing = TV60_PACKING); 212 213 unsigned int userData () const; 214 215 void setUserData (unsigned int value); 216 217 private: 218 219 unsigned int _time; 220 unsigned int _user; 221}; 222 223 224} // namespace Imf 225 226#endif