Grok 20.3.2
IStream.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2016-2026 Grok Image Compression Inc.
3 *
4 * This source code is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU Affero General Public License, version 3,
6 * as published by the Free Software Foundation.
7 *
8 * This source code is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Affero General Public License for more details.
12 *
13 * You should have received a copy of the GNU Affero General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 */
17
18#pragma once
19
20#include <memory>
21
22#include "IMemAdvisor.h"
23#include "IStreamWriter.h"
24#include "ChunkBuffer.h"
25
26namespace grk
27{
28
29/*src/lib/core/t1
30 * Callback function prototype for zero copy read function
31 */
32typedef size_t (*readZeroCopyCallback)(uint8_t** buffer, size_t numBytes, void* user_data);
33
56
57class IFetcher;
58
60{
61 virtual ~IStream() = default;
62
70 virtual void setUserData(void* data, grk_stream_free_user_data_fn freeUserDataFun,
71 uint64_t len) = 0;
72
78 virtual void setCallbacks(StreamCallbacks& callbacks) = 0;
79
91 virtual size_t read(uint8_t* buffer, uint8_t** zero_copy_buffer, size_t len) = 0;
92
98 virtual bool write24u(uint32_t value) = 0;
99
107 virtual size_t writeBytes(const uint8_t* buffer, size_t len) = 0;
108
113 virtual bool flush() = 0;
114
120 virtual bool skip(int64_t len) = 0;
126 virtual uint64_t tell(void) = 0;
131 virtual uint64_t numBytesLeft(void) = 0;
138 virtual bool seek(uint64_t offset) = 0;
139
144 virtual bool hasSeek() = 0;
145
150 virtual bool supportsZeroCopy() = 0;
151
159 virtual void setFormat(GRK_CODEC_FORMAT format) = 0;
160
165 virtual GRK_CODEC_FORMAT getFormat(void) = 0;
166
171 virtual uint8_t* currPtr(void) = 0;
172
179 virtual bool isMemStream() = 0;
180
186 virtual IFetcher* getFetcher(void) = 0;
187
188 virtual IStream* bifurcate(void) = 0;
189
190 virtual void setChunkBuffer(std::shared_ptr<ChunkBuffer<>> chunkBuffer) = 0;
191
192 virtual void memAdvise(size_t virtual_offset, size_t length, GrkAccessPattern pattern) = 0;
193};
194
195} // namespace grk
Manages a partially ordered deque of buffer chunks that are added asynchronously out of order.
Definition ChunkBuffer.h:47
Definition CurlFetcher.h:49
enum _GRK_CODEC_FORMAT GRK_CODEC_FORMAT
Grok Supported JPEG 2000 formats.
size_t(* grk_stream_read_fn)(uint8_t *buffer, size_t numBytes, void *user_data)
Read stream callback.
Definition grok.h:521
bool(* grk_stream_seek_fn)(uint64_t offset, void *user_data)
Seek (absolute) callback.
Definition grok.h:537
void(* grk_stream_free_user_data_fn)(void *user_data)
Free user data callback.
Definition grok.h:543
size_t(* grk_stream_write_fn)(const uint8_t *buffer, size_t numBytes, void *user_data)
Write stream callback.
Definition grok.h:530
ResWindow.
Definition CompressedChunkCache.h:36
GrkAccessPattern
Definition IMemAdvisor.h:24
size_t(* readZeroCopyCallback)(uint8_t **buffer, size_t numBytes, void *user_data)
Definition IStream.h:32
Definition IStream.h:60
virtual GRK_CODEC_FORMAT getFormat(void)=0
Gets codec format (J2K/JP2/MJ2).
virtual void setCallbacks(StreamCallbacks &callbacks)=0
Sets callbacks.
virtual bool write24u(uint32_t value)=0
Writes 3 bytes from uint32_t as big endian.
virtual IFetcher * getFetcher(void)=0
Gets the IFetcher.
virtual size_t writeBytes(const uint8_t *buffer, size_t len)=0
Writes bytes to stream (no correction for endian!).
virtual bool hasSeek()=0
Checks if stream is seekable.
virtual ~IStream()=default
virtual void setChunkBuffer(std::shared_ptr< ChunkBuffer<> > chunkBuffer)=0
virtual IStream * bifurcate(void)=0
virtual bool seek(uint64_t offset)=0
Seek bytes from the stream (absolute).
virtual bool flush()=0
Flushes stream to disk.
virtual bool skip(int64_t len)=0
Skips bytes in stream.
virtual uint8_t * currPtr(void)=0
Gets current pointer (used for zero copy).
virtual uint64_t tell(void)=0
query byte offset of stream (similar to ftell).
virtual uint64_t numBytesLeft(void)=0
Gets the number of bytes left before end of stream.
virtual void setUserData(void *data, grk_stream_free_user_data_fn freeUserDataFun, uint64_t len)=0
Sets user data.
virtual bool supportsZeroCopy()=0
Checks is stream supports zero copy.
virtual void memAdvise(size_t virtual_offset, size_t length, GrkAccessPattern pattern)=0
virtual size_t read(uint8_t *buffer, uint8_t **zero_copy_buffer, size_t len)=0
Read bytes from stream.
virtual bool isMemStream()=0
Checks if stream is memory stream i.e.
virtual void setFormat(GRK_CODEC_FORMAT format)=0
Stores codec format J2K/JP2/MJ2.
Stores callbacks.
Definition IStream.h:40
StreamCallbacks()
Definition IStream.h:49
grk_stream_read_fn readCallback_
Definition IStream.h:51
grk_stream_write_fn writeCallback_
Definition IStream.h:54
StreamCallbacks(grk_stream_params *streamParams)
Definition IStream.h:41
grk_stream_seek_fn seekCallback_
Definition IStream.h:53
StreamCallbacks(grk_stream_read_fn rcb, readZeroCopyCallback zcrcb, grk_stream_seek_fn scb, grk_stream_write_fn wcb)
Definition IStream.h:45
readZeroCopyCallback readZeroCopyCallback_
Definition IStream.h:52
Definition IStreamWriter.h:9
JPEG 2000 stream parameters There are three methods of streaming: by file, buffer or callback Client ...