diff options
author | mflodman@webrtc.org <mflodman@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2013-07-31 16:42:21 +0000 |
---|---|---|
committer | mflodman@webrtc.org <mflodman@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2013-07-31 16:42:21 +0000 |
commit | cb9a72be76527005fc1ad580dd9a31e3d0e779f9 (patch) | |
tree | 0de8b2f1642422274e41659e40b88143a2170fdc /video_engine/overuse_frame_detector.h | |
parent | 5ce8723c44a01c5bfb616ca4667a6537d420b4d4 (diff) | |
download | webrtc-cb9a72be76527005fc1ad580dd9a31e3d0e779f9.tar.gz |
Adding possibility to use encoding time when trigger underuse for frame based overuse detection.
BUG=
TEST=Added unittest.
R=asapersson@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/1885004
git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@4452 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'video_engine/overuse_frame_detector.h')
-rw-r--r-- | video_engine/overuse_frame_detector.h | 47 |
1 files changed, 39 insertions, 8 deletions
diff --git a/video_engine/overuse_frame_detector.h b/video_engine/overuse_frame_detector.h index e382c7da..77722669 100644 --- a/video_engine/overuse_frame_detector.h +++ b/video_engine/overuse_frame_detector.h @@ -12,6 +12,8 @@ #define WEBRTC_VIDEO_ENGINE_OVERUSE_FRAME_DETECTOR_H_ #include <list> +#include <map> +#include <utility> #include "webrtc/modules/interface/module.h" #include "webrtc/system_wrappers/interface/constructor_magic.h" @@ -30,20 +32,39 @@ class OveruseFrameDetector : public Module { explicit OveruseFrameDetector(Clock* clock); ~OveruseFrameDetector(); + // Registers an observer receiving overuse and underuse callbacks. Set + // 'observer' to NULL to disable callbacks. void SetObserver(CpuOveruseObserver* observer); - // Called for each new captured frame. - void CapturedFrame(); + // TODO(mflodman): Move to another API? + // Enables usage of encode time to trigger normal usage after an overuse, + // default false. + void set_underuse_encode_timing_enabled(bool enable); + + // Called for each captured frame. + void FrameCaptured(); // Called for every encoded frame. - void EncodedFrame(); + void FrameEncoded(int64_t encode_time, size_t width, size_t height); // Implements Module. virtual int32_t TimeUntilNextProcess(); virtual int32_t Process(); private: - void CleanOldSamples(); + // All private functions are assumed to be critical section protected. + // Clear samples older than the overuse history. + void RemoveOldSamples(); + // Clears the entire history, including samples still affecting the + // calculations. + void RemoveAllSamples(); + int64_t CalculateAverageEncodeTime() const; + // Returns true and resets calculations and history if a new resolution is + // discovered, false otherwise. + bool MaybeResetResolution(size_t width, size_t height); + + bool IsOverusing(); + bool IsUnderusing(int64_t time_now); // Protecting all members. scoped_ptr<CriticalSectionWrapper> crit_; @@ -55,11 +76,21 @@ class OveruseFrameDetector : public Module { int64_t last_process_time_; int64_t last_callback_time_; - // Capture time for frames. + // Sorted list of times captured frames were delivered, oldest frame first. std::list<int64_t> capture_times_; - - // Start encode time for a frame. - std::list<int64_t> encode_times_; + // <Encode report time, time spent encoding the frame>. + typedef std::pair<int64_t, int64_t> EncodeTime; + // Sorted list with oldest frame first. + std::list<EncodeTime> encode_times_; + + // True if encode time should be considered to trigger an underuse. + bool underuse_encode_timing_enabled_; + // Number of pixels in the currently encoded resolution. + int num_pixels_; + // Maximum resolution encoded. + int max_num_pixels_; + // <number of pixels, average encode time triggering an overuse>. + std::map<int, int64_t> encode_overuse_times_; DISALLOW_COPY_AND_ASSIGN(OveruseFrameDetector); }; |