|  | /* | 
|  | *  Copyright (c) 2019 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 "api/rtp_packet_info.h" | 
|  |  | 
|  | #include <stddef.h> | 
|  |  | 
|  | #include <algorithm> | 
|  | #include <cstdint> | 
|  | #include <utility> | 
|  | #include <vector> | 
|  |  | 
|  | #include "api/rtp_headers.h" | 
|  | #include "api/units/timestamp.h" | 
|  |  | 
|  | namespace webrtc { | 
|  |  | 
|  | RtpPacketInfo::RtpPacketInfo() | 
|  | : ssrc_(0), rtp_timestamp_(0), receive_time_(Timestamp::MinusInfinity()) {} | 
|  |  | 
|  | RtpPacketInfo::RtpPacketInfo(uint32_t ssrc, | 
|  | std::vector<uint32_t> csrcs, | 
|  | uint32_t rtp_timestamp, | 
|  | Timestamp receive_time) | 
|  | : ssrc_(ssrc), | 
|  | csrcs_(std::move(csrcs)), | 
|  | rtp_timestamp_(rtp_timestamp), | 
|  | receive_time_(receive_time) {} | 
|  |  | 
|  | RtpPacketInfo::RtpPacketInfo(const RTPHeader& rtp_header, | 
|  | Timestamp receive_time) | 
|  | : ssrc_(rtp_header.ssrc), | 
|  | rtp_timestamp_(rtp_header.timestamp), | 
|  | receive_time_(receive_time) { | 
|  | const auto& extension = rtp_header.extension; | 
|  | const auto csrcs_count = std::min<size_t>(rtp_header.numCSRCs, kRtpCsrcSize); | 
|  |  | 
|  | csrcs_.assign(&rtp_header.arrOfCSRCs[0], &rtp_header.arrOfCSRCs[csrcs_count]); | 
|  |  | 
|  | if (extension.audio_level()) { | 
|  | audio_level_ = extension.audio_level()->level(); | 
|  | } | 
|  |  | 
|  | absolute_capture_time_ = extension.absolute_capture_time; | 
|  | } | 
|  |  | 
|  | bool operator==(const RtpPacketInfo& lhs, const RtpPacketInfo& rhs) { | 
|  | return (lhs.ssrc() == rhs.ssrc()) && (lhs.csrcs() == rhs.csrcs()) && | 
|  | (lhs.rtp_timestamp() == rhs.rtp_timestamp()) && | 
|  | (lhs.receive_time() == rhs.receive_time()) && | 
|  | (lhs.audio_level() == rhs.audio_level()) && | 
|  | (lhs.absolute_capture_time() == rhs.absolute_capture_time()) && | 
|  | (lhs.local_capture_clock_offset() == rhs.local_capture_clock_offset()); | 
|  | } | 
|  |  | 
|  | }  // namespace webrtc |