106e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org/*
206e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
306e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org *
406e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org *  Use of this source code is governed by a BSD-style license
506e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org *  that can be found in the LICENSE file in the root of the source
606e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org *  tree. An additional intellectual property rights grant can be found
706e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org *  in the file PATENTS.  All contributing project authors may
806e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
906e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org */
1006e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org
1124e2089750e9e51228b82d6c7ebf4fa064c797bapbos@webrtc.org// TODO(pbos): Move Config from common.h to here.
1224e2089750e9e51228b82d6c7ebf4fa064c797bapbos@webrtc.org
13f0a119fa99a8c384c30f3eb049c54091a6a1a828pbos@webrtc.org#ifndef WEBRTC_CONFIG_H_
14f0a119fa99a8c384c30f3eb049c54091a6a1a828pbos@webrtc.org#define WEBRTC_CONFIG_H_
1506e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org
1606e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org#include <string>
17041d54b43f73c165e9bd99c301f0156076a9fbf3pbos@webrtc.org#include <vector>
1806e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org
1949812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org#include "webrtc/common_types.h"
20346dbe7602f3837bcb62c9811d31bd632131a3c9pbos@webrtc.org#include "webrtc/typedefs.h"
21346dbe7602f3837bcb62c9811d31bd632131a3c9pbos@webrtc.org
2206e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.orgnamespace webrtc {
2306e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org
2406e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.orgstruct RtpStatistics {
25b2d1a403cddd14480ac727b19c60a5689c265f9epbos@webrtc.org  RtpStatistics()
26b2d1a403cddd14480ac727b19c60a5689c265f9epbos@webrtc.org      : ssrc(0),
27b2d1a403cddd14480ac727b19c60a5689c265f9epbos@webrtc.org        fraction_loss(0),
28b2d1a403cddd14480ac727b19c60a5689c265f9epbos@webrtc.org        cumulative_loss(0),
29b2d1a403cddd14480ac727b19c60a5689c265f9epbos@webrtc.org        extended_max_sequence_number(0) {}
3006e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  uint32_t ssrc;
3106e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  int fraction_loss;
3206e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  int cumulative_loss;
3306e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  int extended_max_sequence_number;
3406e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org};
3506e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org
3649812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.orgstruct StreamStats {
3755b0f2e500fac8fc0932ea5b60359d268371f8c5stefan@webrtc.org  StreamStats()
3855b0f2e500fac8fc0932ea5b60359d268371f8c5stefan@webrtc.org      : key_frames(0),
3955b0f2e500fac8fc0932ea5b60359d268371f8c5stefan@webrtc.org        delta_frames(0),
4055b0f2e500fac8fc0932ea5b60359d268371f8c5stefan@webrtc.org        bitrate_bps(0),
4155b0f2e500fac8fc0932ea5b60359d268371f8c5stefan@webrtc.org        avg_delay_ms(0),
4255b0f2e500fac8fc0932ea5b60359d268371f8c5stefan@webrtc.org        max_delay_ms(0) {}
4349812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  uint32_t key_frames;
4449812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  uint32_t delta_frames;
4549812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  int32_t bitrate_bps;
4655b0f2e500fac8fc0932ea5b60359d268371f8c5stefan@webrtc.org  int avg_delay_ms;
4755b0f2e500fac8fc0932ea5b60359d268371f8c5stefan@webrtc.org  int max_delay_ms;
4849812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  StreamDataCounters rtp_stats;
4949812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  RtcpStatistics rtcp_stats;
5049812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org};
5149812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
5206e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org// Settings for NACK, see RFC 4585 for details.
5306e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.orgstruct NackConfig {
54b2d1a403cddd14480ac727b19c60a5689c265f9epbos@webrtc.org  NackConfig() : rtp_history_ms(0) {}
5506e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  // Send side: the time RTP packets are stored for retransmissions.
5606e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  // Receive side: the time the receiver is prepared to wait for
5706e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  // retransmissions.
58b2d1a403cddd14480ac727b19c60a5689c265f9epbos@webrtc.org  // Set to '0' to disable.
5906e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  int rtp_history_ms;
6006e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org};
6106e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org
6206e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org// Settings for forward error correction, see RFC 5109 for details. Set the
6306e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org// payload types to '-1' to disable.
6406e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.orgstruct FecConfig {
65b2d1a403cddd14480ac727b19c60a5689c265f9epbos@webrtc.org  FecConfig() : ulpfec_payload_type(-1), red_payload_type(-1) {}
667e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  std::string ToString() const;
6706e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  // Payload type used for ULPFEC packets.
6806e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  int ulpfec_payload_type;
6906e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org
7006e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  // Payload type used for RED packets.
7106e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  int red_payload_type;
7206e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org};
7306e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org
7406e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org// RTP header extension to use for the video stream, see RFC 5285.
7506e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.orgstruct RtpExtension {
76f0a119fa99a8c384c30f3eb049c54091a6a1a828pbos@webrtc.org  RtpExtension(const std::string& name, int id) : name(name), id(id) {}
777e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  std::string ToString() const;
78f0a119fa99a8c384c30f3eb049c54091a6a1a828pbos@webrtc.org  static bool IsSupported(const std::string& name);
79f0a119fa99a8c384c30f3eb049c54091a6a1a828pbos@webrtc.org
807e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  static const char* kTOffset;
817e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  static const char* kAbsSendTime;
8206e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  std::string name;
8306e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  int id;
8406e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org};
857e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org
867e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.orgstruct VideoStream {
877e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  VideoStream()
887e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org      : width(0),
897e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org        height(0),
907e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org        max_framerate(-1),
917e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org        min_bitrate_bps(-1),
927e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org        target_bitrate_bps(-1),
937e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org        max_bitrate_bps(-1),
947e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org        max_qp(-1) {}
957e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  std::string ToString() const;
967e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org
977e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  size_t width;
987e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  size_t height;
997e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  int max_framerate;
1007e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org
1017e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  int min_bitrate_bps;
1027e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  int target_bitrate_bps;
1037e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  int max_bitrate_bps;
1047e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org
1057e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  int max_qp;
1067e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org
1077e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  // Bitrate thresholds for enabling additional temporal layers.
1087e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  std::vector<int> temporal_layers;
1097e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org};
1107e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org
11158b5140b7535ae66c618cc64b0a955b8d47cc86cpbos@webrtc.orgstruct VideoEncoderConfig {
11258b5140b7535ae66c618cc64b0a955b8d47cc86cpbos@webrtc.org  enum ContentType {
11358b5140b7535ae66c618cc64b0a955b8d47cc86cpbos@webrtc.org    kRealtimeVideo,
11458b5140b7535ae66c618cc64b0a955b8d47cc86cpbos@webrtc.org    kScreenshare,
11558b5140b7535ae66c618cc64b0a955b8d47cc86cpbos@webrtc.org  };
11658b5140b7535ae66c618cc64b0a955b8d47cc86cpbos@webrtc.org
11758b5140b7535ae66c618cc64b0a955b8d47cc86cpbos@webrtc.org  VideoEncoderConfig()
11858b5140b7535ae66c618cc64b0a955b8d47cc86cpbos@webrtc.org      : content_type(kRealtimeVideo), encoder_specific_settings(NULL) {}
11958b5140b7535ae66c618cc64b0a955b8d47cc86cpbos@webrtc.org
12058b5140b7535ae66c618cc64b0a955b8d47cc86cpbos@webrtc.org  std::vector<VideoStream> streams;
12158b5140b7535ae66c618cc64b0a955b8d47cc86cpbos@webrtc.org  ContentType content_type;
12258b5140b7535ae66c618cc64b0a955b8d47cc86cpbos@webrtc.org  void* encoder_specific_settings;
12358b5140b7535ae66c618cc64b0a955b8d47cc86cpbos@webrtc.org};
12458b5140b7535ae66c618cc64b0a955b8d47cc86cpbos@webrtc.org
12506e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org}  // namespace webrtc
12606e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org
127f0a119fa99a8c384c30f3eb049c54091a6a1a828pbos@webrtc.org#endif  // WEBRTC_CONFIG_H_
128