/usr/local/include/OpenEXR/ImfContextInit.h
Line | Count | Source (jump to first uncovered line) |
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 | | |
13 | | OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER |
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.) |
20 | | class IMF_EXPORT_TYPE ContextInitializer |
21 | | { |
22 | | enum class ContextFileType |
23 | | { |
24 | | READ, |
25 | | WRITE, |
26 | | READ_WRITE, |
27 | | TEMP |
28 | | }; |
29 | | |
30 | | public: |
31 | | ContextInitializer& setErrorHandler (exr_error_handler_cb_t errfn) noexcept |
32 | 0 | { |
33 | 0 | _initializer.error_handler_fn = errfn; |
34 | 0 | return *this; |
35 | 0 | } |
36 | | |
37 | | ContextInitializer& setAllocationFunctions ( |
38 | | exr_memory_allocation_func_t allocfn, |
39 | | exr_memory_free_func_t freefn) noexcept |
40 | 0 | { |
41 | 0 | _initializer.alloc_fn = allocfn; |
42 | 0 | _initializer.free_fn = freefn; |
43 | 0 | return *this; |
44 | 0 | } |
45 | | |
46 | | IMF_EXPORT |
47 | | ContextInitializer& setInputStream (IStream* istr); |
48 | | IMF_EXPORT |
49 | | ContextInitializer& setOutputStream (OStream* ostr); |
50 | | |
51 | | ContextInitializer& setCustomInputIO ( |
52 | | void* user, |
53 | | exr_read_func_ptr_t readfn, |
54 | | exr_query_size_func_ptr_t sizefn, |
55 | | exr_destroy_stream_func_ptr_t destroyfn) noexcept |
56 | 0 | { |
57 | 0 | _initializer.user_data = user; |
58 | 0 | _initializer.read_fn = readfn; |
59 | 0 | _initializer.size_fn = sizefn; |
60 | 0 | _initializer.destroy_fn = destroyfn; |
61 | 0 | _ctxt_type = ContextFileType::READ; |
62 | 0 | return *this; |
63 | 0 | } |
64 | | |
65 | | ContextInitializer& setCustomOutputIO ( |
66 | | void* user, |
67 | | exr_write_func_ptr_t writefn, |
68 | | exr_destroy_stream_func_ptr_t destroyfn, |
69 | | exr_read_func_ptr_t readfn = nullptr, |
70 | | exr_query_size_func_ptr_t sizefn = nullptr) noexcept |
71 | 0 | { |
72 | 0 | _initializer.user_data = user; |
73 | 0 | _initializer.read_fn = readfn; |
74 | 0 | _initializer.size_fn = sizefn; |
75 | 0 | _initializer.write_fn = writefn; |
76 | 0 | _initializer.destroy_fn = destroyfn; |
77 | 0 | _ctxt_type = (readfn) ? ContextFileType::READ_WRITE |
78 | 0 | : ContextFileType::WRITE; |
79 | 0 | return *this; |
80 | 0 | } |
81 | | |
82 | | ContextInitializer& setMaxImageSize (int w, int h) noexcept |
83 | 0 | { |
84 | 0 | _initializer.max_image_width = w; |
85 | 0 | _initializer.max_image_height = h; |
86 | 0 | return *this; |
87 | 0 | } |
88 | | |
89 | | ContextInitializer& setMaxTileSize (int w, int h) noexcept |
90 | 0 | { |
91 | 0 | _initializer.max_tile_width = w; |
92 | 0 | _initializer.max_tile_height = h; |
93 | 0 | return *this; |
94 | 0 | } |
95 | | |
96 | | ContextInitializer& setZipLevel (int zl) noexcept |
97 | 0 | { |
98 | 0 | _initializer.zip_level = zl; |
99 | 0 | return *this; |
100 | 0 | } |
101 | | |
102 | | ContextInitializer& setDWAQuality (float dq) noexcept |
103 | 0 | { |
104 | 0 | _initializer.dwa_quality = dq; |
105 | 0 | return *this; |
106 | 0 | } |
107 | | |
108 | | ContextInitializer& strictHeaderValidation (bool onoff) noexcept |
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 | | |
120 | | ContextInitializer& disableChunkReconstruction (bool onoff) noexcept |
121 | | { |
122 | | setFlag (EXR_CONTEXT_FLAG_DISABLE_CHUNK_RECONSTRUCTION, onoff); |
123 | | return *this; |
124 | | } |
125 | | |
126 | | ContextInitializer& writeLegacyHeader (bool onoff) noexcept |
127 | 0 | { |
128 | 0 | setFlag (EXR_CONTEXT_FLAG_WRITE_LEGACY_HEADER, onoff); |
129 | 0 | return *this; |
130 | 0 | } |
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 | | |
141 | | exr_context_initializer_t _initializer = EXR_DEFAULT_CONTEXT_INITIALIZER; |
142 | | ContextFileType _ctxt_type = ContextFileType::TEMP; |
143 | | IStream* _prov_stream = nullptr; |
144 | | }; // class ContextInitializer |
145 | | |
146 | | OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT |
147 | | |
148 | | #endif // INCLUDED_IMF_CONTEXT_INIT_H |