OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 14 matching lines...) Expand all Loading... |
25 #include "webrtc/config.h" | 25 #include "webrtc/config.h" |
26 #include "webrtc/logging/rtc_event_log/rtc_event_log.h" | 26 #include "webrtc/logging/rtc_event_log/rtc_event_log.h" |
27 #include "webrtc/modules/audio_coding/codecs/audio_format_conversion.h" | 27 #include "webrtc/modules/audio_coding/codecs/audio_format_conversion.h" |
28 #include "webrtc/modules/audio_device/include/audio_device.h" | 28 #include "webrtc/modules/audio_device/include/audio_device.h" |
29 #include "webrtc/modules/audio_processing/include/audio_processing.h" | 29 #include "webrtc/modules/audio_processing/include/audio_processing.h" |
30 #include "webrtc/modules/include/module_common_types.h" | 30 #include "webrtc/modules/include/module_common_types.h" |
31 #include "webrtc/modules/pacing/packet_router.h" | 31 #include "webrtc/modules/pacing/packet_router.h" |
32 #include "webrtc/modules/rtp_rtcp/include/receive_statistics.h" | 32 #include "webrtc/modules/rtp_rtcp/include/receive_statistics.h" |
33 #include "webrtc/modules/rtp_rtcp/include/rtp_payload_registry.h" | 33 #include "webrtc/modules/rtp_rtcp/include/rtp_payload_registry.h" |
34 #include "webrtc/modules/rtp_rtcp/include/rtp_receiver.h" | 34 #include "webrtc/modules/rtp_rtcp/include/rtp_receiver.h" |
| 35 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_received.h" |
35 #include "webrtc/modules/rtp_rtcp/source/rtp_receiver_strategy.h" | 36 #include "webrtc/modules/rtp_rtcp/source/rtp_receiver_strategy.h" |
36 #include "webrtc/modules/utility/include/process_thread.h" | 37 #include "webrtc/modules/utility/include/process_thread.h" |
37 #include "webrtc/system_wrappers/include/trace.h" | 38 #include "webrtc/system_wrappers/include/trace.h" |
38 #include "webrtc/voice_engine/include/voe_rtp_rtcp.h" | 39 #include "webrtc/voice_engine/include/voe_rtp_rtcp.h" |
39 #include "webrtc/voice_engine/output_mixer.h" | 40 #include "webrtc/voice_engine/output_mixer.h" |
40 #include "webrtc/voice_engine/statistics.h" | 41 #include "webrtc/voice_engine/statistics.h" |
41 #include "webrtc/voice_engine/transmit_mixer.h" | 42 #include "webrtc/voice_engine/transmit_mixer.h" |
42 #include "webrtc/voice_engine/utility.h" | 43 #include "webrtc/voice_engine/utility.h" |
43 | 44 |
44 namespace webrtc { | 45 namespace webrtc { |
(...skipping 1499 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1544 _engineStatisticsPtr->SetLastError( | 1545 _engineStatisticsPtr->SetLastError( |
1545 VE_INVALID_OPERATION, kTraceWarning, | 1546 VE_INVALID_OPERATION, kTraceWarning, |
1546 "DeRegisterExternalTransport() external transport already " | 1547 "DeRegisterExternalTransport() external transport already " |
1547 "disabled"); | 1548 "disabled"); |
1548 } | 1549 } |
1549 _externalTransport = false; | 1550 _externalTransport = false; |
1550 _transportPtr = NULL; | 1551 _transportPtr = NULL; |
1551 return 0; | 1552 return 0; |
1552 } | 1553 } |
1553 | 1554 |
| 1555 // TODO(nisse): Delete this method together with ReceivedRTPPacket. |
| 1556 // It's a temporary hack to support both ReceivedRTPPacket and |
| 1557 // OnRtpPacket interfaces without too much code duplication. |
| 1558 bool Channel::OnRtpPacketWithHeader(const uint8_t* received_packet, |
| 1559 size_t length, |
| 1560 RTPHeader *header) { |
| 1561 // Store playout timestamp for the received RTP packet |
| 1562 UpdatePlayoutTimestamp(false); |
| 1563 |
| 1564 header->payload_type_frequency = |
| 1565 rtp_payload_registry_->GetPayloadTypeFrequency(header->payloadType); |
| 1566 if (header->payload_type_frequency < 0) |
| 1567 return false; |
| 1568 bool in_order = IsPacketInOrder(*header); |
| 1569 rtp_receive_statistics_->IncomingPacket( |
| 1570 *header, length, IsPacketRetransmitted(*header, in_order)); |
| 1571 rtp_payload_registry_->SetIncomingPayloadType(*header); |
| 1572 |
| 1573 return ReceivePacket(received_packet, length, *header, in_order); |
| 1574 } |
| 1575 |
1554 int32_t Channel::ReceivedRTPPacket(const uint8_t* received_packet, | 1576 int32_t Channel::ReceivedRTPPacket(const uint8_t* received_packet, |
1555 size_t length, | 1577 size_t length, |
1556 const PacketTime& packet_time) { | 1578 const PacketTime& packet_time) { |
1557 WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, _channelId), | 1579 WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, _channelId), |
1558 "Channel::ReceivedRTPPacket()"); | 1580 "Channel::ReceivedRTPPacket()"); |
1559 | 1581 |
1560 // Store playout timestamp for the received RTP packet | |
1561 UpdatePlayoutTimestamp(false); | |
1562 | |
1563 RTPHeader header; | 1582 RTPHeader header; |
1564 if (!rtp_header_parser_->Parse(received_packet, length, &header)) { | 1583 if (!rtp_header_parser_->Parse(received_packet, length, &header)) { |
1565 WEBRTC_TRACE(webrtc::kTraceDebug, webrtc::kTraceVoice, _channelId, | 1584 WEBRTC_TRACE(webrtc::kTraceDebug, webrtc::kTraceVoice, _channelId, |
1566 "Incoming packet: invalid RTP header"); | 1585 "Incoming packet: invalid RTP header"); |
1567 return -1; | 1586 return -1; |
1568 } | 1587 } |
1569 header.payload_type_frequency = | 1588 return OnRtpPacketWithHeader(received_packet, length, &header) ? 0 : -1; |
1570 rtp_payload_registry_->GetPayloadTypeFrequency(header.payloadType); | 1589 } |
1571 if (header.payload_type_frequency < 0) | |
1572 return -1; | |
1573 bool in_order = IsPacketInOrder(header); | |
1574 rtp_receive_statistics_->IncomingPacket( | |
1575 header, length, IsPacketRetransmitted(header, in_order)); | |
1576 rtp_payload_registry_->SetIncomingPayloadType(header); | |
1577 | 1590 |
1578 return ReceivePacket(received_packet, length, header, in_order) ? 0 : -1; | 1591 void Channel::OnRtpPacket(const RtpPacketReceived& packet) { |
| 1592 WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, _channelId), |
| 1593 "Channel::ReceivedRTPPacket()"); |
| 1594 |
| 1595 RTPHeader header; |
| 1596 packet.GetHeader(&header); |
| 1597 OnRtpPacketWithHeader(packet.data(), packet.size(), &header); |
1579 } | 1598 } |
1580 | 1599 |
1581 bool Channel::ReceivePacket(const uint8_t* packet, | 1600 bool Channel::ReceivePacket(const uint8_t* packet, |
1582 size_t packet_length, | 1601 size_t packet_length, |
1583 const RTPHeader& header, | 1602 const RTPHeader& header, |
1584 bool in_order) { | 1603 bool in_order) { |
1585 if (rtp_payload_registry_->IsRtx(header)) { | 1604 if (rtp_payload_registry_->IsRtx(header)) { |
1586 return HandleRtxPacket(packet, packet_length, header); | 1605 return HandleRtxPacket(packet, packet_length, header); |
1587 } | 1606 } |
1588 const uint8_t* payload = packet + header.headerLength; | 1607 const uint8_t* payload = packet + header.headerLength; |
(...skipping 1460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3049 int64_t min_rtt = 0; | 3068 int64_t min_rtt = 0; |
3050 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) != | 3069 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) != |
3051 0) { | 3070 0) { |
3052 return 0; | 3071 return 0; |
3053 } | 3072 } |
3054 return rtt; | 3073 return rtt; |
3055 } | 3074 } |
3056 | 3075 |
3057 } // namespace voe | 3076 } // namespace voe |
3058 } // namespace webrtc | 3077 } // namespace webrtc |
OLD | NEW |