/* * 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_VIDEO_ENGINE_OVERUSE_FRAME_DETECTOR_H_ #define WEBRTC_VIDEO_ENGINE_OVERUSE_FRAME_DETECTOR_H_ #include #include "webrtc/modules/interface/module.h" #include "webrtc/system_wrappers/interface/constructor_magic.h" #include "webrtc/system_wrappers/interface/scoped_ptr.h" namespace webrtc { class Clock; class CriticalSectionWrapper; class OveruseObserver { public: // Called when an overuse has been detected, based on the number of calls to // 'CapturedFrame' and 'EncodedFrame'. virtual void OveruseDetected() = 0; virtual ~OveruseObserver() {} }; // Use to detect system overuse based on the number of captured frames vs. the // number of encoded frames. class OveruseFrameDetector : public Module { public: OveruseFrameDetector(Clock* clock, OveruseObserver* observer); ~OveruseFrameDetector(); // Called for each new captured frame. void CapturedFrame(); // Called for every encoded frame. void EncodedFrame(); // Implements Module. virtual int32_t TimeUntilNextProcess(); virtual int32_t Process(); private: void CleanOldSamples(); // Protecting all members. scoped_ptr crit_; // Observer getting overuse reports. OveruseObserver* observer_; Clock* clock_; int64_t last_process_time_; // Capture time for frames. std::list capture_times_; // Start encode time for a frame. std::list encode_times_; DISALLOW_COPY_AND_ASSIGN(OveruseFrameDetector); }; } // namespace webrtc #endif // WEBRTC_VIDEO_ENGINE_OVERUSE_FRAME_DETECTOR_H_