3023
|
1 /*
|
|
2 Copyright (C) 2008 Reimar Döffinger
|
|
3
|
|
4 Permission is hereby granted, free of charge, to any person
|
|
5 obtaining a copy of this software and associated documentation
|
|
6 files (the "Software"), to deal in the Software without
|
|
7 restriction, including without limitation the rights to use, copy,
|
|
8 modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
9 of the Software, and to permit persons to whom the Software is
|
|
10 furnished to do so, subject to the following conditions:
|
|
11
|
|
12 The above copyright notice and this permission notice shall be
|
|
13 included in all copies or substantial portions of the Software.
|
|
14
|
|
15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
19 HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
20 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
22 DEALINGS IN THE SOFTWARE.
|
|
23 **/
|
|
24
|
|
25 #include <stdlib.h>
|
|
26 #include "avformat.h"
|
|
27 #include "bitstream.h"
|
|
28 #include "bytestream.h"
|
|
29 #include "bswap.h"
|
|
30 #include "oggdec.h"
|
|
31 #include "avstring.h"
|
|
32
|
|
33 static int speex_header(AVFormatContext *s, int idx) {
|
|
34 ogg_t *ogg = s->priv_data;
|
|
35 ogg_stream_t *os = ogg->streams + idx;
|
|
36 AVStream *st = s->streams[idx];
|
|
37 uint8_t *p = os->buf + os->pstart;
|
|
38
|
|
39 if (os->psize < 80)
|
|
40 return 1;
|
|
41
|
|
42 st->codec->codec_type = CODEC_TYPE_AUDIO;
|
|
43 st->codec->codec_id = CODEC_ID_SPEEX;
|
|
44
|
|
45 st->codec->sample_rate = AV_RL32(p + 36);
|
|
46 st->codec->channels = AV_RL32(p + 48);
|
|
47 st->codec->extradata_size = os->psize;
|
|
48 st->codec->extradata = av_malloc(st->codec->extradata_size);
|
|
49 memcpy(st->codec->extradata, p, st->codec->extradata_size);
|
|
50
|
|
51 st->time_base.num = 1;
|
|
52 st->time_base.den = st->codec->sample_rate;
|
|
53
|
|
54 return 0;
|
|
55 }
|
|
56
|
|
57 ogg_codec_t speex_codec = {
|
|
58 .magic = "Speex ",
|
|
59 .magicsize = 8,
|
|
60 .header = speex_header
|
|
61 };
|