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
134988d94bf043d7dff95e7dcb6716e6f4b16f5460pbos@webrtc.org#ifndef WEBRTC_VIDEO_ENGINE_NEW_INCLUDE_CONFIG_H_
144988d94bf043d7dff95e7dcb6716e6f4b16f5460pbos@webrtc.org#define WEBRTC_VIDEO_ENGINE_NEW_INCLUDE_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  std::string c_name;
3506e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org};
3606e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org
3749812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.orgstruct StreamStats {
3849812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  StreamStats() : key_frames(0), delta_frames(0), bitrate_bps(0) {}
3949812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  uint32_t key_frames;
4049812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  uint32_t delta_frames;
4149812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  int32_t bitrate_bps;
4249812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  StreamDataCounters rtp_stats;
4349812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  RtcpStatistics rtcp_stats;
4449812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org};
4549812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
4606e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org// Settings for NACK, see RFC 4585 for details.
4706e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.orgstruct NackConfig {
48b2d1a403cddd14480ac727b19c60a5689c265f9epbos@webrtc.org  NackConfig() : rtp_history_ms(0) {}
4906e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  // Send side: the time RTP packets are stored for retransmissions.
5006e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  // Receive side: the time the receiver is prepared to wait for
5106e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  // retransmissions.
52b2d1a403cddd14480ac727b19c60a5689c265f9epbos@webrtc.org  // Set to '0' to disable.
5306e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  int rtp_history_ms;
5406e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org};
5506e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org
5606e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org// Settings for forward error correction, see RFC 5109 for details. Set the
5706e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org// payload types to '-1' to disable.
5806e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.orgstruct FecConfig {
59b2d1a403cddd14480ac727b19c60a5689c265f9epbos@webrtc.org  FecConfig() : ulpfec_payload_type(-1), red_payload_type(-1) {}
607e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  std::string ToString() const;
6106e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  // Payload type used for ULPFEC packets.
6206e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  int ulpfec_payload_type;
6306e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org
6406e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  // Payload type used for RED packets.
6506e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  int red_payload_type;
6606e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org};
6706e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org
6806e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org// RTP header extension to use for the video stream, see RFC 5285.
6906e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.orgstruct RtpExtension {
70990c5e3b4fcbb8d73d13306ccca45ab74770d1b2pbos@webrtc.org  RtpExtension(const char* name, int id) : name(name), id(id) {}
717e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  std::string ToString() const;
7206e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  // TODO(mflodman) Add API to query supported extensions.
737e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  static const char* kTOffset;
747e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  static const char* kAbsSendTime;
7506e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  std::string name;
7606e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org  int id;
7706e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org};
787e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org
797e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.orgstruct VideoStream {
807e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  VideoStream()
817e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org      : width(0),
827e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org        height(0),
837e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org        max_framerate(-1),
847e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org        min_bitrate_bps(-1),
857e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org        target_bitrate_bps(-1),
867e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org        max_bitrate_bps(-1),
877e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org        max_qp(-1) {}
887e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  std::string ToString() const;
897e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org
907e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  size_t width;
917e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  size_t height;
927e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  int max_framerate;
937e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org
947e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  int min_bitrate_bps;
957e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  int target_bitrate_bps;
967e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  int max_bitrate_bps;
977e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org
987e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  int max_qp;
997e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org
1007e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  // Bitrate thresholds for enabling additional temporal layers.
1017e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org  std::vector<int> temporal_layers;
1027e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org};
1037e68693b6862ad571ea422828b12f102aeea0a15pbos@webrtc.org
10406e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org}  // namespace webrtc
10506e802659df16b778e01b258232ebeae7273fd8cmflodman@webrtc.org
1064988d94bf043d7dff95e7dcb6716e6f4b16f5460pbos@webrtc.org#endif  // WEBRTC_VIDEO_ENGINE_NEW_INCLUDE_CONFIG_H_
107