26#define GROK_STREAM_STATUS_OUTPUT 0x1U
27#define GROK_STREAM_STATUS_INPUT 0x2U
28#define GROK_STREAM_STATUS_END 0x4U
29#define GROK_STREAM_STATUS_ERROR 0x8U
52 BufferedStream(uint8_t* buffer,
size_t initial_buffer_size,
size_t buffer_size,
bool is_input)
57 throw std::runtime_error(
"BufferedStream: buffer size cannot be zero");
59 initial_buffer_size = std::max(initial_buffer_size, buffer_size);
61 buf_ = std::make_unique<BufferAligned8>(buffer, initial_buffer_size,
false);
63 buf_ = std::make_unique<BufferAligned8>(
83 auto stream =
new BufferedStream(memStream->buf_, 0, memStream->len_,
true);
85 stream->setUserData(memStream,
nullptr, memStream->len_);
90 stream->buf_->set_offset(
buf_->offset());
123 memAdvisor_->advise(virtual_offset, length, pattern);
154 size_t read(uint8_t* buffer, uint8_t** zero_copy_buffer,
size_t len)
override
157 return read(buffer, len);
158 if(!zero_copy_buffer)
159 throw std::runtime_error(
"Missing zero copy buffer.");
162 return read(
nullptr, len);
174 size_t writeBytes(
const uint8_t* buffer,
size_t len)
override
190 return current_write_nb_bytes;
192 size_t write_nb_bytes = 0;
198 if(available_bytes >= len)
200 memcpy(
buf_->currPtr(len), buffer, len);
201 write_nb_bytes += len;
203 return write_nb_bytes;
209 write_nb_bytes += available_bytes;
210 memcpy(
buf_->currPtr(available_bytes), buffer, available_bytes);
214 buffer += available_bytes;
215 len -= available_bytes;
223 return write_nb_bytes;
235 size_t current_write_nb_bytes =
241 grklog.error(
"Error on writing stream.");
244 buf_->increment_offset((ptrdiff_t)current_write_nb_bytes);
252 bool skip(int64_t len)
override
268 bool seek(uint64_t offset)
override
299 return buf_->currPtr(0);
304 return !
buf_->owns_data();
315 size_t read(uint8_t* buffer,
size_t len)
318 throw std::exception();
322 size_t read_nb_bytes = 0;
333 :
buf_->increment_offset((ptrdiff_t)len);
341 read_nb_bytes += len;
344 return read_nb_bytes;
359 return read_nb_bytes;
370 return read_nb_bytes;
390 if(len >
buf_->num_elts())
393 return read_nb_bytes + b_read;
404 grklog.error(
"Buffered stream: read length greater than buffer length");
432 read_nb_bytes += len;
434 memcpy(buffer,
buf_->currPtr(len), len);
435 buf_->increment_offset((ptrdiff_t)len);
444 return read_nb_bytes;
456 size_t read_nb_bytes = 0;
457 size_t remaining = len;
462 if(buffered_bytes > remaining)
464 grklog.error(
"Buffered stream: read length greater than buffer length");
468 if(buffered_bytes == 0)
471 return read_nb_bytes;
475 read_nb_bytes += buffered_bytes;
476 buffer += buffered_bytes;
477 remaining -= buffered_bytes;
480 if(read_nb_bytes == len)
481 return read_nb_bytes;
545 buf_->increment_offset((ptrdiff_t)increment);
600 buf_->set_offset(offset);
606 buf_->increment_offset((ptrdiff_t)len);
618 if(numBytes > sizeOfType)
632 if(remaining_bytes < numBytes)
675 std::unique_ptr<BufferAligned8>
buf_;
#define GROK_STREAM_STATUS_INPUT
Definition BufferedStream.h:27
#define GROK_STREAM_STATUS_OUTPUT
Definition BufferedStream.h:26
#define GROK_STREAM_STATUS_ERROR
Definition BufferedStream.h:29
#define GROK_STREAM_STATUS_END
Definition BufferedStream.h:28
Manages a partially ordered deque of buffer chunks that are added asynchronously out of order.
Definition ChunkBuffer.h:47
Definition CurlFetcher.h:49
Definition MemAdvisor.h:35
enum _GRK_CODEC_FORMAT GRK_CODEC_FORMAT
Grok Supported JPEG 2000 formats.
@ GRK_CODEC_UNK
Definition grok.h:321
void(* grk_stream_free_user_data_fn)(void *user_data)
Free user data callback.
Definition grok.h:543
ResWindow.
Definition CompressedChunkCache.h:36
GrkAccessPattern
Definition IMemAdvisor.h:24
void * grk_aligned_malloc(size_t bytes)
Definition MemManager.h:308
void memStreamSetup(IStream *stream, bool isReadStream)
Definition MemStream.cpp:137
ILogger & grklog
Definition Logger.cpp:24
void grk_write(uint8_t *dest, const uint8_t *value, uint8_t sizeOfType, uint32_t numBytes)
Definition StreamIO.cpp:25
bool supportsZeroCopy() override
Checks is stream supports zero copy.
Definition BufferedStream.h:282
void setFetcher(IFetcher *fetcher)
Sets the IFetcher.
Definition BufferedStream.h:100
uint32_t status_
Stream status flags.
Definition BufferedStream.h:670
IStream * bifurcate(void) override
Definition BufferedStream.h:77
std::shared_ptr< ChunkBuffer<> > chunk_buf_
Definition BufferedStream.h:676
void setCallbacks(StreamCallbacks &callbacks) override
Sets callbacks.
Definition BufferedStream.h:141
StreamCallbacks callbacks_
Definition BufferedStream.h:666
size_t read(uint8_t *buffer, size_t len)
Reads bytes from stream.
Definition BufferedStream.h:315
uint64_t streamOffset_
Definition BufferedStream.h:688
std::unique_ptr< BufferAligned8 > buf_
Backing buffer.
Definition BufferedStream.h:675
size_t read(uint8_t *buffer, uint8_t **zero_copy_buffer, size_t len) override
Read bytes.
Definition BufferedStream.h:154
bool readSeek(uint64_t offset)
Performs absolute seek in read stream.
Definition BufferedStream.h:518
size_t readBytesSeekable_
Definition BufferedStream.h:685
~BufferedStream() override
Destroys a BufferedStream.
Definition BufferedStream.h:70
IFetcher * fetcher_
Definition BufferedStream.h:695
bool skip(int64_t len) override
Skips bytes in stream.
Definition BufferedStream.h:252
bool hasSeek() override
Checks if stream is seekable.
Definition BufferedStream.h:277
bool readSkip(int64_t len)
Skip bytes in read stream.
Definition BufferedStream.h:504
void * userData_
user data
Definition BufferedStream.h:652
uint64_t tell(void) override
query byte offset of stream (similar to ftell).
Definition BufferedStream.h:257
void setUserData(void *data, grk_stream_free_user_data_fn freeUserDataFun, uint64_t len) override
Sets user data.
Definition BufferedStream.h:134
void invalidateBuffer()
Definition BufferedStream.h:641
void setChunkBuffer(std::shared_ptr< ChunkBuffer<> > chunkBuffer) override
Definition BufferedStream.h:126
size_t bufferedBytes_
Definition BufferedStream.h:679
size_t readDirect(uint8_t *buffer, size_t len)
Reads directly from callback.
Definition BufferedStream.h:454
size_t originalBufferLength_
Definition BufferedStream.h:693
GRK_CODEC_FORMAT getFormat(void) override
Gets codec format (J2K/JP2/MJ2).
Definition BufferedStream.h:292
bool write24u(uint32_t value) override
Writes 3 bytes from uint32_t as big endian.
Definition BufferedStream.h:164
void writeIncrement(size_t len)
Definition BufferedStream.h:604
bool write_non_template(const uint8_t *value, uint8_t sizeOfType, uint8_t numBytes) override
Definition BufferedStream.h:614
uint8_t * currPtr(void) override
Gets current pointer (used for zero copy).
Definition BufferedStream.h:297
void setMemAdvisor(MemAdvisor *advisor)
Definition BufferedStream.h:115
uint64_t numBytesLeft(void) override
Gets the number of bytes left before end of stream.
Definition BufferedStream.h:262
void setFormat(GRK_CODEC_FORMAT format) override
Stores codec format J2K/JP2/MJ2.
Definition BufferedStream.h:287
IFetcher * getFetcher(void) override
Gets the IFetcher.
Definition BufferedStream.h:110
bool flush() override
Flushes stream to disk.
Definition BufferedStream.h:226
bool seek(uint64_t offset) override
Seek bytes from the stream (absolute).
Definition BufferedStream.h:268
grk_stream_free_user_data_fn freeUserDataCallback_
Pointer to function to free user_data_ (nullptr at initialization) when destroying the stream.
Definition BufferedStream.h:658
void memAdvise(size_t virtual_offset, size_t length, GrkAccessPattern pattern) override
Definition BufferedStream.h:120
size_t writeBytes(const uint8_t *buffer, size_t len) override
Writes bytes to stream (no correction for endian!).
Definition BufferedStream.h:174
bool write8u(uint8_t value) override
Writes byte.
Definition BufferedStream.h:169
bool isMemStream() override
Checks if stream is memory stream i.e.
Definition BufferedStream.h:302
bool firstCache_
Definition BufferedStream.h:692
bool writeSkip(int64_t len)
Skips bytes in write stream.
Definition BufferedStream.h:492
BufferedStream(uint8_t *buffer, size_t initial_buffer_size, size_t buffer_size, bool is_input)
Constructs a BufferedStream.
Definition BufferedStream.h:52
bool writeSeek(uint64_t offset)
Performs absolute seek in write stream.
Definition BufferedStream.h:579
GRK_CODEC_FORMAT format_
Definition BufferedStream.h:690
MemAdvisor * memAdvisor_
Definition BufferedStream.h:696
uint64_t userDataLength_
User data length.
Definition BufferedStream.h:664
Definition MemStream.h:32
Stores callbacks.
Definition IStream.h:40