Home | History | Annotate | Download | only in video_coding
      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