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
2b94ed12
Commit
2b94ed12
authored
Mar 22, 2016
by
Alexandra Hájková
Committed by
Diego Biurrun
Jan 31, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
shorten: Convert to the new bitstream reader
parent
5a6da49d
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
25 additions
and
24 deletions
+25
-24
shorten.c
libavcodec/shorten.c
+25
-24
No files found.
libavcodec/shorten.c
View file @
2b94ed12
...
...
@@ -26,10 +26,11 @@
*/
#include <limits.h>
#include "avcodec.h"
#include "bitstream.h"
#include "bytestream.h"
#include "get_bits.h"
#include "golomb_legacy.h"
#include "golomb.h"
#include "internal.h"
#define MAX_CHANNELS 8
...
...
@@ -79,7 +80,7 @@ static const uint8_t is_audio_command[10] = { 1, 1, 1, 1, 0, 0, 0, 1, 1, 0 };
typedef
struct
ShortenContext
{
AVCodecContext
*
avctx
;
GetBitContext
gb
;
BitstreamContext
bc
;
int
min_framesize
,
max_framesize
;
unsigned
channels
;
...
...
@@ -154,8 +155,8 @@ static int allocate_buffers(ShortenContext *s)
static
inline
unsigned
int
get_uint
(
ShortenContext
*
s
,
int
k
)
{
if
(
s
->
version
!=
0
)
k
=
get_ur_golomb_shorten
(
&
s
->
gb
,
ULONGSIZE
);
return
get_ur_golomb_shorten
(
&
s
->
gb
,
k
);
k
=
get_ur_golomb_shorten
(
&
s
->
bc
,
ULONGSIZE
);
return
get_ur_golomb_shorten
(
&
s
->
bc
,
k
);
}
static
void
fix_bitshift
(
ShortenContext
*
s
,
int32_t
*
buffer
)
...
...
@@ -280,7 +281,7 @@ static int decode_subframe_lpc(ShortenContext *s, int command, int channel,
if
(
command
==
FN_QLPC
)
{
/* read/validate prediction order */
pred_order
=
get_ur_golomb_shorten
(
&
s
->
gb
,
LPCQSIZE
);
pred_order
=
get_ur_golomb_shorten
(
&
s
->
bc
,
LPCQSIZE
);
if
(
pred_order
>
s
->
nwrap
)
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"invalid pred_order %d
\n
"
,
pred_order
);
...
...
@@ -288,7 +289,7 @@ static int decode_subframe_lpc(ShortenContext *s, int command, int channel,
}
/* read LPC coefficients */
for
(
i
=
0
;
i
<
pred_order
;
i
++
)
s
->
coeffs
[
i
]
=
get_sr_golomb_shorten
(
&
s
->
gb
,
LPCQUANT
);
s
->
coeffs
[
i
]
=
get_sr_golomb_shorten
(
&
s
->
bc
,
LPCQUANT
);
coeffs
=
s
->
coeffs
;
qshift
=
LPCQUANT
;
...
...
@@ -315,7 +316,7 @@ static int decode_subframe_lpc(ShortenContext *s, int command, int channel,
sum
=
init_sum
;
for
(
j
=
0
;
j
<
pred_order
;
j
++
)
sum
+=
coeffs
[
j
]
*
s
->
decoded
[
channel
][
i
-
j
-
1
];
s
->
decoded
[
channel
][
i
]
=
get_sr_golomb_shorten
(
&
s
->
gb
,
residual_size
)
+
s
->
decoded
[
channel
][
i
]
=
get_sr_golomb_shorten
(
&
s
->
bc
,
residual_size
)
+
(
sum
>>
qshift
);
}
...
...
@@ -332,7 +333,7 @@ static int read_header(ShortenContext *s)
int
i
,
ret
;
int
maxnlpc
=
0
;
/* shorten signature */
if
(
get_bits_long
(
&
s
->
gb
,
32
)
!=
AV_RB32
(
"ajkg"
))
{
if
(
bitstream_read
(
&
s
->
bc
,
32
)
!=
AV_RB32
(
"ajkg"
))
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"missing shorten magic 'ajkg'
\n
"
);
return
AVERROR_INVALIDDATA
;
}
...
...
@@ -340,7 +341,7 @@ static int read_header(ShortenContext *s)
s
->
lpcqoffset
=
0
;
s
->
blocksize
=
DEFAULT_BLOCK_SIZE
;
s
->
nmean
=
-
1
;
s
->
version
=
get_bits
(
&
s
->
gb
,
8
);
s
->
version
=
bitstream_read
(
&
s
->
bc
,
8
);
s
->
internal_ftype
=
get_uint
(
s
,
TYPESIZE
);
s
->
channels
=
get_uint
(
s
,
CHANSIZE
);
...
...
@@ -374,7 +375,7 @@ static int read_header(ShortenContext *s)
skip_bytes
=
get_uint
(
s
,
NSKIPSIZE
);
for
(
i
=
0
;
i
<
skip_bytes
;
i
++
)
skip_bits
(
&
s
->
gb
,
8
);
bitstream_skip
(
&
s
->
bc
,
8
);
}
s
->
nwrap
=
FFMAX
(
NWRAP
,
maxnlpc
);
...
...
@@ -387,13 +388,13 @@ static int read_header(ShortenContext *s)
if
(
s
->
version
>
1
)
s
->
lpcqoffset
=
V2LPCQOFFSET
;
if
(
get_ur_golomb_shorten
(
&
s
->
gb
,
FNSIZE
)
!=
FN_VERBATIM
)
{
if
(
get_ur_golomb_shorten
(
&
s
->
bc
,
FNSIZE
)
!=
FN_VERBATIM
)
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"missing verbatim section at beginning of stream
\n
"
);
return
AVERROR_INVALIDDATA
;
}
s
->
header_size
=
get_ur_golomb_shorten
(
&
s
->
gb
,
VERBATIM_CKSIZE_SIZE
);
s
->
header_size
=
get_ur_golomb_shorten
(
&
s
->
bc
,
VERBATIM_CKSIZE_SIZE
);
if
(
s
->
header_size
>=
OUT_BUFFER_SIZE
||
s
->
header_size
<
CANONICAL_HEADER_SIZE
)
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"header is wrong size: %d
\n
"
,
...
...
@@ -402,7 +403,7 @@ static int read_header(ShortenContext *s)
}
for
(
i
=
0
;
i
<
s
->
header_size
;
i
++
)
s
->
header
[
i
]
=
(
char
)
get_ur_golomb_shorten
(
&
s
->
gb
,
VERBATIM_BYTE_SIZE
);
s
->
header
[
i
]
=
(
char
)
get_ur_golomb_shorten
(
&
s
->
bc
,
VERBATIM_BYTE_SIZE
);
if
((
ret
=
decode_wave_header
(
s
->
avctx
,
s
->
header
,
s
->
header_size
))
<
0
)
return
ret
;
...
...
@@ -464,8 +465,8 @@ static int shorten_decode_frame(AVCodecContext *avctx, void *data,
}
}
/* init and position bitstream reader */
init_get_bits
(
&
s
->
gb
,
buf
,
buf_size
*
8
);
skip_bits
(
&
s
->
gb
,
s
->
bitindex
);
bitstream_init8
(
&
s
->
bc
,
buf
,
buf_size
);
bitstream_skip
(
&
s
->
bc
,
s
->
bitindex
);
/* process header or next subblock */
if
(
!
s
->
got_header
)
{
...
...
@@ -486,12 +487,12 @@ static int shorten_decode_frame(AVCodecContext *avctx, void *data,
unsigned
cmd
;
int
len
;
if
(
get_bits_left
(
&
s
->
gb
)
<
3
+
FNSIZE
)
{
if
(
bitstream_bits_left
(
&
s
->
bc
)
<
3
+
FNSIZE
)
{
*
got_frame_ptr
=
0
;
break
;
}
cmd
=
get_ur_golomb_shorten
(
&
s
->
gb
,
FNSIZE
);
cmd
=
get_ur_golomb_shorten
(
&
s
->
bc
,
FNSIZE
);
if
(
cmd
>
FN_VERBATIM
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"unknown shorten function %d
\n
"
,
cmd
);
...
...
@@ -503,12 +504,12 @@ static int shorten_decode_frame(AVCodecContext *avctx, void *data,
/* process non-audio command */
switch
(
cmd
)
{
case
FN_VERBATIM
:
len
=
get_ur_golomb_shorten
(
&
s
->
gb
,
VERBATIM_CKSIZE_SIZE
);
len
=
get_ur_golomb_shorten
(
&
s
->
bc
,
VERBATIM_CKSIZE_SIZE
);
while
(
len
--
)
get_ur_golomb_shorten
(
&
s
->
gb
,
VERBATIM_BYTE_SIZE
);
get_ur_golomb_shorten
(
&
s
->
bc
,
VERBATIM_BYTE_SIZE
);
break
;
case
FN_BITSHIFT
:
s
->
bitshift
=
get_ur_golomb_shorten
(
&
s
->
gb
,
BITSHIFTSIZE
);
s
->
bitshift
=
get_ur_golomb_shorten
(
&
s
->
bc
,
BITSHIFTSIZE
);
if
(
s
->
bitshift
<
0
)
return
AVERROR_INVALIDDATA
;
break
;
...
...
@@ -543,7 +544,7 @@ static int shorten_decode_frame(AVCodecContext *avctx, void *data,
/* get Rice code for residual decoding */
if
(
cmd
!=
FN_ZERO
)
{
residual_size
=
get_ur_golomb_shorten
(
&
s
->
gb
,
ENERGYSIZE
);
residual_size
=
get_ur_golomb_shorten
(
&
s
->
bc
,
ENERGYSIZE
);
/* This is a hack as version 0 differed in the definition
* of get_sr_golomb_shorten(). */
if
(
s
->
version
==
0
)
...
...
@@ -616,8 +617,8 @@ static int shorten_decode_frame(AVCodecContext *avctx, void *data,
*
got_frame_ptr
=
0
;
finish_frame:
s
->
bitindex
=
get_bits_count
(
&
s
->
gb
)
-
8
*
(
get_bits_count
(
&
s
->
gb
)
/
8
);
i
=
get_bits_count
(
&
s
->
gb
)
/
8
;
s
->
bitindex
=
bitstream_tell
(
&
s
->
bc
)
-
8
*
(
bitstream_tell
(
&
s
->
bc
)
/
8
);
i
=
bitstream_tell
(
&
s
->
bc
)
/
8
;
if
(
i
>
buf_size
)
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"overread: %d
\n
"
,
i
-
buf_size
);
s
->
bitstream_size
=
0
;
...
...
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