summaryrefslogtreecommitdiff
path: root/video_engine/overuse_frame_detector.h
diff options
context:
space:
mode:
authormflodman@webrtc.org <mflodman@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2013-07-31 16:42:21 +0000
committermflodman@webrtc.org <mflodman@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2013-07-31 16:42:21 +0000
commitcb9a72be76527005fc1ad580dd9a31e3d0e779f9 (patch)
tree0de8b2f1642422274e41659e40b88143a2170fdc /video_engine/overuse_frame_detector.h
parent5ce8723c44a01c5bfb616ca4667a6537d420b4d4 (diff)
downloadwebrtc-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.h47
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);
};