1/*
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
11#ifndef WEBRTC_MODULES_VIDEO_CODING_JITTER_BUFFER_COMMON_H_
12#define WEBRTC_MODULES_VIDEO_CODING_JITTER_BUFFER_COMMON_H_
13
14#include "webrtc/typedefs.h"
15
16namespace webrtc {
17
18// Used to estimate rolling average of packets per frame.
19static const float kFastConvergeMultiplier = 0.4f;
20static const float kNormalConvergeMultiplier = 0.2f;
21
22enum { kMaxNumberOfFrames = 300 };
23enum { kStartNumberOfFrames = 6 };
24enum { kMaxVideoDelayMs = 10000 };
25enum { kPacketsPerFrameMultiplier = 5 };
26enum { kFastConvergeThreshold = 5 };
27
28enum VCMJitterBufferEnum {
29  kMaxConsecutiveOldFrames = 60,
30  kMaxConsecutiveOldPackets = 300,
31  // TODO(sprang): Reduce this limit once codecs don't sometimes wildly
32  // overshoot bitrate target.
33  kMaxPacketsInSession = 1400,      // Allows ~2MB frames.
34  kBufferIncStepSizeBytes = 30000,  // >20 packets.
35  kMaxJBFrameSizeBytes = 4000000    // sanity don't go above 4Mbyte.
36};
37
38enum VCMFrameBufferEnum {
39  kOutOfBoundsPacket = -7,
40  kNotInitialized = -6,
41  kOldPacket = -5,
42  kGeneralError = -4,
43  kFlushIndicator = -3,  // Indicator that a flush has occurred.
44  kTimeStampError = -2,
45  kSizeError = -1,
46  kNoError = 0,
47  kIncomplete = 1,        // Frame incomplete.
48  kCompleteSession = 3,   // at least one layer in the frame complete.
49  kDecodableSession = 4,  // Frame incomplete, but ready to be decoded
50  kDuplicatePacket = 5    // We're receiving a duplicate packet.
51};
52
53enum VCMFrameBufferStateEnum {
54  kStateEmpty,       // frame popped by the RTP receiver
55  kStateIncomplete,  // frame that have one or more packet(s) stored
56  kStateComplete,    // frame that have all packets
57  kStateDecodable    // Hybrid mode - frame can be decoded
58};
59
60enum { kH264StartCodeLengthBytes = 4 };
61
62// Used to indicate if a received packet contain a complete NALU (or equivalent)
63enum VCMNaluCompleteness {
64  kNaluUnset = 0,     // Packet has not been filled.
65  kNaluComplete = 1,  // Packet can be decoded as is.
66  kNaluStart,         // Packet contain beginning of NALU
67  kNaluIncomplete,    // Packet is not beginning or end of NALU
68  kNaluEnd,           // Packet is the end of a NALU
69};
70}  // namespace webrtc
71
72#endif  // WEBRTC_MODULES_VIDEO_CODING_JITTER_BUFFER_COMMON_H_
73