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

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

Issue 14346002: Connect webrtc MediaSourceInterface ready states with webkit WebMediaStreamSource (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: rebase Created 7 years, 7 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_impl.h" 5 #include "content/renderer/media/media_stream_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/string_number_conversions.h" 10 #include "base/string_number_conversions.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 const char* track_type = 83 const char* track_type =
84 (type == WebKit::WebMediaStreamSource::TypeAudio) ? "a" : "v"; 84 (type == WebKit::WebMediaStreamSource::TypeAudio) ? "a" : "v";
85 std::string source_id = base::StringPrintf("%s%s%u", label.c_str(), 85 std::string source_id = base::StringPrintf("%s%s%u", label.c_str(),
86 track_type, 86 track_type,
87 static_cast<unsigned int>(i)); 87 static_cast<unsigned int>(i));
88 webkit_sources[i].initialize( 88 webkit_sources[i].initialize(
89 UTF8ToUTF16(source_id), 89 UTF8ToUTF16(source_id),
90 type, 90 type,
91 UTF8ToUTF16(devices[i].device.name)); 91 UTF8ToUTF16(devices[i].device.name));
92 webkit_sources[i].setExtraData( 92 webkit_sources[i].setExtraData(
93 new content::MediaStreamSourceExtraData(devices[i])); 93 new content::MediaStreamSourceExtraData(devices[i], webkit_sources[i]));
94 webkit_sources[i].setDeviceId(UTF8ToUTF16(devices[i].device.id.c_str())); 94 webkit_sources[i].setDeviceId(UTF8ToUTF16(devices[i].device.id.c_str()));
95 } 95 }
96 } 96 }
97 97
98 webrtc::MediaStreamInterface* GetNativeMediaStream( 98 webrtc::MediaStreamInterface* GetNativeMediaStream(
99 const WebKit::WebMediaStream& descriptor) { 99 const WebKit::WebMediaStream& descriptor) {
100 content::MediaStreamExtraData* extra_data = 100 content::MediaStreamExtraData* extra_data =
101 static_cast<content::MediaStreamExtraData*>(descriptor.extraData()); 101 static_cast<content::MediaStreamExtraData*>(descriptor.extraData());
102 if (!extra_data) 102 if (!extra_data)
103 return NULL; 103 return NULL;
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 DVLOG(1) << "Request ID not found"; 299 DVLOG(1) << "Request ID not found";
300 return; 300 return;
301 } 301 }
302 request_info->generated = true; 302 request_info->generated = true;
303 303
304 WebKit::WebVector<WebKit::WebMediaStreamSource> audio_source_vector( 304 WebKit::WebVector<WebKit::WebMediaStreamSource> audio_source_vector(
305 audio_array.size()); 305 audio_array.size());
306 CreateWebKitSourceVector(label, audio_array, 306 CreateWebKitSourceVector(label, audio_array,
307 WebKit::WebMediaStreamSource::TypeAudio, 307 WebKit::WebMediaStreamSource::TypeAudio,
308 audio_source_vector); 308 audio_source_vector);
309 request_info->audio_sources.assign(audio_source_vector);
309 WebKit::WebVector<WebKit::WebMediaStreamSource> video_source_vector( 310 WebKit::WebVector<WebKit::WebMediaStreamSource> video_source_vector(
310 video_array.size()); 311 video_array.size());
311 CreateWebKitSourceVector(label, video_array, 312 CreateWebKitSourceVector(label, video_array,
312 WebKit::WebMediaStreamSource::TypeVideo, 313 WebKit::WebMediaStreamSource::TypeVideo,
313 video_source_vector); 314 video_source_vector);
315 request_info->video_sources.assign(video_source_vector);
314 316
315 WebKit::WebUserMediaRequest* request = &(request_info->request); 317 WebKit::WebUserMediaRequest* request = &(request_info->request);
316 WebKit::WebString webkit_label = UTF8ToUTF16(label); 318 WebKit::WebString webkit_label = UTF8ToUTF16(label);
317 WebKit::WebMediaStream* description = &(request_info->descriptor); 319 WebKit::WebMediaStream* description = &(request_info->descriptor);
318 320
319 description->initialize(webkit_label, audio_source_vector, 321 description->initialize(webkit_label, audio_source_vector,
320 video_source_vector); 322 video_source_vector);
321 323
322 // WebUserMediaRequest don't have an implementation in unit tests. 324 // WebUserMediaRequest don't have an implementation in unit tests.
323 // Therefore we need to check for isNull here. 325 // Therefore we need to check for isNull here.
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 << "audio_track.id : " << audio_track->id() 555 << "audio_track.id : " << audio_track->id()
554 << "audio_track.enabled: " << audio_track->enabled(); 556 << "audio_track.enabled: " << audio_track->enabled();
555 557
556 // Create a new WebRtcLocalAudioRenderer instance and connect it to the 558 // Create a new WebRtcLocalAudioRenderer instance and connect it to the
557 // existing WebRtcAudioCapturer so that the renderer can use it as source. 559 // existing WebRtcAudioCapturer so that the renderer can use it as source.
558 return new WebRtcLocalAudioRenderer(source, audio_track, 560 return new WebRtcLocalAudioRenderer(source, audio_track,
559 RenderViewObserver::routing_id()); 561 RenderViewObserver::routing_id());
560 } 562 }
561 563
562 MediaStreamSourceExtraData::MediaStreamSourceExtraData( 564 MediaStreamSourceExtraData::MediaStreamSourceExtraData(
563 const StreamDeviceInfo& device_info) 565 const StreamDeviceInfo& device_info,
564 : device_info_(device_info) { 566 const WebKit::WebMediaStreamSource& webkit_source)
567 : device_info_(device_info),
568 webkit_source_(webkit_source) {
565 } 569 }
566 570
567 MediaStreamSourceExtraData::MediaStreamSourceExtraData( 571 MediaStreamSourceExtraData::MediaStreamSourceExtraData(
568 media::AudioCapturerSource* source) 572 media::AudioCapturerSource* source)
569 : audio_source_(source) { 573 : audio_source_(source) {
570 } 574 }
571 575
572 MediaStreamSourceExtraData::~MediaStreamSourceExtraData() {} 576 MediaStreamSourceExtraData::~MediaStreamSourceExtraData() {}
573 577
574 MediaStreamExtraData::MediaStreamExtraData( 578 MediaStreamExtraData::MediaStreamExtraData(
575 webrtc::MediaStreamInterface* stream, bool is_local) 579 webrtc::MediaStreamInterface* stream, bool is_local)
576 : stream_(stream), 580 : stream_(stream),
577 is_local_(is_local) { 581 is_local_(is_local) {
578 } 582 }
579 583
580 MediaStreamExtraData::~MediaStreamExtraData() { 584 MediaStreamExtraData::~MediaStreamExtraData() {
581 } 585 }
582 586
583 void MediaStreamExtraData::SetLocalStreamStopCallback( 587 void MediaStreamExtraData::SetLocalStreamStopCallback(
584 const StreamStopCallback& stop_callback) { 588 const StreamStopCallback& stop_callback) {
585 stream_stop_callback_ = stop_callback; 589 stream_stop_callback_ = stop_callback;
586 } 590 }
587 591
588 void MediaStreamExtraData::OnLocalStreamStop() { 592 void MediaStreamExtraData::OnLocalStreamStop() {
589 if (!stream_stop_callback_.is_null()) 593 if (!stream_stop_callback_.is_null())
590 stream_stop_callback_.Run(stream_->label()); 594 stream_stop_callback_.Run(stream_->label());
591 } 595 }
592 596
597 MediaStreamImpl::UserMediaRequestInfo::UserMediaRequestInfo()
598 : request_id(0), generated(false), frame(NULL), request() {
599 }
600
601 MediaStreamImpl::UserMediaRequestInfo::UserMediaRequestInfo(
602 int request_id,
603 WebKit::WebFrame* frame,
604 const WebKit::WebUserMediaRequest& request)
605 : request_id(request_id), generated(false), frame(frame),
606 request(request) {
607 }
608
609 MediaStreamImpl::UserMediaRequestInfo::~UserMediaRequestInfo() {
610 // Release the extra data field of all sources created by
611 // MediaStreamImpl for this request. This breaks the circular reference to
612 // WebKit::MediaStreamSource.
613 // TODO(tommyw): Remove this once WebKit::MediaStreamSource::Owner has been
614 // implemented to fully avoid a circular dependency.
615 for (size_t i = 0; i < audio_sources.size(); ++i) {
616 audio_sources[i].setReadyState(
617 WebKit::WebMediaStreamSource::ReadyStateEnded);
618 audio_sources[i].setExtraData(NULL);
619 }
620
621 for (size_t i = 0; i < video_sources.size(); ++i) {
622 video_sources[i].setReadyState(
623 WebKit::WebMediaStreamSource::ReadyStateEnded);
624 video_sources[i].setExtraData(NULL);
625 }
626 }
627
593 } // namespace content 628 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698