Add fuzzer to validate libvpx vp9 encoder wrapper

Fix simulcast svc controller to reuse dropped frame configuration,
same as full svc and k-svc controllers do.
This fuzzer reminded the issue was still there.

Bug: webrtc:11999
Change-Id: I74156bd743124723562e99deb48de5b5018a81d0
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/212281
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33568}
This commit is contained in:
Danil Chapovalov
2021-03-25 17:30:10 +01:00
committed by Commit Bot
parent 4f88a9d1c3
commit c184047fef
3 changed files with 511 additions and 4 deletions

View File

@ -137,7 +137,7 @@ ScalabilityStructureSimulcast::NextFrameConfig(bool restart) {
}
configs.emplace_back();
ScalableVideoController::LayerFrameConfig& config = configs.back();
config.S(sid).T(0);
config.Id(current_pattern).S(sid).T(0);
if (can_reference_t0_frame_for_spatial_id_[sid]) {
config.ReferenceAndUpdate(BufferIndex(sid, /*tid=*/0));
@ -155,7 +155,10 @@ ScalabilityStructureSimulcast::NextFrameConfig(bool restart) {
}
configs.emplace_back();
ScalableVideoController::LayerFrameConfig& config = configs.back();
config.S(sid).T(1).Reference(BufferIndex(sid, /*tid=*/0));
config.Id(current_pattern)
.S(sid)
.T(1)
.Reference(BufferIndex(sid, /*tid=*/0));
// Save frame only if there is a higher temporal layer that may need it.
if (num_temporal_layers_ > 2) {
config.Update(BufferIndex(sid, /*tid=*/1));
@ -171,7 +174,7 @@ ScalabilityStructureSimulcast::NextFrameConfig(bool restart) {
}
configs.emplace_back();
ScalableVideoController::LayerFrameConfig& config = configs.back();
config.S(sid).T(2);
config.Id(current_pattern).S(sid).T(2);
if (can_reference_t1_frame_for_spatial_id_[sid]) {
config.Reference(BufferIndex(sid, /*tid=*/1));
} else {
@ -184,12 +187,12 @@ ScalabilityStructureSimulcast::NextFrameConfig(bool restart) {
break;
}
last_pattern_ = current_pattern;
return configs;
}
GenericFrameInfo ScalabilityStructureSimulcast::OnEncodeDone(
const LayerFrameConfig& config) {
last_pattern_ = static_cast<FramePattern>(config.Id());
if (config.TemporalId() == 1) {
can_reference_t1_frame_for_spatial_id_.set(config.SpatialId());
}