// Copyright 2013 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.

#include "media/cast/cast_config.h"

namespace cobalt {
namespace media {
namespace cast {

VideoCodecParams::VideoCodecParams()
    : max_qp(kDefaultMaxQp),
      min_qp(kDefaultMinQp),
      max_cpu_saver_qp(kDefaultMaxCpuSaverQp),
      max_number_of_video_buffers_used(kDefaultNumberOfVideoBuffers),
      number_of_encode_threads(1) {}

VideoCodecParams::VideoCodecParams(const VideoCodecParams& other) = default;

VideoCodecParams::~VideoCodecParams() {}

// TODO(miu): Provide IsValidConfig() functions?

FrameSenderConfig::FrameSenderConfig()
    : sender_ssrc(0),
      receiver_ssrc(0),
      min_playout_delay(
          base::TimeDelta::FromMilliseconds(kDefaultRtpMaxDelayMs)),
      max_playout_delay(
          base::TimeDelta::FromMilliseconds(kDefaultRtpMaxDelayMs)),
      animated_playout_delay(min_playout_delay),
      rtp_payload_type(RtpPayloadType::UNKNOWN),
      use_external_encoder(false),
      rtp_timebase(0),
      channels(0),
      max_bitrate(0),
      min_bitrate(0),
      start_bitrate(0),
      max_frame_rate(kDefaultMaxFrameRate),
      codec(CODEC_UNKNOWN) {}

FrameSenderConfig::FrameSenderConfig(const FrameSenderConfig& other) = default;

FrameSenderConfig::~FrameSenderConfig() {}

FrameReceiverConfig::FrameReceiverConfig()
    : receiver_ssrc(0),
      sender_ssrc(0),
      rtp_max_delay_ms(kDefaultRtpMaxDelayMs),
      rtp_payload_type(RtpPayloadType::UNKNOWN),
      rtp_timebase(0),
      channels(0),
      target_frame_rate(0),
      codec(CODEC_UNKNOWN) {}

FrameReceiverConfig::FrameReceiverConfig(const FrameReceiverConfig& other) =
    default;

FrameReceiverConfig::~FrameReceiverConfig() {}

}  // namespace cast
}  // namespace media
}  // namespace cobalt
