source: NonGTP/OpenEXR/include/IlmImf/ImfTimeCode.h @ 855

Revision 855, 6.7 KB checked in by igarcia, 18 years ago (diff)
Line 
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 32 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
Note: See TracBrowser for help on using the repository browser.