rtp_packet_received.cc (3362B)
1 /* 2 * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "modules/rtp_rtcp/source/rtp_packet_received.h" 12 13 #include <cstddef> 14 #include <cstdint> 15 #include <vector> 16 17 #include "api/rtp_headers.h" 18 #include "api/units/timestamp.h" 19 #include "modules/rtp_rtcp/source/rtp_header_extensions.h" 20 #include "modules/rtp_rtcp/source/rtp_packet.h" 21 #include "rtc_base/numerics/safe_conversions.h" 22 23 namespace webrtc { 24 25 RtpPacketReceived::RtpPacketReceived() = default; 26 RtpPacketReceived::RtpPacketReceived( 27 const ExtensionManager* extensions, 28 class Timestamp arrival_time /*= Timestamp::MinusInfinity()*/) 29 : RtpPacket(extensions), arrival_time_(arrival_time) {} 30 RtpPacketReceived::RtpPacketReceived(const RtpPacketReceived& packet) = default; 31 RtpPacketReceived::RtpPacketReceived(RtpPacketReceived&& packet) = default; 32 33 RtpPacketReceived& RtpPacketReceived::operator=( 34 const RtpPacketReceived& packet) = default; 35 RtpPacketReceived& RtpPacketReceived::operator=(RtpPacketReceived&& packet) = 36 default; 37 38 RtpPacketReceived::~RtpPacketReceived() {} 39 40 void RtpPacketReceived::GetHeader(RTPHeader* header) const { 41 header->markerBit = Marker(); 42 header->payloadType = PayloadType(); 43 header->sequenceNumber = SequenceNumber(); 44 header->timestamp = Timestamp(); 45 header->ssrc = Ssrc(); 46 std::vector<uint32_t> csrcs = Csrcs(); 47 header->numCSRCs = dchecked_cast<uint8_t>(csrcs.size()); 48 for (size_t i = 0; i < csrcs.size(); ++i) { 49 header->arrOfCSRCs[i] = csrcs[i]; 50 } 51 header->paddingLength = padding_size(); 52 header->headerLength = headers_size(); 53 header->extension.hasTransmissionTimeOffset = 54 GetExtension<TransmissionOffset>( 55 &header->extension.transmissionTimeOffset); 56 header->extension.hasAbsoluteSendTime = 57 GetExtension<AbsoluteSendTime>(&header->extension.absoluteSendTime); 58 header->extension.absolute_capture_time = 59 GetExtension<AbsoluteCaptureTimeExtension>(); 60 header->extension.hasTransportSequenceNumber = 61 GetExtension<TransportSequenceNumberV2>( 62 &header->extension.transportSequenceNumber, 63 &header->extension.feedback_request) || 64 GetExtension<TransportSequenceNumber>( 65 &header->extension.transportSequenceNumber); 66 header->extension.set_audio_level(GetExtension<AudioLevelExtension>()); 67 header->extension.hasVideoRotation = 68 GetExtension<VideoOrientation>(&header->extension.videoRotation); 69 header->extension.hasVideoContentType = 70 GetExtension<VideoContentTypeExtension>( 71 &header->extension.videoContentType); 72 header->extension.has_video_timing = 73 GetExtension<VideoTimingExtension>(&header->extension.video_timing); 74 GetExtension<RtpStreamId>(&header->extension.stream_id); 75 GetExtension<RepairedRtpStreamId>(&header->extension.repaired_stream_id); 76 GetExtension<RtpMid>(&header->extension.mid); 77 GetExtension<PlayoutDelayLimits>(&header->extension.playout_delay); 78 header->extension.color_space = GetExtension<ColorSpaceExtension>(); 79 } 80 81 } // namespace webrtc