| 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 |