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_INTER_FRAME_DELAY_H_
     12 #define WEBRTC_MODULES_VIDEO_CODING_INTER_FRAME_DELAY_H_
     13 
     14 #include "webrtc/typedefs.h"
     15 
     16 namespace webrtc {
     17 
     18 class VCMInterFrameDelay {
     19  public:
     20   explicit VCMInterFrameDelay(int64_t currentWallClock);
     21 
     22   // Resets the estimate. Zeros are given as parameters.
     23   void Reset(int64_t currentWallClock);
     24 
     25   // Calculates the delay of a frame with the given timestamp.
     26   // This method is called when the frame is complete.
     27   //
     28   // Input:
     29   //          - timestamp         : RTP timestamp of a received frame
     30   //          - *delay            : Pointer to memory where the result should be
     31   //          stored
     32   //          - currentWallClock  : The current time in milliseconds.
     33   //                                Should be -1 for normal operation, only used
     34   //                                for testing.
     35   // Return value                 : true if OK, false when reordered timestamps
     36   bool CalculateDelay(uint32_t timestamp,
     37                       int64_t* delay,
     38                       int64_t currentWallClock);
     39 
     40   // Returns the current difference between incoming timestamps
     41   //
     42   // Return value                 : Wrap-around compensated difference between
     43   // incoming
     44   //                                timestamps.
     45   uint32_t CurrentTimeStampDiffMs() const;
     46 
     47  private:
     48   // Controls if the RTP timestamp counter has had a wrap around
     49   // between the current and the previously received frame.
     50   //
     51   // Input:
     52   //          - timestmap         : RTP timestamp of the current frame.
     53   void CheckForWrapArounds(uint32_t timestamp);
     54 
     55   int64_t _zeroWallClock;  // Local timestamp of the first video packet received
     56   int32_t _wrapArounds;    // Number of wrapArounds detected
     57   // The previous timestamp passed to the delay estimate
     58   uint32_t _prevTimestamp;
     59   // The previous wall clock timestamp used by the delay estimate
     60   int64_t _prevWallClock;
     61   // Wrap-around compensated difference between incoming timestamps
     62   int64_t _dTS;
     63 };
     64 
     65 }  // namespace webrtc
     66 
     67 #endif  // WEBRTC_MODULES_VIDEO_CODING_INTER_FRAME_DELAY_H_
     68