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

Side by Side Diff: content/renderer/media/media_stream_dependency_factory.cc

Issue 129923002: Implements MediaStreamVideoSource. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 11 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
OLDNEW
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"
11 #include "base/synchronization/waitable_event.h" 11 #include "base/synchronization/waitable_event.h"
12 #include "content/common/media/media_stream_messages.h" 12 #include "content/common/media/media_stream_messages.h"
13 #include "content/public/common/content_switches.h" 13 #include "content/public/common/content_switches.h"
14 #include "content/renderer/media/media_stream_source_extra_data.h" 14 #include "content/renderer/media/media_stream_source_extra_data.h"
15 #include "content/renderer/media/media_stream_track_extra_data.h" 15 #include "content/renderer/media/media_stream_track_extra_data.h"
16 #include "content/renderer/media/media_stream_video_source.h"
16 #include "content/renderer/media/media_stream_video_track.h" 17 #include "content/renderer/media/media_stream_video_track.h"
17 #include "content/renderer/media/peer_connection_identity_service.h" 18 #include "content/renderer/media/peer_connection_identity_service.h"
18 #include "content/renderer/media/rtc_media_constraints.h" 19 #include "content/renderer/media/rtc_media_constraints.h"
19 #include "content/renderer/media/rtc_peer_connection_handler.h" 20 #include "content/renderer/media/rtc_peer_connection_handler.h"
20 #include "content/renderer/media/rtc_video_capturer.h" 21 #include "content/renderer/media/rtc_video_capturer.h"
21 #include "content/renderer/media/rtc_video_decoder_factory.h" 22 #include "content/renderer/media/rtc_video_decoder_factory.h"
22 #include "content/renderer/media/rtc_video_encoder_factory.h" 23 #include "content/renderer/media/rtc_video_encoder_factory.h"
23 #include "content/renderer/media/video_capture_impl_manager.h" 24 #include "content/renderer/media/video_capture_impl_manager.h"
24 #include "content/renderer/media/webaudio_capturer_source.h" 25 #include "content/renderer/media/webaudio_capturer_source.h"
25 #include "content/renderer/media/webrtc_audio_device_impl.h" 26 #include "content/renderer/media/webrtc_audio_device_impl.h"
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 blink::WebMediaStreamTrack writable_track = track; 482 blink::WebMediaStreamTrack writable_track = track;
482 writable_track.setSourceProvider(static_cast<WebRtcLocalAudioTrack*>( 483 writable_track.setSourceProvider(static_cast<WebRtcLocalAudioTrack*>(
483 audio_track.get())->audio_source_provider()); 484 audio_track.get())->audio_source_provider());
484 485
485 return audio_track; 486 return audio_track;
486 } 487 }
487 488
488 scoped_refptr<webrtc::VideoTrackInterface> 489 scoped_refptr<webrtc::VideoTrackInterface>
489 MediaStreamDependencyFactory::CreateNativeVideoMediaStreamTrack( 490 MediaStreamDependencyFactory::CreateNativeVideoMediaStreamTrack(
490 const blink::WebMediaStreamTrack& track) { 491 const blink::WebMediaStreamTrack& track) {
492 DCHECK(track.extraData() == NULL);
491 blink::WebMediaStreamSource source = track.source(); 493 blink::WebMediaStreamSource source = track.source();
492 DCHECK_EQ(source.type(), blink::WebMediaStreamSource::TypeVideo); 494 DCHECK_EQ(source.type(), blink::WebMediaStreamSource::TypeVideo);
493 MediaStreamSourceExtraData* source_data = 495 MediaStreamVideoSource* source_data =
494 static_cast<MediaStreamSourceExtraData*>(source.extraData()); 496 static_cast<MediaStreamVideoSource*>(source.extraData());
495 497
496 if (!source_data) { 498 if (!source_data) {
497 // TODO(perkj): Implement support for sources from 499 // TODO(perkj): Implement support for sources from
498 // remote MediaStreams. 500 // remote MediaStreams.
499 NOTIMPLEMENTED(); 501 NOTIMPLEMENTED();
500 return NULL; 502 return NULL;
501 } 503 }
502 504
503 std::string track_id = base::UTF16ToUTF8(track.id()); 505 // Create native track from the source.
504 scoped_refptr<webrtc::VideoTrackInterface> video_track( 506 scoped_refptr<webrtc::VideoTrackInterface> webrtc_track =
505 CreateLocalVideoTrack(track_id, source_data->video_source())); 507 CreateLocalVideoTrack(track.id().utf8(), source_data->GetAdapter());
506 AddNativeTrackToBlinkTrack(video_track.get(), track, true);
507 508
508 video_track->set_enabled(track.isEnabled()); 509 AddNativeTrackToBlinkTrack(webrtc_track, track, true);
509 510
510 return video_track; 511 webrtc_track->set_enabled(track.isEnabled());
512
513 return webrtc_track;
511 } 514 }
512 515
513 void MediaStreamDependencyFactory::CreateNativeMediaStreamTrack( 516 void MediaStreamDependencyFactory::CreateNativeMediaStreamTrack(
514 const blink::WebMediaStreamTrack& track) { 517 const blink::WebMediaStreamTrack& track) {
515 DCHECK(!track.isNull() && !track.extraData()); 518 DCHECK(!track.isNull() && !track.extraData());
516 DCHECK(!track.source().isNull()); 519 DCHECK(!track.source().isNull());
517 520
518 switch (track.source().type()) { 521 switch (track.source().type()) {
519 case blink::WebMediaStreamSource::TypeAudio: 522 case blink::WebMediaStreamSource::TypeAudio:
520 CreateNativeAudioMediaStreamTrack(track); 523 CreateNativeAudioMediaStreamTrack(track);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 case blink::WebMediaStreamSource::TypeAudio: 610 case blink::WebMediaStreamSource::TypeAudio:
608 return native_stream->RemoveTrack( 611 return native_stream->RemoveTrack(
609 native_stream->FindAudioTrack(track_id)); 612 native_stream->FindAudioTrack(track_id));
610 case blink::WebMediaStreamSource::TypeVideo: 613 case blink::WebMediaStreamSource::TypeVideo:
611 return native_stream->RemoveTrack( 614 return native_stream->RemoveTrack(
612 native_stream->FindVideoTrack(track_id)); 615 native_stream->FindVideoTrack(track_id));
613 } 616 }
614 return false; 617 return false;
615 } 618 }
616 619
620 scoped_refptr<webrtc::VideoSourceInterface>
621 MediaStreamDependencyFactory::CreateVideoSource(
622 cricket::VideoCapturer* capturer,
623 const webrtc::MediaConstraintsInterface* constraints) {
624 // The video source takes ownership of |capturer|.
625 scoped_refptr<webrtc::VideoSourceInterface> source =
626 pc_factory_->CreateVideoSource(capturer, constraints).get();
627 return source;
628 }
629
617 bool MediaStreamDependencyFactory::CreatePeerConnectionFactory() { 630 bool MediaStreamDependencyFactory::CreatePeerConnectionFactory() {
618 DCHECK(!pc_factory_.get()); 631 DCHECK(!pc_factory_.get());
619 DCHECK(!audio_device_.get()); 632 DCHECK(!audio_device_.get());
620 DVLOG(1) << "MediaStreamDependencyFactory::CreatePeerConnectionFactory()"; 633 DVLOG(1) << "MediaStreamDependencyFactory::CreatePeerConnectionFactory()";
621 634
622 scoped_ptr<cricket::WebRtcVideoDecoderFactory> decoder_factory; 635 scoped_ptr<cricket::WebRtcVideoDecoderFactory> decoder_factory;
623 scoped_ptr<cricket::WebRtcVideoEncoderFactory> encoder_factory; 636 scoped_ptr<cricket::WebRtcVideoEncoderFactory> encoder_factory;
624 637
625 const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); 638 const CommandLine* cmd_line = CommandLine::ForCurrentProcess();
626 scoped_refptr<RendererGpuVideoAcceleratorFactories> gpu_factories = 639 scoped_refptr<RendererGpuVideoAcceleratorFactories> gpu_factories =
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 scoped_refptr<webrtc::VideoSourceInterface> 740 scoped_refptr<webrtc::VideoSourceInterface>
728 MediaStreamDependencyFactory::CreateLocalVideoSource( 741 MediaStreamDependencyFactory::CreateLocalVideoSource(
729 int video_session_id, 742 int video_session_id,
730 bool is_screencast, 743 bool is_screencast,
731 const webrtc::MediaConstraintsInterface* constraints) { 744 const webrtc::MediaConstraintsInterface* constraints) {
732 RtcVideoCapturer* capturer = new RtcVideoCapturer( 745 RtcVideoCapturer* capturer = new RtcVideoCapturer(
733 video_session_id, vc_manager_.get(), is_screencast); 746 video_session_id, vc_manager_.get(), is_screencast);
734 747
735 // The video source takes ownership of |capturer|. 748 // The video source takes ownership of |capturer|.
736 scoped_refptr<webrtc::VideoSourceInterface> source = 749 scoped_refptr<webrtc::VideoSourceInterface> source =
737 pc_factory_->CreateVideoSource(capturer, constraints).get(); 750 CreateVideoSource(capturer, constraints);
738 return source; 751 return source;
739 } 752 }
740 753
741 scoped_refptr<WebAudioCapturerSource> 754 scoped_refptr<WebAudioCapturerSource>
742 MediaStreamDependencyFactory::CreateWebAudioSource( 755 MediaStreamDependencyFactory::CreateWebAudioSource(
743 blink::WebMediaStreamSource* source, 756 blink::WebMediaStreamSource* source,
744 RTCMediaConstraints* constraints) { 757 RTCMediaConstraints* constraints) {
745 DVLOG(1) << "MediaStreamDependencyFactory::CreateWebAudioSource()"; 758 DVLOG(1) << "MediaStreamDependencyFactory::CreateWebAudioSource()";
746 DCHECK(GetWebRtcAudioDevice()); 759 DCHECK(GetWebRtcAudioDevice());
747 760
(...skipping 22 matching lines...) Expand all
770 scoped_refptr<webrtc::VideoTrackInterface> 783 scoped_refptr<webrtc::VideoTrackInterface>
771 MediaStreamDependencyFactory::CreateLocalVideoTrack( 784 MediaStreamDependencyFactory::CreateLocalVideoTrack(
772 const std::string& id, cricket::VideoCapturer* capturer) { 785 const std::string& id, cricket::VideoCapturer* capturer) {
773 if (!capturer) { 786 if (!capturer) {
774 LOG(ERROR) << "CreateLocalVideoTrack called with null VideoCapturer."; 787 LOG(ERROR) << "CreateLocalVideoTrack called with null VideoCapturer.";
775 return NULL; 788 return NULL;
776 } 789 }
777 790
778 // Create video source from the |capturer|. 791 // Create video source from the |capturer|.
779 scoped_refptr<webrtc::VideoSourceInterface> source = 792 scoped_refptr<webrtc::VideoSourceInterface> source =
780 pc_factory_->CreateVideoSource(capturer, NULL).get(); 793 CreateVideoSource(capturer, NULL);
781 794
782 // Create native track from the source. 795 // Create native track from the source.
783 return pc_factory_->CreateVideoTrack(id, source.get()).get(); 796 return pc_factory_->CreateVideoTrack(id, source.get()).get();
784 } 797 }
785 798
786 scoped_refptr<webrtc::AudioTrackInterface> 799 scoped_refptr<webrtc::AudioTrackInterface>
787 MediaStreamDependencyFactory::CreateLocalAudioTrack( 800 MediaStreamDependencyFactory::CreateLocalAudioTrack(
788 const std::string& id, 801 const std::string& id,
789 const scoped_refptr<WebRtcAudioCapturer>& capturer, 802 const scoped_refptr<WebRtcAudioCapturer>& capturer,
790 WebAudioCapturerSource* webaudio_source, 803 WebAudioCapturerSource* webaudio_source,
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 if (!aec_dump_file_stream) { 1056 if (!aec_dump_file_stream) {
1044 VLOG(1) << "Could not open AEC dump file."; 1057 VLOG(1) << "Could not open AEC dump file.";
1045 base::ClosePlatformFile(aec_dump_file); 1058 base::ClosePlatformFile(aec_dump_file);
1046 } else { 1059 } else {
1047 // |pc_factory_| takes ownership of |aec_dump_file_stream|. 1060 // |pc_factory_| takes ownership of |aec_dump_file_stream|.
1048 pc_factory_->StartAecDump(aec_dump_file_stream); 1061 pc_factory_->StartAecDump(aec_dump_file_stream);
1049 } 1062 }
1050 } 1063 }
1051 1064
1052 } // namespace content 1065 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698