FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavformat
rtpenc_vp8.c
Go to the documentation of this file.
1
/*
2
* RTP VP8 Packetizer
3
* Copyright (c) 2010 Josh Allmann
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 "
rtpenc.h
"
23
24
/* Based on a draft spec for VP8 RTP.
25
* ( http://tools.ietf.org/html/draft-ietf-payload-vp8-05 ) */
26
void
ff_rtp_send_vp8
(
AVFormatContext
*
s1
,
const
uint8_t
*
buf
,
int
size
)
27
{
28
RTPMuxContext
*
s
= s1->
priv_data
;
29
int
len
, max_packet_size, header_size;
30
31
s->
buf_ptr
= s->
buf
;
32
s->
timestamp
= s->
cur_timestamp
;
33
34
// extended control bit set, reference frame, start of partition,
35
// partition id 0
36
*s->
buf_ptr
++ = 0x90;
37
*s->
buf_ptr
++ = 0x80;
// Picture id present
38
*s->
buf_ptr
++ = s->
frame_count
++ & 0x7f;
39
// Calculate the number of remaining bytes
40
header_size = s->
buf_ptr
- s->
buf
;
41
max_packet_size = s->
max_payload_size
- header_size;
42
43
while
(size > 0) {
44
len =
FFMIN
(size, max_packet_size);
45
46
memcpy(s->
buf_ptr
, buf, len);
47
// marker bit is last packet in frame
48
ff_rtp_send_data
(s1, s->
buf
, len + header_size, size == len);
49
50
size -=
len
;
51
buf +=
len
;
52
// Clear the partition start bit, keep the rest of the header untouched
53
s->
buf
[0] &= ~0x10;
54
}
55
}
Generated on Wed Jul 10 2013 23:48:14 for FFmpeg by
1.8.2