FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
j2k.h
Go to the documentation of this file.
1
/*
2
* JPEG2000 tables
3
* Copyright (c) 2007 Kamil Nowosad
4
*
5
* This file is part of FFmpeg.
6
*
7
* FFmpeg is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2.1 of the License, or (at your option) any later version.
11
*
12
* FFmpeg is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
16
*
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with FFmpeg; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
22
#ifndef AVCODEC_J2K_H
23
#define AVCODEC_J2K_H
24
25
/**
26
* JPEG2000 tables
27
* @file
28
* @author Kamil Nowosad
29
*/
30
31
#include "
mqc.h
"
32
#include "
j2k_dwt.h
"
33
34
enum
J2kMarkers
{
35
J2K_SOC
= 0xff4f,
///< start of codestream
36
J2K_SIZ
= 0xff51,
///< image and tile size
37
J2K_COD
,
///< coding style default
38
J2K_COC
,
///< coding style component
39
J2K_TLM
= 0xff55,
///< packed packet headers, tile-part header
40
J2K_PLM
= 0xff57,
///< tile-part lengths
41
J2K_PLT
,
///< packet length, main header
42
J2K_QCD
= 0xff5c,
///< quantization default
43
J2K_QCC
,
///< quantization component
44
J2K_RGN
,
///< region of interest
45
J2K_POC
,
///< progression order change
46
J2K_PPM
,
///< packet length, tile-part header
47
J2K_PPT
,
///< packed packet headers, main header
48
J2K_CRG
= 0xff63,
///< component registration
49
J2K_COM
,
///< comment
50
J2K_SOT
= 0xff90,
///< start of tile-part
51
J2K_SOP
,
///< start of packet
52
J2K_EPH
,
///< end of packet header
53
J2K_SOD
,
///< start of data
54
J2K_EOC
= 0xffd9,
///< end of codestream
55
};
56
57
enum
J2kQuantsty
{
///< quantization style
58
J2K_QSTY_NONE
,
///< no quantization
59
J2K_QSTY_SI
,
///< scalar derived
60
J2K_QSTY_SE
///< scalar expoounded
61
};
62
63
#define J2K_MAX_CBLKW 64
64
#define J2K_MAX_CBLKH 64
65
66
// T1 flags
67
// flags determining significance of neighbour coefficients
68
#define J2K_T1_SIG_N 0x0001
69
#define J2K_T1_SIG_E 0x0002
70
#define J2K_T1_SIG_W 0x0004
71
#define J2K_T1_SIG_S 0x0008
72
#define J2K_T1_SIG_NE 0x0010
73
#define J2K_T1_SIG_NW 0x0020
74
#define J2K_T1_SIG_SE 0x0040
75
#define J2K_T1_SIG_SW 0x0080
76
#define J2K_T1_SIG_NB (J2K_T1_SIG_N | J2K_T1_SIG_E | J2K_T1_SIG_S | J2K_T1_SIG_W \
77
|J2K_T1_SIG_NE | J2K_T1_SIG_NW | J2K_T1_SIG_SE | J2K_T1_SIG_SW)
78
// flags determining sign bit of neighbour coefficients
79
#define J2K_T1_SGN_N 0x0100
80
#define J2K_T1_SGN_S 0x0200
81
#define J2K_T1_SGN_W 0x0400
82
#define J2K_T1_SGN_E 0x0800
83
84
#define J2K_T1_VIS 0x1000
85
#define J2K_T1_SIG 0x2000
86
#define J2K_T1_REF 0x4000
87
88
#define J2K_T1_SGN 0x8000
89
90
// Codeblock coding styles
91
#define J2K_CBLK_BYPASS 0x01 // Selective arithmetic coding bypass
92
#define J2K_CBLK_RESET 0x02 // Reset context probabilities
93
#define J2K_CBLK_TERMALL 0x04 // Terminate after each coding pass
94
#define J2K_CBLK_VSC 0x08 // Vertical stripe causal context formation
95
#define J2K_CBLK_PREDTERM 0x10 // Predictable termination
96
#define J2K_CBLK_SEGSYM 0x20 // Segmentation symbols present
97
98
// Coding styles
99
#define J2K_CSTY_PREC 0x01 // Precincts defined in coding style
100
#define J2K_CSTY_SOP 0x02 // SOP marker present
101
#define J2K_CSTY_EPH 0x04 // EPH marker present
102
103
typedef
struct
{
104
int
data
[
J2K_MAX_CBLKW
][
J2K_MAX_CBLKH
];
105
int
flags
[
J2K_MAX_CBLKW
+2][
J2K_MAX_CBLKH
+2];
106
MqcState
mqc
;
107
}
J2kT1Context
;
108
109
typedef
struct
J2kTgtNode
{
110
uint8_t
val
;
111
uint8_t
vis
;
112
struct
J2kTgtNode
*
parent
;
113
}
J2kTgtNode
;
114
115
typedef
struct
{
116
uint8_t
nreslevels
;
///< number of resolution levels
117
uint8_t
log2_cblk_width
,
118
log2_cblk_height;
///< exponent of codeblock size
119
uint8_t
transform
;
///< DWT type
120
uint8_t
csty
;
///< coding style
121
uint8_t
log2_prec_width
,
122
log2_prec_height;
///< precinct size
123
uint8_t
nlayers
;
///< number of layers
124
uint8_t
mct
;
///< multiple component transformation
125
uint8_t
cblk_style
;
///< codeblock coding style
126
}
J2kCodingStyle
;
127
128
typedef
struct
{
129
uint8_t
expn[32 * 3];
///< quantization exponent
130
uint16_t mant[32 * 3];
///< quantization mantissa
131
uint8_t
quantsty
;
///< quantization style
132
uint8_t
nguardbits
;
///< number of guard bits
133
}
J2kQuantStyle
;
134
135
typedef
struct
{
136
uint16_t
rate
;
137
int64_t
disto
;
138
}
J2kPass
;
139
140
typedef
struct
{
141
uint8_t
npasses
;
142
uint8_t
ninclpasses
;
///< number coding of passes included in codestream
143
uint8_t
nonzerobits
;
144
uint16_t
length
;
145
uint16_t
lengthinc
;
146
uint8_t
lblock
;
147
uint8_t
zero
;
148
uint8_t
data
[8192];
149
J2kPass
passes[100];
150
}
J2kCblk
;
///< code block
151
152
typedef
struct
{
153
uint16_t xi0, xi1, yi0,
yi1
;
///< codeblock indexes ([xi0, xi1))
154
J2kTgtNode
*
zerobits
;
155
J2kTgtNode
*
cblkincl
;
156
}
J2kPrec
;
///< precinct
157
158
typedef
struct
{
159
uint16_t coord[2][2];
///< border coordinates {{x0, x1}, {y0, y1}}
160
uint16_t
codeblock_width
, codeblock_height;
161
uint16_t cblknx,
cblkny
;
162
uint32_t
stepsize
;
///< quantization stepsize (* 2^13)
163
J2kPrec
*
prec
;
164
J2kCblk
*
cblk
;
165
}
J2kBand
;
///< subband
166
167
typedef
struct
{
168
uint8_t
nbands
;
169
uint16_t coord[2][2];
///< border coordinates {{x0, x1}, {y0, y1}}
170
uint16_t num_precincts_x,
num_precincts_y
;
///< number of precincts in x/y direction
171
uint8_t
log2_prec_width
, log2_prec_height;
///< exponent of precinct size
172
J2kBand
*
band
;
173
}
J2kResLevel
;
///< resolution level
174
175
typedef
struct
{
176
J2kResLevel
*
reslevel
;
177
DWTContext
dwt
;
178
int
*
data
;
179
uint16_t coord[2][2];
///< border coordinates {{x0, x1}, {y0, y1}}
180
}
J2kComponent
;
181
182
/* debug routines */
183
#if 0
184
#undef fprintf
185
#undef printf
186
void
ff_j2k_printv(
int
*
tab
,
int
l);
187
void
ff_j2k_printu(
uint8_t
*
tab
,
int
l);
188
#endif
189
190
/* misc tools */
191
static
inline
int
ff_j2k_ceildivpow2
(
int
a
,
int
b
)
192
{
193
return
(a + (1 << b) - 1)>>
b
;
194
}
195
196
static
inline
int
ff_j2k_ceildiv
(
int
a
,
int
b
)
197
{
198
return
(a + b - 1) /
b
;
199
}
200
201
/* tag tree routines */
202
J2kTgtNode
*
ff_j2k_tag_tree_init
(
int
w,
int
h);
203
204
/* TIER-1 routines */
205
void
ff_j2k_init_tier1_luts
(
void
);
206
207
void
ff_j2k_set_significant
(
J2kT1Context
*
t1
,
int
x,
int
y,
int
negative);
208
209
extern
uint8_t
ff_j2k_nbctxno_lut
[256][4];
210
211
static
inline
int
ff_j2k_getnbctxno
(
int
flag,
int
bandno,
int
vert_causal_ctx_csty_symbol)
212
{
213
return
ff_j2k_nbctxno_lut
[flag&255][bandno];
214
}
215
216
static
inline
int
ff_j2k_getrefctxno
(
int
flag)
217
{
218
static
const
uint8_t
refctxno_lut[2][2] = {{14, 15}, {16, 16}};
219
return
refctxno_lut[(flag>>14)&1][(flag & 255) != 0];
220
}
221
222
extern
uint8_t
ff_j2k_sgnctxno_lut
[16][16],
ff_j2k_xorbit_lut
[16][16];
223
224
static
inline
int
ff_j2k_getsgnctxno
(
int
flag,
int
*xorbit)
225
{
226
*xorbit =
ff_j2k_xorbit_lut
[flag&15][(flag>>8)&15];
227
return
ff_j2k_sgnctxno_lut
[flag&15][(flag>>8)&15];
228
}
229
230
int
ff_j2k_init_component
(
J2kComponent
*
comp
,
J2kCodingStyle
*codsty,
J2kQuantStyle
*qntsty,
int
cbps,
int
dx,
int
dy);
231
void
ff_j2k_reinit
(
J2kComponent
*
comp
,
J2kCodingStyle
*codsty);
232
void
ff_j2k_cleanup
(
J2kComponent
*
comp
,
J2kCodingStyle
*codsty);
233
234
#endif
/* AVCODEC_J2K_H */
Generated on Sat May 25 2013 03:58:35 for FFmpeg by
1.8.2