/*
 *  Copyright (c) 2013 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_UTILITY_MOCK_MOCK_FRAME_DROPPER_H_
#define WEBRTC_MODULES_VIDEO_CODING_UTILITY_MOCK_MOCK_FRAME_DROPPER_H_

#include <string>

#include "webrtc/modules/video_coding/utility/frame_dropper.h"
#include "webrtc/test/gmock.h"
#include "webrtc/typedefs.h"

namespace webrtc {

class MockFrameDropper : public FrameDropper {
 public:
  MOCK_METHOD0(Reset, void());
  MOCK_METHOD1(Enable, void(bool enable));
  MOCK_METHOD0(DropFrame, bool());
  MOCK_METHOD2(Fill, void(size_t frameSizeBytes, bool deltaFrame));
  MOCK_METHOD1(Leak, void(uint32_t inputFrameRate));
  MOCK_METHOD2(SetRates, void(float bitRate, float incoming_frame_rate));
  MOCK_CONST_METHOD1(ActualFrameRate, float(uint32_t inputFrameRate));
};

}  // namespace webrtc

#endif  // WEBRTC_MODULES_VIDEO_CODING_UTILITY_MOCK_MOCK_FRAME_DROPPER_H_
