Grok 12.0.1
StripCache.h
Go to the documentation of this file.
1#pragma once
2
3#include <vector>
4#include <mutex>
5#include <atomic>
6#include "grok.h"
7#include "MinHeap.h"
8
9namespace grk
10{
11
12struct GrkIOBuf : public grk_io_buf
13{
14 public:
15 GrkIOBuf() : GrkIOBuf(nullptr, 0, 0, 0, false, 0) {}
16 GrkIOBuf(uint8_t* data, size_t offset, size_t dataLen, size_t allocLen, bool pooled,
17 uint32_t index)
18 {
19 data_ = data;
20 offset_ = offset;
21 len_ = dataLen;
24 index_ = index;
25 }
26 explicit GrkIOBuf(const grk_io_buf rhs)
27 {
28 data_ = rhs.data_;
29 offset_ = rhs.offset_;
30 len_ = rhs.len_;
31 allocLen_ = rhs.allocLen_;
32 pooled_ = rhs.pooled_;
33 index_ = rhs.index_;
34 }
35 uint32_t getIndex(void) const
36 {
37 return index_;
38 }
39 bool alloc(size_t len)
40 {
41 dealloc();
43 if(data_)
44 {
45 len_ = len;
46 allocLen_ = len;
47 }
48
49 return (data_ != nullptr);
50 }
51 void dealloc()
52 {
54 data_ = nullptr;
55 }
56};
57
59{
60 public:
62 {
63 for(auto& b : pool)
64 b.second.dealloc();
65 }
66 GrkIOBuf get(size_t len)
67 {
68 for(auto iter = pool.begin(); iter != pool.end(); ++iter)
69 {
70 if(iter->second.allocLen_ >= len)
71 {
72 auto b = iter->second;
73 b.len_ = len;
74 pool.erase(iter);
75 return b;
76 }
77 }
79 rc.alloc(len);
80
81 return rc;
82 }
84 {
85 assert(b.data_);
86 assert(pool.find(b.data_) == pool.end());
87 pool[b.data_] = b;
88 }
89
90 private:
91 std::map<uint8_t*, GrkIOBuf> pool;
92};
93
94struct Strip
95{
97 ~Strip(void);
100 bool allocInterleavedLocked(uint64_t len, BufPool* pool);
101 bool allocInterleaved(uint64_t len, BufPool* pool);
103 std::atomic<uint32_t> tileCounter; // count number of tiles added to strip
104 uint8_t reduce_; // resolution reduction
105 mutable std::mutex interleaveMutex_;
106 mutable std::atomic<bool> allocatedInterleaved_;
107};
108
143
144} // namespace grk
Definition StripCache.h:59
std::map< uint8_t *, GrkIOBuf > pool
Definition StripCache.h:91
~BufPool(void)
Definition StripCache.h:61
void put(GrkIOBuf b)
Definition StripCache.h:83
GrkIOBuf get(size_t len)
Definition StripCache.h:66
Definition GrkImage.h:24
Definition MinHeap.h:34
Definition StripCache.h:110
void init(uint32_t concurrency, uint16_t numTiles_, uint32_t numStrips, uint32_t nominalStripHeight, uint8_t reduce, GrkImage *outputImg, grk_io_pixels_callback ioBufferCallback, void *ioUserData, grk_io_register_reclaim_callback grkRegisterReclaimCallback)
Definition StripCache.cpp:78
uint16_t numTiles_
Definition StripCache.h:130
void * ioUserData_
Definition StripCache.h:135
StripCache(void)
Definition StripCache.cpp:57
uint32_t numStrips_
Definition StripCache.h:131
bool ingestTile(uint32_t threadId, GrkImage *src)
Definition StripCache.cpp:138
MinHeap< GrkIOBuf, uint32_t, MinHeapFakeLocker > serializeHeap
Definition StripCache.h:138
std::mutex serializeMutex_
Definition StripCache.h:137
bool ingestStrip(uint32_t threadId, Tile *src, uint32_t yBegin, uint32_t yEnd)
Definition StripCache.cpp:108
virtual ~StripCache()
Definition StripCache.cpp:62
void returnBufferToPool(uint32_t threadId, GrkIOBuf b)
Definition StripCache.cpp:216
bool isMultiTile(void)
Definition StripCache.cpp:74
bool multiTile_
Definition StripCache.h:141
std::vector< BufPool * > pools_
Definition StripCache.h:128
bool initialized_
Definition StripCache.h:140
uint64_t packedRowBytes_
Definition StripCache.h:134
uint32_t nominalStripHeight_
Definition StripCache.h:132
uint32_t imageY0_
Definition StripCache.h:133
std::mutex heapMutex_
Definition StripCache.h:139
Strip ** strips
Definition StripCache.h:129
bool serialize(uint32_t threadId, GrkIOBuf buf)
Definition StripCache.cpp:172
bool isInitialized(void)
Definition StripCache.cpp:70
grk_io_pixels_callback ioBufferCallback_
Definition StripCache.h:136
void(* grk_io_register_reclaim_callback)(grk_io_init io_init, grk_io_callback reclaim_callback, void *io_user_data, void *reclaim_user_data)
Definition grok.h:479
bool(* grk_io_pixels_callback)(uint32_t threadId, grk_io_buf buffer, void *user_data)
Definition grok.h:482
Copyright (C) 2016-2024 Grok Image Compression Inc.
Definition ICacheable.h:20
void grk_read(const uint8_t *buffer, TYPE *value, uint32_t numBytes)
Definition BufferedStream.h:239
void * grk_aligned_malloc(size_t size)
Allocate memory aligned to a 16 byte boundary.
Definition MemManager.cpp:76
void grk_aligned_free(void *ptr)
Definition MemManager.cpp:80
Definition grok.h:463
bool pooled_
Definition grok.h:468
size_t offset_
Definition grok.h:465
size_t allocLen_
Definition grok.h:467
uint8_t * data_
Definition grok.h:464
size_t len_
Definition grok.h:466
uint32_t index_
Definition grok.h:469
Definition StripCache.h:13
GrkIOBuf(uint8_t *data, size_t offset, size_t dataLen, size_t allocLen, bool pooled, uint32_t index)
Definition StripCache.h:16
GrkIOBuf()
Definition StripCache.h:15
uint32_t getIndex(void) const
Definition StripCache.h:35
void dealloc()
Definition StripCache.h:51
GrkIOBuf(const grk_io_buf rhs)
Definition StripCache.h:26
bool alloc(size_t len)
Definition StripCache.h:39
Definition StripCache.h:95
std::atomic< uint32_t > tileCounter
Definition StripCache.h:103
uint32_t getIndex(void)
~Strip(void)
Definition StripCache.cpp:31
GrkImage * stripImg
Definition StripCache.h:102
uint32_t reduceDim(uint32_t dim)
Definition StripCache.cpp:35
std::atomic< bool > allocatedInterleaved_
Definition StripCache.h:106
std::mutex interleaveMutex_
Definition StripCache.h:105
Strip(GrkImage *outputImage, uint16_t index, uint32_t nominalHeight, uint8_t reduce)
Definition StripCache.cpp:16
uint8_t reduce_
Definition StripCache.h:104
bool allocInterleaved(uint64_t len, BufPool *pool)
Definition StripCache.cpp:51
bool allocInterleavedLocked(uint64_t len, BufPool *pool)
Definition StripCache.cpp:39
Definition TileProcessor.h:39