summaryrefslogtreecommitdiff
path: root/voice_engine/channel.cc
diff options
context:
space:
mode:
authorsolenberg@webrtc.org <solenberg@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2014-03-24 10:38:25 +0000
committersolenberg@webrtc.org <solenberg@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2014-03-24 10:38:25 +0000
commitfec6b6e5999edec8c90efae54357f1aae6a4c7dd (patch)
treea7d3c528250cc6d88a6cf56f6e0065b631ce57e3 /voice_engine/channel.cc
parent24be06c54a94d1bf555dccdfd4e2a33ad69f70c4 (diff)
downloadwebrtc-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.cc50
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)
{