Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(102)

Unified Diff: webrtc/media/base/videosourceinterface.h

Issue 2698203003: Update sink wants with ranges for both pixel count and frame rate.
Patch Set: Slightly updated sink wants merging in videobroadcaster Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/media/base/videosourceinterface.h
diff --git a/webrtc/media/base/videosourceinterface.h b/webrtc/media/base/videosourceinterface.h
index 0ea1c60abfa389e5bc236925e25d9bae74e2886d..7ac212bd7557edb5a5c6bb1558e504cfb3e282e6 100644
--- a/webrtc/media/base/videosourceinterface.h
+++ b/webrtc/media/base/videosourceinterface.h
@@ -26,14 +26,43 @@ struct VideoSinkWants {
// Tells the source that the sink only wants black frames.
bool black_frames = false;
- // Tells the source the maximum number of pixels the sink wants.
- rtc::Optional<int> max_pixel_count;
+ // Indicates a range some value should be constrained to, such as resolution
+ // (pixel count) or frame rate. It is up to the application code to make sure
+ // |min| <= |target| <= |max|.
+ struct Range {
+ Range()
+ : min(0), target(std::numeric_limits<uint32_t>::max()), max(target) {}
+ Range(uint32_t min, uint32_t target, uint32_t max)
+ : min(min), target(target), max(max) {}
+
+ // |min| = 0, indicates no lower bound.
+ uint32_t min;
+ // |target| = maxint by default - requesting highest option available.
+ uint32_t target;
+ // |max| = maxint, indicates to upper bound.
+ uint32_t max;
+ };
+
// Tells the source the desired number of pixels the sinks wants. This will
- // typically be used when stepping the resolution up again when conditions
- // have improved after an earlier downgrade. The source should select the
- // closest resolution to this pixel count, but if max_pixel_count is set, it
- // still sets the absolute upper bound.
- rtc::Optional<int> target_pixel_count;
+ // typically be used when stepping the resolution down or up again as resource
+ // constraints are imposed or lifted.
+ //
+ // For example, when stepping down resolution on CPU overuse, it's preferable
+ // to set the max just below the current resolution but the target to a
+ // resolution that it is assumed would result in a utilization the system can
+ // handle. The source should select a resolution as close to |target| as
+ // possible, but no higher than |max|. Then |min| limit can then be set so
+ // that user requested minimum resolution bounds aren't violated.
+ //
+ // Similarly, when stepping up again, the |min| limit can be set one higher
+ // than the current resolution, and |target| to something reasonably higher
+ // (probably matching the step size down). The |max| limit can be set to
+ // avoid too large input.
+ rtc::Optional<Range> pixel_count;
+
+ // These constraints work in just the same manner as the pixel_count ones, but
+ // instead of limiting resolution they limit the framerate.
+ rtc::Optional<Range> framerate_fps_;
};
template <typename VideoFrameT>

Powered by Google App Engine
This is Rietveld 408576698