vie_channel.h revision 60c9bbd976a1eb11375de597dcacd4a9d81455e7
1470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*
2470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  Copyright (c) 2011 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
1103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org// vie_channel.h
12470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
1303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#ifndef WEBRTC_VIDEO_ENGINE_VIE_CHANNEL_H_
1403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#define WEBRTC_VIDEO_ENGINE_VIE_CHANNEL_H_
15470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
161da1ce0da5fcc029dbc2a134a9760e1b398b02d7pwestin@webrtc.org#include <list>
171da1ce0da5fcc029dbc2a134a9760e1b398b02d7pwestin@webrtc.org
1803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#include "modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
1903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#include "modules/udp_transport/interface/udp_transport.h"
2003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#include "modules/video_coding/main/interface/video_coding_defines.h"
21d32c44738a034977b659bb4a2e76a97f027555e4mflodman@webrtc.org#include "system_wrappers/interface/scoped_ptr.h"
2203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#include "system_wrappers/interface/tick_util.h"
23470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include "typedefs.h"
24a4863dbdf05101c983dbd8c638c9fa9419b7c485mflodman@webrtc.org#include "video_engine/include/vie_network.h"
25a4863dbdf05101c983dbd8c638c9fa9419b7c485mflodman@webrtc.org#include "video_engine/include/vie_rtp_rtcp.h"
2603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#include "video_engine/vie_defines.h"
2703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#include "video_engine/vie_file_recorder.h"
2803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#include "video_engine/vie_frame_provider_base.h"
29470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
3003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.orgnamespace webrtc {
31470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
32470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass CriticalSectionWrapper;
33470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass Encryption;
34470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ProcessThread;
35470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass RtpRtcp;
36470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ThreadWrapper;
37470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass VideoCodingModule;
38470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass VideoDecoder;
3903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.orgclass VideoRenderCallback;
40470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ViEDecoderObserver;
41470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ViEEffectFilter;
42470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ViENetworkObserver;
43470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ViEReceiver;
44470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ViERTCPObserver;
45470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ViERTPObserver;
46470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ViESender;
47470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass ViESyncModule;
48470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comclass VoEVideoSync;
49470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
5003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.orgclass ViEChannel
5103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org    : public VCMFrameTypeCallback,
5203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      public VCMReceiveCallback,
5303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      public VCMReceiveStatisticsCallback,
5403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      public VCMPacketRequestCallback,
5503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      public VCMFrameStorageCallback,
5603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      public RtcpFeedback,
5703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      public RtpFeedback,
5803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      public ViEFrameProviderBase {
5903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org public:
6003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViEChannel(WebRtc_Word32 channel_id,
6103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org             WebRtc_Word32 engine_id,
6203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org             WebRtc_UWord32 number_of_cores,
6303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org             ProcessThread& module_process_thread);
6403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ~ViEChannel();
6503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
6603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 Init();
6703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
6803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Sets the encoder to use for the channel. |new_stream| indicates the encoder
6903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // type has changed and we should start a new RTP stream.
7003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetSendCodec(const VideoCodec& video_codec,
7103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                             bool new_stream = true);
7203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetReceiveCodec(const VideoCodec& video_codec);
7303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 GetReceiveCodec(VideoCodec& video_codec);
7403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 RegisterCodecObserver(ViEDecoderObserver* observer);
7503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Registers an external decoder. |decoder_render| is set to true if the
7603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // decoder will do the rendering. If |decoder_render| is set,|render_delay|
7703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // indicates the time needed to decode and render a frame.
7803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 RegisterExternalDecoder(const WebRtc_UWord8 pl_type,
7903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                        VideoDecoder* decoder,
8003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                        bool decoder_render,
8103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                        WebRtc_Word32 render_delay);
8203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 DeRegisterExternalDecoder(const WebRtc_UWord8 pl_type);
8303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 ReceiveCodecStatistics(WebRtc_UWord32& num_key_frames,
8403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                       WebRtc_UWord32& num_delta_frames);
8503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_UWord32 DiscardedPackets() const;
8603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
8703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Only affects calls to SetReceiveCodec done after this call.
8803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 WaitForKeyFrame(bool wait);
8903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
9003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // If enabled, a key frame request will be sent as soon as there are lost
9103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // packets. If |only_key_frames| are set, requests are only sent for loss in
9203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // key frames.
9303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetSignalPacketLossStatus(bool enable, bool only_key_frames);
9403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
9503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetRTCPMode(const RTCPMethod rtcp_mode);
9603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 GetRTCPMode(RTCPMethod& rtcp_mode);
9703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetNACKStatus(const bool enable);
9803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetFECStatus(const bool enable,
9903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                             const unsigned char payload_typeRED,
10003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                             const unsigned char payload_typeFEC);
10103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetHybridNACKFECStatus(const bool enable,
10203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                       const unsigned char payload_typeRED,
10303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                       const unsigned char payload_typeFEC);
10403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetKeyFrameRequestMethod(const KeyFrameRequestMethod method);
10584dc3d134dca17df970e6a4a3e83543c0729799amflodman@webrtc.org  bool EnableRemb(bool enable);
10603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 EnableTMMBR(const bool enable);
10703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 EnableKeyFrameRequestCallback(const bool enable);
10803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
10903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Sets SSRC for outgoing stream.
11003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetSSRC(const WebRtc_UWord32 SSRC,
11103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                        const StreamType usage,
11203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                        const unsigned char simulcast_idx);
11303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
11403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Gets SSRC for outgoing stream.
11503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 GetLocalSSRC(WebRtc_UWord32& SSRC);
11603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
11703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Gets SSRC for the incoming stream.
11803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 GetRemoteSSRC(WebRtc_UWord32& SSRC);
11903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
12003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Gets the CSRC for the incoming stream.
12103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 GetRemoteCSRC(unsigned int CSRCs[kRtpCsrcSize]);
12203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
12303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Sets the starting sequence number, must be called before StartSend.
12403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetStartSequenceNumber(WebRtc_UWord16 sequence_number);
12503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
12603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Sets the CName for the outgoing stream on the channel.
12703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetRTCPCName(const WebRtc_Word8 rtcp_cname[]);
12803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
12903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Gets the CName for the outgoing stream on the channel.
13003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 GetRTCPCName(WebRtc_Word8 rtcp_cname[]);
13103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
13203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Gets the CName of the incoming stream.
13303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 GetRemoteRTCPCName(WebRtc_Word8 rtcp_cname[]);
13403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 RegisterRtpObserver(ViERTPObserver* observer);
13503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 RegisterRtcpObserver(ViERTCPObserver* observer);
13603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SendApplicationDefinedRTCPPacket(
13703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const WebRtc_UWord8 sub_type,
13803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      WebRtc_UWord32 name,
13903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const WebRtc_UWord8* data,
14003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      WebRtc_UWord16 data_length_in_bytes);
14103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
14260c9bbd976a1eb11375de597dcacd4a9d81455e7perkj@webrtc.org  // Returns statistics reported by the remote client in an RTCP packet.
14303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 GetSendRtcpStatistics(WebRtc_UWord16& fraction_lost,
14403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                      WebRtc_UWord32& cumulative_lost,
14503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                      WebRtc_UWord32& extended_max,
14603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                      WebRtc_UWord32& jitter_samples,
14703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                      WebRtc_Word32& rtt_ms);
14803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
14960c9bbd976a1eb11375de597dcacd4a9d81455e7perkj@webrtc.org  // Returns our localy created statistics of the received RTP stream.
15003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 GetReceivedRtcpStatistics(WebRtc_UWord16& fraction_lost,
15103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                          WebRtc_UWord32& cumulative_lost,
15203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                          WebRtc_UWord32& extended_max,
15303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                          WebRtc_UWord32& jitter_samples,
15403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                          WebRtc_Word32& rtt_ms);
15503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
15603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Gets sent/received packets statistics.
15703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 GetRtpStatistics(WebRtc_UWord32& bytes_sent,
15803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                 WebRtc_UWord32& packets_sent,
15903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                 WebRtc_UWord32& bytes_received,
16003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                 WebRtc_UWord32& packets_received) const;
16103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  void GetBandwidthUsage(WebRtc_UWord32& total_bitrate_sent,
16203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                         WebRtc_UWord32& video_bitrate_sent,
16303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                         WebRtc_UWord32& fec_bitrate_sent,
16403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                         WebRtc_UWord32& nackBitrateSent) const;
16503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetKeepAliveStatus(const bool enable,
16603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                   const WebRtc_Word8 unknown_payload_type,
16703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                   const WebRtc_UWord16 delta_transmit_timeMS);
16803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 GetKeepAliveStatus(bool& enable,
16903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                   WebRtc_Word8& unknown_payload_type,
17003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                   WebRtc_UWord16& delta_transmit_timeMS);
17103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 StartRTPDump(const char file_nameUTF8[1024],
17203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                             RTPDirections direction);
17303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 StopRTPDump(RTPDirections direction);
17403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
17503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements RtcpFeedback.
17603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual void OnLipSyncUpdate(const WebRtc_Word32 id,
17703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                               const WebRtc_Word32 audio_video_offset);
17803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual void OnApplicationDataReceived(const WebRtc_Word32 id,
17903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                         const WebRtc_UWord8 sub_type,
18003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                         const WebRtc_UWord32 name,
18103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                         const WebRtc_UWord16 length,
18203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                         const WebRtc_UWord8* data);
18303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
18403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements RtpFeedback.
18503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual WebRtc_Word32 OnInitializeDecoder(
18603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const WebRtc_Word32 id,
18703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const WebRtc_Word8 payload_type,
18803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const WebRtc_Word8 payload_name[RTP_PAYLOAD_NAME_SIZE],
18903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const int frequency,
19003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const WebRtc_UWord8 channels,
19103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const WebRtc_UWord32 rate);
19203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual void OnPacketTimeout(const WebRtc_Word32 id);
19303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual void OnReceivedPacket(const WebRtc_Word32 id,
19403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                const RtpRtcpPacketType packet_type);
19503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual void OnPeriodicDeadOrAlive(const WebRtc_Word32 id,
19603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                     const RTPAliveType alive);
19703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual void OnIncomingSSRCChanged(const WebRtc_Word32 id,
19803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                     const WebRtc_UWord32 SSRC);
19903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual void OnIncomingCSRCChanged(const WebRtc_Word32 id,
20003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                     const WebRtc_UWord32 CSRC,
20103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                     const bool added);
20203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
20303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetLocalReceiver(const WebRtc_UWord16 rtp_port,
20403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                 const WebRtc_UWord16 rtcp_port,
20503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                 const WebRtc_Word8* ip_address);
20603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 GetLocalReceiver(WebRtc_UWord16& rtp_port,
20703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                 WebRtc_UWord16& rtcp_port,
20803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                 WebRtc_Word8* ip_address) const;
20903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetSendDestination(const WebRtc_Word8* ip_address,
21003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                   const WebRtc_UWord16 rtp_port,
21103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                   const WebRtc_UWord16 rtcp_port,
21203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                   const WebRtc_UWord16 source_rtp_port,
21303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                   const WebRtc_UWord16 source_rtcp_port);
21403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 GetSendDestination(WebRtc_Word8* ip_address,
21503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                   WebRtc_UWord16& rtp_port,
21603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                   WebRtc_UWord16& rtcp_port,
21703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                   WebRtc_UWord16& source_rtp_port,
21803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                   WebRtc_UWord16& source_rtcp_port) const;
21903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 GetSourceInfo(WebRtc_UWord16& rtp_port,
22003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                              WebRtc_UWord16& rtcp_port,
22103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                              WebRtc_Word8* ip_address,
22203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                              WebRtc_UWord32 ip_address_length);
22303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
22403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
22503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 StartSend();
22603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 StopSend();
22703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool Sending();
22803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 StartReceive();
22903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 StopReceive();
23003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool Receiving();
23103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
23203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 RegisterSendTransport(Transport& transport);
23303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 DeregisterSendTransport();
23403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
23503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Incoming packet from external transport.
23603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 ReceivedRTPPacket(const void* rtp_packet,
23703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                  const WebRtc_Word32 rtp_packet_length);
23803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
23903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Incoming packet from external transport.
24003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 ReceivedRTCPPacket(const void* rtcp_packet,
24103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                   const WebRtc_Word32 rtcp_packet_length);
24203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
24303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 EnableIPv6();
24403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool IsIPv6Enabled();
24503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetSourceFilter(const WebRtc_UWord16 rtp_port,
24603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                const WebRtc_UWord16 rtcp_port,
24703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                const WebRtc_Word8* ip_address);
24803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 GetSourceFilter(WebRtc_UWord16& rtp_port,
24903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                WebRtc_UWord16& rtcp_port,
25003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                WebRtc_Word8* ip_address) const;
25103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
25203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetToS(const WebRtc_Word32 DSCP, const bool use_set_sockOpt);
25303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 GetToS(WebRtc_Word32& DSCP, bool& use_set_sockOpt) const;
25403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetSendGQoS(const bool enable,
25503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                            const WebRtc_Word32 service_type,
25603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                            const WebRtc_UWord32 max_bitrate,
25703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                            const WebRtc_Word32 overrideDSCP);
25803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 GetSendGQoS(bool& enabled, WebRtc_Word32& service_type,
25903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                            WebRtc_Word32& overrideDSCP) const;
26003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
26103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Sets the maximum transfer unit size for the network link, i.e. including
26203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // IP, UDP and RTP headers.
26303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetMTU(WebRtc_UWord16 mtu);
26403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
26503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Returns maximum allowed payload size, i.e. the maximum allowed size of
26603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // encoded data in each packet.
26703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_UWord16 MaxDataPayloadLength() const;
26803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetMaxPacketBurstSize(WebRtc_UWord16 max_number_of_packets);
26903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetPacketBurstSpreadState(bool enable,
27003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                          const WebRtc_UWord16 frame_periodMS);
27103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
27203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetPacketTimeoutNotification(bool enable,
27303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                             WebRtc_UWord32 timeout_seconds);
27403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 RegisterNetworkObserver(ViENetworkObserver* observer);
27503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool NetworkObserverRegistered();
27603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetPeriodicDeadOrAliveStatus(
27703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const bool enable, const WebRtc_UWord32 sample_time_seconds);
27803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
27903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SendUDPPacket(const WebRtc_Word8* data,
28003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                              const WebRtc_UWord32 length,
28103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                              WebRtc_Word32& transmitted_bytes,
28203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                              bool use_rtcp_socket);
28303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
28403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 EnableColorEnhancement(bool enable);
28503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
28603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Register send RTP RTCP module, which will deliver encoded frames to the
28703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // to the channel RTP module.
28803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 RegisterSendRtpRtcpModule(RtpRtcp& send_rtp_rtcp_module);
28903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
29003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Deregisters the send RTP RTCP module, which will stop the encoder input to
29103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // the channel.
29203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 DeregisterSendRtpRtcpModule();
29303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
29484dc3d134dca17df970e6a4a3e83543c0729799amflodman@webrtc.org  // Gets the modules used by the channel.
29584dc3d134dca17df970e6a4a3e83543c0729799amflodman@webrtc.org  RtpRtcp* rtp_rtcp();
29684dc3d134dca17df970e6a4a3e83543c0729799amflodman@webrtc.org
29703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements VCMReceiveCallback.
29803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual WebRtc_Word32 FrameToRender(VideoFrame& video_frame);
29903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
30003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements VCMReceiveCallback.
30103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual WebRtc_Word32 ReceivedDecodedReferenceFrame(
30203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const WebRtc_UWord64 picture_id);
30303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
30403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements VCM.
30503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual WebRtc_Word32 StoreReceivedFrame(
30603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const EncodedVideoData& frame_to_store);
30703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
30803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements VideoReceiveStatisticsCallback.
30903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual WebRtc_Word32 ReceiveStatistics(const WebRtc_UWord32 bit_rate,
31003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                          const WebRtc_UWord32 frame_rate);
31103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
31203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements VideoFrameTypeCallback.
31303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual WebRtc_Word32 FrameTypeRequest(const FrameType frame_type);
31403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
31503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements VideoFrameTypeCallback.
31603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual WebRtc_Word32 SliceLossIndicationRequest(
31703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org      const WebRtc_UWord64 picture_id);
31803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
31903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements VideoPacketRequestCallback.
32003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual WebRtc_Word32 ResendPackets(const WebRtc_UWord16* sequence_numbers,
32103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                      WebRtc_UWord16 length);
32203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
32303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 RegisterExternalEncryption(Encryption* encryption);
32403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 DeRegisterExternalEncryption();
32503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
32603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetVoiceChannel(WebRtc_Word32 ve_channel_id,
32703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                VoEVideoSync* ve_sync_interface);
32803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 VoiceChannel();
32903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
33003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Implements ViEFrameProviderBase.
33103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  virtual int FrameCallbackChanged() {return -1;}
33203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
33303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 RegisterEffectFilter(ViEEffectFilter* effect_filter);
33403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
33503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 SetInverseH263Logic(const bool enable);
33603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
33703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViEFileRecorder& GetIncomingFileRecorder();
33803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  void ReleaseIncomingFileRecorder();
33903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
34003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org protected:
34103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  static bool ChannelDecodeThreadFunction(void* obj);
34203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool ChannelDecodeProcess();
34303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
34403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org private:
34503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Assumed to be protected.
34603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 StartDecodeThread();
34703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 StopDecodeThread();
34803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
34903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 ProcessNACKRequest(const bool enable);
35003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 ProcessFECRequest(const bool enable,
35103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                  const unsigned char payload_typeRED,
35203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org                                  const unsigned char payload_typeFEC);
35303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
35403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 channel_id_;
35503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_Word32 engine_id_;
35603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_UWord32 number_of_cores_;
35703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  WebRtc_UWord8 num_socket_threads_;
35803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org
35903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Used for all registered callbacks except rendering.
360d32c44738a034977b659bb4a2e76a97f027555e4mflodman@webrtc.org  scoped_ptr<CriticalSectionWrapper> callback_cs_;
361470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
36203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Owned modules/classes.
36303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  RtpRtcp& rtp_rtcp_;
36403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  RtpRtcp* default_rtp_rtcp_;
36503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  std::list<RtpRtcp*> simulcast_rtp_rtcp_;
36603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#ifndef WEBRTC_EXTERNAL_TRANSPORT
36703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  UdpTransport& socket_transport_;
368470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#endif
36903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  VideoCodingModule& vcm_;
37003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViEReceiver& vie_receiver_;
37103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViESender& vie_sender_;
37203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViESyncModule& vie_sync_;
373470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
37403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Not owned.
37503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ProcessThread& module_process_thread_;
37603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViEDecoderObserver* codec_observer_;
37703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool do_key_frame_callbackRequest_;
37803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViERTPObserver* rtp_observer_;
37903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViERTCPObserver* rtcp_observer_;
38003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViENetworkObserver* networkObserver_;
38103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool rtp_packet_timeout_;
38203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool using_packet_spread_;
383470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
38403c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  Transport* external_transport_;
385470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
38603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool decoder_reset_;
38703c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool wait_for_key_frame_;
38803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ThreadWrapper* decode_thread_;
389470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
39003c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  Encryption* external_encryption_;
391470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
39203c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViEEffectFilter* effect_filter_;
39303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  bool color_enhancement_;
394470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
39503c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  // Time when RTT time was last reported to VCM JB.
39603c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  TickTime vcm_rttreported_;
397470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
39803c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org  ViEFileRecorder file_recorder_;
39903c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org};
400470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
40103c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org}  // namespace webrtc
402470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
40303c06505fb7f928501a787580a4a7416d7af31eemflodman@webrtc.org#endif  // WEBRTC_VIDEO_ENGINE_VIE_CHANNEL_H_
404