// 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 media {
namespace cast {

// TODO(miu): Revisit code factoring of these structs.  There are a number of
// common elements between them all, so it might be reasonable to only have one
// or two structs; or, at least a common base class.

// TODO(miu): Make sure all POD members are initialized by ctors.  Policy
// decision: Reasonable defaults or use invalid placeholder values to expose
// unset members?

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

// TODO(miu): Throughout the code, there is a lot of copy-and-paste of the same
// calculations based on these config values.  So, why don't we add methods to
// these classes to centralize the logic?

VideoSenderConfig::VideoSenderConfig()
    : ssrc(0),
      incoming_feedback_ssrc(0),
      rtcp_interval(kDefaultRtcpIntervalMs),
      target_playout_delay(
          base::TimeDelta::FromMilliseconds(kDefaultRtpMaxDelayMs)),
      rtp_payload_type(0),
      use_external_encoder(false),
      width(0),
      height(0),
      congestion_control_back_off(kDefaultCongestionControlBackOff),
      max_bitrate(5000000),
      min_bitrate(1000000),
      start_bitrate(5000000),
      max_qp(kDefaultMaxQp),
      min_qp(kDefaultMinQp),
      max_frame_rate(kDefaultMaxFrameRate),
      max_number_of_video_buffers_used(kDefaultNumberOfVideoBuffers),
      codec(CODEC_VIDEO_VP8),
      number_of_encode_threads(1) {}

VideoSenderConfig::~VideoSenderConfig() {}

AudioSenderConfig::AudioSenderConfig()
    : ssrc(0),
      incoming_feedback_ssrc(0),
      rtcp_interval(kDefaultRtcpIntervalMs),
      target_playout_delay(
          base::TimeDelta::FromMilliseconds(kDefaultRtpMaxDelayMs)),
      rtp_payload_type(0),
      use_external_encoder(false),
      frequency(0),
      channels(0),
      bitrate(0),
      codec(CODEC_AUDIO_OPUS) {}

AudioSenderConfig::~AudioSenderConfig() {}

FrameReceiverConfig::FrameReceiverConfig()
    : feedback_ssrc(0),
      incoming_ssrc(0),
      rtcp_interval(kDefaultRtcpIntervalMs),
      rtp_max_delay_ms(kDefaultRtpMaxDelayMs),
      rtp_payload_type(0),
      frequency(0),
      channels(0),
      max_frame_rate(0),
      codec(CODEC_UNKNOWN) {}

FrameReceiverConfig::~FrameReceiverConfig() {}

}  // namespace cast
}  // namespace media
