// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef MEDIA_CAPTURE_CAPTURE_RESOLUTION_CHOOSER_H_ #define MEDIA_CAPTURE_CAPTURE_RESOLUTION_CHOOSER_H_ #include "media/base/media_export.h" #include "media/base/video_capture_types.h" #include "ui/gfx/geometry/size.h" namespace media { // Encapsulates the logic that determines the capture frame resolution based on: // 1. The configured maximum frame resolution and resolution change policy. // 2. The resolution of the source content. // 3. The current capabilities of the end-to-end system, in terms of the // maximum number of pixels per frame. class MEDIA_EXPORT CaptureResolutionChooser { public: // media::ResolutionChangePolicy determines whether the variable frame // resolutions being computed must adhere to a fixed aspect ratio or not, or // that there must only be a single fixed resolution. CaptureResolutionChooser( const gfx::Size& max_frame_size, ResolutionChangePolicy resolution_change_policy); ~CaptureResolutionChooser(); // Returns the current capture frame resolution to use. gfx::Size capture_size() const { return capture_size_; } // Updates the capture size based on a change in the resolution of the source // content. void SetSourceSize(const gfx::Size& source_size); private: // Called after any update that requires |capture_size_| be re-computed. void RecomputeCaptureSize(); // Hard constraints. const gfx::Size max_frame_size_; const gfx::Size min_frame_size_; // Computed from the ctor arguments. // Specifies the set of heuristics to use. const ResolutionChangePolicy resolution_change_policy_; // The capture frame resolution to use, ignoring the limitations imposed by // the capability metric. gfx::Size constrained_size_; // The current computed capture frame resolution. gfx::Size capture_size_; }; } // namespace media #endif // MEDIA_CAPTURE_RESOLUTION_CHOOSER_H_