diff --git a/src/lib/OpenEXR/ImfMultiPartInputFile.h b/src/lib/OpenEXR/ImfMultiPartInputFile.h index b83ea9843b..69be13a12e 100644 --- a/src/lib/OpenEXR/ImfMultiPartInputFile.h +++ b/src/lib/OpenEXR/ImfMultiPartInputFile.h @@ -111,6 +111,8 @@ class IMF_EXPORT_TYPE MultiPartInputFile : public GenericInputFile friend class ScanLineInputFile; friend class DeepScanLineInputFile; friend class DeepTiledInputFile; + + friend class RgbaInputFile; }; diff --git a/src/lib/OpenEXR/ImfRgbaFile.cpp b/src/lib/OpenEXR/ImfRgbaFile.cpp index 47b87dee26..acd96257fa 100644 --- a/src/lib/OpenEXR/ImfRgbaFile.cpp +++ b/src/lib/OpenEXR/ImfRgbaFile.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -1164,6 +1165,20 @@ RgbaInputFile::RgbaInputFile (const char name[], int numThreads): } +RgbaInputFile::RgbaInputFile (int partNumber, const char name[], int numThreads): + _inputFile (0), + _fromYca (0), + _channelNamePrefix ("") +{ + _multiPartFile = new MultiPartInputFile(name, numThreads); + _inputFile = _multiPartFile->getInputPart(partNumber); + RgbaChannels rgbaChannels = channels(); + + if (rgbaChannels & (WRITE_Y | WRITE_C)) + _fromYca = new FromYca (*_inputFile, rgbaChannels); +} + + RgbaInputFile::RgbaInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int numThreads): _inputFile (new InputFile (is, numThreads)), _fromYca (0), @@ -1208,7 +1223,10 @@ RgbaInputFile::RgbaInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, RgbaInputFile::~RgbaInputFile () { - delete _inputFile; + if (_multiPartFile) + delete _multiPartFile; + else + delete _inputFile; delete _fromYca; } diff --git a/src/lib/OpenEXR/ImfRgbaFile.h b/src/lib/OpenEXR/ImfRgbaFile.h index fc4b2b7511..7379642687 100644 --- a/src/lib/OpenEXR/ImfRgbaFile.h +++ b/src/lib/OpenEXR/ImfRgbaFile.h @@ -292,6 +292,10 @@ class IMF_EXPORT_TYPE RgbaInputFile RgbaInputFile (const char name[], int numThreads = globalThreadCount()); + IMF_EXPORT + RgbaInputFile (int partNumber, const char name[], int numThreads = globalThreadCount()); + + //----------------------------------------------------------- // Constructor -- attaches the new RgbaInputFile object to a // file that has already been opened by the caller. @@ -412,6 +416,7 @@ class IMF_EXPORT_TYPE RgbaInputFile InputFile * _inputFile; FromYca * _fromYca; std::string _channelNamePrefix; + MultiPartInputFile* _multiPartFile = nullptr; };