HDK
|
#include <openexr_decode.h>
Public Attributes | |
exr_coding_channel_info_t * | channels |
int16_t | channel_count |
uint16_t | decode_flags |
int | part_index |
exr_const_context_t | context |
exr_chunk_info_t | chunk |
void * | decoding_user_data |
void * | packed_buffer |
size_t | packed_alloc_size |
void * | unpacked_buffer |
size_t | unpacked_alloc_size |
void * | packed_sample_count_table |
size_t | packed_sample_count_alloc_size |
int32_t * | sample_count_table |
size_t | sample_count_alloc_size |
void * | scratch_buffer_1 |
size_t | scratch_alloc_size_1 |
void * | scratch_buffer_2 |
size_t | scratch_alloc_size_2 |
void *(* | alloc_fn )(exr_transcoding_pipeline_buffer_id_t, size_t) |
void(* | free_fn )(exr_transcoding_pipeline_buffer_id_t, void *) |
exr_result_t(* | read_fn )(struct _exr_decode_pipeline *pipeline) |
exr_result_t(* | decompress_fn )(struct _exr_decode_pipeline *pipeline) |
exr_result_t(* | realloc_nonimage_data_fn )(struct _exr_decode_pipeline *pipeline) |
exr_result_t(* | unpack_and_convert_fn )(struct _exr_decode_pipeline *pipeline) |
exr_coding_channel_info_t | _quick_chan_store [5] |
Struct meant to be used on a per-thread basis for reading exr data
As should be obvious, this structure is NOT thread safe, but rather meant to be used by separate threads, which can all be accessing the same context concurrently.
Definition at line 64 of file openexr_decode.h.
exr_coding_channel_info_t _exr_decode_pipeline::_quick_chan_store[5] |
Small stash of channel info values. This is faster than calling malloc when the channel count in the part is small (RGBAZ), which is super common, however if there are a large number of channels, it will allocate space for that, so do not rely on this being used.
Definition at line 246 of file openexr_decode.h.
void*(* _exr_decode_pipeline::alloc_fn)(exr_transcoding_pipeline_buffer_id_t, size_t) |
Enable a custom allocator for the different buffers (if decoding on a GPU). If NULL
, will use the allocator from the context.
Definition at line 181 of file openexr_decode.h.
int16_t _exr_decode_pipeline::channel_count |
Definition at line 78 of file openexr_decode.h.
exr_coding_channel_info_t* _exr_decode_pipeline::channels |
The output channel information for this chunk.
User is expected to fill the channel pointers for the desired output channels (any that are NULL
will be skipped) if you are going to use exr_decoding_choose_default_routines(). If all that is desired is to read and decompress the data, this can be left uninitialized.
Describes the channel information. This information is allocated dynamically during exr_decoding_initialize().
Definition at line 77 of file openexr_decode.h.
exr_chunk_info_t _exr_decode_pipeline::chunk |
Definition at line 88 of file openexr_decode.h.
exr_const_context_t _exr_decode_pipeline::context |
Definition at line 87 of file openexr_decode.h.
uint16_t _exr_decode_pipeline::decode_flags |
Decode flags to control the behavior.
Definition at line 81 of file openexr_decode.h.
void* _exr_decode_pipeline::decoding_user_data |
Can be used by the user to pass custom context data through the decode pipeline.
Definition at line 93 of file openexr_decode.h.
exr_result_t(* _exr_decode_pipeline::decompress_fn)(struct _exr_decode_pipeline *pipeline) |
Function chosen based on the compression type of the part to decompress data.
If the user has a custom decompression method for the compression on this part, this can be changed after initialization.
If only compressed data is desired, then assign this to NULL
after initialization.
Definition at line 215 of file openexr_decode.h.
void(* _exr_decode_pipeline::free_fn)(exr_transcoding_pipeline_buffer_id_t, void *) |
Enable a custom allocator for the different buffers (if decoding on a GPU). If NULL
, will use the allocator from the context.
Definition at line 187 of file openexr_decode.h.
size_t _exr_decode_pipeline::packed_alloc_size |
Used when re-using the same decode pipeline struct to know if chunk is changed size whether current buffer is large enough.
Definition at line 108 of file openexr_decode.h.
void* _exr_decode_pipeline::packed_buffer |
The (compressed) buffer.
If NULL
, will be allocated during the run of the pipeline.
If the caller wishes to take control of the buffer, simple adopt the pointer and set it to NULL
here. Be cognizant of any custom allocators.
Definition at line 103 of file openexr_decode.h.
size_t _exr_decode_pipeline::packed_sample_count_alloc_size |
Definition at line 132 of file openexr_decode.h.
void* _exr_decode_pipeline::packed_sample_count_table |
For deep or other non-image data: packed sample table (compressed, raw on disk representation).
Definition at line 131 of file openexr_decode.h.
int _exr_decode_pipeline::part_index |
Copy of the parameters given to the initialize/update for convenience.
Definition at line 86 of file openexr_decode.h.
exr_result_t(* _exr_decode_pipeline::read_fn)(struct _exr_decode_pipeline *pipeline) |
Function chosen to read chunk data from the context.
Initialized to a default generic read routine, may be updated based on channel information when exr_decoding_choose_default_routines() is called. This is done such that if the file is uncompressed and the output channel data is planar and the same type, the read function can read straight into the output channels, getting closer to a zero-copy operation. Otherwise a more traditional read, decompress, then unpack pipeline will be used with a default reader.
This is allowed to be overridden, but probably is not necessary in most scenarios.
Definition at line 203 of file openexr_decode.h.
exr_result_t(* _exr_decode_pipeline::realloc_nonimage_data_fn)(struct _exr_decode_pipeline *pipeline) |
Function which can be provided if you have bespoke handling for non-image data and need to re-allocate the data to handle the about-to-be unpacked data.
If left NULL
, will assume the memory pointed to by the channel pointers is sufficient.
Definition at line 224 of file openexr_decode.h.
size_t _exr_decode_pipeline::sample_count_alloc_size |
Definition at line 143 of file openexr_decode.h.
int32_t* _exr_decode_pipeline::sample_count_table |
Usable, native sample count table. Depending on the flag set above, will be decoded to either a cumulative list (n, n+m, n+m+o, ...), or an individual table (n, m, o, ...). As an optimization, if the latter individual count table is chosen, an extra int32_t will be allocated at the end of the table to contain the total count of samples, so the table will be n+1 samples in size.
Definition at line 142 of file openexr_decode.h.
size_t _exr_decode_pipeline::scratch_alloc_size_1 |
Used when re-using the same decode pipeline struct to know if chunk is changed size whether current buffer is large enough.
Definition at line 159 of file openexr_decode.h.
size_t _exr_decode_pipeline::scratch_alloc_size_2 |
Used when re-using the same decode pipeline struct to know if chunk is changed size whether current buffer is large enough.
Definition at line 175 of file openexr_decode.h.
void* _exr_decode_pipeline::scratch_buffer_1 |
A scratch buffer of unpacked_size for intermediate results.
If NULL
, will be allocated during the run of the pipeline when needed.
If the caller wishes to take control of the buffer, simple adopt the pointer and set it to NULL
here. Be cognizant of any custom allocators.
Definition at line 154 of file openexr_decode.h.
void* _exr_decode_pipeline::scratch_buffer_2 |
Some decompression routines may need a second scratch buffer (zlib).
If NULL
, will be allocated during the run of the pipeline when needed.
If the caller wishes to take control of the buffer, simple adopt the pointer and set it to NULL
here. Be cognizant of any custom allocators.
Definition at line 170 of file openexr_decode.h.
exr_result_t(* _exr_decode_pipeline::unpack_and_convert_fn)(struct _exr_decode_pipeline *pipeline) |
Function chosen based on the output layout of the channels of the part to decompress data.
This will be NULL
after initialization, until the user specifies a custom routine, or initializes the channel data and calls exr_decoding_choose_default_routines().
If only compressed data is desired, then leave or assign this to NULL
after initialization.
Definition at line 237 of file openexr_decode.h.
size_t _exr_decode_pipeline::unpacked_alloc_size |
Used when re-using the same decode pipeline struct to know if chunk is changed size whether current buffer is large enough.
Definition at line 126 of file openexr_decode.h.
void* _exr_decode_pipeline::unpacked_buffer |
The decompressed buffer (unpacked_size from the chunk block info), but still packed into storage order, only needed for compressed files.
If NULL
, will be allocated during the run of the pipeline when needed.
If the caller wishes to take control of the buffer, simple adopt the pointer and set it to NULL
here. Be cognizant of any custom allocators.
Definition at line 121 of file openexr_decode.h.