// // SPDX-License-Identifier: BSD-3-Clause // Copyright (c) Contributors to the OpenEXR Project. // #ifndef MULTIPARTOUTPUTFILE_H_ #define MULTIPARTOUTPUTFILE_H_ #include "ImfForward.h" #include "ImfGenericOutputFile.h" #include "ImfThreading.h" OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER // // Class responsible for handling the writing of multipart images. // // Note: Certain attributes are 'common' to all parts. Notably: // * Display Window // * Pixel Aspect Ratio // * Time Code // * Chromaticities // The first header forms the basis for the set of attributes that are shared // across the constituent parts. // // Parameters // headers - pointer to array of headers; one for each part of the image file // parts - count of number of parts // overrideSharedAttributes - toggle for the handling of shared attributes. // set false to check for inconsistencies, true // to copy the values over from the first header. // numThreads - number of threads that should be used in encoding the data. // class IMF_EXPORT_TYPE MultiPartOutputFile : public GenericOutputFile { public: IMF_EXPORT MultiPartOutputFile(const char fileName[], const Header * headers, int parts, bool overrideSharedAttributes = false, int numThreads = globalThreadCount()); IMF_EXPORT MultiPartOutputFile(OStream & os, const Header * headers, int parts, bool overrideSharedAttributes = false, int numThreads = globalThreadCount()); // // return number of parts in file // IMF_EXPORT int parts() const; // // return header for part n // (note: may have additional attributes compared to that passed to constructor) // IMF_EXPORT const Header & header(int n) const; IMF_EXPORT ~MultiPartOutputFile(); MultiPartOutputFile(const MultiPartOutputFile& other) = delete; MultiPartOutputFile& operator = (const MultiPartOutputFile& other) = delete; MultiPartOutputFile(MultiPartOutputFile&& other) = delete; MultiPartOutputFile& operator = (MultiPartOutputFile&& other) = delete; struct IMF_HIDDEN Data; private: Data* _data; template IMF_HIDDEN T* getOutputPart(int partNumber); friend class OutputPart; friend class TiledOutputPart; friend class DeepScanLineOutputPart; friend class DeepTiledOutputPart; }; OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT #endif /* MULTIPARTOUTPUTFILE_H_ */