FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavformat
boadec.c
Go to the documentation of this file.
1
/*
2
* Black ops audio demuxer
3
* Copyright (c) 2013 Michael Niedermayer
4
*
5
* This file is part of FFmpeg.
6
*
7
* FFmpeg is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2.1 of the License, or (at your option) any later version.
11
*
12
* FFmpeg is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
16
*
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with FFmpeg; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
22
#include "
libavutil/intreadwrite.h
"
23
#include "
avformat.h
"
24
#include "
internal.h
"
25
26
static
int
probe
(
AVProbeData
*p)
27
{
28
if
(p->
buf_size
< 2096)
29
return
0;
30
if
(
AV_RL32
(p->
buf
) != 1
31
||
AV_RL32
(p->
buf
+ 8) > 100000
32
||
AV_RL32
(p->
buf
+ 12) > 8
33
||
AV_RL32
(p->
buf
+ 16) != 2096
34
||!
AV_RL32
(p->
buf
+ 21)
35
||
AV_RL16
(p->
buf
+ 25) != 2096
36
||
AV_RL32
(p->
buf
+ 48) %
AV_RL32
(p->
buf
+ 21)
37
)
38
return
0;
39
return
AVPROBE_SCORE_EXTENSION
;
40
}
41
42
43
static
int
read_header
(
AVFormatContext
*
s
)
44
{
45
AVStream
*st =
avformat_new_stream
(s,
NULL
);
46
if
(!st)
47
return
AVERROR
(ENOMEM);
48
49
st->
codec
->
codec_type
=
AVMEDIA_TYPE_AUDIO
;
50
st->
codec
->
codec_id
=
AV_CODEC_ID_ADPCM_MS
;
51
52
avio_rl32
(s->
pb
);
53
avio_rl32
(s->
pb
);
54
st->
codec
->
sample_rate
=
avio_rl32
(s->
pb
);
55
st->
codec
->
channels
=
avio_rl32
(s->
pb
);
56
s->
internal
->
data_offset
=
avio_rl32
(s->
pb
);
57
avio_r8
(s->
pb
);
58
st->
codec
->
block_align
= st->
codec
->
channels
*
avio_rl32
(s->
pb
);
59
60
avio_seek
(s->
pb
, s->
internal
->
data_offset
, SEEK_SET);
61
62
return
0;
63
}
64
65
static
int
read_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
)
66
{
67
AVStream
*st = s->
streams
[0];
68
69
return
av_get_packet
(s->
pb
, pkt, st->
codec
->
block_align
);
70
}
71
72
AVInputFormat
ff_boa_demuxer
= {
73
.
name
=
"boa"
,
74
.long_name =
NULL_IF_CONFIG_SMALL
(
"Black Ops Audio"
),
75
.read_probe =
probe
,
76
.read_header =
read_header
,
77
.read_packet =
read_packet
,
78
.flags =
AVFMT_GENERIC_INDEX
,
79
};
Generated on Sun Mar 8 2015 02:35:09 for FFmpeg by
1.8.2