rtsp_tensorrt/pipeline/input/frame_queue.hpp
sladro e13cb3659c feat: 初始化项目结构
- 创建基本项目结构和目录
- 添加CMake构建系统
- 实现基础的配置解析功能
- 添加YOLO推理框架支持
- 集成RTSP和视频流处理功能
- 添加性能监控和日志系统
2024-12-24 16:25:03 +08:00

48 lines
1.4 KiB
C++

#pragma once
#include <queue>
#include <mutex>
#include <condition_variable>
#include <opencv2/core/mat.hpp>
#include <chrono>
namespace pipeline {
class FrameQueue {
public:
explicit FrameQueue(size_t max_size = 30);
~FrameQueue();
// 禁用拷贝
FrameQueue(const FrameQueue&) = delete;
FrameQueue& operator=(const FrameQueue&) = delete;
// 推入一帧(带超时)
bool push(const cv::Mat& frame, std::chrono::milliseconds timeout = std::chrono::milliseconds(1000));
// 弹出一帧(带超时)
bool pop(cv::Mat& frame, std::chrono::milliseconds timeout = std::chrono::milliseconds(1000));
// 清空队列
void clear();
// 关闭队列
void close();
// 获取队列状态
bool empty() const;
bool full() const;
size_t size() const;
size_t capacity() const { return max_size_; }
bool is_closed() const { return is_closed_; }
private:
std::queue<cv::Mat> queue_; // 帧队列
mutable std::mutex mutex_; // 互斥锁
std::condition_variable not_full_; // 队列未满条件变量
std::condition_variable not_empty_; // 队列非空条件变量
const size_t max_size_; // 最大队列大小
bool is_closed_{false}; // 队列是否关闭
};
} // namespace pipeline