diff options
author | solenberg@webrtc.org <solenberg@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-03-24 10:38:25 +0000 |
---|---|---|
committer | solenberg@webrtc.org <solenberg@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-03-24 10:38:25 +0000 |
commit | fec6b6e5999edec8c90efae54357f1aae6a4c7dd (patch) | |
tree | a7d3c528250cc6d88a6cf56f6e0065b631ce57e3 /voice_engine/channel.cc | |
parent | 24be06c54a94d1bf555dccdfd4e2a33ad69f70c4 (diff) | |
download | webrtc-fec6b6e5999edec8c90efae54357f1aae6a4c7dd.tar.gz |
VoE changes to allow forwarding of packets from VoE to ViE BWE.
BUG=
R=mflodman@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/10419004
git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@5757 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'voice_engine/channel.cc')
-rw-r--r-- | voice_engine/channel.cc | 50 |
1 files changed, 44 insertions, 6 deletions
diff --git a/voice_engine/channel.cc b/voice_engine/channel.cc index ea80570a..39effdf5 100644 --- a/voice_engine/channel.cc +++ b/voice_engine/channel.cc @@ -24,6 +24,7 @@ #include "webrtc/system_wrappers/interface/critical_section_wrapper.h" #include "webrtc/system_wrappers/interface/logging.h" #include "webrtc/system_wrappers/interface/trace.h" +#include "webrtc/video_engine/include/vie_network.h" #include "webrtc/voice_engine/include/voe_base.h" #include "webrtc/voice_engine/include/voe_external_media.h" #include "webrtc/voice_engine/include/voe_rtp_rtcp.h" @@ -911,6 +912,8 @@ Channel::Channel(int32_t channelId, _countAliveDetections(0), _countDeadDetections(0), _outputSpeechType(AudioFrame::kNormalSpeech), + vie_network_(NULL), + video_channel_(-1), _average_jitter_buffer_delay_us(0), least_required_delay_ms_(0), _previousTimestamp(0), @@ -1011,6 +1014,10 @@ Channel::~Channel() // End of modules shutdown // Delete other objects + if (vie_network_) { + vie_network_->Release(); + vie_network_ = NULL; + } RtpDump::DestroyRtpDump(&_rtpDumpIn); RtpDump::DestroyRtpDump(&_rtpDumpOut); delete &_callbackCritSect; @@ -2025,7 +2032,8 @@ Channel::DeRegisterExternalTransport() return 0; } -int32_t Channel::ReceivedRTPPacket(const int8_t* data, int32_t length) { +int32_t Channel::ReceivedRTPPacket(const int8_t* data, int32_t length, + const PacketTime& packet_time) { WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId,_channelId), "Channel::ReceivedRTPPacket()"); @@ -2054,6 +2062,23 @@ int32_t Channel::ReceivedRTPPacket(const int8_t* data, int32_t length) { rtp_receive_statistics_->IncomingPacket(header, length, IsPacketRetransmitted(header, in_order)); rtp_payload_registry_->SetIncomingPayloadType(header); + + // Forward any packets to ViE bandwidth estimator, if enabled. + { + CriticalSectionScoped cs(&_callbackCritSect); + if (vie_network_) { + int64_t arrival_time_ms; + if (packet_time.timestamp != -1) { + arrival_time_ms = (packet_time.timestamp + 500) / 1000; + } else { + arrival_time_ms = TickTime::MillisecondTimestamp(); + } + int payload_length = length - header.headerLength; + vie_network_->ReceivedBWEPacket(video_channel_, arrival_time_ms, + payload_length, header); + } + } + return ReceivePacket(received_packet, length, header, in_order) ? 0 : -1; } @@ -3511,11 +3536,9 @@ int Channel::SetSendAbsoluteSenderTimeStatus(bool enable, unsigned char id) { int Channel::SetReceiveAbsoluteSenderTimeStatus(bool enable, unsigned char id) { rtp_header_parser_->DeregisterRtpHeaderExtension( kRtpExtensionAbsoluteSendTime); - if (enable) { - if (!rtp_header_parser_->RegisterRtpHeaderExtension( - kRtpExtensionAbsoluteSendTime, id)) { - return -1; - } + if (enable && !rtp_header_parser_->RegisterRtpHeaderExtension( + kRtpExtensionAbsoluteSendTime, id)) { + return -1; } return 0; } @@ -4105,6 +4128,21 @@ Channel::RTPDumpIsActive(RTPDirections direction) return rtpDumpPtr->IsActive(); } +void Channel::SetVideoEngineBWETarget(ViENetwork* vie_network, + int video_channel) { + CriticalSectionScoped cs(&_callbackCritSect); + if (vie_network_) { + vie_network_->Release(); + vie_network_ = NULL; + } + video_channel_ = -1; + + if (vie_network != NULL && video_channel != -1) { + vie_network_ = vie_network; + video_channel_ = video_channel; + } +} + uint32_t Channel::Demultiplex(const AudioFrame& audioFrame) { |