Grok 20.3.2
TileProcessorCompress.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 "TileProcessor.h"
22#include "grk_taskflow.h"
23
24#include <memory>
25#include <vector>
26
27class FlowComponent;
28
29namespace grk
30{
32
41{
48 TileProcessorCompress(uint16_t index, TileCodingParams* tcp, CodeStream* codeStream,
49 IStream* stream);
50
54 ~TileProcessorCompress() override;
55
56 bool init(void) override;
57
58 PacketTracker* getPacketTracker(void) override;
59 bool preCompressTile(size_t thread_id) override;
60 bool canWritePocMarker(void) override;
61 bool writeTilePartT2(uint32_t* tileBytesWritten) override;
62 bool doCompress(void) override;
63 bool ingestUncompressedData(uint8_t* p_src, uint64_t src_length) override;
64 bool needsRateControl(void) override;
65 uint32_t getPreCalculatedTileLen(void) override;
66 bool canPreCalculateTileLen(void) override;
67 void setFirstPocTilePart(bool res) override;
68 void setProgIterNum(uint32_t num) override;
69 uint8_t getTilePartCounter(void) const override;
70 void incTilePartCounter(void) override;
71
72 // Build and submit the compress DAG (MCT → DWT → T1 → rateAlloc).
73 // Must be called after preCompressTile().
74 void buildCompressDAG(void);
75 tf::Future<void> submitCompressDAG(void);
76 bool compressDAGSuccess(void) const;
77
78private:
81 void scheduleCompressT1();
82 bool compressT2(uint32_t* packet_bytes_written);
83 bool rateAllocate(uint32_t* allPacketBytes, bool disableRateControl);
84 bool layerNeedsRateControl(uint16_t layno);
86 void makeLayerFinal(uint16_t layno);
87 bool pcrdBisectSimple(uint32_t* p_data_written, bool disableRateControl);
88 void makeLayerSimple(uint16_t layno, double thresh, bool finalAttempt);
89 bool pcrdBisectFeasible(uint32_t* p_data_written, bool disableRateControl);
90 bool makeLayerFeasible(uint16_t layno, uint16_t thresh, bool finalAttempt);
93
102 uint8_t tilePartCounter_ = 0;
103 //* Current progression iterator number */
104 uint32_t prog_iter_num = 0;
107 // track which packets have already been written to the code stream
109
110 // --- compress DAG state ---
111 std::unique_ptr<tf::Taskflow> compressFlow_;
112 std::unique_ptr<FlowComponent> mctFlow_;
113 std::vector<std::unique_ptr<FlowComponent>> dwtFlows_;
114 std::unique_ptr<FlowComponent> t1Flow_;
115 std::vector<std::unique_ptr<WaveletFwdScheduleData>> dwtScratch_;
116 std::atomic<bool> dagSuccess_{true};
117};
118
119} // namespace grk
A collection of tasks which can be scheduled as a single task.
Definition FlowComponent.h:28
Definition CodeStream.h:108
Definition PacketTracker.h:28
ResWindow.
Definition CompressedChunkCache.h:36
Definition IStream.h:60
Interface for managing tile compression.
Definition ITileProcessorCompress.h:31
Tile coding parameters : this structure is used to store coding/decoding parameters common to all til...
Definition CodingParams.h:124
void syncPluginCodeBlockData()
Definition TileProcessor_RateControl.cpp:179
void makeLayerSimple(uint16_t layno, double thresh, bool finalAttempt)
Definition TileProcessor_RateControl.cpp:817
void setFirstPocTilePart(bool res) override
Sets whether this tile part is the first POC tile part.
Definition TileProcessorCompress.cpp:300
std::vector< std::unique_ptr< WaveletFwdScheduleData > > dwtScratch_
Definition TileProcessorCompress.h:115
void setProgIterNum(uint32_t num) override
Sets the current progression iterator number.
Definition TileProcessorCompress.cpp:648
bool first_poc_tile_part_
Compression Only true for first POC tile part, otherwise false.
Definition TileProcessorCompress.h:97
uint32_t prog_iter_num
Definition TileProcessorCompress.h:104
void prepareBlockForFirstLayer(t1::CodeblockCompress *cblk)
bool rateAllocate(uint32_t *allPacketBytes, bool disableRateControl)
Definition TileProcessor_RateControl.cpp:65
bool compressT2(uint32_t *packet_bytes_written)
Definition TileProcessorCompress.cpp:287
PacketTracker * getPacketTracker(void) override
Gets the packet tracker.
Definition TileProcessorCompress.cpp:636
PacketTracker * packetTracker_
Definition TileProcessorCompress.h:108
bool makeLayerFeasible(uint16_t layno, uint16_t thresh, bool finalAttempt)
Definition TileProcessor_RateControl.cpp:102
bool canPreCalculateTileLen(void) override
Checks whether the tile length can be pre-calculated.
Definition TileProcessorCompress.cpp:187
std::atomic< bool > dagSuccess_
Definition TileProcessorCompress.h:116
bool pcrdBisectSimple(uint32_t *p_data_written, bool disableRateControl)
Definition TileProcessor_RateControl.cpp:502
uint32_t getPreCalculatedTileLen(void) override
Gets the pre-calculated tile length (for rate control optimization).
Definition TileProcessorCompress.cpp:183
void incTilePartCounter(void) override
Increments the tile-part counter.
Definition TileProcessorCompress.cpp:644
bool writeTilePartT2(uint32_t *tileBytesWritten) override
Writes the T2 part of the current tile part.
Definition TileProcessorCompress.cpp:198
void makeLayerFinal(uint16_t layno)
Definition TileProcessor_RateControl.cpp:907
bool pcrdBisectFeasible(uint32_t *p_data_written, bool disableRateControl)
Definition TileProcessor_RateControl.cpp:212
std::unique_ptr< FlowComponent > mctFlow_
Definition TileProcessorCompress.h:112
uint8_t getTilePartCounter(void) const override
Gets the current tile-part counter.
Definition TileProcessorCompress.cpp:640
bool ingestUncompressedData(uint8_t *p_src, uint64_t src_length) override
Ingests uncompressed image data into the tile.
Definition TileProcessorCompress.cpp:669
uint8_t tilePartCounter_
index of tile part being currently coded.
Definition TileProcessorCompress.h:102
void scheduleCompressT1()
Definition TileProcessorCompress.cpp:263
bool init(void) override
Initializes the TileProcessor.
Definition TileProcessorCompress.cpp:84
bool compressDAGSuccess(void) const
Definition TileProcessorCompress.cpp:496
std::vector< std::unique_ptr< FlowComponent > > dwtFlows_
Definition TileProcessorCompress.h:113
bool makeSingleLosslessLayer()
Definition TileProcessor_RateControl.cpp:93
uint8_t newTilePartProgressionPosition_
position of the tile part flag in progression order
Definition TileProcessorCompress.h:106
void transferTileDataFromImage(void)
~TileProcessorCompress() override
Destroys a TileProcessorCompress.
Definition TileProcessorCompress.cpp:79
std::unique_ptr< FlowComponent > t1Flow_
Definition TileProcessorCompress.h:114
void buildCompressDAG(void)
Definition TileProcessorCompress.cpp:305
TileProcessorCompress(uint16_t index, TileCodingParams *tcp, CodeStream *codeStream, IStream *stream)
Constructs a TileProcessorCompress.
Definition TileProcessorCompress.cpp:73
bool needsRateControl(void) override
Checks whether rate control is required for this tile.
Definition TileProcessor_RateControl.cpp:82
bool preCompressTile(size_t thread_id) override
Pre-compresses the tile (compression-only preparation).
Definition TileProcessorCompress.cpp:104
uint32_t preCalculatedTileLen_
Definition TileProcessorCompress.h:94
std::unique_ptr< tf::Taskflow > compressFlow_
Definition TileProcessorCompress.h:111
tf::Future< void > submitCompressDAG(void)
Definition TileProcessorCompress.cpp:491
bool doCompress(void) override
Performs the full tile compression (T1 + T2 + rate allocation).
Definition TileProcessorCompress.cpp:501
bool layerNeedsRateControl(uint16_t layno)
Definition TileProcessor_RateControl.cpp:76
void dcLevelShiftCompress()
Definition TileProcessorCompress.cpp:217
bool canWritePocMarker(void) override
Checks whether a POC marker can be written for this tile.
Definition TileProcessorCompress.cpp:191
TileProcessor(uint16_t index, TileCodingParams *tcp, CodeStream *codeStream, IStream *stream, bool isCompressor, uint32_t tileCacheStrategy)
Constructs a TileProcessor.
Definition TileProcessor.cpp:79
Definition WaveletFwd.h:35
Stores information about compression code block.
Definition CodeblockCompress.h:31