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 <stddef.h> 14 15 #include <cstdint> 16 #include <vector> 17 18 #include "modules/rtp_rtcp/source/rtp_header_extensions.h" 19 #include "rtc_base/numerics/safe_conversions.h" 20 21 namespace webrtc { 22 23 RtpPacketReceived::RtpPacketReceived() = default; RtpPacketReceived(const ExtensionManager * extensions,webrtc::Timestamp arrival_time)24RtpPacketReceived::RtpPacketReceived( 25 const ExtensionManager* extensions, 26 webrtc::Timestamp arrival_time /*= webrtc::Timestamp::MinusInfinity()*/) 27 : RtpPacket(extensions), arrival_time_(arrival_time) {} 28 RtpPacketReceived::RtpPacketReceived(const RtpPacketReceived& packet) = default; 29 RtpPacketReceived::RtpPacketReceived(RtpPacketReceived&& packet) = default; 30 31 RtpPacketReceived& RtpPacketReceived::operator=( 32 const RtpPacketReceived& packet) = default; 33 RtpPacketReceived& RtpPacketReceived::operator=(RtpPacketReceived&& packet) = 34 default; 35 ~RtpPacketReceived()36RtpPacketReceived::~RtpPacketReceived() {} 37 GetHeader(RTPHeader * header) const38void RtpPacketReceived::GetHeader(RTPHeader* header) const { 39 header->markerBit = Marker(); 40 header->payloadType = PayloadType(); 41 header->sequenceNumber = SequenceNumber(); 42 header->timestamp = Timestamp(); 43 header->ssrc = Ssrc(); 44 std::vector<uint32_t> csrcs = Csrcs(); 45 header->numCSRCs = rtc::dchecked_cast<uint8_t>(csrcs.size()); 46 for (size_t i = 0; i < csrcs.size(); ++i) { 47 header->arrOfCSRCs[i] = csrcs[i]; 48 } 49 header->paddingLength = padding_size(); 50 header->headerLength = headers_size(); 51 header->payload_type_frequency = payload_type_frequency(); 52 header->extension.hasTransmissionTimeOffset = 53 GetExtension<TransmissionOffset>( 54 &header->extension.transmissionTimeOffset); 55 header->extension.hasAbsoluteSendTime = 56 GetExtension<AbsoluteSendTime>(&header->extension.absoluteSendTime); 57 header->extension.absolute_capture_time = 58 GetExtension<AbsoluteCaptureTimeExtension>(); 59 header->extension.hasTransportSequenceNumber = 60 GetExtension<TransportSequenceNumberV2>( 61 &header->extension.transportSequenceNumber, 62 &header->extension.feedback_request) || 63 GetExtension<TransportSequenceNumber>( 64 &header->extension.transportSequenceNumber); 65 header->extension.hasAudioLevel = GetExtension<AudioLevel>( 66 &header->extension.voiceActivity, &header->extension.audioLevel); 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 82