OpenJPH
Open-source implementation of JPEG2000 Part-15
Toggle main menu visibility
Loading...
Searching...
No Matches
ojph_subband.cpp
Go to the documentation of this file.
1
2
//***************************************************************************/
3
// This software is released under the 2-Clause BSD license, included
4
// below.
5
//
6
// Copyright (c) 2019, Aous Naman
7
// Copyright (c) 2019, Kakadu Software Pty Ltd, Australia
8
// Copyright (c) 2019, The University of New South Wales, Australia
9
//
10
// Redistribution and use in source and binary forms, with or without
11
// modification, are permitted provided that the following conditions are
12
// met:
13
//
14
// 1. Redistributions of source code must retain the above copyright
15
// notice, this list of conditions and the following disclaimer.
16
//
17
// 2. Redistributions in binary form must reproduce the above copyright
18
// notice, this list of conditions and the following disclaimer in the
19
// documentation and/or other materials provided with the distribution.
20
//
21
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
22
// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
23
// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
24
// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
27
// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
//***************************************************************************/
33
// This file is part of the OpenJPH software implementation.
34
// File: ojph_subband.cpp
35
// Author: Aous Naman
36
// Date: 28 August 2019
37
//***************************************************************************/
38
39
40
#include <climits>
41
#include <cmath>
42
43
#include "
ojph_mem.h
"
44
#include "
ojph_params.h
"
45
#include "
ojph_codestream_local.h
"
46
#include "
ojph_subband.h
"
47
#include "
ojph_resolution.h
"
48
#include "
ojph_codeblock.h
"
49
#include "
ojph_precinct.h
"
50
51
namespace
ojph
{
52
53
namespace
local
54
{
55
57
void
subband::pre_alloc
(
codestream
*
codestream
,
const
rect
&
band_rect
,
58
ui32
comp_num,
ui32
res_num
,
ui32
transform_flags)
59
{
60
mem_fixed_allocator
* allocator =
codestream
->
get_allocator
();
61
62
bool
empty
= ((
band_rect
.siz.w == 0) || (
band_rect
.siz.h == 0));
63
if
(
empty
)
64
return
;
65
66
const
param_cod
* cdp =
codestream
->
get_coc
(comp_num);
67
size
log_cb = cdp->
get_log_block_dims
();
68
size
log_PP
= cdp->
get_log_precinct_size
(
res_num
);
69
70
ui32
x_off = ((transform_flags &
resolution::HORZ_TRX
) ? 1 : 0);
71
ui32
y_off = ((transform_flags &
resolution::VERT_TRX
) ? 1 : 0);
72
73
ui32
xcb_prime
=
ojph_min
(log_cb.
w
,
log_PP
.w - x_off);
74
ui32
ycb_prime
=
ojph_min
(log_cb.
h
,
log_PP
.h - y_off);
75
76
size
nominal(1 <<
xcb_prime
, 1 <<
ycb_prime
);
77
78
ui32
tbx0 =
band_rect
.org.x;
79
ui32
tby0 =
band_rect
.org.y;
80
ui32
tbx1 =
band_rect
.org.x +
band_rect
.siz.w;
81
ui32
tby1 =
band_rect
.org.y +
band_rect
.siz.h;
82
83
size
num_blocks
;
84
num_blocks
.w = (tbx1 + (1 <<
xcb_prime
) - 1) >>
xcb_prime
;
85
num_blocks
.w -= tbx0 >>
xcb_prime
;
86
num_blocks
.h = (tby1 + (1 <<
ycb_prime
) - 1) >>
ycb_prime
;
87
num_blocks
.h -= tby0 >>
ycb_prime
;
88
89
allocator->
pre_alloc_obj
<
codeblock
>(
num_blocks
.w);
90
//allocate codeblock headers
91
allocator->
pre_alloc_obj
<
coded_cb_header
>((size_t)
num_blocks
.area());
92
93
const
param_qcd
* qp =
codestream
->
access_qcd
()->
get_qcc
(comp_num);
94
ui32
precision = qp->
propose_precision
(cdp);
95
const
param_atk
* atk = cdp->
access_atk
();
96
bool
reversible
= atk->
is_reversible
();
97
98
for
(
ui32
i = 0; i <
num_blocks
.w; ++i)
99
codeblock::pre_alloc
(
codestream
, nominal, precision);
100
101
//allocate lines
102
allocator->
pre_alloc_obj
<
line_buf
>(1);
103
//allocate line_buf
104
ui32
width =
band_rect
.siz.w + 1;
105
if
(
reversible
)
106
{
107
if
(precision <= 32)
108
allocator->
pre_alloc_data
<
si32
>(width, 1);
109
else
110
allocator->
pre_alloc_data
<
si64
>(width, 1);
111
}
112
else
113
allocator->
pre_alloc_data
<
float
>(width, 1);
114
}
115
117
void
subband::finalize_alloc
(
codestream
*
codestream
,
118
const
rect
&
band_rect
,
119
resolution
* res,
ui32
res_num
,
120
ui32
subband_num)
121
{
122
mem_fixed_allocator
* allocator =
codestream
->
get_allocator
();
123
elastic
=
codestream
->
get_elastic_alloc
();
124
125
this->res_num =
res_num
;
126
this->
band_num
= subband_num;
127
this->band_rect =
band_rect
;
128
this->
parent
= res;
129
130
ui32
comp_num =
parent
->get_comp_num();
131
const
param_cod
* cdp =
codestream
->
get_coc
(comp_num);
132
this->
reversible
= cdp->
access_atk
()->
is_reversible
();
133
size
log_cb = cdp->
get_log_block_dims
();
134
log_PP
= cdp->
get_log_precinct_size
(
res_num
);
135
136
ui32
x_off = ((
parent
->has_horz_transform()) ? 1 : 0);
137
ui32
y_off = ((
parent
->has_vert_transform()) ? 1 : 0);
138
139
xcb_prime
=
ojph_min
(log_cb.
w
,
log_PP
.w - x_off);
140
ycb_prime
=
ojph_min
(log_cb.
h
,
log_PP
.h - y_off);
141
142
size
nominal(1 <<
xcb_prime
, 1 <<
ycb_prime
);
143
144
cur_cb_row
= 0;
145
cur_line
= 0;
146
cur_cb_height
= 0;
147
const
param_dfs
* dfs = NULL;
148
if
(cdp->
is_dfs_defined
()) {
149
dfs =
codestream
->
access_dfs
();
150
if
(dfs != NULL)
151
dfs = dfs->
get_dfs
(cdp->
get_dfs_index
());
152
}
153
const
param_qcd
* qcd =
codestream
->
access_qcd
()->
get_qcc
(comp_num);
154
ui32
num_decomps = cdp->
get_num_decompositions
();
155
this->
K_max
= qcd->
get_Kmax
(dfs, num_decomps, this->res_num,
band_num
);
156
if
(!
reversible
)
157
{
158
float
d =
159
qcd->
get_irrev_delta
(dfs, num_decomps,
160
comp_num,
res_num
, subband_num);
161
d /= (float)(1u << (31 - this->
K_max
));
162
delta
= d;
163
delta_inv
= (1.0f/d);
164
}
165
ui32
precision = qcd->
propose_precision
(cdp);
166
167
this->
empty
= ((
band_rect
.siz.w == 0) || (
band_rect
.siz.h == 0));
168
if
(this->
empty
)
169
return
;
170
171
ui32
tbx0 =
band_rect
.org.x;
172
ui32
tby0 =
band_rect
.org.y;
173
ui32
tbx1 =
band_rect
.org.x +
band_rect
.siz.w;
174
ui32
tby1 =
band_rect
.org.y +
band_rect
.siz.h;
175
176
num_blocks
=
size
();
177
num_blocks
.w = (tbx1 + (1 <<
xcb_prime
) - 1) >>
xcb_prime
;
178
num_blocks
.w -= tbx0 >>
xcb_prime
;
179
num_blocks
.h = (tby1 + (1 <<
ycb_prime
) - 1) >>
ycb_prime
;
180
num_blocks
.h -= tby0 >>
ycb_prime
;
181
182
blocks
= allocator->
post_alloc_obj
<
codeblock
>(
num_blocks
.w);
183
//allocate codeblock headers
184
coded_cb_header
*cp =
coded_cbs
=
185
allocator->
post_alloc_obj
<
coded_cb_header
>((size_t)
num_blocks
.area());
186
memset(
coded_cbs
, 0,
sizeof
(
coded_cb_header
) * (
size_t
)
num_blocks
.area());
187
for
(
int
i = (
int
)
num_blocks
.area(); i > 0; --i, ++cp)
188
cp->Kmax =
K_max
;
189
190
ui32
x_lower_bound = (tbx0 >>
xcb_prime
) <<
xcb_prime
;
191
ui32
y_lower_bound = (tby0 >>
ycb_prime
) <<
ycb_prime
;
192
193
size
cb_size;
194
cb_size.
h
=
ojph_min
(tby1, y_lower_bound + nominal.
h
) - tby0;
195
cur_cb_height
= (
si32
)cb_size.
h
;
196
int
line_offset = 0;
197
for
(
ui32
i = 0; i <
num_blocks
.w; ++i)
198
{
199
ui32
cbx0 =
ojph_max
(tbx0, x_lower_bound + i * nominal.
w
);
200
ui32
cbx1 =
ojph_min
(tbx1, x_lower_bound + (i + 1) * nominal.
w
);
201
cb_size.
w
= cbx1 - cbx0;
202
blocks
[i].finalize_alloc(
codestream
,
this
, nominal, cb_size,
203
coded_cbs
+ i,
K_max
, line_offset,
204
precision, comp_num);
205
line_offset += cb_size.
w
;
206
}
207
208
//allocate lines
209
lines
= allocator->
post_alloc_obj
<
line_buf
>(1);
210
//allocate line_buf
211
ui32
width =
band_rect
.siz.w + 1;
212
if
(
reversible
)
213
{
214
if
(precision <= 32)
215
lines
->wrap(allocator->
post_alloc_data
<
si32
>(width, 1), width, 1);
216
else
217
lines
->wrap(allocator->
post_alloc_data
<
si64
>(width, 1), width, 1);
218
}
219
else
220
lines
->wrap(allocator->
post_alloc_data
<
float
>(width, 1), width, 1);
221
}
222
224
void
subband::get_cb_indices
(
const
size
& num_precincts,
225
precinct
*precincts)
226
{
227
if
(
empty
)
228
return
;
229
230
rect
res_rect =
parent
->get_rect();
231
ui32
trx0 = res_rect.
org
.
x
;
232
ui32
try0 = res_rect.
org
.
y
;
233
ui32
trx1 = res_rect.
org
.
x
+ res_rect.
siz
.
w
;
234
ui32
try1 = res_rect.
org
.
y
+ res_rect.
siz
.
h
;
235
236
ui32
pc_lft = (res_rect.
org
.
x
>>
log_PP
.w) <<
log_PP
.w;
237
ui32
pc_top = (res_rect.
org
.
y
>>
log_PP
.h) <<
log_PP
.h;
238
239
ui32
pcx0, pcx1, pcy0, pcy1;
240
ui32
x_shift =
parent
->has_horz_transform() ? 1 : 0;
241
ui32
y_shift =
parent
->has_vert_transform() ? 1 : 0;
242
ui32
yb, xb, coly = 0, colx = 0;
243
for
(
ui32
y = 0; y < num_precincts.
h
; ++y)
244
{
245
pcy0 =
ojph_max
(try0, pc_top + (y <<
log_PP
.h));
246
pcy1 =
ojph_min
(try1, pc_top + ((y + 1) <<
log_PP
.h));
247
pcy0 = (pcy0 - (
band_num
>> 1) + (1 << y_shift) - 1) >> y_shift;
248
pcy1 = (pcy1 - (
band_num
>> 1) + (1 << y_shift) - 1) >> y_shift;
249
250
precinct
*p = precincts + y * num_precincts.
w
;
251
yb = ((pcy1 + (1<<
ycb_prime
) - 1) >>
ycb_prime
);
252
yb -= (pcy0 >>
ycb_prime
);
253
colx = 0;
254
255
for
(
ui32
x = 0; x < num_precincts.
w
; ++x, ++p)
256
{
257
pcx0 =
ojph_max
(trx0, pc_lft + (x <<
log_PP
.w));
258
pcx1 =
ojph_min
(trx1, pc_lft + ((x + 1) <<
log_PP
.w));
259
pcx0 = (pcx0 - (
band_num
& 1) + (1 << x_shift) - 1) >> x_shift;
260
pcx1 = (pcx1 - (
band_num
& 1) + (1 << x_shift) - 1) >> x_shift;
261
262
rect
*bp = p->
cb_idxs
+
band_num
;
263
xb = ((pcx1 + (1<<
xcb_prime
) - 1) >>
xcb_prime
);
264
xb -= (pcx0 >>
xcb_prime
);
265
266
bp->
org
.
x
= colx;
267
bp->
org
.
y
= coly;
268
bp->
siz
.
w
= xb;
269
bp->
siz
.
h
= yb;
270
271
colx += xb;
272
}
273
coly += yb;
274
}
275
assert(colx ==
num_blocks
.w && coly ==
num_blocks
.h);
276
}
277
279
void
subband::exchange_buf
(
line_buf
*l)
280
{
281
if
(
empty
)
282
return
;
283
284
assert(l->
pre_size
==
lines
[0].pre_size && l->
size
==
lines
[0].size &&
285
l->
flags
==
lines
[0].flags);
286
void
* p =
lines
[0].p;
287
lines
[0].p = l->
p
;
288
l->
p
= p;
289
}
290
292
void
subband::push_line
()
293
{
294
if
(
empty
)
295
return
;
296
297
//push to codeblocks
298
for
(
ui32
i = 0; i <
num_blocks
.w; ++i)
299
blocks
[i].push(
lines
+ 0);
300
if
(++
cur_line
>=
cur_cb_height
)
301
{
302
for
(
ui32
i = 0; i <
num_blocks
.w; ++i)
303
blocks
[i].encode(
elastic
);
304
305
if
(++
cur_cb_row
<
num_blocks
.h)
306
{
307
cur_line
= 0;
308
309
ui32
tbx0 =
band_rect
.org.x;
310
ui32
tby0 =
band_rect
.org.y;
311
ui32
tbx1 =
band_rect
.org.x +
band_rect
.siz.w;
312
ui32
tby1 =
band_rect
.org.y +
band_rect
.siz.h;
313
size
nominal(1 <<
xcb_prime
, 1 <<
ycb_prime
);
314
315
ui32
x_lower_bound = (tbx0 >>
xcb_prime
) <<
xcb_prime
;
316
ui32
y_lower_bound = (tby0 >>
ycb_prime
) <<
ycb_prime
;
317
ui32
cby0 = y_lower_bound +
cur_cb_row
* nominal.
h
;
318
ui32
cby1 =
ojph_min
(tby1, cby0 + nominal.
h
);
319
320
size
cb_size;
321
cb_size.
h
= cby1 -
ojph_max
(tby0, cby0);
322
cur_cb_height
= (int)cb_size.
h
;
323
for
(
ui32
i = 0; i <
num_blocks
.w; ++i)
324
{
325
ui32
cbx0 =
ojph_max
(tbx0, x_lower_bound + i * nominal.
w
);
326
ui32
cbx1 =
ojph_min
(tbx1, x_lower_bound + (i + 1) * nominal.
w
);
327
cb_size.
w
= cbx1 - cbx0;
328
blocks
[i].recreate(cb_size,
329
coded_cbs
+ i +
cur_cb_row
*
num_blocks
.w);
330
}
331
}
332
}
333
}
334
336
line_buf
*
subband::pull_line
()
337
{
338
if
(
empty
)
339
return
lines
;
340
341
//pull from codeblocks
342
if
(--
cur_line
<= 0)
343
{
344
if
(
cur_cb_row
<
num_blocks
.h)
345
{
346
ui32
tbx0 =
band_rect
.org.x;
347
ui32
tby0 =
band_rect
.org.y;
348
ui32
tbx1 =
band_rect
.org.x +
band_rect
.siz.w;
349
ui32
tby1 =
band_rect
.org.y +
band_rect
.siz.h;
350
size
nominal(1 <<
xcb_prime
, 1 <<
ycb_prime
);
351
352
ui32
x_lower_bound = (tbx0 >>
xcb_prime
) <<
xcb_prime
;
353
ui32
y_lower_bound = (tby0 >>
ycb_prime
) <<
ycb_prime
;
354
ui32
cby0 =
ojph_max
(tby0, y_lower_bound +
cur_cb_row
* nominal.
h
);
355
ui32
cby1 =
ojph_min
(tby1, y_lower_bound+(
cur_cb_row
+1)*nominal.
h
);
356
357
size
cb_size;
358
cb_size.
h
= cby1 - cby0;
359
cur_line
=
cur_cb_height
= (int)cb_size.
h
;
360
for
(
ui32
i = 0; i <
num_blocks
.w; ++i)
361
{
362
ui32
cbx0 =
ojph_max
(tbx0, x_lower_bound + i * nominal.
w
);
363
ui32
cbx1 =
ojph_min
(tbx1, x_lower_bound + (i + 1) * nominal.
w
);
364
cb_size.
w
= cbx1 - cbx0;
365
blocks
[i].recreate(cb_size,
366
coded_cbs
+ i +
cur_cb_row
*
num_blocks
.w);
367
blocks
[i].decode();
368
}
369
++
cur_cb_row
;
370
}
371
}
372
373
assert(
cur_line
>= 0);
374
375
//pull from codeblocks
376
for
(
ui32
i = 0; i <
num_blocks
.w; ++i)
377
blocks
[i].
pull_line
(
lines
+ 0);
378
379
return
lines
;
380
}
381
382
}
383
}
ojph::line_buf
Definition
ojph_mem.h:161
ojph::line_buf::size
size_t size
Definition
ojph_mem.h:181
ojph::line_buf::p
void * p
Definition
ojph_mem.h:188
ojph::line_buf::flags
ui32 flags
Definition
ojph_mem.h:183
ojph::line_buf::pre_size
ui32 pre_size
Definition
ojph_mem.h:182
ojph::local::codeblock
Definition
ojph_codeblock.h:66
ojph::local::codeblock::pre_alloc
static void pre_alloc(codestream *codestream, const size &nominal, ui32 precision)
Definition
ojph_codeblock.cpp:56
ojph::local::codestream
Definition
ojph_codestream_local.h:65
ojph::local::codestream::get_coc
const param_cod * get_coc(ui32 comp_num)
Definition
ojph_codestream_local.h:85
ojph::local::codestream::get_elastic_alloc
mem_elastic_allocator * get_elastic_alloc()
Definition
ojph_codestream_local.h:94
ojph::local::codestream::access_qcd
const param_qcd * access_qcd()
Definition
ojph_codestream_local.h:87
ojph::local::codestream::get_allocator
mem_fixed_allocator * get_allocator()
Definition
ojph_codestream_local.h:93
ojph::local::codestream::access_dfs
const param_dfs * access_dfs()
Definition
ojph_codestream_local.h:89
ojph::local::resolution
Definition
ojph_resolution.h:62
ojph::local::resolution::HORZ_TRX
@ HORZ_TRX
Definition
ojph_resolution.h:65
ojph::local::resolution::VERT_TRX
@ VERT_TRX
Definition
ojph_resolution.h:66
ojph::local::subband::log_PP
size log_PP
Definition
ojph_subband.h:110
ojph::local::subband::num_blocks
size num_blocks
Definition
ojph_subband.h:109
ojph::local::subband::push_line
void push_line()
Definition
ojph_subband.cpp:292
ojph::local::subband::pre_alloc
static void pre_alloc(codestream *codestream, const rect &band_rect, ui32 comp_num, ui32 res_num, ui32 transform_flags)
Definition
ojph_subband.cpp:57
ojph::local::subband::K_max
ui32 K_max
Definition
ojph_subband.h:116
ojph::local::subband::exchange_buf
void exchange_buf(line_buf *l)
Definition
ojph_subband.cpp:279
ojph::local::subband::coded_cbs
coded_cb_header * coded_cbs
Definition
ojph_subband.h:117
ojph::local::subband::lines
line_buf * lines
Definition
ojph_subband.h:106
ojph::local::subband::band_num
ui32 band_num
Definition
ojph_subband.h:103
ojph::local::subband::empty
bool empty
Definition
ojph_subband.h:101
ojph::local::subband::ycb_prime
ui32 ycb_prime
Definition
ojph_subband.h:111
ojph::local::subband::band_rect
rect band_rect
Definition
ojph_subband.h:105
ojph::local::subband::get_cb_indices
void get_cb_indices(const size &num_precincts, precinct *precincts)
Definition
ojph_subband.cpp:224
ojph::local::subband::elastic
mem_elastic_allocator * elastic
Definition
ojph_subband.h:118
ojph::local::subband::precinct
friend struct precinct
Definition
ojph_subband.h:64
ojph::local::subband::blocks
codeblock * blocks
Definition
ojph_subband.h:108
ojph::local::subband::res_num
ui32 res_num
Definition
ojph_subband.h:103
ojph::local::subband::delta_inv
float delta_inv
Definition
ojph_subband.h:115
ojph::local::subband::cur_line
int cur_line
Definition
ojph_subband.h:113
ojph::local::subband::parent
resolution * parent
Definition
ojph_subband.h:107
ojph::local::subband::delta
float delta
Definition
ojph_subband.h:115
ojph::local::subband::xcb_prime
ui32 xcb_prime
Definition
ojph_subband.h:111
ojph::local::subband::reversible
bool reversible
Definition
ojph_subband.h:104
ojph::local::subband::finalize_alloc
void finalize_alloc(codestream *codestream, const rect &band_rect, resolution *res, ui32 res_num, ui32 subband_num)
Definition
ojph_subband.cpp:117
ojph::local::subband::pull_line
line_buf * pull_line()
Definition
ojph_subband.cpp:336
ojph::local::subband::cur_cb_row
ui32 cur_cb_row
Definition
ojph_subband.h:112
ojph::local::subband::cur_cb_height
int cur_cb_height
Definition
ojph_subband.h:114
ojph::mem_fixed_allocator
Definition
ojph_mem.h:59
ojph::mem_fixed_allocator::pre_alloc_data
void pre_alloc_data(size_t num_ele, ui32 pre_size)
Definition
ojph_mem.h:72
ojph::mem_fixed_allocator::pre_alloc_obj
void pre_alloc_obj(size_t num_ele)
Definition
ojph_mem.h:78
ojph::mem_fixed_allocator::post_alloc_data
T * post_alloc_data(size_t num_ele, ui32 pre_size)
Definition
ojph_mem.h:112
ojph::mem_fixed_allocator::post_alloc_obj
T * post_alloc_obj(size_t num_ele)
Definition
ojph_mem.h:119
ojph::local
Definition
ojph_bitbuffer_read.h:53
ojph
Definition
ojph_img_io.h:52
ojph::si64
int64_t si64
Definition
ojph_defs.h:57
ojph::si32
int32_t si32
Definition
ojph_defs.h:55
ojph::ui32
uint32_t ui32
Definition
ojph_defs.h:54
ojph_codeblock.h
ojph_codestream_local.h
ojph_max
#define ojph_max(a, b)
Definition
ojph_defs.h:73
ojph_min
#define ojph_min(a, b)
Definition
ojph_defs.h:76
ojph_mem.h
ojph_params.h
ojph_precinct.h
ojph_resolution.h
ojph_subband.h
ojph::local::coded_cb_header
Definition
ojph_codeblock.h:116
ojph::local::param_atk
Definition
ojph_params_local.h:1281
ojph::local::param_atk::is_reversible
bool is_reversible() const
Definition
ojph_params_local.h:1338
ojph::local::param_cod
Definition
ojph_params_local.h:385
ojph::local::param_cod::get_log_block_dims
size get_log_block_dims() const
Definition
ojph_params_local.h:526
ojph::local::param_cod::get_dfs_index
ui16 get_dfs_index() const
Definition
ojph_params_local.h:617
ojph::local::param_cod::access_atk
const param_atk * access_atk() const
Definition
ojph_params_local.h:609
ojph::local::param_cod::get_log_precinct_size
size get_log_precinct_size(ui32 res_num) const
Definition
ojph_params_local.h:553
ojph::local::param_cod::is_dfs_defined
bool is_dfs_defined() const
Definition
ojph_params_local.h:613
ojph::local::param_cod::get_num_decompositions
ui8 get_num_decompositions() const
Definition
ojph_params_local.h:504
ojph::local::param_dfs
Definition
ojph_params_local.h:1189
ojph::local::param_dfs::get_dfs
const param_dfs * get_dfs(int index) const
Definition
ojph_params.cpp:3144
ojph::local::param_qcd
Definition
ojph_params_local.h:687
ojph::local::param_qcd::get_irrev_delta
float get_irrev_delta(const param_dfs *dfs, ui32 num_decompositions, ui32 comp_num, ui32 resolution, ui32 subband) const
Definition
ojph_params.cpp:1714
ojph::local::param_qcd::propose_precision
ui32 propose_precision(const param_cod *cod) const
Definition
ojph_params.cpp:1748
ojph::local::param_qcd::get_Kmax
ui32 get_Kmax(const param_dfs *dfs, ui32 num_decompositions, ui32 resolution, ui32 subband) const
Definition
ojph_params.cpp:1779
ojph::local::param_qcd::get_qcc
param_qcd * get_qcc(ui32 comp_idx)
Definition
ojph_params.cpp:2128
ojph::local::precinct::cb_idxs
rect cb_idxs[4]
Definition
ojph_precinct.h:73
ojph::point::y
ui32 y
Definition
ojph_base.h:60
ojph::point::x
ui32 x
Definition
ojph_base.h:60
ojph::rect
Definition
ojph_base.h:65
ojph::rect::siz
size siz
Definition
ojph_base.h:67
ojph::rect::org
point org
Definition
ojph_base.h:66
ojph::size
Definition
ojph_base.h:48
ojph::size::w
ui32 w
Definition
ojph_base.h:50
ojph::size::h
ui32 h
Definition
ojph_base.h:51
src
core
codestream
ojph_subband.cpp
Generated by
1.17.0