vie_channel.h revision 4aee6b637d6830145396e7216ce15314c1feec92
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
169354cc965c04a0c79ea36622043751596a6fd015stefan@webrtc.org#include "modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
1703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#include "modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
1803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#include "modules/udp_transport/interface/udp_transport.h"
1903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#include "modules/video_coding/main/interface/video_coding_defines.h"
20d32c44738a034977b659bb4a2e76a97f027555e4mflodman@webrtc.org#include "system_wrappers/interface/scoped_ptr.h"
2103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#include "system_wrappers/interface/tick_util.h"
22f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org#include "typedefs.h"  // NOLINT
23a4863dbdf05101c983dbd8c638c9fa9419b7c485mflodman@webrtc.org#include "video_engine/include/vie_network.h"
24a4863dbdf05101c983dbd8c638c9fa9419b7c485mflodman@webrtc.org#include "video_engine/include/vie_rtp_rtcp.h"
2503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#include "video_engine/vie_defines.h"
2603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#include "video_engine/vie_file_recorder.h"
2703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#include "video_engine/vie_frame_provider_base.h"
282853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org#include "video_engine/vie_receiver.h"
292853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org#include "video_engine/vie_sender.h"
302853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org#include "video_engine/vie_sync_module.h"
31470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
3203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.orgnamespace webrtc {
33470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
347c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.orgclass ChannelStatsObserver;
35470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass CriticalSectionWrapper;
36470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass Encryption;
37571a1c035be6b0afd7f357001bef775c51ec9364pwestin@webrtc.orgclass PacedSender;
38470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ProcessThread;
39470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass RtpRtcp;
407c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.orgclass RtcpRttObserver;
417c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.orgclass StatsObserver;
42470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ThreadWrapper;
43470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass VideoCodingModule;
44470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass VideoDecoder;
4503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.orgclass VideoRenderCallback;
46470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ViEDecoderObserver;
47470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ViEEffectFilter;
48470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ViENetworkObserver;
49470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ViERTCPObserver;
50470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ViERTPObserver;
51470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass VoEVideoSync;
52470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
5303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.orgclass ViEChannel
5403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org    : public VCMFrameTypeCallback,
5503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      public VCMReceiveCallback,
5603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      public VCMReceiveStatisticsCallback,
5703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      public VCMPacketRequestCallback,
5803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      public VCMFrameStorageCallback,
5903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      public RtcpFeedback,
6003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      public RtpFeedback,
6103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      public ViEFrameProviderBase {
6203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org public:
637c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org  friend class ChannelStatsObserver;
647c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org
6503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViEChannel(WebRtc_Word32 channel_id,
6603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org             WebRtc_Word32 engine_id,
6703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org             WebRtc_UWord32 number_of_cores,
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,
727c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org             RtcpRttObserver* rtt_observer,
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
7803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 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.
8203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetSendCodec(const VideoCodec& video_codec,
8303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                             bool new_stream = true);
8403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetReceiveCodec(const VideoCodec& video_codec);
85f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org  WebRtc_Word32 GetReceiveCodec(VideoCodec* video_codec);
8603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 RegisterCodecObserver(ViEDecoderObserver* observer);
8703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Registers an external decoder. |decoder_render| is set to true if the
8803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // decoder will do the rendering. If |decoder_render| is set,|render_delay|
8903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // indicates the time needed to decode and render a frame.
9003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 RegisterExternalDecoder(const WebRtc_UWord8 pl_type,
9103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                        VideoDecoder* decoder,
9203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                        bool decoder_render,
9303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                        WebRtc_Word32 render_delay);
9403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 DeRegisterExternalDecoder(const WebRtc_UWord8 pl_type);
95f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org  WebRtc_Word32 ReceiveCodecStatistics(WebRtc_UWord32* num_key_frames,
96f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                                       WebRtc_UWord32* num_delta_frames);
9703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_UWord32 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.
10303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 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.
10803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetSignalPacketLossStatus(bool enable, bool only_key_frames);
10903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
11003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetRTCPMode(const RTCPMethod rtcp_mode);
111f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org  WebRtc_Word32 GetRTCPMode(RTCPMethod* rtcp_mode);
11203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetNACKStatus(const bool enable);
11303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetFECStatus(const bool enable,
11403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                             const unsigned char payload_typeRED,
11503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                             const unsigned char payload_typeFEC);
11603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetHybridNACKFECStatus(const bool enable,
11703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                       const unsigned char payload_typeRED,
11803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                       const unsigned char payload_typeFEC);
11903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetKeyFrameRequestMethod(const KeyFrameRequestMethod method);
12084dc3d134dca17df970e6a4a3e83543c0729799amflodman@webrtc.org  bool EnableRemb(bool enable);
12190071dd64744cbdef19bf4383b8287dba77b0f9emflodman@webrtc.org  int SetSendTimestampOffsetStatus(bool enable, int id);
12290071dd64744cbdef19bf4383b8287dba77b0f9emflodman@webrtc.org  int SetReceiveTimestampOffsetStatus(bool enable, int id);
1235a7507f26af65222bfee8eb0d386ba68d48534e3mflodman@webrtc.org  void SetTransmissionSmoothingStatus(bool enable);
12403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 EnableTMMBR(const bool enable);
12503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 EnableKeyFrameRequestCallback(const bool enable);
12603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
12703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Sets SSRC for outgoing stream.
128f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org  WebRtc_Word32 SetSSRC(const uint32_t SSRC,
12903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                        const StreamType usage,
13003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                        const unsigned char simulcast_idx);
13103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
132d6ec386ff56a47b685c0a0d1ce0ce17ac7745ff9mflodman@webrtc.org  // Gets SSRC for outgoing stream number |idx|.
133d6ec386ff56a47b685c0a0d1ce0ce17ac7745ff9mflodman@webrtc.org  WebRtc_Word32 GetLocalSSRC(uint8_t idx, unsigned int* ssrc);
13403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
13503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Gets SSRC for the incoming stream.
136f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org  WebRtc_Word32 GetRemoteSSRC(uint32_t* ssrc);
13703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
13803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Gets the CSRC for the incoming stream.
139f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org  WebRtc_Word32 GetRemoteCSRC(uint32_t CSRCs[kRtpCsrcSize]);
14003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
14103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Sets the starting sequence number, must be called before StartSend.
14203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetStartSequenceNumber(WebRtc_UWord16 sequence_number);
14303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
14403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Sets the CName for the outgoing stream on the channel.
14539e9659fc6a70f9416205c942d21deea060a8997leozwang@webrtc.org  WebRtc_Word32 SetRTCPCName(const char rtcp_cname[]);
14603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
14703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Gets the CName for the outgoing stream on the channel.
14839e9659fc6a70f9416205c942d21deea060a8997leozwang@webrtc.org  WebRtc_Word32 GetRTCPCName(char rtcp_cname[]);
14903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
15003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Gets the CName of the incoming stream.
15139e9659fc6a70f9416205c942d21deea060a8997leozwang@webrtc.org  WebRtc_Word32 GetRemoteRTCPCName(char rtcp_cname[]);
15203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 RegisterRtpObserver(ViERTPObserver* observer);
15303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 RegisterRtcpObserver(ViERTCPObserver* observer);
15403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SendApplicationDefinedRTCPPacket(
15503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const WebRtc_UWord8 sub_type,
15603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      WebRtc_UWord32 name,
15703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const WebRtc_UWord8* data,
15803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      WebRtc_UWord16 data_length_in_bytes);
15903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
16060c9bbd976a1eb11375de597dcacd4a9d81455e7perkj@webrtc.org  // Returns statistics reported by the remote client in an RTCP packet.
161f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org  WebRtc_Word32 GetSendRtcpStatistics(uint16_t* fraction_lost,
162f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                                      uint32_t* cumulative_lost,
163f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                                      uint32_t* extended_max,
164f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                                      uint32_t* jitter_samples,
165f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                                      int32_t* rtt_ms);
16603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
16760c9bbd976a1eb11375de597dcacd4a9d81455e7perkj@webrtc.org  // Returns our localy created statistics of the received RTP stream.
168f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org  WebRtc_Word32 GetReceivedRtcpStatistics(uint16_t* fraction_lost,
169f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                                          uint32_t* cumulative_lost,
170f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                                          uint32_t* extended_max,
171f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                                          uint32_t* jitter_samples,
172f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                                          int32_t* rtt_ms);
17303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
17403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Gets sent/received packets statistics.
175f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org  WebRtc_Word32 GetRtpStatistics(uint32_t* bytes_sent,
176f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                                 uint32_t* packets_sent,
177f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                                 uint32_t* bytes_received,
178f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                                 uint32_t* packets_received) const;
179f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org  void GetBandwidthUsage(uint32_t* total_bitrate_sent,
180f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                         uint32_t* video_bitrate_sent,
181f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                         uint32_t* fec_bitrate_sent,
182f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                         uint32_t* nackBitrateSent) const;
183f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org  int GetEstimatedReceiveBandwidth(uint32_t* estimated_bandwidth) const;
1843e820e5109cf34b2bdb216a637a92a6ce8904816mflodman@webrtc.org
18503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 StartRTPDump(const char file_nameUTF8[1024],
18603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                             RTPDirections direction);
18703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 StopRTPDump(RTPDirections direction);
18803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
18903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements RtcpFeedback.
1902853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org  // TODO(pwestin) Depricate this functionality.
19103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual void OnApplicationDataReceived(const WebRtc_Word32 id,
19203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                         const WebRtc_UWord8 sub_type,
19303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                         const WebRtc_UWord32 name,
19403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                         const WebRtc_UWord16 length,
19503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                         const WebRtc_UWord8* data);
196976a7e61c17047fdc27401a015a1be55749cc914stefan@webrtc.org  virtual void OnSendReportReceived(const WebRtc_Word32 id,
197976a7e61c17047fdc27401a015a1be55749cc914stefan@webrtc.org                                    const WebRtc_UWord32 senderSSRC,
198976a7e61c17047fdc27401a015a1be55749cc914stefan@webrtc.org                                    uint32_t ntp_secs,
199976a7e61c17047fdc27401a015a1be55749cc914stefan@webrtc.org                                    uint32_t ntp_frac,
200976a7e61c17047fdc27401a015a1be55749cc914stefan@webrtc.org                                    uint32_t timestamp);
20103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements RtpFeedback.
20203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual WebRtc_Word32 OnInitializeDecoder(
20303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const WebRtc_Word32 id,
20403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const WebRtc_Word8 payload_type,
20539e9659fc6a70f9416205c942d21deea060a8997leozwang@webrtc.org      const char payload_name[RTP_PAYLOAD_NAME_SIZE],
20603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const int frequency,
20703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const WebRtc_UWord8 channels,
20803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const WebRtc_UWord32 rate);
20903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual void OnPacketTimeout(const WebRtc_Word32 id);
21003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual void OnReceivedPacket(const WebRtc_Word32 id,
21103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                const RtpRtcpPacketType packet_type);
21203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual void OnPeriodicDeadOrAlive(const WebRtc_Word32 id,
21303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                     const RTPAliveType alive);
21403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual void OnIncomingSSRCChanged(const WebRtc_Word32 id,
21503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                     const WebRtc_UWord32 SSRC);
21603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual void OnIncomingCSRCChanged(const WebRtc_Word32 id,
21703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                     const WebRtc_UWord32 CSRC,
21803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                     const bool added);
21903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
22003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetLocalReceiver(const WebRtc_UWord16 rtp_port,
22103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                 const WebRtc_UWord16 rtcp_port,
22239e9659fc6a70f9416205c942d21deea060a8997leozwang@webrtc.org                                 const char* ip_address);
223f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org  WebRtc_Word32 GetLocalReceiver(WebRtc_UWord16* rtp_port,
224f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                                 WebRtc_UWord16* rtcp_port,
22539e9659fc6a70f9416205c942d21deea060a8997leozwang@webrtc.org                                 char* ip_address) const;
22639e9659fc6a70f9416205c942d21deea060a8997leozwang@webrtc.org  WebRtc_Word32 SetSendDestination(const char* ip_address,
22703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                   const WebRtc_UWord16 rtp_port,
22803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                   const WebRtc_UWord16 rtcp_port,
22903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                   const WebRtc_UWord16 source_rtp_port,
23003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                   const WebRtc_UWord16 source_rtcp_port);
23139e9659fc6a70f9416205c942d21deea060a8997leozwang@webrtc.org  WebRtc_Word32 GetSendDestination(char* ip_address,
232f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                                   WebRtc_UWord16* rtp_port,
233f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                                   WebRtc_UWord16* rtcp_port,
234f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                                   WebRtc_UWord16* source_rtp_port,
235f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                                   WebRtc_UWord16* source_rtcp_port) const;
236f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org  WebRtc_Word32 GetSourceInfo(WebRtc_UWord16* rtp_port,
237f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                              WebRtc_UWord16* rtcp_port,
23839e9659fc6a70f9416205c942d21deea060a8997leozwang@webrtc.org                              char* ip_address,
23903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                              WebRtc_UWord32 ip_address_length);
24003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
2418281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  WebRtc_Word32 SetRemoteSSRCType(const StreamType usage,
2428281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org                                  const uint32_t SSRC) const;
24303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
24403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 StartSend();
24503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 StopSend();
24603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool Sending();
24703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 StartReceive();
24803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 StopReceive();
24903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool Receiving();
25003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
251f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org  WebRtc_Word32 RegisterSendTransport(Transport* transport);
25203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 DeregisterSendTransport();
25303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
25403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Incoming packet from external transport.
25503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 ReceivedRTPPacket(const void* rtp_packet,
25603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                  const WebRtc_Word32 rtp_packet_length);
25703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
25803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Incoming packet from external transport.
25903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 ReceivedRTCPPacket(const void* rtcp_packet,
26003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                   const WebRtc_Word32 rtcp_packet_length);
26103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
26203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 EnableIPv6();
26303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool IsIPv6Enabled();
26403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetSourceFilter(const WebRtc_UWord16 rtp_port,
26503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                const WebRtc_UWord16 rtcp_port,
26639e9659fc6a70f9416205c942d21deea060a8997leozwang@webrtc.org                                const char* ip_address);
267f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org  WebRtc_Word32 GetSourceFilter(WebRtc_UWord16* rtp_port,
268f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                                WebRtc_UWord16* rtcp_port,
26939e9659fc6a70f9416205c942d21deea060a8997leozwang@webrtc.org                                char* ip_address) const;
27003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
27103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetToS(const WebRtc_Word32 DSCP, const bool use_set_sockOpt);
272f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org  WebRtc_Word32 GetToS(WebRtc_Word32* DSCP, bool* use_set_sockOpt) const;
27303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetSendGQoS(const bool enable,
27403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                            const WebRtc_Word32 service_type,
27503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                            const WebRtc_UWord32 max_bitrate,
27603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                            const WebRtc_Word32 overrideDSCP);
277f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org  WebRtc_Word32 GetSendGQoS(bool* enabled,
278f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                            WebRtc_Word32* service_type,
279f5e99db10bcbf6e7997ac67089bf11f6aad4956cmflodman@webrtc.org                            WebRtc_Word32* overrideDSCP) const;
28003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
28103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Sets the maximum transfer unit size for the network link, i.e. including
28203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // IP, UDP and RTP headers.
28303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetMTU(WebRtc_UWord16 mtu);
28403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
28503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Returns maximum allowed payload size, i.e. the maximum allowed size of
28603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // encoded data in each packet.
28703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_UWord16 MaxDataPayloadLength() const;
28803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetMaxPacketBurstSize(WebRtc_UWord16 max_number_of_packets);
28903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetPacketBurstSpreadState(bool enable,
29003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                          const WebRtc_UWord16 frame_periodMS);
29103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
29203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetPacketTimeoutNotification(bool enable,
29303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                             WebRtc_UWord32 timeout_seconds);
29403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 RegisterNetworkObserver(ViENetworkObserver* observer);
29503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool NetworkObserverRegistered();
29603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetPeriodicDeadOrAliveStatus(
29703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const bool enable, const WebRtc_UWord32 sample_time_seconds);
29803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
29903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SendUDPPacket(const WebRtc_Word8* data,
30003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                              const WebRtc_UWord32 length,
30103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                              WebRtc_Word32& transmitted_bytes,
30203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                              bool use_rtcp_socket);
30303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
30403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 EnableColorEnhancement(bool enable);
30503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
30684dc3d134dca17df970e6a4a3e83543c0729799amflodman@webrtc.org  // Gets the modules used by the channel.
30784dc3d134dca17df970e6a4a3e83543c0729799amflodman@webrtc.org  RtpRtcp* rtp_rtcp();
30884dc3d134dca17df970e6a4a3e83543c0729799amflodman@webrtc.org
3097c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org  StatsObserver* GetStatsObserver();
3107c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org
31103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements VCMReceiveCallback.
3129fedff7c17a8d3dc46ed5b3207220f59a22391d6mikhal@webrtc.org  virtual WebRtc_Word32 FrameToRender(I420VideoFrame& video_frame);  // NOLINT
31303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
31403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements VCMReceiveCallback.
31503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual WebRtc_Word32 ReceivedDecodedReferenceFrame(
31603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const WebRtc_UWord64 picture_id);
31703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
31803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements VCM.
31903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual WebRtc_Word32 StoreReceivedFrame(
32003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const EncodedVideoData& frame_to_store);
32103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
32203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements VideoReceiveStatisticsCallback.
32303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual WebRtc_Word32 ReceiveStatistics(const WebRtc_UWord32 bit_rate,
32403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                          const WebRtc_UWord32 frame_rate);
32503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
32603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements VideoFrameTypeCallback.
3275e954814a8d73ae1d4095bf951cbbaf3e6b6f8eepwestin@webrtc.org  virtual WebRtc_Word32 RequestKeyFrame();
32803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
32903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements VideoFrameTypeCallback.
33003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual WebRtc_Word32 SliceLossIndicationRequest(
33103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const WebRtc_UWord64 picture_id);
33203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
33303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements VideoPacketRequestCallback.
33403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual WebRtc_Word32 ResendPackets(const WebRtc_UWord16* sequence_numbers,
33503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                      WebRtc_UWord16 length);
33603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
33703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 RegisterExternalEncryption(Encryption* encryption);
33803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 DeRegisterExternalEncryption();
33903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
34003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetVoiceChannel(WebRtc_Word32 ve_channel_id,
34103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                VoEVideoSync* ve_sync_interface);
34203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 VoiceChannel();
34303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
34403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements ViEFrameProviderBase.
34503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual int FrameCallbackChanged() {return -1;}
34603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
34703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 RegisterEffectFilter(ViEEffectFilter* effect_filter);
34803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
34903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViEFileRecorder& GetIncomingFileRecorder();
35003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  void ReleaseIncomingFileRecorder();
35103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
35203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org protected:
35303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  static bool ChannelDecodeThreadFunction(void* obj);
35403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool ChannelDecodeProcess();
35503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
3567c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org  void OnRttUpdate(uint32_t rtt);
3577c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org
35803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org private:
35903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Assumed to be protected.
36003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 StartDecodeThread();
36103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 StopDecodeThread();
36203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
36303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 ProcessNACKRequest(const bool enable);
36403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 ProcessFECRequest(const bool enable,
36503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                  const unsigned char payload_typeRED,
36603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                  const unsigned char payload_typeFEC);
36703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
36803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 channel_id_;
36903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 engine_id_;
37003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_UWord32 number_of_cores_;
37103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_UWord8 num_socket_threads_;
37203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
37303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Used for all registered callbacks except rendering.
374d32c44738a034977b659bb4a2e76a97f027555e4mflodman@webrtc.org  scoped_ptr<CriticalSectionWrapper> callback_cs_;
3752d1fc9bf17da046fedb88d27900f4d443142dbe6pwestin@webrtc.org  scoped_ptr<CriticalSectionWrapper> rtp_rtcp_cs_;
376470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
3773c383abd2725c511071904a1914ca4a5933d1b22turaj@webrtc.org  RtpRtcp* default_rtp_rtcp_;
3782853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org
3792853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org  // Owned modules/classes.
3802853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org  scoped_ptr<RtpRtcp> rtp_rtcp_;
38103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  std::list<RtpRtcp*> simulcast_rtp_rtcp_;
38203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#ifndef WEBRTC_EXTERNAL_TRANSPORT
38303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  UdpTransport& socket_transport_;
384470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#endif
38503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  VideoCodingModule& vcm_;
3862853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org  ViEReceiver vie_receiver_;
3872853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org  ViESender vie_sender_;
3882853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org  ViESyncModule vie_sync_;
389470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
3907c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org  // Helper to report call statistics.
3917c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org  scoped_ptr<ChannelStatsObserver> stats_observer_;
3927c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org
39303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Not owned.
39403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ProcessThread& module_process_thread_;
39503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViEDecoderObserver* codec_observer_;
39603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool do_key_frame_callbackRequest_;
39703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViERTPObserver* rtp_observer_;
39803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViERTCPObserver* rtcp_observer_;
39903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViENetworkObserver* networkObserver_;
40049888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org  RtcpIntraFrameObserver* intra_frame_observer_;
4017c894b7cc718773f32d21985ff33a64f9e13946emflodman@webrtc.org  RtcpRttObserver* rtt_observer_;
402571a1c035be6b0afd7f357001bef775c51ec9364pwestin@webrtc.org  PacedSender* paced_sender_;
403571a1c035be6b0afd7f357001bef775c51ec9364pwestin@webrtc.org
404209442a56099e47e4a87fa6a556e34c782165df4pwestin@webrtc.org  scoped_ptr<RtcpBandwidthObserver> bandwidth_observer_;
40503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool rtp_packet_timeout_;
40690071dd64744cbdef19bf4383b8287dba77b0f9emflodman@webrtc.org  int send_timestamp_extension_id_;
40703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool using_packet_spread_;
408470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
40903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  Transport* external_transport_;
410470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
41103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool decoder_reset_;
41203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool wait_for_key_frame_;
41303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ThreadWrapper* decode_thread_;
414470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
41503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  Encryption* external_encryption_;
416470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
41703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViEEffectFilter* effect_filter_;
41803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool color_enhancement_;
419470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
42003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViEFileRecorder file_recorder_;
421a6a9964346655963f7efb0e0c49a009fda020ef2mflodman@webrtc.org
422a6a9964346655963f7efb0e0c49a009fda020ef2mflodman@webrtc.org  // User set MTU, -1 if not set.
423a6a9964346655963f7efb0e0c49a009fda020ef2mflodman@webrtc.org  uint16_t mtu_;
4244e8eabaab13d039efc4cf25b3510526f79dc5406stefan@webrtc.org  const bool sender_;
42503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org};
426470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
42703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org}  // namespace webrtc
428470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
429e06ca3cef68cec1fa97b3d476c99d98c68f04ff2mflodman@webrtc.org#endif  // WEBRTC_VIDEO_ENGINE_VIE_CHANNEL_H_
430