// Copyright 2017 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 REMOTING_CODEC_ENCODER_BITRATE_FILTER_H_ #define REMOTING_CODEC_ENCODER_BITRATE_FILTER_H_ #include "remoting/base/weighted_samples.h" namespace remoting { // Receives bandwidth estimations, frame size, etc and decide the best bitrate // for encoder. class EncoderBitrateFilter final { public: explicit EncoderBitrateFilter(int minimum_bitrate_kbps_per_megapixel); ~EncoderBitrateFilter(); void SetBandwidthEstimateKbps(int bandwidth_kbps); void SetFrameSize(int width, int height); int GetTargetBitrateKbps() const; private: const int minimum_bitrate_kbps_per_megapixel_; // This is the minimum number to avoid returning unreasonable value from // GetTargetBitrateKbps(). It roughly equals to the minimum bitrate of a 780 x // 512 screen for VP8, or 1024 x 558 screen for H264. int minimum_bitrate_kbps_ = 1000; WeightedSamples bandwidth_kbps_; int bitrate_kbps_ = minimum_bitrate_kbps_; }; } // namespace remoting #endif // REMOTING_CODEC_ENCODER_BITRATE_FILTER_H_