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}
This commit is contained in:
Danil Chapovalov 2020-01-29 11:21:38 +01:00 committed by Commit Bot
parent 73a5e916a9
commit 26b4cb3fc5
2 changed files with 13 additions and 17 deletions

View File

@ -98,9 +98,8 @@ void RtpFrameReferenceFinder::HandOffFrame(
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 @@ void RtpFrameReferenceFinder::UpdateLastPictureIdWithPadding(uint16_t seq_num) {
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;
}

View File

@ -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 @@ class RtpFrameReferenceFinder {
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 @@ class RtpFrameReferenceFinder {
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_;