FFmpeg
Loading...
Searching...
No Matches
libavformat
rtpenc_latm.c
Go to the documentation of this file.
1
/*
2
* RTP Packetization of MPEG-4 Audio (RFC 3016)
3
* Copyright (c) 2011 Juan Carlos Rodriguez <ing.juancarlosrodriguez@hotmail.com>
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 "
rtpenc.h
"
24
25
void
ff_rtp_send_latm
(
AVFormatContext
*s1,
const
uint8_t *buff,
int
size
)
26
{
27
/* MP4A-LATM
28
* The RTP payload format specification is described in RFC 3016
29
* The encoding specifications are provided in ISO/IEC 14496-3 */
30
31
RTPMuxContext
*
s
= s1->
priv_data
;
32
int
header_size;
33
int
offset
= 0;
34
int
len
= 0;
35
36
/* PayloadLengthInfo() */
37
header_size =
size
/0xFF + 1;
38
if
(header_size >=
s
->max_payload_size) {
39
av_log
(s1,
AV_LOG_ERROR
,
"LATM length header of %d bytes does not fit "
40
"the RTP payload of %d bytes\n"
, header_size,
s
->max_payload_size);
41
return
;
42
}
43
memset(
s
->buf, 0xFF, header_size - 1);
44
s
->buf[header_size - 1] =
size
% 0xFF;
45
46
s
->timestamp =
s
->cur_timestamp;
47
48
/* PayloadMux() */
49
while
(
size
> 0) {
50
len
=
FFMIN
(
size
,
s
->max_payload_size - (!
offset
? header_size : 0));
51
size
-=
len
;
52
if
(!
offset
) {
53
memcpy(
s
->buf + header_size, buff,
len
);
54
ff_rtp_send_data
(s1,
s
->buf, header_size +
len
, !
size
);
55
}
else
{
56
ff_rtp_send_data
(s1, buff +
offset
,
len
, !
size
);
57
}
58
offset
+=
len
;
59
}
60
}
avformat.h
Main libavformat public API header.
s
#define s(width, name)
Definition
cbs_vp9.c:198
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition
log.h:210
offset
unsigned offset
Definition
libaomenc.c:763
FFMIN
#define FFMIN(a, b)
Definition
macros.h:49
ff_rtp_send_data
void ff_rtp_send_data(AVFormatContext *s1, const uint8_t *buf1, int len, int m)
Definition
rtpenc.c:364
rtpenc.h
ff_rtp_send_latm
void ff_rtp_send_latm(AVFormatContext *s1, const uint8_t *buff, int size)
Definition
rtpenc_latm.c:25
AVFormatContext
Format I/O context.
Definition
avformat.h:1335
AVFormatContext::priv_data
void * priv_data
Format private data.
Definition
avformat.h:1363
RTPMuxContext
Definition
rtpenc.h:27
av_log
#define av_log(a,...)
Definition
tableprint_vlc.h:27
size
int size
Definition
twinvq_data.h:10344
len
int len
Definition
vorbis_enc_data.h:426
Generated on Mon Sep 28 2026 19:21:10 for FFmpeg by
1.13.2