blob: 89c00016cdc2a3e178d65a28047eea6362c64f43
1 | /* |
2 | * Copyright (c) 2015 Paul B Mahol |
3 | * |
4 | * This file is part of FFmpeg. |
5 | * |
6 | * FFmpeg is free software; you can redistribute it and/or |
7 | * modify it under the terms of the GNU Lesser General Public |
8 | * License as published by the Free Software Foundation; either |
9 | * version 2.1 of the License, or (at your option) any later version. |
10 | * |
11 | * FFmpeg is distributed in the hope that it will be useful, |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | * Lesser General Public License for more details. |
15 | * |
16 | * You should have received a copy of the GNU Lesser General Public |
17 | * License along with FFmpeg; if not, write to the Free Software |
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
19 | */ |
20 | |
21 | #include "avformat.h" |
22 | #include "internal.h" |
23 | #include "pcm.h" |
24 | |
25 | static int wve_probe(AVProbeData *p) |
26 | { |
27 | if (memcmp(p->buf, "ALawSoundFile**\0\017\020", 18) || |
28 | memcmp(p->buf + 22, "\0\0\0\1\0\0\0\0\0\0", 10)) |
29 | return 0; |
30 | return AVPROBE_SCORE_MAX; |
31 | } |
32 | |
33 | static int wve_read_header(AVFormatContext *s) |
34 | { |
35 | AVStream *st; |
36 | |
37 | st = avformat_new_stream(s, NULL); |
38 | if (!st) |
39 | return AVERROR(ENOMEM); |
40 | |
41 | avio_skip(s->pb, 18); |
42 | st->duration = avio_rb32(s->pb); |
43 | st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; |
44 | st->codecpar->codec_id = AV_CODEC_ID_PCM_ALAW; |
45 | st->codecpar->sample_rate = 8000; |
46 | st->codecpar->channels = 1; |
47 | st->codecpar->bits_per_coded_sample = av_get_bits_per_sample(st->codecpar->codec_id); |
48 | st->codecpar->block_align = st->codecpar->bits_per_coded_sample * st->codecpar->channels / 8; |
49 | avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); |
50 | avio_skip(s->pb, 10); |
51 | |
52 | return 0; |
53 | } |
54 | |
55 | AVInputFormat ff_wve_demuxer = { |
56 | .name = "wve", |
57 | .long_name = NULL_IF_CONFIG_SMALL("Psion 3 audio"), |
58 | .read_probe = wve_probe, |
59 | .read_header = wve_read_header, |
60 | .read_packet = ff_pcm_read_packet, |
61 | .read_seek = ff_pcm_read_seek, |
62 | }; |
63 |