1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_VIDEO_ENGINE_VIE_CHANNEL_H_ 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_VIDEO_ENGINE_VIE_CHANNEL_H_ 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <list> 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 16065b64d41755bcde64d8db6920ba16049af46177pwestin@webrtc.org#include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h" 17065b64d41755bcde64d8db6920ba16049af46177pwestin@webrtc.org#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h" 18065b64d41755bcde64d8db6920ba16049af46177pwestin@webrtc.org#include "webrtc/modules/video_coding/main/interface/video_coding_defines.h" 19065b64d41755bcde64d8db6920ba16049af46177pwestin@webrtc.org#include "webrtc/system_wrappers/interface/scoped_ptr.h" 20065b64d41755bcde64d8db6920ba16049af46177pwestin@webrtc.org#include "webrtc/system_wrappers/interface/tick_util.h" 21065b64d41755bcde64d8db6920ba16049af46177pwestin@webrtc.org#include "webrtc/typedefs.h" 22065b64d41755bcde64d8db6920ba16049af46177pwestin@webrtc.org#include "webrtc/video_engine/include/vie_network.h" 23065b64d41755bcde64d8db6920ba16049af46177pwestin@webrtc.org#include "webrtc/video_engine/include/vie_rtp_rtcp.h" 24065b64d41755bcde64d8db6920ba16049af46177pwestin@webrtc.org#include "webrtc/video_engine/vie_defines.h" 25065b64d41755bcde64d8db6920ba16049af46177pwestin@webrtc.org#include "webrtc/video_engine/vie_frame_provider_base.h" 26065b64d41755bcde64d8db6920ba16049af46177pwestin@webrtc.org#include "webrtc/video_engine/vie_receiver.h" 27065b64d41755bcde64d8db6920ba16049af46177pwestin@webrtc.org#include "webrtc/video_engine/vie_sender.h" 28065b64d41755bcde64d8db6920ba16049af46177pwestin@webrtc.org#include "webrtc/video_engine/vie_sync_module.h" 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 320329e591cd17957836fd295ae9b31f7d3a73e5e8fischman@webrtc.orgclass CallStatsObserver; 3378696d33d7711eb8208400908237c384b235bf74mflodman@webrtc.orgclass ChannelStatsObserver; 34ac6d919eec548c708588f29923f617a17283c7e2andresp@webrtc.orgclass Config; 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass CriticalSectionWrapper; 362e98d45e2455d3b48ceac1ad5457623d39802c9esprang@webrtc.orgclass EncodedImageCallback; 3763301bd03e009d309d1fdca1217f8708be610f32pbos@webrtc.orgclass I420FrameCallback; 385e87b5f032780f6941a27c2d5068ab1e89e659a6pwestin@webrtc.orgclass PacedSender; 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ProcessThread; 40c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.orgclass RtcpRttStats; 41ac6d919eec548c708588f29923f617a17283c7e2andresp@webrtc.orgclass RtpRtcp; 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ThreadWrapper; 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ViEDecoderObserver; 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ViEEffectFilter; 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ViERTCPObserver; 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ViERTPObserver; 47ac6d919eec548c708588f29923f617a17283c7e2andresp@webrtc.orgclass VideoCodingModule; 48ac6d919eec548c708588f29923f617a17283c7e2andresp@webrtc.orgclass VideoDecoder; 49ac6d919eec548c708588f29923f617a17283c7e2andresp@webrtc.orgclass VideoRenderCallback; 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass VoEVideoSync; 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ViEChannel 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org : public VCMFrameTypeCallback, 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public VCMReceiveCallback, 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public VCMReceiveStatisticsCallback, 56ecfef1930d59e5b7dc14e71b1ac3ed892980d151fischman@webrtc.org public VCMDecoderTimingCallback, 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public VCMPacketRequestCallback, 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public RtcpFeedback, 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public RtpFeedback, 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public ViEFrameProviderBase { 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public: 6278696d33d7711eb8208400908237c384b235bf74mflodman@webrtc.org friend class ChannelStatsObserver; 6378696d33d7711eb8208400908237c384b235bf74mflodman@webrtc.org 6467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org ViEChannel(int32_t channel_id, 6567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t engine_id, 6667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t number_of_cores, 67ac6d919eec548c708588f29923f617a17283c7e2andresp@webrtc.org const Config& config, 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ProcessThread& module_process_thread, 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RtcpIntraFrameObserver* intra_frame_observer, 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RtcpBandwidthObserver* bandwidth_observer, 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RemoteBitrateEstimator* remote_bitrate_estimator, 72c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.org RtcpRttStats* rtt_stats, 735e87b5f032780f6941a27c2d5068ab1e89e659a6pwestin@webrtc.org PacedSender* paced_sender, 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RtpRtcp* default_rtp_rtcp, 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool sender); 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ~ViEChannel(); 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 7867879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t Init(); 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Sets the encoder to use for the channel. |new_stream| indicates the encoder 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // type has changed and we should start a new RTP stream. 8267879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SetSendCodec(const VideoCodec& video_codec, bool new_stream = true); 8367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SetReceiveCodec(const VideoCodec& video_codec); 8467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t GetReceiveCodec(VideoCodec* video_codec); 8567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t RegisterCodecObserver(ViEDecoderObserver* observer); 86208a648d4f269c1cbaa65e16b842b2b4694b9b59pbos@webrtc.org // Registers an external decoder. |buffered_rendering| means that the decoder 87208a648d4f269c1cbaa65e16b842b2b4694b9b59pbos@webrtc.org // will render frames after decoding according to the render timestamp 88208a648d4f269c1cbaa65e16b842b2b4694b9b59pbos@webrtc.org // provided by the video coding module. |render_delay| indicates the time 89208a648d4f269c1cbaa65e16b842b2b4694b9b59pbos@webrtc.org // needed to decode and render a frame. 9067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t RegisterExternalDecoder(const uint8_t pl_type, 9167879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org VideoDecoder* decoder, 9267879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org bool buffered_rendering, 9367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t render_delay); 9467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t DeRegisterExternalDecoder(const uint8_t pl_type); 9567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t ReceiveCodecStatistics(uint32_t* num_key_frames, 9667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t* num_delta_frames); 9767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t DiscardedPackets() const; 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 99f314c80eb667406101dbc5810fda799f67030a0fmflodman@webrtc.org // Returns the estimated delay in milliseconds. 100f314c80eb667406101dbc5810fda799f67030a0fmflodman@webrtc.org int ReceiveDelay() const; 101f314c80eb667406101dbc5810fda799f67030a0fmflodman@webrtc.org 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Only affects calls to SetReceiveCodec done after this call. 10367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t WaitForKeyFrame(bool wait); 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // If enabled, a key frame request will be sent as soon as there are lost 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // packets. If |only_key_frames| are set, requests are only sent for loss in 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // key frames. 10867879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SetSignalPacketLossStatus(bool enable, bool only_key_frames); 10967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org 11067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SetRTCPMode(const RTCPMethod rtcp_mode); 11167879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t GetRTCPMode(RTCPMethod* rtcp_mode); 11267879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SetNACKStatus(const bool enable); 11367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SetFECStatus(const bool enable, 11467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const unsigned char payload_typeRED, 11567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const unsigned char payload_typeFEC); 11667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SetHybridNACKFECStatus(const bool enable, 11767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const unsigned char payload_typeRED, 11867879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const unsigned char payload_typeFEC); 1199d6fcb37be4c9f49e1bb0b32bb01314c31f5e1ddmikhal@webrtc.org int SetSenderBufferingMode(int target_delay_ms); 1209d6fcb37be4c9f49e1bb0b32bb01314c31f5e1ddmikhal@webrtc.org int SetReceiverBufferingMode(int target_delay_ms); 12167879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SetKeyFrameRequestMethod(const KeyFrameRequestMethod method); 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool EnableRemb(bool enable); 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int SetSendTimestampOffsetStatus(bool enable, int id); 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int SetReceiveTimestampOffsetStatus(bool enable, int id); 125453f9c0b3e2c0396b9e519ef37267a2056b65bd2solenberg@webrtc.org int SetSendAbsoluteSendTimeStatus(bool enable, int id); 126453f9c0b3e2c0396b9e519ef37267a2056b65bd2solenberg@webrtc.org int SetReceiveAbsoluteSendTimeStatus(bool enable, int id); 127f40e9b6ea200906facbabf507d0ef15ceae61fa3solenberg@webrtc.org bool GetReceiveAbsoluteSendTimeStatus() const; 1283dc7ff30185a2d7a597acb69183fca73bd1004d8asapersson@webrtc.org void SetRtcpXrRrtrStatus(bool enable); 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void SetTransmissionSmoothingStatus(bool enable); 13067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t EnableTMMBR(const bool enable); 13167879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t EnableKeyFrameRequestCallback(const bool enable); 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Sets SSRC for outgoing stream. 13467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SetSSRC(const uint32_t SSRC, 13567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const StreamType usage, 13667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const unsigned char simulcast_idx); 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 138b6d9cfc6347e490751e142ba5fb89e4a975ed442mflodman@webrtc.org // Gets SSRC for outgoing stream number |idx|. 13967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t GetLocalSSRC(uint8_t idx, unsigned int* ssrc); 140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Gets SSRC for the incoming stream. 14267879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t GetRemoteSSRC(uint32_t* ssrc); 143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Gets the CSRC for the incoming stream. 14567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t GetRemoteCSRC(uint32_t CSRCs[kRtpCsrcSize]); 146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1477bc7e02c4aadc8acb8fdc35a555a0cb33e566b16mflodman@webrtc.org int SetRtxSendPayloadType(int payload_type); 1486845de7e4eed28e61c3edb263fb4bbcd65ff76fbstefan@webrtc.org // Only has an effect once RTX is enabled. 1496845de7e4eed28e61c3edb263fb4bbcd65ff76fbstefan@webrtc.org void SetPadWithRedundantPayloads(bool enable); 1507bc7e02c4aadc8acb8fdc35a555a0cb33e566b16mflodman@webrtc.org void SetRtxReceivePayloadType(int payload_type); 1517bc7e02c4aadc8acb8fdc35a555a0cb33e566b16mflodman@webrtc.org 152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Sets the starting sequence number, must be called before StartSend. 15367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SetStartSequenceNumber(uint16_t sequence_number); 154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Sets the CName for the outgoing stream on the channel. 15667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SetRTCPCName(const char rtcp_cname[]); 157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Gets the CName for the outgoing stream on the channel. 15967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t GetRTCPCName(char rtcp_cname[]); 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Gets the CName of the incoming stream. 16267879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t GetRemoteRTCPCName(char rtcp_cname[]); 16367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t RegisterRtpObserver(ViERTPObserver* observer); 16467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t RegisterRtcpObserver(ViERTCPObserver* observer); 16567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SendApplicationDefinedRTCPPacket( 16667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint8_t sub_type, 16767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t name, 16867879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint8_t* data, 16967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint16_t data_length_in_bytes); 170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Returns statistics reported by the remote client in an RTCP packet. 17267879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t GetSendRtcpStatistics(uint16_t* fraction_lost, 17367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t* cumulative_lost, 17467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t* extended_max, 17567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t* jitter_samples, 17667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t* rtt_ms); 177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1789b30fd3991cf4fdbab0141e297c5b2e55fc65937sprang@webrtc.org // Called on receipt of RTCP report block from remote side. 1799b30fd3991cf4fdbab0141e297c5b2e55fc65937sprang@webrtc.org void RegisterSendChannelRtcpStatisticsCallback( 1809b30fd3991cf4fdbab0141e297c5b2e55fc65937sprang@webrtc.org RtcpStatisticsCallback* callback); 1819b30fd3991cf4fdbab0141e297c5b2e55fc65937sprang@webrtc.org 182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Returns our localy created statistics of the received RTP stream. 18367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t GetReceivedRtcpStatistics(uint16_t* fraction_lost, 18467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t* cumulative_lost, 18567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t* extended_max, 18667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t* jitter_samples, 18767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t* rtt_ms); 188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1894f1f5fa55d803fc0b7f3fd4f6a25a0f84c4e3280sprang@webrtc.org // Called on generation of RTCP stats 1904f1f5fa55d803fc0b7f3fd4f6a25a0f84c4e3280sprang@webrtc.org void RegisterReceiveChannelRtcpStatisticsCallback( 1914f1f5fa55d803fc0b7f3fd4f6a25a0f84c4e3280sprang@webrtc.org RtcpStatisticsCallback* callback); 1924f1f5fa55d803fc0b7f3fd4f6a25a0f84c4e3280sprang@webrtc.org 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Gets sent/received packets statistics. 19467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t GetRtpStatistics(uint32_t* bytes_sent, 19567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t* packets_sent, 19667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t* bytes_received, 19767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t* packets_received) const; 198b113981639e341ed642be9ca74c22a83d2b33a28sprang@webrtc.org 199b113981639e341ed642be9ca74c22a83d2b33a28sprang@webrtc.org // Called on update of RTP statistics. 200b113981639e341ed642be9ca74c22a83d2b33a28sprang@webrtc.org void RegisterSendChannelRtpStatisticsCallback( 2017d99cd47d8055ec6815f2862b75a0bdf53304199sprang@webrtc.org StreamDataCountersCallback* callback); 2027d99cd47d8055ec6815f2862b75a0bdf53304199sprang@webrtc.org 2037d99cd47d8055ec6815f2862b75a0bdf53304199sprang@webrtc.org // Called on update of RTP statistics. 2047d99cd47d8055ec6815f2862b75a0bdf53304199sprang@webrtc.org void RegisterReceiveChannelRtpStatisticsCallback( 205b113981639e341ed642be9ca74c22a83d2b33a28sprang@webrtc.org StreamDataCountersCallback* callback); 206b113981639e341ed642be9ca74c22a83d2b33a28sprang@webrtc.org 2074a1556017653ef7702585897b071872e83bd95b9asapersson@webrtc.org void GetRtcpPacketTypeCounters(RtcpPacketTypeCounter* packets_sent, 2084a1556017653ef7702585897b071872e83bd95b9asapersson@webrtc.org RtcpPacketTypeCounter* packets_received) const; 2094a1556017653ef7702585897b071872e83bd95b9asapersson@webrtc.org 210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void GetBandwidthUsage(uint32_t* total_bitrate_sent, 211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org uint32_t* video_bitrate_sent, 212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org uint32_t* fec_bitrate_sent, 213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org uint32_t* nackBitrateSent) const; 214ee234be7908840221b78e6489d42ea792d4ce87dstefan@webrtc.org bool GetSendSideDelay(int* avg_send_delay, int* max_send_delay) const; 215d1e7facca966ca4b7632940d71f62deea5094083jiayl@webrtc.org void GetReceiveBandwidthEstimatorStats( 216d1e7facca966ca4b7632940d71f62deea5094083jiayl@webrtc.org ReceiveBandwidthEstimatorStats* output) const; 217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 218b70db6dbe962f01976f2e1e9a4141c1ee37e3801sprang@webrtc.org // Called on any new send bitrate estimate. 219b70db6dbe962f01976f2e1e9a4141c1ee37e3801sprang@webrtc.org void RegisterSendBitrateObserver(BitrateStatisticsObserver* observer); 220b70db6dbe962f01976f2e1e9a4141c1ee37e3801sprang@webrtc.org 22167879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t StartRTPDump(const char file_nameUTF8[1024], 22267879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org RTPDirections direction); 22367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t StopRTPDump(RTPDirections direction); 224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Implements RtcpFeedback. 226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // TODO(pwestin) Depricate this functionality. 22767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org virtual void OnApplicationDataReceived(const int32_t id, 22867879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint8_t sub_type, 22967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint32_t name, 23067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint16_t length, 23167879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint8_t* data); 232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Implements RtpFeedback. 23367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org virtual int32_t OnInitializeDecoder( 23467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const int32_t id, 23567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const int8_t payload_type, 236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char payload_name[RTP_PAYLOAD_NAME_SIZE], 237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const int frequency, 23867879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint8_t channels, 23967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint32_t rate); 24067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org virtual void OnIncomingSSRCChanged(const int32_t id, 241a20e2d4c9ae860db62de6e304bfdf517c049ec3dstefan@webrtc.org const uint32_t ssrc); 24267879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org virtual void OnIncomingCSRCChanged(const int32_t id, 24367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint32_t CSRC, 244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const bool added); 245a20e2d4c9ae860db62de6e304bfdf517c049ec3dstefan@webrtc.org virtual void ResetStatistics(uint32_t); 246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 24767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SetLocalReceiver(const uint16_t rtp_port, 24867879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint16_t rtcp_port, 24967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const char* ip_address); 25067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t GetLocalReceiver(uint16_t* rtp_port, 25167879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint16_t* rtcp_port, 25267879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org char* ip_address) const; 25367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SetSendDestination(const char* ip_address, 25467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint16_t rtp_port, 25567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint16_t rtcp_port, 25667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint16_t source_rtp_port, 25767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint16_t source_rtcp_port); 25867879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t GetSendDestination(char* ip_address, 25967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint16_t* rtp_port, 26067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint16_t* rtcp_port, 26167879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint16_t* source_rtp_port, 26267879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint16_t* source_rtcp_port) const; 26367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t GetSourceInfo(uint16_t* rtp_port, 26467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint16_t* rtcp_port, 26567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org char* ip_address, 26667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t ip_address_length); 26767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org 2687fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org int32_t SetRemoteSSRCType(const StreamType usage, const uint32_t SSRC); 26967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org 27067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t StartSend(); 27167879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t StopSend(); 272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool Sending(); 27367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t StartReceive(); 27467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t StopReceive(); 275b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 27667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t RegisterSendTransport(Transport* transport); 27767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t DeregisterSendTransport(); 278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Incoming packet from external transport. 28067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t ReceivedRTPPacket(const void* rtp_packet, 281efeb8ce7e183005e557a2d107203e2057cec26a8wu@webrtc.org const int32_t rtp_packet_length, 282efeb8ce7e183005e557a2d107203e2057cec26a8wu@webrtc.org const PacketTime& packet_time); 283b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 284b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Incoming packet from external transport. 28567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t ReceivedRTCPPacket(const void* rtcp_packet, 28667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const int32_t rtcp_packet_length); 287b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 288b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Sets the maximum transfer unit size for the network link, i.e. including 289b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // IP, UDP and RTP headers. 29067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SetMTU(uint16_t mtu); 291b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 292b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Returns maximum allowed payload size, i.e. the maximum allowed size of 293b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // encoded data in each packet. 29467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint16_t MaxDataPayloadLength() const; 29567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SetMaxPacketBurstSize(uint16_t max_number_of_packets); 29667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SetPacketBurstSpreadState(bool enable, const uint16_t frame_periodMS); 29767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org 29867879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t EnableColorEnhancement(bool enable); 299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Gets the modules used by the channel. 301b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RtpRtcp* rtp_rtcp(); 302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 3030329e591cd17957836fd295ae9b31f7d3a73e5e8fischman@webrtc.org CallStatsObserver* GetStatsObserver(); 30478696d33d7711eb8208400908237c384b235bf74mflodman@webrtc.org 305b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Implements VCMReceiveCallback. 30667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org virtual int32_t FrameToRender(I420VideoFrame& video_frame); // NOLINT 307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Implements VCMReceiveCallback. 30967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org virtual int32_t ReceivedDecodedReferenceFrame( 31067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint64_t picture_id); 311b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 312d893b3fbd858898bd280f94a74854a86a6b91888wuchengli@chromium.org // Implements VCMReceiveCallback. 313d893b3fbd858898bd280f94a74854a86a6b91888wuchengli@chromium.org virtual void IncomingCodecChanged(const VideoCodec& codec); 314d893b3fbd858898bd280f94a74854a86a6b91888wuchengli@chromium.org 315ecfef1930d59e5b7dc14e71b1ac3ed892980d151fischman@webrtc.org // Implements VCMReceiveStatisticsCallback. 3167fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org virtual int32_t OnReceiveStatisticsUpdate(const uint32_t bit_rate, 31767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint32_t frame_rate); 318b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 319ecfef1930d59e5b7dc14e71b1ac3ed892980d151fischman@webrtc.org // Implements VCMDecoderTimingCallback. 320ecfef1930d59e5b7dc14e71b1ac3ed892980d151fischman@webrtc.org virtual void OnDecoderTiming(int decode_ms, 321ecfef1930d59e5b7dc14e71b1ac3ed892980d151fischman@webrtc.org int max_decode_ms, 322ecfef1930d59e5b7dc14e71b1ac3ed892980d151fischman@webrtc.org int current_delay_ms, 323ecfef1930d59e5b7dc14e71b1ac3ed892980d151fischman@webrtc.org int target_delay_ms, 324ecfef1930d59e5b7dc14e71b1ac3ed892980d151fischman@webrtc.org int jitter_buffer_ms, 325ecfef1930d59e5b7dc14e71b1ac3ed892980d151fischman@webrtc.org int min_playout_delay_ms, 326ecfef1930d59e5b7dc14e71b1ac3ed892980d151fischman@webrtc.org int render_delay_ms); 327ecfef1930d59e5b7dc14e71b1ac3ed892980d151fischman@webrtc.org 328b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Implements VideoFrameTypeCallback. 32967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org virtual int32_t RequestKeyFrame(); 330b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 331b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Implements VideoFrameTypeCallback. 33267879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org virtual int32_t SliceLossIndicationRequest( 33367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint64_t picture_id); 334b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 335b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Implements VideoPacketRequestCallback. 33667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org virtual int32_t ResendPackets(const uint16_t* sequence_numbers, 33767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint16_t length); 338b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 33967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SetVoiceChannel(int32_t ve_channel_id, 34067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org VoEVideoSync* ve_sync_interface); 34167879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t VoiceChannel(); 342b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 343b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Implements ViEFrameProviderBase. 344b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int FrameCallbackChanged() {return -1;} 345b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 34667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t RegisterEffectFilter(ViEEffectFilter* effect_filter); 347b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 3482e98d45e2455d3b48ceac1ad5457623d39802c9esprang@webrtc.org // New-style callbacks, used by VideoReceiveStream. 34963301bd03e009d309d1fdca1217f8708be610f32pbos@webrtc.org void RegisterPreRenderCallback(I420FrameCallback* pre_render_callback); 3502e98d45e2455d3b48ceac1ad5457623d39802c9esprang@webrtc.org void RegisterPreDecodeImageCallback( 3512e98d45e2455d3b48ceac1ad5457623d39802c9esprang@webrtc.org EncodedImageCallback* pre_decode_callback); 35263301bd03e009d309d1fdca1217f8708be610f32pbos@webrtc.org 3535fdd10a56c3d7dcf2ea3cb2cd1118f616b783d24sprang@webrtc.org void RegisterSendFrameCountObserver(FrameCountObserver* observer); 3545fdd10a56c3d7dcf2ea3cb2cd1118f616b783d24sprang@webrtc.org 3552d3624ceb06407a4440433f816612fc150bfea42solenberg@webrtc.org void ReceivedBWEPacket(int64_t arrival_time_ms, int payload_size, 3562d3624ceb06407a4440433f816612fc150bfea42solenberg@webrtc.org const RTPHeader& header); 3572d3624ceb06407a4440433f816612fc150bfea42solenberg@webrtc.org 358b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org protected: 359b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static bool ChannelDecodeThreadFunction(void* obj); 360b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool ChannelDecodeProcess(); 361b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 36278696d33d7711eb8208400908237c384b235bf74mflodman@webrtc.org void OnRttUpdate(uint32_t rtt); 36378696d33d7711eb8208400908237c384b235bf74mflodman@webrtc.org 364b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org private: 365b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Assumed to be protected. 36667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t StartDecodeThread(); 36767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t StopDecodeThread(); 368b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 36967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t ProcessNACKRequest(const bool enable); 37067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t ProcessFECRequest(const bool enable, 37167879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const unsigned char payload_typeRED, 37267879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const unsigned char payload_typeFEC); 3739d6fcb37be4c9f49e1bb0b32bb01314c31f5e1ddmikhal@webrtc.org // Compute NACK list parameters for the buffering mode. 3749d6fcb37be4c9f49e1bb0b32bb01314c31f5e1ddmikhal@webrtc.org int GetRequiredNackListSize(int target_delay_ms); 3756845de7e4eed28e61c3edb263fb4bbcd65ff76fbstefan@webrtc.org void SetRtxSendStatus(bool enable); 376b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 37767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t channel_id_; 37867879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t engine_id_; 37967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t number_of_cores_; 38067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint8_t num_socket_threads_; 381b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 382b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Used for all registered callbacks except rendering. 383b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org scoped_ptr<CriticalSectionWrapper> callback_cs_; 384b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org scoped_ptr<CriticalSectionWrapper> rtp_rtcp_cs_; 385b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 386b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RtpRtcp* default_rtp_rtcp_; 387b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 388b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Owned modules/classes. 389b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org scoped_ptr<RtpRtcp> rtp_rtcp_; 390b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org std::list<RtpRtcp*> simulcast_rtp_rtcp_; 39155e6f58d72aafc45106908c1647b00c2904cc21emflodman@webrtc.org std::list<RtpRtcp*> removed_rtp_rtcp_; 3927f545616b05eed76656b178a0134c20c1aac240cpbos@webrtc.org VideoCodingModule* const vcm_; 393b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ViEReceiver vie_receiver_; 394b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ViESender vie_sender_; 395b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ViESyncModule vie_sync_; 396b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 39778696d33d7711eb8208400908237c384b235bf74mflodman@webrtc.org // Helper to report call statistics. 39878696d33d7711eb8208400908237c384b235bf74mflodman@webrtc.org scoped_ptr<ChannelStatsObserver> stats_observer_; 39978696d33d7711eb8208400908237c384b235bf74mflodman@webrtc.org 400b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Not owned. 401b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ProcessThread& module_process_thread_; 402b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ViEDecoderObserver* codec_observer_; 403b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool do_key_frame_callbackRequest_; 404b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ViERTPObserver* rtp_observer_; 405b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ViERTCPObserver* rtcp_observer_; 406b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RtcpIntraFrameObserver* intra_frame_observer_; 407c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.org RtcpRttStats* rtt_stats_; 4085e87b5f032780f6941a27c2d5068ab1e89e659a6pwestin@webrtc.org PacedSender* paced_sender_; 4096845de7e4eed28e61c3edb263fb4bbcd65ff76fbstefan@webrtc.org bool pad_with_redundant_payloads_; 4105e87b5f032780f6941a27c2d5068ab1e89e659a6pwestin@webrtc.org 411b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org scoped_ptr<RtcpBandwidthObserver> bandwidth_observer_; 412b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int send_timestamp_extension_id_; 413453f9c0b3e2c0396b9e519ef37267a2056b65bd2solenberg@webrtc.org int absolute_send_time_extension_id_; 414b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 415b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Transport* external_transport_; 416b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 417b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool decoder_reset_; 418d893b3fbd858898bd280f94a74854a86a6b91888wuchengli@chromium.org // Current receive codec used for codec change callback. 419d893b3fbd858898bd280f94a74854a86a6b91888wuchengli@chromium.org VideoCodec receive_codec_; 420b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool wait_for_key_frame_; 421b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ThreadWrapper* decode_thread_; 422b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 423b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ViEEffectFilter* effect_filter_; 424b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool color_enhancement_; 425b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 426b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // User set MTU, -1 if not set. 427b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org uint16_t mtu_; 428b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const bool sender_; 42916196644914f7b91ba8029c936ca2cf65e771749mikhal@webrtc.org 43016196644914f7b91ba8029c936ca2cf65e771749mikhal@webrtc.org int nack_history_size_sender_; 4319d6fcb37be4c9f49e1bb0b32bb01314c31f5e1ddmikhal@webrtc.org int max_nack_reordering_threshold_; 43263301bd03e009d309d1fdca1217f8708be610f32pbos@webrtc.org I420FrameCallback* pre_render_callback_; 433b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 434b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 435b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} // namespace webrtc 436b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 437b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_VIDEO_ENGINE_VIE_CHANNEL_H_ 438