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
32cd3a7c
Commit
32cd3a7c
authored
Nov 19, 2012
by
Paul B Mahol
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ADPCM AFC decoder
Signed-off-by:
Paul B Mahol
<
onemda@gmail.com
>
parent
08e26e7f
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
64 additions
and
1 deletion
+64
-1
general.texi
doc/general.texi
+1
-0
Makefile
libavcodec/Makefile
+1
-0
adpcm.c
libavcodec/adpcm.c
+43
-0
adpcm_data.c
libavcodec/adpcm_data.c
+5
-0
adpcm_data.h
libavcodec/adpcm_data.h
+1
-0
allcodecs.c
libavcodec/allcodecs.c
+1
-0
avcodec.h
libavcodec/avcodec.h
+1
-0
codec_desc.c
libavcodec/codec_desc.c
+7
-0
version.h
libavcodec/version.h
+1
-1
ast.c
libavformat/ast.c
+3
-0
No files found.
doc/general.texi
View file @
32cd3a7c
...
@@ -755,6 +755,7 @@ following image formats are supported:
...
@@ -755,6 +755,7 @@ following image formats are supported:
@tab Used in some Sega Saturn console games.
@tab Used in some Sega Saturn console games.
@item ADPCM Microsoft @tab X @tab X
@item ADPCM Microsoft @tab X @tab X
@item ADPCM MS IMA @tab X @tab X
@item ADPCM MS IMA @tab X @tab X
@item ADPCM Nintendo Gamecube AFC @tab @tab X
@item ADPCM Nintendo Gamecube THP @tab @tab X
@item ADPCM Nintendo Gamecube THP @tab @tab X
@item ADPCM QT IMA @tab X @tab X
@item ADPCM QT IMA @tab X @tab X
@item ADPCM SEGA CRI ADX @tab X @tab X
@item ADPCM SEGA CRI ADX @tab X @tab X
...
...
libavcodec/Makefile
View file @
32cd3a7c
...
@@ -566,6 +566,7 @@ OBJS-$(CONFIG_PCM_ZORK_DECODER) += pcm.o
...
@@ -566,6 +566,7 @@ OBJS-$(CONFIG_PCM_ZORK_DECODER) += pcm.o
OBJS-$(CONFIG_ADPCM_4XM_DECODER)
+=
adpcm.o
adpcm_data.o
OBJS-$(CONFIG_ADPCM_4XM_DECODER)
+=
adpcm.o
adpcm_data.o
OBJS-$(CONFIG_ADPCM_ADX_DECODER)
+=
adxdec.o
adx.o
OBJS-$(CONFIG_ADPCM_ADX_DECODER)
+=
adxdec.o
adx.o
OBJS-$(CONFIG_ADPCM_ADX_ENCODER)
+=
adxenc.o
adx.o
OBJS-$(CONFIG_ADPCM_ADX_ENCODER)
+=
adxenc.o
adx.o
OBJS-$(CONFIG_ADPCM_AFC_DECODER)
+=
adpcm.o
adpcm_data.o
OBJS-$(CONFIG_ADPCM_CT_DECODER)
+=
adpcm.o
adpcm_data.o
OBJS-$(CONFIG_ADPCM_CT_DECODER)
+=
adpcm.o
adpcm_data.o
OBJS-$(CONFIG_ADPCM_EA_DECODER)
+=
adpcm.o
adpcm_data.o
OBJS-$(CONFIG_ADPCM_EA_DECODER)
+=
adpcm.o
adpcm_data.o
OBJS-$(CONFIG_ADPCM_EA_MAXIS_XA_DECODER)
+=
adpcm.o
adpcm_data.o
OBJS-$(CONFIG_ADPCM_EA_MAXIS_XA_DECODER)
+=
adpcm.o
adpcm_data.o
...
...
libavcodec/adpcm.c
View file @
32cd3a7c
...
@@ -145,6 +145,7 @@ static av_cold int adpcm_decode_init(AVCodecContext * avctx)
...
@@ -145,6 +145,7 @@ static av_cold int adpcm_decode_init(AVCodecContext * avctx)
case
AV_CODEC_ID_ADPCM_EA_R3
:
case
AV_CODEC_ID_ADPCM_EA_R3
:
case
AV_CODEC_ID_ADPCM_EA_XAS
:
case
AV_CODEC_ID_ADPCM_EA_XAS
:
case
AV_CODEC_ID_ADPCM_THP
:
case
AV_CODEC_ID_ADPCM_THP
:
case
AV_CODEC_ID_ADPCM_AFC
:
avctx
->
sample_fmt
=
AV_SAMPLE_FMT_S16P
;
avctx
->
sample_fmt
=
AV_SAMPLE_FMT_S16P
;
break
;
break
;
case
AV_CODEC_ID_ADPCM_IMA_WS
:
case
AV_CODEC_ID_ADPCM_IMA_WS
:
...
@@ -575,6 +576,9 @@ static int get_nb_samples(AVCodecContext *avctx, GetByteContext *gb,
...
@@ -575,6 +576,9 @@ static int get_nb_samples(AVCodecContext *avctx, GetByteContext *gb,
*
coded_samples
-=
*
coded_samples
%
14
;
*
coded_samples
-=
*
coded_samples
%
14
;
nb_samples
=
(
buf_size
-
80
)
/
(
8
*
ch
)
*
14
;
nb_samples
=
(
buf_size
-
80
)
/
(
8
*
ch
)
*
14
;
break
;
break
;
case
AV_CODEC_ID_ADPCM_AFC
:
nb_samples
=
buf_size
/
(
9
*
ch
)
*
16
;
break
;
case
AV_CODEC_ID_ADPCM_XA
:
case
AV_CODEC_ID_ADPCM_XA
:
nb_samples
=
(
buf_size
/
128
)
*
224
/
ch
;
nb_samples
=
(
buf_size
/
128
)
*
224
/
ch
;
break
;
break
;
...
@@ -1232,6 +1236,44 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data,
...
@@ -1232,6 +1236,44 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data,
*
samples
++
=
adpcm_yamaha_expand_nibble
(
&
c
->
status
[
st
],
v
>>
4
);
*
samples
++
=
adpcm_yamaha_expand_nibble
(
&
c
->
status
[
st
],
v
>>
4
);
}
}
break
;
break
;
case
AV_CODEC_ID_ADPCM_AFC
:
for
(
channel
=
0
;
channel
<
avctx
->
channels
;
channel
++
)
{
int
prev1
=
c
->
status
[
channel
].
sample1
;
int
prev2
=
c
->
status
[
channel
].
sample2
;
samples
=
samples_p
[
channel
];
/* Read in every sample for this channel. */
for
(
i
=
0
;
i
<
nb_samples
/
16
;
i
++
)
{
int
byte
=
bytestream2_get_byteu
(
&
gb
);
int
scale
=
1
<<
(
byte
>>
4
);
int
index
=
byte
&
0xf
;
int
factor1
=
ff_adpcm_afc_coeffs
[
0
][
index
];
int
factor2
=
ff_adpcm_afc_coeffs
[
1
][
index
];
/* Decode 16 samples. */
for
(
n
=
0
;
n
<
16
;
n
++
)
{
int32_t
sampledat
;
if
(
n
&
1
)
{
sampledat
=
sign_extend
(
byte
,
4
);
}
else
{
byte
=
bytestream2_get_byteu
(
&
gb
);
sampledat
=
sign_extend
(
byte
>>
4
,
4
);
}
sampledat
=
((
prev1
*
factor1
+
prev2
*
factor2
)
+
((
sampledat
*
scale
)
<<
11
))
>>
11
;
*
samples
=
av_clip_int16
(
sampledat
);
prev2
=
prev1
;
prev1
=
*
samples
++
;
}
}
c
->
status
[
channel
].
sample1
=
prev1
;
c
->
status
[
channel
].
sample2
=
prev2
;
}
bytestream2_seek
(
&
gb
,
0
,
SEEK_END
);
break
;
case
AV_CODEC_ID_ADPCM_THP
:
case
AV_CODEC_ID_ADPCM_THP
:
{
{
int
table
[
2
][
16
];
int
table
[
2
][
16
];
...
@@ -1314,6 +1356,7 @@ AVCodec ff_ ## name_ ## _decoder = { \
...
@@ -1314,6 +1356,7 @@ AVCodec ff_ ## name_ ## _decoder = { \
/* Note: Do not forget to add new entries to the Makefile as well. */
/* Note: Do not forget to add new entries to the Makefile as well. */
ADPCM_DECODER
(
AV_CODEC_ID_ADPCM_4XM
,
sample_fmts_s16p
,
adpcm_4xm
,
"ADPCM 4X Movie"
);
ADPCM_DECODER
(
AV_CODEC_ID_ADPCM_4XM
,
sample_fmts_s16p
,
adpcm_4xm
,
"ADPCM 4X Movie"
);
ADPCM_DECODER
(
AV_CODEC_ID_ADPCM_AFC
,
sample_fmts_s16p
,
adpcm_afc
,
"ADPCM Nintendo Gamecube AFC"
);
ADPCM_DECODER
(
AV_CODEC_ID_ADPCM_CT
,
sample_fmts_s16
,
adpcm_ct
,
"ADPCM Creative Technology"
);
ADPCM_DECODER
(
AV_CODEC_ID_ADPCM_CT
,
sample_fmts_s16
,
adpcm_ct
,
"ADPCM Creative Technology"
);
ADPCM_DECODER
(
AV_CODEC_ID_ADPCM_EA
,
sample_fmts_s16
,
adpcm_ea
,
"ADPCM Electronic Arts"
);
ADPCM_DECODER
(
AV_CODEC_ID_ADPCM_EA
,
sample_fmts_s16
,
adpcm_ea
,
"ADPCM Electronic Arts"
);
ADPCM_DECODER
(
AV_CODEC_ID_ADPCM_EA_MAXIS_XA
,
sample_fmts_s16
,
adpcm_ea_maxis_xa
,
"ADPCM Electronic Arts Maxis CDROM XA"
);
ADPCM_DECODER
(
AV_CODEC_ID_ADPCM_EA_MAXIS_XA
,
sample_fmts_s16
,
adpcm_ea_maxis_xa
,
"ADPCM Electronic Arts Maxis CDROM XA"
);
...
...
libavcodec/adpcm_data.c
View file @
32cd3a7c
...
@@ -76,3 +76,8 @@ const int8_t ff_adpcm_yamaha_difflookup[] = {
...
@@ -76,3 +76,8 @@ const int8_t ff_adpcm_yamaha_difflookup[] = {
1
,
3
,
5
,
7
,
9
,
11
,
13
,
15
,
1
,
3
,
5
,
7
,
9
,
11
,
13
,
15
,
-
1
,
-
3
,
-
5
,
-
7
,
-
9
,
-
11
,
-
13
,
-
15
-
1
,
-
3
,
-
5
,
-
7
,
-
9
,
-
11
,
-
13
,
-
15
};
};
const
int16_t
ff_adpcm_afc_coeffs
[
2
][
16
]
=
{
{
0
,
2048
,
0
,
1024
,
4096
,
3584
,
3072
,
4608
,
4200
,
4800
,
5120
,
2048
,
1024
,
64512
,
64512
,
63488
},
{
0
,
0
,
2048
,
1024
,
63488
,
64000
,
64512
,
62976
,
63288
,
63236
,
62464
,
63488
,
64512
,
1024
,
0
,
0
}
};
libavcodec/adpcm_data.h
View file @
32cd3a7c
...
@@ -35,5 +35,6 @@ extern const uint8_t ff_adpcm_AdaptCoeff1[];
...
@@ -35,5 +35,6 @@ extern const uint8_t ff_adpcm_AdaptCoeff1[];
extern
const
int8_t
ff_adpcm_AdaptCoeff2
[];
extern
const
int8_t
ff_adpcm_AdaptCoeff2
[];
extern
const
int16_t
ff_adpcm_yamaha_indexscale
[];
extern
const
int16_t
ff_adpcm_yamaha_indexscale
[];
extern
const
int8_t
ff_adpcm_yamaha_difflookup
[];
extern
const
int8_t
ff_adpcm_yamaha_difflookup
[];
extern
const
int16_t
ff_adpcm_afc_coeffs
[
2
][
16
];
#endif
/* AVCODEC_ADPCM_DATA_H */
#endif
/* AVCODEC_ADPCM_DATA_H */
libavcodec/allcodecs.c
View file @
32cd3a7c
...
@@ -387,6 +387,7 @@ void avcodec_register_all(void)
...
@@ -387,6 +387,7 @@ void avcodec_register_all(void)
/* ADPCM codecs */
/* ADPCM codecs */
REGISTER_DECODER
(
ADPCM_4XM
,
adpcm_4xm
);
REGISTER_DECODER
(
ADPCM_4XM
,
adpcm_4xm
);
REGISTER_ENCDEC
(
ADPCM_ADX
,
adpcm_adx
);
REGISTER_ENCDEC
(
ADPCM_ADX
,
adpcm_adx
);
REGISTER_DECODER
(
ADPCM_AFC
,
adpcm_afc
);
REGISTER_DECODER
(
ADPCM_CT
,
adpcm_ct
);
REGISTER_DECODER
(
ADPCM_CT
,
adpcm_ct
);
REGISTER_DECODER
(
ADPCM_EA
,
adpcm_ea
);
REGISTER_DECODER
(
ADPCM_EA
,
adpcm_ea
);
REGISTER_DECODER
(
ADPCM_EA_MAXIS_XA
,
adpcm_ea_maxis_xa
);
REGISTER_DECODER
(
ADPCM_EA_MAXIS_XA
,
adpcm_ea_maxis_xa
);
...
...
libavcodec/avcodec.h
View file @
32cd3a7c
...
@@ -352,6 +352,7 @@ enum AVCodecID {
...
@@ -352,6 +352,7 @@ enum AVCodecID {
AV_CODEC_ID_ADPCM_G722
,
AV_CODEC_ID_ADPCM_G722
,
AV_CODEC_ID_ADPCM_IMA_APC
,
AV_CODEC_ID_ADPCM_IMA_APC
,
AV_CODEC_ID_VIMA
=
MKBETAG
(
'V'
,
'I'
,
'M'
,
'A'
),
AV_CODEC_ID_VIMA
=
MKBETAG
(
'V'
,
'I'
,
'M'
,
'A'
),
AV_CODEC_ID_ADPCM_AFC
=
MKBETAG
(
'A'
,
'F'
,
'C'
,
' '
),
/* AMR */
/* AMR */
AV_CODEC_ID_AMR_NB
=
0x12000
,
AV_CODEC_ID_AMR_NB
=
0x12000
,
...
...
libavcodec/codec_desc.c
View file @
32cd3a7c
...
@@ -1756,6 +1756,13 @@ static const AVCodecDescriptor codec_descriptors[] = {
...
@@ -1756,6 +1756,13 @@ static const AVCodecDescriptor codec_descriptors[] = {
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"ADPCM IMA CRYO APC"
),
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"ADPCM IMA CRYO APC"
),
.
props
=
AV_CODEC_PROP_LOSSY
,
.
props
=
AV_CODEC_PROP_LOSSY
,
},
},
{
.
id
=
AV_CODEC_ID_ADPCM_AFC
,
.
type
=
AVMEDIA_TYPE_AUDIO
,
.
name
=
"adpcm_afc"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"ADPCM Nintendo Gamecube AFC"
),
.
props
=
AV_CODEC_PROP_LOSSY
,
},
/* AMR */
/* AMR */
{
{
...
...
libavcodec/version.h
View file @
32cd3a7c
...
@@ -29,7 +29,7 @@
...
@@ -29,7 +29,7 @@
#include "libavutil/avutil.h"
#include "libavutil/avutil.h"
#define LIBAVCODEC_VERSION_MAJOR 54
#define LIBAVCODEC_VERSION_MAJOR 54
#define LIBAVCODEC_VERSION_MINOR 7
5
#define LIBAVCODEC_VERSION_MINOR 7
6
#define LIBAVCODEC_VERSION_MICRO 100
#define LIBAVCODEC_VERSION_MICRO 100
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
...
...
libavformat/ast.c
View file @
32cd3a7c
...
@@ -43,6 +43,9 @@ static int ast_read_header(AVFormatContext *s)
...
@@ -43,6 +43,9 @@ static int ast_read_header(AVFormatContext *s)
avio_skip
(
s
->
pb
,
8
);
avio_skip
(
s
->
pb
,
8
);
codec
=
avio_rb16
(
s
->
pb
);
codec
=
avio_rb16
(
s
->
pb
);
switch
(
codec
)
{
switch
(
codec
)
{
case
0
:
st
->
codec
->
codec_id
=
AV_CODEC_ID_ADPCM_AFC
;
break
;
case
1
:
case
1
:
st
->
codec
->
codec_id
=
AV_CODEC_ID_PCM_S16BE_PLANAR
;
st
->
codec
->
codec_id
=
AV_CODEC_ID_PCM_S16BE_PLANAR
;
break
;
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