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 
16 namespace webrtc {
17 
18 // Used to estimate rolling average of packets per frame.
19 static const float kFastConvergeMultiplier = 0.4f;
20 static const float kNormalConvergeMultiplier = 0.2f;
21 
22 enum { kMaxNumberOfFrames = 300 };
23 enum { kStartNumberOfFrames = 6 };
24 enum { kMaxVideoDelayMs = 10000 };
25 enum { kPacketsPerFrameMultiplier = 5 };
26 enum { kFastConvergeThreshold = 5 };
27 
28 enum 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 
38 enum 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 
53 enum 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 
60 enum { kH264StartCodeLengthBytes = 4 };
61 
62 // Used to indicate if a received packet contain a complete NALU (or equivalent)
63 enum 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