OrangePi3588Media/plugins/alarm/packet_ring_buffer.h
sladro 80e7abcd08
Some checks are pending
CI / host-build (push) Waiting to run
CI / rk3588-cross-build (push) Waiting to run
优化性能
2026-01-06 16:26:39 +08:00

37 lines
861 B
C++

#pragma once
#include <cstdint>
#include <deque>
#include <memory>
#include <mutex>
#include <vector>
#include "media/encoded_video_meta.h"
namespace rk3588 {
class PacketRingBuffer {
public:
explicit PacketRingBuffer(int window_sec = 20, int fps_hint = 25);
void Push(std::shared_ptr<EncodedVideoFrameMeta> meta);
std::vector<std::shared_ptr<EncodedVideoFrameMeta>> GetPacketsInRange(int64_t start_pts_ms,
int64_t end_pts_ms) const;
int64_t LatestPtsMs() const;
size_t Size() const;
void Clear();
private:
struct Entry {
int64_t pts_ms = 0;
std::shared_ptr<EncodedVideoFrameMeta> meta;
};
mutable std::mutex mu_;
std::deque<Entry> buf_;
size_t max_packets_ = 0;
int64_t last_pts_ms_ = 0;
};
} // namespace rk3588