vie_channel.h revision 8d02f5dc7146ebc35c30fc3f7e1cbfa6802486a2
1470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/* 25e954814a8d73ae1d4095bf951cbbaf3e6b6f8eepwestin@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * 4470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Use of this source code is governed by a BSD-style license 5470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * that can be found in the LICENSE file in the root of the source 6470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * tree. An additional intellectual property rights grant can be found 7470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * in the file PATENTS. All contributing project authors may 8470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * be found in the AUTHORS file in the root of the source tree. 9470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */ 10470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 11e06ca3cef68cec1fa97b3d476c99d98c68f04ff2mflodman@webrtc.org#ifndef WEBRTC_VIDEO_ENGINE_VIE_CHANNEL_H_ 12e06ca3cef68cec1fa97b3d476c99d98c68f04ff2mflodman@webrtc.org#define WEBRTC_VIDEO_ENGINE_VIE_CHANNEL_H_ 13470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 141da1ce0da5fcc029dbc2a134a9760e1b398b02d7pwestin@webrtc.org#include <list> 151da1ce0da5fcc029dbc2a134a9760e1b398b02d7pwestin@webrtc.org 1682dcc9ff11826d63a76e33cfee4d66d52606e19dpwestin@webrtc.org#include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h" 1782dcc9ff11826d63a76e33cfee4d66d52606e19dpwestin@webrtc.org#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h" 1882dcc9ff11826d63a76e33cfee4d66d52606e19dpwestin@webrtc.org#include "webrtc/modules/video_coding/main/interface/video_coding_defines.h" 1982dcc9ff11826d63a76e33cfee4d66d52606e19dpwestin@webrtc.org#include "webrtc/system_wrappers/interface/scoped_ptr.h" 2082dcc9ff11826d63a76e33cfee4d66d52606e19dpwestin@webrtc.org#include "webrtc/system_wrappers/interface/tick_util.h" 2182dcc9ff11826d63a76e33cfee4d66d52606e19dpwestin@webrtc.org#include "webrtc/typedefs.h" 2282dcc9ff11826d63a76e33cfee4d66d52606e19dpwestin@webrtc.org#include "webrtc/video_engine/include/vie_network.h" 2382dcc9ff11826d63a76e33cfee4d66d52606e19dpwestin@webrtc.org#include "webrtc/video_engine/include/vie_rtp_rtcp.h" 2482dcc9ff11826d63a76e33cfee4d66d52606e19dpwestin@webrtc.org#include "webrtc/video_engine/vie_defines.h" 2582dcc9ff11826d63a76e33cfee4d66d52606e19dpwestin@webrtc.org#include "webrtc/video_engine/vie_frame_provider_base.h" 2682dcc9ff11826d63a76e33cfee4d66d52606e19dpwestin@webrtc.org#include "webrtc/video_engine/vie_receiver.h" 2782dcc9ff11826d63a76e33cfee4d66d52606e19dpwestin@webrtc.org#include "webrtc/video_engine/vie_sender.h" 2882dcc9ff11826d63a76e33cfee4d66d52606e19dpwestin@webrtc.org#include "webrtc/video_engine/vie_sync_module.h" 29470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 3003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.orgnamespace webrtc { 31470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 32aea96d36e3691de0f95734f6d88bb94474903b34fischman@webrtc.orgclass CallStatsObserver; 337c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.orgclass ChannelStatsObserver; 347707d060bb2fcceae1ed4118ebac29de577e209bandresp@webrtc.orgclass Config; 35470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass CriticalSectionWrapper; 36470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass Encryption; 37fe1ef935e7d35b465bd00744cc188f08198265b6pbos@webrtc.orgclass I420FrameCallback; 38571a1c035be6b0afd7f357001bef775c51ec9364pwestin@webrtc.orgclass PacedSender; 39470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ProcessThread; 401ae1d0c47145f1036c3844a5cd1b536c22565325asapersson@webrtc.orgclass RtcpRttStats; 417707d060bb2fcceae1ed4118ebac29de577e209bandresp@webrtc.orgclass RtpRtcp; 42470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ThreadWrapper; 43470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ViEDecoderObserver; 44470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ViEEffectFilter; 45470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ViERTCPObserver; 46470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ViERTPObserver; 477707d060bb2fcceae1ed4118ebac29de577e209bandresp@webrtc.orgclass VideoCodingModule; 487707d060bb2fcceae1ed4118ebac29de577e209bandresp@webrtc.orgclass VideoDecoder; 497707d060bb2fcceae1ed4118ebac29de577e209bandresp@webrtc.orgclass VideoRenderCallback; 50470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass VoEVideoSync; 51470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 5203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.orgclass ViEChannel 5303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org : public VCMFrameTypeCallback, 5403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org public VCMReceiveCallback, 5503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org public VCMReceiveStatisticsCallback, 5637bb4974e7095cbcbbf36602c6603ea4d99347c9fischman@webrtc.org public VCMDecoderTimingCallback, 5703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org public VCMPacketRequestCallback, 5803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org public RtcpFeedback, 5903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org public RtpFeedback, 6003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org public ViEFrameProviderBase { 6103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org public: 627c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org friend class ChannelStatsObserver; 637c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org 64b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org ViEChannel(int32_t channel_id, 65b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t engine_id, 66b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint32_t number_of_cores, 677707d060bb2fcceae1ed4118ebac29de577e209bandresp@webrtc.org const Config& config, 6849888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org ProcessThread& module_process_thread, 6949888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org RtcpIntraFrameObserver* intra_frame_observer, 702853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org RtcpBandwidthObserver* bandwidth_observer, 719354cc965c04a0c79ea36622043751596a6fd015stefan@webrtc.org RemoteBitrateEstimator* remote_bitrate_estimator, 721ae1d0c47145f1036c3844a5cd1b536c22565325asapersson@webrtc.org RtcpRttStats* rtt_stats, 73571a1c035be6b0afd7f357001bef775c51ec9364pwestin@webrtc.org PacedSender* paced_sender, 744e8eabaab13d039efc4cf25b3510526f79dc5406stefan@webrtc.org RtpRtcp* default_rtp_rtcp, 754e8eabaab13d039efc4cf25b3510526f79dc5406stefan@webrtc.org bool sender); 7603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org ~ViEChannel(); 7703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 78b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t Init(); 7903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 8003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Sets the encoder to use for the channel. |new_stream| indicates the encoder 8103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // type has changed and we should start a new RTP stream. 82b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t SetSendCodec(const VideoCodec& video_codec, bool new_stream = true); 83b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t SetReceiveCodec(const VideoCodec& video_codec); 84b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t GetReceiveCodec(VideoCodec* video_codec); 85b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t RegisterCodecObserver(ViEDecoderObserver* observer); 8629758de9b6313cc4288fbc77c40bce471d3ca5e2pbos@webrtc.org // Registers an external decoder. |buffered_rendering| means that the decoder 8729758de9b6313cc4288fbc77c40bce471d3ca5e2pbos@webrtc.org // will render frames after decoding according to the render timestamp 8829758de9b6313cc4288fbc77c40bce471d3ca5e2pbos@webrtc.org // provided by the video coding module. |render_delay| indicates the time 8929758de9b6313cc4288fbc77c40bce471d3ca5e2pbos@webrtc.org // needed to decode and render a frame. 90b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t RegisterExternalDecoder(const uint8_t pl_type, 91b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org VideoDecoder* decoder, 92b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org bool buffered_rendering, 93b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t render_delay); 94b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t DeRegisterExternalDecoder(const uint8_t pl_type); 95b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t ReceiveCodecStatistics(uint32_t* num_key_frames, 96b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint32_t* num_delta_frames); 97b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint32_t DiscardedPackets() const; 9803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 994aee6b637d6830145396e7216ce15314c1feec92mflodman@webrtc.org // Returns the estimated delay in milliseconds. 1004aee6b637d6830145396e7216ce15314c1feec92mflodman@webrtc.org int ReceiveDelay() const; 1014aee6b637d6830145396e7216ce15314c1feec92mflodman@webrtc.org 10203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Only affects calls to SetReceiveCodec done after this call. 103b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t WaitForKeyFrame(bool wait); 10403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 10503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // If enabled, a key frame request will be sent as soon as there are lost 10603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // packets. If |only_key_frames| are set, requests are only sent for loss in 10703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // key frames. 108b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t SetSignalPacketLossStatus(bool enable, bool only_key_frames); 109b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org 110b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t SetRTCPMode(const RTCPMethod rtcp_mode); 111b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t GetRTCPMode(RTCPMethod* rtcp_mode); 112b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t SetNACKStatus(const bool enable); 113b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t SetFECStatus(const bool enable, 114b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const unsigned char payload_typeRED, 115b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const unsigned char payload_typeFEC); 116b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t SetHybridNACKFECStatus(const bool enable, 117b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const unsigned char payload_typeRED, 118b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const unsigned char payload_typeFEC); 119ef9f76a59d9f24dee02dc1fc40197254372714c9mikhal@webrtc.org int SetSenderBufferingMode(int target_delay_ms); 120ef9f76a59d9f24dee02dc1fc40197254372714c9mikhal@webrtc.org int SetReceiverBufferingMode(int target_delay_ms); 121b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t SetKeyFrameRequestMethod(const KeyFrameRequestMethod method); 12284dc3d134dca17df970e6a4a3e83543c0729799amflodman@webrtc.org bool EnableRemb(bool enable); 12390071dd64744cbdef19bf4383b8287dba77b0f9emflodman@webrtc.org int SetSendTimestampOffsetStatus(bool enable, int id); 12490071dd64744cbdef19bf4383b8287dba77b0f9emflodman@webrtc.org int SetReceiveTimestampOffsetStatus(bool enable, int id); 125cb9cff0c7190ac66660056245f7095d7a8c3e247solenberg@webrtc.org int SetSendAbsoluteSendTimeStatus(bool enable, int id); 126cb9cff0c7190ac66660056245f7095d7a8c3e247solenberg@webrtc.org int SetReceiveAbsoluteSendTimeStatus(bool enable, int id); 127a6db54d4c9a2bfc703bc208eb5cbc19505e9cef3solenberg@webrtc.org bool GetReceiveAbsoluteSendTimeStatus() const; 1288d02f5dc7146ebc35c30fc3f7e1cbfa6802486a2asapersson@webrtc.org void SetRtcpXrRrtrStatus(bool enable); 1295a7507f26af65222bfee8eb0d386ba68d48534e3mflodman@webrtc.org void SetTransmissionSmoothingStatus(bool enable); 130b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t EnableTMMBR(const bool enable); 131b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t EnableKeyFrameRequestCallback(const bool enable); 13203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 13303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Sets SSRC for outgoing stream. 134b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t SetSSRC(const uint32_t SSRC, 135b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const StreamType usage, 136b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const unsigned char simulcast_idx); 13703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 138d6ec386ff56a47b685c0a0d1ce0ce17ac7745ff9mflodman@webrtc.org // Gets SSRC for outgoing stream number |idx|. 139b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t GetLocalSSRC(uint8_t idx, unsigned int* ssrc); 14003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 14103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Gets SSRC for the incoming stream. 142b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t GetRemoteSSRC(uint32_t* ssrc); 14303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 14403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Gets the CSRC for the incoming stream. 145b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t GetRemoteCSRC(uint32_t CSRCs[kRtpCsrcSize]); 14603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 1479f5ebb525130f207229dfa350ce8c2bdd22163c7mflodman@webrtc.org int SetRtxSendPayloadType(int payload_type); 1489f5ebb525130f207229dfa350ce8c2bdd22163c7mflodman@webrtc.org void SetRtxReceivePayloadType(int payload_type); 1499f5ebb525130f207229dfa350ce8c2bdd22163c7mflodman@webrtc.org 15003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Sets the starting sequence number, must be called before StartSend. 151b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t SetStartSequenceNumber(uint16_t sequence_number); 15203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 15303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Sets the CName for the outgoing stream on the channel. 154b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t SetRTCPCName(const char rtcp_cname[]); 15503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 15603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Gets the CName for the outgoing stream on the channel. 157b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t GetRTCPCName(char rtcp_cname[]); 15803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 15903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Gets the CName of the incoming stream. 160b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t GetRemoteRTCPCName(char rtcp_cname[]); 161b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t RegisterRtpObserver(ViERTPObserver* observer); 162b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t RegisterRtcpObserver(ViERTCPObserver* observer); 163b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t SendApplicationDefinedRTCPPacket( 164b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const uint8_t sub_type, 165b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint32_t name, 166b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const uint8_t* data, 167b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint16_t data_length_in_bytes); 16803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 16960c9bbd976a1eb11375de597dcacd4a9d81455e7perkj@webrtc.org // Returns statistics reported by the remote client in an RTCP packet. 170b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t GetSendRtcpStatistics(uint16_t* fraction_lost, 171b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint32_t* cumulative_lost, 172b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint32_t* extended_max, 173b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint32_t* jitter_samples, 174b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t* rtt_ms); 17503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 17660c9bbd976a1eb11375de597dcacd4a9d81455e7perkj@webrtc.org // Returns our localy created statistics of the received RTP stream. 177b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t GetReceivedRtcpStatistics(uint16_t* fraction_lost, 178b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint32_t* cumulative_lost, 179b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint32_t* extended_max, 180b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint32_t* jitter_samples, 181b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t* rtt_ms); 18203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 18303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Gets sent/received packets statistics. 184b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t GetRtpStatistics(uint32_t* bytes_sent, 185b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint32_t* packets_sent, 186b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint32_t* bytes_received, 187b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint32_t* packets_received) const; 188f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org void GetBandwidthUsage(uint32_t* total_bitrate_sent, 189f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org uint32_t* video_bitrate_sent, 190f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org uint32_t* fec_bitrate_sent, 191f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org uint32_t* nackBitrateSent) const; 1924fd5527ab1ba986e94671eacc96ad56f26d282bcmflodman@webrtc.org void GetEstimatedReceiveBandwidth(uint32_t* estimated_bandwidth) const; 1933e820e5109cf34b2bdb216a637a92a6ce8904816mflodman@webrtc.org 194b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t StartRTPDump(const char file_nameUTF8[1024], 195b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org RTPDirections direction); 196b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t StopRTPDump(RTPDirections direction); 19703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 19803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Implements RtcpFeedback. 1992853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org // TODO(pwestin) Depricate this functionality. 200b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org virtual void OnApplicationDataReceived(const int32_t id, 201b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const uint8_t sub_type, 202b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const uint32_t name, 203b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const uint16_t length, 204b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const uint8_t* data); 20503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Implements RtpFeedback. 206b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org virtual int32_t OnInitializeDecoder( 207b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const int32_t id, 208b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const int8_t payload_type, 20939e9659fc6a70f9416205c942d21deea060a8997leozwang@webrtc.org const char payload_name[RTP_PAYLOAD_NAME_SIZE], 21003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org const int frequency, 211b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const uint8_t channels, 212b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const uint32_t rate); 213b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org virtual void OnIncomingSSRCChanged(const int32_t id, 214286fe0b04d97205ac84688bbe613d5749192b2d1stefan@webrtc.org const uint32_t ssrc); 215b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org virtual void OnIncomingCSRCChanged(const int32_t id, 216b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const uint32_t CSRC, 21703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org const bool added); 218286fe0b04d97205ac84688bbe613d5749192b2d1stefan@webrtc.org virtual void ResetStatistics(uint32_t); 21903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 220b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t SetLocalReceiver(const uint16_t rtp_port, 221b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const uint16_t rtcp_port, 222b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const char* ip_address); 223b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t GetLocalReceiver(uint16_t* rtp_port, 224b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint16_t* rtcp_port, 225b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org char* ip_address) const; 226b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t SetSendDestination(const char* ip_address, 227b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const uint16_t rtp_port, 228b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const uint16_t rtcp_port, 229b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const uint16_t source_rtp_port, 230b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const uint16_t source_rtcp_port); 231b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t GetSendDestination(char* ip_address, 232b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint16_t* rtp_port, 233b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint16_t* rtcp_port, 234b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint16_t* source_rtp_port, 235b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint16_t* source_rtcp_port) const; 236b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t GetSourceInfo(uint16_t* rtp_port, 237b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint16_t* rtcp_port, 238b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org char* ip_address, 239b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint32_t ip_address_length); 240b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org 241822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org int32_t SetRemoteSSRCType(const StreamType usage, const uint32_t SSRC); 242b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org 243b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t StartSend(); 244b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t StopSend(); 24503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org bool Sending(); 246b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t StartReceive(); 247b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t StopReceive(); 24803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 249b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t RegisterSendTransport(Transport* transport); 250b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t DeregisterSendTransport(); 25103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 25203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Incoming packet from external transport. 253b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t ReceivedRTPPacket(const void* rtp_packet, 254b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const int32_t rtp_packet_length); 25503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 25603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Incoming packet from external transport. 257b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t ReceivedRTCPPacket(const void* rtcp_packet, 258b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const int32_t rtcp_packet_length); 25903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 26003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Sets the maximum transfer unit size for the network link, i.e. including 26103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // IP, UDP and RTP headers. 262b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t SetMTU(uint16_t mtu); 26303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 26403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Returns maximum allowed payload size, i.e. the maximum allowed size of 26503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // encoded data in each packet. 266b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint16_t MaxDataPayloadLength() const; 267b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t SetMaxPacketBurstSize(uint16_t max_number_of_packets); 268b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t SetPacketBurstSpreadState(bool enable, const uint16_t frame_periodMS); 269b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org 270b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t EnableColorEnhancement(bool enable); 27103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 27284dc3d134dca17df970e6a4a3e83543c0729799amflodman@webrtc.org // Gets the modules used by the channel. 27384dc3d134dca17df970e6a4a3e83543c0729799amflodman@webrtc.org RtpRtcp* rtp_rtcp(); 27484dc3d134dca17df970e6a4a3e83543c0729799amflodman@webrtc.org 275aea96d36e3691de0f95734f6d88bb94474903b34fischman@webrtc.org CallStatsObserver* GetStatsObserver(); 2767c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org 27703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Implements VCMReceiveCallback. 278b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org virtual int32_t FrameToRender(I420VideoFrame& video_frame); // NOLINT 27903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 28003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Implements VCMReceiveCallback. 281b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org virtual int32_t ReceivedDecodedReferenceFrame( 282b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const uint64_t picture_id); 28303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 2840d94c2f81c303c874463a5000bc461098bdb6227wuchengli@chromium.org // Implements VCMReceiveCallback. 2850d94c2f81c303c874463a5000bc461098bdb6227wuchengli@chromium.org virtual void IncomingCodecChanged(const VideoCodec& codec); 2860d94c2f81c303c874463a5000bc461098bdb6227wuchengli@chromium.org 28737bb4974e7095cbcbbf36602c6603ea4d99347c9fischman@webrtc.org // Implements VCMReceiveStatisticsCallback. 288822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org virtual int32_t OnReceiveStatisticsUpdate(const uint32_t bit_rate, 289b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const uint32_t frame_rate); 29003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 29137bb4974e7095cbcbbf36602c6603ea4d99347c9fischman@webrtc.org // Implements VCMDecoderTimingCallback. 29237bb4974e7095cbcbbf36602c6603ea4d99347c9fischman@webrtc.org virtual void OnDecoderTiming(int decode_ms, 29337bb4974e7095cbcbbf36602c6603ea4d99347c9fischman@webrtc.org int max_decode_ms, 29437bb4974e7095cbcbbf36602c6603ea4d99347c9fischman@webrtc.org int current_delay_ms, 29537bb4974e7095cbcbbf36602c6603ea4d99347c9fischman@webrtc.org int target_delay_ms, 29637bb4974e7095cbcbbf36602c6603ea4d99347c9fischman@webrtc.org int jitter_buffer_ms, 29737bb4974e7095cbcbbf36602c6603ea4d99347c9fischman@webrtc.org int min_playout_delay_ms, 29837bb4974e7095cbcbbf36602c6603ea4d99347c9fischman@webrtc.org int render_delay_ms); 29937bb4974e7095cbcbbf36602c6603ea4d99347c9fischman@webrtc.org 30003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Implements VideoFrameTypeCallback. 301b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org virtual int32_t RequestKeyFrame(); 30203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 30303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Implements VideoFrameTypeCallback. 304b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org virtual int32_t SliceLossIndicationRequest( 305b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const uint64_t picture_id); 30603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 30703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Implements VideoPacketRequestCallback. 308b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org virtual int32_t ResendPackets(const uint16_t* sequence_numbers, 309b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint16_t length); 31003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 311b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t RegisterExternalEncryption(Encryption* encryption); 312b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t DeRegisterExternalEncryption(); 31303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 314b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t SetVoiceChannel(int32_t ve_channel_id, 315b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org VoEVideoSync* ve_sync_interface); 316b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t VoiceChannel(); 31703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 31803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Implements ViEFrameProviderBase. 31903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org virtual int FrameCallbackChanged() {return -1;} 32003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 321b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t RegisterEffectFilter(ViEEffectFilter* effect_filter); 32203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 323fe1ef935e7d35b465bd00744cc188f08198265b6pbos@webrtc.org // New-style callback, used by VideoReceiveStream. 324fe1ef935e7d35b465bd00744cc188f08198265b6pbos@webrtc.org void RegisterPreRenderCallback(I420FrameCallback* pre_render_callback); 325fe1ef935e7d35b465bd00744cc188f08198265b6pbos@webrtc.org 32603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org protected: 32703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org static bool ChannelDecodeThreadFunction(void* obj); 32803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org bool ChannelDecodeProcess(); 32903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 3307c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org void OnRttUpdate(uint32_t rtt); 3317c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org 33203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org private: 33303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Assumed to be protected. 334b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t StartDecodeThread(); 335b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t StopDecodeThread(); 33603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 337b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t ProcessNACKRequest(const bool enable); 338b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t ProcessFECRequest(const bool enable, 339b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const unsigned char payload_typeRED, 340b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org const unsigned char payload_typeFEC); 341ef9f76a59d9f24dee02dc1fc40197254372714c9mikhal@webrtc.org // Compute NACK list parameters for the buffering mode. 342ef9f76a59d9f24dee02dc1fc40197254372714c9mikhal@webrtc.org int GetRequiredNackListSize(int target_delay_ms); 34303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 344b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t channel_id_; 345b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org int32_t engine_id_; 346b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint32_t number_of_cores_; 347b238d1210b528eff706078c781fb55987c66d006pbos@webrtc.org uint8_t num_socket_threads_; 34803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org 34903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Used for all registered callbacks except rendering. 350d32c44738a034977b659bb4a2e76a97f027555e4mflodman@webrtc.org scoped_ptr<CriticalSectionWrapper> callback_cs_; 3512d1fc9bf17da046fedb88d27900f4d443142dbe6pwestin@webrtc.org scoped_ptr<CriticalSectionWrapper> rtp_rtcp_cs_; 352470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 3533c383abd2725c511071904a1914ca4a5933d1b22turaj@webrtc.org RtpRtcp* default_rtp_rtcp_; 3542853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org 3552853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org // Owned modules/classes. 3562853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org scoped_ptr<RtpRtcp> rtp_rtcp_; 35703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org std::list<RtpRtcp*> simulcast_rtp_rtcp_; 35859b2d5fbce3cee1ccaf5e23ce8ece9e315bae2d0mflodman@webrtc.org std::list<RtpRtcp*> removed_rtp_rtcp_; 35903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org VideoCodingModule& vcm_; 3602853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org ViEReceiver vie_receiver_; 3612853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org ViESender vie_sender_; 3622853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org ViESyncModule vie_sync_; 363470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 3647c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org // Helper to report call statistics. 3657c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org scoped_ptr<ChannelStatsObserver> stats_observer_; 3667c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org 36703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org // Not owned. 36803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org ProcessThread& module_process_thread_; 36903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org ViEDecoderObserver* codec_observer_; 37003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org bool do_key_frame_callbackRequest_; 37103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org ViERTPObserver* rtp_observer_; 37203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org ViERTCPObserver* rtcp_observer_; 37349888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org RtcpIntraFrameObserver* intra_frame_observer_; 3741ae1d0c47145f1036c3844a5cd1b536c22565325asapersson@webrtc.org RtcpRttStats* rtt_stats_; 375571a1c035be6b0afd7f357001bef775c51ec9364pwestin@webrtc.org PacedSender* paced_sender_; 376571a1c035be6b0afd7f357001bef775c51ec9364pwestin@webrtc.org 377209442a56099e47e4a87fa6a556e34c782165df4pwestin@webrtc.org scoped_ptr<RtcpBandwidthObserver> bandwidth_observer_; 37890071dd64744cbdef19bf4383b8287dba77b0f9emflodman@webrtc.org int send_timestamp_extension_id_; 379cb9cff0c7190ac66660056245f7095d7a8c3e247solenberg@webrtc.org int absolute_send_time_extension_id_; 380a6db54d4c9a2bfc703bc208eb5cbc19505e9cef3solenberg@webrtc.org bool receive_absolute_send_time_enabled_; 38103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org bool using_packet_spread_; 382470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 38303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org Transport* external_transport_; 384470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 38503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org bool decoder_reset_; 3860d94c2f81c303c874463a5000bc461098bdb6227wuchengli@chromium.org // Current receive codec used for codec change callback. 3870d94c2f81c303c874463a5000bc461098bdb6227wuchengli@chromium.org VideoCodec receive_codec_; 38803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org bool wait_for_key_frame_; 38903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org ThreadWrapper* decode_thread_; 390470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 39103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org Encryption* external_encryption_; 392470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 39303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org ViEEffectFilter* effect_filter_; 39403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org bool color_enhancement_; 395470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 396a6a9964346655963f7efb0e0c49a009fda020ef2mflodman@webrtc.org // User set MTU, -1 if not set. 397a6a9964346655963f7efb0e0c49a009fda020ef2mflodman@webrtc.org uint16_t mtu_; 3984e8eabaab13d039efc4cf25b3510526f79dc5406stefan@webrtc.org const bool sender_; 399dbe97d25500170e4a830f2276096323c3a3c3269mikhal@webrtc.org 400dbe97d25500170e4a830f2276096323c3a3c3269mikhal@webrtc.org int nack_history_size_sender_; 401ef9f76a59d9f24dee02dc1fc40197254372714c9mikhal@webrtc.org int max_nack_reordering_threshold_; 402fe1ef935e7d35b465bd00744cc188f08198265b6pbos@webrtc.org I420FrameCallback* pre_render_callback_; 40303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org}; 404470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 40503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org} // namespace webrtc 406470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 407e06ca3cef68cec1fa97b3d476c99d98c68f04ff2mflodman@webrtc.org#endif // WEBRTC_VIDEO_ENGINE_VIE_CHANNEL_H_ 408