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
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
Hide 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