/*
 *  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_INTER_FRAME_DELAY_H_
#define WEBRTC_MODULES_VIDEO_CODING_INTER_FRAME_DELAY_H_

#include "typedefs.h"

namespace webrtc
{

class VCMInterFrameDelay
{
public:
    VCMInterFrameDelay();

    // Resets the estimate. Zeros are given as parameters.
    void Reset();

    // Calculates the delay of a frame with the given timestamp.
    // This method is called when the frame is complete.
    //
    // Input:
    //          - timestamp         : RTP timestamp of a received frame
    //          - *delay            : Pointer to memory where the result should be stored
    //          - currentWallClock  : The current time in milliseconds.
    //                                Should be -1 for normal operation, only used for testing.
    // Return value                 : true if OK, false when reordered timestamps
    bool CalculateDelay(WebRtc_UWord32 timestamp,
                        WebRtc_Word64 *delay,
                        WebRtc_Word64 currentWallClock = -1);

    // Returns the current difference between incoming timestamps
    //
    // Return value                 : Wrap-around compensated difference between incoming
    //                                timestamps.
    WebRtc_UWord32 CurrentTimeStampDiffMs() const;

private:
    // Controls if the RTP timestamp counter has had a wrap around
    // between the current and the previously received frame.
    //
    // Input:
    //          - timestmap         : RTP timestamp of the current frame.
    void CheckForWrapArounds(WebRtc_UWord32 timestamp);

    WebRtc_Word64         _zeroWallClock; // Local timestamp of the first video packet received
    WebRtc_Word32         _wrapArounds;   // Number of wrapArounds detected
    // The previous timestamp passed to the delay estimate
    WebRtc_UWord32        _prevTimestamp;
    // The previous wall clock timestamp used by the delay estimate
    WebRtc_Word64         _prevWallClock;
    // Wrap-around compensated difference between incoming timestamps
    WebRtc_Word64         _dTS;
};

} // namespace webrtc

#endif // WEBRTC_MODULES_VIDEO_CODING_INTER_FRAME_DELAY_H_
