Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
1df549bf
Commit
1df549bf
authored
Apr 10, 2016
by
Alexandra Hájková
Committed by
Anton Khirnov
Nov 18, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
hqx: Convert to the new bitstream header
Signed-off-by:
Anton Khirnov
<
anton@khirnov.net
>
parent
c5e01d91
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
35 additions
and
34 deletions
+35
-34
hqx.c
libavcodec/hqx.c
+32
-32
hqx.h
libavcodec/hqx.h
+3
-2
No files found.
libavcodec/hqx.c
View file @
1df549bf
...
@@ -24,8 +24,8 @@
...
@@ -24,8 +24,8 @@
#include "libavutil/intreadwrite.h"
#include "libavutil/intreadwrite.h"
#include "avcodec.h"
#include "avcodec.h"
#include "bitstream.h"
#include "canopus.h"
#include "canopus.h"
#include "get_bits.h"
#include "internal.h"
#include "internal.h"
#include "hqx.h"
#include "hqx.h"
...
@@ -95,23 +95,23 @@ static inline void put_blocks(HQXContext *ctx, int plane,
...
@@ -95,23 +95,23 @@ static inline void put_blocks(HQXContext *ctx, int plane,
lsize
*
fields
,
block1
,
quant
);
lsize
*
fields
,
block1
,
quant
);
}
}
static
inline
void
hqx_get_ac
(
GetBitContext
*
gb
,
const
HQXAC
*
ac
,
static
inline
void
hqx_get_ac
(
BitstreamContext
*
bc
,
const
HQXAC
*
ac
,
int
*
run
,
int
*
lev
)
int
*
run
,
int
*
lev
)
{
{
int
val
;
int
val
;
val
=
show_bits
(
gb
,
ac
->
lut_bits
);
val
=
bitstream_peek
(
bc
,
ac
->
lut_bits
);
if
(
ac
->
lut
[
val
].
bits
==
-
1
)
{
if
(
ac
->
lut
[
val
].
bits
==
-
1
)
{
GetBitContext
gb2
=
*
gb
;
BitstreamContext
bc2
=
*
bc
;
skip_bits
(
&
gb
2
,
ac
->
lut_bits
);
bitstream_skip
(
&
bc
2
,
ac
->
lut_bits
);
val
=
ac
->
lut
[
val
].
lev
+
show_bits
(
&
gb
2
,
ac
->
extra_bits
);
val
=
ac
->
lut
[
val
].
lev
+
bitstream_peek
(
&
bc
2
,
ac
->
extra_bits
);
}
}
*
run
=
ac
->
lut
[
val
].
run
;
*
run
=
ac
->
lut
[
val
].
run
;
*
lev
=
ac
->
lut
[
val
].
lev
;
*
lev
=
ac
->
lut
[
val
].
lev
;
skip_bits
(
gb
,
ac
->
lut
[
val
].
bits
);
bitstream_skip
(
bc
,
ac
->
lut
[
val
].
bits
);
}
}
static
int
decode_block
(
GetBitContext
*
gb
,
VLC
*
vlc
,
static
int
decode_block
(
BitstreamContext
*
bc
,
VLC
*
vlc
,
const
int
*
quants
,
int
dcb
,
const
int
*
quants
,
int
dcb
,
int16_t
block
[
64
],
int
*
last_dc
)
int16_t
block
[
64
],
int
*
last_dc
)
{
{
...
@@ -120,14 +120,14 @@ static int decode_block(GetBitContext *gb, VLC *vlc,
...
@@ -120,14 +120,14 @@ static int decode_block(GetBitContext *gb, VLC *vlc,
int
run
,
lev
,
pos
=
1
;
int
run
,
lev
,
pos
=
1
;
memset
(
block
,
0
,
64
*
sizeof
(
*
block
));
memset
(
block
,
0
,
64
*
sizeof
(
*
block
));
dc
=
get_vlc2
(
gb
,
vlc
->
table
,
HQX_DC_VLC_BITS
,
2
);
dc
=
bitstream_read_vlc
(
bc
,
vlc
->
table
,
HQX_DC_VLC_BITS
,
2
);
if
(
dc
<
0
)
if
(
dc
<
0
)
return
AVERROR_INVALIDDATA
;
return
AVERROR_INVALIDDATA
;
*
last_dc
+=
dc
;
*
last_dc
+=
dc
;
block
[
0
]
=
sign_extend
(
*
last_dc
<<
(
12
-
dcb
),
12
);
block
[
0
]
=
sign_extend
(
*
last_dc
<<
(
12
-
dcb
),
12
);
q
=
quants
[
get_bits
(
gb
,
2
)];
q
=
quants
[
bitstream_read
(
bc
,
2
)];
if
(
q
>=
128
)
if
(
q
>=
128
)
ac_idx
=
HQX_AC_Q128
;
ac_idx
=
HQX_AC_Q128
;
else
if
(
q
>=
64
)
else
if
(
q
>=
64
)
...
@@ -142,7 +142,7 @@ static int decode_block(GetBitContext *gb, VLC *vlc,
...
@@ -142,7 +142,7 @@ static int decode_block(GetBitContext *gb, VLC *vlc,
ac_idx
=
HQX_AC_Q0
;
ac_idx
=
HQX_AC_Q0
;
do
{
do
{
hqx_get_ac
(
gb
,
&
ff_hqx_ac
[
ac_idx
],
&
run
,
&
lev
);
hqx_get_ac
(
bc
,
&
ff_hqx_ac
[
ac_idx
],
&
run
,
&
lev
);
pos
+=
run
;
pos
+=
run
;
if
(
pos
>=
64
)
if
(
pos
>=
64
)
break
;
break
;
...
@@ -155,24 +155,24 @@ static int decode_block(GetBitContext *gb, VLC *vlc,
...
@@ -155,24 +155,24 @@ static int decode_block(GetBitContext *gb, VLC *vlc,
static
int
hqx_decode_422
(
HQXContext
*
ctx
,
int
slice_no
,
int
x
,
int
y
)
static
int
hqx_decode_422
(
HQXContext
*
ctx
,
int
slice_no
,
int
x
,
int
y
)
{
{
HQXSlice
*
slice
=
&
ctx
->
slice
[
slice_no
];
HQXSlice
*
slice
=
&
ctx
->
slice
[
slice_no
];
GetBitContext
*
gb
=
&
slice
->
gb
;
BitstreamContext
*
bc
=
&
slice
->
bc
;
const
int
*
quants
;
const
int
*
quants
;
int
flag
;
int
flag
;
int
last_dc
;
int
last_dc
;
int
i
,
ret
;
int
i
,
ret
;
if
(
ctx
->
interlaced
)
if
(
ctx
->
interlaced
)
flag
=
get_bits1
(
gb
);
flag
=
bitstream_read_bit
(
bc
);
else
else
flag
=
0
;
flag
=
0
;
quants
=
hqx_quants
[
get_bits
(
gb
,
4
)];
quants
=
hqx_quants
[
bitstream_read
(
bc
,
4
)];
for
(
i
=
0
;
i
<
8
;
i
++
)
{
for
(
i
=
0
;
i
<
8
;
i
++
)
{
int
vlc_index
=
ctx
->
dcb
-
9
;
int
vlc_index
=
ctx
->
dcb
-
9
;
if
(
i
==
0
||
i
==
4
||
i
==
6
)
if
(
i
==
0
||
i
==
4
||
i
==
6
)
last_dc
=
0
;
last_dc
=
0
;
ret
=
decode_block
(
gb
,
&
ctx
->
dc_vlc
[
vlc_index
],
quants
,
ret
=
decode_block
(
bc
,
&
ctx
->
dc_vlc
[
vlc_index
],
quants
,
ctx
->
dcb
,
slice
->
block
[
i
],
&
last_dc
);
ctx
->
dcb
,
slice
->
block
[
i
],
&
last_dc
);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
ret
;
return
ret
;
...
@@ -189,14 +189,14 @@ static int hqx_decode_422(HQXContext *ctx, int slice_no, int x, int y)
...
@@ -189,14 +189,14 @@ static int hqx_decode_422(HQXContext *ctx, int slice_no, int x, int y)
static
int
hqx_decode_422a
(
HQXContext
*
ctx
,
int
slice_no
,
int
x
,
int
y
)
static
int
hqx_decode_422a
(
HQXContext
*
ctx
,
int
slice_no
,
int
x
,
int
y
)
{
{
HQXSlice
*
slice
=
&
ctx
->
slice
[
slice_no
];
HQXSlice
*
slice
=
&
ctx
->
slice
[
slice_no
];
GetBitContext
*
gb
=
&
slice
->
gb
;
BitstreamContext
*
bc
=
&
slice
->
bc
;
const
int
*
quants
;
const
int
*
quants
;
int
flag
=
0
;
int
flag
=
0
;
int
last_dc
;
int
last_dc
;
int
i
,
ret
;
int
i
,
ret
;
int
cbp
;
int
cbp
;
cbp
=
get_vlc2
(
gb
,
ctx
->
cbp_vlc
.
table
,
ctx
->
cbp_vlc
.
bits
,
1
);
cbp
=
bitstream_read_vlc
(
bc
,
ctx
->
cbp_vlc
.
table
,
ctx
->
cbp_vlc
.
bits
,
1
);
for
(
i
=
0
;
i
<
12
;
i
++
)
for
(
i
=
0
;
i
<
12
;
i
++
)
memset
(
slice
->
block
[
i
],
0
,
sizeof
(
**
slice
->
block
)
*
64
);
memset
(
slice
->
block
[
i
],
0
,
sizeof
(
**
slice
->
block
)
*
64
);
...
@@ -204,9 +204,9 @@ static int hqx_decode_422a(HQXContext *ctx, int slice_no, int x, int y)
...
@@ -204,9 +204,9 @@ static int hqx_decode_422a(HQXContext *ctx, int slice_no, int x, int y)
slice
->
block
[
i
][
0
]
=
-
0x800
;
slice
->
block
[
i
][
0
]
=
-
0x800
;
if
(
cbp
)
{
if
(
cbp
)
{
if
(
ctx
->
interlaced
)
if
(
ctx
->
interlaced
)
flag
=
get_bits1
(
gb
);
flag
=
bitstream_read_bit
(
bc
);
quants
=
hqx_quants
[
get_bits
(
gb
,
4
)];
quants
=
hqx_quants
[
bitstream_read
(
bc
,
4
)];
cbp
|=
cbp
<<
4
;
// alpha CBP
cbp
|=
cbp
<<
4
;
// alpha CBP
if
(
cbp
&
0x3
)
// chroma CBP - top
if
(
cbp
&
0x3
)
// chroma CBP - top
...
@@ -218,7 +218,7 @@ static int hqx_decode_422a(HQXContext *ctx, int slice_no, int x, int y)
...
@@ -218,7 +218,7 @@ static int hqx_decode_422a(HQXContext *ctx, int slice_no, int x, int y)
last_dc
=
0
;
last_dc
=
0
;
if
(
cbp
&
(
1
<<
i
))
{
if
(
cbp
&
(
1
<<
i
))
{
int
vlc_index
=
ctx
->
dcb
-
9
;
int
vlc_index
=
ctx
->
dcb
-
9
;
ret
=
decode_block
(
gb
,
&
ctx
->
dc_vlc
[
vlc_index
],
quants
,
ret
=
decode_block
(
bc
,
&
ctx
->
dc_vlc
[
vlc_index
],
quants
,
ctx
->
dcb
,
slice
->
block
[
i
],
&
last_dc
);
ctx
->
dcb
,
slice
->
block
[
i
],
&
last_dc
);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
ret
;
return
ret
;
...
@@ -239,24 +239,24 @@ static int hqx_decode_422a(HQXContext *ctx, int slice_no, int x, int y)
...
@@ -239,24 +239,24 @@ static int hqx_decode_422a(HQXContext *ctx, int slice_no, int x, int y)
static
int
hqx_decode_444
(
HQXContext
*
ctx
,
int
slice_no
,
int
x
,
int
y
)
static
int
hqx_decode_444
(
HQXContext
*
ctx
,
int
slice_no
,
int
x
,
int
y
)
{
{
HQXSlice
*
slice
=
&
ctx
->
slice
[
slice_no
];
HQXSlice
*
slice
=
&
ctx
->
slice
[
slice_no
];
GetBitContext
*
gb
=
&
slice
->
gb
;
BitstreamContext
*
bc
=
&
slice
->
bc
;
const
int
*
quants
;
const
int
*
quants
;
int
flag
;
int
flag
;
int
last_dc
;
int
last_dc
;
int
i
,
ret
;
int
i
,
ret
;
if
(
ctx
->
interlaced
)
if
(
ctx
->
interlaced
)
flag
=
get_bits1
(
gb
);
flag
=
bitstream_read_bit
(
bc
);
else
else
flag
=
0
;
flag
=
0
;
quants
=
hqx_quants
[
get_bits
(
gb
,
4
)];
quants
=
hqx_quants
[
bitstream_read
(
bc
,
4
)];
for
(
i
=
0
;
i
<
12
;
i
++
)
{
for
(
i
=
0
;
i
<
12
;
i
++
)
{
int
vlc_index
=
ctx
->
dcb
-
9
;
int
vlc_index
=
ctx
->
dcb
-
9
;
if
(
i
==
0
||
i
==
4
||
i
==
8
)
if
(
i
==
0
||
i
==
4
||
i
==
8
)
last_dc
=
0
;
last_dc
=
0
;
ret
=
decode_block
(
gb
,
&
ctx
->
dc_vlc
[
vlc_index
],
quants
,
ret
=
decode_block
(
bc
,
&
ctx
->
dc_vlc
[
vlc_index
],
quants
,
ctx
->
dcb
,
slice
->
block
[
i
],
&
last_dc
);
ctx
->
dcb
,
slice
->
block
[
i
],
&
last_dc
);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
ret
;
return
ret
;
...
@@ -275,14 +275,14 @@ static int hqx_decode_444(HQXContext *ctx, int slice_no, int x, int y)
...
@@ -275,14 +275,14 @@ static int hqx_decode_444(HQXContext *ctx, int slice_no, int x, int y)
static
int
hqx_decode_444a
(
HQXContext
*
ctx
,
int
slice_no
,
int
x
,
int
y
)
static
int
hqx_decode_444a
(
HQXContext
*
ctx
,
int
slice_no
,
int
x
,
int
y
)
{
{
HQXSlice
*
slice
=
&
ctx
->
slice
[
slice_no
];
HQXSlice
*
slice
=
&
ctx
->
slice
[
slice_no
];
GetBitContext
*
gb
=
&
slice
->
gb
;
BitstreamContext
*
bc
=
&
slice
->
bc
;
const
int
*
quants
;
const
int
*
quants
;
int
flag
=
0
;
int
flag
=
0
;
int
last_dc
;
int
last_dc
;
int
i
,
ret
;
int
i
,
ret
;
int
cbp
;
int
cbp
;
cbp
=
get_vlc2
(
gb
,
ctx
->
cbp_vlc
.
table
,
ctx
->
cbp_vlc
.
bits
,
1
);
cbp
=
bitstream_read_vlc
(
bc
,
ctx
->
cbp_vlc
.
table
,
ctx
->
cbp_vlc
.
bits
,
1
);
for
(
i
=
0
;
i
<
16
;
i
++
)
for
(
i
=
0
;
i
<
16
;
i
++
)
memset
(
slice
->
block
[
i
],
0
,
sizeof
(
**
slice
->
block
)
*
64
);
memset
(
slice
->
block
[
i
],
0
,
sizeof
(
**
slice
->
block
)
*
64
);
...
@@ -290,9 +290,9 @@ static int hqx_decode_444a(HQXContext *ctx, int slice_no, int x, int y)
...
@@ -290,9 +290,9 @@ static int hqx_decode_444a(HQXContext *ctx, int slice_no, int x, int y)
slice
->
block
[
i
][
0
]
=
-
0x800
;
slice
->
block
[
i
][
0
]
=
-
0x800
;
if
(
cbp
)
{
if
(
cbp
)
{
if
(
ctx
->
interlaced
)
if
(
ctx
->
interlaced
)
flag
=
get_bits1
(
gb
);
flag
=
bitstream_read_bit
(
bc
);
quants
=
hqx_quants
[
get_bits
(
gb
,
4
)];
quants
=
hqx_quants
[
bitstream_read
(
bc
,
4
)];
cbp
|=
cbp
<<
4
;
// alpha CBP
cbp
|=
cbp
<<
4
;
// alpha CBP
cbp
|=
cbp
<<
8
;
// chroma CBP
cbp
|=
cbp
<<
8
;
// chroma CBP
...
@@ -301,7 +301,7 @@ static int hqx_decode_444a(HQXContext *ctx, int slice_no, int x, int y)
...
@@ -301,7 +301,7 @@ static int hqx_decode_444a(HQXContext *ctx, int slice_no, int x, int y)
last_dc
=
0
;
last_dc
=
0
;
if
(
cbp
&
(
1
<<
i
))
{
if
(
cbp
&
(
1
<<
i
))
{
int
vlc_index
=
ctx
->
dcb
-
9
;
int
vlc_index
=
ctx
->
dcb
-
9
;
ret
=
decode_block
(
gb
,
&
ctx
->
dc_vlc
[
vlc_index
],
quants
,
ret
=
decode_block
(
bc
,
&
ctx
->
dc_vlc
[
vlc_index
],
quants
,
ctx
->
dcb
,
slice
->
block
[
i
],
&
last_dc
);
ctx
->
dcb
,
slice
->
block
[
i
],
&
last_dc
);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
ret
;
return
ret
;
...
@@ -392,9 +392,9 @@ static int decode_slice_thread(AVCodecContext *avctx, void *arg,
...
@@ -392,9 +392,9 @@ static int decode_slice_thread(AVCodecContext *avctx, void *arg,
return
AVERROR_INVALIDDATA
;
return
AVERROR_INVALIDDATA
;
}
}
ret
=
init_get_bits8
(
&
ctx
->
slice
[
slice_no
].
gb
,
ret
=
bitstream_init8
(
&
ctx
->
slice
[
slice_no
].
bc
,
ctx
->
src
+
slice_off
[
slice_no
],
ctx
->
src
+
slice_off
[
slice_no
],
slice_off
[
slice_no
+
1
]
-
slice_off
[
slice_no
]);
slice_off
[
slice_no
+
1
]
-
slice_off
[
slice_no
]);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
ret
;
return
ret
;
...
...
libavcodec/hqx.h
View file @
1df549bf
...
@@ -25,7 +25,8 @@
...
@@ -25,7 +25,8 @@
#include "libavutil/frame.h"
#include "libavutil/frame.h"
#include "libavutil/mem.h"
#include "libavutil/mem.h"
#include "get_bits.h"
#include "bitstream.h"
#include "hqxdsp.h"
#include "hqxdsp.h"
enum
HQXACMode
{
enum
HQXACMode
{
...
@@ -55,7 +56,7 @@ typedef int (*mb_decode_func)(struct HQXContext *ctx,
...
@@ -55,7 +56,7 @@ typedef int (*mb_decode_func)(struct HQXContext *ctx,
int
slice_no
,
int
x
,
int
y
);
int
slice_no
,
int
x
,
int
y
);
typedef
struct
HQXSlice
{
typedef
struct
HQXSlice
{
GetBitContext
gb
;
BitstreamContext
bc
;
DECLARE_ALIGNED
(
16
,
int16_t
,
block
)[
16
][
64
];
DECLARE_ALIGNED
(
16
,
int16_t
,
block
)[
16
][
64
];
}
HQXSlice
;
}
HQXSlice
;
...
...
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