blob: 6ccfe3919954f8d09bb537e4ad91761efa51a09f [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef MODULES_VIDEO_CODING_JITTER_BUFFER_COMMON_H_
12#define MODULES_VIDEO_CODING_JITTER_BUFFER_COMMON_H_
niklase@google.com470e71d2011-07-07 08:21:25 +000013
mikhal@webrtc.org119c67d2013-01-31 17:18:02 +000014namespace webrtc {
niklase@google.com470e71d2011-07-07 08:21:25 +000015
agalusza@google.comd818dcb2013-07-29 21:48:11 +000016// Used to estimate rolling average of packets per frame.
17static const float kFastConvergeMultiplier = 0.4f;
18static const float kNormalConvergeMultiplier = 0.2f;
19
philipel9d3ab612015-12-21 04:12:39 -080020enum { kMaxNumberOfFrames = 300 };
21enum { kStartNumberOfFrames = 6 };
22enum { kMaxVideoDelayMs = 10000 };
agalusza@google.comd818dcb2013-07-29 21:48:11 +000023enum { kPacketsPerFrameMultiplier = 5 };
philipel9d3ab612015-12-21 04:12:39 -080024enum { kFastConvergeThreshold = 5 };
niklase@google.com470e71d2011-07-07 08:21:25 +000025
mikhal@webrtc.org119c67d2013-01-31 17:18:02 +000026enum VCMJitterBufferEnum {
sprang907dcfd2015-08-05 01:09:11 -070027 kMaxConsecutiveOldFrames = 60,
28 kMaxConsecutiveOldPackets = 300,
29 // TODO(sprang): Reduce this limit once codecs don't sometimes wildly
30 // overshoot bitrate target.
31 kMaxPacketsInSession = 1400, // Allows ~2MB frames.
32 kBufferIncStepSizeBytes = 30000, // >20 packets.
33 kMaxJBFrameSizeBytes = 4000000 // sanity don't go above 4Mbyte.
niklase@google.com470e71d2011-07-07 08:21:25 +000034};
35
mikhal@webrtc.org119c67d2013-01-31 17:18:02 +000036enum VCMFrameBufferEnum {
philipel9d3ab612015-12-21 04:12:39 -080037 kOutOfBoundsPacket = -7,
38 kNotInitialized = -6,
39 kOldPacket = -5,
40 kGeneralError = -4,
41 kFlushIndicator = -3, // Indicator that a flush has occurred.
42 kTimeStampError = -2,
43 kSizeError = -1,
44 kNoError = 0,
Jonas Olssona4d87372019-07-05 19:08:33 +020045 kIncomplete = 1, // Frame incomplete.
46 kCompleteSession = 3, // at least one layer in the frame complete.
47 kDuplicatePacket = 5 // We're receiving a duplicate packet.
niklase@google.com470e71d2011-07-07 08:21:25 +000048};
49
mikhal@webrtc.org119c67d2013-01-31 17:18:02 +000050enum VCMFrameBufferStateEnum {
philipel9d3ab612015-12-21 04:12:39 -080051 kStateEmpty, // frame popped by the RTP receiver
52 kStateIncomplete, // frame that have one or more packet(s) stored
53 kStateComplete, // frame that have all packets
niklase@google.com470e71d2011-07-07 08:21:25 +000054};
55
philipel9d3ab612015-12-21 04:12:39 -080056enum { kH264StartCodeLengthBytes = 4 };
mikhal@webrtc.org119c67d2013-01-31 17:18:02 +000057} // namespace webrtc
stefan@webrtc.org4c059d82011-10-13 07:35:37 +000058
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020059#endif // MODULES_VIDEO_CODING_JITTER_BUFFER_COMMON_H_