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
adp.c
Go to the documentation of this file.
1
/*
2
* ADP demuxer
3
* Copyright (c) 2013 James Almer
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/channel_layout.h
"
23
#include "
libavutil/intreadwrite.h
"
24
#include "
avformat.h
"
25
#include "
internal.h
"
26
27
static
int
adp_probe
(
AVProbeData
*p)
28
{
29
int
i;
30
31
if
(p->
buf_size
< 32)
32
return
0;
33
34
for
(i = 0; i < p->
buf_size
- 3; i+=32)
35
if
(p->
buf
[i] != p->
buf
[i+2] || p->
buf
[i+1] != p->
buf
[i+3])
36
return
0;
37
38
return
p->
buf_size
< 260 ? 1 :
AVPROBE_SCORE_MAX
/ 4;
39
}
40
41
static
int
adp_read_header
(
AVFormatContext
*
s
)
42
{
43
AVStream
*st;
44
45
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_DTK
;
51
st->
codec
->
channel_layout
=
AV_CH_LAYOUT_STEREO
;
52
st->
codec
->
channels
= 2;
53
st->
codec
->
sample_rate
= 48000;
54
st->
start_time
= 0;
55
if
(s->
pb
->
seekable
)
56
st->
duration
=
av_get_audio_frame_duration
(st->
codec
,
avio_size
(s->
pb
));
57
58
avpriv_set_pts_info
(st, 64, 1, st->
codec
->
sample_rate
);
59
60
return
0;
61
}
62
63
static
int
adp_read_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
)
64
{
65
int
ret
,
size
= 1024;
66
67
if
(
url_feof
(s->
pb
))
68
return
AVERROR_EOF
;
69
70
ret =
av_get_packet
(s->
pb
, pkt, size);
71
72
if
(ret != size) {
73
if
(ret < 0) {
74
av_free_packet
(pkt);
75
return
ret
;
76
}
77
av_shrink_packet
(pkt, ret);
78
}
79
pkt->
stream_index
= 0;
80
81
return
ret
;
82
}
83
84
AVInputFormat
ff_adp_demuxer
= {
85
.
name
=
"adp"
,
86
.long_name =
NULL_IF_CONFIG_SMALL
(
"ADP"
),
87
.read_probe =
adp_probe
,
88
.read_header =
adp_read_header
,
89
.read_packet =
adp_read_packet
,
90
.extensions =
"adp,dtk"
,
91
};
Generated on Wed Jul 10 2013 23:48:11 for FFmpeg by
1.8.2