/*
 *  Copyright (c) 2014 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.
 */
#ifndef TEST_ENCODER_SETTINGS_H_
#define TEST_ENCODER_SETTINGS_H_

#include <stddef.h>

#include <string>
#include <vector>

#include "api/video_codecs/video_encoder_config.h"
#include "call/video_receive_stream.h"
#include "call/video_send_stream.h"

namespace webrtc {
namespace test {

class DefaultVideoStreamFactory
    : public VideoEncoderConfig::VideoStreamFactoryInterface {
 public:
  DefaultVideoStreamFactory();

  static const size_t kMaxNumberOfStreams = 3;
  // Defined as {150000, 450000, 1500000};
  static const int kMaxBitratePerStream[];
  // Defined as {50000, 200000, 700000};
  static const int kDefaultMinBitratePerStream[];

 private:
  std::vector<VideoStream> CreateEncoderStreams(
      int width,
      int height,
      const VideoEncoderConfig& encoder_config) override;
};

// Creates `encoder_config.number_of_streams` VideoStreams where index
// `encoder_config.number_of_streams -1` have width = `width`, height =
// `height`. The total max bitrate of all VideoStreams is
// `encoder_config.max_bitrate_bps`.
std::vector<VideoStream> CreateVideoStreams(
    int width,
    int height,
    const webrtc::VideoEncoderConfig& encoder_config);

void FillEncoderConfiguration(VideoCodecType codec_type,
                              size_t num_streams,
                              VideoEncoderConfig* configuration);

VideoReceiveStream::Decoder CreateMatchingDecoder(
    int payload_type,
    const std::string& payload_name);

VideoReceiveStream::Decoder CreateMatchingDecoder(
    const VideoSendStream::Config& config);
}  // namespace test
}  // namespace webrtc

#endif  // TEST_ENCODER_SETTINGS_H_
