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