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
e06bdc3c
Commit
e06bdc3c
authored
Nov 05, 2017
by
Carl Eugen Hoyos
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavf/amr: Add amrnb and amrwb demuxers.
Fixes ticket #6678.
parent
2cc51d50
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
132 additions
and
12 deletions
+132
-12
Changelog
Changelog
+1
-0
general.texi
doc/general.texi
+2
-0
Makefile
libavformat/Makefile
+2
-0
allformats.c
libavformat/allformats.c
+2
-0
amr.c
libavformat/amr.c
+123
-10
version.h
libavformat/version.h
+2
-2
No files found.
Changelog
View file @
e06bdc3c
...
...
@@ -7,6 +7,7 @@ version <next>:
requires 2.1 (or later) and pkg-config.
- VDA dropped (use VideoToolbox instead)
- MagicYUV encoder
- Raw AMR-NB and AMR-WB demuxers
version 3.4:
...
...
doc/general.texi
View file @
e06bdc3c
...
...
@@ -439,6 +439,8 @@ library:
@item QCP @tab @tab X
@item raw ADTS (AAC) @tab X @tab X
@item raw AC-3 @tab X @tab X
@item raw AMR-NB @tab @tab X
@item raw AMR-WB @tab @tab X
@item raw Chinese AVS video @tab X @tab X
@item raw CRI ADX @tab X @tab X
@item raw Dirac @tab X @tab X
...
...
libavformat/Makefile
View file @
e06bdc3c
...
...
@@ -87,6 +87,8 @@ OBJS-$(CONFIG_AIFF_MUXER) += aiffenc.o id3v2enc.o
OBJS-$(CONFIG_AIX_DEMUXER)
+=
aixdec.o
OBJS-$(CONFIG_AMR_DEMUXER)
+=
amr.o
OBJS-$(CONFIG_AMR_MUXER)
+=
amr.o
OBJS-$(CONFIG_AMRNB_DEMUXER)
+=
amr.o
OBJS-$(CONFIG_AMRWB_DEMUXER)
+=
amr.o
OBJS-$(CONFIG_ANM_DEMUXER)
+=
anm.o
OBJS-$(CONFIG_APC_DEMUXER)
+=
apc.o
OBJS-$(CONFIG_APE_DEMUXER)
+=
ape.o
apetag.o
img2.o
...
...
libavformat/allformats.c
View file @
e06bdc3c
...
...
@@ -63,6 +63,8 @@ static void register_all(void)
REGISTER_MUXDEMUX
(
AIFF
,
aiff
);
REGISTER_DEMUXER
(
AIX
,
aix
);
REGISTER_MUXDEMUX
(
AMR
,
amr
);
REGISTER_DEMUXER
(
AMRNB
,
amrnb
);
REGISTER_DEMUXER
(
AMRWB
,
amrwb
);
REGISTER_DEMUXER
(
ANM
,
anm
);
REGISTER_DEMUXER
(
APC
,
apc
);
REGISTER_DEMUXER
(
APE
,
ape
);
...
...
libavformat/amr.c
View file @
e06bdc3c
...
...
@@ -38,6 +38,13 @@ typedef struct {
static
const
char
AMR_header
[]
=
"#!AMR
\n
"
;
static
const
char
AMRWB_header
[]
=
"#!AMR-WB
\n
"
;
static
const
uint8_t
amrnb_packed_size
[
16
]
=
{
13
,
14
,
16
,
18
,
20
,
21
,
27
,
32
,
6
,
1
,
1
,
1
,
1
,
1
,
1
,
1
};
static
const
uint8_t
amrwb_packed_size
[
16
]
=
{
18
,
24
,
33
,
37
,
41
,
47
,
51
,
59
,
61
,
6
,
1
,
1
,
1
,
1
,
1
,
1
};
#if CONFIG_AMR_MUXER
static
int
amr_write_header
(
AVFormatContext
*
s
)
{
...
...
@@ -126,17 +133,9 @@ static int amr_read_packet(AVFormatContext *s, AVPacket *pkt)
mode
=
(
toc
>>
3
)
&
0x0F
;
if
(
par
->
codec_id
==
AV_CODEC_ID_AMR_NB
)
{
static
const
uint8_t
packed_size
[
16
]
=
{
12
,
13
,
15
,
17
,
19
,
20
,
26
,
31
,
5
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
size
=
packed_size
[
mode
]
+
1
;
size
=
amrnb_packed_size
[
mode
];
}
else
if
(
par
->
codec_id
==
AV_CODEC_ID_AMR_WB
)
{
static
const
uint8_t
packed_size
[
16
]
=
{
18
,
24
,
33
,
37
,
41
,
47
,
51
,
59
,
61
,
6
,
6
,
0
,
0
,
0
,
1
,
1
};
size
=
packed_size
[
mode
];
size
=
amrwb_packed_size
[
mode
];
}
if
(
!
size
||
av_new_packet
(
pkt
,
size
))
...
...
@@ -176,6 +175,120 @@ AVInputFormat ff_amr_demuxer = {
};
#endif
#if CONFIG_AMRNB_DEMUXER
static
int
amrnb_probe
(
AVProbeData
*
p
)
{
int
mode
,
i
=
0
,
valid
=
0
;
const
uint8_t
*
b
=
p
->
buf
;
while
(
i
<
p
->
buf_size
)
{
mode
=
b
[
i
]
>>
3
&
0x0F
;
if
(
mode
<
9
&&
(
b
[
i
]
&
0x4
)
==
0x4
)
{
int
last
=
mode
;
int
size
=
amrnb_packed_size
[
mode
];
while
(
size
--
)
{
if
(
b
[
++
i
]
!=
last
)
break
;
last
=
b
[
i
];
}
if
(
size
>
0
)
{
valid
++
;
i
+=
size
;
}
}
else
{
valid
=
0
;
i
++
;
}
}
if
(
valid
>
100
)
return
AVPROBE_SCORE_EXTENSION
/
2
+
1
;
return
0
;
}
static
int
amrnb_read_header
(
AVFormatContext
*
s
)
{
AVStream
*
st
=
avformat_new_stream
(
s
,
NULL
);
if
(
!
st
)
return
AVERROR
(
ENOMEM
);
st
->
codecpar
->
codec_tag
=
MKTAG
(
's'
,
'a'
,
'm'
,
'r'
);
st
->
codecpar
->
codec_id
=
AV_CODEC_ID_AMR_NB
;
st
->
codecpar
->
sample_rate
=
8000
;
st
->
codecpar
->
channels
=
1
;
st
->
codecpar
->
channel_layout
=
AV_CH_LAYOUT_MONO
;
st
->
codecpar
->
codec_type
=
AVMEDIA_TYPE_AUDIO
;
avpriv_set_pts_info
(
st
,
64
,
1
,
8000
);
return
0
;
}
AVInputFormat
ff_amrnb_demuxer
=
{
.
name
=
"amrnb"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"raw AMR-NB"
),
.
priv_data_size
=
sizeof
(
AMRContext
),
.
read_probe
=
amrnb_probe
,
.
read_header
=
amrnb_read_header
,
.
read_packet
=
amr_read_packet
,
.
flags
=
AVFMT_GENERIC_INDEX
,
};
#endif
#if CONFIG_AMRWB_DEMUXER
static
int
amrwb_probe
(
AVProbeData
*
p
)
{
int
mode
,
i
=
0
,
valid
=
0
;
const
uint8_t
*
b
=
p
->
buf
;
while
(
i
<
p
->
buf_size
)
{
mode
=
b
[
i
]
>>
3
&
0x0F
;
if
(
mode
<
10
&&
(
b
[
i
]
&
0x4
)
==
0x4
)
{
int
last
=
mode
;
int
size
=
amrwb_packed_size
[
mode
];
while
(
size
--
)
{
if
(
b
[
++
i
]
!=
last
)
break
;
last
=
b
[
i
];
}
if
(
size
>
0
)
{
valid
++
;
i
+=
size
;
}
}
else
{
valid
=
0
;
i
++
;
}
}
if
(
valid
>
100
)
return
AVPROBE_SCORE_EXTENSION
/
2
-
1
;
return
0
;
}
static
int
amrwb_read_header
(
AVFormatContext
*
s
)
{
AVStream
*
st
=
avformat_new_stream
(
s
,
NULL
);
if
(
!
st
)
return
AVERROR
(
ENOMEM
);
st
->
codecpar
->
codec_tag
=
MKTAG
(
's'
,
'a'
,
'w'
,
'b'
);
st
->
codecpar
->
codec_id
=
AV_CODEC_ID_AMR_WB
;
st
->
codecpar
->
sample_rate
=
16000
;
st
->
codecpar
->
channels
=
1
;
st
->
codecpar
->
channel_layout
=
AV_CH_LAYOUT_MONO
;
st
->
codecpar
->
codec_type
=
AVMEDIA_TYPE_AUDIO
;
avpriv_set_pts_info
(
st
,
64
,
1
,
16000
);
return
0
;
}
AVInputFormat
ff_amrwb_demuxer
=
{
.
name
=
"amrwb"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"raw AMR-WB"
),
.
priv_data_size
=
sizeof
(
AMRContext
),
.
read_probe
=
amrwb_probe
,
.
read_header
=
amrwb_read_header
,
.
read_packet
=
amr_read_packet
,
.
flags
=
AVFMT_GENERIC_INDEX
,
};
#endif
#if CONFIG_AMR_MUXER
AVOutputFormat
ff_amr_muxer
=
{
.
name
=
"amr"
,
...
...
libavformat/version.h
View file @
e06bdc3c
...
...
@@ -32,8 +32,8 @@
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
// Also please add any ticket numbers that you believe might be affected here
#define LIBAVFORMAT_VERSION_MAJOR 58
#define LIBAVFORMAT_VERSION_MINOR
0
#define LIBAVFORMAT_VERSION_MICRO 10
2
#define LIBAVFORMAT_VERSION_MINOR
1
#define LIBAVFORMAT_VERSION_MICRO 10
0
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \
...
...
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