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
942e84d2
Commit
942e84d2
authored
Apr 09, 2016
by
Alexandra Hájková
Committed by
Anton Khirnov
Nov 18, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cook: Convert to the new bitstream reader
Signed-off-by:
Anton Khirnov
<
anton@khirnov.net
>
parent
e5611466
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
27 additions
and
26 deletions
+27
-26
cook.c
libavcodec/cook.c
+27
-26
No files found.
libavcodec/cook.c
View file @
942e84d2
...
...
@@ -47,7 +47,7 @@
#include "audiodsp.h"
#include "avcodec.h"
#include "
get_bits
.h"
#include "
bitstream
.h"
#include "bytestream.h"
#include "fft.h"
#include "internal.h"
...
...
@@ -124,7 +124,7 @@ typedef struct cook {
AVCodecContext
*
avctx
;
AudioDSPContext
adsp
;
GetBitContext
gb
;
BitstreamContext
bc
;
/* stream data */
int
num_vectors
;
int
samples_per_channel
;
...
...
@@ -325,23 +325,23 @@ static av_cold int cook_decode_close(AVCodecContext *avctx)
/**
* Fill the gain array for the timedomain quantization.
*
* @param
gb pointer to the GetBit
Context
* @param
bc pointer to the Bitstream
Context
* @param gaininfo array[9] of gain indexes
*/
static
void
decode_gain_info
(
GetBitContext
*
gb
,
int
*
gaininfo
)
static
void
decode_gain_info
(
BitstreamContext
*
bc
,
int
*
gaininfo
)
{
int
i
,
n
;
while
(
get_bits1
(
gb
))
{
while
(
bitstream_read_bit
(
bc
))
{
/* NOTHING */
}
n
=
get_bits_count
(
gb
)
-
1
;
// amount of elements*
2 to update
n
=
bitstream_tell
(
bc
)
-
1
;
// amount of elements *
2 to update
i
=
0
;
while
(
n
--
)
{
int
index
=
get_bits
(
gb
,
3
);
int
gain
=
get_bits1
(
gb
)
?
get_bits
(
gb
,
4
)
-
7
:
-
1
;
int
index
=
bitstream_read
(
bc
,
3
);
int
gain
=
bitstream_read_bit
(
bc
)
?
bitstream_read
(
bc
,
4
)
-
7
:
-
1
;
while
(
i
<=
index
)
gaininfo
[
i
++
]
=
gain
;
...
...
@@ -361,7 +361,7 @@ static int decode_envelope(COOKContext *q, COOKSubpacket *p,
{
int
i
,
j
,
vlc_index
;
quant_index_table
[
0
]
=
get_bits
(
&
q
->
gb
,
6
)
-
6
;
// This is used later in categorize
quant_index_table
[
0
]
=
bitstream_read
(
&
q
->
bc
,
6
)
-
6
;
// This is used later in categorize
for
(
i
=
1
;
i
<
p
->
total_subbands
;
i
++
)
{
vlc_index
=
i
;
...
...
@@ -375,8 +375,8 @@ static int decode_envelope(COOKContext *q, COOKSubpacket *p,
if
(
vlc_index
>
13
)
vlc_index
=
13
;
// the VLC tables >13 are identical to No. 13
j
=
get_vlc2
(
&
q
->
gb
,
q
->
envelope_quant_index
[
vlc_index
-
1
].
table
,
q
->
envelope_quant_index
[
vlc_index
-
1
].
bits
,
2
);
j
=
bitstream_read_vlc
(
&
q
->
bc
,
q
->
envelope_quant_index
[
vlc_index
-
1
].
table
,
q
->
envelope_quant_index
[
vlc_index
-
1
].
bits
,
2
);
quant_index_table
[
i
]
=
quant_index_table
[
i
-
1
]
+
j
-
12
;
// differential encoding
if
(
quant_index_table
[
i
]
>
63
||
quant_index_table
[
i
]
<
-
63
)
{
av_log
(
q
->
avctx
,
AV_LOG_ERROR
,
...
...
@@ -408,7 +408,7 @@ static void categorize(COOKContext *q, COOKSubpacket *p, int *quant_index_table,
int
tmp_categorize_array1_idx
=
p
->
numvector_size
;
int
tmp_categorize_array2_idx
=
p
->
numvector_size
;
bits_left
=
p
->
bits_per_subpacket
-
get_bits_count
(
&
q
->
gb
);
bits_left
=
p
->
bits_per_subpacket
-
bitstream_tell
(
&
q
->
bc
);
if
(
bits_left
>
q
->
samples_per_channel
)
bits_left
=
q
->
samples_per_channel
+
...
...
@@ -554,8 +554,8 @@ static int unpack_SQVH(COOKContext *q, COOKSubpacket *p, int category,
vd
=
vd_tab
[
category
];
result
=
0
;
for
(
i
=
0
;
i
<
vpr_tab
[
category
];
i
++
)
{
vlc
=
get_vlc2
(
&
q
->
gb
,
q
->
sqvh
[
category
].
table
,
q
->
sqvh
[
category
].
bits
,
3
);
if
(
p
->
bits_per_subpacket
<
get_bits_count
(
&
q
->
gb
))
{
vlc
=
bitstream_read_vlc
(
&
q
->
bc
,
q
->
sqvh
[
category
].
table
,
q
->
sqvh
[
category
].
bits
,
3
);
if
(
p
->
bits_per_subpacket
<
bitstream_tell
(
&
q
->
bc
))
{
vlc
=
0
;
result
=
1
;
}
...
...
@@ -566,8 +566,8 @@ static int unpack_SQVH(COOKContext *q, COOKSubpacket *p, int category,
}
for
(
j
=
0
;
j
<
vd
;
j
++
)
{
if
(
subband_coef_index
[
i
*
vd
+
j
])
{
if
(
get_bits_count
(
&
q
->
gb
)
<
p
->
bits_per_subpacket
)
{
subband_coef_sign
[
i
*
vd
+
j
]
=
get_bits1
(
&
q
->
gb
);
if
(
bitstream_tell
(
&
q
->
bc
)
<
p
->
bits_per_subpacket
)
{
subband_coef_sign
[
i
*
vd
+
j
]
=
bitstream_read_bit
(
&
q
->
bc
);
}
else
{
result
=
1
;
subband_coef_sign
[
i
*
vd
+
j
]
=
0
;
...
...
@@ -634,7 +634,7 @@ static int mono_decode(COOKContext *q, COOKSubpacket *p, float *mlt_buffer)
if
((
res
=
decode_envelope
(
q
,
p
,
quant_index_table
))
<
0
)
return
res
;
q
->
num_vectors
=
get_bits
(
&
q
->
gb
,
p
->
log2_numvector_size
);
q
->
num_vectors
=
bitstream_read
(
&
q
->
bc
,
p
->
log2_numvector_size
);
categorize
(
q
,
p
,
quant_index_table
,
category
,
category_index
);
expand_category
(
q
,
category
,
category_index
);
decode_vectors
(
q
,
p
,
category
,
quant_index_table
,
mlt_buffer
);
...
...
@@ -739,7 +739,7 @@ static void imlt_gain(COOKContext *q, float *inbuffer,
static
void
decouple_info
(
COOKContext
*
q
,
COOKSubpacket
*
p
,
int
*
decouple_tab
)
{
int
i
;
int
vlc
=
get_bits1
(
&
q
->
gb
);
int
vlc
=
bitstream_read_bit
(
&
q
->
bc
);
int
start
=
cplband
[
p
->
js_subband_start
];
int
end
=
cplband
[
p
->
subbands
-
1
];
int
length
=
end
-
start
+
1
;
...
...
@@ -749,12 +749,13 @@ static void decouple_info(COOKContext *q, COOKSubpacket *p, int *decouple_tab)
if
(
vlc
)
for
(
i
=
0
;
i
<
length
;
i
++
)
decouple_tab
[
start
+
i
]
=
get_vlc2
(
&
q
->
gb
,
p
->
channel_coupling
.
table
,
p
->
channel_coupling
.
bits
,
2
);
decouple_tab
[
start
+
i
]
=
bitstream_read_vlc
(
&
q
->
bc
,
p
->
channel_coupling
.
table
,
p
->
channel_coupling
.
bits
,
2
);
else
for
(
i
=
0
;
i
<
length
;
i
++
)
decouple_tab
[
start
+
i
]
=
get_bits
(
&
q
->
gb
,
p
->
js_vlc_bits
);
decouple_tab
[
start
+
i
]
=
bitstream_read
(
&
q
->
bc
,
p
->
js_vlc_bits
);
}
/*
...
...
@@ -850,9 +851,9 @@ static inline void decode_bytes_and_gain(COOKContext *q, COOKSubpacket *p,
offset
=
decode_bytes
(
inbuffer
,
q
->
decoded_bytes_buffer
,
p
->
bits_per_subpacket
/
8
);
init_get_bits
(
&
q
->
gb
,
q
->
decoded_bytes_buffer
+
offset
,
p
->
bits_per_subpacket
);
decode_gain_info
(
&
q
->
gb
,
gains_ptr
->
now
);
bitstream_init
(
&
q
->
bc
,
q
->
decoded_bytes_buffer
+
offset
,
p
->
bits_per_subpacket
);
decode_gain_info
(
&
q
->
bc
,
gains_ptr
->
now
);
/* Swap current and previous gains */
FFSWAP
(
int
*
,
gains_ptr
->
now
,
gains_ptr
->
previous
);
...
...
@@ -994,7 +995,7 @@ static int cook_decode_frame(AVCodecContext *avctx, void *data,
offset
+=
q
->
subpacket
[
i
].
size
;
chidx
+=
q
->
subpacket
[
i
].
num_channels
;
av_log
(
avctx
,
AV_LOG_DEBUG
,
"subpacket[%i] %i %i
\n
"
,
i
,
q
->
subpacket
[
i
].
size
*
8
,
get_bits_count
(
&
q
->
gb
));
i
,
q
->
subpacket
[
i
].
size
*
8
,
bitstream_tell
(
&
q
->
bc
));
}
/* Discard the first two frames: no valid audio. */
...
...
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