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