| Index: webrtc/modules/video_coding/rtp_frame_reference_finder.h
|
| diff --git a/webrtc/modules/video_coding/rtp_frame_reference_finder.h b/webrtc/modules/video_coding/rtp_frame_reference_finder.h
|
| index db1ddf80725b2e638744d467a54ac0e27bad3ad5..06f449ac3916a88ec106a6634b8e5f9a58d65537 100644
|
| --- a/webrtc/modules/video_coding/rtp_frame_reference_finder.h
|
| +++ b/webrtc/modules/video_coding/rtp_frame_reference_finder.h
|
| @@ -44,7 +44,7 @@ class RtpFrameReferenceFinder {
|
| // Manage this frame until:
|
| // - We have all information needed to determine its references, after
|
| // which |frame_callback_| is called with the completed frame, or
|
| - // - We have too many stashed frames (determined by |kMaxStashedFrames)
|
| + // - We have too many stashed frames (determined by |kMaxStashedFrames|)
|
| // so we drop this frame, or
|
| // - It gets cleared by ClearTo, which also means we drop it.
|
| void ManageFrame(std::unique_ptr<RtpFrameObject> frame);
|
| @@ -65,6 +65,7 @@ class RtpFrameReferenceFinder {
|
| static const int kMaxGofSaved = 50;
|
| static const int kMaxPaddingAge = 100;
|
|
|
| + enum FrameDecision { kStash, kHandOff, kDrop };
|
|
|
| struct GofInfo {
|
| GofInfo(GofInfoVP9* gof, uint16_t last_picture_id)
|
| @@ -80,33 +81,29 @@ class RtpFrameReferenceFinder {
|
| void UpdateLastPictureIdWithPadding(uint16_t seq_num)
|
| EXCLUSIVE_LOCKS_REQUIRED(crit_);
|
|
|
| - // Retry finding references for all frames that previously didn't have
|
| - // all information needed.
|
| + // Retry stashed frames until no more complete frames are found.
|
| void RetryStashedFrames() EXCLUSIVE_LOCKS_REQUIRED(crit_);
|
|
|
| + FrameDecision ManageFrameInternal(RtpFrameObject* frame)
|
| + EXCLUSIVE_LOCKS_REQUIRED(crit_);
|
| +
|
| // Find references for generic frames. If |picture_id| is unspecified
|
| // then packet sequence numbers will be used to determine the references
|
| // of the frames.
|
| - void ManageFrameGeneric(std::unique_ptr<RtpFrameObject> frame,
|
| - int picture_id) EXCLUSIVE_LOCKS_REQUIRED(crit_);
|
| + FrameDecision ManageFrameGeneric(RtpFrameObject* frame, int picture_id)
|
| + EXCLUSIVE_LOCKS_REQUIRED(crit_);
|
|
|
| // Find references for Vp8 frames
|
| - void ManageFrameVp8(std::unique_ptr<RtpFrameObject> frame)
|
| + FrameDecision ManageFrameVp8(RtpFrameObject* frame)
|
| EXCLUSIVE_LOCKS_REQUIRED(crit_);
|
|
|
| - // Updates all necessary state used to determine frame references
|
| - // for Vp8 and then calls the |frame_callback| callback with the
|
| - // completed frame.
|
| - void CompletedFrameVp8(std::unique_ptr<RtpFrameObject> frame)
|
| + // Updates necessary layer info state used to determine frame references for
|
| + // Vp8.
|
| + void UpdateLayerInfoVp8(RtpFrameObject* frame)
|
| EXCLUSIVE_LOCKS_REQUIRED(crit_);
|
|
|
| // Find references for Vp9 frames
|
| - void ManageFrameVp9(std::unique_ptr<RtpFrameObject> frame)
|
| - EXCLUSIVE_LOCKS_REQUIRED(crit_);
|
| -
|
| - // Unwrap the picture id and the frame references and then call the
|
| - // |frame_callback| callback with the completed frame.
|
| - void CompletedFrameVp9(std::unique_ptr<RtpFrameObject> frame)
|
| + FrameDecision ManageFrameVp9(RtpFrameObject* frame)
|
| EXCLUSIVE_LOCKS_REQUIRED(crit_);
|
|
|
| // Check if we are missing a frame necessary to determine the references
|
| @@ -126,6 +123,8 @@ class RtpFrameReferenceFinder {
|
| uint8_t temporal_idx,
|
| uint16_t pid_ref) EXCLUSIVE_LOCKS_REQUIRED(crit_);
|
|
|
| + // Unwrap |frame|s picture id and its references to 16 bits.
|
| + void UnwrapPictureIds(RtpFrameObject* frame) EXCLUSIVE_LOCKS_REQUIRED(crit_);
|
| // All picture ids are unwrapped to 16 bits.
|
| uint16_t UnwrapPictureId(uint16_t picture_id) EXCLUSIVE_LOCKS_REQUIRED(crit_);
|
|
|
|
|