#ifndef CMVR_ES_ABSTRACT_CAMERA_H #define CMVR_ES_ABSTRACT_CAMERA_H #pragma once #include #include "abstract_device.h" namespace cmvr::device { struct StreamFrameData { //原始图像数据 cv::Mat rgbImage; //深度图原始数据 cv::Mat depthImage; //彩色图像帧 std::vector rgbFrame; //深度图像帧 std::vector depthFrame; //编码格式 std::string codec = ".h264"; int width; int height; int fps; bool bKey; bool depthKey; }; class AbstractCamera : public AbstractDevice { public: // 录制状态 enum class RecordingState { STOPPED, RECORDING, PAUSED }; public: explicit AbstractCamera(const XmlNode &cfg): AbstractDevice(cfg) {} ~AbstractCamera() override = default; inline void getState(CameraState &state) {state = state_;} virtual void getRGBImage(cv::Mat &color) {} virtual void getDepthImage(cv::Mat &depth) {} virtual void getRGBDImages(cv::Mat &color, cv::Mat &depth) {} virtual void startRecording(const std::string &video_path) {} virtual void stopRecording() {} virtual void pauseRecording() {} virtual void resumeRecording() {} virtual void getEncodedFrame(StreamFrameData& frame_data, size_t& index) {} virtual bool startStreaming() {return true;} virtual void stopStreaming() {} protected: CameraState state_{}; void clear_error_() { this->state_.is_error = false; this->state_.error_message.clear(); } }; } #endif // CMVR_ES_ABSTRACT_CAMERA_H