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_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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |