8 #ifndef UT_BLOSCDECOMPRESSIONFILTER_H_
9 #define UT_BLOSCDECOMPRESSIONFILTER_H_
23 class UT_BloscDecompressionFilter :
public bios::multichar_input_filter
27 size_t myInputBufferSize;
31 size_t myOutputBufferSize;
32 size_t myOutputBufferFlushPosition;
33 size_t myOutputBufferUsedSize;
36 UT_BloscDecompressionFilter();
37 virtual ~UT_BloscDecompressionFilter();
39 template<
typename Source>
40 std::streamsize
read(Source&
src,
char* destinationBuffer,
41 std::streamsize destinationSize);
43 template<
typename Source>
44 void close(Source&) {}
47 inline UT_BloscDecompressionFilter::UT_BloscDecompressionFilter() :
48 myInputBuffer(NULL), myInputBufferSize(0), myOutputBuffer(NULL),
49 myOutputBufferSize(0), myOutputBufferFlushPosition(0), myOutputBufferUsedSize(0)
53 inline UT_BloscDecompressionFilter::~UT_BloscDecompressionFilter()
61 delete myOutputBuffer;
65 template<
typename Source>
66 inline std::streamsize UT_BloscDecompressionFilter::read(Source&
src,
67 char* destinationBuffer, std::streamsize destinationSize)
79 if (myOutputBufferUsedSize == myOutputBufferFlushPosition)
82 myOutputBufferFlushPosition = 0;
83 myOutputBufferUsedSize = 0;
92 size_t uncompressedSize;
93 size_t compressedSize;
101 char* oldBuffer = myInputBuffer;
109 if (myOutputBufferSize < uncompressedSize)
113 delete myOutputBuffer;
115 myOutputBuffer =
new char[uncompressedSize];
116 myOutputBufferSize = uncompressedSize;
128 if (finalBlocksize <= 0)
130 std::cerr <<
"Unable to decompress block." << std::endl;
131 std::cerr <<
"Compressed Size: " << compressedSize << std::endl;
132 std::cerr <<
"Uncompressed Size: " << uncompressedSize << std::endl;
133 std::cerr <<
"Block Size: " << blockSize << std::endl;
134 std::cerr <<
"Error Code: " << finalBlocksize << std::endl;
139 myOutputBufferUsedSize += finalBlocksize;
142 size_t ammountToFlush =
std::min((
size_t) (destinationSize),
143 myOutputBufferUsedSize - myOutputBufferFlushPosition);
144 memcpy(destinationBuffer, myOutputBuffer + myOutputBufferFlushPosition,
146 myOutputBufferFlushPosition += ammountToFlush;
148 return ammountToFlush;
#define BLOSC_MIN_HEADER_LENGTH
BLOSC_EXPORT void blosc_cbuffer_sizes(const void *cbuffer, size_t *nbytes, size_t *cbytes, size_t *blocksize)
ImageBuf OIIO_API min(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
void read(T &in, bool &v)
BLOSC_EXPORT int blosc_decompress(const void *src, void *dest, size_t destsize)
#define BLOSC_MAX_OVERHEAD
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t blockSize(VULKAN_HPP_NAMESPACE::Format format)