1 /*
2 * JPEG 2000 encoder and decoder common functions
3 * Copyright (c) 2007 Kamil Nowosad
4 * Copyright (c) 2013 Nicolas Bertrand <nicoinattendu@gmail.com>
5 *
6 * This file is part of FFmpeg.
7 *
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
23 /**
24 * @file
25 * JPEG 2000 image encoder and decoder common functions
26 */
27
33
34 #define SHL(a, n) ((n) >= 0 ? (a) << (n) : (a) >> -(n))
35
36 /* tag tree routines */
37
38 /* allocate the memory for tag tree */
40 {
42 while (w > 1 || h > 1) {
43 res += w * h;
45 w = (w + 1) >> 1;
46 h = (h + 1) >> 1;
47 }
49 }
50
52 {
53 int pw = w, ph = h;
56
58
59 t = res = av_mallocz_array(tt_size, sizeof(*t));
60 if (!res)
61 return NULL;
62
63 while (w > 1 || h > 1) {
64 int i, j;
65 pw = w;
66 ph = h;
67
68 w = (w + 1) >> 1;
69 h = (h + 1) >> 1;
70 t2 = t + pw * ph;
71
72 for (i = 0; i < ph; i++)
73 for (j = 0; j < pw; j++)
74 t[i * pw + j].parent = &t2[(i >> 1) * w + (j >> 1)];
75
77 }
80 }
81
83 {
85
86 for (i = 0; i < siz; i++) {
89 }
90 }
91
93
95 {
97
106
107 if (bandno < 3) {
108 if (bandno == 1)
110 if (h == 2) return 8;
111 if (h == 1) {
112 if (v >= 1) return 7;
113 if (d >= 1) return 6;
114 return 5;
115 }
116 if (v == 2) return 4;
117 if (v == 1) return 3;
118 if (d >= 2) return 2;
119 if (d == 1) return 1;
120 } else {
121 if (d >= 3) return 8;
122 if (d == 2) {
123 if (h+v >= 1) return 7;
124 return 6;
125 }
126 if (d == 1) {
127 if (h+v >= 2) return 5;
128 if (h+v == 1) return 4;
129 return 3;
130 }
131 if (h+v >= 2) return 2;
132 if (h+v == 1) return 1;
133 }
134 return 0;
135 }
136
138
139 static const int contribtab[3][3] = { { 0, -1, 1 }, { -1, -1, 0 }, { 1, 0, 1 } };
140 static const int ctxlbltab[3][3] = { { 13, 12, 11 }, { 10, 9, 10 }, { 11, 12, 13 } };
141 static const int xorbittab[3][3] = { { 1, 1, 1 }, { 1, 0, 0 }, { 0, 0, 0 } };
142
144 {
145 int vcontrib, hcontrib;
146
152
154 }
155
157 {
158 int i, j;
159 for (i = 0; i < 256; i++)
160 for (j = 0; j < 4; j++)
162 for (i = 0; i < 16; i++)
163 for (j = 0; j < 16; j++)
166 }
167
169 int negative)
170 {
171 x++;
172 y++;
174 if (negative) {
179 } else {
184 }
189 }
190
192
196 int cbps, int dx, int dy,
198 {
199 uint8_t log2_band_prec_width, log2_band_prec_height;
200 int reslevelno, bandno, gbandno = 0,
ret, i, j;
201 uint32_t csize;
202
206 }
207
212 // component size comp->coord is uint16_t so ir cannot overflow
213 csize = (comp->
coord[0][1] - comp->
coord[0][0]) *
215
218 comp->
f_data = av_malloc_array(csize,
sizeof(*comp->
f_data));
221 } else {
223 comp->
i_data = av_malloc_array(csize,
sizeof(*comp->
i_data));
226 }
230 /* LOOP on resolution levels */
231 for (reslevelno = 0; reslevelno < codsty->
nreslevels; reslevelno++) {
232 int declvl = codsty->
nreslevels - reslevelno;
// N_L -r see ISO/IEC 15444-1:2002 B.5
234
235 /* Compute borders for each resolution level.
236 * Computation of trx_0, trx_1, try_0 and try_1.
237 * see ISO/IEC 15444-1:2002 eq. B.5 and B-14 */
238 for (i = 0; i < 2; i++)
239 for (j = 0; j < 2; j++)
240 reslevel->
coord[i][j] =
242 // update precincts size: 2^n value
245
246 /* Number of bands for each resolution level */
247 if (reslevelno == 0)
249 else
251
252 /* Number of precincts wich span the tile for resolution level reslevelno
253 * see B.6 in ISO/IEC 15444-1:2002 eq. B-16
254 * num_precincts_x = |- trx_1 / 2 ^ log2_prec_width) -| - (trx_0 / 2 ^ log2_prec_width)
255 * num_precincts_y = |- try_1 / 2 ^ log2_prec_width) -| - (try_0 / 2 ^ log2_prec_width)
256 * for Dcinema profiles in JPEG 2000
257 * num_precincts_x = |- trx_1 / 2 ^ log2_prec_width) -|
258 * num_precincts_y = |- try_1 / 2 ^ log2_prec_width) -| */
259 if (reslevel->
coord[0][1] == reslevel->
coord[0][0])
261 else
266
267 if (reslevel->
coord[1][1] == reslevel->
coord[1][0])
269 else
274
275 reslevel->
band = av_malloc_array(reslevel->
nbands,
sizeof(*reslevel->
band));
278
279 for (bandno = 0; bandno < reslevel->
nbands; bandno++, gbandno++) {
281 int cblkno, precno;
282 int nb_precincts;
283
284 /* TODO: Implementation of quantization step not finished,
285 * see ISO/IEC 15444-1:2002 E.1 and A.6.4. */
288 int numbps;
290 /* TODO: to verify. No quantization in this case */
292 break;
294 /*TODO: Compute formula to implement. */
295 numbps = cbps +
298 2 + numbps - qntsty->
expn[gbandno]);
299 break;
301 /* Exponent quantization step.
302 * Formula:
303 * delta_b = 2 ^ (R_b - expn_b) * (1 + (mant_b / 2 ^ 11))
304 * R_b = R_I + log2 (gain_b )
305 * see ISO/IEC 15444-1:2002 E.1.1 eqn. E-3 and E-4 */
306 /* TODO/WARN: value of log2 (gain_b ) not taken into account
307 * but it works (compared to OpenJPEG). Why?
308 * Further investigation needed. */
309 gain = cbps;
312 break;
313 default:
316 break;
317 }
318 /* FIXME: In openjepg code stespize = stepsize * 0.5. Why?
319 * If not set output of entropic decoder is not correct. */
322
324
325 /* computation of tbx_0, tbx_1, tby_0, tby_1
326 * see ISO/IEC 15444-1:2002 B.5 eq. B-15 and tbl B.1
327 * codeblock width and height is computed for
328 * DCI JPEG 2000 codeblock_width = codeblock_width = 32 = 2 ^ 5 */
329 if (reslevelno == 0) {
330 /* for reslevelno = 0, only one band, x0_b = y0_b = 0 */
331 for (i = 0; i < 2; i++)
332 for (j = 0; j < 2; j++)
335 declvl - 1);
338 /* see ISO/IEC 15444-1:2002 eq. B-17 and eq. B-15 */
343 } else {
344 /* 3 bands x0_b = 1 y0_b = 0; x0_b = 0 y0_b = 1; x0_b = y0_b = 1 */
345 /* x0_b and y0_b are computed with ((bandno + 1 >> i) & 1) */
346 for (i = 0; i < 2; i++)
347 for (j = 0; j < 2; j++)
348 /* Formula example for tbx_0 = ceildiv((tcx_0 - 2 ^ (declvl - 1) * x0_b) / declvl) */
351 (((bandno + 1 >> i) & 1) << declvl - 1),
352 declvl);
353 /* TODO: Manage case of 3 band offsets here or
354 * in coding/decoding function? */
355
356 /* see ISO/IEC 15444-1:2002 eq. B-17 and eq. B-15 */
361
364 }
365
366 for (j = 0; j < 2; j++)
368 for (j = 0; j < 2; j++)
370
373 sizeof(*band->
prec));
376
378
379 for (precno = 0; precno < nb_precincts; precno++) {
381
382 /* TODO: Explain formula for JPEG200 DCINEMA. */
383 /* TODO: Verify with previous count of codeblocks per band */
384
385 /* Compute P_x0 */
387 (1 << log2_band_prec_width);
389
390 /* Compute P_y0 */
392 (1 << log2_band_prec_height);
394
395 /* Compute P_x1 */
397 (1 << log2_band_prec_width);
399
400 /* Compute P_y1 */
402 (1 << log2_band_prec_height);
404
413
414 /* Tag trees initialization */
420
426
429 sizeof(*prec->
cblk));
434 uint16_t Cx0, Cy0;
435
436 /* Compute coordinates of codeblocks */
437 /* Compute Cx0*/
441
442 /* Compute Cy0*/
446
447 /* Compute Cx1 */
450
451 /* Compute Cy1 */
454 /* Update code-blocks coordinates according sub-band position */
455 if ((bandno + !!reslevelno) & 1) {
460 }
461 if ((bandno + !!reslevelno) & 2) {
466 }
467
473 }
474 }
475 }
476 }
477 return 0;
478 }
479
481 {
482 int reslevelno, bandno, cblkno, precno;
483 for (reslevelno = 0; reslevelno < codsty->
nreslevels; reslevelno++) {
485 for (bandno = 0; bandno < rlevel->
nbands; bandno++) {
495 }
496 }
497 }
498 }
499 }
500
502 {
503 int reslevelno, bandno, precno;
504 for (reslevelno = 0;
506 reslevelno++) {
508
509 for (bandno = 0; bandno < reslevel->
nbands; bandno++) {
516 }
517
519 }
521 }
522
527 }