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
6668bc80
Commit
6668bc80
authored
Apr 18, 2016
by
Alexandra Hájková
Committed by
Diego Biurrun
Jan 25, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mpc: Convert to the new bitstream reader
parent
b83aea73
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
94 additions
and
88 deletions
+94
-88
mpc7.c
libavcodec/mpc7.c
+39
-34
mpc8.c
libavcodec/mpc8.c
+42
-41
mpc8.c
libavformat/mpc8.c
+13
-13
No files found.
libavcodec/mpc7.c
View file @
6668bc80
...
@@ -28,8 +28,9 @@
...
@@ -28,8 +28,9 @@
#include "libavutil/channel_layout.h"
#include "libavutil/channel_layout.h"
#include "libavutil/internal.h"
#include "libavutil/internal.h"
#include "libavutil/lfg.h"
#include "libavutil/lfg.h"
#include "avcodec.h"
#include "avcodec.h"
#include "
get_bits
.h"
#include "
bitstream
.h"
#include "internal.h"
#include "internal.h"
#include "mpegaudiodsp.h"
#include "mpegaudiodsp.h"
...
@@ -53,7 +54,7 @@ static av_cold int mpc7_decode_init(AVCodecContext * avctx)
...
@@ -53,7 +54,7 @@ static av_cold int mpc7_decode_init(AVCodecContext * avctx)
{
{
int
i
,
j
;
int
i
,
j
;
MPCContext
*
c
=
avctx
->
priv_data
;
MPCContext
*
c
=
avctx
->
priv_data
;
GetBitContext
gb
;
BitstreamContext
bc
;
LOCAL_ALIGNED_16
(
uint8_t
,
buf
,
[
16
]);
LOCAL_ALIGNED_16
(
uint8_t
,
buf
,
[
16
]);
static
int
vlc_initialized
=
0
;
static
int
vlc_initialized
=
0
;
...
@@ -78,18 +79,18 @@ static av_cold int mpc7_decode_init(AVCodecContext * avctx)
...
@@ -78,18 +79,18 @@ static av_cold int mpc7_decode_init(AVCodecContext * avctx)
ff_mpadsp_init
(
&
c
->
mpadsp
);
ff_mpadsp_init
(
&
c
->
mpadsp
);
c
->
bdsp
.
bswap_buf
((
uint32_t
*
)
buf
,
(
const
uint32_t
*
)
avctx
->
extradata
,
4
);
c
->
bdsp
.
bswap_buf
((
uint32_t
*
)
buf
,
(
const
uint32_t
*
)
avctx
->
extradata
,
4
);
ff_mpc_init
();
ff_mpc_init
();
init_get_bits
(
&
gb
,
buf
,
128
);
bitstream_init
(
&
bc
,
buf
,
128
);
c
->
IS
=
get_bits1
(
&
gb
);
c
->
IS
=
bitstream_read_bit
(
&
bc
);
c
->
MSS
=
get_bits1
(
&
gb
);
c
->
MSS
=
bitstream_read_bit
(
&
bc
);
c
->
maxbands
=
get_bits
(
&
gb
,
6
);
c
->
maxbands
=
bitstream_read
(
&
bc
,
6
);
if
(
c
->
maxbands
>=
BANDS
){
if
(
c
->
maxbands
>=
BANDS
){
av_log
(
avctx
,
AV_LOG_ERROR
,
"Too many bands: %i
\n
"
,
c
->
maxbands
);
av_log
(
avctx
,
AV_LOG_ERROR
,
"Too many bands: %i
\n
"
,
c
->
maxbands
);
return
-
1
;
return
-
1
;
}
}
skip_bits_long
(
&
gb
,
88
);
bitstream_skip
(
&
bc
,
88
);
c
->
gapless
=
get_bits1
(
&
gb
);
c
->
gapless
=
bitstream_read_bit
(
&
bc
);
c
->
lastframelen
=
get_bits
(
&
gb
,
11
);
c
->
lastframelen
=
bitstream_read
(
&
bc
,
11
);
av_log
(
avctx
,
AV_LOG_DEBUG
,
"IS: %d, MSS: %d, TG: %d, LFL: %d, bands: %d
\n
"
,
av_log
(
avctx
,
AV_LOG_DEBUG
,
"IS: %d, MSS: %d, TG: %d, LFL: %d, bands: %d
\n
"
,
c
->
IS
,
c
->
MSS
,
c
->
gapless
,
c
->
lastframelen
,
c
->
maxbands
);
c
->
IS
,
c
->
MSS
,
c
->
gapless
,
c
->
lastframelen
,
c
->
maxbands
);
c
->
frames_to_skip
=
0
;
c
->
frames_to_skip
=
0
;
...
@@ -143,7 +144,7 @@ static av_cold int mpc7_decode_init(AVCodecContext * avctx)
...
@@ -143,7 +144,7 @@ static av_cold int mpc7_decode_init(AVCodecContext * avctx)
/**
/**
* Fill samples for given subband
* Fill samples for given subband
*/
*/
static
inline
void
idx_to_quant
(
MPCContext
*
c
,
GetBitContext
*
gb
,
int
idx
,
int
*
dst
)
static
inline
void
idx_to_quant
(
MPCContext
*
c
,
BitstreamContext
*
bc
,
int
idx
,
int
*
dst
)
{
{
int
i
,
i1
,
t
;
int
i
,
i1
,
t
;
switch
(
idx
){
switch
(
idx
){
...
@@ -153,43 +154,43 @@ static inline void idx_to_quant(MPCContext *c, GetBitContext *gb, int idx, int *
...
@@ -153,43 +154,43 @@ static inline void idx_to_quant(MPCContext *c, GetBitContext *gb, int idx, int *
}
}
break
;
break
;
case
1
:
case
1
:
i1
=
get_bits1
(
gb
);
i1
=
bitstream_read_bit
(
bc
);
for
(
i
=
0
;
i
<
SAMPLES_PER_BAND
/
3
;
i
++
){
for
(
i
=
0
;
i
<
SAMPLES_PER_BAND
/
3
;
i
++
){
t
=
get_vlc2
(
gb
,
quant_vlc
[
0
][
i1
].
table
,
9
,
2
);
t
=
bitstream_read_vlc
(
bc
,
quant_vlc
[
0
][
i1
].
table
,
9
,
2
);
*
dst
++
=
mpc7_idx30
[
t
];
*
dst
++
=
mpc7_idx30
[
t
];
*
dst
++
=
mpc7_idx31
[
t
];
*
dst
++
=
mpc7_idx31
[
t
];
*
dst
++
=
mpc7_idx32
[
t
];
*
dst
++
=
mpc7_idx32
[
t
];
}
}
break
;
break
;
case
2
:
case
2
:
i1
=
get_bits1
(
gb
);
i1
=
bitstream_read_bit
(
bc
);
for
(
i
=
0
;
i
<
SAMPLES_PER_BAND
/
2
;
i
++
){
for
(
i
=
0
;
i
<
SAMPLES_PER_BAND
/
2
;
i
++
){
t
=
get_vlc2
(
gb
,
quant_vlc
[
1
][
i1
].
table
,
9
,
2
);
t
=
bitstream_read_vlc
(
bc
,
quant_vlc
[
1
][
i1
].
table
,
9
,
2
);
*
dst
++
=
mpc7_idx50
[
t
];
*
dst
++
=
mpc7_idx50
[
t
];
*
dst
++
=
mpc7_idx51
[
t
];
*
dst
++
=
mpc7_idx51
[
t
];
}
}
break
;
break
;
case
3
:
case
4
:
case
5
:
case
6
:
case
7
:
case
3
:
case
4
:
case
5
:
case
6
:
case
7
:
i1
=
get_bits1
(
gb
);
i1
=
bitstream_read_bit
(
bc
);
for
(
i
=
0
;
i
<
SAMPLES_PER_BAND
;
i
++
)
for
(
i
=
0
;
i
<
SAMPLES_PER_BAND
;
i
++
)
*
dst
++
=
get_vlc2
(
gb
,
quant_vlc
[
idx
-
1
][
i1
].
table
,
9
,
2
)
-
mpc7_quant_vlc_off
[
idx
-
1
];
*
dst
++
=
bitstream_read_vlc
(
bc
,
quant_vlc
[
idx
-
1
][
i1
].
table
,
9
,
2
)
-
mpc7_quant_vlc_off
[
idx
-
1
];
break
;
break
;
case
8
:
case
9
:
case
10
:
case
11
:
case
12
:
case
8
:
case
9
:
case
10
:
case
11
:
case
12
:
case
13
:
case
14
:
case
15
:
case
16
:
case
17
:
case
13
:
case
14
:
case
15
:
case
16
:
case
17
:
t
=
(
1
<<
(
idx
-
2
))
-
1
;
t
=
(
1
<<
(
idx
-
2
))
-
1
;
for
(
i
=
0
;
i
<
SAMPLES_PER_BAND
;
i
++
)
for
(
i
=
0
;
i
<
SAMPLES_PER_BAND
;
i
++
)
*
dst
++
=
get_bits
(
gb
,
idx
-
1
)
-
t
;
*
dst
++
=
bitstream_read
(
bc
,
idx
-
1
)
-
t
;
break
;
break
;
default:
// case 0 and -2..-17
default:
// case 0 and -2..-17
return
;
return
;
}
}
}
}
static
int
get_scale_idx
(
GetBitContext
*
gb
,
int
ref
)
static
int
get_scale_idx
(
BitstreamContext
*
bc
,
int
ref
)
{
{
int
t
=
get_vlc2
(
gb
,
dscf_vlc
.
table
,
MPC7_DSCF_BITS
,
1
)
-
7
;
int
t
=
bitstream_read_vlc
(
bc
,
dscf_vlc
.
table
,
MPC7_DSCF_BITS
,
1
)
-
7
;
if
(
t
==
8
)
if
(
t
==
8
)
return
get_bits
(
gb
,
6
);
return
bitstream_read
(
bc
,
6
);
return
av_clip_uintp2
(
ref
+
t
,
7
);
return
av_clip_uintp2
(
ref
+
t
,
7
);
}
}
...
@@ -200,7 +201,7 @@ static int mpc7_decode_frame(AVCodecContext * avctx, void *data,
...
@@ -200,7 +201,7 @@ static int mpc7_decode_frame(AVCodecContext * avctx, void *data,
const
uint8_t
*
buf
=
avpkt
->
data
;
const
uint8_t
*
buf
=
avpkt
->
data
;
int
buf_size
;
int
buf_size
;
MPCContext
*
c
=
avctx
->
priv_data
;
MPCContext
*
c
=
avctx
->
priv_data
;
GetBitContext
gb
;
BitstreamContext
bc
;
int
i
,
ch
;
int
i
,
ch
;
int
mb
=
-
1
;
int
mb
=
-
1
;
Band
*
bands
=
c
->
bands
;
Band
*
bands
=
c
->
bands
;
...
@@ -237,45 +238,49 @@ static int mpc7_decode_frame(AVCodecContext * avctx, void *data,
...
@@ -237,45 +238,49 @@ static int mpc7_decode_frame(AVCodecContext * avctx, void *data,
return
AVERROR
(
ENOMEM
);
return
AVERROR
(
ENOMEM
);
c
->
bdsp
.
bswap_buf
((
uint32_t
*
)
c
->
bits
,
(
const
uint32_t
*
)
buf
,
c
->
bdsp
.
bswap_buf
((
uint32_t
*
)
c
->
bits
,
(
const
uint32_t
*
)
buf
,
buf_size
>>
2
);
buf_size
>>
2
);
init_get_bits
(
&
gb
,
c
->
bits
,
buf_size
*
8
);
bitstream_init
(
&
bc
,
c
->
bits
,
buf_size
*
8
);
skip_bits_long
(
&
gb
,
skip
);
bitstream_skip
(
&
bc
,
skip
);
/* read subband indexes */
/* read subband indexes */
for
(
i
=
0
;
i
<=
c
->
maxbands
;
i
++
){
for
(
i
=
0
;
i
<=
c
->
maxbands
;
i
++
){
for
(
ch
=
0
;
ch
<
2
;
ch
++
){
for
(
ch
=
0
;
ch
<
2
;
ch
++
){
int
t
=
4
;
int
t
=
4
;
if
(
i
)
t
=
get_vlc2
(
&
gb
,
hdr_vlc
.
table
,
MPC7_HDR_BITS
,
1
)
-
5
;
if
(
i
)
if
(
t
==
4
)
bands
[
i
].
res
[
ch
]
=
get_bits
(
&
gb
,
4
);
t
=
bitstream_read_vlc
(
&
bc
,
hdr_vlc
.
table
,
MPC7_HDR_BITS
,
1
)
-
5
;
if
(
t
==
4
)
bands
[
i
].
res
[
ch
]
=
bitstream_read
(
&
bc
,
4
);
else
bands
[
i
].
res
[
ch
]
=
av_clip
(
bands
[
i
-
1
].
res
[
ch
]
+
t
,
0
,
17
);
else
bands
[
i
].
res
[
ch
]
=
av_clip
(
bands
[
i
-
1
].
res
[
ch
]
+
t
,
0
,
17
);
}
}
if
(
bands
[
i
].
res
[
0
]
||
bands
[
i
].
res
[
1
]){
if
(
bands
[
i
].
res
[
0
]
||
bands
[
i
].
res
[
1
]){
mb
=
i
;
mb
=
i
;
if
(
c
->
MSS
)
bands
[
i
].
msf
=
get_bits1
(
&
gb
);
if
(
c
->
MSS
)
bands
[
i
].
msf
=
bitstream_read_bit
(
&
bc
);
}
}
}
}
/* get scale indexes coding method */
/* get scale indexes coding method */
for
(
i
=
0
;
i
<=
mb
;
i
++
)
for
(
i
=
0
;
i
<=
mb
;
i
++
)
for
(
ch
=
0
;
ch
<
2
;
ch
++
)
for
(
ch
=
0
;
ch
<
2
;
ch
++
)
if
(
bands
[
i
].
res
[
ch
])
bands
[
i
].
scfi
[
ch
]
=
get_vlc2
(
&
gb
,
scfi_vlc
.
table
,
MPC7_SCFI_BITS
,
1
);
if
(
bands
[
i
].
res
[
ch
])
bands
[
i
].
scfi
[
ch
]
=
bitstream_read_vlc
(
&
bc
,
scfi_vlc
.
table
,
MPC7_SCFI_BITS
,
1
);
/* get scale indexes */
/* get scale indexes */
for
(
i
=
0
;
i
<=
mb
;
i
++
){
for
(
i
=
0
;
i
<=
mb
;
i
++
){
for
(
ch
=
0
;
ch
<
2
;
ch
++
){
for
(
ch
=
0
;
ch
<
2
;
ch
++
){
if
(
bands
[
i
].
res
[
ch
]){
if
(
bands
[
i
].
res
[
ch
]){
bands
[
i
].
scf_idx
[
ch
][
2
]
=
c
->
oldDSCF
[
ch
][
i
];
bands
[
i
].
scf_idx
[
ch
][
2
]
=
c
->
oldDSCF
[
ch
][
i
];
bands
[
i
].
scf_idx
[
ch
][
0
]
=
get_scale_idx
(
&
gb
,
bands
[
i
].
scf_idx
[
ch
][
2
]);
bands
[
i
].
scf_idx
[
ch
][
0
]
=
get_scale_idx
(
&
bc
,
bands
[
i
].
scf_idx
[
ch
][
2
]);
switch
(
bands
[
i
].
scfi
[
ch
]){
switch
(
bands
[
i
].
scfi
[
ch
]){
case
0
:
case
0
:
bands
[
i
].
scf_idx
[
ch
][
1
]
=
get_scale_idx
(
&
gb
,
bands
[
i
].
scf_idx
[
ch
][
0
]);
bands
[
i
].
scf_idx
[
ch
][
1
]
=
get_scale_idx
(
&
bc
,
bands
[
i
].
scf_idx
[
ch
][
0
]);
bands
[
i
].
scf_idx
[
ch
][
2
]
=
get_scale_idx
(
&
gb
,
bands
[
i
].
scf_idx
[
ch
][
1
]);
bands
[
i
].
scf_idx
[
ch
][
2
]
=
get_scale_idx
(
&
bc
,
bands
[
i
].
scf_idx
[
ch
][
1
]);
break
;
break
;
case
1
:
case
1
:
bands
[
i
].
scf_idx
[
ch
][
1
]
=
get_scale_idx
(
&
gb
,
bands
[
i
].
scf_idx
[
ch
][
0
]);
bands
[
i
].
scf_idx
[
ch
][
1
]
=
get_scale_idx
(
&
bc
,
bands
[
i
].
scf_idx
[
ch
][
0
]);
bands
[
i
].
scf_idx
[
ch
][
2
]
=
bands
[
i
].
scf_idx
[
ch
][
1
];
bands
[
i
].
scf_idx
[
ch
][
2
]
=
bands
[
i
].
scf_idx
[
ch
][
1
];
break
;
break
;
case
2
:
case
2
:
bands
[
i
].
scf_idx
[
ch
][
1
]
=
bands
[
i
].
scf_idx
[
ch
][
0
];
bands
[
i
].
scf_idx
[
ch
][
1
]
=
bands
[
i
].
scf_idx
[
ch
][
0
];
bands
[
i
].
scf_idx
[
ch
][
2
]
=
get_scale_idx
(
&
gb
,
bands
[
i
].
scf_idx
[
ch
][
1
]);
bands
[
i
].
scf_idx
[
ch
][
2
]
=
get_scale_idx
(
&
bc
,
bands
[
i
].
scf_idx
[
ch
][
1
]);
break
;
break
;
case
3
:
case
3
:
bands
[
i
].
scf_idx
[
ch
][
2
]
=
bands
[
i
].
scf_idx
[
ch
][
1
]
=
bands
[
i
].
scf_idx
[
ch
][
0
];
bands
[
i
].
scf_idx
[
ch
][
2
]
=
bands
[
i
].
scf_idx
[
ch
][
1
]
=
bands
[
i
].
scf_idx
[
ch
][
0
];
...
@@ -290,11 +295,11 @@ static int mpc7_decode_frame(AVCodecContext * avctx, void *data,
...
@@ -290,11 +295,11 @@ static int mpc7_decode_frame(AVCodecContext * avctx, void *data,
off
=
0
;
off
=
0
;
for
(
i
=
0
;
i
<
BANDS
;
i
++
,
off
+=
SAMPLES_PER_BAND
)
for
(
i
=
0
;
i
<
BANDS
;
i
++
,
off
+=
SAMPLES_PER_BAND
)
for
(
ch
=
0
;
ch
<
2
;
ch
++
)
for
(
ch
=
0
;
ch
<
2
;
ch
++
)
idx_to_quant
(
c
,
&
gb
,
bands
[
i
].
res
[
ch
],
c
->
Q
[
ch
]
+
off
);
idx_to_quant
(
c
,
&
bc
,
bands
[
i
].
res
[
ch
],
c
->
Q
[
ch
]
+
off
);
ff_mpc_dequantize_and_synth
(
c
,
mb
,
(
int16_t
**
)
frame
->
extended_data
,
2
);
ff_mpc_dequantize_and_synth
(
c
,
mb
,
(
int16_t
**
)
frame
->
extended_data
,
2
);
bits_used
=
get_bits_count
(
&
gb
);
bits_used
=
bitstream_tell
(
&
bc
);
bits_avail
=
buf_size
*
8
;
bits_avail
=
buf_size
*
8
;
if
(
!
last_frame
&&
((
bits_avail
<
bits_used
)
||
(
bits_used
+
32
<=
bits_avail
)))
{
if
(
!
last_frame
&&
((
bits_avail
<
bits_used
)
||
(
bits_used
+
32
<=
bits_avail
)))
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Error decoding frame: used %i of %i bits
\n
"
,
bits_used
,
bits_avail
);
av_log
(
avctx
,
AV_LOG_ERROR
,
"Error decoding frame: used %i of %i bits
\n
"
,
bits_used
,
bits_avail
);
...
...
libavcodec/mpc8.c
View file @
6668bc80
...
@@ -27,8 +27,9 @@
...
@@ -27,8 +27,9 @@
#include "libavutil/channel_layout.h"
#include "libavutil/channel_layout.h"
#include "libavutil/lfg.h"
#include "libavutil/lfg.h"
#include "avcodec.h"
#include "avcodec.h"
#include "
get_bits
.h"
#include "
bitstream
.h"
#include "internal.h"
#include "internal.h"
#include "mpegaudiodsp.h"
#include "mpegaudiodsp.h"
...
@@ -42,22 +43,22 @@ static VLC q1_vlc, q2_vlc[2], q3_vlc[2], quant_vlc[4][2], q9up_vlc;
...
@@ -42,22 +43,22 @@ static VLC q1_vlc, q2_vlc[2], q3_vlc[2], quant_vlc[4][2], q9up_vlc;
static
const
int
q3_offsets
[
2
]
=
{
MPC8_Q3_OFFSET
,
MPC8_Q4_OFFSET
};
static
const
int
q3_offsets
[
2
]
=
{
MPC8_Q3_OFFSET
,
MPC8_Q4_OFFSET
};
static
const
int
quant_offsets
[
6
]
=
{
MPC8_Q5_OFFSET
,
MPC8_Q6_OFFSET
,
MPC8_Q7_OFFSET
,
MPC8_Q8_OFFSET
};
static
const
int
quant_offsets
[
6
]
=
{
MPC8_Q5_OFFSET
,
MPC8_Q6_OFFSET
,
MPC8_Q7_OFFSET
,
MPC8_Q8_OFFSET
};
static
inline
int
mpc8_dec_base
(
GetBitContext
*
gb
,
int
k
,
int
n
)
static
inline
int
mpc8_dec_base
(
BitstreamContext
*
bc
,
int
k
,
int
n
)
{
{
int
len
=
mpc8_cnk_len
[
k
-
1
][
n
-
1
]
-
1
;
int
len
=
mpc8_cnk_len
[
k
-
1
][
n
-
1
]
-
1
;
int
code
=
len
?
get_bits_long
(
gb
,
len
)
:
0
;
int
code
=
len
?
bitstream_read
(
bc
,
len
)
:
0
;
if
(
code
>=
mpc8_cnk_lost
[
k
-
1
][
n
-
1
])
if
(
code
>=
mpc8_cnk_lost
[
k
-
1
][
n
-
1
])
code
=
((
code
<<
1
)
|
get_bits1
(
gb
))
-
mpc8_cnk_lost
[
k
-
1
][
n
-
1
];
code
=
((
code
<<
1
)
|
bitstream_read_bit
(
bc
))
-
mpc8_cnk_lost
[
k
-
1
][
n
-
1
];
return
code
;
return
code
;
}
}
static
inline
int
mpc8_dec_enum
(
GetBitContext
*
gb
,
int
k
,
int
n
)
static
inline
int
mpc8_dec_enum
(
BitstreamContext
*
bc
,
int
k
,
int
n
)
{
{
int
bits
=
0
;
int
bits
=
0
;
const
uint32_t
*
C
=
mpc8_cnk
[
k
-
1
];
const
uint32_t
*
C
=
mpc8_cnk
[
k
-
1
];
int
code
=
mpc8_dec_base
(
gb
,
k
,
n
);
int
code
=
mpc8_dec_base
(
bc
,
k
,
n
);
do
{
do
{
n
--
;
n
--
;
...
@@ -72,18 +73,18 @@ static inline int mpc8_dec_enum(GetBitContext *gb, int k, int n)
...
@@ -72,18 +73,18 @@ static inline int mpc8_dec_enum(GetBitContext *gb, int k, int n)
return
bits
;
return
bits
;
}
}
static
inline
int
mpc8_get_mod_golomb
(
GetBitContext
*
gb
,
int
m
)
static
inline
int
mpc8_get_mod_golomb
(
BitstreamContext
*
bc
,
int
m
)
{
{
if
(
mpc8_cnk_len
[
0
][
m
]
<
1
)
return
0
;
if
(
mpc8_cnk_len
[
0
][
m
]
<
1
)
return
0
;
return
mpc8_dec_base
(
gb
,
1
,
m
+
1
);
return
mpc8_dec_base
(
bc
,
1
,
m
+
1
);
}
}
static
int
mpc8_get_mask
(
GetBitContext
*
gb
,
int
size
,
int
t
)
static
int
mpc8_get_mask
(
BitstreamContext
*
bc
,
int
size
,
int
t
)
{
{
int
mask
=
0
;
int
mask
=
0
;
if
(
t
&&
t
!=
size
)
if
(
t
&&
t
!=
size
)
mask
=
mpc8_dec_enum
(
gb
,
FFMIN
(
t
,
size
-
t
),
size
);
mask
=
mpc8_dec_enum
(
bc
,
FFMIN
(
t
,
size
-
t
),
size
);
if
((
t
<<
1
)
>
size
)
mask
=
~
mask
;
if
((
t
<<
1
)
>
size
)
mask
=
~
mask
;
return
mask
;
return
mask
;
...
@@ -97,7 +98,7 @@ static av_cold int mpc8_decode_init(AVCodecContext * avctx)
...
@@ -97,7 +98,7 @@ static av_cold int mpc8_decode_init(AVCodecContext * avctx)
{
{
int
i
;
int
i
;
MPCContext
*
c
=
avctx
->
priv_data
;
MPCContext
*
c
=
avctx
->
priv_data
;
GetBitContext
gb
;
BitstreamContext
bc
;
static
int
vlc_initialized
=
0
;
static
int
vlc_initialized
=
0
;
int
channels
;
int
channels
;
...
@@ -122,17 +123,17 @@ static av_cold int mpc8_decode_init(AVCodecContext * avctx)
...
@@ -122,17 +123,17 @@ static av_cold int mpc8_decode_init(AVCodecContext * avctx)
ff_mpc_init
();
ff_mpc_init
();
init_get_bits
(
&
gb
,
avctx
->
extradata
,
16
);
bitstream_init
(
&
bc
,
avctx
->
extradata
,
16
);
skip_bits
(
&
gb
,
3
);
//
sample rate
bitstream_skip
(
&
bc
,
3
);
//
sample rate
c
->
maxbands
=
get_bits
(
&
gb
,
5
)
+
1
;
c
->
maxbands
=
bitstream_read
(
&
bc
,
5
)
+
1
;
channels
=
get_bits
(
&
gb
,
4
)
+
1
;
channels
=
bitstream_read
(
&
bc
,
4
)
+
1
;
if
(
channels
>
2
)
{
if
(
channels
>
2
)
{
avpriv_request_sample
(
avctx
,
"Multichannel MPC SV8"
);
avpriv_request_sample
(
avctx
,
"Multichannel MPC SV8"
);
return
AVERROR_PATCHWELCOME
;
return
AVERROR_PATCHWELCOME
;
}
}
c
->
MSS
=
get_bits1
(
&
gb
);
c
->
MSS
=
bitstream_read_bit
(
&
bc
);
c
->
frames
=
1
<<
(
get_bits
(
&
gb
,
3
)
*
2
);
c
->
frames
=
1
<<
(
bitstream_read
(
&
bc
,
3
)
*
2
);
avctx
->
sample_fmt
=
AV_SAMPLE_FMT_S16P
;
avctx
->
sample_fmt
=
AV_SAMPLE_FMT_S16P
;
avctx
->
channel_layout
=
(
avctx
->
channels
==
2
)
?
AV_CH_LAYOUT_STEREO
:
AV_CH_LAYOUT_MONO
;
avctx
->
channel_layout
=
(
avctx
->
channels
==
2
)
?
AV_CH_LAYOUT_STEREO
:
AV_CH_LAYOUT_MONO
;
...
@@ -238,7 +239,7 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
...
@@ -238,7 +239,7 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
const
uint8_t
*
buf
=
avpkt
->
data
;
const
uint8_t
*
buf
=
avpkt
->
data
;
int
buf_size
=
avpkt
->
size
;
int
buf_size
=
avpkt
->
size
;
MPCContext
*
c
=
avctx
->
priv_data
;
MPCContext
*
c
=
avctx
->
priv_data
;
GetBitContext
gb2
,
*
gb
=
&
gb
2
;
BitstreamContext
bc2
,
*
bc
=
&
bc
2
;
int
i
,
j
,
k
,
ch
,
cnt
,
res
,
t
;
int
i
,
j
,
k
,
ch
,
cnt
,
res
,
t
;
Band
*
bands
=
c
->
bands
;
Band
*
bands
=
c
->
bands
;
int
off
;
int
off
;
...
@@ -258,13 +259,13 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
...
@@ -258,13 +259,13 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
memset
(
c
->
Q
,
0
,
sizeof
(
c
->
Q
));
memset
(
c
->
Q
,
0
,
sizeof
(
c
->
Q
));
c
->
last_bits_used
=
0
;
c
->
last_bits_used
=
0
;
}
}
init_get_bits
(
gb
,
buf
,
buf_size
*
8
);
bitstream_init
(
bc
,
buf
,
buf_size
*
8
);
skip_bits
(
gb
,
c
->
last_bits_used
&
7
);
bitstream_skip
(
bc
,
c
->
last_bits_used
&
7
);
if
(
keyframe
)
if
(
keyframe
)
maxband
=
mpc8_get_mod_golomb
(
gb
,
c
->
maxbands
+
1
);
maxband
=
mpc8_get_mod_golomb
(
bc
,
c
->
maxbands
+
1
);
else
{
else
{
maxband
=
c
->
last_max_band
+
get_vlc2
(
gb
,
band_vlc
.
table
,
MPC8_BANDS_BITS
,
2
);
maxband
=
c
->
last_max_band
+
bitstream_read_vlc
(
bc
,
band_vlc
.
table
,
MPC8_BANDS_BITS
,
2
);
if
(
maxband
>
32
)
maxband
-=
33
;
if
(
maxband
>
32
)
maxband
-=
33
;
}
}
if
(
maxband
>
c
->
maxbands
+
1
)
if
(
maxband
>
c
->
maxbands
+
1
)
...
@@ -276,7 +277,7 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
...
@@ -276,7 +277,7 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
last
[
0
]
=
last
[
1
]
=
0
;
last
[
0
]
=
last
[
1
]
=
0
;
for
(
i
=
maxband
-
1
;
i
>=
0
;
i
--
){
for
(
i
=
maxband
-
1
;
i
>=
0
;
i
--
){
for
(
ch
=
0
;
ch
<
2
;
ch
++
){
for
(
ch
=
0
;
ch
<
2
;
ch
++
){
last
[
ch
]
=
get_vlc2
(
gb
,
res_vlc
[
last
[
ch
]
>
2
].
table
,
MPC8_RES_BITS
,
2
)
+
last
[
ch
];
last
[
ch
]
=
bitstream_read_vlc
(
bc
,
res_vlc
[
last
[
ch
]
>
2
].
table
,
MPC8_RES_BITS
,
2
)
+
last
[
ch
];
if
(
last
[
ch
]
>
15
)
last
[
ch
]
-=
17
;
if
(
last
[
ch
]
>
15
)
last
[
ch
]
-=
17
;
bands
[
i
].
res
[
ch
]
=
last
[
ch
];
bands
[
i
].
res
[
ch
]
=
last
[
ch
];
}
}
...
@@ -288,8 +289,8 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
...
@@ -288,8 +289,8 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
for
(
i
=
0
;
i
<
maxband
;
i
++
)
for
(
i
=
0
;
i
<
maxband
;
i
++
)
if
(
bands
[
i
].
res
[
0
]
||
bands
[
i
].
res
[
1
])
if
(
bands
[
i
].
res
[
0
]
||
bands
[
i
].
res
[
1
])
cnt
++
;
cnt
++
;
t
=
mpc8_get_mod_golomb
(
gb
,
cnt
);
t
=
mpc8_get_mod_golomb
(
bc
,
cnt
);
mask
=
mpc8_get_mask
(
gb
,
cnt
,
t
);
mask
=
mpc8_get_mask
(
bc
,
cnt
,
t
);
for
(
i
=
maxband
-
1
;
i
>=
0
;
i
--
)
for
(
i
=
maxband
-
1
;
i
>=
0
;
i
--
)
if
(
bands
[
i
].
res
[
0
]
||
bands
[
i
].
res
[
1
]){
if
(
bands
[
i
].
res
[
0
]
||
bands
[
i
].
res
[
1
]){
bands
[
i
].
msf
=
mask
&
1
;
bands
[
i
].
msf
=
mask
&
1
;
...
@@ -309,7 +310,7 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
...
@@ -309,7 +310,7 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
if
(
bands
[
i
].
res
[
0
]
||
bands
[
i
].
res
[
1
]){
if
(
bands
[
i
].
res
[
0
]
||
bands
[
i
].
res
[
1
]){
cnt
=
!!
bands
[
i
].
res
[
0
]
+
!!
bands
[
i
].
res
[
1
]
-
1
;
cnt
=
!!
bands
[
i
].
res
[
0
]
+
!!
bands
[
i
].
res
[
1
]
-
1
;
if
(
cnt
>=
0
){
if
(
cnt
>=
0
){
t
=
get_vlc2
(
gb
,
scfi_vlc
[
cnt
].
table
,
scfi_vlc
[
cnt
].
bits
,
1
);
t
=
bitstream_read_vlc
(
bc
,
scfi_vlc
[
cnt
].
table
,
scfi_vlc
[
cnt
].
bits
,
1
);
if
(
bands
[
i
].
res
[
0
])
bands
[
i
].
scfi
[
0
]
=
t
>>
(
2
*
cnt
);
if
(
bands
[
i
].
res
[
0
])
bands
[
i
].
scfi
[
0
]
=
t
>>
(
2
*
cnt
);
if
(
bands
[
i
].
res
[
1
])
bands
[
i
].
scfi
[
1
]
=
t
&
3
;
if
(
bands
[
i
].
res
[
1
])
bands
[
i
].
scfi
[
1
]
=
t
&
3
;
}
}
...
@@ -321,21 +322,21 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
...
@@ -321,21 +322,21 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
if
(
!
bands
[
i
].
res
[
ch
])
continue
;
if
(
!
bands
[
i
].
res
[
ch
])
continue
;
if
(
c
->
oldDSCF
[
ch
][
i
]){
if
(
c
->
oldDSCF
[
ch
][
i
]){
bands
[
i
].
scf_idx
[
ch
][
0
]
=
get_bits
(
gb
,
7
)
-
6
;
bands
[
i
].
scf_idx
[
ch
][
0
]
=
bitstream_read
(
bc
,
7
)
-
6
;
c
->
oldDSCF
[
ch
][
i
]
=
0
;
c
->
oldDSCF
[
ch
][
i
]
=
0
;
}
else
{
}
else
{
t
=
get_vlc2
(
gb
,
dscf_vlc
[
1
].
table
,
MPC8_DSCF1_BITS
,
2
);
t
=
bitstream_read_vlc
(
bc
,
dscf_vlc
[
1
].
table
,
MPC8_DSCF1_BITS
,
2
);
if
(
t
==
64
)
if
(
t
==
64
)
t
+=
get_bits
(
gb
,
6
);
t
+=
bitstream_read
(
bc
,
6
);
bands
[
i
].
scf_idx
[
ch
][
0
]
=
((
bands
[
i
].
scf_idx
[
ch
][
2
]
+
t
-
25
)
&
0x7F
)
-
6
;
bands
[
i
].
scf_idx
[
ch
][
0
]
=
((
bands
[
i
].
scf_idx
[
ch
][
2
]
+
t
-
25
)
&
0x7F
)
-
6
;
}
}
for
(
j
=
0
;
j
<
2
;
j
++
){
for
(
j
=
0
;
j
<
2
;
j
++
){
if
((
bands
[
i
].
scfi
[
ch
]
<<
j
)
&
2
)
if
((
bands
[
i
].
scfi
[
ch
]
<<
j
)
&
2
)
bands
[
i
].
scf_idx
[
ch
][
j
+
1
]
=
bands
[
i
].
scf_idx
[
ch
][
j
];
bands
[
i
].
scf_idx
[
ch
][
j
+
1
]
=
bands
[
i
].
scf_idx
[
ch
][
j
];
else
{
else
{
t
=
get_vlc2
(
gb
,
dscf_vlc
[
0
].
table
,
MPC8_DSCF0_BITS
,
2
);
t
=
bitstream_read_vlc
(
bc
,
dscf_vlc
[
0
].
table
,
MPC8_DSCF0_BITS
,
2
);
if
(
t
==
31
)
if
(
t
==
31
)
t
=
64
+
get_bits
(
gb
,
6
);
t
=
64
+
bitstream_read
(
bc
,
6
);
bands
[
i
].
scf_idx
[
ch
][
j
+
1
]
=
((
bands
[
i
].
scf_idx
[
ch
][
j
]
+
t
-
25
)
&
0x7F
)
-
6
;
bands
[
i
].
scf_idx
[
ch
][
j
+
1
]
=
((
bands
[
i
].
scf_idx
[
ch
][
j
]
+
t
-
25
)
&
0x7F
)
-
6
;
}
}
}
}
...
@@ -354,16 +355,16 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
...
@@ -354,16 +355,16 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
break
;
break
;
case
1
:
case
1
:
for
(
j
=
0
;
j
<
SAMPLES_PER_BAND
;
j
+=
SAMPLES_PER_BAND
/
2
){
for
(
j
=
0
;
j
<
SAMPLES_PER_BAND
;
j
+=
SAMPLES_PER_BAND
/
2
){
cnt
=
get_vlc2
(
gb
,
q1_vlc
.
table
,
MPC8_Q1_BITS
,
2
);
cnt
=
bitstream_read_vlc
(
bc
,
q1_vlc
.
table
,
MPC8_Q1_BITS
,
2
);
t
=
mpc8_get_mask
(
gb
,
18
,
cnt
);
t
=
mpc8_get_mask
(
bc
,
18
,
cnt
);
for
(
k
=
0
;
k
<
SAMPLES_PER_BAND
/
2
;
k
++
,
t
<<=
1
)
for
(
k
=
0
;
k
<
SAMPLES_PER_BAND
/
2
;
k
++
,
t
<<=
1
)
c
->
Q
[
ch
][
off
+
j
+
k
]
=
(
t
&
0x20000
)
?
(
get_bits1
(
gb
)
<<
1
)
-
1
:
0
;
c
->
Q
[
ch
][
off
+
j
+
k
]
=
(
t
&
0x20000
)
?
(
bitstream_read_bit
(
bc
)
<<
1
)
-
1
:
0
;
}
}
break
;
break
;
case
2
:
case
2
:
cnt
=
6
;
//2*mpc8_thres[res]
cnt
=
6
;
//2*mpc8_thres[res]
for
(
j
=
0
;
j
<
SAMPLES_PER_BAND
;
j
+=
3
){
for
(
j
=
0
;
j
<
SAMPLES_PER_BAND
;
j
+=
3
){
t
=
get_vlc2
(
gb
,
q2_vlc
[
cnt
>
3
].
table
,
MPC8_Q2_BITS
,
2
);
t
=
bitstream_read_vlc
(
bc
,
q2_vlc
[
cnt
>
3
].
table
,
MPC8_Q2_BITS
,
2
);
c
->
Q
[
ch
][
off
+
j
+
0
]
=
mpc8_idx50
[
t
];
c
->
Q
[
ch
][
off
+
j
+
0
]
=
mpc8_idx50
[
t
];
c
->
Q
[
ch
][
off
+
j
+
1
]
=
mpc8_idx51
[
t
];
c
->
Q
[
ch
][
off
+
j
+
1
]
=
mpc8_idx51
[
t
];
c
->
Q
[
ch
][
off
+
j
+
2
]
=
mpc8_idx52
[
t
];
c
->
Q
[
ch
][
off
+
j
+
2
]
=
mpc8_idx52
[
t
];
...
@@ -373,7 +374,7 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
...
@@ -373,7 +374,7 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
case
3
:
case
3
:
case
4
:
case
4
:
for
(
j
=
0
;
j
<
SAMPLES_PER_BAND
;
j
+=
2
){
for
(
j
=
0
;
j
<
SAMPLES_PER_BAND
;
j
+=
2
){
t
=
get_vlc2
(
gb
,
q3_vlc
[
res
-
3
].
table
,
MPC8_Q3_BITS
,
2
)
+
q3_offsets
[
res
-
3
];
t
=
bitstream_read_vlc
(
bc
,
q3_vlc
[
res
-
3
].
table
,
MPC8_Q3_BITS
,
2
)
+
q3_offsets
[
res
-
3
];
c
->
Q
[
ch
][
off
+
j
+
1
]
=
t
>>
4
;
c
->
Q
[
ch
][
off
+
j
+
1
]
=
t
>>
4
;
c
->
Q
[
ch
][
off
+
j
+
0
]
=
(
t
&
8
)
?
(
t
&
0xF
)
-
16
:
(
t
&
0xF
);
c
->
Q
[
ch
][
off
+
j
+
0
]
=
(
t
&
8
)
?
(
t
&
0xF
)
-
16
:
(
t
&
0xF
);
}
}
...
@@ -384,17 +385,17 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
...
@@ -384,17 +385,17 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
case
8
:
case
8
:
cnt
=
2
*
mpc8_thres
[
res
];
cnt
=
2
*
mpc8_thres
[
res
];
for
(
j
=
0
;
j
<
SAMPLES_PER_BAND
;
j
++
){
for
(
j
=
0
;
j
<
SAMPLES_PER_BAND
;
j
++
){
t
=
get_vlc2
(
gb
,
quant_vlc
[
res
-
5
][
cnt
>
mpc8_thres
[
res
]].
table
,
quant_vlc
[
res
-
5
][
cnt
>
mpc8_thres
[
res
]].
bits
,
2
)
+
quant_offsets
[
res
-
5
];
t
=
bitstream_read_vlc
(
bc
,
quant_vlc
[
res
-
5
][
cnt
>
mpc8_thres
[
res
]].
table
,
quant_vlc
[
res
-
5
][
cnt
>
mpc8_thres
[
res
]].
bits
,
2
)
+
quant_offsets
[
res
-
5
];
c
->
Q
[
ch
][
off
+
j
]
=
t
;
c
->
Q
[
ch
][
off
+
j
]
=
t
;
cnt
=
(
cnt
>>
1
)
+
FFABS
(
c
->
Q
[
ch
][
off
+
j
]);
cnt
=
(
cnt
>>
1
)
+
FFABS
(
c
->
Q
[
ch
][
off
+
j
]);
}
}
break
;
break
;
default:
default:
for
(
j
=
0
;
j
<
SAMPLES_PER_BAND
;
j
++
){
for
(
j
=
0
;
j
<
SAMPLES_PER_BAND
;
j
++
){
c
->
Q
[
ch
][
off
+
j
]
=
get_vlc2
(
gb
,
q9up_vlc
.
table
,
MPC8_Q9UP_BITS
,
2
);
c
->
Q
[
ch
][
off
+
j
]
=
bitstream_read_vlc
(
bc
,
q9up_vlc
.
table
,
MPC8_Q9UP_BITS
,
2
);
if
(
res
!=
9
){
if
(
res
!=
9
){
c
->
Q
[
ch
][
off
+
j
]
<<=
res
-
9
;
c
->
Q
[
ch
][
off
+
j
]
<<=
res
-
9
;
c
->
Q
[
ch
][
off
+
j
]
|=
get_bits
(
gb
,
res
-
9
);
c
->
Q
[
ch
][
off
+
j
]
|=
bitstream_read
(
bc
,
res
-
9
);
}
}
c
->
Q
[
ch
][
off
+
j
]
-=
(
1
<<
(
res
-
2
))
-
1
;
c
->
Q
[
ch
][
off
+
j
]
-=
(
1
<<
(
res
-
2
))
-
1
;
}
}
...
@@ -408,8 +409,8 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
...
@@ -408,8 +409,8 @@ static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
c
->
cur_frame
++
;
c
->
cur_frame
++
;
c
->
last_bits_used
=
get_bits_count
(
gb
);
c
->
last_bits_used
=
bitstream_tell
(
bc
);
if
(
get_bits_left
(
gb
)
<
8
)
// we have only padding left
if
(
bitstream_bits_left
(
bc
)
<
8
)
// we have only padding left
c
->
last_bits_used
=
buf_size
<<
3
;
c
->
last_bits_used
=
buf_size
<<
3
;
if
(
c
->
cur_frame
>=
c
->
frames
)
if
(
c
->
cur_frame
>=
c
->
frames
)
c
->
cur_frame
=
0
;
c
->
cur_frame
=
0
;
...
...
libavformat/mpc8.c
View file @
6668bc80
...
@@ -19,8 +19,8 @@
...
@@ -19,8 +19,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
*/
#include "libavcodec/
get_bits
.h"
#include "libavcodec/
bitstream
.h"
#include "libavcodec/unary
_legacy
.h"
#include "libavcodec/unary.h"
#include "apetag.h"
#include "apetag.h"
#include "avformat.h"
#include "avformat.h"
...
@@ -107,17 +107,17 @@ static int mpc8_probe(AVProbeData *p)
...
@@ -107,17 +107,17 @@ static int mpc8_probe(AVProbeData *p)
return
0
;
return
0
;
}
}
static
inline
int64_t
gb_get_v
(
GetBitContext
*
gb
)
static
inline
int64_t
gb_get_v
(
BitstreamContext
*
bc
)
{
{
int64_t
v
=
0
;
int64_t
v
=
0
;
int
bits
=
0
;
int
bits
=
0
;
while
(
get_bits1
(
gb
)
&&
bits
<
64
-
7
)
{
while
(
bitstream_read_bit
(
bc
)
&&
bits
<
64
-
7
)
{
v
<<=
7
;
v
<<=
7
;
v
|=
get_bits
(
gb
,
7
);
v
|=
bitstream_read
(
bc
,
7
);
bits
+=
7
;
bits
+=
7
;
}
}
v
<<=
7
;
v
<<=
7
;
v
|=
get_bits
(
gb
,
7
);
v
|=
bitstream_read
(
bc
,
7
);
return
v
;
return
v
;
}
}
...
@@ -138,7 +138,7 @@ static void mpc8_parse_seektable(AVFormatContext *s, int64_t off)
...
@@ -138,7 +138,7 @@ static void mpc8_parse_seektable(AVFormatContext *s, int64_t off)
int64_t
size
,
pos
,
ppos
[
2
];
int64_t
size
,
pos
,
ppos
[
2
];
uint8_t
*
buf
;
uint8_t
*
buf
;
int
i
,
t
,
seekd
;
int
i
,
t
,
seekd
;
GetBitContext
gb
;
BitstreamContext
bc
;
if
(
s
->
nb_streams
==
0
)
{
if
(
s
->
nb_streams
==
0
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"No stream added before parsing seek table
\n
"
);
av_log
(
s
,
AV_LOG_ERROR
,
"No stream added before parsing seek table
\n
"
);
...
@@ -158,21 +158,21 @@ static void mpc8_parse_seektable(AVFormatContext *s, int64_t off)
...
@@ -158,21 +158,21 @@ static void mpc8_parse_seektable(AVFormatContext *s, int64_t off)
if
(
!
(
buf
=
av_malloc
(
size
+
AV_INPUT_BUFFER_PADDING_SIZE
)))
if
(
!
(
buf
=
av_malloc
(
size
+
AV_INPUT_BUFFER_PADDING_SIZE
)))
return
;
return
;
avio_read
(
s
->
pb
,
buf
,
size
);
avio_read
(
s
->
pb
,
buf
,
size
);
init_get_bits
(
&
gb
,
buf
,
size
*
8
);
bitstream_init8
(
&
bc
,
buf
,
size
);
size
=
gb_get_v
(
&
gb
);
size
=
gb_get_v
(
&
bc
);
if
(
size
>
UINT_MAX
/
4
||
size
>
c
->
samples
/
1152
){
if
(
size
>
UINT_MAX
/
4
||
size
>
c
->
samples
/
1152
){
av_log
(
s
,
AV_LOG_ERROR
,
"Seek table is too big
\n
"
);
av_log
(
s
,
AV_LOG_ERROR
,
"Seek table is too big
\n
"
);
return
;
return
;
}
}
seekd
=
get_bits
(
&
gb
,
4
);
seekd
=
bitstream_read
(
&
bc
,
4
);
for
(
i
=
0
;
i
<
2
;
i
++
){
for
(
i
=
0
;
i
<
2
;
i
++
){
pos
=
gb_get_v
(
&
gb
)
+
c
->
header_pos
;
pos
=
gb_get_v
(
&
bc
)
+
c
->
header_pos
;
ppos
[
1
-
i
]
=
pos
;
ppos
[
1
-
i
]
=
pos
;
av_add_index_entry
(
s
->
streams
[
0
],
pos
,
i
,
0
,
0
,
AVINDEX_KEYFRAME
);
av_add_index_entry
(
s
->
streams
[
0
],
pos
,
i
,
0
,
0
,
AVINDEX_KEYFRAME
);
}
}
for
(;
i
<
size
;
i
++
){
for
(;
i
<
size
;
i
++
){
t
=
get_unary
(
&
gb
,
1
,
33
)
<<
12
;
t
=
get_unary
(
&
bc
,
1
,
33
)
<<
12
;
t
+=
get_bits
(
&
gb
,
12
);
t
+=
bitstream_read
(
&
bc
,
12
);
if
(
t
&
1
)
if
(
t
&
1
)
t
=
-
(
t
&
~
1
);
t
=
-
(
t
&
~
1
);
pos
=
(
t
>>
1
)
+
ppos
[
0
]
*
2
-
ppos
[
1
];
pos
=
(
t
>>
1
)
+
ppos
[
0
]
*
2
-
ppos
[
1
];
...
...
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