1 Star 0 Fork 0

楚丰/聚合出图平台

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
WHXYCap.cpp 3.54 KB
一键复制 编辑 原始数据 按行查看 历史
楚丰 提交于 15天前 . asdfghjkl;'
#include "WHXYCap.h"
#include "sdk/whxy/LibXySensor.h"
#include <chrono>
#include <fstream>
#include <thread>
#ifdef _DEBUG
#pragma comment(lib,"libXySensor.lib")
#else
#pragma comment(lib,"libXySensor.lib")
#endif // DEBUG
class WHXYCaptrue :LibXySensor
{
public:
int w = 0, h = 0, dataFormat = 0;
LibXySensor whxySensor{};
uint64_t ouid = 0;
uint64_t uid = 0;
bool isFramIn = false;
bool isConnected = false;
unsigned char* imgBuffer = nullptr;
public:
void Regist()
{
this->whxySensor.RegistCallback(
std::bind(&WHXYCaptrue::VideoData, this, std::placeholders::_1),
std::bind(&WHXYCaptrue::VideoStatus, this, std::placeholders::_1, std::placeholders::_2));
}
void VideoData(const video_out_s& data)
{
int size = 0;
// 处理视频数据回调
h = data.frameInfo.height;
w = data.frameInfo.width;
dataFormat = data.frameInfo.type; // 假设 type 对应于 imgDataFormat
size = data.frameInfo.height * data.frameInfo.width * 3; // 假设每个像素3字节
if (imgBuffer == nullptr)
{
imgBuffer = new unsigned char[size]; // 假设每个像素3字节
isFramIn = true;
}
std::vector<uint8_t> rgbVec(size);
whxySensor.YuvToRgb(
data.yuvData,
rgbVec, data.frameInfo.width, data.frameInfo.height);
uid = data.frameInfo.uId;
memcpy_s(whxyCaptrue[0].imgBuffer, size, rgbVec.data(), rgbVec.size());
}
void VideoStatus(const ws_tatus_type_e& type, const std::string& msg)
{
isConnected = type == ws_tatus_type_e::Connected;
}
}whxyCaptrue[8];
char* WHXYCap::EnumDevs()
{
std::string sn = "";
//whxySensor.getSn(sn);
size_t len = sn.length();
if (len == 0) return (char*)"";
char* serialNosChar = new char[len + 1] {0};
memcpy_s(serialNosChar, len, sn.c_str(), len);
serialNosChar[len] = '\0';
return serialNosChar;
}
int WHXYCap::Run(int devID, const char* devSerialNo, const char* capFile, int* imgH, int* imgW, int* imgDataFormat)
{
whxyCaptrue[devID].ouid = 0;
whxyCaptrue[devID].isFramIn = false;
whxyCaptrue[devID].isConnected = false;
whxyCaptrue[devID].h = 0, whxyCaptrue[devID].w = 0, whxyCaptrue[devID].dataFormat = 0;
try
{
whxyCaptrue[devID].whxySensor.Connect(std::string(devSerialNo));
whxyCaptrue[devID].Regist();
int timeout = 2000; // 20秒超时
while (!((whxyCaptrue[devID].isConnected && whxyCaptrue[devID].isFramIn) || timeout-- < 0))
std::this_thread::sleep_for(std::chrono::milliseconds(10));
if (timeout <= 0)
return ERR::EC::Err_DevOpenFail;
//*imgH = whxyCaptrue[devID].h;
//*imgW = whxyCaptrue[devID].w;
//*imgDataFormat = whxyCaptrue[devID].dataFormat;
return ERR::EC::OK;
}
catch (const std::exception&)
{
return ERR::EC::Err_DevOpenFail;
}
}
int WHXYCap::Cap(int devID, int imgH, int imgW, int imgDataFormat, unsigned char* imgBuffer, int* capFramIndex, ENUM::CAPTYPE CT)
{
if (!whxyCaptrue[devID].isConnected)
return ERR::EC::Err_DevOpenFail;
int timeout = 100;
while (!((whxyCaptrue[devID].ouid != whxyCaptrue[devID].uid) || timeout-- < 0))
{
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
if (timeout <= 0)
return ERR::EC::Err_NoNewFramIn;
whxyCaptrue[devID].ouid = whxyCaptrue[devID].uid; // 更新上次的帧索引
int size = imgH * imgW * 3; // 假设每个像素3字节
memcpy_s(imgBuffer, size, whxyCaptrue[devID].imgBuffer, size); // 假设每个像素3字节
*capFramIndex = static_cast<int>(whxyCaptrue[devID].uid); // 假设帧索引为0
return ERR::EC::OK;
}
int WHXYCap::Stop(int devID)
{
whxyCaptrue[devID].whxySensor.DisConnect();
if (whxyCaptrue[devID].imgBuffer)
{
delete[](whxyCaptrue[devID].imgBuffer);
whxyCaptrue[devID].imgBuffer = nullptr;
}
return ERR::EC::OK;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/tfuck/aggregate-graph-platform.git
git@gitee.com:tfuck/aggregate-graph-platform.git
tfuck
aggregate-graph-platform
聚合出图平台
master

搜索帮助