Detach RtpFrameReferenceFinder from RtpGenericFrameDescriptor
To allow to use the RtpFrameReferenceFinder with
an updated version of the frame descriptor extension
Bug: webrtc:10342
Change-Id: Ib60a505a714993862a008300aa64d0bb835c3377
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/167361
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30407}
diff --git a/modules/video_coding/rtp_frame_reference_finder.cc b/modules/video_coding/rtp_frame_reference_finder.cc
index 5122821..f6ee1af 100644
--- a/modules/video_coding/rtp_frame_reference_finder.cc
+++ b/modules/video_coding/rtp_frame_reference_finder.cc
@@ -98,9 +98,8 @@
RtpFrameReferenceFinder::FrameDecision
RtpFrameReferenceFinder::ManageFrameInternal(RtpFrameObject* frame) {
- absl::optional<RtpGenericFrameDescriptor> generic_descriptor =
- frame->GetGenericFrameDescriptor();
- if (generic_descriptor) {
+ if (const absl::optional<RTPVideoHeader::GenericDescriptorInfo>&
+ generic_descriptor = frame->GetRtpVideoHeader().generic) {
return ManageFrameGeneric(frame, *generic_descriptor);
}
@@ -183,20 +182,18 @@
RtpFrameReferenceFinder::FrameDecision
RtpFrameReferenceFinder::ManageFrameGeneric(
RtpFrameObject* frame,
- const RtpGenericFrameDescriptor& descriptor) {
- int64_t frame_id = generic_frame_id_unwrapper_.Unwrap(descriptor.FrameId());
- frame->id.picture_id = frame_id;
- frame->id.spatial_layer = descriptor.SpatialLayer();
+ const RTPVideoHeader::GenericDescriptorInfo& descriptor) {
+ frame->id.picture_id = descriptor.frame_id;
+ frame->id.spatial_layer = descriptor.spatial_index;
- rtc::ArrayView<const uint16_t> diffs = descriptor.FrameDependenciesDiffs();
- if (EncodedFrame::kMaxFrameReferences < diffs.size()) {
+ if (EncodedFrame::kMaxFrameReferences < descriptor.dependencies.size()) {
RTC_LOG(LS_WARNING) << "Too many dependencies in generic descriptor.";
return kDrop;
}
- frame->num_references = diffs.size();
- for (size_t i = 0; i < diffs.size(); ++i)
- frame->references[i] = frame_id - diffs[i];
+ frame->num_references = descriptor.dependencies.size();
+ for (size_t i = 0; i < descriptor.dependencies.size(); ++i)
+ frame->references[i] = descriptor.dependencies[i];
return kHandOff;
}
diff --git a/modules/video_coding/rtp_frame_reference_finder.h b/modules/video_coding/rtp_frame_reference_finder.h
index 715c1dd..d9c7c72 100644
--- a/modules/video_coding/rtp_frame_reference_finder.h
+++ b/modules/video_coding/rtp_frame_reference_finder.h
@@ -19,7 +19,7 @@
#include <utility>
#include "modules/include/module_common_types_public.h"
-#include "modules/rtp_rtcp/source/rtp_generic_frame_descriptor.h"
+#include "modules/rtp_rtcp/source/rtp_video_header.h"
#include "modules/video_coding/codecs/vp9/include/vp9_globals.h"
#include "rtc_base/critical_section.h"
#include "rtc_base/numerics/sequence_number_util.h"
@@ -90,8 +90,9 @@
FrameDecision ManageFrameInternal(RtpFrameObject* frame);
- FrameDecision ManageFrameGeneric(RtpFrameObject* frame,
- const RtpGenericFrameDescriptor& descriptor);
+ FrameDecision ManageFrameGeneric(
+ RtpFrameObject* frame,
+ const RTPVideoHeader::GenericDescriptorInfo& descriptor);
// Find references for frames with no or very limited information in the
// descriptor. If |picture_id| is unspecified then packet sequence numbers
@@ -205,8 +206,6 @@
OnCompleteFrameCallback* frame_callback_;
- SeqNumUnwrapper<uint16_t> generic_frame_id_unwrapper_;
-
// Unwrapper used to unwrap generic RTP streams. In a generic stream we derive
// a picture id from the packet sequence number.
SeqNumUnwrapper<uint16_t> rtp_seq_num_unwrapper_;