Cleanup RtpPacketizer interface
merge construction and call to SetPayloadData
Add NumPackets instead of SetPayloadData
Remove virtual ToString() as unused
move CHECK(rtp_video_header) from RtpPacketizer::Create to RtpSenderVideo::SendVideo
Bug: webrtc:9680
Change-Id: I074644e048c797eb836f79979df363fe1ea0075e
Reviewed-on: https://webrtc-review.googlesource.com/96543
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24474}
diff --git a/modules/rtp_rtcp/source/rtp_format.cc b/modules/rtp_rtcp/source/rtp_format.cc
index 293181e..e79f174 100644
--- a/modules/rtp_rtcp/source/rtp_format.cc
+++ b/modules/rtp_rtcp/source/rtp_format.cc
@@ -12,40 +12,56 @@
#include <utility>
+#include "absl/memory/memory.h"
#include "modules/rtp_rtcp/source/rtp_format_h264.h"
#include "modules/rtp_rtcp/source/rtp_format_video_generic.h"
#include "modules/rtp_rtcp/source/rtp_format_vp8.h"
#include "modules/rtp_rtcp/source/rtp_format_vp9.h"
namespace webrtc {
-RtpPacketizer* RtpPacketizer::Create(VideoCodecType type,
- size_t max_payload_len,
- size_t last_packet_reduction_len,
- const RTPVideoHeader* rtp_video_header,
- FrameType frame_type) {
- RTC_CHECK(rtp_video_header);
+
+std::unique_ptr<RtpPacketizer> RtpPacketizer::Create(
+ VideoCodecType type,
+ rtc::ArrayView<const uint8_t> payload,
+ PayloadSizeLimits limits,
+ // Codec-specific details.
+ const RTPVideoHeader& rtp_video_header,
+ FrameType frame_type,
+ const RTPFragmentationHeader* fragmentation) {
switch (type) {
case kVideoCodecH264: {
const auto& h264 =
- absl::get<RTPVideoHeaderH264>(rtp_video_header->video_type_header);
- return new RtpPacketizerH264(max_payload_len, last_packet_reduction_len,
- h264.packetization_mode);
+ absl::get<RTPVideoHeaderH264>(rtp_video_header.video_type_header);
+ auto packetizer = absl::make_unique<RtpPacketizerH264>(
+ limits.max_payload_len, limits.last_packet_reduction_len,
+ h264.packetization_mode);
+ packetizer->SetPayloadData(payload.data(), payload.size(), fragmentation);
+ return std::move(packetizer);
}
- case kVideoCodecVP8:
- return new RtpPacketizerVp8(rtp_video_header->vp8(), max_payload_len,
- last_packet_reduction_len);
+ case kVideoCodecVP8: {
+ const auto& vp8 =
+ absl::get<RTPVideoHeaderVP8>(rtp_video_header.video_type_header);
+ auto packetizer = absl::make_unique<RtpPacketizerVp8>(
+ vp8, limits.max_payload_len, limits.last_packet_reduction_len);
+ packetizer->SetPayloadData(payload.data(), payload.size(), nullptr);
+ return std::move(packetizer);
+ }
case kVideoCodecVP9: {
const auto& vp9 =
- absl::get<RTPVideoHeaderVP9>(rtp_video_header->video_type_header);
- return new RtpPacketizerVp9(vp9, max_payload_len,
- last_packet_reduction_len);
+ absl::get<RTPVideoHeaderVP9>(rtp_video_header.video_type_header);
+ auto packetizer = absl::make_unique<RtpPacketizerVp9>(
+ vp9, limits.max_payload_len, limits.last_packet_reduction_len);
+ packetizer->SetPayloadData(payload.data(), payload.size(), nullptr);
+ return std::move(packetizer);
}
- default:
- return new RtpPacketizerGeneric(*rtp_video_header, frame_type,
- max_payload_len,
- last_packet_reduction_len);
+ default: {
+ auto packetizer = absl::make_unique<RtpPacketizerGeneric>(
+ rtp_video_header, frame_type, limits.max_payload_len,
+ limits.last_packet_reduction_len);
+ packetizer->SetPayloadData(payload.data(), payload.size(), nullptr);
+ return std::move(packetizer);
+ }
}
- return nullptr;
}
RtpDepacketizer* RtpDepacketizer::Create(VideoCodecType type) {
diff --git a/modules/rtp_rtcp/source/rtp_format.h b/modules/rtp_rtcp/source/rtp_format.h
index 76d7f47..007ddbc 100644
--- a/modules/rtp_rtcp/source/rtp_format.h
+++ b/modules/rtp_rtcp/source/rtp_format.h
@@ -11,8 +11,10 @@
#ifndef MODULES_RTP_RTCP_SOURCE_RTP_FORMAT_H_
#define MODULES_RTP_RTCP_SOURCE_RTP_FORMAT_H_
+#include <memory>
#include <string>
+#include "api/array_view.h"
#include "common_types.h" // NOLINT(build/include)
#include "modules/include/module_common_types.h"
#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
@@ -23,26 +25,28 @@
class RtpPacketizer {
public:
- static RtpPacketizer* Create(VideoCodecType type,
- size_t max_payload_len,
- size_t last_packet_reduction_len,
- const RTPVideoHeader* rtp_video_header,
- FrameType frame_type);
+ struct PayloadSizeLimits {
+ size_t max_payload_len = 1200;
+ size_t last_packet_reduction_len = 0;
+ };
+ static std::unique_ptr<RtpPacketizer> Create(
+ VideoCodecType type,
+ rtc::ArrayView<const uint8_t> payload,
+ PayloadSizeLimits limits,
+ // Codec-specific details.
+ const RTPVideoHeader& rtp_video_header,
+ FrameType frame_type,
+ const RTPFragmentationHeader* fragmentation);
- virtual ~RtpPacketizer() {}
+ virtual ~RtpPacketizer() = default;
- // Returns total number of packets which would be produced by the packetizer.
- virtual size_t SetPayloadData(
- const uint8_t* payload_data,
- size_t payload_size,
- const RTPFragmentationHeader* fragmentation) = 0;
+ // Returns number of remaining packets to produce by the packetizer.
+ virtual size_t NumPackets() const = 0;
// Get the next payload with payload header.
// Write payload and set marker bit of the |packet|.
// Returns true on success, false otherwise.
virtual bool NextPacket(RtpPacketToSend* packet) = 0;
-
- virtual std::string ToString() = 0;
};
// TODO(sprang): Update the depacketizer to return a std::unqie_ptr with a copy
diff --git a/modules/rtp_rtcp/source/rtp_format_h264.cc b/modules/rtp_rtcp/source/rtp_format_h264.cc
index 45e8d11..373cce9 100644
--- a/modules/rtp_rtcp/source/rtp_format_h264.cc
+++ b/modules/rtp_rtcp/source/rtp_format_h264.cc
@@ -182,6 +182,10 @@
return num_packets_left_;
}
+size_t RtpPacketizerH264::NumPackets() const {
+ return num_packets_left_;
+}
+
bool RtpPacketizerH264::GeneratePackets() {
for (size_t i = 0; i < input_fragments_.size();) {
switch (packetization_mode_) {
@@ -408,10 +412,6 @@
packets_.pop();
}
-std::string RtpPacketizerH264::ToString() {
- return "RtpPacketizerH264";
-}
-
RtpDepacketizerH264::RtpDepacketizerH264() : offset_(0), length_(0) {}
RtpDepacketizerH264::~RtpDepacketizerH264() {}
diff --git a/modules/rtp_rtcp/source/rtp_format_h264.h b/modules/rtp_rtcp/source/rtp_format_h264.h
index 99b080b..1f6702a 100644
--- a/modules/rtp_rtcp/source/rtp_format_h264.h
+++ b/modules/rtp_rtcp/source/rtp_format_h264.h
@@ -34,15 +34,15 @@
size_t SetPayloadData(const uint8_t* payload_data,
size_t payload_size,
- const RTPFragmentationHeader* fragmentation) override;
+ const RTPFragmentationHeader* fragmentation);
+
+ size_t NumPackets() const override;
// Get the next payload with H264 payload header.
// Write payload and set marker bit of the |packet|.
// Returns true on success, false otherwise.
bool NextPacket(RtpPacketToSend* rtp_packet) override;
- std::string ToString() override;
-
private:
// Input fragments (NAL units), with an optionally owned temporary buffer,
// used in case the fragment gets modified.
diff --git a/modules/rtp_rtcp/source/rtp_format_h264_unittest.cc b/modules/rtp_rtcp/source/rtp_format_h264_unittest.cc
index 1f69fcb..0183a6a 100644
--- a/modules/rtp_rtcp/source/rtp_format_h264_unittest.cc
+++ b/modules/rtp_rtcp/source/rtp_format_h264_unittest.cc
@@ -16,7 +16,7 @@
#include "modules/include/module_common_types.h"
#include "modules/rtp_rtcp/mocks/mock_rtp_rtcp.h"
#include "modules/rtp_rtcp/source/byte_io.h"
-#include "modules/rtp_rtcp/source/rtp_format.h"
+#include "modules/rtp_rtcp/source/rtp_format_h264.h"
#include "modules/rtp_rtcp/source/rtp_packet_to_send.h"
#include "test/gmock.h"
#include "test/gtest.h"
@@ -68,14 +68,12 @@
kNalHeaderSize + frameSize - payloadOffset;
}
-RtpPacketizer* CreateH264Packetizer(H264PacketizationMode mode,
- size_t max_payload_size,
- size_t last_packet_reduction) {
- RTPVideoHeader header;
- header.video_type_header.emplace<RTPVideoHeaderH264>().packetization_mode =
- mode;
- return RtpPacketizer::Create(kVideoCodecH264, max_payload_size,
- last_packet_reduction, &header, kEmptyFrame);
+std::unique_ptr<RtpPacketizerH264> CreateH264Packetizer(
+ H264PacketizationMode mode,
+ size_t max_payload_size,
+ size_t last_packet_reduction) {
+ return absl::make_unique<RtpPacketizerH264>(max_payload_size,
+ last_packet_reduction, mode);
}
void VerifyFua(size_t fua_index,
@@ -118,7 +116,7 @@
fragmentation.VerifyAndAllocateFragmentationHeader(1);
fragmentation.fragmentationOffset[0] = 0;
fragmentation.fragmentationLength[0] = frame_size;
- std::unique_ptr<RtpPacketizer> packetizer(
+ std::unique_ptr<RtpPacketizerH264> packetizer(
CreateH264Packetizer(H264PacketizationMode::NonInterleaved,
max_payload_size, last_packet_reduction));
EXPECT_EQ(
@@ -191,7 +189,7 @@
fragmentation.VerifyAndAllocateFragmentationHeader(1);
fragmentation.fragmentationOffset[0] = 0;
fragmentation.fragmentationLength[0] = sizeof(frame);
- std::unique_ptr<RtpPacketizer> packetizer(
+ std::unique_ptr<RtpPacketizerH264> packetizer(
CreateH264Packetizer(GetParam(), kMaxPayloadSize, 0));
ASSERT_EQ(1u,
packetizer->SetPayloadData(frame, sizeof(frame), &fragmentation));
@@ -218,7 +216,7 @@
frame[fragmentation.fragmentationOffset[0]] = 0x01;
frame[fragmentation.fragmentationOffset[1]] = 0x01;
- std::unique_ptr<RtpPacketizer> packetizer(
+ std::unique_ptr<RtpPacketizerH264> packetizer(
CreateH264Packetizer(GetParam(), kMaxPayloadSize, 0));
ASSERT_EQ(2u, packetizer->SetPayloadData(frame, kFrameSize, &fragmentation));
@@ -251,7 +249,7 @@
frame[i + kPayloadOffset] = i;
RTPFragmentationHeader fragmentation;
CreateThreeFragments(&fragmentation, kFrameSize, kPayloadOffset);
- std::unique_ptr<RtpPacketizer> packetizer(CreateH264Packetizer(
+ std::unique_ptr<RtpPacketizerH264> packetizer(CreateH264Packetizer(
H264PacketizationMode::NonInterleaved, kMaxPayloadSize, 0));
ASSERT_EQ(1u, packetizer->SetPayloadData(frame, kFrameSize, &fragmentation));
@@ -286,7 +284,7 @@
fragmentation.fragmentationOffset[2] = 4;
fragmentation.fragmentationLength[2] =
kNalHeaderSize + kFrameSize - kPayloadOffset;
- std::unique_ptr<RtpPacketizer> packetizer(
+ std::unique_ptr<RtpPacketizerH264> packetizer(
CreateH264Packetizer(H264PacketizationMode::NonInterleaved,
kMaxPayloadSize, kLastPacketReduction));
ASSERT_EQ(2u, packetizer->SetPayloadData(frame, kFrameSize, &fragmentation));
@@ -323,7 +321,7 @@
frame[i + kPayloadOffset] = i;
RTPFragmentationHeader fragmentation;
CreateThreeFragments(&fragmentation, kFrameSize, kPayloadOffset);
- std::unique_ptr<RtpPacketizer> packetizer(CreateH264Packetizer(
+ std::unique_ptr<RtpPacketizerH264> packetizer(CreateH264Packetizer(
H264PacketizationMode::SingleNalUnit, kMaxPayloadSize, 0));
packetizer->SetPayloadData(frame, kFrameSize, &fragmentation);
@@ -352,7 +350,7 @@
fragmentation.fragmentationOffset[2] = 4;
fragmentation.fragmentationLength[2] =
kNalHeaderSize + kFrameSize - kPayloadOffset;
- std::unique_ptr<RtpPacketizer> packetizer(CreateH264Packetizer(
+ std::unique_ptr<RtpPacketizerH264> packetizer(CreateH264Packetizer(
H264PacketizationMode::NonInterleaved, kMaxPayloadSize, 0));
ASSERT_EQ(2u, packetizer->SetPayloadData(frame, kFrameSize, &fragmentation));
@@ -397,7 +395,7 @@
frame[nalu_offset + j] = i + j;
}
}
- std::unique_ptr<RtpPacketizer> packetizer(CreateH264Packetizer(
+ std::unique_ptr<RtpPacketizerH264> packetizer(CreateH264Packetizer(
H264PacketizationMode::NonInterleaved, kMaxPayloadSize, 0));
ASSERT_EQ(3u, packetizer->SetPayloadData(frame, kFrameSize, &fragmentation));
@@ -486,7 +484,7 @@
// Set NAL headers.
frame[fragmentation.fragmentationOffset[0]] = 0x01;
- std::unique_ptr<RtpPacketizer> packetizer(CreateH264Packetizer(
+ std::unique_ptr<RtpPacketizerH264> packetizer(CreateH264Packetizer(
H264PacketizationMode::SingleNalUnit, kMaxPayloadSize, 0));
EXPECT_EQ(0u, packetizer->SetPayloadData(frame, kFrameSize, &fragmentation));
}
@@ -524,16 +522,16 @@
protected:
rtc::Buffer in_buffer_;
RTPFragmentationHeader fragmentation_header_;
- std::unique_ptr<RtpPacketizer> packetizer_;
+ std::unique_ptr<RtpPacketizerH264> packetizer_;
};
TEST_F(RtpPacketizerH264TestSpsRewriting, FuASps) {
const size_t kHeaderOverhead = kFuAHeaderSize + 1;
// Set size to fragment SPS into two FU-A packets.
- packetizer_.reset(
+ packetizer_ =
CreateH264Packetizer(H264PacketizationMode::NonInterleaved,
- sizeof(kOriginalSps) - 2 + kHeaderOverhead, 0));
+ sizeof(kOriginalSps) - 2 + kHeaderOverhead, 0);
packetizer_->SetPayloadData(in_buffer_.data(), in_buffer_.size(),
&fragmentation_header_);
@@ -564,9 +562,8 @@
sizeof(kIdrTwo) + (kLengthFieldLength * 3);
// Set size to include SPS and the rest of the packets in a Stap-A package.
- packetizer_.reset(CreateH264Packetizer(H264PacketizationMode::NonInterleaved,
- kExpectedTotalSize + kHeaderOverhead,
- 0));
+ packetizer_ = CreateH264Packetizer(H264PacketizationMode::NonInterleaved,
+ kExpectedTotalSize + kHeaderOverhead, 0);
packetizer_->SetPayloadData(in_buffer_.data(), in_buffer_.size(),
&fragmentation_header_);
diff --git a/modules/rtp_rtcp/source/rtp_format_video_generic.cc b/modules/rtp_rtcp/source/rtp_format_video_generic.cc
index 081a3bf..1731237 100644
--- a/modules/rtp_rtcp/source/rtp_format_video_generic.cc
+++ b/modules/rtp_rtcp/source/rtp_format_video_generic.cc
@@ -77,6 +77,10 @@
return num_packets_left_;
}
+size_t RtpPacketizerGeneric::NumPackets() const {
+ return num_packets_left_;
+}
+
bool RtpPacketizerGeneric::NextPacket(RtpPacketToSend* packet) {
RTC_DCHECK(packet);
if (num_packets_left_ == 0)
@@ -127,10 +131,6 @@
return true;
}
-std::string RtpPacketizerGeneric::ToString() {
- return "RtpPacketizerGeneric";
-}
-
void RtpPacketizerGeneric::WriteExtendedHeader(uint8_t* out_ptr) {
// Store bottom 15 bits of the the sequence number. Only 15 bits are used for
// compatibility with other packetizer implemenetations that also use 15 bits.
diff --git a/modules/rtp_rtcp/source/rtp_format_video_generic.h b/modules/rtp_rtcp/source/rtp_format_video_generic.h
index e608db5..293b6e9 100644
--- a/modules/rtp_rtcp/source/rtp_format_video_generic.h
+++ b/modules/rtp_rtcp/source/rtp_format_video_generic.h
@@ -39,15 +39,15 @@
// Returns total number of packets to be generated.
size_t SetPayloadData(const uint8_t* payload_data,
size_t payload_size,
- const RTPFragmentationHeader* fragmentation) override;
+ const RTPFragmentationHeader* fragmentation);
+
+ size_t NumPackets() const override;
// Get the next payload with generic payload header.
// Write payload and set marker bit of the |packet|.
// Returns true on success, false otherwise.
bool NextPacket(RtpPacketToSend* packet) override;
- std::string ToString() override;
-
private:
const absl::optional<uint16_t> picture_id_;
const uint8_t* payload_data_;
diff --git a/modules/rtp_rtcp/source/rtp_format_vp8.cc b/modules/rtp_rtcp/source/rtp_format_vp8.cc
index 48c7351..2996ce2 100644
--- a/modules/rtp_rtcp/source/rtp_format_vp8.cc
+++ b/modules/rtp_rtcp/source/rtp_format_vp8.cc
@@ -184,6 +184,10 @@
return packets_.size();
}
+size_t RtpPacketizerVp8::NumPackets() const {
+ return packets_.size();
+}
+
bool RtpPacketizerVp8::NextPacket(RtpPacketToSend* packet) {
RTC_DCHECK(packet);
if (packets_.empty()) {
@@ -204,10 +208,6 @@
return true;
}
-std::string RtpPacketizerVp8::ToString() {
- return "RtpPacketizerVp8";
-}
-
int RtpPacketizerVp8::GeneratePackets() {
if (max_payload_len_ < vp8_fixed_payload_descriptor_bytes_ +
PayloadDescriptorExtraLength() + 1 +
diff --git a/modules/rtp_rtcp/source/rtp_format_vp8.h b/modules/rtp_rtcp/source/rtp_format_vp8.h
index 2b4468a..e557934 100644
--- a/modules/rtp_rtcp/source/rtp_format_vp8.h
+++ b/modules/rtp_rtcp/source/rtp_format_vp8.h
@@ -48,15 +48,15 @@
size_t SetPayloadData(const uint8_t* payload_data,
size_t payload_size,
- const RTPFragmentationHeader* fragmentation) override;
+ const RTPFragmentationHeader* fragmentation);
+
+ size_t NumPackets() const override;
// Get the next payload with VP8 payload header.
// Write payload and set marker bit of the |packet|.
// Returns true on success, false otherwise.
bool NextPacket(RtpPacketToSend* packet) override;
- std::string ToString() override;
-
private:
typedef struct {
size_t payload_start_pos;
diff --git a/modules/rtp_rtcp/source/rtp_format_vp9.cc b/modules/rtp_rtcp/source/rtp_format_vp9.cc
index 974df8f..f800ff8 100644
--- a/modules/rtp_rtcp/source/rtp_format_vp9.cc
+++ b/modules/rtp_rtcp/source/rtp_format_vp9.cc
@@ -471,10 +471,6 @@
RtpPacketizerVp9::~RtpPacketizerVp9() {}
-std::string RtpPacketizerVp9::ToString() {
- return "RtpPacketizerVp9";
-}
-
size_t RtpPacketizerVp9::SetPayloadData(
const uint8_t* payload,
size_t payload_size,
@@ -485,6 +481,10 @@
return packets_.size();
}
+size_t RtpPacketizerVp9::NumPackets() const {
+ return packets_.size();
+}
+
// Splits payload in minimal number of roughly equal in size packets.
void RtpPacketizerVp9::GeneratePackets() {
if (max_payload_length_ < PayloadDescriptorLength(hdr_) + 1) {
diff --git a/modules/rtp_rtcp/source/rtp_format_vp9.h b/modules/rtp_rtcp/source/rtp_format_vp9.h
index 9052c21..61f04d4 100644
--- a/modules/rtp_rtcp/source/rtp_format_vp9.h
+++ b/modules/rtp_rtcp/source/rtp_format_vp9.h
@@ -38,12 +38,12 @@
~RtpPacketizerVp9() override;
- std::string ToString() override;
-
// The payload data must be one encoded VP9 layer frame.
size_t SetPayloadData(const uint8_t* payload,
size_t payload_size,
- const RTPFragmentationHeader* fragmentation) override;
+ const RTPFragmentationHeader* fragmentation);
+
+ size_t NumPackets() const override;
// Gets the next payload with VP9 payload header.
// Write payload and set marker bit of the |packet|.
diff --git a/modules/rtp_rtcp/source/rtp_sender_video.cc b/modules/rtp_rtcp/source/rtp_sender_video.cc
index 43450dc..bf8150d 100644
--- a/modules/rtp_rtcp/source/rtp_sender_video.cc
+++ b/modules/rtp_rtcp/source/rtp_sender_video.cc
@@ -280,6 +280,7 @@
int64_t expected_retransmission_time_ms) {
if (payload_size == 0)
return false;
+ RTC_CHECK(video_header);
// Create header that will be reused in all packets.
std::unique_ptr<RtpPacketToSend> rtp_header = rtp_sender_->AllocatePacket();
@@ -303,24 +304,22 @@
// packet in each group of packets which make up another type of frame
// (e.g. a P-Frame) only if the current value is different from the previous
// value sent.
- if (video_header) {
- // Set rotation when key frame or when changed (to follow standard).
- // Or when different from 0 (to follow current receiver implementation).
- VideoRotation current_rotation = video_header->rotation;
- if (frame_type == kVideoFrameKey || current_rotation != last_rotation_ ||
- current_rotation != kVideoRotation_0)
- last_packet->SetExtension<VideoOrientation>(current_rotation);
- last_rotation_ = current_rotation;
- // Report content type only for key frames.
- if (frame_type == kVideoFrameKey &&
- video_header->content_type != VideoContentType::UNSPECIFIED) {
- last_packet->SetExtension<VideoContentTypeExtension>(
- video_header->content_type);
- }
- if (video_header->video_timing.flags != VideoSendTiming::kInvalid) {
- last_packet->SetExtension<VideoTimingExtension>(
- video_header->video_timing);
- }
+ // Set rotation when key frame or when changed (to follow standard).
+ // Or when different from 0 (to follow current receiver implementation).
+ VideoRotation current_rotation = video_header->rotation;
+ if (frame_type == kVideoFrameKey || current_rotation != last_rotation_ ||
+ current_rotation != kVideoRotation_0)
+ last_packet->SetExtension<VideoOrientation>(current_rotation);
+ last_rotation_ = current_rotation;
+ // Report content type only for key frames.
+ if (frame_type == kVideoFrameKey &&
+ video_header->content_type != VideoContentType::UNSPECIFIED) {
+ last_packet->SetExtension<VideoContentTypeExtension>(
+ video_header->content_type);
+ }
+ if (video_header->video_timing.flags != VideoSendTiming::kInvalid) {
+ last_packet->SetExtension<VideoTimingExtension>(
+ video_header->video_timing);
}
// FEC settings.
@@ -347,16 +346,17 @@
size_t last_packet_reduction_len =
last_packet->headers_size() - rtp_header->headers_size();
- std::unique_ptr<RtpPacketizer> packetizer(RtpPacketizer::Create(
- video_type, max_data_payload_length, last_packet_reduction_len,
- video_header, frame_type));
+ RtpPacketizer::PayloadSizeLimits limits;
+ limits.max_payload_len = max_data_payload_length;
+ limits.last_packet_reduction_len = last_packet_reduction_len;
+ std::unique_ptr<RtpPacketizer> packetizer = RtpPacketizer::Create(
+ video_type, rtc::MakeArrayView(payload_data, payload_size), limits,
+ *video_header, frame_type, fragmentation);
- const uint8_t temporal_id =
- video_header ? GetTemporalId(*video_header) : kNoTemporalIdx;
+ const uint8_t temporal_id = GetTemporalId(*video_header);
StorageType storage = GetStorageType(temporal_id, retransmission_settings,
expected_retransmission_time_ms);
- size_t num_packets =
- packetizer->SetPayloadData(payload_data, payload_size, fragmentation);
+ size_t num_packets = packetizer->NumPackets();
if (num_packets == 0)
return false;