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:
Sergey Silkin
2018-09-07 11:49:38 +02:00
committed by Commit Bot
parent 3445b6bc51
commit 2f864fb4ab
2 changed files with 24 additions and 4 deletions

View File

@ -440,13 +440,19 @@ RtpFrameReferenceFinder::FrameDecision RtpFrameReferenceFinder::ManageFrameVp9(
RTC_LOG(LS_WARNING) << "Received scalability structure on a non base "
"layer frame. Scalability structure ignored.";
} else {
current_ss_idx_ = Add<kMaxGofSaved>(current_ss_idx_, 1);
if (codec_header.gof.num_frames_in_gof == 0 ||
codec_header.gof.num_frames_in_gof > kMaxVp9FramesInGof) {
if (codec_header.gof.num_frames_in_gof > kMaxVp9FramesInGof) {
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;
gof_info_.emplace(unwrapped_tl0,
GofInfo(&scalability_structures_[current_ss_idx_],

View File

@ -1360,5 +1360,19 @@ TEST_F(TestRtpFrameReferenceFinder, Vp9GofTidTooHigh) {
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 webrtc