Update to 2.0.0 tree from current Fremantle build
[opencv] / 3rdparty / include / OpenEXR / ImfTimeCode.h
diff --git a/3rdparty/include/OpenEXR/ImfTimeCode.h b/3rdparty/include/OpenEXR/ImfTimeCode.h
new file mode 100644 (file)
index 0000000..3030d49
--- /dev/null
@@ -0,0 +1,226 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// 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