Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
88e9397e
Commit
88e9397e
authored
May 23, 2011
by
Rukhsana Ruby
Committed by
Michael Niedermayer
May 23, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
j2k[c/h] j2kdec.c: Implement 2 code block styles
parent
cbe60f34
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
33 additions
and
15 deletions
+33
-15
j2k.c
libavcodec/j2k.c
+9
-7
j2k.h
libavcodec/j2k.h
+1
-1
j2kdec.c
libavcodec/j2kdec.c
+23
-7
No files found.
libavcodec/j2k.c
View file @
88e9397e
...
...
@@ -105,18 +105,20 @@ static void tag_tree_zero(J2kTgtNode *t, int w, int h)
uint8_t
ff_j2k_nbctxno_lut
[
256
][
4
];
static
int
getnbctxno
(
int
flag
,
int
bandno
)
static
int
getnbctxno
(
int
flag
,
int
bandno
,
int
vert_causal_ctx_csty_symbol
)
{
int
h
,
v
,
d
;
h
=
((
flag
&
J2K_T1_SIG_E
)
?
1
:
0
)
+
((
flag
&
J2K_T1_SIG_W
)
?
1
:
0
);
v
=
((
flag
&
J2K_T1_SIG_N
)
?
1
:
0
)
+
((
flag
&
J2K_T1_SIG_S
)
?
1
:
0
);
v
=
((
flag
&
J2K_T1_SIG_N
)
?
1
:
0
);
if
(
!
vert_causal_ctx_csty_symbol
)
v
=
v
+
((
flag
&
J2K_T1_SIG_S
)
?
1
:
0
);
d
=
((
flag
&
J2K_T1_SIG_NE
)
?
1
:
0
)
+
((
flag
&
J2K_T1_SIG_NW
)
?
1
:
0
)
+
((
flag
&
J2K_T1_SIG_SE
)
?
1
:
0
)
+
((
flag
&
J2K_T1_SIG_SW
)
?
1
:
0
);
((
flag
&
J2K_T1_SIG_NW
)
?
1
:
0
);
if
(
!
vert_causal_ctx_csty_symbol
)
d
=
d
+
((
flag
&
J2K_T1_SIG_SE
)
?
1
:
0
)
+
((
flag
&
J2K_T1_SIG_SW
)
?
1
:
0
);
if
(
bandno
<
3
){
if
(
bandno
==
1
)
FFSWAP
(
int
,
h
,
v
);
...
...
@@ -171,7 +173,7 @@ void ff_j2k_init_tier1_luts(void)
int
i
,
j
;
for
(
i
=
0
;
i
<
256
;
i
++
)
for
(
j
=
0
;
j
<
4
;
j
++
)
ff_j2k_nbctxno_lut
[
i
][
j
]
=
getnbctxno
(
i
,
j
);
ff_j2k_nbctxno_lut
[
i
][
j
]
=
getnbctxno
(
i
,
j
,
0
);
for
(
i
=
0
;
i
<
16
;
i
++
)
for
(
j
=
0
;
j
<
16
;
j
++
)
ff_j2k_sgnctxno_lut
[
i
][
j
]
=
getsgnctxno
(
i
+
(
j
<<
8
),
&
ff_j2k_xorbit_lut
[
i
][
j
]);
...
...
libavcodec/j2k.h
View file @
88e9397e
...
...
@@ -208,7 +208,7 @@ void ff_j2k_set_significant(J2kT1Context *t1, int x, int y, int negative);
extern
uint8_t
ff_j2k_nbctxno_lut
[
256
][
4
];
static
inline
int
ff_j2k_getnbctxno
(
int
flag
,
int
bandno
)
static
inline
int
ff_j2k_getnbctxno
(
int
flag
,
int
bandno
,
int
vert_causal_ctx_csty_symbol
)
{
return
ff_j2k_nbctxno_lut
[
flag
&
255
][
bandno
];
}
...
...
libavcodec/j2kdec.c
View file @
88e9397e
...
...
@@ -592,7 +592,8 @@ static int decode_packets(J2kDecoderContext *s, J2kTile *tile)
}
/* TIER-1 routines */
static
void
decode_sigpass
(
J2kT1Context
*
t1
,
int
width
,
int
height
,
int
bpno
,
int
bandno
)
static
void
decode_sigpass
(
J2kT1Context
*
t1
,
int
width
,
int
height
,
int
bpno
,
int
bandno
,
int
bpass_csty_symbol
,
int
vert_causal_ctx_csty_symbol
)
{
int
mask
=
3
<<
(
bpno
-
1
),
y0
,
x
,
y
;
...
...
@@ -601,10 +602,15 @@ static void decode_sigpass(J2kT1Context *t1, int width, int height, int bpno, in
for
(
y
=
y0
;
y
<
height
&&
y
<
y0
+
4
;
y
++
){
if
((
t1
->
flags
[
y
+
1
][
x
+
1
]
&
J2K_T1_SIG_NB
)
&&
!
(
t1
->
flags
[
y
+
1
][
x
+
1
]
&
(
J2K_T1_SIG
|
J2K_T1_VIS
))){
if
(
ff_mqc_decode
(
&
t1
->
mqc
,
t1
->
mqc
.
cx_states
+
ff_j2k_getnbctxno
(
t1
->
flags
[
y
+
1
][
x
+
1
],
bandno
))){
int
vert_causal_ctx_csty_loc_symbol
=
vert_causal_ctx_csty_symbol
&&
(
x
==
3
&&
y
==
3
);
if
(
ff_mqc_decode
(
&
t1
->
mqc
,
t1
->
mqc
.
cx_states
+
ff_j2k_getnbctxno
(
t1
->
flags
[
y
+
1
][
x
+
1
],
bandno
,
vert_causal_ctx_csty_loc_symbol
))){
int
xorbit
,
ctxno
=
ff_j2k_getsgnctxno
(
t1
->
flags
[
y
+
1
][
x
+
1
],
&
xorbit
);
t1
->
data
[
y
][
x
]
=
(
ff_mqc_decode
(
&
t1
->
mqc
,
t1
->
mqc
.
cx_states
+
ctxno
)
^
xorbit
)
?
-
mask
:
mask
;
if
(
bpass_csty_symbol
)
t1
->
data
[
y
][
x
]
=
ff_mqc_decode
(
&
t1
->
mqc
,
t1
->
mqc
.
cx_states
+
ctxno
)
?
-
mask
:
mask
;
else
t1
->
data
[
y
][
x
]
=
(
ff_mqc_decode
(
&
t1
->
mqc
,
t1
->
mqc
.
cx_states
+
ctxno
)
^
xorbit
)
?
-
mask
:
mask
;
ff_j2k_set_significant
(
t1
,
x
,
y
,
t1
->
data
[
y
][
x
]
<
0
);
}
...
...
@@ -658,7 +664,8 @@ static void decode_clnpass(J2kDecoderContext *s, J2kT1Context *t1, int width, in
for
(
y
=
y0
+
runlen
;
y
<
y0
+
4
&&
y
<
height
;
y
++
){
if
(
!
dec
){
if
(
!
(
t1
->
flags
[
y
+
1
][
x
+
1
]
&
(
J2K_T1_SIG
|
J2K_T1_VIS
)))
dec
=
ff_mqc_decode
(
&
t1
->
mqc
,
t1
->
mqc
.
cx_states
+
ff_j2k_getnbctxno
(
t1
->
flags
[
y
+
1
][
x
+
1
],
bandno
));
dec
=
ff_mqc_decode
(
&
t1
->
mqc
,
t1
->
mqc
.
cx_states
+
ff_j2k_getnbctxno
(
t1
->
flags
[
y
+
1
][
x
+
1
],
bandno
,
0
));
}
if
(
dec
){
int
xorbit
,
ctxno
=
ff_j2k_getsgnctxno
(
t1
->
flags
[
y
+
1
][
x
+
1
],
&
xorbit
);
...
...
@@ -685,7 +692,7 @@ static void decode_clnpass(J2kDecoderContext *s, J2kT1Context *t1, int width, in
static
int
decode_cblk
(
J2kDecoderContext
*
s
,
J2kCodingStyle
*
codsty
,
J2kT1Context
*
t1
,
J2kCblk
*
cblk
,
int
width
,
int
height
,
int
bandpos
)
{
int
passno
=
cblk
->
npasses
,
pass_t
=
2
,
bpno
=
cblk
->
nonzerobits
-
1
,
y
;
int
passno
=
cblk
->
npasses
,
pass_t
=
2
,
bpno
=
cblk
->
nonzerobits
-
1
,
y
,
clnpass_cnt
=
0
;
for
(
y
=
0
;
y
<
height
+
2
;
y
++
)
memset
(
t1
->
flags
[
y
],
0
,
(
width
+
2
)
*
sizeof
(
int
));
...
...
@@ -697,14 +704,23 @@ static int decode_cblk(J2kDecoderContext *s, J2kCodingStyle *codsty, J2kT1Contex
cblk
->
data
[
cblk
->
length
]
=
0xff
;
cblk
->
data
[
cblk
->
length
+
1
]
=
0xff
;
int
bpass_csty_symbol
=
J2K_CBLK_BYPASS
&
codsty
->
cblk_style
;
int
vert_causal_ctx_csty_symbol
=
J2K_CBLK_VSC
&
codsty
->
cblk_style
;
while
(
passno
--
){
switch
(
pass_t
){
case
0
:
decode_sigpass
(
t1
,
width
,
height
,
bpno
+
1
,
bandpos
);
case
0
:
decode_sigpass
(
t1
,
width
,
height
,
bpno
+
1
,
bandpos
,
bpass_csty_symbol
&&
(
clnpass_cnt
>=
4
),
vert_causal_ctx_csty_symbol
);
break
;
case
1
:
decode_refpass
(
t1
,
width
,
height
,
bpno
+
1
);
if
(
bpass_csty_symbol
&&
clnpass_cnt
>=
4
)
ff_mqc_initdec
(
&
t1
->
mqc
,
cblk
->
data
);
break
;
case
2
:
decode_clnpass
(
s
,
t1
,
width
,
height
,
bpno
+
1
,
bandpos
,
codsty
->
cblk_style
&
J2K_CBLK_SEGSYM
);
clnpass_cnt
=
clnpass_cnt
+
1
;
if
(
bpass_csty_symbol
&&
clnpass_cnt
>=
4
)
ff_mqc_initdec
(
&
t1
->
mqc
,
cblk
->
data
);
break
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment