Grok 20.3.2
BlockCoder.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 "t1_common.h"
21#include "CodeblockCompress.h"
22#include "CodeblockDecompress.h"
23
24namespace grk::t1
25{
26
28{
29public:
30 BlockCoder(bool isCompressor, uint16_t maxCblkW, uint16_t maxCblkH, uint32_t cacheStrategy);
32
33 void print(void);
34 bool alloc(uint16_t w, uint16_t h);
35
36 void code_block_enc_deallocate(cblk_enc* p_code_block);
37 double compress_cblk(cblk_enc* cblk, uint32_t max, uint8_t orientation, uint16_t compno,
38 uint8_t level, uint8_t qmfbid, double stepsize, uint32_t cblksty,
39 const double* mct_norms, uint16_t mct_numcomps, bool doRateControl);
40 static double getnorm(uint32_t level, uint8_t orientation, bool reversible);
41
42 bool decompress_cblk(CodeblockDecompress* cblk, uint8_t orientation, uint32_t cblksty);
43 int32_t* getUncompressedData(void);
44 void decompressInitOrientation(uint8_t orientation);
45 void decompressInitSegment(uint8_t type, uint8_t** buffers, uint32_t* buffer_lengths,
46 uint16_t num_buffers);
47 void decompressUpdateSegment(uint8_t** buffers, uint32_t* buffer_lengths, uint16_t num_buffers);
48 bool decompressPass(uint8_t passno, uint8_t passtype, uint8_t numBpsToDecompress, uint8_t type,
49 uint32_t cblksty);
50 void decompressFinish(uint32_t cblksty, bool finalLayer);
51 void decompressBackup(void);
52 void decompressRestore(uint8_t* passno, uint8_t* passtype, uint8_t* numBpsToDecompress);
53 void setFinalLayer(bool isFinal);
54 static bool cacheAll(uint32_t strategy);
55
56private:
57 void initFlags(void);
58 uint16_t getFlagsStride(void);
59 uint16_t getFlagsHeight(void);
60
63
67 uint16_t w_;
71 uint16_t stride_;
75 uint16_t h_;
76
86
93 uint32_t flagsLen_;
95
96 void checkSegSym(int32_t cblksty);
97
98 template<uint16_t w, uint16_t h, bool vsc>
99 void dec_clnpass(int8_t bpno);
100 void dec_clnpass(int8_t bpno, int32_t cblksty);
101 template<uint16_t w, uint16_t h, bool vsc>
102 void dec_clnpass_diff(int8_t bpno, uint8_t passno, uint8_t passtype);
103 void dec_clnpass_diff(int8_t bpno, uint8_t passno, uint8_t passtype, int32_t cblksty);
104 template<uint16_t w, uint16_t h, bool vsc>
105 void dec_clnpass_diff_final(int8_t bpno, uint8_t passno, uint8_t passtype);
106 void dec_clnpass_diff_final(int8_t bpno, uint8_t passno, uint8_t passtype, int32_t cblksty);
107
108 template<uint16_t w, uint16_t h, bool vsc>
109 void dec_sigpass(int8_t bpno);
110 void dec_sigpass(int8_t bpno, int32_t cblksty);
111 template<uint16_t w, uint16_t h, bool vsc>
112 void dec_sigpass_diff(int8_t bpno, uint8_t passno, uint8_t passtype);
113 void dec_sigpass_diff(int8_t bpno, uint8_t passno, uint8_t passtype, int32_t cblksty);
114 template<uint16_t w, uint16_t h, bool vsc>
115 void dec_sigpass_diff_final(int8_t bpno, uint8_t passno, uint8_t passtype);
116 void dec_sigpass_diff_final(int8_t bpno, uint8_t passno, uint8_t passtype, int32_t cblksty);
117
118 template<uint16_t w, uint16_t h>
119 void dec_refpass(int8_t bpno);
120 void dec_refpass(int8_t bpno);
121 template<uint16_t w, uint16_t h>
122 void dec_refpass_diff(int8_t bpno, uint8_t passno, uint8_t passtype);
123 void dec_refpass_diff(int8_t bpno, uint8_t passno, uint8_t passtype);
124 template<uint16_t w, uint16_t h>
125 void dec_refpass_diff_final(int8_t bpno, uint8_t passno, uint8_t passtype);
126 void dec_refpass_diff_final(int8_t bpno, uint8_t passno, uint8_t passtype);
127
128 void dec_sigpass_raw(int8_t bpno, int32_t cblksty);
129 void dec_refpass_raw(int8_t bpno);
130 inline void dec_refpass_step_raw(grk_flag* flagsPtr, int32_t* datap, int32_t poshalf,
131 uint32_t ci);
132 inline void dec_sigpass_step_raw(grk_flag* flagsPtr, int32_t* datap, int32_t oneplushalf,
133 uint32_t vsc, uint32_t ci);
134
135 void enc_clnpass(int8_t bpno, int32_t* nmsedec, uint32_t cblksty);
136 void enc_sigpass(int8_t bpno, int32_t* nmsedec, uint8_t type, uint32_t cblksty);
137 void enc_refpass(int8_t bpno, int32_t* nmsedec, uint8_t type);
138 int enc_is_term_pass(cblk_enc* cblk, uint32_t cblksty, int8_t bpno, uint32_t passtype);
139 void code_block_enc_allocate(cblk_enc* p_code_block);
147 double getnorm_53(uint32_t level, uint8_t orientation);
155 double getnorm_97(uint32_t level, uint8_t orientation);
156
157 double getwmsedec(int32_t nmsedec, uint16_t compno, uint32_t level, uint8_t orientation,
158 int8_t bpno, uint32_t qmfbid, double stepsize, const double* mct_norms,
159 uint32_t mct_numcomps);
160};
161
162} // namespace grk::t1
void print(void)
Definition BlockCoderEnc.cpp:145
void decompressFinish(uint32_t cblksty, bool finalLayer)
Definition BlockCoderDec.cpp:155
int32_t * getUncompressedData(void)
Definition BlockCoderEnc.cpp:216
bool decompressPass(uint8_t passno, uint8_t passtype, uint8_t numBpsToDecompress, uint8_t type, uint32_t cblksty)
Definition BlockCoderDec.cpp:91
uint16_t h_
cached block height
Definition BlockCoder.h:75
uint16_t w_
cached block width
Definition BlockCoder.h:67
void decompressInitOrientation(uint8_t orientation)
Definition BlockCoderDec.cpp:26
uint16_t getFlagsHeight(void)
Definition BlockCoderEnc.cpp:346
void dec_refpass(int8_t bpno)
Definition BlockCoderDec.cpp:252
double getwmsedec(int32_t nmsedec, uint16_t compno, uint32_t level, uint8_t orientation, int8_t bpno, uint32_t qmfbid, double stepsize, const double *mct_norms, uint32_t mct_numcomps)
Definition BlockCoderEnc.cpp:398
void dec_refpass_step_raw(grk_flag *flagsPtr, int32_t *datap, int32_t poshalf, uint32_t ci)
Definition BlockCoderEnc.cpp:286
void dec_refpass_diff_final(int8_t bpno, uint8_t passno, uint8_t passtype)
Definition BlockCoderDec.cpp:670
uint32_t flagsLen_
Definition BlockCoder.h:93
double compress_cblk(cblk_enc *cblk, uint32_t max, uint8_t orientation, uint16_t compno, uint8_t level, uint8_t qmfbid, double stepsize, uint32_t cblksty, const double *mct_norms, uint16_t mct_numcomps, bool doRateControl)
Definition BlockCoderEnc.cpp:734
void dec_clnpass_diff_final(int8_t bpno, uint8_t passno, uint8_t passtype)
Definition BlockCoderDec.cpp:709
static double getnorm(uint32_t level, uint8_t orientation, bool reversible)
Definition BlockCoderEnc.cpp:192
void checkSegSym(int32_t cblksty)
Definition BlockCoderDec.cpp:187
bool decompress_cblk(CodeblockDecompress *cblk, uint8_t orientation, uint32_t cblksty)
Definition BlockCoderDec.cpp:170
void initFlags(void)
Definition BlockCoderEnc.cpp:351
void code_block_enc_allocate(cblk_enc *p_code_block)
Definition BlockCoderEnc.cpp:393
void dec_clnpass(int8_t bpno)
Definition BlockCoderDec.cpp:211
bool alloc(uint16_t w, uint16_t h)
Definition BlockCoderEnc.cpp:150
void enc_refpass(int8_t bpno, int32_t *nmsedec, uint8_t type)
Definition BlockCoderEnc.cpp:533
void code_block_enc_deallocate(cblk_enc *p_code_block)
ENCODE ////////////////////////////////////////////////////.
Definition BlockCoderEnc.cpp:388
void dec_sigpass(int8_t bpno)
Definition BlockCoderDec.cpp:232
void dec_sigpass_diff(int8_t bpno, uint8_t passno, uint8_t passtype)
Definition BlockCoderDec.cpp:536
void dec_sigpass_raw(int8_t bpno, int32_t cblksty)
Definition BlockCoderEnc.cpp:222
void decompressBackup(void)
Definition BlockCoderDec.cpp:39
void dec_clnpass_diff(int8_t bpno, uint8_t passno, uint8_t passtype)
Definition BlockCoderDec.cpp:689
void dec_sigpass_step_raw(grk_flag *flagsPtr, int32_t *datap, int32_t oneplushalf, uint32_t vsc, uint32_t ci)
Definition BlockCoderEnc.cpp:261
bool compressor
Definition BlockCoder.h:94
void dec_sigpass_diff_final(int8_t bpno, uint8_t passno, uint8_t passtype)
Definition BlockCoderDec.cpp:555
Buffer2dAligned32 uncompressedBuf_
uncompressed data buffer
Definition BlockCoder.h:81
void decompressInitSegment(uint8_t type, uint8_t **buffers, uint32_t *buffer_lengths, uint16_t num_buffers)
Definition BlockCoderDec.cpp:30
uint16_t getFlagsStride(void)
Definition BlockCoderEnc.cpp:342
BlockCoder(bool isCompressor, uint16_t maxCblkW, uint16_t maxCblkH, uint32_t cacheStrategy)
Definition BlockCoderEnc.cpp:119
uint32_t cacheStrategy_
Definition BlockCoder.h:61
void decompressRestore(uint8_t *passno, uint8_t *passtype, uint8_t *numBpsToDecompress)
Definition BlockCoderDec.cpp:65
double getnorm_97(uint32_t level, uint8_t orientation)
Get the norm of a wavelet function of a subband at a specified level for the irreversible 9-7 DWT.
Definition BlockCoderEnc.cpp:212
int enc_is_term_pass(cblk_enc *cblk, uint32_t cblksty, int8_t bpno, uint32_t passtype)
Definition BlockCoderEnc.cpp:417
void enc_clnpass(int8_t bpno, int32_t *nmsedec, uint32_t cblksty)
Definition BlockCoderEnc.cpp:583
int32_t * uncompressedData_
pointer to uncompressedBuf_ data
Definition BlockCoder.h:85
grk_flag * flags_
Flags used by decompressor and compressor.
Definition BlockCoder.h:92
double getnorm_53(uint32_t level, uint8_t orientation)
Get the norm of a wavelet function of a subband at a specified level for the reversible 5-3 DWT.
Definition BlockCoderEnc.cpp:205
uint16_t stride_
cached block stride
Definition BlockCoder.h:71
void dec_refpass_raw(int8_t bpno)
Definition BlockCoderEnc.cpp:303
~BlockCoder()
Definition BlockCoderEnc.cpp:137
static bool cacheAll(uint32_t strategy)
Definition BlockCoderEnc.cpp:141
mqcoder coder
Definition BlockCoder.h:62
void setFinalLayer(bool isFinal)
Definition BlockCoderDec.cpp:80
void decompressUpdateSegment(uint8_t **buffers, uint32_t *buffer_lengths, uint16_t num_buffers)
Definition BlockCoderDec.cpp:85
void dec_refpass_diff(int8_t bpno, uint8_t passno, uint8_t passtype)
Definition BlockCoderDec.cpp:654
void enc_sigpass(int8_t bpno, int32_t *nmsedec, uint8_t type, uint32_t cblksty)
Definition BlockCoderEnc.cpp:466
Definition SchedulerFreebyrd.h:36
uint32_t grk_flag
Definition mqc_base.h:27
Buffer2d< int32_t, AllocatorAligned > Buffer2dAligned32
Definition buffer.h:553
Definition CodeblockDecompress.h:27
Definition t1_common.h:69
MQ coder.
Definition mqc.h:39