Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(191)

Side by Side Diff: talk/session/media/channelmanager.cc

Issue 1346153002: Remove use of DeviceManager from ChannelManager. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « talk/session/media/channelmanager.h ('k') | talk/session/media/channelmanager_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2004 Google Inc. 3 * Copyright 2004 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 17 matching lines...) Expand all
28 #include "talk/session/media/channelmanager.h" 28 #include "talk/session/media/channelmanager.h"
29 29
30 #ifdef HAVE_CONFIG_H 30 #ifdef HAVE_CONFIG_H
31 #include <config.h> 31 #include <config.h>
32 #endif 32 #endif
33 33
34 #include <algorithm> 34 #include <algorithm>
35 35
36 #include "talk/app/webrtc/mediacontroller.h" 36 #include "talk/app/webrtc/mediacontroller.h"
37 #include "talk/media/base/capturemanager.h" 37 #include "talk/media/base/capturemanager.h"
38 #include "talk/media/base/device.h"
38 #include "talk/media/base/hybriddataengine.h" 39 #include "talk/media/base/hybriddataengine.h"
39 #include "talk/media/base/rtpdataengine.h" 40 #include "talk/media/base/rtpdataengine.h"
40 #include "talk/media/base/videocapturer.h" 41 #include "talk/media/base/videocapturer.h"
41 #include "talk/media/devices/devicemanager.h"
42 #ifdef HAVE_SCTP 42 #ifdef HAVE_SCTP
43 #include "talk/media/sctp/sctpdataengine.h" 43 #include "talk/media/sctp/sctpdataengine.h"
44 #endif 44 #endif
45 #include "talk/session/media/srtpfilter.h" 45 #include "talk/session/media/srtpfilter.h"
46 #include "webrtc/base/bind.h" 46 #include "webrtc/base/bind.h"
47 #include "webrtc/base/common.h" 47 #include "webrtc/base/common.h"
48 #include "webrtc/base/logging.h" 48 #include "webrtc/base/logging.h"
49 #include "webrtc/base/sigslotrepeater.h" 49 #include "webrtc/base/sigslotrepeater.h"
50 #include "webrtc/base/stringencode.h" 50 #include "webrtc/base/stringencode.h"
51 #include "webrtc/base/stringutils.h" 51 #include "webrtc/base/stringutils.h"
(...skipping 19 matching lines...) Expand all
71 static DataEngineInterface* ConstructDataEngine() { 71 static DataEngineInterface* ConstructDataEngine() {
72 #ifdef HAVE_SCTP 72 #ifdef HAVE_SCTP
73 return new HybridDataEngine(new RtpDataEngine(), new SctpDataEngine()); 73 return new HybridDataEngine(new RtpDataEngine(), new SctpDataEngine());
74 #else 74 #else
75 return new RtpDataEngine(); 75 return new RtpDataEngine();
76 #endif 76 #endif
77 } 77 }
78 78
79 ChannelManager::ChannelManager(MediaEngineInterface* me, 79 ChannelManager::ChannelManager(MediaEngineInterface* me,
80 DataEngineInterface* dme, 80 DataEngineInterface* dme,
81 DeviceManagerInterface* dm,
82 CaptureManager* cm, 81 CaptureManager* cm,
83 rtc::Thread* worker_thread) { 82 rtc::Thread* worker_thread) {
84 Construct(me, dme, dm, cm, worker_thread); 83 Construct(me, dme, cm, worker_thread);
85 } 84 }
86 85
87 ChannelManager::ChannelManager(MediaEngineInterface* me, 86 ChannelManager::ChannelManager(MediaEngineInterface* me,
88 DeviceManagerInterface* dm,
89 rtc::Thread* worker_thread) { 87 rtc::Thread* worker_thread) {
90 Construct(me, 88 Construct(me,
91 ConstructDataEngine(), 89 ConstructDataEngine(),
92 dm,
93 new CaptureManager(), 90 new CaptureManager(),
94 worker_thread); 91 worker_thread);
95 } 92 }
96 93
97 void ChannelManager::Construct(MediaEngineInterface* me, 94 void ChannelManager::Construct(MediaEngineInterface* me,
98 DataEngineInterface* dme, 95 DataEngineInterface* dme,
99 DeviceManagerInterface* dm,
100 CaptureManager* cm, 96 CaptureManager* cm,
101 rtc::Thread* worker_thread) { 97 rtc::Thread* worker_thread) {
102 media_engine_.reset(me); 98 media_engine_.reset(me);
103 data_media_engine_.reset(dme); 99 data_media_engine_.reset(dme);
104 device_manager_.reset(dm);
105 capture_manager_.reset(cm); 100 capture_manager_.reset(cm);
106 initialized_ = false; 101 initialized_ = false;
107 main_thread_ = rtc::Thread::Current(); 102 main_thread_ = rtc::Thread::Current();
108 worker_thread_ = worker_thread; 103 worker_thread_ = worker_thread;
109 // Get the default audio options from the media engine. 104 // Get the default audio options from the media engine.
110 audio_options_ = media_engine_->GetAudioOptions(); 105 audio_options_ = media_engine_->GetAudioOptions();
111 audio_in_device_ = DeviceManagerInterface::kDefaultDeviceName;
112 audio_out_device_ = DeviceManagerInterface::kDefaultDeviceName;
113 audio_delay_offset_ = kDefaultAudioDelayOffset; 106 audio_delay_offset_ = kDefaultAudioDelayOffset;
114 audio_output_volume_ = kNotSetOutputVolume; 107 audio_output_volume_ = kNotSetOutputVolume;
115 local_renderer_ = NULL; 108 local_renderer_ = NULL;
116 capturing_ = false; 109 capturing_ = false;
117 enable_rtx_ = false; 110 enable_rtx_ = false;
118 111
119 // Init the device manager immediately, and set up our default video device.
120 SignalDevicesChange.repeat(device_manager_->SignalDevicesChange);
121 device_manager_->Init();
122
123 capture_manager_->SignalCapturerStateChange.connect( 112 capture_manager_->SignalCapturerStateChange.connect(
124 this, &ChannelManager::OnVideoCaptureStateChange); 113 this, &ChannelManager::OnVideoCaptureStateChange);
125 } 114 }
126 115
127 ChannelManager::~ChannelManager() { 116 ChannelManager::~ChannelManager() {
128 if (initialized_) { 117 if (initialized_) {
129 Terminate(); 118 Terminate();
130 // If srtp is initialized (done by the Channel) then we must call 119 // If srtp is initialized (done by the Channel) then we must call
131 // srtp_shutdown to free all crypto kernel lists. But we need to make sure 120 // srtp_shutdown to free all crypto kernel lists. But we need to make sure
132 // shutdown always called at the end, after channels are destroyed. 121 // shutdown always called at the end, after channels are destroyed.
(...skipping 16 matching lines...) Expand all
149 if (!initialized_) { 138 if (!initialized_) {
150 enable_rtx_ = enable; 139 enable_rtx_ = enable;
151 return true; 140 return true;
152 } else { 141 } else {
153 LOG(LS_WARNING) << "Cannot toggle rtx after initialization!"; 142 LOG(LS_WARNING) << "Cannot toggle rtx after initialization!";
154 return false; 143 return false;
155 } 144 }
156 } 145 }
157 146
158 int ChannelManager::GetCapabilities() { 147 int ChannelManager::GetCapabilities() {
159 return media_engine_->GetCapabilities() & device_manager_->GetCapabilities(); 148 return media_engine_->GetCapabilities();
160 } 149 }
161 150
162 void ChannelManager::GetSupportedAudioCodecs( 151 void ChannelManager::GetSupportedAudioCodecs(
163 std::vector<AudioCodec>* codecs) const { 152 std::vector<AudioCodec>* codecs) const {
164 codecs->clear(); 153 codecs->clear();
165 154
166 for (std::vector<AudioCodec>::const_iterator it = 155 for (std::vector<AudioCodec>::const_iterator it =
167 media_engine_->audio_codecs().begin(); 156 media_engine_->audio_codecs().begin();
168 it != media_engine_->audio_codecs().end(); ++it) { 157 it != media_engine_->audio_codecs().end(); ++it) {
169 codecs->push_back(*it); 158 codecs->push_back(*it);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 &rtc::Thread::SetAllowBlockingCalls, worker_thread_, false)); 203 &rtc::Thread::SetAllowBlockingCalls, worker_thread_, false));
215 } 204 }
216 205
217 initialized_ = worker_thread_->Invoke<bool>(Bind( 206 initialized_ = worker_thread_->Invoke<bool>(Bind(
218 &ChannelManager::InitMediaEngine_w, this)); 207 &ChannelManager::InitMediaEngine_w, this));
219 ASSERT(initialized_); 208 ASSERT(initialized_);
220 if (!initialized_) { 209 if (!initialized_) {
221 return false; 210 return false;
222 } 211 }
223 212
224 // Now that we're initialized, apply any stored preferences. A preferred 213 if (!SetAudioOptions(audio_options_, audio_delay_offset_)) {
225 // device might have been unplugged. In this case, we fallback to the
226 // default device but keep the user preferences. The preferences are
227 // changed only when the Javascript FE changes them.
228 const std::string preferred_audio_in_device = audio_in_device_;
229 const std::string preferred_audio_out_device = audio_out_device_;
230 const std::string preferred_camera_device = camera_device_;
231 Device device;
232 if (!device_manager_->GetAudioInputDevice(audio_in_device_, &device)) {
233 LOG(LS_WARNING) << "The preferred microphone '" << audio_in_device_
234 << "' is unavailable. Fall back to the default.";
235 audio_in_device_ = DeviceManagerInterface::kDefaultDeviceName;
236 }
237 if (!device_manager_->GetAudioOutputDevice(audio_out_device_, &device)) {
238 LOG(LS_WARNING) << "The preferred speaker '" << audio_out_device_
239 << "' is unavailable. Fall back to the default.";
240 audio_out_device_ = DeviceManagerInterface::kDefaultDeviceName;
241 }
242 if (!device_manager_->GetVideoCaptureDevice(camera_device_, &device)) {
243 if (!camera_device_.empty()) {
244 LOG(LS_WARNING) << "The preferred camera '" << camera_device_
245 << "' is unavailable. Fall back to the default.";
246 }
247 camera_device_ = DeviceManagerInterface::kDefaultDeviceName;
248 }
249
250 if (!SetAudioOptions(audio_in_device_, audio_out_device_,
251 audio_options_, audio_delay_offset_)) {
252 LOG(LS_WARNING) << "Failed to SetAudioOptions with" 214 LOG(LS_WARNING) << "Failed to SetAudioOptions with"
253 << " microphone: " << audio_in_device_
254 << " speaker: " << audio_out_device_
255 << " options: " << audio_options_.ToString() 215 << " options: " << audio_options_.ToString()
256 << " delay: " << audio_delay_offset_; 216 << " delay: " << audio_delay_offset_;
257 } 217 }
258 218
259 // If audio_output_volume_ has been set via SetOutputVolume(), set the 219 // If audio_output_volume_ has been set via SetOutputVolume(), set the
260 // audio output volume of the engine. 220 // audio output volume of the engine.
261 if (kNotSetOutputVolume != audio_output_volume_ && 221 if (kNotSetOutputVolume != audio_output_volume_ &&
262 !SetOutputVolume(audio_output_volume_)) { 222 !SetOutputVolume(audio_output_volume_)) {
263 LOG(LS_WARNING) << "Failed to SetOutputVolume to " 223 LOG(LS_WARNING) << "Failed to SetOutputVolume to "
264 << audio_output_volume_; 224 << audio_output_volume_;
265 } 225 }
266 if (!SetCaptureDevice(camera_device_) && !camera_device_.empty()) {
267 LOG(LS_WARNING) << "Failed to SetCaptureDevice with camera: "
268 << camera_device_;
269 }
270
271 // Restore the user preferences.
272 audio_in_device_ = preferred_audio_in_device;
273 audio_out_device_ = preferred_audio_out_device;
274 camera_device_ = preferred_camera_device;
275 226
276 // Now apply the default video codec that has been set earlier. 227 // Now apply the default video codec that has been set earlier.
277 if (default_video_encoder_config_.max_codec.id != 0) { 228 if (default_video_encoder_config_.max_codec.id != 0) {
278 SetDefaultVideoEncoderConfig(default_video_encoder_config_); 229 SetDefaultVideoEncoderConfig(default_video_encoder_config_);
279 } 230 }
280 231
281 return initialized_; 232 return initialized_;
282 } 233 }
283 234
284 bool ChannelManager::InitMediaEngine_w() { 235 bool ChannelManager::InitMediaEngine_w() {
(...skipping 18 matching lines...) Expand all
303 254
304 void ChannelManager::Terminate_w() { 255 void ChannelManager::Terminate_w() {
305 ASSERT(worker_thread_ == rtc::Thread::Current()); 256 ASSERT(worker_thread_ == rtc::Thread::Current());
306 // Need to destroy the voice/video channels 257 // Need to destroy the voice/video channels
307 while (!video_channels_.empty()) { 258 while (!video_channels_.empty()) {
308 DestroyVideoChannel_w(video_channels_.back()); 259 DestroyVideoChannel_w(video_channels_.back());
309 } 260 }
310 while (!voice_channels_.empty()) { 261 while (!voice_channels_.empty()) {
311 DestroyVoiceChannel_w(voice_channels_.back()); 262 DestroyVoiceChannel_w(voice_channels_.back());
312 } 263 }
313 if (!SetCaptureDevice_w(NULL)) {
314 LOG(LS_WARNING) << "failed to delete video capturer";
315 }
316 media_engine_->Terminate(); 264 media_engine_->Terminate();
317 } 265 }
318 266
319 VoiceChannel* ChannelManager::CreateVoiceChannel( 267 VoiceChannel* ChannelManager::CreateVoiceChannel(
320 webrtc::MediaControllerInterface* media_controller, 268 webrtc::MediaControllerInterface* media_controller,
321 TransportController* transport_controller, 269 TransportController* transport_controller,
322 const std::string& content_name, 270 const std::string& content_name,
323 bool rtcp, 271 bool rtcp,
324 const AudioOptions& options) { 272 const AudioOptions& options) {
325 return worker_thread_->Invoke<VoiceChannel*>( 273 return worker_thread_->Invoke<VoiceChannel*>(
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 DataChannels::iterator it = std::find(data_channels_.begin(), 426 DataChannels::iterator it = std::find(data_channels_.begin(),
479 data_channels_.end(), data_channel); 427 data_channels_.end(), data_channel);
480 ASSERT(it != data_channels_.end()); 428 ASSERT(it != data_channels_.end());
481 if (it == data_channels_.end()) 429 if (it == data_channels_.end())
482 return; 430 return;
483 431
484 data_channels_.erase(it); 432 data_channels_.erase(it);
485 delete data_channel; 433 delete data_channel;
486 } 434 }
487 435
488 bool ChannelManager::GetAudioOptions(std::string* in_name, 436 bool ChannelManager::SetAudioOptions(const AudioOptions& options,
489 std::string* out_name,
490 AudioOptions* options) {
491 if (in_name)
492 *in_name = audio_in_device_;
493 if (out_name)
494 *out_name = audio_out_device_;
495 if (options)
496 *options = audio_options_;
497 return true;
498 }
499
500 bool ChannelManager::SetAudioOptions(const std::string& in_name,
501 const std::string& out_name,
502 const AudioOptions& options) {
503 return SetAudioOptions(in_name, out_name, options, audio_delay_offset_);
504 }
505
506 bool ChannelManager::SetAudioOptions(const std::string& in_name,
507 const std::string& out_name,
508 const AudioOptions& options,
509 int delay_offset) { 437 int delay_offset) {
510 // Get device ids from DeviceManager. 438 // "Get device ids from DeviceManager" - these are the defaults returned.
511 Device in_dev, out_dev; 439 Device in_dev("", -1);
512 if (!device_manager_->GetAudioInputDevice(in_name, &in_dev)) { 440 Device out_dev("", -1);
513 LOG(LS_WARNING) << "Failed to GetAudioInputDevice: " << in_name;
514 return false;
515 }
516 if (!device_manager_->GetAudioOutputDevice(out_name, &out_dev)) {
517 LOG(LS_WARNING) << "Failed to GetAudioOutputDevice: " << out_name;
518 return false;
519 }
520 441
521 // If we're initialized, pass the settings to the media engine. 442 // If we're initialized, pass the settings to the media engine.
522 bool ret = true; 443 bool ret = true;
523 if (initialized_) { 444 if (initialized_) {
524 ret = worker_thread_->Invoke<bool>( 445 ret = worker_thread_->Invoke<bool>(
525 Bind(&ChannelManager::SetAudioOptions_w, this, 446 Bind(&ChannelManager::SetAudioOptions_w, this,
526 options, delay_offset, &in_dev, &out_dev)); 447 options, delay_offset, &in_dev, &out_dev));
527 } 448 }
528 449
529 // If all worked well, save the values for use in GetAudioOptions. 450 // If all worked well, save the values for use in GetAudioOptions.
530 if (ret) { 451 if (ret) {
531 audio_options_ = options; 452 audio_options_ = options;
532 audio_in_device_ = in_name;
533 audio_out_device_ = out_name;
534 audio_delay_offset_ = delay_offset; 453 audio_delay_offset_ = delay_offset;
535 } 454 }
536 return ret; 455 return ret;
537 } 456 }
538 457
539 bool ChannelManager::SetAudioOptions_w( 458 bool ChannelManager::SetAudioOptions_w(
540 const AudioOptions& options, int delay_offset, 459 const AudioOptions& options, int delay_offset,
541 const Device* in_dev, const Device* out_dev) { 460 const Device* in_dev, const Device* out_dev) {
542 ASSERT(worker_thread_ == rtc::Thread::Current()); 461 ASSERT(worker_thread_ == rtc::Thread::Current());
543 ASSERT(initialized_); 462 ASSERT(initialized_);
(...skipping 29 matching lines...) Expand all
573 media_engine_.get(), level)); 492 media_engine_.get(), level));
574 } 493 }
575 494
576 if (ret) { 495 if (ret) {
577 audio_output_volume_ = level; 496 audio_output_volume_ = level;
578 } 497 }
579 498
580 return ret; 499 return ret;
581 } 500 }
582 501
583 bool ChannelManager::IsSameCapturer(const std::string& capturer_name,
584 VideoCapturer* capturer) {
585 if (capturer == NULL) {
586 return false;
587 }
588 Device device;
589 if (!device_manager_->GetVideoCaptureDevice(capturer_name, &device)) {
590 return false;
591 }
592 return capturer->GetId() == device.id;
593 }
594
595 bool ChannelManager::GetVideoCaptureDevice(Device* device) {
596 std::string device_name;
597 if (!GetCaptureDevice(&device_name)) {
598 return false;
599 }
600 return device_manager_->GetVideoCaptureDevice(device_name, device);
601 }
602
603 bool ChannelManager::GetCaptureDevice(std::string* cam_name) {
604 if (camera_device_.empty()) {
605 // Initialize camera_device_ with default.
606 Device device;
607 if (!device_manager_->GetVideoCaptureDevice(
608 DeviceManagerInterface::kDefaultDeviceName, &device)) {
609 LOG(LS_WARNING) << "Device manager can't find default camera: " <<
610 DeviceManagerInterface::kDefaultDeviceName;
611 return false;
612 }
613 camera_device_ = device.name;
614 }
615 *cam_name = camera_device_;
616 return true;
617 }
618
619 bool ChannelManager::SetCaptureDevice(const std::string& cam_name) {
620 Device device;
621 bool ret = true;
622 if (!device_manager_->GetVideoCaptureDevice(cam_name, &device)) {
623 if (!cam_name.empty()) {
624 LOG(LS_WARNING) << "Device manager can't find camera: " << cam_name;
625 }
626 ret = false;
627 }
628
629 // If we're running, tell the media engine about it.
630 if (initialized_ && ret) {
631 ret = worker_thread_->Invoke<bool>(
632 Bind(&ChannelManager::SetCaptureDevice_w, this, &device));
633 }
634
635 // If everything worked, retain the name of the selected camera.
636 if (ret) {
637 camera_device_ = device.name;
638 } else if (camera_device_.empty()) {
639 // When video option setting fails, we still want camera_device_ to be in a
640 // good state, so we initialize it with default if it's empty.
641 Device default_device;
642 if (!device_manager_->GetVideoCaptureDevice(
643 DeviceManagerInterface::kDefaultDeviceName, &default_device)) {
644 LOG(LS_WARNING) << "Device manager can't find default camera: " <<
645 DeviceManagerInterface::kDefaultDeviceName;
646 }
647 camera_device_ = default_device.name;
648 }
649
650 return ret;
651 }
652
653 VideoCapturer* ChannelManager::CreateVideoCapturer() {
654 Device device;
655 if (!device_manager_->GetVideoCaptureDevice(camera_device_, &device)) {
656 if (!camera_device_.empty()) {
657 LOG(LS_WARNING) << "Device manager can't find camera: " << camera_device_;
658 }
659 return NULL;
660 }
661 VideoCapturer* capturer = device_manager_->CreateVideoCapturer(device);
662 if (capturer && default_video_encoder_config_.max_codec.id != 0) {
663 // For now, use the aspect ratio of the default_video_encoder_config_,
664 // which may be different than the native aspect ratio of the start
665 // format the camera may use.
666 capturer->UpdateAspectRatio(
667 default_video_encoder_config_.max_codec.width,
668 default_video_encoder_config_.max_codec.height);
669 }
670 return capturer;
671 }
672
673 VideoCapturer* ChannelManager::CreateScreenCapturer(
674 const ScreencastId& screenid) {
675 return device_manager_->CreateScreenCapturer(screenid);
676 }
677
678 bool ChannelManager::SetCaptureDevice_w(const Device* cam_device) {
679 ASSERT(worker_thread_ == rtc::Thread::Current());
680 ASSERT(initialized_);
681
682 if (!cam_device) {
683 video_device_name_.clear();
684 return true;
685 }
686 video_device_name_ = cam_device->name;
687 return true;
688 }
689
690 bool ChannelManager::SetDefaultVideoEncoderConfig(const VideoEncoderConfig& c) { 502 bool ChannelManager::SetDefaultVideoEncoderConfig(const VideoEncoderConfig& c) {
691 bool ret = true; 503 bool ret = true;
692 if (initialized_) { 504 if (initialized_) {
693 ret = worker_thread_->Invoke<bool>( 505 ret = worker_thread_->Invoke<bool>(
694 Bind(&MediaEngineInterface::SetDefaultVideoEncoderConfig, 506 Bind(&MediaEngineInterface::SetDefaultVideoEncoderConfig,
695 media_engine_.get(), c)); 507 media_engine_.get(), c));
696 } 508 }
697 if (ret) { 509 if (ret) {
698 default_video_encoder_config_ = c; 510 default_video_encoder_config_ = c;
699 } 511 }
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
819 CaptureStateParams* data = 631 CaptureStateParams* data =
820 static_cast<CaptureStateParams*>(message->pdata); 632 static_cast<CaptureStateParams*>(message->pdata);
821 SignalVideoCaptureStateChange(data->capturer, data->state); 633 SignalVideoCaptureStateChange(data->capturer, data->state);
822 delete data; 634 delete data;
823 break; 635 break;
824 } 636 }
825 } 637 }
826 } 638 }
827 639
828 640
829 static void GetDeviceNames(const std::vector<Device>& devs, 641 static void GetDeviceNames(const std::vector<Device>& devs,
Nico 2015/09/29 07:08:57 This function is now unused. Can you remove this t
830 std::vector<std::string>* names) { 642 std::vector<std::string>* names) {
831 names->clear(); 643 names->clear();
832 for (size_t i = 0; i < devs.size(); ++i) { 644 for (size_t i = 0; i < devs.size(); ++i) {
833 names->push_back(devs[i].name); 645 names->push_back(devs[i].name);
834 } 646 }
835 } 647 }
836 648
837 bool ChannelManager::GetAudioInputDevices(std::vector<std::string>* names) {
838 names->clear();
839 std::vector<Device> devs;
840 bool ret = device_manager_->GetAudioInputDevices(&devs);
841 if (ret)
842 GetDeviceNames(devs, names);
843
844 return ret;
845 }
846
847 bool ChannelManager::GetAudioOutputDevices(std::vector<std::string>* names) {
848 names->clear();
849 std::vector<Device> devs;
850 bool ret = device_manager_->GetAudioOutputDevices(&devs);
851 if (ret)
852 GetDeviceNames(devs, names);
853
854 return ret;
855 }
856
857 bool ChannelManager::GetVideoCaptureDevices(std::vector<std::string>* names) {
858 names->clear();
859 std::vector<Device> devs;
860 bool ret = device_manager_->GetVideoCaptureDevices(&devs);
861 if (ret)
862 GetDeviceNames(devs, names);
863
864 return ret;
865 }
866
867 void ChannelManager::SetVideoCaptureDeviceMaxFormat(
868 const std::string& usb_id,
869 const VideoFormat& max_format) {
870 device_manager_->SetVideoCaptureDeviceMaxFormat(usb_id, max_format);
871 }
872
873 bool ChannelManager::StartAecDump(rtc::PlatformFile file) { 649 bool ChannelManager::StartAecDump(rtc::PlatformFile file) {
874 return worker_thread_->Invoke<bool>( 650 return worker_thread_->Invoke<bool>(
875 Bind(&MediaEngineInterface::StartAecDump, media_engine_.get(), file)); 651 Bind(&MediaEngineInterface::StartAecDump, media_engine_.get(), file));
876 } 652 }
877 653
878 } // namespace cricket 654 } // namespace cricket
OLDNEW
« no previous file with comments | « talk/session/media/channelmanager.h ('k') | talk/session/media/channelmanager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698