/* * Copyright (c) 2021 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree.
*/
namespace webrtc { // The high level idea of the FrameBuffer is to order frames received from the // network into a decodable stream. Frames are order by frame ID, and grouped // into temporal units by timestamp. A temporal unit is decodable after all // referenced frames outside the unit has been decoded, and a temporal unit is // continuous if all referenced frames are directly or indirectly decodable. // The FrameBuffer is thread-unsafe. class FrameBuffer { public: struct DecodabilityInfo {
uint32_t next_rtp_timestamp;
uint32_t last_rtp_timestamp;
};
// The `max_size` determines the maximum number of frames the buffer will // store, and max_decode_history determines how far back (by frame ID) the // buffer will store if a frame was decoded or not.
FrameBuffer(int max_size, int max_decode_history, // TODO(hta): remove field trials! const FieldTrialsView& field_trials);
FrameBuffer(const FrameBuffer&) = delete;
FrameBuffer& operator=(const FrameBuffer&) = delete;
~FrameBuffer() = default;
// Inserted frames may only reference backwards, and must have no duplicate // references. Frame insertion will fail if `frame` is a duplicate, has // already been decoded, invalid, or if the buffer is full and the frame is // not a keyframe. Returns true if the frame was successfully inserted. bool InsertFrame(std::unique_ptr<EncodedFrame> frame);
// Mark all frames belonging to the next decodable temporal unit as decoded // and returns them.
absl::InlinedVector<std::unique_ptr<EncodedFrame>, 4>
ExtractNextDecodableTemporalUnit();
// Drop all frames in the next decodable unit. void DropNextDecodableTemporalUnit();
int GetTotalNumberOfContinuousTemporalUnits() const; int GetTotalNumberOfDroppedFrames() const; int GetTotalNumberOfDiscardedPackets() const;
size_t CurrentSize() const;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.