PageRenderTime 27ms CodeModel.GetById 8ms app.highlight 14ms RepoModel.GetById 2ms app.codeStats 0ms

/src/FreeImage/Source/OpenEXR/IlmImf/ImfTestFile.cpp

https://bitbucket.org/cabalistic/ogredeps/
C++ | 135 lines | 72 code | 23 blank | 40 comment | 6 complexity | 96d0308bb8f2fa92b36aff65dc17a69d MD5 | raw 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//
 37//	Utility routines to test quickly if a given
 38//	file is an OpenEXR file, and whether the
 39//	file is scanline-based or tiled.
 40//
 41//-----------------------------------------------------------------------------
 42
 43
 44#include <ImfTestFile.h>
 45#include <ImfStdIO.h>
 46#include <ImfXdr.h>
 47#include <ImfVersion.h>
 48
 49namespace Imf {
 50
 51
 52bool
 53isOpenExrFile (const char fileName[], bool &tiled)
 54{
 55    try
 56    {
 57	StdIFStream is (fileName);
 58
 59	int magic, version;
 60	Xdr::read <StreamIO> (is, magic);
 61	Xdr::read <StreamIO> (is, version);
 62
 63	tiled = isTiled (version);
 64	return magic == MAGIC;
 65    }
 66    catch (...)
 67    {
 68	tiled = false;
 69	return false;
 70    }
 71}
 72
 73
 74bool
 75isOpenExrFile (const char fileName[])
 76{
 77    bool tiled;
 78    return isOpenExrFile (fileName, tiled);
 79}
 80
 81
 82bool
 83isTiledOpenExrFile (const char fileName[])
 84{
 85    bool exr, tiled;
 86    exr = isOpenExrFile (fileName, tiled);
 87    return exr && tiled;
 88}
 89
 90
 91bool
 92isOpenExrFile (IStream &is, bool &tiled)
 93{
 94    try
 95    {
 96	Int64 pos = is.tellg();
 97
 98	if (pos != 0)
 99	    is.seekg (0);
100
101	int magic, version;
102	Xdr::read <StreamIO> (is, magic);
103	Xdr::read <StreamIO> (is, version);
104
105	is.seekg (pos);
106
107	tiled = isTiled (version);
108	return magic == MAGIC;
109    }
110    catch (...)
111    {
112	is.clear();
113	tiled = false;
114	return false;
115    }
116}
117
118
119bool
120isOpenExrFile (IStream &is)
121{
122    bool tiled;
123    return isOpenExrFile (is, tiled);
124}
125
126
127bool
128isTiledOpenExrFile (IStream &is)
129{
130    bool exr, tiled;
131    exr = isOpenExrFile (is, tiled);
132    return exr && tiled;
133}
134
135} // namespace Imf