From 67137773626b27365e1db70516de1ed17705f004 Mon Sep 17 00:00:00 2001 From: Balazs OROSZI Date: Fri, 27 Nov 2020 23:53:13 +0100 Subject: [PATCH] RgbaInputFile: Multipart support test Signed-off-by: Balazs OROSZI --- src/lib/OpenEXR/ImfMultiPartInputFile.h | 2 ++ src/lib/OpenEXR/ImfRgbaFile.cpp | 20 +++++++++++++++++++- src/lib/OpenEXR/ImfRgbaFile.h | 5 +++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/lib/OpenEXR/ImfMultiPartInputFile.h b/src/lib/OpenEXR/ImfMultiPartInputFile.h index ab4567ebcf..29cab47551 100644 --- a/src/lib/OpenEXR/ImfMultiPartInputFile.h +++ b/src/lib/OpenEXR/ImfMultiPartInputFile.h @@ -141,6 +141,8 @@ class 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 196a2b5024..f098df1c4e 100644 --- a/src/lib/OpenEXR/ImfRgbaFile.cpp +++ b/src/lib/OpenEXR/ImfRgbaFile.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include #include #include @@ -1193,6 +1194,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), @@ -1237,7 +1252,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 3e16716b58..16d1bf218b 100644 --- a/src/lib/OpenEXR/ImfRgbaFile.h +++ b/src/lib/OpenEXR/ImfRgbaFile.h @@ -320,6 +320,10 @@ class 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. @@ -440,6 +444,7 @@ class RgbaInputFile InputFile * _inputFile; FromYca * _fromYca; std::string _channelNamePrefix; + MultiPartInputFile* _multiPartFile = nullptr; };