Handle empty GOF.
Assume that stream has single temporal layer if number of frames in GOF is set to zero (valid case). Bug: chromium:879584 Change-Id: I7ced082190e40c1bf4cc1468babfd98b0a61f0dd Reviewed-on: https://webrtc-review.googlesource.com/98800 Reviewed-by: Philip Eliasson <philipel@webrtc.org> Commit-Queue: Sergey Silkin <ssilkin@webrtc.org> Cr-Commit-Position: refs/heads/master@{#24622}
This commit is contained in:

committed by
Commit Bot

parent
3445b6bc51
commit
2f864fb4ab
@ -440,13 +440,19 @@ RtpFrameReferenceFinder::FrameDecision RtpFrameReferenceFinder::ManageFrameVp9(
|
|||||||
RTC_LOG(LS_WARNING) << "Received scalability structure on a non base "
|
RTC_LOG(LS_WARNING) << "Received scalability structure on a non base "
|
||||||
"layer frame. Scalability structure ignored.";
|
"layer frame. Scalability structure ignored.";
|
||||||
} else {
|
} else {
|
||||||
current_ss_idx_ = Add<kMaxGofSaved>(current_ss_idx_, 1);
|
if (codec_header.gof.num_frames_in_gof > kMaxVp9FramesInGof) {
|
||||||
if (codec_header.gof.num_frames_in_gof == 0 ||
|
|
||||||
codec_header.gof.num_frames_in_gof > kMaxVp9FramesInGof) {
|
|
||||||
return kDrop;
|
return kDrop;
|
||||||
}
|
}
|
||||||
|
|
||||||
scalability_structures_[current_ss_idx_] = codec_header.gof;
|
GofInfoVP9 gof = codec_header.gof;
|
||||||
|
if (gof.num_frames_in_gof == 0) {
|
||||||
|
RTC_LOG(LS_WARNING) << "Number of frames in GOF is zero. Assume "
|
||||||
|
"that stream has only one temporal layer.";
|
||||||
|
gof.SetGofInfoVP9(kTemporalStructureMode1);
|
||||||
|
}
|
||||||
|
|
||||||
|
current_ss_idx_ = Add<kMaxGofSaved>(current_ss_idx_, 1);
|
||||||
|
scalability_structures_[current_ss_idx_] = gof;
|
||||||
scalability_structures_[current_ss_idx_].pid_start = frame->id.picture_id;
|
scalability_structures_[current_ss_idx_].pid_start = frame->id.picture_id;
|
||||||
gof_info_.emplace(unwrapped_tl0,
|
gof_info_.emplace(unwrapped_tl0,
|
||||||
GofInfo(&scalability_structures_[current_ss_idx_],
|
GofInfo(&scalability_structures_[current_ss_idx_],
|
||||||
|
@ -1360,5 +1360,19 @@ TEST_F(TestRtpFrameReferenceFinder, Vp9GofTidTooHigh) {
|
|||||||
CheckReferencesVp9(0, 0);
|
CheckReferencesVp9(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(TestRtpFrameReferenceFinder, Vp9GofZeroFrames) {
|
||||||
|
uint16_t pid = Rand();
|
||||||
|
uint16_t sn = Rand();
|
||||||
|
GofInfoVP9 ss;
|
||||||
|
ss.num_frames_in_gof = 0;
|
||||||
|
|
||||||
|
InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss);
|
||||||
|
InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 0, 1);
|
||||||
|
|
||||||
|
ASSERT_EQ(2UL, frames_from_callback_.size());
|
||||||
|
CheckReferencesVp9(0, 0);
|
||||||
|
CheckReferencesVp9(1, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace video_coding
|
} // namespace video_coding
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
Reference in New Issue
Block a user