HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ImfContextInit.h
Go to the documentation of this file.
1 //
2 // SPDX-License-Identifier: BSD-3-Clause
3 // Copyright (c) Contributors to the OpenEXR Project.
4 //
5 
6 #ifndef INCLUDED_IMF_CONTEXT_INIT_H
7 #define INCLUDED_IMF_CONTEXT_INIT_H
8 
9 #include "ImfForward.h"
10 
11 #include "openexr.h"
12 
14 
15 /// @brief ContextInitializer provides a basic type
16 /// to initialize a Context with.
17 ///
18 /// A context fundamentally represents an EXR file of some sort
19 /// (reading a file, reading a stream, etc.)
21 {
22  enum class ContextFileType
23  {
24  READ,
25  WRITE,
26  READ_WRITE,
27  TEMP
28  };
29 
30 public:
32  {
33  _initializer.error_handler_fn = errfn;
34  return *this;
35  }
36 
39  exr_memory_free_func_t freefn) noexcept
40  {
41  _initializer.alloc_fn = allocfn;
42  _initializer.free_fn = freefn;
43  return *this;
44  }
45 
47  ContextInitializer& setInputStream (IStream* istr);
49  ContextInitializer& setOutputStream (OStream* ostr);
50 
52  void* user,
53  exr_read_func_ptr_t readfn,
55  exr_destroy_stream_func_ptr_t destroyfn) noexcept
56  {
57  _initializer.user_data = user;
58  _initializer.read_fn = readfn;
59  _initializer.size_fn = sizefn;
60  _initializer.destroy_fn = destroyfn;
61  _ctxt_type = ContextFileType::READ;
62  return *this;
63  }
64 
66  void* user,
67  exr_write_func_ptr_t writefn,
69  exr_read_func_ptr_t readfn = nullptr,
70  exr_query_size_func_ptr_t sizefn = nullptr) noexcept
71  {
72  _initializer.user_data = user;
73  _initializer.read_fn = readfn;
74  _initializer.size_fn = sizefn;
75  _initializer.write_fn = writefn;
76  _initializer.destroy_fn = destroyfn;
77  _ctxt_type = (readfn) ? ContextFileType::READ_WRITE
78  : ContextFileType::WRITE;
79  return *this;
80  }
81 
82  ContextInitializer& setMaxImageSize (int w, int h) noexcept
83  {
84  _initializer.max_image_width = w;
85  _initializer.max_image_height = h;
86  return *this;
87  }
88 
89  ContextInitializer& setMaxTileSize (int w, int h) noexcept
90  {
91  _initializer.max_tile_width = w;
92  _initializer.max_tile_height = h;
93  return *this;
94  }
95 
96  ContextInitializer& setZipLevel (int zl) noexcept
97  {
98  _initializer.zip_level = zl;
99  return *this;
100  }
101 
102  ContextInitializer& setDWAQuality (float dq) noexcept
103  {
104  _initializer.dwa_quality = dq;
105  return *this;
106  }
107 
109  {
110  setFlag (EXR_CONTEXT_FLAG_STRICT_HEADER, onoff);
111  return *this;
112  }
113 
114  ContextInitializer& silentHeaderParse (bool onoff) noexcept
115  {
116  setFlag (EXR_CONTEXT_FLAG_SILENT_HEADER_PARSE, onoff);
117  return *this;
118  }
119 
121  {
123  return *this;
124  }
125 
126  ContextInitializer& writeLegacyHeader (bool onoff) noexcept
127  {
128  setFlag (EXR_CONTEXT_FLAG_WRITE_LEGACY_HEADER, onoff);
129  return *this;
130  }
131 
132 private:
133  void setFlag (const int flag, bool onoff)
134  {
135  _initializer.flags =
136  (_initializer.flags & ~(flag)) | (onoff ? flag : 0);
137  }
138 
139  friend class Context;
140 
142  ContextFileType _ctxt_type = ContextFileType::TEMP;
143  IStream* _prov_stream = nullptr;
144 }; // class ContextInitializer
145 
147 
148 #endif // INCLUDED_IMF_CONTEXT_INIT_H
Definition: ImfIO.h:26
void(* exr_memory_free_func_t)(void *ptr)
Function pointer used to hold a free-like routine.
Definition: openexr_base.h:177
ContextInitializer & setErrorHandler(exr_error_handler_cb_t errfn) noexcept
Struct used to pass function pointers into the context initialization routines.
#define EXR_CONTEXT_FLAG_SILENT_HEADER_PARSE
Disables error messages while parsing headers.
#define OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT
Definition: ImfNamespace.h:83
ContextInitializer & setCustomOutputIO(void *user, exr_write_func_ptr_t writefn, exr_destroy_stream_func_ptr_t destroyfn, exr_read_func_ptr_t readfn=nullptr, exr_query_size_func_ptr_t sizefn=nullptr) noexcept
ContextInitializer & setMaxTileSize(int w, int h) noexcept
int64_t(* exr_write_func_ptr_t)(exr_const_context_t ctxt, void *userdata, const void *buffer, uint64_t sz, uint64_t offset, exr_stream_error_func_ptr_t error_cb)
ContextInitializer & setCustomInputIO(void *user, exr_read_func_ptr_t readfn, exr_query_size_func_ptr_t sizefn, exr_destroy_stream_func_ptr_t destroyfn) noexcept
ContextInitializer & silentHeaderParse(bool onoff) noexcept
ContextInitializer provides a basic type to initialize a Context with.
Definition: ImfIO.h:162
#define EXR_CONTEXT_FLAG_DISABLE_CHUNK_RECONSTRUCTION
Disables reconstruction logic upon corrupt / missing data chunks.
int64_t(* exr_read_func_ptr_t)(exr_const_context_t ctxt, void *userdata, void *buffer, uint64_t sz, uint64_t offset, exr_stream_error_func_ptr_t error_cb)
Read custom function pointer.
ContextInitializer & strictHeaderValidation(bool onoff) noexcept
void(* exr_error_handler_cb_t)(exr_const_context_t ctxt, exr_result_t code, const char *msg)
Error callback function.
#define IMF_EXPORT
Definition: ImfExport.h:54
void(* exr_destroy_stream_func_ptr_t)(exr_const_context_t ctxt, void *userdata, int failed)
ContextInitializer & writeLegacyHeader(bool onoff) noexcept
GLfloat GLfloat GLfloat GLfloat h
Definition: glcorearb.h:2002
#define EXR_CONTEXT_FLAG_STRICT_HEADER
context flag which will enforce strict header validation checks and may prevent reading of files whic...
void *(* exr_memory_allocation_func_t)(size_t bytes)
Function pointer used to hold a malloc-like routine.
Definition: openexr_base.h:161
int64_t(* exr_query_size_func_ptr_t)(exr_const_context_t ctxt, void *userdata)
#define EXR_DEFAULT_CONTEXT_INITIALIZER
Simple macro to initialize the context initializer with default values.
ContextInitializer & setAllocationFunctions(exr_memory_allocation_func_t allocfn, exr_memory_free_func_t freefn) noexcept
Context provides a wrapper around the Core library context object.
Definition: ImfContext.h:30
#define OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER
Definition: ImfNamespace.h:80
GLubyte GLubyte GLubyte GLubyte w
Definition: glcorearb.h:857
#define IMF_EXPORT_TYPE
Definition: ImfExport.h:57
#define EXR_CONTEXT_FLAG_WRITE_LEGACY_HEADER
Writes an old-style, sorted header with minimal information.
ContextInitializer & setDWAQuality(float dq) noexcept
ContextInitializer & setMaxImageSize(int w, int h) noexcept
ContextInitializer & disableChunkReconstruction(bool onoff) noexcept
ContextInitializer & setZipLevel(int zl) noexcept