webrtc/modules/video_coding
Sergey Silkin db36884e76 Reland "Mark frames with inter_layer_predicted=true as delta frames"
This is a reland of commit 7ae48c452a with  updated RtpVp9RefFinder

RtpVp9RefFinder relied on the fact that frames with (inter_pic_predicted=true && inter_layer_predicted=true) were marked as keyframes. Since this is not the case anymore, the related code paths in RtpVp9RefFinder have been deleted.

Calculation of gof_info_[] index for non-keyframes has been updated to account for that fact it is now possible to received multiple T0 frames belonging to the same temporal unit (we don't need to do "unwrapped_tl0 - 1" in this case).

Original change's description:
> Mark frames with inter_layer_predicted=true as delta frames
>
> As it is currently implemented, the VP9 depacketizer decides packet's frame type based on p_bit ("Inter-picture predicted layer frame"). p_bit is set to 0 for upper spatial layer frames of keyframe since they do not have temporal refs. This results in marking packets of upper spatial layer frames, and, eventually these frames, of SVC keyframes as "keyframe" while they are in fact delta frames.
>
> Normally spatial layer frames are merged into a superframe and the superframe is passed to decoder. But passing individual layers to a single decoder instance is a valid scenario too and is used in downstream projects. In this case, an upper layer frame marked as keyframe may cause decoder reset [2] and break decoding.
>
> This CL changes frame type decision logic in the VP9 depacketizer such that only packets with both P and D (inter-layer predicted) bits unset are considered as keyframe packets.
>
> When spatial layer frames are merged into a superframe in CombineAndDeleteFrames [1], frame type of the superframe is inferred from the lowest spatial layer frame.
>
> [1] https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/modules/video_coding/frame_helpers.cc;l=53
>
> [2] https://source.corp.google.com/piper///depot/google3/third_party/webrtc/files/stable/webrtc/modules/video_coding/codecs/vp9/libvpx_vp9_decoder.cc;l=209
>
> Bug: webrtc:15827
> Change-Id: Idc3445636f0eae0192dac998876fedec48628560
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/343342
> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
> Commit-Queue: Sergey Silkin <ssilkin@webrtc.org>
> Cr-Commit-Position: refs/heads/main@{#41939}

Bug: webrtc:15827
Change-Id: Ic69b94989919cf6d353bceea85d0eba63bc500ee
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/344144
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Commit-Queue: Sergey Silkin <ssilkin@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41985}
2024-04-02 18:59:58 +00:00
..
codecs Pass webrtc::Environment when constructing video encoders in video/ tests 2024-03-22 13:48:58 +00:00
deprecated Rename EncodedImage property Timetamp to RtpTimestamp 2023-09-24 20:06:48 +00:00
g3doc Remove deprecated VideoStreamDecoderInterface and FrameBuffer2. 2023-02-13 16:25:00 +00:00
include Reland "Extends WebRTC logs for software encoder fallback" 2024-02-14 17:15:29 +00:00
svc Fix bug in SvcRateAllocator capping to VideoCodec.maxBitrate 2023-03-17 17:08:53 +00:00
timing Reset prev_unwrapped_timestamp_ in TimestampExtrapolator::Reset 2024-03-13 13:19:49 +00:00
utility Deprecate VideoFrame::timestamp() and set_timestamp 2024-03-13 11:08:37 +00:00
BUILD.gn Cleanup RttMult experiment as launched 2024-04-02 08:22:55 +00:00
chain_diff_calculator.cc Introduce ChainDiffCalculator 2020-05-18 14:22:44 +00:00
chain_diff_calculator.h Introduce ChainDiffCalculator 2020-05-18 14:22:44 +00:00
chain_diff_calculator_unittest.cc Introduce ChainDiffCalculator 2020-05-18 14:22:44 +00:00
decoder_database.cc Remove VCMEncodedFrame from webrtc::EncodedFrame inheritance 2023-08-28 11:46:48 +00:00
decoder_database.h Remove VCMEncodedFrame from webrtc::EncodedFrame inheritance 2023-08-28 11:46:48 +00:00
decoder_database_unittest.cc Move ownership of decoders to VCMDecoderDatabase 2022-09-30 06:21:36 +00:00
DEPS Move VideoEncoderConfig from api/ into video/config 2022-09-29 09:44:43 +00:00
encoded_frame.cc Rename EncodedImage property Timetamp to RtpTimestamp 2023-09-24 20:06:48 +00:00
encoded_frame.h Deprecate old names for EncodedImage::RtpTimestamp accessor and setter 2023-09-28 07:29:22 +00:00
fec_controller_default.cc Use propagated instead of global field trials in FecControllerDefault 2024-01-09 12:26:54 +00:00
fec_controller_default.h Use propagated instead of global field trials in FecControllerDefault 2024-01-09 12:26:54 +00:00
fec_controller_unittest.cc Use propagated instead of global field trials in FecControllerDefault 2024-01-09 12:26:54 +00:00
fec_rate_table.h
frame_dependencies_calculator.cc Ignore frame type when calculating generic frame dependencies. 2020-11-23 10:52:06 +00:00
frame_dependencies_calculator.h Ignore frame type when calculating generic frame dependencies. 2020-11-23 10:52:06 +00:00
frame_dependencies_calculator_unittest.cc Ignore frame type when calculating generic frame dependencies. 2020-11-23 10:52:06 +00:00
frame_helpers.cc Logging clarification for frame_helpers. 2022-10-13 12:40:36 +00:00
frame_helpers.h Logging clarification for frame_helpers. 2022-10-13 12:40:36 +00:00
frame_helpers_unittest.cc Logging clarification for frame_helpers. 2022-10-13 12:40:36 +00:00
generic_decoder.cc Deprecate VideoFrame::timestamp() and set_timestamp 2024-03-13 11:08:37 +00:00
generic_decoder.h Remove EncodedFrame::MissingFrame and start removing Decode() param 2023-08-30 10:38:35 +00:00
generic_decoder_unittest.cc Deprecate VideoFrame::timestamp() and set_timestamp 2024-03-13 11:08:37 +00:00
h26x_packet_buffer.cc Reland "Add HEVC support for h264_packet_buffer." 2024-02-15 16:38:27 +00:00
h26x_packet_buffer.h Reland "Add HEVC support for h264_packet_buffer." 2024-02-15 16:38:27 +00:00
h26x_packet_buffer_unittest.cc Reland "Add HEVC support for h264_packet_buffer." 2024-02-15 16:38:27 +00:00
h264_sprop_parameter_sets.cc Format almost everything. 2019-07-08 13:45:15 +00:00
h264_sprop_parameter_sets.h Remove RTC_DISALLOW_COPY_AND_ASSIGN from modules/ 2022-01-24 11:50:20 +00:00
h264_sprop_parameter_sets_unittest.cc
h264_sps_pps_tracker.cc Remove DCHECK when processing StapA in h264_sps_pps_tracker.cc 2023-08-23 12:44:06 +00:00
h264_sps_pps_tracker.h Use backticks not vertical bars to denote variables in comments for /modules/video_coding 2021-08-09 15:26:22 +00:00
h264_sps_pps_tracker_unittest.cc Remove DCHECK when processing StapA in h264_sps_pps_tracker.cc 2023-08-23 12:44:06 +00:00
histogram.cc
histogram.h
histogram_unittest.cc Format almost everything. 2019-07-08 13:45:15 +00:00
internal_defines.h
loss_notification_controller.cc Use backticks not vertical bars to denote variables in comments for /modules/video_coding 2021-08-09 15:26:22 +00:00
loss_notification_controller.h Use backticks not vertical bars to denote variables in comments for /modules/video_coding 2021-08-09 15:26:22 +00:00
loss_notification_controller_unittest.cc Detach LossNotificationController from RtpGenericFrameDescriptor 2020-01-24 11:53:28 +00:00
media_opt_util.cc Use backticks not vertical bars to denote variables in comments for /modules/video_coding 2021-08-09 15:26:22 +00:00
media_opt_util.h Fixes to support building in -std=c++20 mode. 2022-05-05 17:15:58 +00:00
nack_requester.cc Remove keyframe tracking from NackRequester. 2024-01-17 14:14:59 +00:00
nack_requester.h Remove keyframe tracking from NackRequester. 2024-01-17 14:14:59 +00:00
nack_requester_unittest.cc Remove keyframe tracking from NackRequester. 2024-01-17 14:14:59 +00:00
OWNERS Remove wildcard ownership for build files. 2020-02-19 14:05:46 +00:00
packet_buffer.cc Clear PacketBuffer on large negative jumps at the start of the video stream 2023-09-29 08:56:15 +00:00
packet_buffer.h Clean up decoders when stopping video receive stream. 2022-09-29 12:03:13 +00:00
packet_buffer_unittest.cc Clear PacketBuffer on large negative jumps at the start of the video stream 2023-09-29 08:56:15 +00:00
rtp_frame_id_only_ref_finder.cc Move RtpFrameObject and EncodedFrame out of video_coding namespace. 2021-03-23 14:22:47 +00:00
rtp_frame_id_only_ref_finder.h Move video video receiver transformable frame to modules/rtc_rtcp/source 2023-02-03 12:59:19 +00:00
rtp_frame_reference_finder.cc Format /modules 2023-04-20 02:02:45 +00:00
rtp_frame_reference_finder.h Move video video receiver transformable frame to modules/rtc_rtcp/source 2023-02-03 12:59:19 +00:00
rtp_frame_reference_finder_unittest.cc Move video video receiver transformable frame to modules/rtc_rtcp/source 2023-02-03 12:59:19 +00:00
rtp_generic_ref_finder.cc In RtpFrameReferenceFinder discard frames with too large spatial id 2024-02-27 21:44:37 +00:00
rtp_generic_ref_finder.h Move video video receiver transformable frame to modules/rtc_rtcp/source 2023-02-03 12:59:19 +00:00
rtp_seq_num_only_ref_finder.cc Replace ABSL_FALLTHROUGH_INTENDED with c++17 attribute 2022-01-17 14:55:02 +00:00
rtp_seq_num_only_ref_finder.h Move video video receiver transformable frame to modules/rtc_rtcp/source 2023-02-03 12:59:19 +00:00
rtp_vp8_ref_finder.cc SVC: Add end to end tests for VP8 and VP9 2022-06-22 11:07:01 +00:00
rtp_vp8_ref_finder.h Move video video receiver transformable frame to modules/rtc_rtcp/source 2023-02-03 12:59:19 +00:00
rtp_vp8_ref_finder_unittest.cc Move video video receiver transformable frame to modules/rtc_rtcp/source 2023-02-03 12:59:19 +00:00
rtp_vp9_ref_finder.cc Reland "Mark frames with inter_layer_predicted=true as delta frames" 2024-04-02 18:59:58 +00:00
rtp_vp9_ref_finder.h Move video video receiver transformable frame to modules/rtc_rtcp/source 2023-02-03 12:59:19 +00:00
rtp_vp9_ref_finder_unittest.cc Reland "Mark frames with inter_layer_predicted=true as delta frames" 2024-04-02 18:59:58 +00:00
video_codec_initializer.cc Remove multiplex codec. 2024-02-26 11:26:04 +00:00
video_codec_initializer_unittest.cc Remove multiplex codec. 2024-02-26 11:26:04 +00:00
video_coding_defines.cc Add powerEfficientDecoder and powerEfficientEncoder stats 2022-10-19 13:15:31 +00:00
video_coding_impl.cc Fork VCMDecoderDatabase for VideoReceiver. 2022-09-29 19:01:05 +00:00
video_coding_impl.h Move deprecated Receiver to modules/video_coding/deprecated/ 2023-05-08 07:02:15 +00:00
video_receiver.cc Move deprecated Receiver to modules/video_coding/deprecated/ 2023-05-08 07:02:15 +00:00
video_receiver2.cc Remove VCMEncodedFrame from webrtc::EncodedFrame inheritance 2023-08-28 11:46:48 +00:00
video_receiver2.h Remove VCMEncodedFrame from webrtc::EncodedFrame inheritance 2023-08-28 11:46:48 +00:00
video_receiver2_unittest.cc Remove EncodedFrame::MissingFrame and start removing Decode() param 2023-08-30 10:38:35 +00:00
video_receiver_unittest.cc Remove EncodedFrame::MissingFrame and start removing Decode() param 2023-08-30 10:38:35 +00:00