Add plumbing of RtpPacketInfos to each VideoFrame as input for SourceTracker.
This change adds the plumbing of RtpPacketInfo from RtpVideoStreamReceiver::OnRtpPacket() to VideoReceiveStream::OnFrame() for video. It is a step towards replacing the non-spec compliant ContributingSources that updates itself at packet-receive time, with the spec-compliant SourceTracker that will update itself at frame-delivery-to-track time.
Bug: webrtc:10668
Change-Id: Ib97d430530c5a8487d3b129936c7c51e118889bd
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/139891
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Commit-Queue: Chen Xing <chxg@google.com>
Cr-Commit-Position: refs/heads/master@{#28332}
diff --git a/modules/video_coding/packet_buffer.cc b/modules/video_coding/packet_buffer.cc
index bd1ab03..e6469b1 100644
--- a/modules/video_coding/packet_buffer.cc
+++ b/modules/video_coding/packet_buffer.cc
@@ -286,8 +286,9 @@
size_t frame_size = 0;
int max_nack_count = -1;
uint16_t start_seq_num = seq_num;
- int64_t min_recv_time = data_buffer_[index].receive_time_ms;
- int64_t max_recv_time = data_buffer_[index].receive_time_ms;
+ int64_t min_recv_time = data_buffer_[index].packet_info.receive_time_ms();
+ int64_t max_recv_time = data_buffer_[index].packet_info.receive_time_ms();
+ RtpPacketInfos::vector_type packet_infos;
// Find the start index by searching backward until the packet with
// the |frame_begin| flag is set.
@@ -310,9 +311,16 @@
sequence_buffer_[start_index].frame_created = true;
min_recv_time =
- std::min(min_recv_time, data_buffer_[start_index].receive_time_ms);
+ std::min(min_recv_time,
+ data_buffer_[start_index].packet_info.receive_time_ms());
max_recv_time =
- std::max(max_recv_time, data_buffer_[start_index].receive_time_ms);
+ std::max(max_recv_time,
+ data_buffer_[start_index].packet_info.receive_time_ms());
+
+ // Should use |push_front()| since the loop traverses backwards. But
+ // it's too inefficient to do so on a vector so we'll instead fix the
+ // order afterwards.
+ packet_infos.push_back(data_buffer_[start_index].packet_info);
if (!is_h264 && sequence_buffer_[start_index].frame_begin)
break;
@@ -359,6 +367,9 @@
--start_seq_num;
}
+ // Fix the order since the packet-finding loop traverses backwards.
+ std::reverse(packet_infos.begin(), packet_infos.end());
+
if (is_h264) {
// Warn if this is an unsafe frame.
if (has_h264_idr && (!has_h264_sps || !has_h264_pps)) {
@@ -406,7 +417,8 @@
found_frames.emplace_back(
new RtpFrameObject(this, start_seq_num, seq_num, frame_size,
- max_nack_count, min_recv_time, max_recv_time));
+ max_nack_count, min_recv_time, max_recv_time,
+ RtpPacketInfos(std::move(packet_infos))));
}
++seq_num;
}