HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ImfVersion.h
Go to the documentation of this 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_VERSION_H
37 #define INCLUDED_IMF_VERSION_H
38 
39 //-----------------------------------------------------------------------------
40 //
41 // Magic and version number.
42 //
43 //-----------------------------------------------------------------------------
44 
45 #include "ImfExport.h"
46 #include "ImfNamespace.h"
47 
49 
50 //
51 // The MAGIC number is stored in the first four bytes of every
52 // OpenEXR image file. This can be used to quickly test whether
53 // a given file is an OpenEXR image file (see isImfMagic(), below).
54 //
55 
56 const int MAGIC = 20000630;
57 
58 
59 //
60 // The second item in each OpenEXR image file, right after the
61 // magic number, is a four-byte file version identifier. Depending
62 // on a file's version identifier, a file reader can enable various
63 // backwards-compatibility switches, or it can quickly reject files
64 // that it cannot read.
65 //
66 // The version identifier is split into an 8-bit version number,
67 // and a 24-bit flags field.
68 //
69 
70 const int VERSION_NUMBER_FIELD = 0x000000ff;
71 const int VERSION_FLAGS_FIELD = 0xffffff00;
72 
73 
74 //
75 // Value that goes into VERSION_NUMBER_FIELD.
76 //
77 
78 const int EXR_VERSION = 2;
79 
80 
81 //
82 // Flags that can go into VERSION_FLAGS_FIELD.
83 // Flags can only occupy the 1 bits in VERSION_FLAGS_FIELD.
84 //
85 
86 const int TILED_FLAG = 0x00000200; // File is tiled
87 
88 const int LONG_NAMES_FLAG = 0x00000400; // File contains long
89  // attribute or channel
90  // names
91 
92 const int NON_IMAGE_FLAG = 0x00000800; // File has at least one part
93  // which is not a regular
94  // scanline image or regular tiled image
95  // (that is, it is a deep format)
96 
97 const int MULTI_PART_FILE_FLAG = 0x00001000; // File has multiple parts
98 
99 //
100 // Bitwise OR of all known flags.
101 //
102 
105 
106 
107 //
108 // Utility functions
109 //
110 
111 inline bool isTiled (int version) {return !!(version & TILED_FLAG);}
112 inline bool isMultiPart (int version) {return version & MULTI_PART_FILE_FLAG; }
113 inline bool isNonImage(int version) {return version & NON_IMAGE_FLAG; }
114 inline int makeTiled (int version) {return version | TILED_FLAG;}
115 inline int makeNotTiled (int version) {return version & ~TILED_FLAG;}
116 inline int getVersion (int version) {return version & VERSION_NUMBER_FIELD;}
117 inline int getFlags (int version) {return version & VERSION_FLAGS_FIELD;}
118 inline bool supportsFlags (int flags) {return !(flags & ~ALL_FLAGS);}
119 
120 
121 //
122 // Given the first four bytes of a file, returns true if the
123 // file is probably an OpenEXR image file, false if not.
124 //
125 
126 IMF_EXPORT
127 bool isImfMagic (const char bytes[4]);
128 
129 
131 
132 
133 
134 
135 
136 #endif
bool isTiled(int version)
Definition: ImfVersion.h:111
int getVersion(int version)
Definition: ImfVersion.h:116
#define OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT
Definition: ImfNamespace.h:109
const int VERSION_FLAGS_FIELD
Definition: ImfVersion.h:71
bool isMultiPart(int version)
Definition: ImfVersion.h:112
GLbitfield flags
Definition: glcorearb.h:1595
const int TILED_FLAG
Definition: ImfVersion.h:86
const int EXR_VERSION
Definition: ImfVersion.h:78
bool isNonImage(int version)
Definition: ImfVersion.h:113
int getFlags(int version)
Definition: ImfVersion.h:117
const int ALL_FLAGS
Definition: ImfVersion.h:103
bool supportsFlags(int flags)
Definition: ImfVersion.h:118
OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER const int MAGIC
Definition: ImfVersion.h:56
const int LONG_NAMES_FLAG
Definition: ImfVersion.h:88
IMF_EXPORT bool isImfMagic(const char bytes[4])
#define IMF_EXPORT
Definition: ImfExport.h:59
int makeNotTiled(int version)
Definition: ImfVersion.h:115
const int NON_IMAGE_FLAG
Definition: ImfVersion.h:92
const int MULTI_PART_FILE_FLAG
Definition: ImfVersion.h:97
#define OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER
Definition: ImfNamespace.h:108
const int VERSION_NUMBER_FIELD
Definition: ImfVersion.h:70
int makeTiled(int version)
Definition: ImfVersion.h:114