Skip to content
This repository was archived by the owner on Oct 25, 2024. It is now read-only.

Commit 05d78cc

Browse files
authored
Fix build issues after rebasing to M88 (#116)
1 parent fd0d988 commit 05d78cc

File tree

3 files changed

+41
-59
lines changed

3 files changed

+41
-59
lines changed

modules/rtp_rtcp/source/rtp_format.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,10 @@ std::unique_ptr<RtpPacketizer> RtpPacketizer::Create(
5151
}
5252
#ifndef DISABLE_H265
5353
case kVideoCodecH265: {
54-
RTC_CHECK(fragmentation);
5554
const auto& h265 =
5655
absl::get<RTPVideoHeaderH265>(rtp_video_header.video_type_header);
5756
return absl::make_unique<RtpPacketizerH265>(
58-
payload, limits, h265.packetization_mode, *fragmentation);
57+
payload, limits, h265.packetization_mode);
5958
}
6059
#endif
6160
case kVideoCodecVP8: {

modules/rtp_rtcp/source/rtp_format_h265.cc

Lines changed: 36 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -79,19 +79,17 @@ enum HevcFuDefs { kHevcSBit = 0x80, kHevcEBit = 0x40, kHevcFuTypeBit = 0x3F };
7979
RtpPacketizerH265::RtpPacketizerH265(
8080
rtc::ArrayView<const uint8_t> payload,
8181
PayloadSizeLimits limits,
82-
H265PacketizationMode packetization_mode,
83-
const RTPFragmentationHeader& fragmentation)
82+
H265PacketizationMode packetization_mode)
8483
: limits_(limits),
8584
num_packets_left_(0) {
8685
// Guard against uninitialized memory in packetization_mode.
8786
RTC_CHECK(packetization_mode == H265PacketizationMode::NonInterleaved ||
8887
packetization_mode == H265PacketizationMode::SingleNalUnit);
8988

90-
for (size_t i = 0; i < fragmentation.fragmentationVectorSize; ++i) {
91-
const uint8_t* fragment =
92-
payload.data() + fragmentation.fragmentationOffset[i];
93-
const size_t fragment_length = fragmentation.fragmentationLength[i];
94-
input_fragments_.push_back(Fragment(fragment, fragment_length));
89+
for (const auto& nalu :
90+
H264::FindNaluIndices(payload.data(), payload.size())) {
91+
input_fragments_.push_back(
92+
payload.subview(nalu.payload_start_offset, nalu.payload_size));
9593
}
9694

9795
if (!GeneratePackets(packetization_mode)) {
@@ -111,18 +109,12 @@ size_t RtpPacketizerH265::NumPackets() const {
111109
return num_packets_left_;
112110
}
113111

114-
RtpPacketizerH265::Fragment::Fragment(const uint8_t* buffer, size_t length)
115-
: buffer(buffer), length(length) {}
116-
RtpPacketizerH265::Fragment::Fragment(const Fragment& fragment)
117-
: buffer(fragment.buffer), length(fragment.length) {}
118-
119-
120112
bool RtpPacketizerH265::GeneratePackets(
121113
H265PacketizationMode packetization_mode) {
122114
// For HEVC we follow non-interleaved mode for the packetization,
123115
// and don't support single-nalu mode at present.
124116
for (size_t i = 0; i < input_fragments_.size();) {
125-
int fragment_len = input_fragments_[i].length;
117+
int fragment_len = input_fragments_[i].size();
126118
int single_packet_capacity = limits_.max_payload_len;
127119
if (input_fragments_.size() == 1)
128120
single_packet_capacity -= limits_.single_packet_reduction_len;
@@ -147,7 +139,7 @@ bool RtpPacketizerH265::GeneratePackets(
147139
bool RtpPacketizerH265::PacketizeFu(size_t fragment_index) {
148140
// Fragment payload into packets (FU).
149141
// Strip out the original header and leave room for the FU header.
150-
const Fragment& fragment = input_fragments_[fragment_index];
142+
rtc::ArrayView<const uint8_t> fragment = input_fragments_[fragment_index];
151143
PayloadSizeLimits limits = limits_;
152144
limits.max_payload_len -= kHevcFuHeaderSize + kHevcNalHeaderSize;
153145

@@ -170,7 +162,7 @@ bool RtpPacketizerH265::PacketizeFu(size_t fragment_index) {
170162
limits.last_packet_reduction_len = 0;
171163

172164
// Strip out the original header.
173-
size_t payload_left = fragment.length - kHevcNalHeaderSize;
165+
size_t payload_left = fragment.size() - kHevcNalHeaderSize;
174166
int offset = kHevcNalHeaderSize;
175167

176168
std::vector<int> payload_sizes = SplitAboutEqually(payload_left, limits);
@@ -180,8 +172,8 @@ bool RtpPacketizerH265::PacketizeFu(size_t fragment_index) {
180172
for (size_t i = 0; i < payload_sizes.size(); ++i) {
181173
int packet_length = payload_sizes[i];
182174
RTC_CHECK_GT(packet_length, 0);
183-
uint16_t header = (fragment.buffer[0] << 8) | fragment.buffer[1];
184-
packets_.push(PacketUnit(Fragment(fragment.buffer + offset, packet_length),
175+
uint16_t header = (fragment[0] << 8) | fragment[1];
176+
packets_.push(PacketUnit(fragment.subview(offset, packet_length),
185177
/*first_fragment=*/i == 0,
186178
/*last_fragment=*/i == payload_sizes.size() - 1,
187179
false, header));
@@ -203,18 +195,18 @@ bool RtpPacketizerH265::PacketizeSingleNalu(size_t fragment_index) {
203195
payload_size_left -= limits_.first_packet_reduction_len;
204196
else if (fragment_index + 1 == input_fragments_.size())
205197
payload_size_left -= limits_.last_packet_reduction_len;
206-
const Fragment* fragment = &input_fragments_[fragment_index];
207-
if (payload_size_left < fragment->length) {
198+
rtc::ArrayView<const uint8_t> fragment = input_fragments_[fragment_index];
199+
if (payload_size_left < fragment.size()) {
208200
RTC_LOG(LS_ERROR) << "Failed to fit a fragment to packet in SingleNalu "
209201
"packetization mode. Payload size left "
210202
<< payload_size_left << ", fragment length "
211-
<< fragment->length << ", packet capacity "
203+
<< fragment.size() << ", packet capacity "
212204
<< limits_.max_payload_len;
213205
return false;
214206
}
215-
RTC_CHECK_GT(fragment->length, 0u);
216-
packets_.push(PacketUnit(*fragment, true /* first */, true /* last */,
217-
false /* aggregated */, fragment->buffer[0]));
207+
RTC_CHECK_GT(fragment.size(), 0u);
208+
packets_.push(PacketUnit(fragment, true /* first */, true /* last */,
209+
false /* aggregated */, fragment[0]));
218210
++num_packets_left_;
219211
return true;
220212
}
@@ -228,12 +220,12 @@ int RtpPacketizerH265::PacketizeAp(size_t fragment_index) {
228220
payload_size_left -= limits_.first_packet_reduction_len;
229221
int aggregated_fragments = 0;
230222
size_t fragment_headers_length = 0;
231-
const Fragment* fragment = &input_fragments_[fragment_index];
232-
RTC_CHECK_GE(payload_size_left, fragment->length);
223+
rtc::ArrayView<const uint8_t> fragment = input_fragments_[fragment_index];
224+
RTC_CHECK_GE(payload_size_left, fragment.size());
233225
++num_packets_left_;
234226

235227
auto payload_size_needed = [&] {
236-
size_t fragment_size = fragment->length + fragment_headers_length;
228+
size_t fragment_size = fragment.size() + fragment_headers_length;
237229
if (input_fragments_.size() == 1) {
238230
// Single fragment, single packet, payload_size_left already adjusted
239231
// with limits_.single_packet_reduction_len.
@@ -247,10 +239,10 @@ int RtpPacketizerH265::PacketizeAp(size_t fragment_index) {
247239
};
248240

249241
while (payload_size_left >= payload_size_needed()) {
250-
RTC_CHECK_GT(fragment->length, 0);
251-
packets_.push(PacketUnit(*fragment, aggregated_fragments == 0, false, true,
252-
fragment->buffer[0]));
253-
payload_size_left -= fragment->length;
242+
RTC_CHECK_GT(fragment.size(), 0);
243+
packets_.push(PacketUnit(fragment, aggregated_fragments == 0, false, true,
244+
fragment[0]));
245+
payload_size_left -= fragment.size();
254246
payload_size_left -= fragment_headers_length;
255247

256248
fragment_headers_length = kHevcLengthFieldSize;
@@ -265,7 +257,7 @@ int RtpPacketizerH265::PacketizeAp(size_t fragment_index) {
265257
++fragment_index;
266258
if (fragment_index == input_fragments_.size())
267259
break;
268-
fragment = &input_fragments_[fragment_index];
260+
fragment = input_fragments_[fragment_index];
269261
}
270262
RTC_CHECK_GT(aggregated_fragments, 0);
271263
packets_.back().last_fragment = true;
@@ -283,9 +275,9 @@ bool RtpPacketizerH265::NextPacket(RtpPacketToSend* rtp_packet) {
283275

284276
if (packet.first_fragment && packet.last_fragment) {
285277
// Single NAL unit packet.
286-
size_t bytes_to_send = packet.source_fragment.length;
278+
size_t bytes_to_send = packet.source_fragment.size();
287279
uint8_t* buffer = rtp_packet->AllocatePayload(bytes_to_send);
288-
memcpy(buffer, packet.source_fragment.buffer, bytes_to_send);
280+
memcpy(buffer, packet.source_fragment.data(), bytes_to_send);
289281
packets_.pop();
290282
input_fragments_.pop_front();
291283
} else if (packet.aggregated) {
@@ -320,12 +312,12 @@ void RtpPacketizerH265::NextAggregatePacket(RtpPacketToSend* rtp_packet,
320312
bool is_last_fragment = packet->last_fragment;
321313
while (packet->aggregated) {
322314
// Add NAL unit length field.
323-
const Fragment& fragment = packet->source_fragment;
324-
ByteWriter<uint16_t>::WriteBigEndian(&buffer[index], fragment.length);
315+
rtc::ArrayView<const uint8_t> fragment = packet->source_fragment;
316+
ByteWriter<uint16_t>::WriteBigEndian(&buffer[index], fragment.size());
325317
index += kHevcLengthFieldSize;
326318
// Add NAL unit.
327-
memcpy(&buffer[index], fragment.buffer, fragment.length);
328-
index += fragment.length;
319+
memcpy(&buffer[index], fragment.data(), fragment.size());
320+
index += fragment.size();
329321
packets_.pop();
330322
input_fragments_.pop_front();
331323
if (is_last_fragment)
@@ -355,20 +347,20 @@ void RtpPacketizerH265::NextFragmentPacket(RtpPacketToSend* rtp_packet) {
355347
// Now update payload_hdr_h with FU type.
356348
payload_hdr_h =
357349
(payload_hdr_h & kHevcTypeMaskN) | (kHevcFu << 1) | layer_id_h;
358-
const Fragment& fragment = packet->source_fragment;
350+
rtc::ArrayView<const uint8_t> fragment = packet->source_fragment;
359351
uint8_t* buffer = rtp_packet->AllocatePayload(
360-
kHevcFuHeaderSize + kHevcNalHeaderSize + fragment.length);
352+
kHevcFuHeaderSize + kHevcNalHeaderSize + fragment.size());
361353
RTC_CHECK(buffer);
362354
buffer[0] = payload_hdr_h;
363355
buffer[1] = payload_hdr_l;
364356
buffer[2] = fu_header;
365357

366358
if (packet->last_fragment) {
367-
memcpy(buffer + kHevcFuHeaderSize + kHevcNalHeaderSize, fragment.buffer,
368-
fragment.length);
359+
memcpy(buffer + kHevcFuHeaderSize + kHevcNalHeaderSize, fragment.data(),
360+
fragment.size());
369361
} else {
370-
memcpy(buffer + kHevcFuHeaderSize + kHevcNalHeaderSize, fragment.buffer,
371-
fragment.length);
362+
memcpy(buffer + kHevcFuHeaderSize + kHevcNalHeaderSize, fragment.data(),
363+
fragment.size());
372364
}
373365
packets_.pop();
374366
}

modules/rtp_rtcp/source/rtp_format_h265.h

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@ class RtpPacketizerH265 : public RtpPacketizer {
3131
// The payload_data must be exactly one encoded H.265 frame.
3232
RtpPacketizerH265(rtc::ArrayView<const uint8_t> payload,
3333
PayloadSizeLimits limits,
34-
H265PacketizationMode packetization_mode,
35-
const RTPFragmentationHeader& fragmentation);
34+
H265PacketizationMode packetization_mode);
3635

3736
~RtpPacketizerH265() override;
3837

@@ -69,15 +68,8 @@ class RtpPacketizerH265 : public RtpPacketizer {
6968
bool aggregated;
7069
uint16_t header; // Different from H264
7170
};
72-
struct Fragment {
73-
Fragment(const uint8_t* buffer, size_t length);
74-
explicit Fragment(const Fragment& fragment);
75-
const uint8_t* buffer = nullptr;
76-
size_t length = 0;
77-
std::unique_ptr<rtc::Buffer> tmp_buffer;
78-
};
7971
struct PacketUnit {
80-
PacketUnit(const Fragment& source_fragment,
72+
PacketUnit(rtc::ArrayView<const uint8_t> source_fragment,
8173
bool first_fragment,
8274
bool last_fragment,
8375
bool aggregated,
@@ -88,14 +80,14 @@ class RtpPacketizerH265 : public RtpPacketizer {
8880
aggregated(aggregated),
8981
header(header) {}
9082

91-
const Fragment source_fragment;
83+
rtc::ArrayView<const uint8_t> source_fragment;
9284
bool first_fragment;
9385
bool last_fragment;
9486
bool aggregated;
9587
uint16_t header;
9688
};
9789
typedef std::queue<Packet> PacketQueue;
98-
std::deque<Fragment> input_fragments_;
90+
std::deque<rtc::ArrayView<const uint8_t>> input_fragments_;
9991
std::queue<PacketUnit> packets_;
10092

10193
bool GeneratePackets(H265PacketizationMode packetization_mode);
@@ -108,7 +100,6 @@ class RtpPacketizerH265 : public RtpPacketizer {
108100

109101
const PayloadSizeLimits limits_;
110102
size_t num_packets_left_;
111-
RTPFragmentationHeader fragmentation_;
112103

113104
RTC_DISALLOW_COPY_AND_ASSIGN(RtpPacketizerH265);
114105
};

0 commit comments

Comments
 (0)