blob: 1ed7dda478269772047eb670f3a87b43d29ef7ea [file] [log] [blame]
danilchap1edb7ab2016-04-20 12:25:101/*
2 * Copyright (c) 2016 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 */
Mirko Bonadei92ea95e2017-09-15 04:47:3110#ifndef MODULES_RTP_RTCP_SOURCE_RTP_PACKET_TO_SEND_H_
11#define MODULES_RTP_RTCP_SOURCE_RTP_PACKET_TO_SEND_H_
danilchap1edb7ab2016-04-20 12:25:1012
Dino Radaković1807d572018-02-22 13:18:0613#include <vector>
14
15#include "api/array_view.h"
Mirko Bonadei92ea95e2017-09-15 04:47:3116#include "modules/rtp_rtcp/source/rtp_header_extensions.h"
17#include "modules/rtp_rtcp/source/rtp_packet.h"
danilchap1edb7ab2016-04-20 12:25:1018
19namespace webrtc {
20// Class to hold rtp packet with metadata for sender side.
Danil Chapovalov8769e172017-09-14 12:08:2221class RtpPacketToSend : public RtpPacket {
danilchap1edb7ab2016-04-20 12:25:1022 public:
Dino Radaković1807d572018-02-22 13:18:0623 explicit RtpPacketToSend(const ExtensionManager* extensions);
Dino Radaković1807d572018-02-22 13:18:0624 RtpPacketToSend(const ExtensionManager* extensions, size_t capacity);
Dino Radaković9e24cb32018-02-26 12:22:4825 RtpPacketToSend(const RtpPacketToSend& packet);
26 RtpPacketToSend(RtpPacketToSend&& packet);
danilchap1edb7ab2016-04-20 12:25:1027
Dino Radaković1807d572018-02-22 13:18:0628 RtpPacketToSend& operator=(const RtpPacketToSend& packet);
Dino Radaković9e24cb32018-02-26 12:22:4829 RtpPacketToSend& operator=(RtpPacketToSend&& packet);
Dino Radaković1807d572018-02-22 13:18:0630
31 ~RtpPacketToSend();
ilnik04f4d122017-06-19 14:18:5532
danilchap1edb7ab2016-04-20 12:25:1033 // Time in local time base as close as it can to frame capture time.
34 int64_t capture_time_ms() const { return capture_time_ms_; }
ilnik04f4d122017-06-19 14:18:5535
danilchap1edb7ab2016-04-20 12:25:1036 void set_capture_time_ms(int64_t time) { capture_time_ms_ = time; }
37
Dino Radaković1807d572018-02-22 13:18:0638 // Additional data bound to the RTP packet for use in application code,
39 // outside of WebRTC.
40 rtc::ArrayView<const uint8_t> application_data() const {
41 return application_data_;
42 }
43
44 void set_application_data(rtc::ArrayView<const uint8_t> data) {
45 application_data_.assign(data.begin(), data.end());
46 }
47
ilnik04f4d122017-06-19 14:18:5548 void set_packetization_finish_time_ms(int64_t time) {
49 SetExtension<VideoTimingExtension>(
ilnik2edc6842017-07-06 10:06:5050 VideoSendTiming::GetDeltaCappedMs(capture_time_ms_, time),
sprangba050a62017-08-18 09:51:1251 VideoSendTiming::kPacketizationFinishDeltaOffset);
ilnik04f4d122017-06-19 14:18:5552 }
53
54 void set_pacer_exit_time_ms(int64_t time) {
55 SetExtension<VideoTimingExtension>(
ilnik2edc6842017-07-06 10:06:5056 VideoSendTiming::GetDeltaCappedMs(capture_time_ms_, time),
sprangba050a62017-08-18 09:51:1257 VideoSendTiming::kPacerExitDeltaOffset);
ilnik04f4d122017-06-19 14:18:5558 }
59
60 void set_network_time_ms(int64_t time) {
61 SetExtension<VideoTimingExtension>(
ilnik2edc6842017-07-06 10:06:5062 VideoSendTiming::GetDeltaCappedMs(capture_time_ms_, time),
sprangba050a62017-08-18 09:51:1263 VideoSendTiming::kNetworkTimestampDeltaOffset);
ilnik04f4d122017-06-19 14:18:5564 }
65
66 void set_network2_time_ms(int64_t time) {
67 SetExtension<VideoTimingExtension>(
ilnik2edc6842017-07-06 10:06:5068 VideoSendTiming::GetDeltaCappedMs(capture_time_ms_, time),
sprangba050a62017-08-18 09:51:1269 VideoSendTiming::kNetwork2TimestampDeltaOffset);
ilnik04f4d122017-06-19 14:18:5570 }
71
danilchap1edb7ab2016-04-20 12:25:1072 private:
73 int64_t capture_time_ms_ = 0;
Dino Radaković1807d572018-02-22 13:18:0674 std::vector<uint8_t> application_data_;
danilchap1edb7ab2016-04-20 12:25:1075};
76
77} // namespace webrtc
Mirko Bonadei92ea95e2017-09-15 04:47:3178#endif // MODULES_RTP_RTCP_SOURCE_RTP_PACKET_TO_SEND_H_