Grok  9.5.0
LengthCache.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2016-2021 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 #pragma once
18 #include <vector>
19 #include <map>
20 
21 namespace grk
22 {
23 struct MarkerInfo
24 {
25  MarkerInfo(uint16_t _id, uint64_t _pos, uint32_t _len);
26  MarkerInfo();
27  void dump(FILE* outputFileStream);
29  uint16_t id;
31  uint64_t pos;
33  uint32_t len;
34 };
36 {
37  TilePartInfo(uint64_t start, uint64_t endHeader, uint64_t end);
38  TilePartInfo(void);
39  void dump(FILE* outputFileStream, uint8_t tilePart);
41  uint64_t startPosition;
45  uint64_t endPosition;
46 };
47 struct TileInfo
48 {
49  TileInfo(void);
50  ~TileInfo(void);
51  bool checkResize(void);
52  bool hasTilePartInfo(void);
53  bool update(uint16_t tileIndex, uint8_t currentTilePart, uint8_t numTileParts);
54  TilePartInfo* getTilePartInfo(uint8_t tilePart);
55  void dump(FILE* outputFileStream, uint16_t tileNum);
57  uint16_t tileno;
59  uint8_t numTileParts;
63  uint8_t currentTilePart;
64 
65  private:
71  uint32_t numMarkers;
73  uint32_t allocatedMarkers;
74 };
76 {
78  virtual ~CodeStreamInfo();
79  bool allocTileInfo(uint16_t numTiles);
80  bool updateTileInfo(uint16_t tileIndex, uint8_t currentTilePart, uint8_t numTileParts);
81  TileInfo* getTileInfo(uint16_t tileIndex);
82  void dump(FILE* outputFileStream);
83  void pushMarker(uint16_t id, uint64_t pos, uint32_t len);
84  uint64_t getMainHeaderStart(void);
85  void setMainHeaderStart(uint64_t start);
86  uint64_t getMainHeaderEnd(void);
87  void setMainHeaderEnd(uint64_t end);
88  bool skipToTile(uint16_t tileIndex, uint64_t lastSotReadPosition);
89 
90  private:
92  uint64_t mainHeaderStart;
94  uint64_t mainHeaderEnd;
96  std::vector<MarkerInfo*> marker;
97  uint16_t numTiles;
100 };
102 {
104  TilePartLengthInfo(uint32_t len) : hasTileIndex(false), tileIndex(0), length(len) {}
105  TilePartLengthInfo(uint16_t tileno, uint32_t len)
106  : hasTileIndex(true), tileIndex(tileno), length(len)
107  {}
109  uint16_t tileIndex;
110  uint32_t length;
111 };
112 typedef std::vector<TilePartLengthInfo> TL_INFO_VEC;
113 // map of (TLM marker id) => (tile part length vector)
114 typedef std::map<uint8_t, TL_INFO_VEC*> TL_MAP;
115 
117 {
121 
122  bool read(uint8_t* headerData, uint16_t header_size);
123  void rewind(void);
125  bool skipTo(uint16_t skipTileIndex, IBufferedStream* stream, uint64_t firstSotPos);
126 
127  bool writeBegin(uint16_t numTilePartsTotal);
128  void push(uint16_t tileIndex, uint32_t tile_part_size);
129  bool writeEnd(void);
138  static bool addTileMarkerInfo(uint16_t tileno, CodeStreamInfo* codeStreamInfo, uint16_t type,
139  uint64_t pos, uint32_t len);
140 
141  private:
142  void push(uint8_t i_TLM, TilePartLengthInfo curr_vec);
144  uint8_t m_markerIndex;
148  uint64_t streamStart;
149 };
150 
152 {
153  PacketInfo(void);
154  uint32_t getPacketDataLength(void);
155  uint32_t headerLength;
156  uint32_t packetLength;
158 };
159 
161 {
164 
165  std::vector<PacketInfo*> packetInfo;
166 };
167 
168 } // namespace grk
Copyright (C) 2016-2021 Grok Image Compression Inc.
Definition: ICacheable.h:20
std::vector< TilePartLengthInfo > TL_INFO_VEC
Definition: LengthCache.h:112
std::map< uint8_t, TL_INFO_VEC * > TL_MAP
Definition: LengthCache.h:114
Definition: LengthCache.h:76
IBufferedStream * stream
Definition: LengthCache.h:99
uint64_t mainHeaderStart
main header start position (SOC position)
Definition: LengthCache.h:92
uint64_t getMainHeaderStart(void)
Definition: LengthCache.cpp:236
void pushMarker(uint16_t id, uint64_t pos, uint32_t len)
Definition: LengthCache.cpp:232
bool updateTileInfo(uint16_t tileIndex, uint8_t currentTilePart, uint8_t numTileParts)
Definition: LengthCache.cpp:191
bool allocTileInfo(uint16_t numTiles)
Definition: LengthCache.cpp:183
virtual ~CodeStreamInfo()
Definition: LengthCache.cpp:177
void setMainHeaderEnd(uint64_t end)
Definition: LengthCache.cpp:248
void dump(FILE *outputFileStream)
Definition: LengthCache.cpp:203
uint16_t numTiles
Definition: LengthCache.h:97
uint64_t getMainHeaderEnd(void)
Definition: LengthCache.cpp:244
bool skipToTile(uint16_t tileIndex, uint64_t lastSotReadPosition)
Definition: LengthCache.cpp:252
std::vector< MarkerInfo * > marker
list of markers
Definition: LengthCache.h:96
TileInfo * getTileInfo(uint16_t tileIndex)
Definition: LengthCache.cpp:197
void setMainHeaderStart(uint64_t start)
Definition: LengthCache.cpp:240
CodeStreamInfo(IBufferedStream *str)
Definition: LengthCache.cpp:174
TileInfo * tileInfo
Definition: LengthCache.h:98
uint64_t mainHeaderEnd
main header end position (first SOT position)
Definition: LengthCache.h:94
Definition: IBufferedStream.h:20
Definition: LengthCache.h:24
MarkerInfo()
Definition: LengthCache.cpp:24
void dump(FILE *outputFileStream)
Definition: LengthCache.cpp:27
uint16_t id
marker id
Definition: LengthCache.h:29
uint32_t len
length (marker id included)
Definition: LengthCache.h:33
uint64_t pos
position in code stream
Definition: LengthCache.h:31
Definition: LengthCache.h:161
~PacketInfoCache()
Definition: LengthCache.cpp:500
std::vector< PacketInfo * > packetInfo
Definition: LengthCache.h:165
Definition: LengthCache.h:152
uint32_t packetLength
Definition: LengthCache.h:156
uint32_t headerLength
Definition: LengthCache.h:155
bool parsedData
Definition: LengthCache.h:157
PacketInfo(void)
Definition: LengthCache.cpp:499
uint32_t getPacketDataLength(void)
Definition: LengthCache.cpp:505
Definition: LengthCache.h:48
TilePartInfo * getTilePartInfo(uint8_t tilePart)
Definition: LengthCache.cpp:151
uint32_t numMarkers
number of markers
Definition: LengthCache.h:71
void dump(FILE *outputFileStream, uint16_t tileNum)
Definition: LengthCache.cpp:157
bool hasTilePartInfo(void)
Definition: LengthCache.cpp:81
MarkerInfo * markerInfo
array of markers
Definition: LengthCache.h:69
uint8_t numTileParts
number of tile parts
Definition: LengthCache.h:59
uint8_t currentTilePart
current tile-part index
Definition: LengthCache.h:63
~TileInfo(void)
Definition: LengthCache.cpp:52
uint8_t allocatedTileParts
current nb of tile part (allocated)
Definition: LengthCache.h:61
bool update(uint16_t tileIndex, uint8_t currentTilePart, uint8_t numTileParts)
Definition: LengthCache.cpp:85
uint16_t tileno
tile index
Definition: LengthCache.h:57
bool checkResize(void)
Definition: LengthCache.cpp:57
TileInfo(void)
Definition: LengthCache.cpp:44
TilePartInfo * tilePartInfo
tile part index
Definition: LengthCache.h:67
uint32_t allocatedMarkers
actual size of markers array
Definition: LengthCache.h:73
Definition: LengthCache.h:117
TilePartLengthInfo getNext(void)
Definition: LengthCache.cpp:391
uint8_t m_markerIndex
Definition: LengthCache.h:144
IBufferedStream * m_stream
Definition: LengthCache.h:147
void push(uint16_t tileIndex, uint32_t tile_part_size)
Definition: LengthCache.cpp:461
bool writeEnd(void)
Definition: LengthCache.cpp:465
uint8_t m_markerTilePartIndex
Definition: LengthCache.h:145
bool skipTo(uint16_t skipTileIndex, IBufferedStream *stream, uint64_t firstSotPos)
Definition: LengthCache.cpp:415
TL_MAP * m_markers
Definition: LengthCache.h:143
TL_INFO_VEC * m_curr_vec
Definition: LengthCache.h:146
bool writeBegin(uint16_t numTilePartsTotal)
Definition: LengthCache.cpp:437
void rewind(void)
Definition: LengthCache.cpp:379
static bool addTileMarkerInfo(uint16_t tileno, CodeStreamInfo *codeStreamInfo, uint16_t type, uint64_t pos, uint32_t len)
Add tile header marker information.
Definition: LengthCache.cpp:482
TileLengthMarkers()
Definition: LengthCache.cpp:279
~TileLengthMarkers()
Definition: LengthCache.cpp:287
bool read(uint8_t *headerData, uint16_t header_size)
Definition: LengthCache.cpp:296
uint64_t streamStart
Definition: LengthCache.h:148
Definition: LengthCache.h:36
uint64_t startPosition
start position of tile part
Definition: LengthCache.h:41
uint64_t endHeaderPosition
end position of tile part header
Definition: LengthCache.h:43
uint64_t endPosition
end position of tile part
Definition: LengthCache.h:45
void dump(FILE *outputFileStream, uint8_t tilePart)
Definition: LengthCache.cpp:35
TilePartInfo(void)
Definition: LengthCache.cpp:34
Definition: LengthCache.h:102
TilePartLengthInfo()
Definition: LengthCache.h:103
uint32_t length
Definition: LengthCache.h:110
TilePartLengthInfo(uint32_t len)
Definition: LengthCache.h:104
TilePartLengthInfo(uint16_t tileno, uint32_t len)
Definition: LengthCache.h:105
bool hasTileIndex
Definition: LengthCache.h:108
uint16_t tileIndex
Definition: LengthCache.h:109