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

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

Issue 11270012: Adding audio support to the new webmediaplyer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: addressed Wei's comments and fixed the content_unittest Created 8 years, 1 month 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 | Annotate | Revision Log
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"
11 #include "base/stringprintf.h" 11 #include "base/stringprintf.h"
12 #include "base/utf_string_conversions.h" 12 #include "base/utf_string_conversions.h"
13 #include "content/renderer/media/capture_video_decoder.h" 13 #include "content/renderer/media/capture_video_decoder.h"
14 #include "content/renderer/media/local_video_capture.h" 14 #include "content/renderer/media/local_video_capture.h"
15 #include "content/renderer/media/media_stream_extra_data.h" 15 #include "content/renderer/media/media_stream_extra_data.h"
16 #include "content/renderer/media/media_stream_source_extra_data.h" 16 #include "content/renderer/media/media_stream_source_extra_data.h"
17 #include "content/renderer/media/media_stream_dependency_factory.h" 17 #include "content/renderer/media/media_stream_dependency_factory.h"
18 #include "content/renderer/media/media_stream_dispatcher.h" 18 #include "content/renderer/media/media_stream_dispatcher.h"
19 #include "content/renderer/media/rtc_video_decoder.h" 19 #include "content/renderer/media/rtc_video_decoder.h"
20 #include "content/renderer/media/rtc_video_renderer.h" 20 #include "content/renderer/media/rtc_video_renderer.h"
21 #include "content/renderer/media/video_capture_impl_manager.h" 21 #include "content/renderer/media/video_capture_impl_manager.h"
22 #include "content/renderer/media/webrtc_uma_histograms.h" 22 #include "content/renderer/media/webrtc_uma_histograms.h"
23 #include "content/renderer/media/webrtc_audio_renderer.h"
23 #include "media/base/message_loop_factory.h" 24 #include "media/base/message_loop_factory.h"
25 #include "media/base/rtc_audio_renderer.h"
24 #include "third_party/WebKit/Source/Platform/chromium/public/WebMediaConstraints .h" 26 #include "third_party/WebKit/Source/Platform/chromium/public/WebMediaConstraints .h"
25 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" 27 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h"
26 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" 28 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
27 #include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaStreamRegistr y.h" 29 #include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaStreamRegistr y.h"
28 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h" 30 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h"
29 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStre amComponent.h" 31 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStre amComponent.h"
30 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStre amDescriptor.h" 32 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStre amDescriptor.h"
31 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStre amSource.h" 33 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStre amSource.h"
32 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebVector.h" 34 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebVector.h"
33 35
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 if (extra_data->local_stream()) 257 if (extra_data->local_stream())
256 return CreateLocalVideoDecoder(extra_data->local_stream(), 258 return CreateLocalVideoDecoder(extra_data->local_stream(),
257 message_loop_factory); 259 message_loop_factory);
258 if (extra_data->remote_stream()) 260 if (extra_data->remote_stream())
259 return CreateRemoteVideoDecoder(extra_data->remote_stream(), 261 return CreateRemoteVideoDecoder(extra_data->remote_stream(),
260 message_loop_factory); 262 message_loop_factory);
261 NOTREACHED(); 263 NOTREACHED();
262 return NULL; 264 return NULL;
263 } 265 }
264 266
267 scoped_refptr<media::RtcAudioRenderer> MediaStreamImpl::GetAudioRenderer(
268 const GURL& url) {
269 DCHECK(CalledOnValidThread());
270 WebKit::WebMediaStreamDescriptor descriptor(GetMediaStream(url));
271
272 if (descriptor.isNull() || !descriptor.extraData())
273 return NULL; // This is not a valid stream.
274
275 DVLOG(1) << "MediaStreamImpl::GetAudioRenderer stream:"
276 << UTF16ToUTF8(descriptor.label());
277
278 MediaStreamExtraData* extra_data =
279 static_cast<MediaStreamExtraData*>(descriptor.extraData());
280 if (extra_data->remote_stream()) {
281 scoped_refptr<WebRtcAudioRenderer> renderer =
282 CreateRemoteAudioRenderer(extra_data->remote_stream());
283
284 if (dependency_factory_->GetWebRtcAudioDevice()->SetRenderer(renderer)) {
285 return renderer;
286 } else {
287 // WebRtcAudioDeviceImpl can only support one renderer.
288 return NULL;
289 }
290 }
291
292 if (extra_data->local_stream()) {
293 // TODO(xians): Implement a WebRtcAudioFIFO to handle the local loopback.
294 return NULL;
295 }
296
297 NOTREACHED();
298 return NULL;
299 }
300
265 // Callback from MediaStreamDispatcher. 301 // Callback from MediaStreamDispatcher.
266 // The requested stream have been generated. 302 // The requested stream have been generated.
267 void MediaStreamImpl::OnStreamGenerated( 303 void MediaStreamImpl::OnStreamGenerated(
268 int request_id, 304 int request_id,
269 const std::string& label, 305 const std::string& label,
270 const media_stream::StreamDeviceInfoArray& audio_array, 306 const media_stream::StreamDeviceInfoArray& audio_array,
271 const media_stream::StreamDeviceInfoArray& video_array) { 307 const media_stream::StreamDeviceInfoArray& video_array) {
272 DCHECK(CalledOnValidThread()); 308 DCHECK(CalledOnValidThread());
273 309
274 WebKit::WebVector<WebKit::WebMediaStreamSource> audio_source_vector( 310 WebKit::WebVector<WebKit::WebMediaStreamSource> audio_source_vector(
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 501
466 DVLOG(1) << "MediaStreamImpl::CreateRemoteVideoDecoder label:" 502 DVLOG(1) << "MediaStreamImpl::CreateRemoteVideoDecoder label:"
467 << stream->label(); 503 << stream->label();
468 504
469 return new RTCVideoDecoder( 505 return new RTCVideoDecoder(
470 message_loop_factory->GetMessageLoop(media::MessageLoopFactory::kDecoder), 506 message_loop_factory->GetMessageLoop(media::MessageLoopFactory::kDecoder),
471 base::MessageLoopProxy::current(), 507 base::MessageLoopProxy::current(),
472 stream->video_tracks()->at(0)); 508 stream->video_tracks()->at(0));
473 } 509 }
474 510
511 scoped_refptr<WebRtcAudioRenderer> MediaStreamImpl::CreateRemoteAudioRenderer(
512 webrtc::MediaStreamInterface* stream) {
513 if (!stream->audio_tracks() || stream->audio_tracks()->count() == 0)
514 return NULL;
515
516 DVLOG(1) << "MediaStreamImpl::CreateRemoteAudioRenderer label:"
517 << stream->label();
518
519 return new WebRtcAudioRenderer();
520 }
521
475 MediaStreamExtraData::MediaStreamExtraData( 522 MediaStreamExtraData::MediaStreamExtraData(
476 webrtc::MediaStreamInterface* remote_stream) 523 webrtc::MediaStreamInterface* remote_stream)
477 : remote_stream_(remote_stream) { 524 : remote_stream_(remote_stream) {
478 } 525 }
479 526
480 MediaStreamExtraData::MediaStreamExtraData( 527 MediaStreamExtraData::MediaStreamExtraData(
481 webrtc::LocalMediaStreamInterface* local_stream) 528 webrtc::LocalMediaStreamInterface* local_stream)
482 : local_stream_(local_stream) { 529 : local_stream_(local_stream) {
483 } 530 }
484 531
485 MediaStreamExtraData::~MediaStreamExtraData() { 532 MediaStreamExtraData::~MediaStreamExtraData() {
486 } 533 }
487 534
488 void MediaStreamExtraData::SetLocalStreamStopCallback( 535 void MediaStreamExtraData::SetLocalStreamStopCallback(
489 const StreamStopCallback& stop_callback) { 536 const StreamStopCallback& stop_callback) {
490 stream_stop_callback_ = stop_callback; 537 stream_stop_callback_ = stop_callback;
491 } 538 }
492 539
493 void MediaStreamExtraData::OnLocalStreamStop() { 540 void MediaStreamExtraData::OnLocalStreamStop() {
494 if (!stream_stop_callback_.is_null()) 541 if (!stream_stop_callback_.is_null())
495 stream_stop_callback_.Run(local_stream_->label()); 542 stream_stop_callback_.Run(local_stream_->label());
496 } 543 }
497 544
498 } // namespace content 545 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698