Go to the documentation of this file.
25 #include "grk_config_private.h"
30 #define GROK_STREAM_STATUS_OUTPUT 0x1U
31 #define GROK_STREAM_STATUS_INPUT 0x2U
32 #define GROK_STREAM_STATUS_END 0x4U
33 #define GROK_STREAM_STATUS_ERROR 0x8U
40 BufferedStream(uint8_t *buffer,
size_t buffer_size,
bool l_is_input);
95 size_t read(uint8_t *p_buffer,
size_t p_size);
115 size_t write_bytes(
const uint8_t *p_buffer,
size_t p_size);
130 bool skip(int64_t p_size);
152 bool seek(uint64_t offset);
196 template<
typename TYPE>
bool write(TYPE value, uint8_t numBytes);
217 template<
typename TYPE>
void grk_write(uint8_t *p_buffer, TYPE value,
221 assert(nb_bytes <=
sizeof(TYPE));
222 #if defined(GROK_BIG_ENDIAN)
223 const uint8_t * l_data_ptr = ((
const uint8_t *)&value) +
sizeof(TYPE) - nb_bytes;
224 memcpy(p_buffer, l_data_ptr, nb_bytes);
226 const uint8_t *l_data_ptr = ((
const uint8_t*) &value)
227 + (size_t)(nb_bytes - 1);
228 for (uint32_t i = 0; i < nb_bytes; ++i) {
229 *(p_buffer++) = *(l_data_ptr--);
234 template<
typename TYPE>
void grk_write(uint8_t *p_buffer, TYPE value) {
235 grk_write<TYPE>(p_buffer, value,
sizeof(TYPE));
238 template<
typename TYPE>
void grk_read(
const uint8_t *p_buffer, TYPE *value,
240 assert(nb_bytes > 0 && nb_bytes <=
sizeof(TYPE));
241 #if defined(GROK_BIG_ENDIAN)
242 auto l_data_ptr = ((uint8_t *)value);
244 memcpy(l_data_ptr +
sizeof(TYPE) - nb_bytes, p_buffer, nb_bytes);
246 auto l_data_ptr = ((uint8_t*) value) + nb_bytes - 1;
248 for (uint32_t i = 0; i < nb_bytes; ++i)
249 *(l_data_ptr--) = *(p_buffer++);
253 template<
typename TYPE>
void grk_read(
const uint8_t *p_buffer, TYPE *value){
254 grk_read<TYPE>(p_buffer, value,
sizeof(TYPE));
bool write_seek(uint64_t offset)
Absolute seek in write stream.
Definition: BufferedStream.cpp:390
void grk_stream_set_read_function(grk_stream *stream, grk_stream_read_fn p_function)
Set the given function to be used as a read function.
Definition: BufferedStream.cpp:432
void write_increment(size_t p_size)
Definition: BufferedStream.cpp:267
bool write_byte(uint8_t value)
Definition: BufferedStream.cpp:182
bool write_int(uint32_t value)
Definition: BufferedStream.cpp:191
uint64_t m_user_data_length
User data length.
Definition: BufferedStream.h:60
#define GROK_STREAM_STATUS_OUTPUT
Definition: BufferedStream.h:30
void grk_read(const uint8_t *p_buffer, TYPE *value, uint32_t nb_bytes)
Definition: BufferedStream.h:238
size_t offset
Definition: util.h:264
void grk_stream_set_write_function(grk_stream *stream, grk_stream_write_fn p_function)
Set the given function to be used as a write function.
Definition: BufferedStream.cpp:446
grk_stream * grk_stream_create(size_t buffer_size, bool is_input)
Create an abstract stream.
Definition: BufferedStream.cpp:424
void * m_user_data
user data
Definition: BufferedStream.h:46
BufferedStream(uint8_t *buffer, size_t buffer_size, bool l_is_input)
Definition: BufferedStream.cpp:30
Byte input-output stream.
Definition: BufferedStream.h:38
void grk_write(uint8_t *p_buffer, TYPE value, uint32_t nb_bytes)
Definition: BufferedStream.h:217
bool write_short(uint16_t value)
Definition: BufferedStream.cpp:185
void grk_stream_set_seek_function(grk_stream *stream, grk_stream_seek_fn p_function)
Set the given function to be used as a seek function, the stream is then seekable.
Definition: BufferedStream.cpp:440
bool flush()
Flush stream to disk.
Definition: BufferedStream.cpp:277
bool read_skip(int64_t p_size)
Skip bytes in read stream.
Definition: BufferedStream.cpp:315
void grk_stream_destroy(grk_stream *stream)
Destroy a stream created by grk_create_stream.
Definition: BufferedStream.cpp:429
size_t m_buffered_bytes
Definition: BufferedStream.h:204
bool owns_data
Definition: util.h:266
#define GROK_STREAM_STATUS_END
Definition: BufferedStream.h:32
void grk_stream_set_user_data(grk_stream *stream, void *p_data, grk_stream_free_user_data_fn p_function)
Set the given data to be used as a user data for the stream.
Definition: BufferedStream.cpp:455
grk_buffer< uint8_t > grk_buf
Definition: util.h:268
bool write_24(uint32_t value)
Definition: BufferedStream.cpp:188
T * curr_ptr()
Definition: util.h:256
grk_stream_write_fn m_write_fn
Pointer to actual write function (nullptr at initialization).
Definition: BufferedStream.h:75
uint32_t m_status
Stream status flags.
Definition: BufferedStream.h:85
grk_stream_read_fn m_read_fn
Pointer to actual read function (nullptr at initialization).
Definition: BufferedStream.h:65
T * buf
Definition: util.h:263
size_t read_data_zero_copy(uint8_t **p_buffer, size_t p_size)
Definition: BufferedStream.cpp:168
size_t(* grk_stream_read_fn)(void *p_buffer, size_t nb_bytes, void *user_data)
Definition: grok.h:792
uint64_t get_number_byte_left(void)
Get the number of bytes left before end of stream.
Definition: BufferedStream.cpp:333
uint64_t tell(void)
Tells byte offset of stream (similar to ftell).
Definition: BufferedStream.cpp:330
~BufferedStream()
Definition: BufferedStream.cpp:45
bool skip(int64_t p_size)
Skip bytes in stream.
Definition: BufferedStream.cpp:338
bool read_seek(uint64_t offset)
Absolute seek in read stream.
Definition: BufferedStream.cpp:345
bool write_64(uint64_t value)
Definition: BufferedStream.cpp:194
size_t(* grk_stream_zero_copy_read_fn)(void **p_buffer, size_t nb_bytes, void *user_data)
Definition: MemStream.h:30
grk_stream_zero_copy_read_fn m_zero_copy_read_fn
Pointer to actual zero copy read function (nullptr at initialization).
Definition: BufferedStream.h:70
uint64_t m_stream_offset
Definition: BufferedStream.h:213
Copyright (C) 2016-2020 Grok Image Compression Inc.
Definition: BitIO.cpp:23
void invalidate_buffer()
Definition: BufferedStream.cpp:302
#define GROK_STREAM_STATUS_INPUT
Definition: BufferedStream.h:31
void(* grk_stream_free_user_data_fn)(void *user_data)
Definition: grok.h:811
grk_stream_seek_fn m_seek_fn
Pointer to actual seek function (if available).
Definition: BufferedStream.h:80
size_t len
Definition: util.h:265
size_t read(uint8_t *p_buffer, size_t p_size)
Reads some bytes from the stream.
Definition: BufferedStream.cpp:51
bool has_seek()
Check if stream is seekable.
Definition: BufferedStream.cpp:415
bool(* grk_stream_seek_fn)(uint64_t nb_bytes, void *user_data)
Definition: grok.h:806
#define GROK_STREAM_STATUS_ERROR
Definition: BufferedStream.h:33
void incr_offset(ptrdiff_t off)
Definition: util.h:230
Definition: IBufferedStream.h:21
bool seek(uint64_t offset)
Seek bytes from the stream (absolute)
Definition: BufferedStream.cpp:409
size_t m_read_bytes_seekable
Definition: BufferedStream.h:210
size_t write_bytes(const uint8_t *p_buffer, size_t p_size)
Write bytes to stream (no correction for endian!).
Definition: BufferedStream.cpp:222
size_t(* grk_stream_write_fn)(void *p_buffer, size_t nb_bytes, void *user_data)
Definition: grok.h:800
void * grk_stream
Definition: grok.h:816
grk_buf * m_buf
Definition: BufferedStream.h:201
bool write(TYPE value, uint8_t numBytes)
Definition: BufferedStream.cpp:197
bool write_skip(int64_t p_size)
Skip bytes in write stream.
Definition: BufferedStream.cpp:324
uint8_t * getCurrentPtr()
Definition: BufferedStream.cpp:311
void grk_stream_set_user_data_length(grk_stream *stream, uint64_t data_length)
Set the length of the user data for the stream.
Definition: BufferedStream.cpp:463
bool isMemStream()
Definition: BufferedStream.cpp:419
void GRK_ERROR(const char *fmt,...)
Definition: logger.cpp:57
bool supportsZeroCopy()
Definition: BufferedStream.cpp:308
grk_stream_free_user_data_fn m_free_user_data_fn
Pointer to function to free m_user_data (nullptr at initialization) when destroying the stream.
Definition: BufferedStream.h:53