/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. // Utility routines to test quickly if a given
  37. // file is an OpenEXR file, and whether the
  38. // file is scanline-based or tiled.
  39. //
  40. //-----------------------------------------------------------------------------
  41. #include <ImfTestFile.h>
  42. #include <ImfStdIO.h>
  43. #include <ImfXdr.h>
  44. #include <ImfVersion.h>
  45. namespace Imf {
  46. bool
  47. isOpenExrFile (const char fileName[], bool &tiled)
  48. {
  49. try
  50. {
  51. StdIFStream is (fileName);
  52. int magic, version;
  53. Xdr::read <StreamIO> (is, magic);
  54. Xdr::read <StreamIO> (is, version);
  55. tiled = isTiled (version);
  56. return magic == MAGIC;
  57. }
  58. catch (...)
  59. {
  60. tiled = false;
  61. return false;
  62. }
  63. }
  64. bool
  65. isOpenExrFile (const char fileName[])
  66. {
  67. bool tiled;
  68. return isOpenExrFile (fileName, tiled);
  69. }
  70. bool
  71. isTiledOpenExrFile (const char fileName[])
  72. {
  73. bool exr, tiled;
  74. exr = isOpenExrFile (fileName, tiled);
  75. return exr && tiled;
  76. }
  77. bool
  78. isOpenExrFile (IStream &is, bool &tiled)
  79. {
  80. try
  81. {
  82. Int64 pos = is.tellg();
  83. if (pos != 0)
  84. is.seekg (0);
  85. int magic, version;
  86. Xdr::read <StreamIO> (is, magic);
  87. Xdr::read <StreamIO> (is, version);
  88. is.seekg (pos);
  89. tiled = isTiled (version);
  90. return magic == MAGIC;
  91. }
  92. catch (...)
  93. {
  94. is.clear();
  95. tiled = false;
  96. return false;
  97. }
  98. }
  99. bool
  100. isOpenExrFile (IStream &is)
  101. {
  102. bool tiled;
  103. return isOpenExrFile (is, tiled);
  104. }
  105. bool
  106. isTiledOpenExrFile (IStream &is)
  107. {
  108. bool exr, tiled;
  109. exr = isOpenExrFile (is, tiled);
  110. return exr && tiled;
  111. }
  112. } // namespace Imf