Index: webrtc/audio/audio_send_stream.cc |
diff --git a/webrtc/audio/audio_send_stream.cc b/webrtc/audio/audio_send_stream.cc |
index 0659cbfd2d9e9423b2db8b3f2d50028e7ed8ccbd..103d6306fd857ee4d076bbf471c1bd41a8c69db5 100644 |
--- a/webrtc/audio/audio_send_stream.cc |
+++ b/webrtc/audio/audio_send_stream.cc |
@@ -51,6 +51,30 @@ void CallEncoder(const std::unique_ptr<voe::ChannelProxy>& channel_proxy, |
} |
} // namespace |
+// TODO(saza): Move this declaration further down when we can use |
+// std::make_unique. |
+class AudioSendStream::TimedTransport : public Transport { |
+ public: |
+ TimedTransport(Transport* transport, TimeInterval* time_interval) |
+ : transport_(transport), lifetime_(time_interval) {} |
+ bool SendRtp(const uint8_t* packet, |
+ size_t length, |
+ const PacketOptions& options) { |
+ if (lifetime_) { |
+ lifetime_->Extend(); |
+ } |
+ return transport_->SendRtp(packet, length, options); |
+ } |
+ bool SendRtcp(const uint8_t* packet, size_t length) { |
+ return transport_->SendRtcp(packet, length); |
+ } |
+ ~TimedTransport() {} |
+ |
+ private: |
+ Transport* transport_; |
+ TimeInterval* lifetime_; |
+}; |
+ |
AudioSendStream::AudioSendStream( |
const webrtc::AudioSendStream::Config& config, |
const rtc::scoped_refptr<webrtc::AudioState>& audio_state, |
@@ -137,8 +161,14 @@ void AudioSendStream::ConfigureStream( |
if (old_config.send_transport) { |
channel_proxy->DeRegisterExternalTransport(); |
} |
- |
- channel_proxy->RegisterExternalTransport(new_config.send_transport); |
+ if (new_config.send_transport) { |
+ stream->timed_send_transport_adapter_.reset(new TimedTransport( |
+ new_config.send_transport, &stream->active_lifetime_)); |
+ } else { |
+ stream->timed_send_transport_adapter_.reset(nullptr); |
+ } |
+ channel_proxy->RegisterExternalTransport( |
+ stream->timed_send_transport_adapter_.get()); |
} |
// RFC 5285: Each distinct extension MUST have a unique ID. The value 0 is |
@@ -391,6 +421,10 @@ RtpState AudioSendStream::GetRtpState() const { |
return rtp_rtcp_module_->GetRtpState(); |
} |
+const TimeInterval& AudioSendStream::GetActiveLifetime() const { |
+ return active_lifetime_; |
+} |
+ |
VoiceEngine* AudioSendStream::voice_engine() const { |
internal::AudioState* audio_state = |
static_cast<internal::AudioState*>(audio_state_.get()); |