#ifndef ANSFILEPLAYER_CV_H #define ANSFILEPLAYER_CV_H #define ANSFILEPLAYER_API __declspec(dllexport) #include #include #include "ANSLicense.h" #include "LabVIEWHeader/extcode.h" #include #include "sys_inc.h" #include "rtsp_cln.h" #include "hqueue.h" #include "http.h" #include "http_parse.h" #include "video_decoder.h" #include "audio_decoder.h" #include "file_player.h" #include #include #include #include #include #include #include namespace ANSCENTER { class ANSFILEPLAYER_API ANSFILEPLAYER_CV { protected: cv::VideoCapture cap; int _resWidth; int _resHeight; int64_t _totalFrames; int64_t _currentFrame; int64_t _previousPTS; double _fps; bool _isPlaying; std::string _lastJpegImage; //int64_t _previousPTS; cv::Mat _previousImage; bool m_bPaused; int _imageRotateDeg = 0; std::string _url; cv::Rect _bbox; bool _crop; std::recursive_mutex _mutex; std::shared_ptr> _stopThread; std::shared_ptr _timerThread; std::mutex _cvMutex; std::condition_variable _cv; //EngineType engineType; //// Initialize nvJPEG structures //nvjpegHandle_t nv_handle; //nvjpegEncoderState_t nv_enc_state; //nvjpegEncoderParams_t nv_enc_params; //cudaStream_t stream; tjhandle _jpegCompressor; public: ANSFILEPLAYER_CV(); ~ANSFILEPLAYER_CV() noexcept; [[nodiscard]] bool Init(std::string licenseKey, std::string url); [[nodiscard]] bool Setup(); [[nodiscard]] bool Reconnect(); [[nodiscard]] bool Start(); [[nodiscard]] bool IsPaused(); [[nodiscard]] bool IsPlaying(); [[nodiscard]] bool IsRecording(); void SetBBox(cv::Rect bbox); void SetCrop(bool crop); [[nodiscard]] bool Stop(); void Destroy(); void EnableAudio(bool status); void SetAudioVolume(int volume); void SetImageRotate(int mode) { std::lock_guard lock(_mutex); _imageRotateDeg = mode; if (mode > 360) _imageRotateDeg = 360; }; [[nodiscard]] cv::Mat GetImage(int& width, int& height, int64_t& pts); [[nodiscard]] std::string MatToBinaryData(const cv::Mat& image); [[nodiscard]] std::string GetJpegStringImage(int& width, int& height, int64_t& pts); public: void CheckLicense(); SPDLogger& _logger = SPDLogger::GetInstance("ANSFilePlayer_CV", false); bool _licenseValid{ false }; //std::once_flag licenseOnceFlag; std::string _licenseKey; private: std::string encodeJpegString(const cv::Mat& img, int quality = 80); //std::string encodeMatToJpegWithNvJPEG(const cv::Mat& inputMat, int quality = 80); //void uploadPlanarBGRToGPU(const cv::Mat& inputMat, unsigned char** data); void StartTimer(std::shared_ptr> stopFlag, int interval_ms); void StopTimerThread(); }; } extern "C" __declspec(dllexport) int CreateANSFileCVPlayerHandle(ANSCENTER::ANSFILEPLAYER_CV** Handle, const char* licenseKey, const char* url); extern "C" __declspec(dllexport) int ReleaseANSFileCVPlayerHandle(ANSCENTER::ANSFILEPLAYER_CV** Handle); extern "C" __declspec(dllexport) int GetFileCVPlayerImage(ANSCENTER::ANSFILEPLAYER_CV** Handle, int& width, int& height, int64_t& timeStamp, LStrHandle jpegImage); extern "C" __declspec(dllexport) int GetFileCVPlayerStrImage(ANSCENTER::ANSFILEPLAYER_CV** Handle, int& width, int& height, int64_t& timeStamp, std::string& jpegImage); extern "C" __declspec(dllexport) int GetFileCVPlayerCVImage(ANSCENTER::ANSFILEPLAYER_CV** Handle, int& width, int& height, int64_t& timeStamp, cv::Mat** image); extern "C" __declspec(dllexport) int StartFileCVPlayer(ANSCENTER::ANSFILEPLAYER_CV** Handle); extern "C" __declspec(dllexport) int ReconnectFileCVPlayer(ANSCENTER::ANSFILEPLAYER_CV** Handle); extern "C" __declspec(dllexport) int StopFileCVPlayer(ANSCENTER::ANSFILEPLAYER_CV** Handle); extern "C" __declspec(dllexport) int IsFileCVPlayerPaused(ANSCENTER::ANSFILEPLAYER_CV** Handle); extern "C" __declspec(dllexport) int IsFileCVPlayerRunning(ANSCENTER::ANSFILEPLAYER_CV** Handle); extern "C" __declspec(dllexport) int IsFileCVPlayerRecording(ANSCENTER::ANSFILEPLAYER_CV** Handle); extern "C" __declspec(dllexport) void SetFileCVPlayerAudioVolume(ANSCENTER::ANSFILEPLAYER_CV** Handle, int volume); extern "C" __declspec(dllexport) void EnableFileCVPlayerAudioVolume(ANSCENTER::ANSFILEPLAYER_CV** Handle, int status); extern "C" __declspec(dllexport) void SetFileCVPlayerImageRotation(ANSCENTER::ANSFILEPLAYER_CV** Handle, double rotationAngle); extern "C" __declspec(dllexport) int SetBBoxFileCVPlayer(ANSCENTER::ANSFILEPLAYER_CV** Handle, int x, int y, int width, int height); extern "C" __declspec(dllexport) int SetCropFlagFileCVPlayer(ANSCENTER::ANSFILEPLAYER_CV** Handle, int cropFlag); #endif