DYT/Tool/OpenSceneGraph-3.6.5/include/OpenEXR/ImfMultiPartInputFile.h
2024-12-25 07:49:36 +08:00

128 lines
3.4 KiB
C++

//
// SPDX-License-Identifier: BSD-3-Clause
// Copyright (c) Contributors to the OpenEXR Project.
//
#ifndef IMFMULTIPARTINPUTFILE_H_
#define IMFMULTIPARTINPUTFILE_H_
#include "ImfForward.h"
#include "ImfThreading.h"
#include "ImfContext.h"
OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER
/// \brief
///
/// TODO: Document this
class IMF_EXPORT_TYPE MultiPartInputFile
{
public:
IMF_EXPORT
MultiPartInputFile (
const char fileName[],
int numThreads = globalThreadCount (),
bool reconstructChunkOffsetTable = true);
IMF_EXPORT
MultiPartInputFile (
IStream& is,
int numThreads = globalThreadCount (),
bool reconstructChunkOffsetTable = true);
//-----------------------------------------------------------
// A constructor that opens the file with the specified name
// and context initialization routines
// Destroying the InputFile object will close the file.
//-----------------------------------------------------------
IMF_EXPORT
MultiPartInputFile (
const char* filename,
const ContextInitializer& ctxtinit,
int numThreads = globalThreadCount (),
bool autoAddType = true);
//------------------------
// Access to the file name
//------------------------
IMF_EXPORT
const char* fileName () const;
//----------------------------------
// Access to the file format version
//----------------------------------
IMF_EXPORT
int version () const;
// ----------------------
// Count of number of parts in file
// ---------------------
IMF_EXPORT
int parts () const;
//----------------------
// Access to the headers
//----------------------
IMF_EXPORT
const Header& header (int partNumber) const;
// =----------------------------------------
// Check whether the entire chunk offset
// table for the part is written correctly
// -----------------------------------------
IMF_EXPORT
bool partComplete (int partNumber) const;
// ----------------------------------------
// Flush internal part cache
// Invalidates all 'Part' types previously
// constructed from this file
// Intended for test purposes, but can be
// used to temporarily reduce memory overhead,
// or to switch between types (e.g. TiledInputPart
// or DeepScanLineInputPart to InputPart)
// ----------------------------------------
IMF_EXPORT
void flushPartCache ();
private:
Context _ctxt;
struct Data;
std::shared_ptr<Data> _data;
//
// used internally by 'Part' types to access individual parts of the multipart file
//
// TODO: change these to value / reference semantics (smart ptr)
template <class T> IMF_HIDDEN T* getInputPart (int partNumber);
IMF_HIDDEN InputPartData* getPart (int) const;
IMF_HIDDEN void initialize ();
friend class InputPart;
friend class ScanLineInputPart;
friend class TiledInputPart;
friend class DeepScanLineInputPart;
friend class DeepTiledInputPart;
//
// For backward compatibility.
//
friend class InputFile;
friend class TiledInputFile;
friend class ScanLineInputFile;
friend class DeepScanLineInputFile;
friend class DeepTiledInputFile;
};
OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT
#endif /* IMFMULTIPARTINPUTFILE_H_ */