| /* |
| * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| #ifndef WEBRTC_VOICE_ENGINE_CHANNEL_H |
| #define WEBRTC_VOICE_ENGINE_CHANNEL_H |
| |
| #include "audio_coding_module.h" |
| #include "audio_conference_mixer_defines.h" |
| #include "common_types.h" |
| #include "dtmf_inband.h" |
| #include "dtmf_inband_queue.h" |
| #include "file_player.h" |
| #include "file_recorder.h" |
| #include "level_indicator.h" |
| #include "resampler.h" |
| #include "rtp_rtcp.h" |
| #include "scoped_ptr.h" |
| #include "shared_data.h" |
| #include "voe_audio_processing.h" |
| #include "voe_network.h" |
| #include "voice_engine_defines.h" |
| |
| #ifndef WEBRTC_EXTERNAL_TRANSPORT |
| #include "udp_transport.h" |
| #endif |
| #ifdef WEBRTC_SRTP |
| #include "SrtpModule.h" |
| #endif |
| #ifdef WEBRTC_DTMF_DETECTION |
| #include "voe_dtmf.h" // TelephoneEventDetectionMethods, TelephoneEventObserver |
| #endif |
| |
| namespace webrtc |
| { |
| class CriticalSectionWrapper; |
| class ProcessThread; |
| class AudioDeviceModule; |
| class RtpRtcp; |
| class FileWrapper; |
| class RtpDump; |
| class VoiceEngineObserver; |
| class VoEMediaProcess; |
| class VoERTPObserver; |
| class VoERTCPObserver; |
| |
| struct CallStatistics; |
| |
| namespace voe |
| { |
| class Statistics; |
| class TransmitMixer; |
| class OutputMixer; |
| |
| |
| class Channel: |
| public RtpData, |
| public RtpFeedback, |
| public RtcpFeedback, |
| #ifndef WEBRTC_EXTERNAL_TRANSPORT |
| public UdpTransportData, // receiving packet from sockets |
| #endif |
| public FileCallback, // receiving notification from file player & recorder |
| public Transport, |
| public RtpAudioFeedback, |
| public AudioPacketizationCallback, // receive encoded packets from the ACM |
| public ACMVADCallback, // receive voice activity from the ACM |
| #ifdef WEBRTC_DTMF_DETECTION |
| public AudioCodingFeedback, // inband Dtmf detection in the ACM |
| #endif |
| public MixerParticipant // supplies output mixer with audio frames |
| { |
| public: |
| enum {KNumSocketThreads = 1}; |
| enum {KNumberOfSocketBuffers = 8}; |
| public: |
| virtual ~Channel(); |
| static WebRtc_Word32 CreateChannel(Channel*& channel, |
| const WebRtc_Word32 channelId, |
| const WebRtc_UWord32 instanceId); |
| Channel(const WebRtc_Word32 channelId, const WebRtc_UWord32 instanceId); |
| WebRtc_Word32 Init(); |
| WebRtc_Word32 SetEngineInformation( |
| Statistics& engineStatistics, |
| OutputMixer& outputMixer, |
| TransmitMixer& transmitMixer, |
| ProcessThread& moduleProcessThread, |
| AudioDeviceModule& audioDeviceModule, |
| VoiceEngineObserver* voiceEngineObserver, |
| CriticalSectionWrapper* callbackCritSect); |
| WebRtc_Word32 UpdateLocalTimeStamp(); |
| |
| public: |
| // API methods |
| |
| // VoEBase |
| WebRtc_Word32 StartPlayout(); |
| WebRtc_Word32 StopPlayout(); |
| WebRtc_Word32 StartSend(); |
| WebRtc_Word32 StopSend(); |
| WebRtc_Word32 StartReceiving(); |
| WebRtc_Word32 StopReceiving(); |
| |
| #ifndef WEBRTC_EXTERNAL_TRANSPORT |
| WebRtc_Word32 SetLocalReceiver(const WebRtc_UWord16 rtpPort, |
| const WebRtc_UWord16 rtcpPort, |
| const WebRtc_Word8 ipAddr[64], |
| const WebRtc_Word8 multicastIpAddr[64]); |
| WebRtc_Word32 GetLocalReceiver(int& port, int& RTCPport, char ipAddr[]); |
| WebRtc_Word32 SetSendDestination(const WebRtc_UWord16 rtpPort, |
| const WebRtc_Word8 ipAddr[64], |
| const int sourcePort, |
| const WebRtc_UWord16 rtcpPort); |
| WebRtc_Word32 GetSendDestination(int& port, char ipAddr[64], |
| int& sourcePort, int& RTCPport); |
| #endif |
| WebRtc_Word32 SetNetEQPlayoutMode(NetEqModes mode); |
| WebRtc_Word32 GetNetEQPlayoutMode(NetEqModes& mode); |
| WebRtc_Word32 SetNetEQBGNMode(NetEqBgnModes mode); |
| WebRtc_Word32 GetNetEQBGNMode(NetEqBgnModes& mode); |
| WebRtc_Word32 SetOnHoldStatus(bool enable, OnHoldModes mode); |
| WebRtc_Word32 GetOnHoldStatus(bool& enabled, OnHoldModes& mode); |
| WebRtc_Word32 RegisterVoiceEngineObserver(VoiceEngineObserver& observer); |
| WebRtc_Word32 DeRegisterVoiceEngineObserver(); |
| |
| // VoECodec |
| WebRtc_Word32 GetSendCodec(CodecInst& codec); |
| WebRtc_Word32 GetRecCodec(CodecInst& codec); |
| WebRtc_Word32 SetSendCodec(const CodecInst& codec); |
| WebRtc_Word32 SetVADStatus(bool enableVAD, ACMVADMode mode, |
| bool disableDTX); |
| WebRtc_Word32 GetVADStatus(bool& enabledVAD, ACMVADMode& mode, |
| bool& disabledDTX); |
| WebRtc_Word32 SetRecPayloadType(const CodecInst& codec); |
| WebRtc_Word32 GetRecPayloadType(CodecInst& codec); |
| WebRtc_Word32 SetAMREncFormat(AmrMode mode); |
| WebRtc_Word32 SetAMRDecFormat(AmrMode mode); |
| WebRtc_Word32 SetAMRWbEncFormat(AmrMode mode); |
| WebRtc_Word32 SetAMRWbDecFormat(AmrMode mode); |
| WebRtc_Word32 SetSendCNPayloadType(int type, PayloadFrequencies frequency); |
| WebRtc_Word32 SetISACInitTargetRate(int rateBps, bool useFixedFrameSize); |
| WebRtc_Word32 SetISACMaxRate(int rateBps); |
| WebRtc_Word32 SetISACMaxPayloadSize(int sizeBytes); |
| |
| // VoENetwork |
| WebRtc_Word32 RegisterExternalTransport(Transport& transport); |
| WebRtc_Word32 DeRegisterExternalTransport(); |
| WebRtc_Word32 ReceivedRTPPacket(const WebRtc_Word8* data, |
| WebRtc_Word32 length); |
| WebRtc_Word32 ReceivedRTCPPacket(const WebRtc_Word8* data, |
| WebRtc_Word32 length); |
| #ifndef WEBRTC_EXTERNAL_TRANSPORT |
| WebRtc_Word32 GetSourceInfo(int& rtpPort, int& rtcpPort, char ipAddr[64]); |
| WebRtc_Word32 EnableIPv6(); |
| bool IPv6IsEnabled() const; |
| WebRtc_Word32 SetSourceFilter(int rtpPort, int rtcpPort, |
| const char ipAddr[64]); |
| WebRtc_Word32 GetSourceFilter(int& rtpPort, int& rtcpPort, char ipAddr[64]); |
| WebRtc_Word32 SetSendTOS(int DSCP, int priority, bool useSetSockopt); |
| WebRtc_Word32 GetSendTOS(int &DSCP, int& priority, bool &useSetSockopt); |
| #if defined(_WIN32) |
| WebRtc_Word32 SetSendGQoS(bool enable, int serviceType, int overrideDSCP); |
| WebRtc_Word32 GetSendGQoS(bool &enabled, int &serviceType, |
| int &overrideDSCP); |
| #endif |
| #endif |
| WebRtc_Word32 SetPacketTimeoutNotification(bool enable, int timeoutSeconds); |
| WebRtc_Word32 GetPacketTimeoutNotification(bool& enabled, |
| int& timeoutSeconds); |
| WebRtc_Word32 RegisterDeadOrAliveObserver(VoEConnectionObserver& observer); |
| WebRtc_Word32 DeRegisterDeadOrAliveObserver(); |
| WebRtc_Word32 SetPeriodicDeadOrAliveStatus(bool enable, |
| int sampleTimeSeconds); |
| WebRtc_Word32 GetPeriodicDeadOrAliveStatus(bool& enabled, |
| int& sampleTimeSeconds); |
| WebRtc_Word32 SendUDPPacket(const void* data, unsigned int length, |
| int& transmittedBytes, bool useRtcpSocket); |
| |
| // VoEFile |
| int StartPlayingFileLocally(const char* fileName, const bool loop, |
| const FileFormats format, |
| const int startPosition, |
| const float volumeScaling, |
| const int stopPosition, |
| const CodecInst* codecInst); |
| int StartPlayingFileLocally(InStream* stream, const FileFormats format, |
| const int startPosition, |
| const float volumeScaling, |
| const int stopPosition, |
| const CodecInst* codecInst); |
| int StopPlayingFileLocally(); |
| int IsPlayingFileLocally() const; |
| int ScaleLocalFilePlayout(const float scale); |
| int GetLocalPlayoutPosition(int& positionMs); |
| int StartPlayingFileAsMicrophone(const char* fileName, const bool loop, |
| const FileFormats format, |
| const int startPosition, |
| const float volumeScaling, |
| const int stopPosition, |
| const CodecInst* codecInst); |
| int StartPlayingFileAsMicrophone(InStream* stream, |
| const FileFormats format, |
| const int startPosition, |
| const float volumeScaling, |
| const int stopPosition, |
| const CodecInst* codecInst); |
| int StopPlayingFileAsMicrophone(); |
| int IsPlayingFileAsMicrophone() const; |
| int ScaleFileAsMicrophonePlayout(const float scale); |
| int StartRecordingPlayout(const char* fileName, const CodecInst* codecInst); |
| int StartRecordingPlayout(OutStream* stream, const CodecInst* codecInst); |
| int StopRecordingPlayout(); |
| |
| void SetMixWithMicStatus(bool mix); |
| |
| // VoEExternalMediaProcessing |
| int RegisterExternalMediaProcessing(ProcessingTypes type, |
| VoEMediaProcess& processObject); |
| int DeRegisterExternalMediaProcessing(ProcessingTypes type); |
| |
| // VoEVolumeControl |
| int GetSpeechOutputLevel(WebRtc_UWord32& level) const; |
| int GetSpeechOutputLevelFullRange(WebRtc_UWord32& level) const; |
| int SetMute(const bool enable); |
| bool Mute() const; |
| int SetOutputVolumePan(float left, float right); |
| int GetOutputVolumePan(float& left, float& right) const; |
| int SetChannelOutputVolumeScaling(float scaling); |
| int GetChannelOutputVolumeScaling(float& scaling) const; |
| |
| // VoECallReport |
| void ResetDeadOrAliveCounters(); |
| int ResetRTCPStatistics(); |
| int GetRoundTripTimeSummary(StatVal& delaysMs) const; |
| int GetDeadOrAliveCounters(int& countDead, int& countAlive) const; |
| |
| // VoENetEqStats |
| int GetNetworkStatistics(NetworkStatistics& stats); |
| |
| // VoEVideoSync |
| int GetDelayEstimate(int& delayMs) const; |
| int SetMinimumPlayoutDelay(int delayMs); |
| int GetPlayoutTimestamp(unsigned int& timestamp); |
| int SetInitTimestamp(unsigned int timestamp); |
| int SetInitSequenceNumber(short sequenceNumber); |
| |
| // VoEVideoSyncExtended |
| int GetRtpRtcp(RtpRtcp* &rtpRtcpModule) const; |
| |
| // VoEEncryption |
| #ifdef WEBRTC_SRTP |
| int EnableSRTPSend( |
| CipherTypes cipherType, |
| int cipherKeyLength, |
| AuthenticationTypes authType, |
| int authKeyLength, |
| int authTagLength, |
| SecurityLevels level, |
| const unsigned char key[kVoiceEngineMaxSrtpKeyLength], |
| bool useForRTCP); |
| int DisableSRTPSend(); |
| int EnableSRTPReceive( |
| CipherTypes cipherType, |
| int cipherKeyLength, |
| AuthenticationTypes authType, |
| int authKeyLength, |
| int authTagLength, |
| SecurityLevels level, |
| const unsigned char key[kVoiceEngineMaxSrtpKeyLength], |
| bool useForRTCP); |
| int DisableSRTPReceive(); |
| #endif |
| int RegisterExternalEncryption(Encryption& encryption); |
| int DeRegisterExternalEncryption(); |
| |
| // VoEDtmf |
| int SendTelephoneEventOutband(unsigned char eventCode, int lengthMs, |
| int attenuationDb, bool playDtmfEvent); |
| int SendTelephoneEventInband(unsigned char eventCode, int lengthMs, |
| int attenuationDb, bool playDtmfEvent); |
| int SetDtmfPlayoutStatus(bool enable); |
| bool DtmfPlayoutStatus() const; |
| int SetSendTelephoneEventPayloadType(unsigned char type); |
| int GetSendTelephoneEventPayloadType(unsigned char& type); |
| #ifdef WEBRTC_DTMF_DETECTION |
| int RegisterTelephoneEventDetection( |
| TelephoneEventDetectionMethods detectionMethod, |
| VoETelephoneEventObserver& observer); |
| int DeRegisterTelephoneEventDetection(); |
| int GetTelephoneEventDetectionStatus( |
| bool& enabled, |
| TelephoneEventDetectionMethods& detectionMethod); |
| #endif |
| |
| // VoEAudioProcessingImpl |
| int UpdateRxVadDetection(AudioFrame& audioFrame); |
| int RegisterRxVadObserver(VoERxVadCallback &observer); |
| int DeRegisterRxVadObserver(); |
| int VoiceActivityIndicator(int &activity); |
| #ifdef WEBRTC_VOICE_ENGINE_AGC |
| int SetRxAgcStatus(const bool enable, const AgcModes mode); |
| int GetRxAgcStatus(bool& enabled, AgcModes& mode); |
| int SetRxAgcConfig(const AgcConfig config); |
| int GetRxAgcConfig(AgcConfig& config); |
| #endif |
| #ifdef WEBRTC_VOICE_ENGINE_NR |
| int SetRxNsStatus(const bool enable, const NsModes mode); |
| int GetRxNsStatus(bool& enabled, NsModes& mode); |
| #endif |
| |
| // VoERTP_RTCP |
| int RegisterRTPObserver(VoERTPObserver& observer); |
| int DeRegisterRTPObserver(); |
| int RegisterRTCPObserver(VoERTCPObserver& observer); |
| int DeRegisterRTCPObserver(); |
| int SetLocalSSRC(unsigned int ssrc); |
| int GetLocalSSRC(unsigned int& ssrc); |
| int GetRemoteSSRC(unsigned int& ssrc); |
| int GetRemoteCSRCs(unsigned int arrCSRC[15]); |
| int SetRTPAudioLevelIndicationStatus(bool enable, unsigned char ID); |
| int GetRTPAudioLevelIndicationStatus(bool& enable, unsigned char& ID); |
| int SetRTCPStatus(bool enable); |
| int GetRTCPStatus(bool& enabled); |
| int SetRTCP_CNAME(const char cName[256]); |
| int GetRTCP_CNAME(char cName[256]); |
| int GetRemoteRTCP_CNAME(char cName[256]); |
| int GetRemoteRTCPData(unsigned int& NTPHigh, unsigned int& NTPLow, |
| unsigned int& timestamp, |
| unsigned int& playoutTimestamp, unsigned int* jitter, |
| unsigned short* fractionLost); |
| int SendApplicationDefinedRTCPPacket(const unsigned char subType, |
| unsigned int name, const char* data, |
| unsigned short dataLengthInBytes); |
| int GetRTPStatistics(unsigned int& averageJitterMs, |
| unsigned int& maxJitterMs, |
| unsigned int& discardedPackets); |
| int GetRTPStatistics(CallStatistics& stats); |
| int SetFECStatus(bool enable, int redPayloadtype); |
| int GetFECStatus(bool& enabled, int& redPayloadtype); |
| int SetRTPKeepaliveStatus(bool enable, unsigned char unknownPayloadType, |
| int deltaTransmitTimeSeconds); |
| int GetRTPKeepaliveStatus(bool& enabled, unsigned char& unknownPayloadType, |
| int& deltaTransmitTimeSeconds); |
| int StartRTPDump(const char fileNameUTF8[1024], RTPDirections direction); |
| int StopRTPDump(RTPDirections direction); |
| bool RTPDumpIsActive(RTPDirections direction); |
| int InsertExtraRTPPacket(unsigned char payloadType, bool markerBit, |
| const char* payloadData, |
| unsigned short payloadSize); |
| |
| public: |
| // From AudioPacketizationCallback in the ACM |
| WebRtc_Word32 SendData(FrameType frameType, |
| WebRtc_UWord8 payloadType, |
| WebRtc_UWord32 timeStamp, |
| const WebRtc_UWord8* payloadData, |
| WebRtc_UWord16 payloadSize, |
| const RTPFragmentationHeader* fragmentation); |
| // From ACMVADCallback in the ACM |
| WebRtc_Word32 InFrameType(WebRtc_Word16 frameType); |
| |
| #ifdef WEBRTC_DTMF_DETECTION |
| public: // From AudioCodingFeedback in the ACM |
| int IncomingDtmf(const WebRtc_UWord8 digitDtmf, const bool end); |
| #endif |
| |
| public: |
| WebRtc_Word32 OnRxVadDetected(const int vadDecision); |
| |
| public: |
| // From RtpData in the RTP/RTCP module |
| WebRtc_Word32 OnReceivedPayloadData(const WebRtc_UWord8* payloadData, |
| const WebRtc_UWord16 payloadSize, |
| const WebRtcRTPHeader* rtpHeader); |
| |
| public: |
| // From RtpFeedback in the RTP/RTCP module |
| WebRtc_Word32 OnInitializeDecoder( |
| const WebRtc_Word32 id, |
| const WebRtc_Word8 payloadType, |
| const WebRtc_Word8 payloadName[RTP_PAYLOAD_NAME_SIZE], |
| const int frequency, |
| const WebRtc_UWord8 channels, |
| const WebRtc_UWord32 rate); |
| |
| void OnPacketTimeout(const WebRtc_Word32 id); |
| |
| void OnReceivedPacket(const WebRtc_Word32 id, |
| const RtpRtcpPacketType packetType); |
| |
| void OnPeriodicDeadOrAlive(const WebRtc_Word32 id, |
| const RTPAliveType alive); |
| |
| void OnIncomingSSRCChanged(const WebRtc_Word32 id, |
| const WebRtc_UWord32 SSRC); |
| |
| void OnIncomingCSRCChanged(const WebRtc_Word32 id, |
| const WebRtc_UWord32 CSRC, const bool added); |
| |
| public: |
| // From RtcpFeedback in the RTP/RTCP module |
| void OnApplicationDataReceived(const WebRtc_Word32 id, |
| const WebRtc_UWord8 subType, |
| const WebRtc_UWord32 name, |
| const WebRtc_UWord16 length, |
| const WebRtc_UWord8* data); |
| |
| public: |
| // From RtpAudioFeedback in the RTP/RTCP module |
| void OnReceivedTelephoneEvent(const WebRtc_Word32 id, |
| const WebRtc_UWord8 event, |
| const bool endOfEvent); |
| |
| void OnPlayTelephoneEvent(const WebRtc_Word32 id, |
| const WebRtc_UWord8 event, |
| const WebRtc_UWord16 lengthMs, |
| const WebRtc_UWord8 volume); |
| |
| public: |
| // From UdpTransportData in the Socket Transport module |
| void IncomingRTPPacket(const WebRtc_Word8* incomingRtpPacket, |
| const WebRtc_Word32 rtpPacketLength, |
| const WebRtc_Word8* fromIP, |
| const WebRtc_UWord16 fromPort); |
| |
| void IncomingRTCPPacket(const WebRtc_Word8* incomingRtcpPacket, |
| const WebRtc_Word32 rtcpPacketLength, |
| const WebRtc_Word8* fromIP, |
| const WebRtc_UWord16 fromPort); |
| |
| public: |
| // From Transport (called by the RTP/RTCP module) |
| int SendPacket(int /*channel*/, const void *data, int len); |
| int SendRTCPPacket(int /*channel*/, const void *data, int len); |
| |
| public: |
| // From MixerParticipant |
| WebRtc_Word32 GetAudioFrame(const WebRtc_Word32 id, |
| AudioFrame& audioFrame); |
| WebRtc_Word32 NeededFrequency(const WebRtc_Word32 id); |
| |
| public: |
| // From MonitorObserver |
| void OnPeriodicProcess(); |
| |
| public: |
| // From FileCallback |
| void PlayNotification(const WebRtc_Word32 id, |
| const WebRtc_UWord32 durationMs); |
| void RecordNotification(const WebRtc_Word32 id, |
| const WebRtc_UWord32 durationMs); |
| void PlayFileEnded(const WebRtc_Word32 id); |
| void RecordFileEnded(const WebRtc_Word32 id); |
| |
| public: |
| WebRtc_UWord32 InstanceId() const |
| { |
| return _instanceId; |
| } |
| WebRtc_Word32 ChannelId() const |
| { |
| return _channelId; |
| } |
| bool Playing() const |
| { |
| return _playing; |
| } |
| bool Sending() const |
| { |
| // A lock is needed because |_sending| is accessed by both |
| // TransmitMixer::PrepareDemux() and StartSend()/StopSend(), which |
| // are called by different threads. |
| CriticalSectionScoped cs(_callbackCritSect); |
| return _sending; |
| } |
| bool Receiving() const |
| { |
| return _receiving; |
| } |
| bool ExternalTransport() const |
| { |
| return _externalTransport; |
| } |
| bool OutputIsOnHold() const |
| { |
| return _outputIsOnHold; |
| } |
| bool InputIsOnHold() const |
| { |
| return _inputIsOnHold; |
| } |
| RtpRtcp* RtpRtcpModulePtr() const |
| { |
| return &_rtpRtcpModule; |
| } |
| WebRtc_Word8 OutputEnergyLevel() const |
| { |
| return _outputAudioLevel.Level(); |
| } |
| #ifndef WEBRTC_EXTERNAL_TRANSPORT |
| bool SendSocketsInitialized() const |
| { |
| return _socketTransportModule.SendSocketsInitialized(); |
| } |
| bool ReceiveSocketsInitialized() const |
| { |
| return _socketTransportModule.ReceiveSocketsInitialized(); |
| } |
| #endif |
| WebRtc_UWord32 Demultiplex(const AudioFrame& audioFrame); |
| WebRtc_UWord32 PrepareEncodeAndSend(int mixingFrequency); |
| WebRtc_UWord32 EncodeAndSend(); |
| |
| private: |
| int InsertInbandDtmfTone(); |
| WebRtc_Word32 |
| MixOrReplaceAudioWithFile(const int mixingFrequency); |
| WebRtc_Word32 MixAudioWithFile(AudioFrame& audioFrame, |
| const int mixingFrequency); |
| WebRtc_Word32 GetPlayoutTimeStamp(WebRtc_UWord32& playoutTimestamp); |
| void UpdateDeadOrAliveCounters(bool alive); |
| WebRtc_Word32 SendPacketRaw(const void *data, int len, bool RTCP); |
| WebRtc_Word32 UpdatePacketDelay(const WebRtc_UWord32 timestamp, |
| const WebRtc_UWord16 sequenceNumber); |
| void RegisterReceiveCodecsToRTPModule(); |
| int ApmProcessRx(AudioFrame& audioFrame); |
| |
| private: |
| CriticalSectionWrapper& _fileCritSect; |
| CriticalSectionWrapper& _callbackCritSect; |
| CriticalSectionWrapper& _transmitCritSect; |
| WebRtc_UWord32 _instanceId; |
| WebRtc_Word32 _channelId; |
| |
| private: |
| RtpRtcp& _rtpRtcpModule; |
| AudioCodingModule& _audioCodingModule; |
| #ifndef WEBRTC_EXTERNAL_TRANSPORT |
| WebRtc_UWord8 _numSocketThreads; |
| UdpTransport& _socketTransportModule; |
| #endif |
| #ifdef WEBRTC_SRTP |
| SrtpModule& _srtpModule; |
| #endif |
| RtpDump& _rtpDumpIn; |
| RtpDump& _rtpDumpOut; |
| private: |
| AudioLevel _outputAudioLevel; |
| bool _externalTransport; |
| AudioFrame _audioFrame; |
| WebRtc_UWord8 _audioLevel_dBov; |
| FilePlayer* _inputFilePlayerPtr; |
| FilePlayer* _outputFilePlayerPtr; |
| FileRecorder* _outputFileRecorderPtr; |
| int _inputFilePlayerId; |
| int _outputFilePlayerId; |
| int _outputFileRecorderId; |
| bool _inputFilePlaying; |
| bool _outputFilePlaying; |
| bool _outputFileRecording; |
| DtmfInbandQueue _inbandDtmfQueue; |
| DtmfInband _inbandDtmfGenerator; |
| bool _inputExternalMedia; |
| bool _outputExternalMedia; |
| VoEMediaProcess* _inputExternalMediaCallbackPtr; |
| VoEMediaProcess* _outputExternalMediaCallbackPtr; |
| WebRtc_UWord8* _encryptionRTPBufferPtr; |
| WebRtc_UWord8* _decryptionRTPBufferPtr; |
| WebRtc_UWord8* _encryptionRTCPBufferPtr; |
| WebRtc_UWord8* _decryptionRTCPBufferPtr; |
| WebRtc_UWord32 _timeStamp; |
| WebRtc_UWord8 _sendTelephoneEventPayloadType; |
| WebRtc_UWord32 _playoutTimeStampRTP; |
| WebRtc_UWord32 _playoutTimeStampRTCP; |
| WebRtc_UWord32 _numberOfDiscardedPackets; |
| private: |
| // uses |
| Statistics* _engineStatisticsPtr; |
| OutputMixer* _outputMixerPtr; |
| TransmitMixer* _transmitMixerPtr; |
| ProcessThread* _moduleProcessThreadPtr; |
| AudioDeviceModule* _audioDeviceModulePtr; |
| VoiceEngineObserver* _voiceEngineObserverPtr; // owned by base |
| CriticalSectionWrapper* _callbackCritSectPtr; // owned by base |
| Transport* _transportPtr; // WebRtc socket or external transport |
| Encryption* _encryptionPtr; // WebRtc SRTP or external encryption |
| scoped_ptr<AudioProcessing> _rtpAudioProc; |
| AudioProcessing* _rxAudioProcessingModulePtr; // far end AudioProcessing |
| #ifdef WEBRTC_DTMF_DETECTION |
| VoETelephoneEventObserver* _telephoneEventDetectionPtr; |
| #endif |
| VoERxVadCallback* _rxVadObserverPtr; |
| WebRtc_Word32 _oldVadDecision; |
| WebRtc_Word32 _sendFrameType; // Send data is voice, 1-voice, 0-otherwise |
| VoERTPObserver* _rtpObserverPtr; |
| VoERTCPObserver* _rtcpObserverPtr; |
| private: |
| // VoEBase |
| bool _outputIsOnHold; |
| bool _externalPlayout; |
| bool _inputIsOnHold; |
| bool _playing; |
| bool _sending; |
| bool _receiving; |
| bool _mixFileWithMicrophone; |
| bool _rtpObserver; |
| bool _rtcpObserver; |
| // VoEVolumeControl |
| bool _mute; |
| float _panLeft; |
| float _panRight; |
| float _outputGain; |
| // VoEEncryption |
| bool _encrypting; |
| bool _decrypting; |
| // VoEDtmf |
| bool _playOutbandDtmfEvent; |
| bool _playInbandDtmfEvent; |
| bool _inbandTelephoneEventDetection; |
| bool _outOfBandTelephoneEventDetecion; |
| // VoeRTP_RTCP |
| WebRtc_UWord8 _extraPayloadType; |
| bool _insertExtraRTPPacket; |
| bool _extraMarkerBit; |
| WebRtc_UWord32 _lastLocalTimeStamp; |
| WebRtc_Word8 _lastPayloadType; |
| bool _includeAudioLevelIndication; |
| // VoENetwork |
| bool _rtpPacketTimedOut; |
| bool _rtpPacketTimeOutIsEnabled; |
| WebRtc_UWord32 _rtpTimeOutSeconds; |
| bool _connectionObserver; |
| VoEConnectionObserver* _connectionObserverPtr; |
| WebRtc_UWord32 _countAliveDetections; |
| WebRtc_UWord32 _countDeadDetections; |
| AudioFrame::SpeechType _outputSpeechType; |
| // VoEVideoSync |
| WebRtc_UWord32 _averageDelayMs; |
| WebRtc_UWord16 _previousSequenceNumber; |
| WebRtc_UWord32 _previousTimestamp; |
| WebRtc_UWord16 _recPacketDelayMs; |
| // VoEAudioProcessing |
| bool _RxVadDetection; |
| bool _rxApmIsEnabled; |
| bool _rxAgcIsEnabled; |
| bool _rxNsIsEnabled; |
| }; |
| |
| } // namespace voe |
| |
| } // namespace webrtc |
| |
| #endif // WEBRTC_VOICE_ENGINE_CHANNEL_H |