Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 44 namespace { | 44 namespace { |
| 45 void CallEncoder(const std::unique_ptr<voe::ChannelProxy>& channel_proxy, | 45 void CallEncoder(const std::unique_ptr<voe::ChannelProxy>& channel_proxy, |
| 46 rtc::FunctionView<void(AudioEncoder*)> lambda) { | 46 rtc::FunctionView<void(AudioEncoder*)> lambda) { |
| 47 channel_proxy->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder_ptr) { | 47 channel_proxy->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder_ptr) { |
| 48 RTC_DCHECK(encoder_ptr); | 48 RTC_DCHECK(encoder_ptr); |
| 49 lambda(encoder_ptr->get()); | 49 lambda(encoder_ptr->get()); |
| 50 }); | 50 }); |
| 51 } | 51 } |
| 52 } // namespace | 52 } // namespace |
| 53 | 53 |
| 54 // TODO(saza): Move this declaration further down when we can use | |
| 55 // std::make_unique. | |
| 56 class AudioSendStream::TimedTransport : public Transport { | |
| 57 public: | |
| 58 TimedTransport(Transport* transport, rtc::TimeInterval* time_interval) | |
| 59 : transport_(transport), lifetime_(time_interval) {} | |
| 60 bool SendRtp(const uint8_t* packet, | |
| 61 size_t length, | |
| 62 const PacketOptions& options) { | |
| 63 if (lifetime_) { | |
| 64 lifetime_->Extend(); | |
| 65 } | |
| 66 return transport_->SendRtp(packet, length, options); | |
| 67 } | |
| 68 bool SendRtcp(const uint8_t* packet, size_t length) { | |
| 69 return transport_->SendRtcp(packet, length); | |
| 70 } | |
| 71 ~TimedTransport() {} | |
| 72 | |
| 73 private: | |
| 74 Transport* transport_; | |
| 75 rtc::TimeInterval* lifetime_; | |
| 76 }; | |
| 77 | |
| 54 AudioSendStream::AudioSendStream( | 78 AudioSendStream::AudioSendStream( |
| 55 const webrtc::AudioSendStream::Config& config, | 79 const webrtc::AudioSendStream::Config& config, |
| 56 const rtc::scoped_refptr<webrtc::AudioState>& audio_state, | 80 const rtc::scoped_refptr<webrtc::AudioState>& audio_state, |
| 57 rtc::TaskQueue* worker_queue, | 81 rtc::TaskQueue* worker_queue, |
| 58 RtpTransportControllerSendInterface* transport, | 82 RtpTransportControllerSendInterface* transport, |
| 59 BitrateAllocator* bitrate_allocator, | 83 BitrateAllocator* bitrate_allocator, |
| 60 RtcEventLog* event_log, | 84 RtcEventLog* event_log, |
| 61 RtcpRttStats* rtcp_rtt_stats, | 85 RtcpRttStats* rtcp_rtt_stats, |
| 62 const rtc::Optional<RtpState>& suspended_rtp_state) | 86 const rtc::Optional<RtpState>& suspended_rtp_state) |
| 63 : worker_queue_(worker_queue), | 87 : worker_queue_(worker_queue), |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 131 channel_proxy->SetNACKStatus(new_config.rtp.nack.rtp_history_ms != 0, | 155 channel_proxy->SetNACKStatus(new_config.rtp.nack.rtp_history_ms != 0, |
| 132 new_config.rtp.nack.rtp_history_ms / 20); | 156 new_config.rtp.nack.rtp_history_ms / 20); |
| 133 } | 157 } |
| 134 | 158 |
| 135 if (first_time || | 159 if (first_time || |
| 136 new_config.send_transport != old_config.send_transport) { | 160 new_config.send_transport != old_config.send_transport) { |
| 137 if (old_config.send_transport) { | 161 if (old_config.send_transport) { |
| 138 channel_proxy->DeRegisterExternalTransport(); | 162 channel_proxy->DeRegisterExternalTransport(); |
| 139 } | 163 } |
| 140 | 164 |
| 141 channel_proxy->RegisterExternalTransport(new_config.send_transport); | 165 stream->timed_send_transport_adapter_ = |
|
ossu
2017/07/14 11:13:15
I think you can do .reset(new TimedTransport(...))
saza WebRTC
2017/07/17 14:27:29
Done.
| |
| 166 std::unique_ptr<TimedTransport>(new TimedTransport( | |
| 167 new_config.send_transport, &stream->active_lifetime_)); | |
| 168 channel_proxy->RegisterExternalTransport( | |
| 169 stream->timed_send_transport_adapter_.get()); | |
| 142 } | 170 } |
| 143 | 171 |
| 144 // RFC 5285: Each distinct extension MUST have a unique ID. The value 0 is | 172 // RFC 5285: Each distinct extension MUST have a unique ID. The value 0 is |
| 145 // reserved for padding and MUST NOT be used as a local identifier. | 173 // reserved for padding and MUST NOT be used as a local identifier. |
| 146 // So it should be safe to use 0 here to indicate "not configured". | 174 // So it should be safe to use 0 here to indicate "not configured". |
| 147 struct ExtensionIds { | 175 struct ExtensionIds { |
| 148 int audio_level = 0; | 176 int audio_level = 0; |
| 149 int transport_sequence_number = 0; | 177 int transport_sequence_number = 0; |
| 150 }; | 178 }; |
| 151 | 179 |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 381 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 409 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
| 382 transport_->send_side_cc()->SetTransportOverhead( | 410 transport_->send_side_cc()->SetTransportOverhead( |
| 383 transport_overhead_per_packet); | 411 transport_overhead_per_packet); |
| 384 channel_proxy_->SetTransportOverhead(transport_overhead_per_packet); | 412 channel_proxy_->SetTransportOverhead(transport_overhead_per_packet); |
| 385 } | 413 } |
| 386 | 414 |
| 387 RtpState AudioSendStream::GetRtpState() const { | 415 RtpState AudioSendStream::GetRtpState() const { |
| 388 return rtp_rtcp_module_->GetRtpState(); | 416 return rtp_rtcp_module_->GetRtpState(); |
| 389 } | 417 } |
| 390 | 418 |
| 419 const rtc::TimeInterval* AudioSendStream::GetActiveLifetime() const { | |
| 420 return &active_lifetime_; | |
| 421 } | |
| 422 | |
| 391 VoiceEngine* AudioSendStream::voice_engine() const { | 423 VoiceEngine* AudioSendStream::voice_engine() const { |
| 392 internal::AudioState* audio_state = | 424 internal::AudioState* audio_state = |
| 393 static_cast<internal::AudioState*>(audio_state_.get()); | 425 static_cast<internal::AudioState*>(audio_state_.get()); |
| 394 VoiceEngine* voice_engine = audio_state->voice_engine(); | 426 VoiceEngine* voice_engine = audio_state->voice_engine(); |
| 395 RTC_DCHECK(voice_engine); | 427 RTC_DCHECK(voice_engine); |
| 396 return voice_engine; | 428 return voice_engine; |
| 397 } | 429 } |
| 398 | 430 |
| 399 // Apply current codec settings to a single voe::Channel used for sending. | 431 // Apply current codec settings to a single voe::Channel used for sending. |
| 400 bool AudioSendStream::SetupSendCodec(AudioSendStream* stream, | 432 bool AudioSendStream::SetupSendCodec(AudioSendStream* stream, |
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 607 if (rtp_rtcp_module_->RegisterSendPayload(codec) != 0) { | 639 if (rtp_rtcp_module_->RegisterSendPayload(codec) != 0) { |
| 608 LOG(LS_ERROR) << "RegisterCngPayloadType() failed to register CN to " | 640 LOG(LS_ERROR) << "RegisterCngPayloadType() failed to register CN to " |
| 609 "RTP/RTCP module"; | 641 "RTP/RTCP module"; |
| 610 } | 642 } |
| 611 } | 643 } |
| 612 } | 644 } |
| 613 | 645 |
| 614 | 646 |
| 615 } // namespace internal | 647 } // namespace internal |
| 616 } // namespace webrtc | 648 } // namespace webrtc |
| OLD | NEW |