+++ /dev/null
-///////////////////////////////////////////////////////////////////////////
-//
-// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
-// Digital Ltd. LLC
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Industrial Light & Magic nor the names of
-// its contributors may be used to endorse or promote products derived
-// from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-///////////////////////////////////////////////////////////////////////////
-
-
-#ifndef INCLUDED_IMF_TIME_CODE_H
-#define INCLUDED_IMF_TIME_CODE_H
-
-//-----------------------------------------------------------------------------
-//
-// class TimeCode
-//
-// A TimeCode object stores time and control codes as described
-// in SMPTE standard 12M-1999. A TimeCode object contains the
-// following fields:
-//
-// Time Address:
-//
-// hours integer, range 0 - 23
-// minutes integer, range 0 - 59
-// seconds integer, range 0 - 59
-// frame integer, range 0 - 29
-//
-// Flags:
-//
-// drop frame flag boolean
-// color frame flag boolean
-// field/phase flag boolean
-// bgf0 boolean
-// bgf1 boolean
-// bgf2 boolean
-//
-// Binary groups for user-defined data and control codes:
-//
-// binary group 1 integer, range 0 - 15
-// binary group 2 integer, range 0 - 15
-// ...
-// binary group 8 integer, range 0 - 15
-//
-// Class TimeCode contains methods to convert between the fields
-// listed above and a more compact representation where the fields
-// are packed into two unsigned 32-bit integers. In the packed
-// integer representations, bit 0 is the least significant bit,
-// and bit 31 is the most significant bit of the integer value.
-//
-// The time address and flags fields can be packed in three
-// different ways:
-//
-// bits packing for packing for packing for
-// 24-frame 60-field 50-field
-// film television television
-//
-// 0 - 3 frame units frame units frame units
-// 4 - 5 frame tens frame tens frame tens
-// 6 unused, set to 0 drop frame flag unused, set to 0
-// 7 unused, set to 0 color frame flag color frame flag
-// 8 - 11 seconds units seconds units seconds units
-// 12 - 14 seconds tens seconds tens seconds tens
-// 15 phase flag field/phase flag bgf0
-// 16 - 19 minutes units minutes units minutes units
-// 20 - 22 minutes tens minutes tens minutes tens
-// 23 bgf0 bgf0 bgf2
-// 24 - 27 hours units hours units hours units
-// 28 - 29 hours tens hours tens hours tens
-// 30 bgf1 bgf1 bgf1
-// 31 bgf2 bgf2 field/phase flag
-//
-// User-defined data and control codes are packed as follows:
-//
-// bits field
-//
-// 0 - 3 binary group 1
-// 4 - 7 binary group 2
-// 8 - 11 binary group 3
-// 12 - 15 binary group 4
-// 16 - 19 binary group 5
-// 20 - 23 binary group 6
-// 24 - 27 binary group 7
-// 28 - 31 binary group 8
-//
-//-----------------------------------------------------------------------------
-
-namespace Imf {
-
-
-class TimeCode
-{
- public:
-
- //---------------------
- // Bit packing variants
- //---------------------
-
- enum Packing
- {
- TV60_PACKING, // packing for 60-field television
- TV50_PACKING, // packing for 50-field television
- FILM24_PACKING // packing for 24-frame film
- };
-
-
- //-------------------------------------
- // Constructors and assignment operator
- //-------------------------------------
-
- TimeCode (); // all fields set to 0 or false
-
- TimeCode (int hours,
- int minutes,
- int seconds,
- int frame,
- bool dropFrame = false,
- bool colorFrame = false,
- bool fieldPhase = false,
- bool bgf0 = false,
- bool bgf1 = false,
- bool bgf2 = false,
- int binaryGroup1 = 0,
- int binaryGroup2 = 0,
- int binaryGroup3 = 0,
- int binaryGroup4 = 0,
- int binaryGroup5 = 0,
- int binaryGroup6 = 0,
- int binaryGroup7 = 0,
- int binaryGroup8 = 0);
-
- TimeCode (unsigned int timeAndFlags,
- unsigned int userData = 0,
- Packing packing = TV60_PACKING);
-
- TimeCode (const TimeCode &other);
-
- TimeCode & operator = (const TimeCode &other);
-
-
- //----------------------------
- // Access to individual fields
- //----------------------------
-
- int hours () const;
- void setHours (int value);
-
- int minutes () const;
- void setMinutes (int value);
-
- int seconds () const;
- void setSeconds (int value);
-
- int frame () const;
- void setFrame (int value);
-
- bool dropFrame () const;
- void setDropFrame (bool value);
-
- bool colorFrame () const;
- void setColorFrame (bool value);
-
- bool fieldPhase () const;
- void setFieldPhase (bool value);
-
- bool bgf0 () const;
- void setBgf0 (bool value);
-
- bool bgf1 () const;
- void setBgf1 (bool value);
-
- bool bgf2 () const;
- void setBgf2 (bool value);
-
- int binaryGroup (int group) const; // group must be between 1 and 8
- void setBinaryGroup (int group, int value);
-
-
- //---------------------------------
- // Access to packed representations
- //---------------------------------
-
- unsigned int timeAndFlags (Packing packing = TV60_PACKING) const;
-
- void setTimeAndFlags (unsigned int value,
- Packing packing = TV60_PACKING);
-
- unsigned int userData () const;
-
- void setUserData (unsigned int value);
-
- private:
-
- unsigned int _time;
- unsigned int _user;
-};
-
-
-} // namespace Imf
-
-#endif