| 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/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 const VideoFrameProvider::RepaintCB& repaint_cb) { | 235 const VideoFrameProvider::RepaintCB& repaint_cb) { |
| 236 DCHECK(CalledOnValidThread()); | 236 DCHECK(CalledOnValidThread()); |
| 237 blink::WebMediaStream web_stream(GetMediaStream(url)); | 237 blink::WebMediaStream web_stream(GetMediaStream(url)); |
| 238 | 238 |
| 239 if (web_stream.isNull() || !web_stream.extraData()) | 239 if (web_stream.isNull() || !web_stream.extraData()) |
| 240 return NULL; // This is not a valid stream. | 240 return NULL; // This is not a valid stream. |
| 241 | 241 |
| 242 DVLOG(1) << "MediaStreamImpl::GetVideoFrameProvider stream:" | 242 DVLOG(1) << "MediaStreamImpl::GetVideoFrameProvider stream:" |
| 243 << UTF16ToUTF8(web_stream.id()); | 243 << UTF16ToUTF8(web_stream.id()); |
| 244 | 244 |
| 245 webrtc::MediaStreamInterface* stream = GetNativeMediaStream(web_stream); | 245 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; |
| 246 if (stream) | 246 web_stream.videoTracks(video_tracks); |
| 247 return CreateVideoFrameProvider(stream, error_cb, repaint_cb); | 247 if (video_tracks.isEmpty()) |
| 248 NOTREACHED(); | 248 return NULL; |
| 249 return NULL; | 249 |
| 250 return new RTCVideoRenderer(video_tracks[0], error_cb, repaint_cb); |
| 250 } | 251 } |
| 251 | 252 |
| 252 scoped_refptr<MediaStreamAudioRenderer> | 253 scoped_refptr<MediaStreamAudioRenderer> |
| 253 MediaStreamImpl::GetAudioRenderer(const GURL& url) { | 254 MediaStreamImpl::GetAudioRenderer(const GURL& url) { |
| 254 DCHECK(CalledOnValidThread()); | 255 DCHECK(CalledOnValidThread()); |
| 255 blink::WebMediaStream web_stream(GetMediaStream(url)); | 256 blink::WebMediaStream web_stream(GetMediaStream(url)); |
| 256 | 257 |
| 257 if (web_stream.isNull() || !web_stream.extraData()) | 258 if (web_stream.isNull() || !web_stream.extraData()) |
| 258 return NULL; // This is not a valid stream. | 259 return NULL; // This is not a valid stream. |
| 259 | 260 |
| (...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 719 while (source_it != local_sources_.end()) { | 720 while (source_it != local_sources_.end()) { |
| 720 if (!FindSourceInRequests(source_it->source)) { | 721 if (!FindSourceInRequests(source_it->source)) { |
| 721 StopLocalSource(source_it->source, notify_dispatcher); | 722 StopLocalSource(source_it->source, notify_dispatcher); |
| 722 source_it = local_sources_.erase(source_it); | 723 source_it = local_sources_.erase(source_it); |
| 723 } else { | 724 } else { |
| 724 ++source_it; | 725 ++source_it; |
| 725 } | 726 } |
| 726 } | 727 } |
| 727 } | 728 } |
| 728 | 729 |
| 729 scoped_refptr<VideoFrameProvider> | |
| 730 MediaStreamImpl::CreateVideoFrameProvider( | |
| 731 webrtc::MediaStreamInterface* stream, | |
| 732 const base::Closure& error_cb, | |
| 733 const VideoFrameProvider::RepaintCB& repaint_cb) { | |
| 734 if (stream->GetVideoTracks().empty()) | |
| 735 return NULL; | |
| 736 | |
| 737 DVLOG(1) << "MediaStreamImpl::CreateRemoteVideoFrameProvider label:" | |
| 738 << stream->label(); | |
| 739 | |
| 740 return new RTCVideoRenderer( | |
| 741 stream->GetVideoTracks()[0], | |
| 742 error_cb, | |
| 743 repaint_cb); | |
| 744 } | |
| 745 | |
| 746 scoped_refptr<WebRtcAudioRenderer> MediaStreamImpl::CreateRemoteAudioRenderer( | 730 scoped_refptr<WebRtcAudioRenderer> MediaStreamImpl::CreateRemoteAudioRenderer( |
| 747 webrtc::MediaStreamInterface* stream) { | 731 webrtc::MediaStreamInterface* stream) { |
| 748 if (stream->GetAudioTracks().empty()) | 732 if (stream->GetAudioTracks().empty()) |
| 749 return NULL; | 733 return NULL; |
| 750 | 734 |
| 751 DVLOG(1) << "MediaStreamImpl::CreateRemoteAudioRenderer label:" | 735 DVLOG(1) << "MediaStreamImpl::CreateRemoteAudioRenderer label:" |
| 752 << stream->label(); | 736 << stream->label(); |
| 753 | 737 |
| 754 // TODO(tommi): Change the default value of session_id to be | 738 // TODO(tommi): Change the default value of session_id to be |
| 755 // StreamDeviceInfo::kNoId. Also update AudioOutputDevice etc. | 739 // StreamDeviceInfo::kNoId. Also update AudioOutputDevice etc. |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 863 enable_automatic_output_device_selection( | 847 enable_automatic_output_device_selection( |
| 864 enable_automatic_output_device_selection), | 848 enable_automatic_output_device_selection), |
| 865 frame(frame), | 849 frame(frame), |
| 866 request(request) { | 850 request(request) { |
| 867 } | 851 } |
| 868 | 852 |
| 869 MediaStreamImpl::UserMediaRequestInfo::~UserMediaRequestInfo() { | 853 MediaStreamImpl::UserMediaRequestInfo::~UserMediaRequestInfo() { |
| 870 } | 854 } |
| 871 | 855 |
| 872 } // namespace content | 856 } // namespace content |
| OLD | NEW |