Commit 1c986af1 authored by xians@chromium.org's avatar xians@chromium.org

Fixed the crash when adding a chromium sink to remote audio track or adding a...

Fixed the crash when adding a chromium sink to remote audio track or adding a track to peerconnection more than once.

NOTRY=true

BUG=396447
TEST=open peerConnection demo, http://googlechrome.github.io/webrtc/samples/web/content/peerconnection/
2. start a call
3. Open JS console and input below codes:
# adding a chromium sink to remote audio track:
var v = new webkitMediaStream();
v.addTrack(pc2.getRemoteStreams()[0].getAudioTracks()[0]);
var a = document.createElement('audio');
a.src = URL.createObjectURL(v);

# add a track to peer connection more than once:
var v = new webkitMediaStream();
v.addTrack(pc2.getRemoteStreams()[0].getAudioTracks()[0]);
pc1.addStream(v);

Review URL: https://codereview.chromium.org/411903002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@285528 0039d316-1c4b-4281-b951-d872f2087c98
parent b75422a3
......@@ -49,13 +49,16 @@ bool MediaStreamTrackMetricsHost::OnMessageReceived(
void MediaStreamTrackMetricsHost::OnAddTrack(uint64 id,
bool is_audio,
bool is_remote) {
DCHECK(tracks_.find(id) == tracks_.end());
if (tracks_.find(id) != tracks_.end())
return;
TrackInfo info = {is_audio, is_remote, base::TimeTicks::Now()};
tracks_[id] = info;
}
void MediaStreamTrackMetricsHost::OnRemoveTrack(uint64 id) {
DCHECK(tracks_.find(id) != tracks_.end());
if (tracks_.find(id) == tracks_.end())
return;
TrackInfo& info = tracks_[id];
ReportDuration(info);
......
......@@ -18,7 +18,11 @@ void MediaStreamAudioSink::AddToAudioTrack(
DCHECK(track.source().type() == blink::WebMediaStreamSource::TypeAudio);
MediaStreamTrack* native_track = MediaStreamTrack::GetTrack(track);
// TODO(xians): Support remote audio track.
DCHECK(native_track->is_local_track());
if (!native_track->is_local_track()) {
LOG(ERROR) << "Can't add the sink to a remote audio track";
return;
}
WebRtcLocalAudioTrack* audio_track =
static_cast<WebRtcLocalAudioTrack*>(native_track);
audio_track->AddSink(sink);
......@@ -29,7 +33,11 @@ void MediaStreamAudioSink::RemoveFromAudioTrack(
const blink::WebMediaStreamTrack& track) {
MediaStreamTrack* native_track = MediaStreamTrack::GetTrack(track);
// TODO(xians): Support remote audio track.
DCHECK(native_track->is_local_track());
if (!native_track->is_local_track()) {
LOG(ERROR) << "Can't remove the sink from a remote audio track";
return;
}
WebRtcLocalAudioTrack* audio_track =
static_cast<WebRtcLocalAudioTrack*>(native_track);
audio_track->RemoveSink(sink);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment