128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org/* 228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * libjingle 328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * Copyright 2004 Google Inc. 428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * Redistribution and use in source and binary forms, with or without 628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * modification, are permitted provided that the following conditions are met: 728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * this list of conditions and the following disclaimer. 1028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 1128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * this list of conditions and the following disclaimer in the documentation 1228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * and/or other materials provided with the distribution. 1328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 3. The name of the author may not be used to endorse or promote products 1428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * derived from this software without specific prior written permission. 1528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 1628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 1728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 1928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 2228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 2428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 2528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org */ 2728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 2828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#ifndef TALK_MEDIA_BASE_MEDIACHANNEL_H_ 2928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#define TALK_MEDIA_BASE_MEDIACHANNEL_H_ 3028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 3128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include <string> 3228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include <vector> 3328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 34a09a99950ec40aef6421e4ba35eee7196b7a6e68buildbot@webrtc.org#include "talk/media/base/codec.h" 35a09a99950ec40aef6421e4ba35eee7196b7a6e68buildbot@webrtc.org#include "talk/media/base/constants.h" 36a09a99950ec40aef6421e4ba35eee7196b7a6e68buildbot@webrtc.org#include "talk/media/base/streamparams.h" 37d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org#include "webrtc/base/basictypes.h" 38d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org#include "webrtc/base/buffer.h" 39d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org#include "webrtc/base/dscp.h" 40d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org#include "webrtc/base/logging.h" 41be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg#include "webrtc/base/optional.h" 42d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org#include "webrtc/base/sigslot.h" 43d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org#include "webrtc/base/socket.h" 44d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org#include "webrtc/base/window.h" 4528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// TODO(juberti): re-evaluate this include 4628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include "talk/session/media/audiomonitor.h" 4728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 48d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.orgnamespace rtc { 4928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgclass Buffer; 5028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgclass RateLimiter; 5128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgclass Timing; 5228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org} 5328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 54f888bb58da04c5095759b5ec7ce2e1fa2cd414fdTomminamespace webrtc { 55f888bb58da04c5095759b5ec7ce2e1fa2cd414fdTommiclass AudioSinkInterface; 56f888bb58da04c5095759b5ec7ce2e1fa2cd414fdTommi} 57f888bb58da04c5095759b5ec7ce2e1fa2cd414fdTommi 5828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgnamespace cricket { 5928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 601d5c19d23eb0d0007efd1e80f60f5409c4b25e25tommiclass AudioRenderer; 6128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgclass ScreencastId; 6228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgclass VideoCapturer; 6328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgclass VideoRenderer; 641d5c19d23eb0d0007efd1e80f60f5409c4b25e25tommistruct RtpHeader; 651d5c19d23eb0d0007efd1e80f60f5409c4b25e25tommistruct VideoFormat; 6628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 6728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgconst int kMinRtpHeaderExtensionId = 1; 6828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgconst int kMaxRtpHeaderExtensionId = 255; 6928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgconst int kScreencastDefaultFps = 5; 7028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 7128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgtemplate <class T> 72be57983f4bd875c39a229bab5112b32dad004057Karl Wibergstatic std::string ToStringIfSet(const char* key, const rtc::Optional<T>& val) { 7328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org std::string str; 74102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg if (val) { 7528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org str = key; 7628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org str += ": "; 77102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg str += val ? rtc::ToString(*val) : ""; 7828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org str += ", "; 7928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 8028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org return str; 8128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org} 8228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 83c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatchertemplate <class T> 84c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcherstatic std::string VectorToString(const std::vector<T>& vals) { 85c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher std::ostringstream ost; 86c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "["; 87c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher for (size_t i = 0; i < vals.size(); ++i) { 88c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher if (i > 0) { 89c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << ", "; 90c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher } 91c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << vals[i].ToString(); 92c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher } 93c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "]"; 94c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher return ost.str(); 95c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher} 96c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher 9728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// Options that can be applied to a VoiceMediaChannel or a VoiceMediaEngine. 9828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// Used to be flags, but that makes it hard to selectively apply options. 9928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// We are moving all of the setting of options to structs like this, 10028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// but some things currently still use flags. 10128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgstruct AudioOptions { 10228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org void SetAll(const AudioOptions& change) { 103102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&echo_cancellation, change.echo_cancellation); 104102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&auto_gain_control, change.auto_gain_control); 105102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&noise_suppression, change.noise_suppression); 106102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&highpass_filter, change.highpass_filter); 107102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&stereo_swapping, change.stereo_swapping); 108102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&audio_jitter_buffer_max_packets, 109102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg change.audio_jitter_buffer_max_packets); 110102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&audio_jitter_buffer_fast_accelerate, 111102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg change.audio_jitter_buffer_fast_accelerate); 112102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&typing_detection, change.typing_detection); 113102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&aecm_generate_comfort_noise, change.aecm_generate_comfort_noise); 114102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&conference_mode, change.conference_mode); 115102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&adjust_agc_delta, change.adjust_agc_delta); 116102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&experimental_agc, change.experimental_agc); 117102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&extended_filter_aec, change.extended_filter_aec); 118102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&delay_agnostic_aec, change.delay_agnostic_aec); 119102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&experimental_ns, change.experimental_ns); 120102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&aec_dump, change.aec_dump); 121102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&tx_agc_target_dbov, change.tx_agc_target_dbov); 122102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&tx_agc_digital_compression_gain, 123102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg change.tx_agc_digital_compression_gain); 124102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&tx_agc_limiter, change.tx_agc_limiter); 125102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&recording_sample_rate, change.recording_sample_rate); 126102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&playout_sample_rate, change.playout_sample_rate); 127102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&dscp, change.dscp); 128102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&combined_audio_video_bwe, change.combined_audio_video_bwe); 12928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 13028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 13128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org bool operator==(const AudioOptions& o) const { 13228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org return echo_cancellation == o.echo_cancellation && 13328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org auto_gain_control == o.auto_gain_control && 13428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org noise_suppression == o.noise_suppression && 13528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org highpass_filter == o.highpass_filter && 13628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org stereo_swapping == o.stereo_swapping && 13764dad838e61e92e4a72437b153c5eba7a200fb4aHenrik Lundin audio_jitter_buffer_max_packets == o.audio_jitter_buffer_max_packets && 1385263b3c1ddb10ecca58d9f08364aad2d6ba1d95dHenrik Lundin audio_jitter_buffer_fast_accelerate == 1395263b3c1ddb10ecca58d9f08364aad2d6ba1d95dHenrik Lundin o.audio_jitter_buffer_fast_accelerate && 14028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org typing_detection == o.typing_detection && 14197077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org aecm_generate_comfort_noise == o.aecm_generate_comfort_noise && 14228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org conference_mode == o.conference_mode && 14328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org experimental_agc == o.experimental_agc && 144441f6347311bcf2079435c3888d67e1fb321f9f8Henrik Lundin extended_filter_aec == o.extended_filter_aec && 145bf395c1fc0a29b54fac4b6f6e9f6c117762faa15Bjorn Volcker delay_agnostic_aec == o.delay_agnostic_aec && 1469cf037b83184374230c6825e4aa407cdafaba434sergeyu@chromium.org experimental_ns == o.experimental_ns && 14728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org adjust_agc_delta == o.adjust_agc_delta && 14897077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org aec_dump == o.aec_dump && 14997077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org tx_agc_target_dbov == o.tx_agc_target_dbov && 15097077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org tx_agc_digital_compression_gain == o.tx_agc_digital_compression_gain && 15197077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org tx_agc_limiter == o.tx_agc_limiter && 15297077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org recording_sample_rate == o.recording_sample_rate && 153de305014c62832a382d38144a9dc518cf1d02f88wu@webrtc.org playout_sample_rate == o.playout_sample_rate && 154b4c7b09c1352174ecc1faf8c0cd93c66028a0485buildbot@webrtc.org dscp == o.dscp && 155b4c7b09c1352174ecc1faf8c0cd93c66028a0485buildbot@webrtc.org combined_audio_video_bwe == o.combined_audio_video_bwe; 15628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 15728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 15828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org std::string ToString() const { 15928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org std::ostringstream ost; 16028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << "AudioOptions {"; 16128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << ToStringIfSet("aec", echo_cancellation); 16228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << ToStringIfSet("agc", auto_gain_control); 16328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << ToStringIfSet("ns", noise_suppression); 16428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << ToStringIfSet("hf", highpass_filter); 16528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << ToStringIfSet("swap", stereo_swapping); 16664dad838e61e92e4a72437b153c5eba7a200fb4aHenrik Lundin ost << ToStringIfSet("audio_jitter_buffer_max_packets", 16764dad838e61e92e4a72437b153c5eba7a200fb4aHenrik Lundin audio_jitter_buffer_max_packets); 1685263b3c1ddb10ecca58d9f08364aad2d6ba1d95dHenrik Lundin ost << ToStringIfSet("audio_jitter_buffer_fast_accelerate", 1695263b3c1ddb10ecca58d9f08364aad2d6ba1d95dHenrik Lundin audio_jitter_buffer_fast_accelerate); 17028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << ToStringIfSet("typing", typing_detection); 17197077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org ost << ToStringIfSet("comfort_noise", aecm_generate_comfort_noise); 17228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << ToStringIfSet("conference", conference_mode); 17328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << ToStringIfSet("agc_delta", adjust_agc_delta); 17428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << ToStringIfSet("experimental_agc", experimental_agc); 175441f6347311bcf2079435c3888d67e1fb321f9f8Henrik Lundin ost << ToStringIfSet("extended_filter_aec", extended_filter_aec); 176bf395c1fc0a29b54fac4b6f6e9f6c117762faa15Bjorn Volcker ost << ToStringIfSet("delay_agnostic_aec", delay_agnostic_aec); 1779cf037b83184374230c6825e4aa407cdafaba434sergeyu@chromium.org ost << ToStringIfSet("experimental_ns", experimental_ns); 17828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << ToStringIfSet("aec_dump", aec_dump); 17997077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org ost << ToStringIfSet("tx_agc_target_dbov", tx_agc_target_dbov); 18097077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org ost << ToStringIfSet("tx_agc_digital_compression_gain", 18197077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org tx_agc_digital_compression_gain); 18297077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org ost << ToStringIfSet("tx_agc_limiter", tx_agc_limiter); 18397077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org ost << ToStringIfSet("recording_sample_rate", recording_sample_rate); 18497077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org ost << ToStringIfSet("playout_sample_rate", playout_sample_rate); 185de305014c62832a382d38144a9dc518cf1d02f88wu@webrtc.org ost << ToStringIfSet("dscp", dscp); 186b4c7b09c1352174ecc1faf8c0cd93c66028a0485buildbot@webrtc.org ost << ToStringIfSet("combined_audio_video_bwe", combined_audio_video_bwe); 18728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << "}"; 18828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org return ost.str(); 18928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 19028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 19128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Audio processing that attempts to filter away the output signal from 19228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // later inbound pickup. 193be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> echo_cancellation; 19428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Audio processing to adjust the sensitivity of the local mic dynamically. 195be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> auto_gain_control; 19628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Audio processing to filter out background noise. 197be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> noise_suppression; 19828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Audio processing to remove background noise of lower frequencies. 199be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> highpass_filter; 20028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Audio processing to swap the left and right channels. 201be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> stereo_swapping; 20264dad838e61e92e4a72437b153c5eba7a200fb4aHenrik Lundin // Audio receiver jitter buffer (NetEq) max capacity in number of packets. 203be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<int> audio_jitter_buffer_max_packets; 2045263b3c1ddb10ecca58d9f08364aad2d6ba1d95dHenrik Lundin // Audio receiver jitter buffer (NetEq) fast accelerate mode. 205be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> audio_jitter_buffer_fast_accelerate; 20628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Audio processing to detect typing. 207be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> typing_detection; 208be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> aecm_generate_comfort_noise; 209be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> conference_mode; 210be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<int> adjust_agc_delta; 211be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> experimental_agc; 212be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> extended_filter_aec; 213be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> delay_agnostic_aec; 214be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> experimental_ns; 215be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> aec_dump; 21697077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org // Note that tx_agc_* only applies to non-experimental AGC. 217be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<uint16_t> tx_agc_target_dbov; 218be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<uint16_t> tx_agc_digital_compression_gain; 219be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> tx_agc_limiter; 220be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<uint32_t> recording_sample_rate; 221be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<uint32_t> playout_sample_rate; 222de305014c62832a382d38144a9dc518cf1d02f88wu@webrtc.org // Set DSCP value for packet sent from audio channel. 223be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> dscp; 224b4c7b09c1352174ecc1faf8c0cd93c66028a0485buildbot@webrtc.org // Enable combined audio+bandwidth BWE. 225be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> combined_audio_video_bwe; 226102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg 227102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg private: 228102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg template <typename T> 229be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg static void SetFrom(rtc::Optional<T>* s, const rtc::Optional<T>& o) { 230102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg if (o) { 231102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg *s = o; 232102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg } 233102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg } 23428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 23528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 23628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// Options that can be applied to a VideoMediaChannel or a VideoMediaEngine. 23728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// Used to be flags, but that makes it hard to selectively apply options. 23828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// We are moving all of the setting of options to structs like this, 23928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// but some things currently still use flags. 24028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgstruct VideoOptions { 241102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg VideoOptions() 242102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg : process_adaptation_threshhold(kProcessCpuThreshold), 243102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg system_low_adaptation_threshhold(kLowSystemCpuThreshold), 244102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg system_high_adaptation_threshhold(kHighSystemCpuThreshold), 245102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg unsignalled_recv_stream_limit(kNumDefaultUnsignalledVideoRecvStreams) {} 24628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 24728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org void SetAll(const VideoOptions& change) { 248102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&adapt_input_to_cpu_usage, change.adapt_input_to_cpu_usage); 249102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&adapt_cpu_with_smoothing, change.adapt_cpu_with_smoothing); 250102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&video_adapt_third, change.video_adapt_third); 251102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&video_noise_reduction, change.video_noise_reduction); 252102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&video_start_bitrate, change.video_start_bitrate); 253102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&cpu_overuse_detection, change.cpu_overuse_detection); 254102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&cpu_underuse_threshold, change.cpu_underuse_threshold); 255102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&cpu_overuse_threshold, change.cpu_overuse_threshold); 256102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&cpu_underuse_encode_rsd_threshold, 257102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg change.cpu_underuse_encode_rsd_threshold); 258102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&cpu_overuse_encode_rsd_threshold, 259102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg change.cpu_overuse_encode_rsd_threshold); 260102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&cpu_overuse_encode_usage, change.cpu_overuse_encode_usage); 261102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&conference_mode, change.conference_mode); 262102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&process_adaptation_threshhold, 263102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg change.process_adaptation_threshhold); 264102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&system_low_adaptation_threshhold, 265102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg change.system_low_adaptation_threshhold); 266102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&system_high_adaptation_threshhold, 267102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg change.system_high_adaptation_threshhold); 268102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&dscp, change.dscp); 269102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&suspend_below_min_bitrate, change.suspend_below_min_bitrate); 270102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&unsignalled_recv_stream_limit, 271102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg change.unsignalled_recv_stream_limit); 272102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&use_simulcast_adapter, change.use_simulcast_adapter); 273102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg SetFrom(&screencast_min_bitrate, change.screencast_min_bitrate); 274444682acf9804c5fcbddaded9e900ba3cc6921fcqiangchen SetFrom(&disable_prerenderer_smoothing, 275444682acf9804c5fcbddaded9e900ba3cc6921fcqiangchen change.disable_prerenderer_smoothing); 27628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 27728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 27828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org bool operator==(const VideoOptions& o) const { 27943336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org return adapt_input_to_cpu_usage == o.adapt_input_to_cpu_usage && 28043336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org adapt_cpu_with_smoothing == o.adapt_cpu_with_smoothing && 28143336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org video_adapt_third == o.video_adapt_third && 28243336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org video_noise_reduction == o.video_noise_reduction && 28343336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org video_start_bitrate == o.video_start_bitrate && 28443336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org cpu_overuse_detection == o.cpu_overuse_detection && 28543336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org cpu_underuse_threshold == o.cpu_underuse_threshold && 28643336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org cpu_overuse_threshold == o.cpu_overuse_threshold && 28743336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org cpu_underuse_encode_rsd_threshold == 28843336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org o.cpu_underuse_encode_rsd_threshold && 28943336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org cpu_overuse_encode_rsd_threshold == 29043336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org o.cpu_overuse_encode_rsd_threshold && 29143336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org cpu_overuse_encode_usage == o.cpu_overuse_encode_usage && 29243336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org conference_mode == o.conference_mode && 29343336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org process_adaptation_threshhold == o.process_adaptation_threshhold && 29443336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org system_low_adaptation_threshhold == 29543336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org o.system_low_adaptation_threshhold && 29643336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org system_high_adaptation_threshhold == 29743336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org o.system_high_adaptation_threshhold && 298a9b4c32052fd55df7e1d02e846fbea3178bebf71Peter Thatcher dscp == o.dscp && 29943336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org suspend_below_min_bitrate == o.suspend_below_min_bitrate && 30043336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org unsignalled_recv_stream_limit == o.unsignalled_recv_stream_limit && 30143336b6b9f423778a2a97817e6c80ee2831322a8pbos@webrtc.org use_simulcast_adapter == o.use_simulcast_adapter && 302444682acf9804c5fcbddaded9e900ba3cc6921fcqiangchen screencast_min_bitrate == o.screencast_min_bitrate && 303444682acf9804c5fcbddaded9e900ba3cc6921fcqiangchen disable_prerenderer_smoothing == o.disable_prerenderer_smoothing; 30428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 30528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 30628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org std::string ToString() const { 30728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org std::ostringstream ost; 30828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << "VideoOptions {"; 30928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << ToStringIfSet("cpu adaption", adapt_input_to_cpu_usage); 31028654cbc2256230c978f41cbaf550bc2e9c2f2dbhenrike@webrtc.org ost << ToStringIfSet("cpu adaptation smoothing", adapt_cpu_with_smoothing); 311cadf9040cbb9e7bb1b73a95e43e7d228fe6b2bdbwu@webrtc.org ost << ToStringIfSet("video adapt third", video_adapt_third); 31228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << ToStringIfSet("noise reduction", video_noise_reduction); 3131e6cb2c5d21d778437e650170de397ace4b39b08wu@webrtc.org ost << ToStringIfSet("start bitrate", video_start_bitrate); 314cadf9040cbb9e7bb1b73a95e43e7d228fe6b2bdbwu@webrtc.org ost << ToStringIfSet("cpu overuse detection", cpu_overuse_detection); 315e9793ab8b872098c241a1c0bc08836e9e78607cehenrike@webrtc.org ost << ToStringIfSet("cpu underuse threshold", cpu_underuse_threshold); 316e9793ab8b872098c241a1c0bc08836e9e78607cehenrike@webrtc.org ost << ToStringIfSet("cpu overuse threshold", cpu_overuse_threshold); 31727626a6256878611fd2dd10a4e6e1c464fd79463buildbot@webrtc.org ost << ToStringIfSet("cpu underuse encode rsd threshold", 31827626a6256878611fd2dd10a4e6e1c464fd79463buildbot@webrtc.org cpu_underuse_encode_rsd_threshold); 31927626a6256878611fd2dd10a4e6e1c464fd79463buildbot@webrtc.org ost << ToStringIfSet("cpu overuse encode rsd threshold", 32027626a6256878611fd2dd10a4e6e1c464fd79463buildbot@webrtc.org cpu_overuse_encode_rsd_threshold); 321b0ecc1c6fb107b9032611870eeae8afde3e0a5d2henrike@webrtc.org ost << ToStringIfSet("cpu overuse encode usage", 322b0ecc1c6fb107b9032611870eeae8afde3e0a5d2henrike@webrtc.org cpu_overuse_encode_usage); 32328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << ToStringIfSet("conference mode", conference_mode); 32428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << ToStringIfSet("process", process_adaptation_threshhold); 32528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << ToStringIfSet("low", system_low_adaptation_threshhold); 32628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << ToStringIfSet("high", system_high_adaptation_threshhold); 327de305014c62832a382d38144a9dc518cf1d02f88wu@webrtc.org ost << ToStringIfSet("dscp", dscp); 3285bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org ost << ToStringIfSet("suspend below min bitrate", 3295bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org suspend_below_min_bitrate); 330704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org ost << ToStringIfSet("num channels for early receive", 331704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org unsignalled_recv_stream_limit); 33210bd88e2b52e8175f396cd7b1e6b1f5422c2cd0fhenrike@webrtc.org ost << ToStringIfSet("use simulcast adapter", use_simulcast_adapter); 333dce3feb0b02bf1b7809f6247943979094de88593henrike@webrtc.org ost << ToStringIfSet("screencast min bitrate", screencast_min_bitrate); 33428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ost << "}"; 33528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org return ost.str(); 33628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 33728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 33828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Enable CPU adaptation? 339be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> adapt_input_to_cpu_usage; 34028654cbc2256230c978f41cbaf550bc2e9c2f2dbhenrike@webrtc.org // Enable CPU adaptation smoothing? 341be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> adapt_cpu_with_smoothing; 342cadf9040cbb9e7bb1b73a95e43e7d228fe6b2bdbwu@webrtc.org // Enable video adapt third? 343be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> video_adapt_third; 34428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Enable denoising? 345be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> video_noise_reduction; 3461e6cb2c5d21d778437e650170de397ace4b39b08wu@webrtc.org // Experimental: Enable WebRtc higher start bitrate? 347be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<int> video_start_bitrate; 348cadf9040cbb9e7bb1b73a95e43e7d228fe6b2bdbwu@webrtc.org // Enable WebRTC Cpu Overuse Detection, which is a new version of the CPU 349cadf9040cbb9e7bb1b73a95e43e7d228fe6b2bdbwu@webrtc.org // adaptation algorithm. So this option will override the 350cadf9040cbb9e7bb1b73a95e43e7d228fe6b2bdbwu@webrtc.org // |adapt_input_to_cpu_usage|. 351be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> cpu_overuse_detection; 35227626a6256878611fd2dd10a4e6e1c464fd79463buildbot@webrtc.org // Low threshold (t1) for cpu overuse adaptation. (Adapt up) 35327626a6256878611fd2dd10a4e6e1c464fd79463buildbot@webrtc.org // Metric: encode usage (m1). m1 < t1 => underuse. 354be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<int> cpu_underuse_threshold; 35527626a6256878611fd2dd10a4e6e1c464fd79463buildbot@webrtc.org // High threshold (t1) for cpu overuse adaptation. (Adapt down) 35627626a6256878611fd2dd10a4e6e1c464fd79463buildbot@webrtc.org // Metric: encode usage (m1). m1 > t1 => overuse. 357be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<int> cpu_overuse_threshold; 35827626a6256878611fd2dd10a4e6e1c464fd79463buildbot@webrtc.org // Low threshold (t2) for cpu overuse adaptation. (Adapt up) 35927626a6256878611fd2dd10a4e6e1c464fd79463buildbot@webrtc.org // Metric: relative standard deviation of encode time (m2). 36027626a6256878611fd2dd10a4e6e1c464fd79463buildbot@webrtc.org // Optional threshold. If set, (m1 < t1 && m2 < t2) => underuse. 36127626a6256878611fd2dd10a4e6e1c464fd79463buildbot@webrtc.org // Note: t2 will have no effect if t1 is not set. 362be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<int> cpu_underuse_encode_rsd_threshold; 36327626a6256878611fd2dd10a4e6e1c464fd79463buildbot@webrtc.org // High threshold (t2) for cpu overuse adaptation. (Adapt down) 36427626a6256878611fd2dd10a4e6e1c464fd79463buildbot@webrtc.org // Metric: relative standard deviation of encode time (m2). 36527626a6256878611fd2dd10a4e6e1c464fd79463buildbot@webrtc.org // Optional threshold. If set, (m1 > t1 || m2 > t2) => overuse. 36627626a6256878611fd2dd10a4e6e1c464fd79463buildbot@webrtc.org // Note: t2 will have no effect if t1 is not set. 367be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<int> cpu_overuse_encode_rsd_threshold; 368b0ecc1c6fb107b9032611870eeae8afde3e0a5d2henrike@webrtc.org // Use encode usage for cpu detection. 369be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> cpu_overuse_encode_usage; 37028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Use conference mode? 371be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> conference_mode; 37228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Threshhold for process cpu adaptation. (Process limit) 373be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<float> process_adaptation_threshhold; 37428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Low threshhold for cpu adaptation. (Adapt up) 375be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<float> system_low_adaptation_threshhold; 37628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // High threshhold for cpu adaptation. (Adapt down) 377be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<float> system_high_adaptation_threshhold; 378de305014c62832a382d38144a9dc518cf1d02f88wu@webrtc.org // Set DSCP value for packet sent from video channel. 379be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> dscp; 3805bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org // Enable WebRTC suspension of video. No video frames will be sent when the 3815bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org // bitrate is below the configured minimum bitrate. 382be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> suspend_below_min_bitrate; 383704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org // Limit on the number of early receive channels that can be created. 384be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<int> unsignalled_recv_stream_limit; 38510bd88e2b52e8175f396cd7b1e6b1f5422c2cd0fhenrike@webrtc.org // Enable use of simulcast adapter. 386be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<bool> use_simulcast_adapter; 387dce3feb0b02bf1b7809f6247943979094de88593henrike@webrtc.org // Force screencast to use a minimum bitrate 388be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg rtc::Optional<int> screencast_min_bitrate; 389444682acf9804c5fcbddaded9e900ba3cc6921fcqiangchen // Set to true if the renderer has an algorithm of frame selection. 390444682acf9804c5fcbddaded9e900ba3cc6921fcqiangchen // If the value is true, then WebRTC will hand over a frame as soon as 391444682acf9804c5fcbddaded9e900ba3cc6921fcqiangchen // possible without delay, and rendering smoothness is completely the duty 392444682acf9804c5fcbddaded9e900ba3cc6921fcqiangchen // of the renderer; 393444682acf9804c5fcbddaded9e900ba3cc6921fcqiangchen // If the value is false, then WebRTC is responsible to delay frame release 394444682acf9804c5fcbddaded9e900ba3cc6921fcqiangchen // in order to increase rendering smoothness. 395444682acf9804c5fcbddaded9e900ba3cc6921fcqiangchen rtc::Optional<bool> disable_prerenderer_smoothing; 396102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg 397102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg private: 398102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg template <typename T> 399be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg static void SetFrom(rtc::Optional<T>* s, const rtc::Optional<T>& o) { 400102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg if (o) { 401102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg *s = o; 402102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg } 403102c6a61bc0b42dc0956d013530fc0213b7e881bkwiberg } 40428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 40528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 40628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgstruct RtpHeaderExtension { 40728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org RtpHeaderExtension() : id(0) {} 40828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org RtpHeaderExtension(const std::string& u, int i) : uri(u), id(i) {} 40928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 41028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org bool operator==(const RtpHeaderExtension& ext) const { 41128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // id is a reserved word in objective-c. Therefore the id attribute has to 41228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // be a fully qualified name in order to compile on IOS. 41328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org return this->id == ext.id && 41428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org uri == ext.uri; 41528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 416c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher 417c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher std::string ToString() const { 418c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher std::ostringstream ost; 419c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "{"; 420c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "uri: " << uri; 4217e4e01a4413fa98644b94ab9d8a9dccc664f39f2solenberg ost << ", id: " << id; 422c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "}"; 423c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher return ost.str(); 424c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher } 425c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher 426c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher std::string uri; 427c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher int id; 428c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher // TODO(juberti): SendRecv direction; 42928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 43028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 43128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// Returns the named header extension if found among all extensions, NULL 43228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// otherwise. 43328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orginline const RtpHeaderExtension* FindHeaderExtension( 43428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org const std::vector<RtpHeaderExtension>& extensions, 43528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org const std::string& name) { 43628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org for (std::vector<RtpHeaderExtension>::const_iterator it = extensions.begin(); 43728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org it != extensions.end(); ++it) { 43828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org if (it->uri == name) 43928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org return &(*it); 44028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 44128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org return NULL; 44228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org} 44328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 44428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgenum MediaChannelOptions { 44528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Tune the stream for conference mode. 44628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org OPT_CONFERENCE = 0x0001 44728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 44828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 44928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgenum VoiceMediaChannelOptions { 45028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Tune the audio stream for vcs with different target levels. 45128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org OPT_AGC_MINUS_10DB = 0x80000000 45228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 45328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 45428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgclass MediaChannel : public sigslot::has_slots<> { 45528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org public: 45628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org class NetworkInterface { 45728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org public: 45828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org enum SocketType { ST_RTP, ST_RTCP }; 459c1aeaf0dc37d96f31c92f893f4e30e7a5f7cc2b7stefan virtual bool SendPacket(rtc::Buffer* packet, 460c1aeaf0dc37d96f31c92f893f4e30e7a5f7cc2b7stefan const rtc::PacketOptions& options) = 0; 461c1aeaf0dc37d96f31c92f893f4e30e7a5f7cc2b7stefan virtual bool SendRtcp(rtc::Buffer* packet, 462c1aeaf0dc37d96f31c92f893f4e30e7a5f7cc2b7stefan const rtc::PacketOptions& options) = 0; 463d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org virtual int SetOption(SocketType type, rtc::Socket::Option opt, 46428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int option) = 0; 46528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual ~NetworkInterface() {} 46628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org }; 46728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 46828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org MediaChannel() : network_interface_(NULL) {} 46928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual ~MediaChannel() {} 47028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 4711e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org // Sets the abstract interface class for sending RTP/RTCP data. 47228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual void SetInterface(NetworkInterface *iface) { 473d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::CritScope cs(&network_interface_crit_); 47428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org network_interface_ = iface; 47528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 47628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 47728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Called when a RTP packet is received. 478d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org virtual void OnPacketReceived(rtc::Buffer* packet, 479d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org const rtc::PacketTime& packet_time) = 0; 48028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Called when a RTCP packet is received. 481d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org virtual void OnRtcpReceived(rtc::Buffer* packet, 482d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org const rtc::PacketTime& packet_time) = 0; 48328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Called when the socket's ability to send has changed. 48428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual void OnReadyToSend(bool ready) = 0; 48528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Creates a new outgoing media stream with SSRCs and CNAME as described 48628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // by sp. 48728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual bool AddSendStream(const StreamParams& sp) = 0; 48828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Removes an outgoing media stream. 48928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // ssrc must be the first SSRC of the media stream if the stream uses 49028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // multiple SSRCs. 4910c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström virtual bool RemoveSendStream(uint32_t ssrc) = 0; 49228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Creates a new incoming media stream with SSRCs and CNAME as described 49328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // by sp. 49428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual bool AddRecvStream(const StreamParams& sp) = 0; 49528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Removes an incoming media stream. 49628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // ssrc must be the first SSRC of the media stream if the stream uses 49728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // multiple SSRCs. 4980c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström virtual bool RemoveRecvStream(uint32_t ssrc) = 0; 49928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 50092fdfebeddc5a1152d6c089df56a8ae4e9d9207cmallinath@webrtc.org // Returns the absoulte sendtime extension id value from media channel. 50192fdfebeddc5a1152d6c089df56a8ae4e9d9207cmallinath@webrtc.org virtual int GetRtpSendTimeExtnId() const { 50292fdfebeddc5a1152d6c089df56a8ae4e9d9207cmallinath@webrtc.org return -1; 50392fdfebeddc5a1152d6c089df56a8ae4e9d9207cmallinath@webrtc.org } 50428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 5051e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org // Base method to send packet using NetworkInterface. 506c1aeaf0dc37d96f31c92f893f4e30e7a5f7cc2b7stefan bool SendPacket(rtc::Buffer* packet, const rtc::PacketOptions& options) { 507c1aeaf0dc37d96f31c92f893f4e30e7a5f7cc2b7stefan return DoSendPacket(packet, false, options); 5081e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org } 5091e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org 510c1aeaf0dc37d96f31c92f893f4e30e7a5f7cc2b7stefan bool SendRtcp(rtc::Buffer* packet, const rtc::PacketOptions& options) { 511c1aeaf0dc37d96f31c92f893f4e30e7a5f7cc2b7stefan return DoSendPacket(packet, true, options); 5121e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org } 5131e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org 5141e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org int SetOption(NetworkInterface::SocketType type, 515d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::Socket::Option opt, 5161e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org int option) { 517d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::CritScope cs(&network_interface_crit_); 5181e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org if (!network_interface_) 5191e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org return -1; 5201e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org 5211e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org return network_interface_->SetOption(type, opt, option); 5221e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org } 5231e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org 524de305014c62832a382d38144a9dc518cf1d02f88wu@webrtc.org protected: 525de305014c62832a382d38144a9dc518cf1d02f88wu@webrtc.org // This method sets DSCP |value| on both RTP and RTCP channels. 526d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org int SetDscp(rtc::DiffServCodePoint value) { 527de305014c62832a382d38144a9dc518cf1d02f88wu@webrtc.org int ret; 528de305014c62832a382d38144a9dc518cf1d02f88wu@webrtc.org ret = SetOption(NetworkInterface::ST_RTP, 529d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::Socket::OPT_DSCP, 530de305014c62832a382d38144a9dc518cf1d02f88wu@webrtc.org value); 531de305014c62832a382d38144a9dc518cf1d02f88wu@webrtc.org if (ret == 0) { 532de305014c62832a382d38144a9dc518cf1d02f88wu@webrtc.org ret = SetOption(NetworkInterface::ST_RTCP, 533d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::Socket::OPT_DSCP, 534de305014c62832a382d38144a9dc518cf1d02f88wu@webrtc.org value); 535de305014c62832a382d38144a9dc518cf1d02f88wu@webrtc.org } 536de305014c62832a382d38144a9dc518cf1d02f88wu@webrtc.org return ret; 537de305014c62832a382d38144a9dc518cf1d02f88wu@webrtc.org } 538de305014c62832a382d38144a9dc518cf1d02f88wu@webrtc.org 5391e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org private: 540c1aeaf0dc37d96f31c92f893f4e30e7a5f7cc2b7stefan bool DoSendPacket(rtc::Buffer* packet, 541c1aeaf0dc37d96f31c92f893f4e30e7a5f7cc2b7stefan bool rtcp, 542c1aeaf0dc37d96f31c92f893f4e30e7a5f7cc2b7stefan const rtc::PacketOptions& options) { 543d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::CritScope cs(&network_interface_crit_); 5441e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org if (!network_interface_) 5451e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org return false; 5461e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org 547c1aeaf0dc37d96f31c92f893f4e30e7a5f7cc2b7stefan return (!rtcp) ? network_interface_->SendPacket(packet, options) 548c1aeaf0dc37d96f31c92f893f4e30e7a5f7cc2b7stefan : network_interface_->SendRtcp(packet, options); 5491e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org } 5501e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org 5511e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org // |network_interface_| can be accessed from the worker_thread and 5521e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org // from any MediaEngine threads. This critical section is to protect accessing 5531e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org // of network_interface_ object. 554d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::CriticalSection network_interface_crit_; 5551e09a711263dd105e6f7a03812250084c64e5fd8henrike@webrtc.org NetworkInterface* network_interface_; 55628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 55728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 55828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgenum SendFlags { 55928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org SEND_NOTHING, 56028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org SEND_MICROPHONE 56128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 56228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 56397077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org// The stats information is structured as follows: 56497077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org// Media are represented by either MediaSenderInfo or MediaReceiverInfo. 56597077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org// Media contains a vector of SSRC infos that are exclusively used by this 56697077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org// media. (SSRCs shared between media streams can't be represented.) 56797077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org 56897077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org// Information about an SSRC. 56997077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org// This data may be locally recorded, or received in an RTCP SR or RR. 57097077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.orgstruct SsrcSenderInfo { 57197077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org SsrcSenderInfo() 57297077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org : ssrc(0), 57397077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org timestamp(0) { 57497077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org } 5750c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström uint32_t ssrc; 57697077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org double timestamp; // NTP timestamp, represented as seconds since epoch. 57797077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org}; 57897077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org 57997077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.orgstruct SsrcReceiverInfo { 58097077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org SsrcReceiverInfo() 58128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org : ssrc(0), 58297077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org timestamp(0) { 58397077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org } 5840c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström uint32_t ssrc; 58597077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org double timestamp; 58697077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org}; 58797077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org 58897077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.orgstruct MediaSenderInfo { 58997077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org MediaSenderInfo() 59097077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org : bytes_sent(0), 59128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org packets_sent(0), 59228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org packets_lost(0), 59328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org fraction_lost(0.0), 59497077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org rtt_ms(0) { 59597077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org } 5965bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org void add_ssrc(const SsrcSenderInfo& stat) { 5975bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org local_stats.push_back(stat); 5985bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org } 5995bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org // Temporary utility function for call sites that only provide SSRC. 6005bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org // As more info is added into SsrcSenderInfo, this function should go away. 6010c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström void add_ssrc(uint32_t ssrc) { 6025bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org SsrcSenderInfo stat; 6035bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org stat.ssrc = ssrc; 6045bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org add_ssrc(stat); 6055bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org } 6065bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org // Utility accessor for clients that are only interested in ssrc numbers. 6070c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström std::vector<uint32_t> ssrcs() const { 6080c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström std::vector<uint32_t> retval; 6095bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org for (std::vector<SsrcSenderInfo>::const_iterator it = local_stats.begin(); 6105bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org it != local_stats.end(); ++it) { 6115bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org retval.push_back(it->ssrc); 6125bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org } 6135bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org return retval; 6145bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org } 6155bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org // Utility accessor for clients that make the assumption only one ssrc 6165bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org // exists per media. 6175bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org // This will eventually go away. 6180c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström uint32_t ssrc() const { 6195bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org if (local_stats.size() > 0) { 6205bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org return local_stats[0].ssrc; 6215bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org } else { 6225bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org return 0; 6235bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org } 6245bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org } 6250c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström int64_t bytes_sent; 62697077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org int packets_sent; 62797077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org int packets_lost; 62897077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org float fraction_lost; 62916825b1a828bb4ff40f7682040e43a239b7b8ca3pkasting@chromium.org int64_t rtt_ms; 63097077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org std::string codec_name; 63197077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org std::vector<SsrcSenderInfo> local_stats; 63297077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org std::vector<SsrcReceiverInfo> remote_stats; 63397077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org}; 63497077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org 635704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.orgtemplate<class T> 636704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.orgstruct VariableInfo { 637704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org VariableInfo() 638704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org : min_val(), 639704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org mean(0.0), 640704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org max_val(), 641704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org variance(0.0) { 642704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org } 643704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org T min_val; 644704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org double mean; 645704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org T max_val; 646704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org double variance; 647704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org}; 648704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org 64997077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.orgstruct MediaReceiverInfo { 65097077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org MediaReceiverInfo() 65197077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org : bytes_rcvd(0), 65297077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org packets_rcvd(0), 65397077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org packets_lost(0), 65497077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org fraction_lost(0.0) { 65597077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org } 6565bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org void add_ssrc(const SsrcReceiverInfo& stat) { 6575bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org local_stats.push_back(stat); 6585bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org } 6595bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org // Temporary utility function for call sites that only provide SSRC. 6605bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org // As more info is added into SsrcSenderInfo, this function should go away. 6610c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström void add_ssrc(uint32_t ssrc) { 6625bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org SsrcReceiverInfo stat; 6635bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org stat.ssrc = ssrc; 6645bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org add_ssrc(stat); 6655bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org } 6660c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström std::vector<uint32_t> ssrcs() const { 6670c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström std::vector<uint32_t> retval; 6685bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org for (std::vector<SsrcReceiverInfo>::const_iterator it = local_stats.begin(); 6695bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org it != local_stats.end(); ++it) { 6705bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org retval.push_back(it->ssrc); 6715bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org } 6725bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org return retval; 6735bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org } 6745bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org // Utility accessor for clients that make the assumption only one ssrc 6755bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org // exists per media. 6765bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org // This will eventually go away. 6770c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström uint32_t ssrc() const { 6785bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org if (local_stats.size() > 0) { 6795bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org return local_stats[0].ssrc; 6805bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org } else { 6815bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org return 0; 6825bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org } 6835bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org } 6845bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org 6850c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström int64_t bytes_rcvd; 68697077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org int packets_rcvd; 68797077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org int packets_lost; 68897077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org float fraction_lost; 6897e71b77f8aab5b7a6f2b669c16f90ec9a4b4609cbuildbot@webrtc.org std::string codec_name; 69097077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org std::vector<SsrcReceiverInfo> local_stats; 69197077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org std::vector<SsrcSenderInfo> remote_stats; 69297077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org}; 69397077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org 69497077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.orgstruct VoiceSenderInfo : public MediaSenderInfo { 69597077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org VoiceSenderInfo() 6965bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org : ext_seqnum(0), 69728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org jitter_ms(0), 69828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org audio_level(0), 69928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org aec_quality_min(0.0), 70028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org echo_delay_median_ms(0), 70128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org echo_delay_std_ms(0), 70228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org echo_return_loss(0), 703967bfff54d00f176a554bf9f955f14dde99f7bb9wu@webrtc.org echo_return_loss_enhancement(0), 704967bfff54d00f176a554bf9f955f14dde99f7bb9wu@webrtc.org typing_noise_detected(false) { 70528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 70628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 70728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int ext_seqnum; 70828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int jitter_ms; 70928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int audio_level; 71028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org float aec_quality_min; 71128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int echo_delay_median_ms; 71228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int echo_delay_std_ms; 71328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int echo_return_loss; 71428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int echo_return_loss_enhancement; 715967bfff54d00f176a554bf9f955f14dde99f7bb9wu@webrtc.org bool typing_noise_detected; 71628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 71728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 71897077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.orgstruct VoiceReceiverInfo : public MediaReceiverInfo { 71928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org VoiceReceiverInfo() 7205bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org : ext_seqnum(0), 72128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org jitter_ms(0), 72228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org jitter_buffer_ms(0), 72328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org jitter_buffer_preferred_ms(0), 72428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org delay_estimate_ms(0), 72528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org audio_level(0), 726b8c254abd6fa784294277e2baa8298c3352faf78henrike@webrtc.org expand_rate(0), 727c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org speech_expand_rate(0), 728c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org secondary_decoded_rate(0), 7298e6fd46cc324f8946e68396edcb252ffaf2d4579Henrik Lundin accelerate_rate(0), 7308e6fd46cc324f8946e68396edcb252ffaf2d4579Henrik Lundin preemptive_expand_rate(0), 731b8c254abd6fa784294277e2baa8298c3352faf78henrike@webrtc.org decoding_calls_to_silence_generator(0), 732b8c254abd6fa784294277e2baa8298c3352faf78henrike@webrtc.org decoding_calls_to_neteq(0), 733b8c254abd6fa784294277e2baa8298c3352faf78henrike@webrtc.org decoding_normal(0), 734b8c254abd6fa784294277e2baa8298c3352faf78henrike@webrtc.org decoding_plc(0), 735b8c254abd6fa784294277e2baa8298c3352faf78henrike@webrtc.org decoding_cng(0), 736b525a9d790b3fd5ec63aed92395623c3acdfd5b6buildbot@webrtc.org decoding_plc_cng(0), 7378e6fd46cc324f8946e68396edcb252ffaf2d4579Henrik Lundin capture_start_ntp_time_ms(-1) {} 73828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 73928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int ext_seqnum; 74028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int jitter_ms; 74128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int jitter_buffer_ms; 74228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int jitter_buffer_preferred_ms; 74328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int delay_estimate_ms; 74428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int audio_level; 745c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org // fraction of synthesized audio inserted through expansion. 74628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org float expand_rate; 747c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org // fraction of synthesized speech inserted through expansion. 748c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org float speech_expand_rate; 749c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org // fraction of data out of secondary decoding, including FEC and RED. 750c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org float secondary_decoded_rate; 7518e6fd46cc324f8946e68396edcb252ffaf2d4579Henrik Lundin // Fraction of data removed through time compression. 7528e6fd46cc324f8946e68396edcb252ffaf2d4579Henrik Lundin float accelerate_rate; 7538e6fd46cc324f8946e68396edcb252ffaf2d4579Henrik Lundin // Fraction of data inserted through time stretching. 7548e6fd46cc324f8946e68396edcb252ffaf2d4579Henrik Lundin float preemptive_expand_rate; 755b8c254abd6fa784294277e2baa8298c3352faf78henrike@webrtc.org int decoding_calls_to_silence_generator; 756b8c254abd6fa784294277e2baa8298c3352faf78henrike@webrtc.org int decoding_calls_to_neteq; 757b8c254abd6fa784294277e2baa8298c3352faf78henrike@webrtc.org int decoding_normal; 758b8c254abd6fa784294277e2baa8298c3352faf78henrike@webrtc.org int decoding_plc; 759b8c254abd6fa784294277e2baa8298c3352faf78henrike@webrtc.org int decoding_cng; 760b8c254abd6fa784294277e2baa8298c3352faf78henrike@webrtc.org int decoding_plc_cng; 761b525a9d790b3fd5ec63aed92395623c3acdfd5b6buildbot@webrtc.org // Estimated capture start time in NTP time in ms. 7620c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström int64_t capture_start_ntp_time_ms; 76328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 76428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 76597077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.orgstruct VideoSenderInfo : public MediaSenderInfo { 76628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org VideoSenderInfo() 7671ed6224eafc7816f25d1906e4d709afdf2ad8f0fpbos@webrtc.org : packets_cached(0), 7681ed6224eafc7816f25d1906e4d709afdf2ad8f0fpbos@webrtc.org firs_rcvd(0), 769704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org plis_rcvd(0), 77028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org nacks_rcvd(0), 771987f2c9aae7f4dd3ce5eb46fbe560bc584231195wu@webrtc.org input_frame_width(0), 772987f2c9aae7f4dd3ce5eb46fbe560bc584231195wu@webrtc.org input_frame_height(0), 773987f2c9aae7f4dd3ce5eb46fbe560bc584231195wu@webrtc.org send_frame_width(0), 774987f2c9aae7f4dd3ce5eb46fbe560bc584231195wu@webrtc.org send_frame_height(0), 77528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org framerate_input(0), 77628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org framerate_sent(0), 77728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org nominal_bitrate(0), 77828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org preferred_bitrate(0), 7795bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org adapt_reason(0), 78071dffb76dcc59fcd886c4899b91a7a48db6ea254buildbot@webrtc.org adapt_changes(0), 7819caf2765b285f7511d8355177c2d55209d7573e4wu@webrtc.org avg_encode_ms(0), 7828ed6a4bba41ab8c707e141a210666d60dc4d170dPeter Boström encode_usage_percent(0) { 7831ed6224eafc7816f25d1906e4d709afdf2ad8f0fpbos@webrtc.org } 78428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 7851ed6224eafc7816f25d1906e4d709afdf2ad8f0fpbos@webrtc.org std::vector<SsrcGroup> ssrc_groups; 786b7d9a97ce41022e984348efb5f28bf6dd6c6b779Peter Boström std::string encoder_implementation_name; 7871ed6224eafc7816f25d1906e4d709afdf2ad8f0fpbos@webrtc.org int packets_cached; 78828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int firs_rcvd; 789704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org int plis_rcvd; 79028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int nacks_rcvd; 791987f2c9aae7f4dd3ce5eb46fbe560bc584231195wu@webrtc.org int input_frame_width; 792987f2c9aae7f4dd3ce5eb46fbe560bc584231195wu@webrtc.org int input_frame_height; 793987f2c9aae7f4dd3ce5eb46fbe560bc584231195wu@webrtc.org int send_frame_width; 794987f2c9aae7f4dd3ce5eb46fbe560bc584231195wu@webrtc.org int send_frame_height; 79528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int framerate_input; 79628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int framerate_sent; 79728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int nominal_bitrate; 79828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int preferred_bitrate; 79928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int adapt_reason; 80071dffb76dcc59fcd886c4899b91a7a48db6ea254buildbot@webrtc.org int adapt_changes; 8015bc25c41fc7880545052770dbcfe67f233c9b0c0sergeyu@chromium.org int avg_encode_ms; 8029caf2765b285f7511d8355177c2d55209d7573e4wu@webrtc.org int encode_usage_percent; 803704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org VariableInfo<int> adapt_frame_drops; 804704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org VariableInfo<int> effects_frame_drops; 805704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org VariableInfo<double> capturer_frame_time; 80628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 80728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 80897077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.orgstruct VideoReceiverInfo : public MediaReceiverInfo { 80928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org VideoReceiverInfo() 8101ed6224eafc7816f25d1906e4d709afdf2ad8f0fpbos@webrtc.org : packets_concealed(0), 8111ed6224eafc7816f25d1906e4d709afdf2ad8f0fpbos@webrtc.org firs_sent(0), 812704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org plis_sent(0), 81328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org nacks_sent(0), 81428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org frame_width(0), 81528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org frame_height(0), 81628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org framerate_rcvd(0), 81728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org framerate_decoded(0), 81828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org framerate_output(0), 8191ed6224eafc7816f25d1906e4d709afdf2ad8f0fpbos@webrtc.org framerate_render_input(0), 8201ed6224eafc7816f25d1906e4d709afdf2ad8f0fpbos@webrtc.org framerate_render_output(0), 82197077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org decode_ms(0), 82297077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org max_decode_ms(0), 82397077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org jitter_buffer_ms(0), 82497077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org min_playout_delay_ms(0), 82597077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org render_delay_ms(0), 82697077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org target_delay_ms(0), 8270581f0ba0a28fb4a85019efda2dd3fadcd081172buildbot@webrtc.org current_delay_ms(0), 8281ed6224eafc7816f25d1906e4d709afdf2ad8f0fpbos@webrtc.org capture_start_ntp_time_ms(-1) { 8291ed6224eafc7816f25d1906e4d709afdf2ad8f0fpbos@webrtc.org } 83028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 8311ed6224eafc7816f25d1906e4d709afdf2ad8f0fpbos@webrtc.org std::vector<SsrcGroup> ssrc_groups; 832b7d9a97ce41022e984348efb5f28bf6dd6c6b779Peter Boström std::string decoder_implementation_name; 8331ed6224eafc7816f25d1906e4d709afdf2ad8f0fpbos@webrtc.org int packets_concealed; 83428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int firs_sent; 835704bf9ebec9c9425e1898f6c3f15eff685175b23henrike@webrtc.org int plis_sent; 83628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int nacks_sent; 83728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int frame_width; 83828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int frame_height; 83928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int framerate_rcvd; 84028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int framerate_decoded; 84128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int framerate_output; 8421ed6224eafc7816f25d1906e4d709afdf2ad8f0fpbos@webrtc.org // Framerate as sent to the renderer. 8431ed6224eafc7816f25d1906e4d709afdf2ad8f0fpbos@webrtc.org int framerate_render_input; 8441ed6224eafc7816f25d1906e4d709afdf2ad8f0fpbos@webrtc.org // Framerate that the renderer reports. 8451ed6224eafc7816f25d1906e4d709afdf2ad8f0fpbos@webrtc.org int framerate_render_output; 84697077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org 84797077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org // All stats below are gathered per-VideoReceiver, but some will be correlated 84897077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org // across MediaStreamTracks. NOTE(hta): when sinking stats into per-SSRC 84997077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org // structures, reflect this in the new layout. 85097077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org 85197077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org // Current frame decode latency. 85297077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org int decode_ms; 85397077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org // Maximum observed frame decode latency. 85497077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org int max_decode_ms; 85597077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org // Jitter (network-related) latency. 85697077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org int jitter_buffer_ms; 85797077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org // Requested minimum playout latency. 85897077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org int min_playout_delay_ms; 85997077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org // Requested latency to account for rendering delay. 86097077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org int render_delay_ms; 86197077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org // Target overall delay: network+decode+render, accounting for 86297077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org // min_playout_delay_ms. 86397077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org int target_delay_ms; 86497077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org // Current overall delay, possibly ramping towards target_delay_ms. 86597077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org int current_delay_ms; 8660581f0ba0a28fb4a85019efda2dd3fadcd081172buildbot@webrtc.org 8670581f0ba0a28fb4a85019efda2dd3fadcd081172buildbot@webrtc.org // Estimated capture start time in NTP time in ms. 8680c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström int64_t capture_start_ntp_time_ms; 86928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 87028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 87197077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.orgstruct DataSenderInfo : public MediaSenderInfo { 87228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org DataSenderInfo() 87397077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org : ssrc(0) { 87428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 87528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 8760c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström uint32_t ssrc; 87728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 87828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 87997077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.orgstruct DataReceiverInfo : public MediaReceiverInfo { 88028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org DataReceiverInfo() 88197077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org : ssrc(0) { 88228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 88328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 8840c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström uint32_t ssrc; 88528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 88628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 88728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgstruct BandwidthEstimationInfo { 88828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org BandwidthEstimationInfo() 88928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org : available_send_bandwidth(0), 89028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org available_recv_bandwidth(0), 89128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org target_enc_bitrate(0), 89228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org actual_enc_bitrate(0), 89328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org retransmit_bitrate(0), 89428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org transmit_bitrate(0), 895058b1f17ac43b1fe69a8c18aaa7999ba88733dfdpbos@webrtc.org bucket_delay(0) { 89628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 89728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 89828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int available_send_bandwidth; 89928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int available_recv_bandwidth; 90028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int target_enc_bitrate; 90128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int actual_enc_bitrate; 90228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int retransmit_bitrate; 90328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int transmit_bitrate; 90416825b1a828bb4ff40f7682040e43a239b7b8ca3pkasting@chromium.org int64_t bucket_delay; 90528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 90628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 90728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgstruct VoiceMediaInfo { 90828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org void Clear() { 90928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org senders.clear(); 91028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org receivers.clear(); 91128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 91228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org std::vector<VoiceSenderInfo> senders; 91328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org std::vector<VoiceReceiverInfo> receivers; 91428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 91528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 91628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgstruct VideoMediaInfo { 91728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org void Clear() { 91828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org senders.clear(); 91928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org receivers.clear(); 92028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org bw_estimations.clear(); 92128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 92228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org std::vector<VideoSenderInfo> senders; 92328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org std::vector<VideoReceiverInfo> receivers; 92428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org std::vector<BandwidthEstimationInfo> bw_estimations; 92528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 92628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 92728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgstruct DataMediaInfo { 92828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org void Clear() { 92928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org senders.clear(); 93028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org receivers.clear(); 93128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 93228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org std::vector<DataSenderInfo> senders; 93328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org std::vector<DataReceiverInfo> receivers; 93428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 93528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 9361387149ad1669365ac05278bf779a407bec08a4edeadbeefstruct RtcpParameters { 9371387149ad1669365ac05278bf779a407bec08a4edeadbeef bool reduced_size = false; 9381387149ad1669365ac05278bf779a407bec08a4edeadbeef}; 9391387149ad1669365ac05278bf779a407bec08a4edeadbeef 940c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatchertemplate <class Codec> 941c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcherstruct RtpParameters { 9427e4e01a4413fa98644b94ab9d8a9dccc664f39f2solenberg virtual std::string ToString() const { 943c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher std::ostringstream ost; 944c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "{"; 945c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "codecs: " << VectorToString(codecs) << ", "; 946c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "extensions: " << VectorToString(extensions); 947c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "}"; 948c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher return ost.str(); 949c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher } 950c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher 951c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher std::vector<Codec> codecs; 952c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher std::vector<RtpHeaderExtension> extensions; 953c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher // TODO(pthatcher): Add streams. 9541387149ad1669365ac05278bf779a407bec08a4edeadbeef RtcpParameters rtcp; 955c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher}; 956c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher 957c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatchertemplate <class Codec, class Options> 958c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcherstruct RtpSendParameters : RtpParameters<Codec> { 9597e4e01a4413fa98644b94ab9d8a9dccc664f39f2solenberg std::string ToString() const override { 960c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher std::ostringstream ost; 961c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "{"; 962c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "codecs: " << VectorToString(this->codecs) << ", "; 963c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "extensions: " << VectorToString(this->extensions) << ", "; 964c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "max_bandiwidth_bps: " << max_bandwidth_bps << ", "; 965c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "options: " << options.ToString(); 966c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "}"; 967c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher return ost.str(); 968c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher } 969c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher 970c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher int max_bandwidth_bps = -1; 971c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher Options options; 972c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher}; 973c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher 974c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcherstruct AudioSendParameters : RtpSendParameters<AudioCodec, AudioOptions> { 975c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher}; 976c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher 977c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcherstruct AudioRecvParameters : RtpParameters<AudioCodec> { 978c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher}; 979c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher 98028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgclass VoiceMediaChannel : public MediaChannel { 98128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org public: 98228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org enum Error { 98328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_NONE = 0, // No error. 98428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_OTHER, // Other errors. 98528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_REC_DEVICE_OPEN_FAILED = 100, // Could not open mic. 98628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_REC_DEVICE_MUTED, // Mic was muted by OS. 98728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_REC_DEVICE_SILENT, // No background noise picked up. 98828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_REC_DEVICE_SATURATION, // Mic input is clipping. 98928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_REC_DEVICE_REMOVED, // Mic was removed while active. 99028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_REC_RUNTIME_ERROR, // Processing is encountering errors. 99128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_REC_SRTP_ERROR, // Generic SRTP failure. 99228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_REC_SRTP_AUTH_FAILED, // Failed to authenticate packets. 99328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_REC_TYPING_NOISE_DETECTED, // Typing noise is detected. 99428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_PLAY_DEVICE_OPEN_FAILED = 200, // Could not open playout. 99528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_PLAY_DEVICE_MUTED, // Playout muted by OS. 99628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_PLAY_DEVICE_REMOVED, // Playout removed while active. 99728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_PLAY_RUNTIME_ERROR, // Errors in voice processing. 99828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_PLAY_SRTP_ERROR, // Generic SRTP failure. 99928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_PLAY_SRTP_AUTH_FAILED, // Failed to authenticate packets. 100028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_PLAY_SRTP_REPLAY, // Packet replay detected. 100128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org }; 100228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 100328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org VoiceMediaChannel() {} 100428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual ~VoiceMediaChannel() {} 1005b071a19019a0a2173cc139c960d6ef6946a1c581Fredrik Solenberg virtual bool SetSendParameters(const AudioSendParameters& params) = 0; 1006b071a19019a0a2173cc139c960d6ef6946a1c581Fredrik Solenberg virtual bool SetRecvParameters(const AudioRecvParameters& params) = 0; 100728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Starts or stops playout of received audio. 100828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual bool SetPlayout(bool playout) = 0; 100928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Starts or stops sending (and potentially capture) of local audio. 101028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual bool SetSend(SendFlags flag) = 0; 10111dd98f321920c1442dd5b3f791ea0fca133c2756solenberg // Configure stream for sending. 10120c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström virtual bool SetAudioSend(uint32_t ssrc, 10130c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström bool enable, 1014dfc8f4ff8731390828884a0a91b99e51f2950275solenberg const AudioOptions* options, 10151dd98f321920c1442dd5b3f791ea0fca133c2756solenberg AudioRenderer* renderer) = 0; 101628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Gets current energy levels for all incoming streams. 101728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual bool GetActiveStreams(AudioInfo::StreamList* actives) = 0; 101828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Get the current energy level of the stream sent to the speaker. 101928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual int GetOutputLevel() = 0; 102028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Get the time in milliseconds since last recorded keystroke, or negative. 102128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual int GetTimeSinceLastTyping() = 0; 102228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Temporarily exposed field for tuning typing detect options. 102328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual void SetTypingDetectionParameters(int time_window, 102428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int cost_per_typing, int reporting_threshold, int penalty_decay, 102528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int type_event_delay) = 0; 10264bac9c53da9988741d59753c2d789adb94de5e68solenberg // Set speaker output volume of the specified ssrc. 10274bac9c53da9988741d59753c2d789adb94de5e68solenberg virtual bool SetOutputVolume(uint32_t ssrc, double volume) = 0; 102828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Returns if the telephone-event has been negotiated. 10291d63dd0eaa44d13c5ae083200937b18bce2132aesolenberg virtual bool CanInsertDtmf() = 0; 10301d63dd0eaa44d13c5ae083200937b18bce2132aesolenberg // Send a DTMF |event|. The DTMF out-of-band signal will be used. 103128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // The |ssrc| should be either 0 or a valid send stream ssrc. 10329de257d00f1f805af28f15fd814a8a84460028e5henrike@webrtc.org // The valid value for the |event| are 0 to 15 which corresponding to 10339de257d00f1f805af28f15fd814a8a84460028e5henrike@webrtc.org // DTMF event 0-9, *, #, A-D. 10341d63dd0eaa44d13c5ae083200937b18bce2132aesolenberg virtual bool InsertDtmf(uint32_t ssrc, int event, int duration) = 0; 103528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Gets quality stats for the channel. 103628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual bool GetStats(VoiceMediaInfo* info) = 0; 1037f888bb58da04c5095759b5ec7ce2e1fa2cd414fdTommi 1038f888bb58da04c5095759b5ec7ce2e1fa2cd414fdTommi virtual void SetRawAudioSink( 1039f888bb58da04c5095759b5ec7ce2e1fa2cd414fdTommi uint32_t ssrc, 10402d110be77f14cab0bb51efe8b61d9c7a967d04cbdeadbeef rtc::scoped_ptr<webrtc::AudioSinkInterface> sink) = 0; 104128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 104228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 1043c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcherstruct VideoSendParameters : RtpSendParameters<VideoCodec, VideoOptions> { 1044c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher}; 1045c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher 1046c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcherstruct VideoRecvParameters : RtpParameters<VideoCodec> { 1047c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher}; 1048c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher 104928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgclass VideoMediaChannel : public MediaChannel { 105028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org public: 105128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org enum Error { 105228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_NONE = 0, // No error. 105328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_OTHER, // Other errors. 105428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_REC_DEVICE_OPEN_FAILED = 100, // Could not open camera. 105528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_REC_DEVICE_NO_DEVICE, // No camera. 105628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_REC_DEVICE_IN_USE, // Device is in already use. 105728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_REC_DEVICE_REMOVED, // Device is removed. 105828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_REC_SRTP_ERROR, // Generic sender SRTP failure. 105928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_REC_SRTP_AUTH_FAILED, // Failed to authenticate packets. 106028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_REC_CPU_MAX_CANT_DOWNGRADE, // Can't downgrade capture anymore. 106128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_PLAY_SRTP_ERROR = 200, // Generic receiver SRTP failure. 106228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_PLAY_SRTP_AUTH_FAILED, // Failed to authenticate packets. 106328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_PLAY_SRTP_REPLAY, // Packet replay detected. 106428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org }; 106528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 106628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org VideoMediaChannel() : renderer_(NULL) {} 106728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual ~VideoMediaChannel() {} 1068b071a19019a0a2173cc139c960d6ef6946a1c581Fredrik Solenberg 1069b071a19019a0a2173cc139c960d6ef6946a1c581Fredrik Solenberg virtual bool SetSendParameters(const VideoSendParameters& params) = 0; 1070b071a19019a0a2173cc139c960d6ef6946a1c581Fredrik Solenberg virtual bool SetRecvParameters(const VideoRecvParameters& params) = 0; 107128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Gets the currently set codecs/payload types to be used for outgoing media. 107228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual bool GetSendCodec(VideoCodec* send_codec) = 0; 107328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Sets the format of a specified outgoing stream. 10740c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström virtual bool SetSendStreamFormat(uint32_t ssrc, 10750c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström const VideoFormat& format) = 0; 107628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Starts or stops transmission (and potentially capture) of local video. 107728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual bool SetSend(bool send) = 0; 10781dd98f321920c1442dd5b3f791ea0fca133c2756solenberg // Configure stream for sending. 10790c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström virtual bool SetVideoSend(uint32_t ssrc, 10800c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström bool enable, 10811dd98f321920c1442dd5b3f791ea0fca133c2756solenberg const VideoOptions* options) = 0; 108228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Sets the renderer object to be used for the specified stream. 108328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // If SSRC is 0, the renderer is used for the 'default' stream. 10840c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström virtual bool SetRenderer(uint32_t ssrc, VideoRenderer* renderer) = 0; 108528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // If |ssrc| is 0, replace the default capturer (engine capturer) with 108628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // |capturer|. If |ssrc| is non zero create a new stream with |ssrc| as SSRC. 10870c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström virtual bool SetCapturer(uint32_t ssrc, VideoCapturer* capturer) = 0; 108828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Gets quality stats for the channel. 1089058b1f17ac43b1fe69a8c18aaa7999ba88733dfdpbos@webrtc.org virtual bool GetStats(VideoMediaInfo* info) = 0; 109028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Send an intra frame to the receivers. 109128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual bool SendIntraFrame() = 0; 109228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Reuqest each of the remote senders to send an intra frame. 109328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual bool RequestIntraFrame() = 0; 109428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual void UpdateAspectRatio(int ratio_w, int ratio_h) = 0; 109528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 109628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org protected: 109728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org VideoRenderer *renderer_; 109828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 109928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 110028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgenum DataMessageType { 11011112c30e1e5f5c7b4b517c4954ef3f15b989a996mallinath@webrtc.org // Chrome-Internal use only. See SctpDataMediaChannel for the actual PPID 11021112c30e1e5f5c7b4b517c4954ef3f15b989a996mallinath@webrtc.org // values. 11031112c30e1e5f5c7b4b517c4954ef3f15b989a996mallinath@webrtc.org DMT_NONE = 0, 11041112c30e1e5f5c7b4b517c4954ef3f15b989a996mallinath@webrtc.org DMT_CONTROL = 1, 11051112c30e1e5f5c7b4b517c4954ef3f15b989a996mallinath@webrtc.org DMT_BINARY = 2, 11061112c30e1e5f5c7b4b517c4954ef3f15b989a996mallinath@webrtc.org DMT_TEXT = 3, 110728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 110828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 110928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// Info about data received in DataMediaChannel. For use in 111028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// DataMediaChannel::SignalDataReceived and in all of the signals that 111128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// signal fires, on up the chain. 111228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgstruct ReceiveDataParams { 111328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // The in-packet stream indentifier. 111428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // For SCTP, this is really SID, not SSRC. 11150c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström uint32_t ssrc; 111628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // The type of message (binary, text, or control). 111728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org DataMessageType type; 111828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // A per-stream value incremented per packet in the stream. 111928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int seq_num; 112028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // A per-stream value monotonically increasing with time. 112128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int timestamp; 112228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 112328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ReceiveDataParams() : 112428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ssrc(0), 112528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org type(DMT_TEXT), 112628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org seq_num(0), 112728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org timestamp(0) { 112828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 112928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 113028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 113128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgstruct SendDataParams { 113228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // The in-packet stream indentifier. 113328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // For SCTP, this is really SID, not SSRC. 11340c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström uint32_t ssrc; 113528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // The type of message (binary, text, or control). 113628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org DataMessageType type; 113728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 113828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // For SCTP, whether to send messages flagged as ordered or not. 113928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // If false, messages can be received out of order. 114028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org bool ordered; 114128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // For SCTP, whether the messages are sent reliably or not. 114228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // If false, messages may be lost. 114328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org bool reliable; 114428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // For SCTP, if reliable == false, provide partial reliability by 114528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // resending up to this many times. Either count or millis 114628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // is supported, not both at the same time. 114728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int max_rtx_count; 114828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // For SCTP, if reliable == false, provide partial reliability by 114928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // resending for up to this many milliseconds. Either count or millis 115028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // is supported, not both at the same time. 115128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int max_rtx_ms; 115228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 115328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org SendDataParams() : 115428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ssrc(0), 115528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org type(DMT_TEXT), 115628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // TODO(pthatcher): Make these true by default? 115728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ordered(false), 115828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org reliable(false), 115928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org max_rtx_count(0), 116028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org max_rtx_ms(0) { 116128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 116228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 116328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 116428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgenum SendDataResult { SDR_SUCCESS, SDR_ERROR, SDR_BLOCK }; 116528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 1166c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcherstruct DataOptions { 11677e4e01a4413fa98644b94ab9d8a9dccc664f39f2solenberg std::string ToString() const { 1168c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher return "{}"; 1169c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher } 1170c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher}; 1171c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher 1172c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcherstruct DataSendParameters : RtpSendParameters<DataCodec, DataOptions> { 11737e4e01a4413fa98644b94ab9d8a9dccc664f39f2solenberg std::string ToString() const { 1174c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher std::ostringstream ost; 1175c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher // Options and extensions aren't used. 1176c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "{"; 1177c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "codecs: " << VectorToString(codecs) << ", "; 1178c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "max_bandiwidth_bps: " << max_bandwidth_bps; 1179c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher ost << "}"; 1180c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher return ost.str(); 1181c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher } 1182c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher}; 1183c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher 1184c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcherstruct DataRecvParameters : RtpParameters<DataCodec> { 1185c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher}; 1186c2ee2c86f905991a8cd05ee1f35bea105b41e4e0Peter Thatcher 118728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgclass DataMediaChannel : public MediaChannel { 118828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org public: 118928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org enum Error { 119028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_NONE = 0, // No error. 119128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_OTHER, // Other errors. 119228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_SEND_SRTP_ERROR = 200, // Generic SRTP failure. 119328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_SEND_SRTP_AUTH_FAILED, // Failed to authenticate packets. 119428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_RECV_SRTP_ERROR, // Generic SRTP failure. 119528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_RECV_SRTP_AUTH_FAILED, // Failed to authenticate packets. 119628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ERROR_RECV_SRTP_REPLAY, // Packet replay detected. 119728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org }; 119828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 119928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual ~DataMediaChannel() {} 120028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 1201b071a19019a0a2173cc139c960d6ef6946a1c581Fredrik Solenberg virtual bool SetSendParameters(const DataSendParameters& params) = 0; 1202b071a19019a0a2173cc139c960d6ef6946a1c581Fredrik Solenberg virtual bool SetRecvParameters(const DataRecvParameters& params) = 0; 1203a9890800e078105f21f0a21358ee59a0b3736af6wu@webrtc.org 120428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // TODO(pthatcher): Implement this. 120528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual bool GetStats(DataMediaInfo* info) { return true; } 120628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 120728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual bool SetSend(bool send) = 0; 120828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual bool SetReceive(bool receive) = 0; 120928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 121028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual bool SendData( 121128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org const SendDataParams& params, 1212d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org const rtc::Buffer& payload, 121328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org SendDataResult* result = NULL) = 0; 121428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Signals when data is received (params, data, len) 121528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org sigslot::signal3<const ReceiveDataParams&, 121628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org const char*, 121728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org size_t> SignalDataReceived; 1218d64719d8954262fee94e7615422f3d027dc1ae6bwu@webrtc.org // Signal when the media channel is ready to send the stream. Arguments are: 1219d64719d8954262fee94e7615422f3d027dc1ae6bwu@webrtc.org // writable(bool) 1220d64719d8954262fee94e7615422f3d027dc1ae6bwu@webrtc.org sigslot::signal1<bool> SignalReadyToSend; 12211d66be22c8f929e1170f288472aac9d4b44b7a05buildbot@webrtc.org // Signal for notifying that the remote side has closed the DataChannel. 12220c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström sigslot::signal1<uint32_t> SignalStreamClosedRemotely; 122328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 122428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 122528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org} // namespace cricket 122628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 122728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#endif // TALK_MEDIA_BASE_MEDIACHANNEL_H_ 1228