22
22
#include "rtpenc.h"
24
24
/* Based on a draft spec for VP8 RTP.
25
* ( http://www.webmproject.org/code/specs/rtp/ ) */
25
* ( http://tools.ietf.org/html/draft-ietf-payload-vp8-05 ) */
26
26
void ff_rtp_send_vp8(AVFormatContext *s1, const uint8_t *buf, int size)
28
28
RTPMuxContext *s = s1->priv_data;
29
int len, max_packet_size;
29
int len, max_packet_size, header_size;
31
31
s->buf_ptr = s->buf;
32
32
s->timestamp = s->cur_timestamp;
33
max_packet_size = s->max_payload_size - 1; // minus one for header byte
35
*s->buf_ptr++ = 1; // 0b1 indicates start of frame
34
// extended control bit set, reference frame, start of partition,
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;
37
44
len = FFMIN(size, max_packet_size);
39
46
memcpy(s->buf_ptr, buf, len);
40
ff_rtp_send_data(s1, s->buf, len+1, size == len); // marker bit is last packet in frame
47
// marker bit is last packet in frame
48
ff_rtp_send_data(s1, s->buf, len + header_size, size == len);
45
*s->buf_ptr++ = 0; // payload descriptor
52
// Clear the partition start bit, keep the rest of the header untouched