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

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

Issue 1512273002: Handle the case when a mediastream track doesn't have extra data. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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_renderer_factory_impl.h" 5 #include "content/renderer/media/media_stream_renderer_factory_impl.h"
6 6
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "content/renderer/media/media_stream.h" 8 #include "content/renderer/media/media_stream.h"
9 #include "content/renderer/media/media_stream_video_renderer_sink.h" 9 #include "content/renderer/media/media_stream_video_renderer_sink.h"
10 #include "content/renderer/media/media_stream_video_track.h" 10 #include "content/renderer/media/media_stream_video_track.h"
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 DVLOG(1) << "MediaStreamRendererFactoryImpl::GetAudioRenderer stream:" 134 DVLOG(1) << "MediaStreamRendererFactoryImpl::GetAudioRenderer stream:"
135 << base::UTF16ToUTF8(base::StringPiece16(web_stream.id())); 135 << base::UTF16ToUTF8(base::StringPiece16(web_stream.id()));
136 136
137 // TODO(tommi): We need to fix the data flow so that 137 // TODO(tommi): We need to fix the data flow so that
138 // it works the same way for all track implementations, local, remote or what 138 // it works the same way for all track implementations, local, remote or what
139 // have you. 139 // have you.
140 // In this function, we should simply create a renderer object that receives 140 // In this function, we should simply create a renderer object that receives
141 // and mixes audio from all the tracks that belong to the media stream. 141 // and mixes audio from all the tracks that belong to the media stream.
142 // For now, we have separate renderers depending on if the first audio track 142 // For now, we have separate renderers depending on if the first audio track
143 // in the stream is local or remote. 143 // in the stream is local or remote.
144 if (MediaStreamTrack::GetTrack(audio_tracks[0])->is_local_track()) { 144 MediaStreamTrack* audio_track = MediaStreamTrack::GetTrack(audio_tracks[0]);
145 if (!audio_track) {
146 // This can happen if the track was cloned.
147 // TODO(tommi, perkj): Fix cloning of tracks to handle extra data too.
perkj_chrome 2015/12/10 12:44:44 Is this an audio track problem in general or only
tommi (sloooow) - chröme 2015/12/10 13:37:37 In general and I don't think this is an issue with
148 LOG(ERROR) << "No native track for WebMediaStreamTrack.";
149 return nullptr;
150 }
151
152 if (audio_track->is_local_track()) {
145 // TODO(xians): Add support for the case where the media stream contains 153 // TODO(xians): Add support for the case where the media stream contains
146 // multiple audio tracks. 154 // multiple audio tracks.
147 return CreateLocalAudioRenderer(audio_tracks[0], render_frame_id, device_id, 155 return CreateLocalAudioRenderer(audio_tracks[0], render_frame_id, device_id,
148 security_origin); 156 security_origin);
149 } 157 }
150 158
151 // This is a remote WebRTC media stream. 159 // This is a remote WebRTC media stream.
152 WebRtcAudioDeviceImpl* audio_device = 160 WebRtcAudioDeviceImpl* audio_device =
153 GetPeerConnectionDependencyFactory()->GetWebRtcAudioDevice(); 161 GetPeerConnectionDependencyFactory()->GetWebRtcAudioDevice();
154 162
155 // Share the existing renderer if any, otherwise create a new one. 163 // Share the existing renderer if any, otherwise create a new one.
156 scoped_refptr<WebRtcAudioRenderer> renderer(audio_device->renderer()); 164 scoped_refptr<WebRtcAudioRenderer> renderer(audio_device->renderer());
157 if (!renderer.get()) { 165 if (!renderer.get()) {
158 renderer = CreateRemoteAudioRenderer(web_stream, render_frame_id, 166 renderer = CreateRemoteAudioRenderer(web_stream, render_frame_id,
159 device_id, security_origin); 167 device_id, security_origin);
160 168
161 if (renderer.get() && !audio_device->SetAudioRenderer(renderer.get())) 169 if (renderer.get() && !audio_device->SetAudioRenderer(renderer.get()))
162 renderer = NULL; 170 renderer = NULL;
163 } 171 }
164 172
165 return renderer.get() ? renderer->CreateSharedAudioRendererProxy(web_stream) 173 return renderer.get() ? renderer->CreateSharedAudioRendererProxy(web_stream)
166 : NULL; 174 : NULL;
167 } 175 }
168 176
169 } // namespace content 177 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698