|  | /* | 
|  | *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. | 
|  | * | 
|  | *  Use of this source code is governed by a BSD-style license | 
|  | *  that can be found in the LICENSE file in the root of the source | 
|  | *  tree. An additional intellectual property rights grant can be found | 
|  | *  in the file PATENTS.  All contributing project authors may | 
|  | *  be found in the AUTHORS file in the root of the source tree. | 
|  | */ | 
|  |  | 
|  | #ifndef WEBRTC_MODULES_VIDEO_CODING_JITTER_BUFFER_COMMON_H_ | 
|  | #define WEBRTC_MODULES_VIDEO_CODING_JITTER_BUFFER_COMMON_H_ | 
|  |  | 
|  | #include "webrtc/typedefs.h" | 
|  |  | 
|  | namespace webrtc { | 
|  |  | 
|  | // Used to estimate rolling average of packets per frame. | 
|  | static const float kFastConvergeMultiplier = 0.4f; | 
|  | static const float kNormalConvergeMultiplier = 0.2f; | 
|  |  | 
|  | enum { kMaxNumberOfFrames     = 300 }; | 
|  | enum { kStartNumberOfFrames   = 6 }; | 
|  | enum { kMaxVideoDelayMs       = 10000 }; | 
|  | enum { kPacketsPerFrameMultiplier = 5 }; | 
|  | enum { kFastConvergeThreshold = 5}; | 
|  |  | 
|  | enum VCMJitterBufferEnum { | 
|  | kMaxConsecutiveOldFrames = 60, | 
|  | kMaxConsecutiveOldPackets = 300, | 
|  | // TODO(sprang): Reduce this limit once codecs don't sometimes wildly | 
|  | // overshoot bitrate target. | 
|  | kMaxPacketsInSession = 1400,      // Allows ~2MB frames. | 
|  | kBufferIncStepSizeBytes = 30000,  // >20 packets. | 
|  | kMaxJBFrameSizeBytes = 4000000    // sanity don't go above 4Mbyte. | 
|  | }; | 
|  |  | 
|  | enum VCMFrameBufferEnum { | 
|  | kOutOfBoundsPacket    = -7, | 
|  | kNotInitialized       = -6, | 
|  | kOldPacket            = -5, | 
|  | kGeneralError         = -4, | 
|  | kFlushIndicator       = -3,   // Indicator that a flush has occurred. | 
|  | kTimeStampError       = -2, | 
|  | kSizeError            = -1, | 
|  | kNoError              = 0, | 
|  | kIncomplete           = 1,    // Frame incomplete. | 
|  | kCompleteSession      = 3,    // at least one layer in the frame complete. | 
|  | kDecodableSession     = 4,    // Frame incomplete, but ready to be decoded | 
|  | kDuplicatePacket      = 5     // We're receiving a duplicate packet. | 
|  | }; | 
|  |  | 
|  | enum VCMFrameBufferStateEnum { | 
|  | kStateEmpty,              // frame popped by the RTP receiver | 
|  | kStateIncomplete,         // frame that have one or more packet(s) stored | 
|  | kStateComplete,           // frame that have all packets | 
|  | kStateDecodable           // Hybrid mode - frame can be decoded | 
|  | }; | 
|  |  | 
|  | enum { kH264StartCodeLengthBytes = 4}; | 
|  |  | 
|  | // Used to indicate if a received packet contain a complete NALU (or equivalent) | 
|  | enum VCMNaluCompleteness { | 
|  | kNaluUnset = 0,       // Packet has not been filled. | 
|  | kNaluComplete = 1,    // Packet can be decoded as is. | 
|  | kNaluStart,           // Packet contain beginning of NALU | 
|  | kNaluIncomplete,      // Packet is not beginning or end of NALU | 
|  | kNaluEnd,             // Packet is the end of a NALU | 
|  | }; | 
|  | }  // namespace webrtc | 
|  |  | 
|  | #endif  // WEBRTC_MODULES_VIDEO_CODING_JITTER_BUFFER_COMMON_H_ |