| /* | |
| * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. | |
| * | |
| * Use of this source code is governed by a BSD-style license | |
| * that can be found in the LICENSE file in the root of the source | |
| * tree. An additional intellectual property rights grant can be found | |
| * in the file PATENTS. All contributing project authors may | |
| * be found in the AUTHORS file in the root of the source tree. | |
| */ | |
| #include "modules/rtp_rtcp/source/rtp_packet_received.h" | |
| #include <cstddef> | |
| #include <cstdint> | |
| #include <vector> | |
| #include "api/rtp_headers.h" | |
| #include "api/units/timestamp.h" | |
| #include "modules/rtp_rtcp/source/rtp_header_extensions.h" | |
| #include "modules/rtp_rtcp/source/rtp_packet.h" | |
| #include "rtc_base/numerics/safe_conversions.h" | |
| namespace webrtc { | |
| RtpPacketReceived::RtpPacketReceived() = default; | |
| RtpPacketReceived::RtpPacketReceived( | |
| const ExtensionManager* extensions, | |
| class Timestamp arrival_time /*= Timestamp::MinusInfinity()*/) | |
| : RtpPacket(extensions), arrival_time_(arrival_time) {} | |
| RtpPacketReceived::RtpPacketReceived(const RtpPacketReceived& packet) = default; | |
| RtpPacketReceived::RtpPacketReceived(RtpPacketReceived&& packet) = default; | |
| RtpPacketReceived& RtpPacketReceived::operator=( | |
| const RtpPacketReceived& packet) = default; | |
| RtpPacketReceived& RtpPacketReceived::operator=(RtpPacketReceived&& packet) = | |
| default; | |
| RtpPacketReceived::~RtpPacketReceived() {} | |
| void RtpPacketReceived::GetHeader(RTPHeader* header) const { | |
| header->markerBit = Marker(); | |
| header->payloadType = PayloadType(); | |
| header->sequenceNumber = SequenceNumber(); | |
| header->timestamp = Timestamp(); | |
| header->ssrc = Ssrc(); | |
| std::vector<uint32_t> csrcs = Csrcs(); | |
| header->numCSRCs = dchecked_cast<uint8_t>(csrcs.size()); | |
| for (size_t i = 0; i < csrcs.size(); ++i) { | |
| header->arrOfCSRCs[i] = csrcs[i]; | |
| } | |
| header->paddingLength = padding_size(); | |
| header->headerLength = headers_size(); | |
| header->extension.hasTransmissionTimeOffset = | |
| GetExtension<TransmissionOffset>( | |
| &header->extension.transmissionTimeOffset); | |
| header->extension.hasAbsoluteSendTime = | |
| GetExtension<AbsoluteSendTime>(&header->extension.absoluteSendTime); | |
| header->extension.absolute_capture_time = | |
| GetExtension<AbsoluteCaptureTimeExtension>(); | |
| header->extension.hasTransportSequenceNumber = | |
| GetExtension<TransportSequenceNumberV2>( | |
| &header->extension.transportSequenceNumber, | |
| &header->extension.feedback_request) || | |
| GetExtension<TransportSequenceNumber>( | |
| &header->extension.transportSequenceNumber); | |
| header->extension.set_audio_level(GetExtension<AudioLevelExtension>()); | |
| header->extension.hasVideoRotation = | |
| GetExtension<VideoOrientation>(&header->extension.videoRotation); | |
| header->extension.hasVideoContentType = | |
| GetExtension<VideoContentTypeExtension>( | |
| &header->extension.videoContentType); | |
| header->extension.has_video_timing = | |
| GetExtension<VideoTimingExtension>(&header->extension.video_timing); | |
| GetExtension<RtpStreamId>(&header->extension.stream_id); | |
| GetExtension<RepairedRtpStreamId>(&header->extension.repaired_stream_id); | |
| GetExtension<RtpMid>(&header->extension.mid); | |
| GetExtension<PlayoutDelayLimits>(&header->extension.playout_delay); | |
| header->extension.color_space = GetExtension<ColorSpaceExtension>(); | |
| } | |
| } // namespace webrtc |