Grok  9.7.5
StripPool.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 
9 namespace grk
10 {
12 {
13  public:
14  GrkSerializeBuf() : GrkSerializeBuf(nullptr, 0, 0, 0, false, 0) {}
15  GrkSerializeBuf(uint8_t* data, uint64_t offset, uint64_t dataLen, uint64_t allocLen,
16  bool pooled, uint32_t index)
17  {
18  this->data = data;
19  this->offset = offset;
20  this->dataLen = dataLen;
21  this->allocLen = allocLen;
22  this->pooled = pooled;
23  this->index = index;
24  }
25  explicit GrkSerializeBuf(const grk_serialize_buf rhs)
26  {
27  data = rhs.data;
28  offset = rhs.offset;
29  dataLen = rhs.dataLen;
30  allocLen = rhs.allocLen;
31  pooled = rhs.pooled;
32  index = rhs.index;
33  }
34  uint32_t getIndex(void) const
35  {
36  return index;
37  }
38  bool alloc(uint64_t len)
39  {
40  dealloc();
41  data = (uint8_t*)grkAlignedMalloc(len);
42  if(data)
43  {
44  dataLen = len;
45  allocLen = len;
46  }
47 
48  return (data != nullptr);
49  }
50  void dealloc()
51  {
53  data = nullptr;
54  }
55 };
56 
57 struct Strip
58 {
59  Strip(GrkImage* outputImage, uint16_t index, uint32_t tileHeight, uint8_t reduce);
60  ~Strip(void);
61  uint32_t getIndex(void);
62  uint32_t reduceDim(uint32_t dim);
64  std::atomic<uint32_t> tileCounter;
65  uint32_t index_;
66  uint8_t reduce_;
67 };
68 
69 class StripPool
70 {
71  public:
72  StripPool(void);
73  virtual ~StripPool();
74 
75  void init(uint16_t tgrid_w, uint16_t tgrid_h, uint32_t tileHeight, uint8_t reduce,
76  GrkImage* outputImg, grk_serialize_pixels_callback serializeBufferCallback,
77  void* serializeUserData,
78  grk_serialize_register_client_callback serializeRegisterClientCallback);
79  bool composite(GrkImage* tileImage);
80  void putBuffer(GrkSerializeBuf b);
81 
82  private:
83  GrkSerializeBuf getBuffer(uint64_t len);
84  std::map<uint8_t*, GrkSerializeBuf> pool;
86  uint16_t tgrid_w_;
87  uint16_t tgrid_h_;
88  uint32_t tileHeight_;
89  uint32_t imageY0_;
90  uint64_t packedRowBytes_;
91 
92  mutable std::mutex poolMutex;
93 
97 };
98 
99 } // namespace grk
Definition: GrkImage.h:22
Definition: MinHeap.h:37
Definition: StripPool.h:70
uint16_t tgrid_h_
Definition: StripPool.h:87
StripPool(void)
Definition: StripPool.cpp:37
std::mutex poolMutex
Definition: StripPool.h:92
std::map< uint8_t *, GrkSerializeBuf > pool
Definition: StripPool.h:84
Strip ** strips
Definition: StripPool.h:85
bool composite(GrkImage *tileImage)
Definition: StripPool.cpp:70
GrkSerializeBuf getBuffer(uint64_t len)
Definition: StripPool.cpp:111
uint32_t tileHeight_
Definition: StripPool.h:88
grk_serialize_pixels_callback serializeBufferCallback_
Definition: StripPool.h:95
MinHeap< GrkSerializeBuf, uint32_t, MinHeapFakeLocker > serializeHeap
Definition: StripPool.h:96
void * serializeUserData_
Definition: StripPool.h:94
virtual ~StripPool()
Definition: StripPool.cpp:41
uint64_t packedRowBytes_
Definition: StripPool.h:90
void init(uint16_t tgrid_w, uint16_t tgrid_h, uint32_t tileHeight, uint8_t reduce, GrkImage *outputImg, grk_serialize_pixels_callback serializeBufferCallback, void *serializeUserData, grk_serialize_register_client_callback serializeRegisterClientCallback)
Definition: StripPool.cpp:49
void putBuffer(GrkSerializeBuf b)
Definition: StripPool.cpp:128
uint32_t imageY0_
Definition: StripPool.h:89
uint16_t tgrid_w_
Definition: StripPool.h:86
bool(* grk_serialize_pixels_callback)(grk_serialize_buf buffer, void *user_data)
Definition: grok.h:822
void(* grk_serialize_register_client_callback)(grk_serialize_callback reclaim_callback, void *serialize_user_data, void *reclaim_user_data)
Definition: grok.h:818
Copyright (C) 2016-2022 Grok Image Compression Inc.
Definition: ICacheable.h:20
void grkAlignedFree(void *ptr)
Definition: MemManager.cpp:127
void * grkAlignedMalloc(size_t size)
Allocate memory aligned to a 16 byte boundary.
Definition: MemManager.cpp:123
Definition: grok.h:808
uint8_t * data
Definition: grok.h:809
uint32_t index
Definition: grok.h:814
uint64_t allocLen
Definition: grok.h:812
uint64_t offset
Definition: grok.h:810
uint64_t dataLen
Definition: grok.h:811
bool pooled
Definition: grok.h:813
Definition: StripPool.h:12
bool alloc(uint64_t len)
Definition: StripPool.h:38
GrkSerializeBuf(uint8_t *data, uint64_t offset, uint64_t dataLen, uint64_t allocLen, bool pooled, uint32_t index)
Definition: StripPool.h:15
void dealloc()
Definition: StripPool.h:50
uint32_t getIndex(void) const
Definition: StripPool.h:34
GrkSerializeBuf()
Definition: StripPool.h:14
GrkSerializeBuf(const grk_serialize_buf rhs)
Definition: StripPool.h:25
Definition: StripPool.h:58
std::atomic< uint32_t > tileCounter
Definition: StripPool.h:64
uint32_t getIndex(void)
Definition: StripPool.cpp:29
~Strip(void)
Definition: StripPool.cpp:25
GrkImage * stripImg
Definition: StripPool.h:63
uint32_t index_
Definition: StripPool.h:65
uint32_t reduceDim(uint32_t dim)
Definition: StripPool.cpp:33
Strip(GrkImage *outputImage, uint16_t index, uint32_t tileHeight, uint8_t reduce)
Definition: StripPool.cpp:14
uint8_t reduce_
Definition: StripPool.h:66