webrtc/modules/video_coding/svc
Emil Lundmark 7f876c8930 Allow full SVC to reference T0 frame only after it has been encoded
The VP9 encoder may drop a frame internally which will not advance the
frame pattern. Consider the following scenario where only spatial layer
0 and temporal layer 0 is active:

1. Key frame encoded
2. Spatial layer 1 is activated
3. Delta T0 dropped
4. Delta T0 encoded

No S1T0 frame is encoded in (1) since it's not active. When
NextFrameConfig is called in (3) it will say that future frames may
reference T0 on both S0 and S1, but it's then dropped.

On step (4), the SVC controller essentially thinks it's encoding a new
picture and will happily reference the T0 on what it thinks is the first
delta frame. However, this is actually still the key frame and since
there was no S1T0 frame produced it will reference an invalid buffer.

To fix this, only say it's possible to reference a T0 frame after it has
been successfully encoded.

Bug: webrtc:11999, webrtc:13142, chromium:1178444
Change-Id: Iab3d2042ce0b3fa7d952b2831d1a36b1a6613a86
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/231695
Reviewed-by: Erik Språng <sprang@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Emil Lundmark <lndmrk@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#34982}
2021-09-13 15:52:42 +00:00
..
BUILD.gn Add S3T3 video scalability structure 2021-02-18 17:46:29 +00:00
create_scalability_structure.cc Add helper to query scalability structure configuration 2021-09-10 13:47:22 +00:00
create_scalability_structure.h Add helper to query scalability structure configuration 2021-09-10 13:47:22 +00:00
scalability_structure_full_svc.cc Allow full SVC to reference T0 frame only after it has been encoded 2021-09-13 15:52:42 +00:00
scalability_structure_full_svc.h In full svc controller reuse unused frame configuration 2021-03-12 14:50:39 +00:00
scalability_structure_full_svc_unittest.cc Allow full SVC to reference T0 frame only after it has been encoded 2021-09-13 15:52:42 +00:00
scalability_structure_key_svc.cc Add helper to query scalability structure configuration 2021-09-10 13:47:22 +00:00
scalability_structure_key_svc.h In ksvc controller reuse unused frame configuration 2021-03-12 13:39:38 +00:00
scalability_structure_key_svc_unittest.cc In ksvc controller reuse unused frame configuration 2021-03-12 13:39:38 +00:00
scalability_structure_l2t2_key_shift.cc Add helper to query scalability structure configuration 2021-09-10 13:47:22 +00:00
scalability_structure_l2t2_key_shift.h Add layer skipping to L2T2_KEY_SHIFT structure 2020-10-26 10:35:46 +00:00
scalability_structure_l2t2_key_shift_unittest.cc Add layer skipping to L2T2_KEY_SHIFT structure 2020-10-26 10:35:46 +00:00
scalability_structure_simulcast.cc Add helper to query scalability structure configuration 2021-09-10 13:47:22 +00:00
scalability_structure_simulcast.h Add S3T3 video scalability structure 2021-02-18 17:46:29 +00:00
scalability_structure_test_helpers.cc Ignore frame type when calculating generic frame dependencies. 2020-11-23 10:52:06 +00:00
scalability_structure_test_helpers.h Support layer skipping in key svc structures 2020-10-19 09:35:23 +00:00
scalability_structure_unittest.cc Add helper to query scalability structure configuration 2021-09-10 13:47:22 +00:00
scalable_video_controller.h Add helper to query scalability structure configuration 2021-09-10 13:47:22 +00:00
scalable_video_controller_no_layering.cc Add helper to query scalability structure configuration 2021-09-10 13:47:22 +00:00
scalable_video_controller_no_layering.h Test and fix unscalable video structure. 2021-02-11 17:23:56 +00:00
svc_rate_allocator.cc Use backticks not vertical bars to denote variables in comments for /modules/video_coding 2021-08-09 15:26:22 +00:00
svc_rate_allocator.h Move SvcRateAllocator out of codecs/vp9 and make it not vp9 specific 2020-11-05 18:35:37 +00:00
svc_rate_allocator_unittest.cc Move SvcRateAllocator out of codecs/vp9 and make it not vp9 specific 2020-11-05 18:35:37 +00:00