OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 1111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1122 return; | 1122 return; |
1123 } | 1123 } |
1124 | 1124 |
1125 size_t pos = local_streams_.Find(stream); | 1125 size_t pos = local_streams_.Find(stream); |
1126 if (pos == kNotFound) | 1126 if (pos == kNotFound) |
1127 return; | 1127 return; |
1128 | 1128 |
1129 local_streams_.erase(pos); | 1129 local_streams_.erase(pos); |
1130 | 1130 |
1131 peer_handler_->RemoveStream(stream->Descriptor()); | 1131 peer_handler_->RemoveStream(stream->Descriptor()); |
1132 | |
1133 // The senders of removed tracks will have become inactive. | |
1134 RemoveInactiveSenders(); | |
1135 } | 1132 } |
1136 | 1133 |
1137 MediaStreamVector RTCPeerConnection::getLocalStreams() const { | 1134 MediaStreamVector RTCPeerConnection::getLocalStreams() const { |
1138 return local_streams_; | 1135 return local_streams_; |
1139 } | 1136 } |
1140 | 1137 |
1141 MediaStreamVector RTCPeerConnection::getRemoteStreams() const { | 1138 MediaStreamVector RTCPeerConnection::getRemoteStreams() const { |
1142 return remote_streams_; | 1139 return remote_streams_; |
1143 } | 1140 } |
1144 | 1141 |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1291 MediaStreamTrack* RTCPeerConnection::GetRemoteTrackById( | 1288 MediaStreamTrack* RTCPeerConnection::GetRemoteTrackById( |
1292 const String& track_id) const { | 1289 const String& track_id) const { |
1293 for (const auto& remote_stream : remote_streams_) { | 1290 for (const auto& remote_stream : remote_streams_) { |
1294 MediaStreamTrack* track = remote_stream->getTrackById(track_id); | 1291 MediaStreamTrack* track = remote_stream->getTrackById(track_id); |
1295 if (track) | 1292 if (track) |
1296 return track; | 1293 return track; |
1297 } | 1294 } |
1298 return nullptr; | 1295 return nullptr; |
1299 } | 1296 } |
1300 | 1297 |
1301 void RTCPeerConnection::RemoveInactiveSenders() { | |
1302 std::set<uintptr_t> inactive_sender_ids; | |
1303 for (uintptr_t id : rtp_senders_.Keys()) { | |
1304 inactive_sender_ids.insert(id); | |
1305 } | |
1306 for (const auto& web_rtp_sender : peer_handler_->GetSenders()) { | |
1307 inactive_sender_ids.erase(web_rtp_sender->Id()); | |
1308 } | |
1309 for (uintptr_t id : inactive_sender_ids) { | |
1310 rtp_senders_.erase(id); | |
1311 } | |
1312 } | |
1313 | |
1314 void RTCPeerConnection::RemoveInactiveReceivers() { | |
1315 std::set<uintptr_t> inactive_receiver_ids; | |
1316 for (uintptr_t id : rtp_receivers_.Keys()) { | |
1317 inactive_receiver_ids.insert(id); | |
1318 } | |
1319 for (const auto& web_rtp_receiver : peer_handler_->GetReceivers()) { | |
1320 inactive_receiver_ids.erase(web_rtp_receiver->Id()); | |
1321 } | |
1322 for (uintptr_t id : inactive_receiver_ids) { | |
1323 rtp_receivers_.erase(id); | |
1324 } | |
1325 } | |
1326 | |
1327 RTCDTMFSender* RTCPeerConnection::createDTMFSender( | 1298 RTCDTMFSender* RTCPeerConnection::createDTMFSender( |
1328 MediaStreamTrack* track, | 1299 MediaStreamTrack* track, |
1329 ExceptionState& exception_state) { | 1300 ExceptionState& exception_state) { |
1330 if (ThrowExceptionIfSignalingStateClosed(signaling_state_, exception_state)) | 1301 if (ThrowExceptionIfSignalingStateClosed(signaling_state_, exception_state)) |
1331 return nullptr; | 1302 return nullptr; |
1332 | 1303 |
1333 DCHECK(track); | 1304 DCHECK(track); |
1334 | 1305 |
1335 if (!GetLocalTrackById(track->id())) { | 1306 if (!GetLocalTrackById(track->id())) { |
1336 exception_state.ThrowDOMException( | 1307 exception_state.ThrowDOMException( |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1418 MediaStream* stream = static_cast<MediaStream*>(stream_descriptor->Client()); | 1389 MediaStream* stream = static_cast<MediaStream*>(stream_descriptor->Client()); |
1419 stream->StreamEnded(); | 1390 stream->StreamEnded(); |
1420 | 1391 |
1421 if (signaling_state_ == kSignalingStateClosed) | 1392 if (signaling_state_ == kSignalingStateClosed) |
1422 return; | 1393 return; |
1423 | 1394 |
1424 size_t pos = remote_streams_.Find(stream); | 1395 size_t pos = remote_streams_.Find(stream); |
1425 DCHECK(pos != kNotFound); | 1396 DCHECK(pos != kNotFound); |
1426 remote_streams_.erase(pos); | 1397 remote_streams_.erase(pos); |
1427 | 1398 |
1428 // The receivers of removed tracks will have become inactive. | |
1429 RemoveInactiveReceivers(); | |
1430 | |
1431 ScheduleDispatchEvent( | 1399 ScheduleDispatchEvent( |
1432 MediaStreamEvent::Create(EventTypeNames::removestream, stream)); | 1400 MediaStreamEvent::Create(EventTypeNames::removestream, stream)); |
1433 } | 1401 } |
1434 | 1402 |
1435 void RTCPeerConnection::DidAddRemoteDataChannel( | 1403 void RTCPeerConnection::DidAddRemoteDataChannel( |
1436 WebRTCDataChannelHandler* handler) { | 1404 WebRTCDataChannelHandler* handler) { |
1437 DCHECK(!closed_); | 1405 DCHECK(!closed_); |
1438 DCHECK(GetExecutionContext()->IsContextThread()); | 1406 DCHECK(GetExecutionContext()->IsContextThread()); |
1439 | 1407 |
1440 if (signaling_state_ == kSignalingStateClosed) | 1408 if (signaling_state_ == kSignalingStateClosed) |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1602 visitor->Trace(remote_streams_); | 1570 visitor->Trace(remote_streams_); |
1603 visitor->Trace(rtp_senders_); | 1571 visitor->Trace(rtp_senders_); |
1604 visitor->Trace(rtp_receivers_); | 1572 visitor->Trace(rtp_receivers_); |
1605 visitor->Trace(dispatch_scheduled_event_runner_); | 1573 visitor->Trace(dispatch_scheduled_event_runner_); |
1606 visitor->Trace(scheduled_events_); | 1574 visitor->Trace(scheduled_events_); |
1607 EventTargetWithInlineData::Trace(visitor); | 1575 EventTargetWithInlineData::Trace(visitor); |
1608 SuspendableObject::Trace(visitor); | 1576 SuspendableObject::Trace(visitor); |
1609 } | 1577 } |
1610 | 1578 |
1611 } // namespace blink | 1579 } // namespace blink |
OLD | NEW |