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_VERSION_H
37 #define INCLUDED_IMF_VERSION_H
38
39 //-----------------------------------------------------------------------------
40 //
41 // Magic and version number.
42 //
43 //-----------------------------------------------------------------------------
44
45
46 namespace Imf {
47
48
49 //
50 // The MAGIC number is stored in the first four bytes of every
51 // OpenEXR image file. This can be used to quickly test whether
52 // a given file is an OpenEXR image file (see isImfMagic(), below).
53 //
54
55 const int MAGIC = 20000630;
56
57
58 //
59 // The second item in each OpenEXR image file, right after the
60 // magic number, is a four-byte file version identifier. Depending
61 // on a file's version identifier, a file reader can enable various
62 // backwards-compatibility switches, or it can quickly reject files
63 // that it cannot read.
64 //
65 // The version identifier is split into an 8-bit version number,
66 // and a 24-bit flags field.
67 //
68
69 const int VERSION_NUMBER_FIELD = 0x000000ff;
70 const int VERSION_FLAGS_FIELD = 0xffffff00;
71
72
73 //
74 // Value that goes into VERSION_NUMBER_FIELD.
75 //
76
77 const int EXR_VERSION = 2;
78
79
80 //
81 // Flags that can go into VERSION_FLAGS_FIELD.
82 // Flags can only occupy the 1 bits in VERSION_FLAGS_FIELD.
83 //
84
85 const int TILED_FLAG = 0x00000200; // File is tiled
86
87 const int LONG_NAMES_FLAG = 0x00000400; // File contains long
88 // attribute or channel
89 // names
90
91 //
92 // Bitwise OR of all known flags.
93 //
94
95 const int ALL_FLAGS = TILED_FLAG | LONG_NAMES_FLAG;
96
97
98 //
99 // Utility functions
100 //
101
isTiled(int version)102 inline bool isTiled (int version) {return !!(version & TILED_FLAG);}
makeTiled(int version)103 inline int makeTiled (int version) {return version | TILED_FLAG;}
makeNotTiled(int version)104 inline int makeNotTiled (int version) {return version & ~TILED_FLAG;}
getVersion(int version)105 inline int getVersion (int version) {return version & VERSION_NUMBER_FIELD;}
getFlags(int version)106 inline int getFlags (int version) {return version & VERSION_FLAGS_FIELD;}
supportsFlags(int flags)107 inline bool supportsFlags (int flags) {return !(flags & ~ALL_FLAGS);}
108
109
110 //
111 // Given the first four bytes of a file, returns true if the
112 // file is probably an OpenEXR image file, false if not.
113 //
114
115 bool isImfMagic (const char bytes[4]);
116
117
118 } // namespace Imf
119
120 #endif
121