FFmpeg
4.0
libavformat
rtpenc_vp9.c
Go to the documentation of this file.
1
/*
2
* RTP packetizer for VP9 payload format (draft version 02) - experimental
3
* Copyright (c) 2016 Thomas Volkert <thomas@netzeal.de>
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
#define RTP_VP9_DESC_REQUIRED_SIZE 1
25
26
void
ff_rtp_send_vp9
(
AVFormatContext
*
ctx
,
const
uint8_t
*
buf
,
int
size
)
27
{
28
RTPMuxContext
*
rtp_ctx
= ctx->
priv_data
;
29
int
len
;
30
31
rtp_ctx->
timestamp
= rtp_ctx->
cur_timestamp
;
32
rtp_ctx->
buf_ptr
= rtp_ctx->
buf
;
33
34
/* mark the first fragment */
35
*rtp_ctx->
buf_ptr
++ = 0x08;
36
37
while
(size > 0) {
38
len =
FFMIN
(size, rtp_ctx->
max_payload_size
-
RTP_VP9_DESC_REQUIRED_SIZE
);
39
40
if
(len == size) {
41
/* mark the last fragment */
42
rtp_ctx->
buf
[0] |= 0x04;
43
}
44
45
memcpy(rtp_ctx->
buf_ptr
, buf, len);
46
ff_rtp_send_data
(ctx, rtp_ctx->
buf
, len +
RTP_VP9_DESC_REQUIRED_SIZE
, size == len);
47
48
size -=
len
;
49
buf +=
len
;
50
51
/* clear the end bit */
52
rtp_ctx->
buf
[0] &= ~0x08;
53
}
54
}
size
int size
Definition:
twinvq_data.h:11134
RTPMuxContext::max_payload_size
int max_payload_size
Definition:
rtpenc.h:38
RTP_VP9_DESC_REQUIRED_SIZE
#define RTP_VP9_DESC_REQUIRED_SIZE
Definition:
rtpenc_vp9.c:24
AVFormatContext
Format I/O context.
Definition:
avformat.h:1342
uint8_t
uint8_t
Definition:
audio_convert.c:194
RTPMuxContext::buf
uint8_t * buf
Definition:
rtpenc.h:49
rtpenc.h
FFMIN
#define FFMIN(a, b)
Definition:
common.h:96
ff_rtp_send_data
void ff_rtp_send_data(AVFormatContext *s1, const uint8_t *buf1, int len, int m)
Definition:
rtpenc.c:332
RTPMuxContext
Definition:
rtpenc.h:27
ctx
AVFormatContext * ctx
Definition:
movenc.c:48
RTPMuxContext::cur_timestamp
uint32_t cur_timestamp
Definition:
rtpenc.h:37
ff_rtp_send_vp9
void ff_rtp_send_vp9(AVFormatContext *ctx, const uint8_t *buf, int size)
Definition:
rtpenc_vp9.c:26
buf
void * buf
Definition:
avisynth_c.h:690
RTPMuxContext::buf_ptr
uint8_t * buf_ptr
Definition:
rtpenc.h:50
RTPMuxContext::timestamp
uint32_t timestamp
Definition:
rtpenc.h:35
len
int len
Definition:
vorbis_enc_data.h:452
AVFormatContext::priv_data
void * priv_data
Format private data.
Definition:
avformat.h:1370
MuxChain::rtp_ctx
AVFormatContext * rtp_ctx
Definition:
rtpenc_mpegts.c:28
Generated on Tue May 22 2018 07:06:57 for FFmpeg by
1.8.13