2 * RTP iLBC Depacketizer, RFC 3952
3 * Copyright (c) 2012 Martin Storsjo
5 * This file is part of FFmpeg.
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.
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.
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
23 #include "rtpdec_formats.h"
24 #include "libavutil/avstring.h"
26 static int ilbc_parse_fmtp(AVFormatContext
*s
,
27 AVStream
*stream
, PayloadContext
*data
,
28 char *attr
, char *value
)
30 if (!strcmp(attr
, "mode")) {
31 int mode
= atoi(value
);
34 stream
->codec
->block_align
= 38;
37 stream
->codec
->block_align
= 50;
40 av_log(s
, AV_LOG_ERROR
, "Unsupported iLBC mode %d\n", mode
);
41 return AVERROR(EINVAL
);
47 static int ilbc_parse_sdp_line(AVFormatContext
*s
, int st_index
,
48 PayloadContext
*data
, const char *line
)
55 st
= s
->streams
[st_index
];
57 if (av_strstart(line
, "fmtp:", &p
)) {
58 int ret
= ff_parse_fmtp(s
, st
, data
, p
, ilbc_parse_fmtp
);
61 if (!st
->codec
->block_align
) {
62 av_log(s
, AV_LOG_ERROR
, "No iLBC mode set\n");
63 return AVERROR(EINVAL
);
69 RTPDynamicProtocolHandler ff_ilbc_dynamic_handler
= {
71 .codec_type
= AVMEDIA_TYPE_AUDIO
,
72 .codec_id
= AV_CODEC_ID_ILBC
,
73 .parse_sdp_a_line
= ilbc_parse_sdp_line
,