ManageFrameH264 for temporal layers (PART 3/3)

Bug: webrtc:10579
Change-Id: Iec54f6b1231d34c2018f22841c3614ddd0b05612
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/86200
Commit-Queue: Sergey Silkin <ssilkin@webrtc.org>
Reviewed-by: Sergey Silkin <ssilkin@webrtc.org>
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27820}
This commit is contained in:
Johnny Lee
2019-05-01 14:41:32 -04:00
committed by Commit Bot
parent c80e4d756e
commit bc7f41b231
4 changed files with 611 additions and 5 deletions

View File

@ -136,6 +136,26 @@ class RtpFrameReferenceFinder {
void UnwrapPictureIds(RtpFrameObject* frame)
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_);
// Find references for H264 frames
FrameDecision ManageFrameH264(RtpFrameObject* frame)
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_);
// Update "last-picture-id-with-padding" sequence number for H264.
void UpdateLastPictureIdWithPaddingH264()
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_);
// Update H264 layer info state used to determine frame references.
void UpdateLayerInfoH264(RtpFrameObject* frame,
int64_t unwrapped_tl0,
uint8_t temporal_idx)
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_);
// Update H264 state for decodeable frames.
void UpdateDataH264(RtpFrameObject* frame,
int64_t unwrapped_tl0,
uint8_t temporal_idx)
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_);
// For every group of pictures, hold two sequence numbers. The first being
// the sequence number of the last packet of the last completed frame, and
// the second being the sequence number of the last packet of the last
@ -159,6 +179,11 @@ class RtpFrameReferenceFinder {
std::set<uint16_t, DescendingSeqNumComp<uint16_t, kPicIdLength>>
not_yet_received_frames_ RTC_GUARDED_BY(crit_);
// Sequence numbers of frames earlier than the last received frame that
// have not yet been fully received.
std::set<uint16_t, DescendingSeqNumComp<uint16_t>>
not_yet_received_seq_num_ RTC_GUARDED_BY(crit_);
// Frames that have been fully received but didn't have all the information
// needed to determine their references.
std::deque<std::unique_ptr<RtpFrameObject>> stashed_frames_
@ -166,7 +191,7 @@ class RtpFrameReferenceFinder {
// Holds the information about the last completed frame for a given temporal
// layer given an unwrapped Tl0 picture index.
std::map<int64_t, std::array<int16_t, kMaxTemporalLayers>> layer_info_
std::map<int64_t, std::array<int64_t, kMaxTemporalLayers>> layer_info_
RTC_GUARDED_BY(crit_);
// Where the current scalability structure is in the