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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 #include "modules/peerconnection/RTCRtpReceiver.h" | 68 #include "modules/peerconnection/RTCRtpReceiver.h" |
69 #include "modules/peerconnection/RTCRtpSender.h" | 69 #include "modules/peerconnection/RTCRtpSender.h" |
70 #include "modules/peerconnection/RTCSessionDescription.h" | 70 #include "modules/peerconnection/RTCSessionDescription.h" |
71 #include "modules/peerconnection/RTCSessionDescriptionCallback.h" | 71 #include "modules/peerconnection/RTCSessionDescriptionCallback.h" |
72 #include "modules/peerconnection/RTCSessionDescriptionInit.h" | 72 #include "modules/peerconnection/RTCSessionDescriptionInit.h" |
73 #include "modules/peerconnection/RTCSessionDescriptionRequestImpl.h" | 73 #include "modules/peerconnection/RTCSessionDescriptionRequestImpl.h" |
74 #include "modules/peerconnection/RTCSessionDescriptionRequestPromiseImpl.h" | 74 #include "modules/peerconnection/RTCSessionDescriptionRequestPromiseImpl.h" |
75 #include "modules/peerconnection/RTCStatsCallback.h" | 75 #include "modules/peerconnection/RTCStatsCallback.h" |
76 #include "modules/peerconnection/RTCStatsReport.h" | 76 #include "modules/peerconnection/RTCStatsReport.h" |
77 #include "modules/peerconnection/RTCStatsRequestImpl.h" | 77 #include "modules/peerconnection/RTCStatsRequestImpl.h" |
| 78 #include "modules/peerconnection/RTCTrackEvent.h" |
78 #include "modules/peerconnection/RTCVoidRequestImpl.h" | 79 #include "modules/peerconnection/RTCVoidRequestImpl.h" |
79 #include "modules/peerconnection/RTCVoidRequestPromiseImpl.h" | 80 #include "modules/peerconnection/RTCVoidRequestPromiseImpl.h" |
80 #include "platform/RuntimeEnabledFeatures.h" | 81 #include "platform/RuntimeEnabledFeatures.h" |
81 #include "platform/bindings/Microtask.h" | 82 #include "platform/bindings/Microtask.h" |
82 #include "platform/bindings/ScriptState.h" | 83 #include "platform/bindings/ScriptState.h" |
83 #include "platform/bindings/V8ThrowException.h" | 84 #include "platform/bindings/V8ThrowException.h" |
84 #include "platform/peerconnection/RTCAnswerOptionsPlatform.h" | 85 #include "platform/peerconnection/RTCAnswerOptionsPlatform.h" |
85 #include "platform/peerconnection/RTCOfferOptionsPlatform.h" | 86 #include "platform/peerconnection/RTCOfferOptionsPlatform.h" |
86 #include "platform/wtf/CurrentTime.h" | 87 #include "platform/wtf/CurrentTime.h" |
87 #include "platform/wtf/PtrUtil.h" | 88 #include "platform/wtf/PtrUtil.h" |
(...skipping 1348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1436 } | 1437 } |
1437 | 1438 |
1438 void RTCPeerConnection::DidChangeICEConnectionState( | 1439 void RTCPeerConnection::DidChangeICEConnectionState( |
1439 ICEConnectionState new_state) { | 1440 ICEConnectionState new_state) { |
1440 DCHECK(!closed_); | 1441 DCHECK(!closed_); |
1441 DCHECK(GetExecutionContext()->IsContextThread()); | 1442 DCHECK(GetExecutionContext()->IsContextThread()); |
1442 ChangeIceConnectionState(new_state); | 1443 ChangeIceConnectionState(new_state); |
1443 } | 1444 } |
1444 | 1445 |
1445 void RTCPeerConnection::DidAddRemoteStream( | 1446 void RTCPeerConnection::DidAddRemoteStream( |
1446 const WebMediaStream& remote_stream) { | 1447 const WebMediaStream& remote_stream, |
| 1448 WebVector<std::unique_ptr<WebRTCRtpReceiver>>* stream_web_rtp_receivers) { |
1447 DCHECK(!closed_); | 1449 DCHECK(!closed_); |
1448 DCHECK(GetExecutionContext()->IsContextThread()); | 1450 DCHECK(GetExecutionContext()->IsContextThread()); |
1449 | 1451 |
1450 if (signaling_state_ == kSignalingStateClosed) | 1452 if (signaling_state_ == kSignalingStateClosed) |
1451 return; | 1453 return; |
1452 | 1454 |
1453 MediaStream* stream = | 1455 MediaStream* stream = |
1454 MediaStream::Create(GetExecutionContext(), remote_stream); | 1456 MediaStream::Create(GetExecutionContext(), remote_stream); |
1455 remote_streams_.push_back(stream); | 1457 remote_streams_.push_back(stream); |
1456 stream->RegisterObserver(this); | 1458 stream->RegisterObserver(this); |
1457 for (auto& track : stream->getTracks()) { | 1459 for (auto& track : stream->getTracks()) { |
1458 DCHECK(track->Component()); | 1460 DCHECK(track->Component()); |
1459 tracks_.insert(track->Component(), track); | 1461 tracks_.insert(track->Component(), track); |
1460 } | 1462 } |
1461 | 1463 |
1462 ScheduleDispatchEvent( | 1464 ScheduleDispatchEvent( |
1463 MediaStreamEvent::Create(EventTypeNames::addstream, stream)); | 1465 MediaStreamEvent::Create(EventTypeNames::addstream, stream)); |
| 1466 |
| 1467 // TODO(hbos): ... |
| 1468 HeapVector<Member<MediaStream>> streams(1, stream); |
| 1469 for (auto& track : stream->getTracks()) { |
| 1470 std::unique_ptr<WebRTCRtpReceiver> track_web_rtp_receiver; |
| 1471 for (auto& web_rtp_receiver : *stream_web_rtp_receivers) { |
| 1472 if (static_cast<String>(web_rtp_receiver->Track().Id()) == track->id()) { |
| 1473 track_web_rtp_receiver.reset(web_rtp_receiver.release()); |
| 1474 break; |
| 1475 } |
| 1476 } |
| 1477 DCHECK(track_web_rtp_receiver); |
| 1478 uintptr_t id = track_web_rtp_receiver->Id(); |
| 1479 RTCRtpReceiver* track_rtp_receiver = nullptr; |
| 1480 const auto it = rtp_receivers_.find(id); |
| 1481 if (it != rtp_receivers_.end()) { |
| 1482 track_rtp_receiver = it->value; |
| 1483 } else { |
| 1484 // There does not exist a |RTCRtpReceiver| for this |WebRTCRtpReceiver| |
| 1485 // yet, create it. |
| 1486 MediaStreamTrack* track = GetTrack(track_web_rtp_receiver->Track()); |
| 1487 DCHECK(track); |
| 1488 track_rtp_receiver = |
| 1489 new RTCRtpReceiver(std::move(track_web_rtp_receiver), track); |
| 1490 rtp_receivers_.insert(id, track_rtp_receiver); |
| 1491 } |
| 1492 ScheduleDispatchEvent( |
| 1493 new RTCTrackEvent(track_rtp_receiver, track, streams)); |
| 1494 } |
1464 } | 1495 } |
1465 | 1496 |
1466 void RTCPeerConnection::DidRemoveRemoteStream( | 1497 void RTCPeerConnection::DidRemoveRemoteStream( |
1467 const WebMediaStream& remote_stream) { | 1498 const WebMediaStream& remote_stream) { |
1468 DCHECK(!closed_); | 1499 DCHECK(!closed_); |
1469 DCHECK(GetExecutionContext()->IsContextThread()); | 1500 DCHECK(GetExecutionContext()->IsContextThread()); |
1470 | 1501 |
1471 MediaStreamDescriptor* stream_descriptor = remote_stream; | 1502 MediaStreamDescriptor* stream_descriptor = remote_stream; |
1472 DCHECK(stream_descriptor->Client()); | 1503 DCHECK(stream_descriptor->Client()); |
1473 | 1504 |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1655 visitor->Trace(rtp_senders_); | 1686 visitor->Trace(rtp_senders_); |
1656 visitor->Trace(rtp_receivers_); | 1687 visitor->Trace(rtp_receivers_); |
1657 visitor->Trace(dispatch_scheduled_event_runner_); | 1688 visitor->Trace(dispatch_scheduled_event_runner_); |
1658 visitor->Trace(scheduled_events_); | 1689 visitor->Trace(scheduled_events_); |
1659 EventTargetWithInlineData::Trace(visitor); | 1690 EventTargetWithInlineData::Trace(visitor); |
1660 SuspendableObject::Trace(visitor); | 1691 SuspendableObject::Trace(visitor); |
1661 MediaStreamObserver::Trace(visitor); | 1692 MediaStreamObserver::Trace(visitor); |
1662 } | 1693 } |
1663 | 1694 |
1664 } // namespace blink | 1695 } // namespace blink |
OLD | NEW |