OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/media/media_stream_dependency_factory.h" | 5 #include "content/renderer/media/media_stream_dependency_factory.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 &native_video_constraints).get()); | 298 &native_video_constraints).get()); |
299 source_observer->AddSource(source_data->video_source()); | 299 source_observer->AddSource(source_data->video_source()); |
300 } | 300 } |
301 | 301 |
302 // Do additional source initialization if the audio source is a valid | 302 // Do additional source initialization if the audio source is a valid |
303 // microphone or tab audio. | 303 // microphone or tab audio. |
304 RTCMediaConstraints native_audio_constraints(audio_constraints); | 304 RTCMediaConstraints native_audio_constraints(audio_constraints); |
305 ApplyFixedAudioConstraints(&native_audio_constraints); | 305 ApplyFixedAudioConstraints(&native_audio_constraints); |
306 WebKit::WebVector<WebKit::WebMediaStreamTrack> audio_tracks; | 306 WebKit::WebVector<WebKit::WebMediaStreamTrack> audio_tracks; |
307 web_stream->audioTracks(audio_tracks); | 307 web_stream->audioTracks(audio_tracks); |
308 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | |
309 if (command_line.HasSwitch(switches::kEnableWebRtcAecRecordings)) { | |
310 native_audio_constraints.AddOptional( | |
311 RTCMediaConstraints::kInternalAecDump, "true"); | |
312 } | |
313 for (size_t i = 0; i < audio_tracks.size(); ++i) { | 308 for (size_t i = 0; i < audio_tracks.size(); ++i) { |
314 const WebKit::WebMediaStreamSource& source = audio_tracks[i].source(); | 309 const WebKit::WebMediaStreamSource& source = audio_tracks[i].source(); |
315 MediaStreamSourceExtraData* source_data = | 310 MediaStreamSourceExtraData* source_data = |
316 static_cast<MediaStreamSourceExtraData*>(source.extraData()); | 311 static_cast<MediaStreamSourceExtraData*>(source.extraData()); |
317 | 312 |
318 // Check if the source has already been created. This happens when the same | 313 // Check if the source has already been created. This happens when the same |
319 // source is used in multiple MediaStreams as a result of calling | 314 // source is used in multiple MediaStreams as a result of calling |
320 // getUserMedia. | 315 // getUserMedia. |
321 if (source_data->local_audio_source()) | 316 if (source_data->local_audio_source()) |
322 continue; | 317 continue; |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
516 // Remove the source provider as the track is going away. | 511 // Remove the source provider as the track is going away. |
517 writable_track.setSourceProvider(NULL); | 512 writable_track.setSourceProvider(NULL); |
518 return native_stream->RemoveTrack(native_stream->FindAudioTrack(track_id)); | 513 return native_stream->RemoveTrack(native_stream->FindAudioTrack(track_id)); |
519 } | 514 } |
520 | 515 |
521 CHECK_EQ(type, WebKit::WebMediaStreamSource::TypeVideo); | 516 CHECK_EQ(type, WebKit::WebMediaStreamSource::TypeVideo); |
522 return native_stream->RemoveTrack(native_stream->FindVideoTrack(track_id)); | 517 return native_stream->RemoveTrack(native_stream->FindVideoTrack(track_id)); |
523 } | 518 } |
524 | 519 |
525 bool MediaStreamDependencyFactory::CreatePeerConnectionFactory() { | 520 bool MediaStreamDependencyFactory::CreatePeerConnectionFactory() { |
| 521 DCHECK(!pc_factory_.get()); |
| 522 DCHECK(!audio_device_.get()); |
526 DVLOG(1) << "MediaStreamDependencyFactory::CreatePeerConnectionFactory()"; | 523 DVLOG(1) << "MediaStreamDependencyFactory::CreatePeerConnectionFactory()"; |
527 if (!pc_factory_.get()) { | |
528 DCHECK(!audio_device_.get()); | |
529 audio_device_ = new WebRtcAudioDeviceImpl(); | |
530 | 524 |
531 scoped_ptr<cricket::WebRtcVideoDecoderFactory> decoder_factory; | 525 scoped_ptr<cricket::WebRtcVideoDecoderFactory> decoder_factory; |
532 scoped_ptr<cricket::WebRtcVideoEncoderFactory> encoder_factory; | 526 scoped_ptr<cricket::WebRtcVideoEncoderFactory> encoder_factory; |
533 | 527 |
534 const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); | 528 const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); |
535 scoped_refptr<RendererGpuVideoAcceleratorFactories> gpu_factories = | 529 scoped_refptr<RendererGpuVideoAcceleratorFactories> gpu_factories = |
536 RenderThreadImpl::current()->GetGpuFactories(); | 530 RenderThreadImpl::current()->GetGpuFactories(); |
537 #if !defined(GOOGLE_TV) | 531 #if !defined(GOOGLE_TV) |
538 if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWDecoding)) { | 532 if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWDecoding)) { |
539 if (gpu_factories) | 533 if (gpu_factories) |
540 decoder_factory.reset(new RTCVideoDecoderFactory(gpu_factories)); | 534 decoder_factory.reset(new RTCVideoDecoderFactory(gpu_factories)); |
541 } | 535 } |
542 #else | 536 #else |
543 // PeerConnectionFactory will hold the ownership of this | 537 // PeerConnectionFactory will hold the ownership of this |
544 // VideoDecoderFactory. | 538 // VideoDecoderFactory. |
545 decoder_factory.reset(decoder_factory_tv_ = new RTCVideoDecoderFactoryTv()); | 539 decoder_factory.reset(decoder_factory_tv_ = new RTCVideoDecoderFactoryTv()); |
546 #endif | 540 #endif |
547 | 541 |
548 if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWEncoding)) { | 542 if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWEncoding)) { |
549 if (gpu_factories) | 543 if (gpu_factories) |
550 encoder_factory.reset(new RTCVideoEncoderFactory(gpu_factories)); | 544 encoder_factory.reset(new RTCVideoEncoderFactory(gpu_factories)); |
551 } | 545 } |
552 | 546 |
553 scoped_refptr<webrtc::PeerConnectionFactoryInterface> factory( | 547 scoped_refptr<WebRtcAudioDeviceImpl> audio_device( |
554 webrtc::CreatePeerConnectionFactory(worker_thread_, | 548 new WebRtcAudioDeviceImpl()); |
555 signaling_thread_, | 549 |
556 audio_device_.get(), | 550 scoped_refptr<webrtc::PeerConnectionFactoryInterface> factory( |
557 encoder_factory.release(), | 551 webrtc::CreatePeerConnectionFactory(worker_thread_, |
558 decoder_factory.release())); | 552 signaling_thread_, |
559 if (factory.get()) | 553 audio_device.get(), |
560 pc_factory_ = factory; | 554 encoder_factory.release(), |
561 else | 555 decoder_factory.release())); |
562 audio_device_ = NULL; | 556 if (!factory.get()) { |
| 557 return false; |
563 } | 558 } |
564 return pc_factory_.get() != NULL; | 559 |
| 560 audio_device_ = audio_device; |
| 561 pc_factory_ = factory; |
| 562 webrtc::PeerConnectionFactoryInterface::Options factory_options; |
| 563 factory_options.enable_aec_dump = |
| 564 cmd_line->HasSwitch(switches::kEnableWebRtcAecRecordings); |
| 565 factory_options.disable_sctp_data_channels = |
| 566 cmd_line->HasSwitch(switches::kDisableSCTPDataChannels); |
| 567 pc_factory_->SetOptions(factory_options); |
| 568 return true; |
565 } | 569 } |
566 | 570 |
567 bool MediaStreamDependencyFactory::PeerConnectionFactoryCreated() { | 571 bool MediaStreamDependencyFactory::PeerConnectionFactoryCreated() { |
568 return pc_factory_.get() != NULL; | 572 return pc_factory_.get() != NULL; |
569 } | 573 } |
570 | 574 |
571 scoped_refptr<webrtc::PeerConnectionInterface> | 575 scoped_refptr<webrtc::PeerConnectionInterface> |
572 MediaStreamDependencyFactory::CreatePeerConnection( | 576 MediaStreamDependencyFactory::CreatePeerConnection( |
573 const webrtc::PeerConnectionInterface::IceServers& ice_servers, | 577 const webrtc::PeerConnectionInterface::IceServers& ice_servers, |
574 const webrtc::MediaConstraintsInterface* constraints, | 578 const webrtc::MediaConstraintsInterface* constraints, |
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
875 MediaStreamDependencyFactory::GetNativeMediaStreamTrack( | 879 MediaStreamDependencyFactory::GetNativeMediaStreamTrack( |
876 const WebKit::WebMediaStreamTrack& track) { | 880 const WebKit::WebMediaStreamTrack& track) { |
877 if (track.isNull()) | 881 if (track.isNull()) |
878 return NULL; | 882 return NULL; |
879 MediaStreamTrackExtraData* extra_data = | 883 MediaStreamTrackExtraData* extra_data = |
880 static_cast<MediaStreamTrackExtraData*>(track.extraData()); | 884 static_cast<MediaStreamTrackExtraData*>(track.extraData()); |
881 return extra_data ? extra_data->track().get() : NULL; | 885 return extra_data ? extra_data->track().get() : NULL; |
882 } | 886 } |
883 | 887 |
884 } // namespace content | 888 } // namespace content |
OLD | NEW |