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:
parent
73a5e916a9
commit
26b4cb3fc5
@ -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;
|
||||
}
|
||||
|
||||
@ -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_;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user