| Index: talk/app/webrtc/mediacontroller.cc
|
| diff --git a/talk/app/webrtc/mediacontroller.cc b/talk/app/webrtc/mediacontroller.cc
|
| index 28b007e15b787e94fe92aa9ad385a1165350f139..db6b5c75fb28a237168e4dafa4ed01d7d90ab508 100644
|
| --- a/talk/app/webrtc/mediacontroller.cc
|
| +++ b/talk/app/webrtc/mediacontroller.cc
|
| @@ -29,7 +29,7 @@
|
|
|
| #include "webrtc/base/bind.h"
|
| #include "webrtc/base/checks.h"
|
| -#include "webrtc/call.h"
|
| +#include "webrtc/p2p/base/transportchannel.h"
|
|
|
| namespace {
|
|
|
| @@ -37,11 +37,20 @@ const int kMinBandwidthBps = 30000;
|
| const int kStartBandwidthBps = 300000;
|
| const int kMaxBandwidthBps = 2000000;
|
|
|
| -class MediaController : public webrtc::MediaControllerInterface {
|
| +class MediaController : public webrtc::MediaControllerInterface,
|
| + public sigslot::has_slots<> {
|
| public:
|
| - MediaController(rtc::Thread* worker_thread,
|
| + MediaController(rtc::Thread* worker_thread, webrtc::VoiceEngine* voice_engine)
|
| + : worker_thread_(worker_thread),
|
| + call_factory_(new webrtc::CallFactory()) {
|
| + RTC_DCHECK(nullptr != worker_thread);
|
| + worker_thread_->Invoke<void>(
|
| + rtc::Bind(&MediaController::Construct_w, this, voice_engine));
|
| + }
|
| + MediaController(webrtc::CallFactory* call_factory,
|
| + rtc::Thread* worker_thread,
|
| webrtc::VoiceEngine* voice_engine)
|
| - : worker_thread_(worker_thread) {
|
| + : worker_thread_(worker_thread), call_factory_(call_factory) {
|
| RTC_DCHECK(nullptr != worker_thread);
|
| worker_thread_->Invoke<void>(
|
| rtc::Bind(&MediaController::Construct_w, this, voice_engine));
|
| @@ -56,6 +65,16 @@ class MediaController : public webrtc::MediaControllerInterface {
|
| return call_.get();
|
| }
|
|
|
| + void ConnectToSignalSentPacket_w(
|
| + cricket::TransportChannel* transport_channel) override {
|
| + RTC_DCHECK(worker_thread_->IsCurrent());
|
| + if (!transport_channels_.insert(transport_channel).second) {
|
| + return;
|
| + }
|
| + transport_channel->SignalSentPacket.connect(this,
|
| + &MediaController::OnSentPacket);
|
| + }
|
| +
|
| private:
|
| void Construct_w(webrtc::VoiceEngine* voice_engine) {
|
| RTC_DCHECK(worker_thread_->IsCurrent());
|
| @@ -64,15 +83,21 @@ class MediaController : public webrtc::MediaControllerInterface {
|
| config.bitrate_config.min_bitrate_bps = kMinBandwidthBps;
|
| config.bitrate_config.start_bitrate_bps = kStartBandwidthBps;
|
| config.bitrate_config.max_bitrate_bps = kMaxBandwidthBps;
|
| - call_.reset(webrtc::Call::Create(config));
|
| + call_.reset(call_factory_->CreateCall(config));
|
| }
|
| void Destruct_w() {
|
| RTC_DCHECK(worker_thread_->IsCurrent());
|
| - call_.reset(nullptr);
|
| + call_.reset();
|
| + }
|
| + void OnSentPacket(cricket::TransportChannel* channel,
|
| + const rtc::SentPacket& sent_packet) {
|
| + call_->OnSentPacket(sent_packet);
|
| }
|
|
|
| - rtc::Thread* worker_thread_;
|
| + rtc::Thread* const worker_thread_;
|
| + rtc::scoped_ptr<webrtc::CallFactory> call_factory_;
|
| rtc::scoped_ptr<webrtc::Call> call_;
|
| + std::set<cricket::TransportChannel*> transport_channels_;
|
|
|
| RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(MediaController);
|
| };
|
| @@ -84,4 +109,10 @@ MediaControllerInterface* MediaControllerInterface::Create(
|
| rtc::Thread* worker_thread, webrtc::VoiceEngine* voice_engine) {
|
| return new MediaController(worker_thread, voice_engine);
|
| }
|
| +MediaControllerInterface* MediaControllerInterface::Create(
|
| + webrtc::CallFactory* call_factory,
|
| + rtc::Thread* worker_thread,
|
| + webrtc::VoiceEngine* voice_engine) {
|
| + return new MediaController(call_factory, worker_thread, voice_engine);
|
| +}
|
| } // namespace webrtc
|
|
|