FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavformat
rtpdec_ilbc.c
Go to the documentation of this file.
1
/*
2
* RTP iLBC Depacketizer, RFC 3952
3
* Copyright (c) 2012 Martin Storsjo
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 "
avformat.h
"
23
#include "
rtpdec_formats.h
"
24
#include "
libavutil/avstring.h
"
25
26
static
int
ilbc_parse_fmtp
(
AVStream
*stream,
PayloadContext
*
data
,
27
char
*attr,
char
*
value
)
28
{
29
if
(!strcmp(attr,
"mode"
)) {
30
int
mode
= atoi(value);
31
switch
(mode) {
32
case
20:
33
stream->
codec
->
block_align
= 38;
34
break
;
35
case
30:
36
stream->
codec
->
block_align
= 50;
37
break
;
38
default
:
39
av_log
(
NULL
,
AV_LOG_ERROR
,
"Unsupported iLBC mode %d\n"
, mode);
40
return
AVERROR
(EINVAL);
41
}
42
}
43
return
0;
44
}
45
46
static
int
ilbc_parse_sdp_line
(
AVFormatContext
*s,
int
st_index,
47
PayloadContext
*
data
,
const
char
*
line
)
48
{
49
const
char
*p;
50
AVStream
*st;
51
52
if
(st_index < 0)
53
return
0;
54
st = s->
streams
[st_index];
55
56
if
(
av_strstart
(line,
"fmtp:"
, &p)) {
57
int
ret =
ff_parse_fmtp
(st, data, p,
ilbc_parse_fmtp
);
58
if
(ret < 0)
59
return
ret;
60
if
(!st->
codec
->
block_align
) {
61
av_log
(s,
AV_LOG_ERROR
,
"No iLBC mode set\n"
);
62
return
AVERROR
(EINVAL);
63
}
64
}
65
return
0;
66
}
67
68
RTPDynamicProtocolHandler
ff_ilbc_dynamic_handler
= {
69
.
enc_name
=
"iLBC"
,
70
.codec_type =
AVMEDIA_TYPE_AUDIO
,
71
.codec_id =
AV_CODEC_ID_ILBC
,
72
.parse_sdp_a_line =
ilbc_parse_sdp_line
,
73
};
Generated on Sat May 25 2013 03:58:48 for FFmpeg by
1.8.2