1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438 |
- ///////////////////////////////////////////////////////////////////////////
- //
- // Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
- // Digital Ltd. LLC
- //
- // All rights reserved.
- //
- // Redistribution and use in source and binary forms, with or without
- // modification, are permitted provided that the following conditions are
- // met:
- // * Redistributions of source code must retain the above copyright
- // notice, this list of conditions and the following disclaimer.
- // * Redistributions in binary form must reproduce the above
- // copyright notice, this list of conditions and the following disclaimer
- // in the documentation and/or other materials provided with the
- // distribution.
- // * Neither the name of Industrial Light & Magic nor the names of
- // its contributors may be used to endorse or promote products derived
- // from this software without specific prior written permission.
- //
- // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- //
- ///////////////////////////////////////////////////////////////////////////
- //-----------------------------------------------------------------------------
- //
- // C interface to C++ classes Imf::RgbaOutputFile and Imf::RgbaInputFile
- //
- //-----------------------------------------------------------------------------
- #include <ImfCRgbaFile.h>
- #include <ImfRgbaFile.h>
- #include <ImfTiledRgbaFile.h>
- #include <ImfIntAttribute.h>
- #include <ImfFloatAttribute.h>
- #include <ImfDoubleAttribute.h>
- #include <ImfStringAttribute.h>
- #include <ImfBoxAttribute.h>
- #include <ImfVecAttribute.h>
- #include <ImfMatrixAttribute.h>
- #include <ImfChannelList.h>
- #include <ImfLut.h>
- #include "half.h"
- #include "ImfNamespace.h"
- #include "ImathForward.h"
- #include <string.h>
- using IMATH_NAMESPACE::Box2i;
- using IMATH_NAMESPACE::Box2f;
- using IMATH_NAMESPACE::V2i;
- using IMATH_NAMESPACE::V2f;
- using IMATH_NAMESPACE::V3i;
- using IMATH_NAMESPACE::V3f;
- using IMATH_NAMESPACE::M33f;
- using IMATH_NAMESPACE::M44f;
- namespace {
- const int MAX_ERR_LENGTH = 1024;
- char errorMessage[MAX_ERR_LENGTH];
- void
- setErrorMessage (const std::exception &e)
- {
- strncpy (errorMessage, e.what(), MAX_ERR_LENGTH - 1);
- errorMessage[MAX_ERR_LENGTH - 1] = 0;
- }
- inline OPENEXR_IMF_INTERNAL_NAMESPACE::Header *
- header (ImfHeader *hdr)
- {
- return (OPENEXR_IMF_INTERNAL_NAMESPACE::Header *)(hdr);
- }
- inline const OPENEXR_IMF_INTERNAL_NAMESPACE::Header *
- header (const ImfHeader *hdr)
- {
- return (const OPENEXR_IMF_INTERNAL_NAMESPACE::Header *)(hdr);
- }
- inline OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaOutputFile *
- outfile (ImfOutputFile *out)
- {
- return (OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaOutputFile *) out;
- }
- inline const OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaOutputFile *
- outfile (const ImfOutputFile *out)
- {
- return (const OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaOutputFile *) out;
- }
- inline OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaOutputFile *
- outfile (ImfTiledOutputFile *out)
- {
- return (OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaOutputFile *) out;
- }
- inline const OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaOutputFile *
- outfile (const ImfTiledOutputFile *out)
- {
- return (const OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaOutputFile *) out;
- }
- inline OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaInputFile *
- infile (ImfInputFile *in)
- {
- return (OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaInputFile *) in;
- }
- inline const OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaInputFile *
- infile (const ImfInputFile *in)
- {
- return (const OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaInputFile *) in;
- }
- inline OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaInputFile *
- infile (ImfTiledInputFile *in)
- {
- return (OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaInputFile *) in;
- }
- inline const OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaInputFile *
- infile (const ImfTiledInputFile *in)
- {
- return (const OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaInputFile *) in;
- }
- } // namespace
- void
- ImfFloatToHalf (float f, ImfHalf *h)
- {
- *h = half(f).bits();
- }
- void
- ImfFloatToHalfArray (int n, const float f[/*n*/], ImfHalf h[/*n*/])
- {
- for (int i = 0; i < n; ++i)
- h[i] = half(f[i]).bits();
- }
- float
- ImfHalfToFloat (ImfHalf h)
- {
- return float (*((half *)&h));
- }
- void
- ImfHalfToFloatArray (int n, const ImfHalf h[/*n*/], float f[/*n*/])
- {
- for (int i = 0; i < n; ++i)
- f[i] = float (*((half *)(h + i)));
- }
- ImfHeader *
- ImfNewHeader (void)
- {
- try
- {
- return (ImfHeader *) new OPENEXR_IMF_INTERNAL_NAMESPACE::Header;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- void
- ImfDeleteHeader (ImfHeader *hdr)
- {
- delete header (hdr);
- }
- ImfHeader *
- ImfCopyHeader (const ImfHeader *hdr)
- {
- try
- {
- return (ImfHeader *) new OPENEXR_IMF_INTERNAL_NAMESPACE::Header (*header (hdr));
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- void
- ImfHeaderSetDisplayWindow (ImfHeader *hdr,
- int xMin, int yMin,
- int xMax, int yMax)
- {
- header(hdr)->displayWindow() = Box2i (V2i (xMin, yMin), V2i (xMax, yMax));
- }
- void
- ImfHeaderDisplayWindow (const ImfHeader *hdr,
- int *xMin, int *yMin,
- int *xMax, int *yMax)
- {
- const Box2i dw = header(hdr)->displayWindow();
- *xMin = dw.min.x;
- *yMin = dw.min.y;
- *xMax = dw.max.x;
- *yMax = dw.max.y;
- }
- void
- ImfHeaderSetDataWindow (ImfHeader *hdr,
- int xMin, int yMin,
- int xMax, int yMax)
- {
- header(hdr)->dataWindow() = Box2i (V2i (xMin, yMin), V2i (xMax, yMax));
- }
- void
- ImfHeaderDataWindow (const ImfHeader *hdr,
- int *xMin, int *yMin,
- int *xMax, int *yMax)
- {
- const Box2i dw = header(hdr)->dataWindow();
- *xMin = dw.min.x;
- *yMin = dw.min.y;
- *xMax = dw.max.x;
- *yMax = dw.max.y;
- }
- void
- ImfHeaderSetPixelAspectRatio (ImfHeader *hdr, float pixelAspectRatio)
- {
- header(hdr)->pixelAspectRatio() = pixelAspectRatio;
- }
- float
- ImfHeaderPixelAspectRatio (const ImfHeader *hdr)
- {
- return header(hdr)->pixelAspectRatio();
- }
- void
- ImfHeaderSetScreenWindowCenter (ImfHeader *hdr, float x, float y)
- {
- header(hdr)->screenWindowCenter() = V2f (x, y);
- }
- void
- ImfHeaderScreenWindowCenter (const ImfHeader *hdr, float *x, float *y)
- {
- const V2i &swc = header(hdr)->screenWindowCenter();
- *x = (float) swc.x;
- *y = (float) swc.y;
- }
- void
- ImfHeaderSetScreenWindowWidth (ImfHeader *hdr, float width)
- {
- header(hdr)->screenWindowWidth() = width;
- }
- float
- ImfHeaderScreenWindowWidth (const ImfHeader *hdr)
- {
- return header(hdr)->screenWindowWidth();
- }
- void
- ImfHeaderSetLineOrder (ImfHeader *hdr, int lineOrder)
- {
- header(hdr)->lineOrder() = OPENEXR_IMF_INTERNAL_NAMESPACE::LineOrder (lineOrder);
- }
- int
- ImfHeaderLineOrder (const ImfHeader *hdr)
- {
- return header(hdr)->lineOrder();
- }
-
- void
- ImfHeaderSetCompression (ImfHeader *hdr, int compression)
- {
- header(hdr)->compression() = OPENEXR_IMF_INTERNAL_NAMESPACE::Compression (compression);
- }
- int
- ImfHeaderCompression (const ImfHeader *hdr)
- {
- return header(hdr)->compression();
- }
- int
- ImfHeaderSetIntAttribute (ImfHeader *hdr, const char name[], int value)
- {
- try
- {
- if (header(hdr)->find(name) == header(hdr)->end())
- {
- header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::IntAttribute (value));
- }
- else
- {
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::IntAttribute>(name).value() =
- value;
- }
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderIntAttribute (const ImfHeader *hdr, const char name[], int *value)
- {
- try
- {
- *value = header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::IntAttribute>(name).value();
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderSetFloatAttribute (ImfHeader *hdr, const char name[], float value)
- {
- try
- {
- if (header(hdr)->find(name) == header(hdr)->end())
- {
- header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::FloatAttribute (value));
- }
- else
- {
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::FloatAttribute>(name).value() =
- value;
- }
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderSetDoubleAttribute (ImfHeader *hdr, const char name[], double value)
- {
- try
- {
- if (header(hdr)->find(name) == header(hdr)->end())
- {
- header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::DoubleAttribute (value));
- }
- else
- {
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::DoubleAttribute>(name).value() =
- value;
- }
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderFloatAttribute (const ImfHeader *hdr, const char name[], float *value)
- {
- try
- {
- *value = header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::FloatAttribute>(name).value();
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderDoubleAttribute (const ImfHeader *hdr,
- const char name[],
- double *value)
- {
- try
- {
- *value = header(hdr)->
- typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::DoubleAttribute>(name).value();
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderSetStringAttribute (ImfHeader *hdr,
- const char name[],
- const char value[])
- {
- try
- {
- if (header(hdr)->find(name) == header(hdr)->end())
- {
- header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::StringAttribute (value));
- }
- else
- {
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::StringAttribute>(name).value() =
- value;
- }
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderStringAttribute (const ImfHeader *hdr,
- const char name[],
- const char **value)
- {
- try
- {
- *value = header(hdr)->
- typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::StringAttribute>(name).value().c_str();
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderSetBox2iAttribute (ImfHeader *hdr,
- const char name[],
- int xMin, int yMin,
- int xMax, int yMax)
- {
- try
- {
- Box2i box (V2i (xMin, yMin), V2i (xMax, yMax));
- if (header(hdr)->find(name) == header(hdr)->end())
- {
- header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::Box2iAttribute (box));
- }
- else
- {
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::Box2iAttribute>(name).value() =
- box;
- }
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderBox2iAttribute (const ImfHeader *hdr,
- const char name[],
- int *xMin, int *yMin,
- int *xMax, int *yMax)
- {
- try
- {
- const Box2i &box =
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::Box2iAttribute>(name).value();
- *xMin = box.min.x;
- *yMin = box.min.y;
- *xMax = box.max.x;
- *yMax = box.max.y;
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderSetBox2fAttribute (ImfHeader *hdr,
- const char name[],
- float xMin, float yMin,
- float xMax, float yMax)
- {
- try
- {
- Box2f box (V2f (xMin, yMin), V2f (xMax, yMax));
- if (header(hdr)->find(name) == header(hdr)->end())
- {
- header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::Box2fAttribute (box));
- }
- else
- {
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::Box2fAttribute>(name).value() =
- box;
- }
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderBox2fAttribute (const ImfHeader *hdr,
- const char name[],
- float *xMin, float *yMin,
- float *xMax, float *yMax)
- {
- try
- {
- const Box2f &box =
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::Box2fAttribute>(name).value();
- *xMin = box.min.x;
- *yMin = box.min.y;
- *xMax = box.max.x;
- *yMax = box.max.y;
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderSetV2iAttribute (ImfHeader *hdr,
- const char name[],
- int x, int y)
- {
- try
- {
- V2i v (x, y);
- if (header(hdr)->find(name) == header(hdr)->end())
- header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::V2iAttribute (v));
- else
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::V2iAttribute>(name).value() = v;
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderV2iAttribute (const ImfHeader *hdr,
- const char name[],
- int *x, int *y)
- {
- try
- {
- const V2i &v =
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::V2iAttribute>(name).value();
- *x = v.x;
- *y = v.y;
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderSetV2fAttribute (ImfHeader *hdr,
- const char name[],
- float x, float y)
- {
- try
- {
- V2f v (x, y);
- if (header(hdr)->find(name) == header(hdr)->end())
- header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::V2fAttribute (v));
- else
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::V2fAttribute>(name).value() = v;
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderV2fAttribute (const ImfHeader *hdr,
- const char name[],
- float *x, float *y)
- {
- try
- {
- const V2f &v =
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::V2fAttribute>(name).value();
- *x = v.x;
- *y = v.y;
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderSetV3iAttribute (ImfHeader *hdr,
- const char name[],
- int x, int y, int z)
- {
- try
- {
- V3i v (x, y, z);
- if (header(hdr)->find(name) == header(hdr)->end())
- header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::V3iAttribute (v));
- else
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::V3iAttribute>(name).value() = v;
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderV3iAttribute (const ImfHeader *hdr,
- const char name[],
- int *x, int *y, int *z)
- {
- try
- {
- const V3i &v =
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::V3iAttribute>(name).value();
- *x = v.x;
- *y = v.y;
- *z = v.z;
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderSetV3fAttribute (ImfHeader *hdr,
- const char name[],
- float x, float y, float z)
- {
- try
- {
- V3f v (x, y, z);
- if (header(hdr)->find(name) == header(hdr)->end())
- header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::V3fAttribute (v));
- else
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::V3fAttribute>(name).value() = v;
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderV3fAttribute (const ImfHeader *hdr,
- const char name[],
- float *x, float *y, float *z)
- {
- try
- {
- const V3f &v =
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::V3fAttribute>(name).value();
- *x = v.x;
- *y = v.y;
- *z = v.z;
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderSetM33fAttribute (ImfHeader *hdr,
- const char name[],
- const float m[3][3])
- {
- try
- {
- M33f m3 (m);
- if (header(hdr)->find(name) == header(hdr)->end())
- header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::M33fAttribute (m3));
- else
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::M33fAttribute>(name).value() = m3;
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderM33fAttribute (const ImfHeader *hdr,
- const char name[],
- float m[3][3])
- {
- try
- {
- const M33f &m3 =
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::M33fAttribute>(name).value();
- m[0][0] = m3[0][0];
- m[0][1] = m3[0][1];
- m[0][2] = m3[0][2];
- m[1][0] = m3[1][0];
- m[1][1] = m3[1][1];
- m[1][2] = m3[1][2];
- m[2][0] = m3[2][0];
- m[2][1] = m3[2][1];
- m[2][2] = m3[2][2];
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderSetM44fAttribute (ImfHeader *hdr,
- const char name[],
- const float m[4][4])
- {
- try
- {
- M44f m4 (m);
- if (header(hdr)->find(name) == header(hdr)->end())
- header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::M44fAttribute (m4));
- else
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::M44fAttribute>(name).value() = m4;
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfHeaderM44fAttribute (const ImfHeader *hdr,
- const char name[],
- float m[4][4])
- {
- try
- {
- const M44f &m4 =
- header(hdr)->typedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::M44fAttribute>(name).value();
- m[0][0] = m4[0][0];
- m[0][1] = m4[0][1];
- m[0][2] = m4[0][2];
- m[0][3] = m4[0][3];
- m[1][0] = m4[1][0];
- m[1][1] = m4[1][1];
- m[1][2] = m4[1][2];
- m[1][3] = m4[1][3];
- m[2][0] = m4[2][0];
- m[2][1] = m4[2][1];
- m[2][2] = m4[2][2];
- m[2][3] = m4[2][3];
- m[3][0] = m4[3][0];
- m[3][1] = m4[3][1];
- m[3][2] = m4[3][2];
- m[3][3] = m4[3][3];
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- ImfOutputFile *
- ImfOpenOutputFile (const char name[], const ImfHeader *hdr, int channels)
- {
- try
- {
- return (ImfOutputFile *) new OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaOutputFile
- (name, *header(hdr), OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaChannels (channels));
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfCloseOutputFile (ImfOutputFile *out)
- {
- try
- {
- delete outfile (out);
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfOutputSetFrameBuffer (ImfOutputFile *out,
- const ImfRgba *base,
- size_t xStride,
- size_t yStride)
- {
- try
- {
- outfile(out)->setFrameBuffer ((OPENEXR_IMF_INTERNAL_NAMESPACE::Rgba *)base, xStride, yStride);
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfOutputWritePixels (ImfOutputFile *out, int numScanLines)
- {
- try
- {
- outfile(out)->writePixels (numScanLines);
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfOutputCurrentScanLine (const ImfOutputFile *out)
- {
- return outfile(out)->currentScanLine();
- }
- const ImfHeader *
- ImfOutputHeader (const ImfOutputFile *out)
- {
- return (const ImfHeader *) &outfile(out)->header();
- }
- int
- ImfOutputChannels (const ImfOutputFile *out)
- {
- return outfile(out)->channels();
- }
- ImfTiledOutputFile *
- ImfOpenTiledOutputFile (const char name[],
- const ImfHeader *hdr,
- int channels,
- int xSize, int ySize,
- int mode, int rmode)
- {
- try
- {
- return (ImfTiledOutputFile *) new OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaOutputFile
- (name, *header(hdr),
- OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaChannels (channels),
- xSize, ySize,
- OPENEXR_IMF_INTERNAL_NAMESPACE::LevelMode (mode),
- OPENEXR_IMF_INTERNAL_NAMESPACE::LevelRoundingMode (rmode));
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfCloseTiledOutputFile (ImfTiledOutputFile *out)
- {
- try
- {
- delete outfile (out);
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfTiledOutputSetFrameBuffer (ImfTiledOutputFile *out,
- const ImfRgba *base,
- size_t xStride,
- size_t yStride)
- {
- try
- {
- outfile(out)->setFrameBuffer ((OPENEXR_IMF_INTERNAL_NAMESPACE::Rgba *)base, xStride, yStride);
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfTiledOutputWriteTile (ImfTiledOutputFile *out,
- int dx, int dy,
- int lx, int ly)
- {
- try
- {
- outfile(out)->writeTile (dx, dy, lx, ly);
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfTiledOutputWriteTiles (ImfTiledOutputFile *out,
- int dxMin, int dxMax,
- int dyMin, int dyMax,
- int lx, int ly)
- {
- try
- {
- outfile(out)->writeTiles (dxMin, dxMax, dyMin, dyMax, lx, ly);
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- const ImfHeader *
- ImfTiledOutputHeader (const ImfTiledOutputFile *out)
- {
- return (const ImfHeader *) &outfile(out)->header();
- }
- int
- ImfTiledOutputChannels (const ImfTiledOutputFile *out)
- {
- return outfile(out)->channels();
- }
- int
- ImfTiledOutputTileXSize (const ImfTiledOutputFile *out)
- {
- return outfile(out)->tileXSize();
- }
- int
- ImfTiledOutputTileYSize (const ImfTiledOutputFile *out)
- {
- return outfile(out)->tileYSize();
- }
- int
- ImfTiledOutputLevelMode (const ImfTiledOutputFile *out)
- {
- return outfile(out)->levelMode();
- }
- int
- ImfTiledOutputLevelRoundingMode (const ImfTiledOutputFile *out)
- {
- return outfile(out)->levelRoundingMode();
- }
- ImfInputFile *
- ImfOpenInputFile (const char name[])
- {
- try
- {
- return (ImfInputFile *) new OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaInputFile (name);
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfCloseInputFile (ImfInputFile *in)
- {
- try
- {
- delete infile (in);
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfInputSetFrameBuffer (ImfInputFile *in,
- ImfRgba *base,
- size_t xStride,
- size_t yStride)
- {
- try
- {
- infile(in)->setFrameBuffer ((OPENEXR_IMF_INTERNAL_NAMESPACE::Rgba *) base, xStride, yStride);
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfInputReadPixels (ImfInputFile *in, int scanLine1, int scanLine2)
- {
- try
- {
- infile(in)->readPixels (scanLine1, scanLine2);
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- const ImfHeader *
- ImfInputHeader (const ImfInputFile *in)
- {
- return (const ImfHeader *) &infile(in)->header();
- }
- int
- ImfInputChannels (const ImfInputFile *in)
- {
- return infile(in)->channels();
- }
- const char *
- ImfInputFileName (const ImfInputFile *in)
- {
- return infile(in)->fileName();
- }
- ImfTiledInputFile *
- ImfOpenTiledInputFile (const char name[])
- {
- try
- {
- return (ImfTiledInputFile *) new OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaInputFile (name);
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfCloseTiledInputFile (ImfTiledInputFile *in)
- {
- try
- {
- delete infile (in);
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfTiledInputSetFrameBuffer (ImfTiledInputFile *in,
- ImfRgba *base,
- size_t xStride,
- size_t yStride)
- {
- try
- {
- infile(in)->setFrameBuffer ((OPENEXR_IMF_INTERNAL_NAMESPACE::Rgba *) base, xStride, yStride);
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfTiledInputReadTile (ImfTiledInputFile *in,
- int dx, int dy,
- int lx, int ly)
- {
- try
- {
- infile(in)->readTile (dx, dy, lx, ly);
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- int
- ImfTiledInputReadTiles (ImfTiledInputFile *in,
- int dxMin, int dxMax,
- int dyMin, int dyMax,
- int lx, int ly)
- {
- try
- {
- infile(in)->readTiles (dxMin, dxMax, dyMin, dyMax, lx, ly);
- return 1;
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- const ImfHeader *
- ImfTiledInputHeader (const ImfTiledInputFile *in)
- {
- return (const ImfHeader *) &infile(in)->header();
- }
- int
- ImfTiledInputChannels (const ImfTiledInputFile *in)
- {
- return infile(in)->channels();
- }
- const char *
- ImfTiledInputFileName (const ImfTiledInputFile *in)
- {
- return infile(in)->fileName();
- }
- int
- ImfTiledInputTileXSize (const ImfTiledInputFile *in)
- {
- return infile(in)->tileXSize();
- }
- int
- ImfTiledInputTileYSize (const ImfTiledInputFile *in)
- {
- return infile(in)->tileYSize();
- }
- int
- ImfTiledInputLevelMode (const ImfTiledInputFile *in)
- {
- return infile(in)->levelMode();
- }
- int
- ImfTiledInputLevelRoundingMode (const ImfTiledInputFile *in)
- {
- return infile(in)->levelRoundingMode();
- }
- ImfLut *
- ImfNewRound12logLut (int channels)
- {
- try
- {
- return (ImfLut *) new OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaLut
- (OPENEXR_IMF_INTERNAL_NAMESPACE::round12log, OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaChannels (channels));
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- ImfLut *
- ImfNewRoundNBitLut (unsigned int n, int channels)
- {
- try
- {
- return (ImfLut *) new OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaLut
- (OPENEXR_IMF_INTERNAL_NAMESPACE::roundNBit (n), OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaChannels (channels));
- }
- catch (const std::exception &e)
- {
- setErrorMessage (e);
- return 0;
- }
- }
- void
- ImfDeleteLut (ImfLut *lut)
- {
- delete (OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaLut *) lut;
- }
- void
- ImfApplyLut (ImfLut *lut, ImfRgba *data, int nData, int stride)
- {
- ((OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaLut *)lut)->apply ((OPENEXR_IMF_INTERNAL_NAMESPACE::Rgba *)data, nData, stride);
- }
- const char *
- ImfErrorMessage ()
- {
- return errorMessage;
- }
|