Home | History | Annotate | Download | only in source
      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   kMaxPacketsInSession            = 800,
     32   kBufferIncStepSizeBytes         = 30000,   // >20 packets.
     33   kMaxJBFrameSizeBytes            = 4000000  // sanity don't go above 4Mbyte.
     34 };
     35 
     36 enum VCMFrameBufferEnum {
     37   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,
     45   kIncomplete           = 1,    // Frame incomplete.
     46   kCompleteSession      = 3,    // at least one layer in the frame complete.
     47   kDecodableSession     = 4,    // Frame incomplete, but ready to be decoded
     48   kDuplicatePacket      = 5     // We're receiving a duplicate packet.
     49 };
     50 
     51 enum VCMFrameBufferStateEnum {
     52   kStateEmpty,              // frame popped by the RTP receiver
     53   kStateIncomplete,         // frame that have one or more packet(s) stored
     54   kStateComplete,           // frame that have all packets
     55   kStateDecodable           // Hybrid mode - frame can be decoded
     56 };
     57 
     58 enum { kH264StartCodeLengthBytes = 4};
     59 
     60 // Used to indicate if a received packet contain a complete NALU (or equivalent)
     61 enum VCMNaluCompleteness {
     62   kNaluUnset = 0,       // Packet has not been filled.
     63   kNaluComplete = 1,    // Packet can be decoded as is.
     64   kNaluStart,           // Packet contain beginning of NALU
     65   kNaluIncomplete,      // Packet is not beginning or end of NALU
     66   kNaluEnd,             // Packet is the end of a NALU
     67 };
     68 }  // namespace webrtc
     69 
     70 #endif  // WEBRTC_MODULES_VIDEO_CODING_JITTER_BUFFER_COMMON_H_
     71