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_;