/*
 *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#include "modules/video_coding/utility/default_video_bitrate_allocator.h"

#include <stdint.h>

namespace webrtc {

DefaultVideoBitrateAllocator::DefaultVideoBitrateAllocator(
    const VideoCodec& codec)
    : codec_(codec) {}

DefaultVideoBitrateAllocator::~DefaultVideoBitrateAllocator() {}

VideoBitrateAllocation DefaultVideoBitrateAllocator::GetAllocation(
    uint32_t total_bitrate_bps,
    uint32_t framerate) {
  VideoBitrateAllocation allocation;
  if (total_bitrate_bps == 0 || !codec_.active)
    return allocation;

  if (total_bitrate_bps < codec_.minBitrate * 1000) {
    allocation.SetBitrate(0, 0, codec_.minBitrate * 1000);
  } else if (codec_.maxBitrate > 0 &&
             total_bitrate_bps > codec_.maxBitrate * 1000) {
    allocation.SetBitrate(0, 0, codec_.maxBitrate * 1000);
  } else {
    allocation.SetBitrate(0, 0, total_bitrate_bps);
  }
  return allocation;
}

}  // namespace webrtc
