annotate oggparsespeex.c @ 4387:5c42816e12c6 libavformat

Add "AVFormatContext *ctx" (that being the RTSP demuxer's) as first argument to the parse_packet() function pointer in RTPDynamicProtocolHandlers. This allows these functions to peek back and retrieve values from the demuxer's context (or RTSPState). The ASF/RTP payload parser will use this to be able to parse SDP values (which occur even before the payload ID is given), store them in the RTSPState and then retrieve them while parsing payload data. See "[PATCH] RTSP-MS 13/15: add RTSP demuxer AVFormatContext to parse_packet() function pointer (was: transport context)" mailinglist thread.
author rbultje
date Fri, 06 Feb 2009 01:37:19 +0000
parents 6cd006bc2de9
children 6ab95f681099
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3023
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
1 /*
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
2 Copyright (C) 2008 Reimar Döffinger
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
3
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
4 Permission is hereby granted, free of charge, to any person
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
5 obtaining a copy of this software and associated documentation
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
6 files (the "Software"), to deal in the Software without
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
7 restriction, including without limitation the rights to use, copy,
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
8 modify, merge, publish, distribute, sublicense, and/or sell copies
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
9 of the Software, and to permit persons to whom the Software is
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
10 furnished to do so, subject to the following conditions:
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
11
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
12 The above copyright notice and this permission notice shall be
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
13 included in all copies or substantial portions of the Software.
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
14
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
16 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
17 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
18 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
19 HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
20 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
22 DEALINGS IN THE SOFTWARE.
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
23 **/
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
24
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
25 #include <stdlib.h>
3286
6f61c3b36632 Use full path for #includes from another directory.
diego
parents: 3023
diff changeset
26 #include "libavutil/bswap.h"
6f61c3b36632 Use full path for #includes from another directory.
diego
parents: 3023
diff changeset
27 #include "libavutil/avstring.h"
6f61c3b36632 Use full path for #includes from another directory.
diego
parents: 3023
diff changeset
28 #include "libavcodec/bitstream.h"
6f61c3b36632 Use full path for #includes from another directory.
diego
parents: 3023
diff changeset
29 #include "libavcodec/bytestream.h"
3023
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
30 #include "avformat.h"
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
31 #include "oggdec.h"
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
32
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
33 static int speex_header(AVFormatContext *s, int idx) {
4016
6cd006bc2de9 OGG: untypedef demuxer structs
mru
parents: 3770
diff changeset
34 struct ogg *ogg = s->priv_data;
6cd006bc2de9 OGG: untypedef demuxer structs
mru
parents: 3770
diff changeset
35 struct ogg_stream *os = ogg->streams + idx;
3023
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
36 AVStream *st = s->streams[idx];
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
37 uint8_t *p = os->buf + os->pstart;
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
38
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
39 if (os->psize < 80)
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
40 return 1;
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
41
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
42 st->codec->codec_type = CODEC_TYPE_AUDIO;
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
43 st->codec->codec_id = CODEC_ID_SPEEX;
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
44
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
45 st->codec->sample_rate = AV_RL32(p + 36);
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
46 st->codec->channels = AV_RL32(p + 48);
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
47 st->codec->extradata_size = os->psize;
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
48 st->codec->extradata = av_malloc(st->codec->extradata_size);
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
49 memcpy(st->codec->extradata, p, st->codec->extradata_size);
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
50
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
51 st->time_base.num = 1;
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
52 st->time_base.den = st->codec->sample_rate;
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
53
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
54 return 0;
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
55 }
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
56
4016
6cd006bc2de9 OGG: untypedef demuxer structs
mru
parents: 3770
diff changeset
57 const struct ogg_codec ff_speex_codec = {
3023
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
58 .magic = "Speex ",
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
59 .magicsize = 8,
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
60 .header = speex_header
61ea9e6ee162 Add support for speex in ogg
reimar
parents:
diff changeset
61 };