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

Unified Diff: content/renderer/media/media_stream_impl.cc

Issue 11783059: Ensures that WebRTC works for device selection using a different sample rate than default (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix after review from Chris Created 7 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/media/media_stream_impl.h ('k') | content/renderer/media/media_stream_source_extra_data.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/media/media_stream_impl.cc
diff --git a/content/renderer/media/media_stream_impl.cc b/content/renderer/media/media_stream_impl.cc
index f0315b90f0617d28d0155ff12a12bcbfb59647d9..355765b8d66ad015f3a9e79960080f6714b96838 100644
--- a/content/renderer/media/media_stream_impl.cc
+++ b/content/renderer/media/media_stream_impl.cc
@@ -68,22 +68,6 @@ void UpdateOptionsIfTabMediaRequest(
}
}
-// Get session ID for the selected microphone to ensure that we start
-// capturing audio using the correct input device.
-static int GetSessionId(const WebKit::WebMediaStreamSource& source) {
- MediaStreamSourceExtraData* source_data =
- static_cast<MediaStreamSourceExtraData*>(source.extraData());
- if (!source_data) {
- // TODO(henrika): Implement support for sources from remote MediaStreams.
- NOTIMPLEMENTED();
- return -1;
- }
- DVLOG(1) << "local audio track source name: "
- << source_data->device_info().device.name;
-
- return source_data->device_info().session_id;
-}
-
static int g_next_request_id = 0;
// Creates a WebKit representation of a stream sources based on
@@ -305,38 +289,8 @@ MediaStreamImpl::GetAudioRenderer(const GURL& url) {
// WebRtcAudioDeviceImpl can only support one renderer.
return NULL;
} else if (extra_data->local_stream()) {
- DVLOG(1) << "creating local audio renderer for stream:"
- << extra_data->local_stream()->label();
-
- WebKit::WebVector<WebKit::WebMediaStreamComponent> audio_components;
- descriptor.audioSources(audio_components);
- if (audio_components.size() != 1) {
- // TODO(henrika): add support for more than one audio track.
- LOG(WARNING) << "Multiple MediaStream audio tracks not supported";
- return NULL;
- }
-
- if (!audio_components[0].isEnabled()) {
- DVLOG(1) << "audio track is disabled";
- return NULL;
- }
-
- int session_id = 0;
- const WebKit::WebMediaStreamSource& source = audio_components[0].source();
- if (!source.requiresAudioConsumer()) {
- session_id = GetSessionId(source);
- if (session_id == -1) {
- return NULL;
- }
- } else {
- DVLOG(1) << "WebAudio MediaStream is detected";
- session_id = -1;
- }
-
- // Create the local audio renderer using the specified session ID.
- scoped_refptr<WebRtcLocalAudioRenderer> local_renderer =
- CreateLocalAudioRenderer(session_id);
- return local_renderer;
+ // Create the local audio renderer if the stream contains audio tracks.
+ return CreateLocalAudioRenderer(extra_data->local_stream());
}
NOTREACHED();
@@ -351,8 +305,7 @@ void MediaStreamImpl::OnStreamGenerated(
const StreamDeviceInfoArray& audio_array,
const StreamDeviceInfoArray& video_array) {
DCHECK(CalledOnValidThread());
- DVLOG(1) << "MediaStreamImpl::OnStreamGenerated("
- << request_id << "," << label << ")";
+ DVLOG(1) << "MediaStreamImpl::OnStreamGenerated stream:" << label;
UserMediaRequestInfo* request_info = FindUserMediaRequestInfo(request_id);
if (!request_info) {
@@ -419,6 +372,8 @@ void MediaStreamImpl::OnStreamGenerationFailed(int request_id) {
void MediaStreamImpl::OnCreateNativeSourcesComplete(
WebKit::WebMediaStreamDescriptor* description,
bool request_succeeded) {
+ DVLOG(1) << "MediaStreamImpl::OnCreateNativeSourcesComplete stream:"
+ << UTF16ToUTF8(description->label());
UserMediaRequestInfo* request_info = FindUserMediaRequestInfo(description);
if (!request_info) {
// This can happen if the request is canceled or the frame reloads while
@@ -605,20 +560,20 @@ scoped_refptr<WebRtcAudioRenderer> MediaStreamImpl::CreateRemoteAudioRenderer(
}
scoped_refptr<WebRtcLocalAudioRenderer>
-MediaStreamImpl::CreateLocalAudioRenderer(int session_id) {
- // Ensure that the existing capturer reads data from the selected microphone.
+MediaStreamImpl::CreateLocalAudioRenderer(
+ webrtc::MediaStreamInterface* stream) {
+ if (!stream->audio_tracks() || stream->audio_tracks()->count() == 0)
+ return NULL;
+
+ DVLOG(1) << "MediaStreamImpl::CreateLocalAudioRenderer label:"
+ << stream->label();
+
scoped_refptr<WebRtcAudioCapturer> source =
dependency_factory_->GetWebRtcAudioDevice()->capturer();
if (!source) {
- // The WebRtcAudioCapturer instance can be NULL e.g. if an unsupported
- // sample rate is used.
- // TODO(henrika): extend support of capture sample rates.
return NULL;
}
- if (session_id != -1)
- source->SetDevice(session_id);
-
// Create a new WebRtcLocalAudioRenderer instance and connect it to the
// existing WebRtcAudioCapturer so that the renderer can use it as source.
return new WebRtcLocalAudioRenderer(source, RenderViewObserver::routing_id());
@@ -629,6 +584,11 @@ MediaStreamSourceExtraData::MediaStreamSourceExtraData(
: device_info_(device_info) {
}
+MediaStreamSourceExtraData::MediaStreamSourceExtraData(
+ media::AudioCapturerSource* source)
+ : audio_source_(source) {
+}
+
MediaStreamSourceExtraData::~MediaStreamSourceExtraData() {}
MediaStreamExtraData::MediaStreamExtraData(
« no previous file with comments | « content/renderer/media/media_stream_impl.h ('k') | content/renderer/media/media_stream_source_extra_data.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698