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
48OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER
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
56const 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
70const int VERSION_NUMBER_FIELD = 0x000000ff;
71const int VERSION_FLAGS_FIELD = 0xffffff00;
72
73
74//
75// Value that goes into VERSION_NUMBER_FIELD.
76//
77
78const 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
86const int TILED_FLAG = 0x00000200; // File is tiled
87
88const int LONG_NAMES_FLAG = 0x00000400; // File contains long
89 // attribute or channel
90 // names
91
92const 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
97const int MULTI_PART_FILE_FLAG = 0x00001000; // File has multiple parts
98
99//
100// Bitwise OR of all known flags.
101//
102
103const int ALL_FLAGS = TILED_FLAG | LONG_NAMES_FLAG |
104 NON_IMAGE_FLAG | MULTI_PART_FILE_FLAG;
105
106
107//
108// Utility functions
109//
110
111inline bool isTiled (int version) {return !!(version & TILED_FLAG);}
112inline bool isMultiPart (int version) {return version & MULTI_PART_FILE_FLAG; }
113inline bool isNonImage(int version) {return version & NON_IMAGE_FLAG; }
114inline int makeTiled (int version) {return version | TILED_FLAG;}
115inline int makeNotTiled (int version) {return version & ~TILED_FLAG;}
116inline int getVersion (int version) {return version & VERSION_NUMBER_FIELD;}
117inline int getFlags (int version) {return version & VERSION_FLAGS_FIELD;}
118inline 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
126IMF_EXPORT
127bool isImfMagic (const char bytes[4]);
128
129
130OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT
131
132
133
134
135
136#endif
137