Grok  9.5.0
PacketLengthMarkers.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 typedef std::vector<uint32_t> PL_INFO_VEC;
24 
26 {
29  : markerLength(0), packetLength(packetLengthVec)
30  {}
31  uint64_t markerLength;
33 };
34 
35 // map of (PLT/PLM marker id) => (packet length vector)
36 typedef std::map<uint8_t, PacketLengthMarkerInfo> PL_MAP;
37 
39 {
40  PacketLengthMarkers(void);
43 
44  // decompressor packet lengths
45  bool readPLT(uint8_t* headerData, uint16_t header_size);
46  bool readPLM(uint8_t* headerData, uint16_t header_size);
47  void rewind(void);
48  uint32_t popNextPacketLength(void);
49 
50  // compressor packet lengths
51  void pushInit(void);
52  void pushNextPacketLength(uint32_t len);
53  uint32_t write(bool simulate);
54 
55  private:
56  void readInit(uint8_t index);
57  void readNext(uint8_t Iplm);
58  void tryWriteMarkerHeader(PacketLengthMarkerInfo* markerInfo, bool simulate);
59  void writeMarkerLength(PacketLengthMarkerInfo* markerInfo);
60  void writeIncrement(uint32_t bytes);
61 
63  uint8_t m_markerIndex;
65  size_t m_packetIndex;
66  uint32_t m_packet_len;
72 };
73 
74 } // namespace grk
Copyright (C) 2016-2021 Grok Image Compression Inc.
Definition: ICacheable.h:20
std::vector< uint32_t > PL_INFO_VEC
Definition: PacketLengthMarkers.h:23
std::map< uint8_t, PacketLengthMarkerInfo > PL_MAP
Definition: PacketLengthMarkers.h:36
Definition: IBufferedStream.h:20
Definition: PacketLengthMarkers.h:26
uint64_t markerLength
Definition: PacketLengthMarkers.h:31
PL_INFO_VEC * packetLength
Definition: PacketLengthMarkers.h:32
PacketLengthMarkerInfo(PL_INFO_VEC *packetLengthVec)
Definition: PacketLengthMarkers.h:28
PacketLengthMarkerInfo()
Definition: PacketLengthMarkers.h:27
Definition: PacketLengthMarkers.h:39
size_t m_packetIndex
Definition: PacketLengthMarkers.h:65
void rewind(void)
Definition: PacketLengthMarkers.cpp:274
PL_MAP * m_markers
Definition: PacketLengthMarkers.h:62
uint32_t m_packet_len
Definition: PacketLengthMarkers.h:66
bool preCalculatedMarkerLengths
Definition: PacketLengthMarkers.h:71
void writeMarkerLength(PacketLengthMarkerInfo *markerInfo)
Definition: PacketLengthMarkers.cpp:68
uint64_t m_marker_len_cache
Definition: PacketLengthMarkers.h:69
uint32_t write(bool simulate)
Definition: PacketLengthMarkers.cpp:118
PL_INFO_VEC * m_curr_vec
Definition: PacketLengthMarkers.h:64
IBufferedStream * m_stream
Definition: PacketLengthMarkers.h:70
uint8_t m_markerIndex
Definition: PacketLengthMarkers.h:63
void pushNextPacketLength(uint32_t len)
Definition: PacketLengthMarkers.cpp:57
bool readPLM(uint8_t *headerData, uint16_t header_size)
Definition: PacketLengthMarkers.cpp:183
PacketLengthMarkers(void)
Definition: PacketLengthMarkers.cpp:30
void readNext(uint8_t Iplm)
Definition: PacketLengthMarkers.cpp:258
~PacketLengthMarkers(void)
Definition: PacketLengthMarkers.cpp:40
void readInit(uint8_t index)
Definition: PacketLengthMarkers.cpp:243
uint32_t m_totalBytesWritten
Definition: PacketLengthMarkers.h:68
uint32_t m_markerBytesWritten
Definition: PacketLengthMarkers.h:67
uint32_t popNextPacketLength(void)
Definition: PacketLengthMarkers.cpp:288
void pushInit(void)
Definition: PacketLengthMarkers.cpp:49
void tryWriteMarkerHeader(PacketLengthMarkerInfo *markerInfo, bool simulate)
Definition: PacketLengthMarkers.cpp:88
bool readPLT(uint8_t *headerData, uint16_t header_size)
Definition: PacketLengthMarkers.cpp:218
void writeIncrement(uint32_t bytes)
Definition: PacketLengthMarkers.cpp:63