赞
踩
mxVision很多是类似cuda的搞法 主要还是围绕gstreamer
下面是常用转换:
1.opencv转MemoryData
待定
2.DvppDataInfo下载转opencv
- int DvppDataSavejpg(DvppDataInfo& output, std::string jpgname)
- {
- //测试转换成功
- MemoryData hostData(output.dataSize, MemoryData::MEMORY_HOST);
- MemoryData deviceSrc(static_cast<void*>(output.data), output.dataSize, MemoryData::MEMORY_DVPP);
- int ret = MemoryHelper::MxbsMallocAndCopy(hostData, deviceSrc);
- if (ret != APP_ERR_OK)
- {
- MemoryHelper::MxbsFree(hostData);
- output.destory(output.data);
- return ret;
- }
- cv::Mat src(output.heightStride + output.heightStride / 2, output.widthStride, CV_8UC1, (unsigned char*)hostData.ptrData);
- cv::cvtColor(src, src, cv::COLOR_YUV2BGR_NV12);
- cv::imwrite(jpgname, src);
- }

3.MemoryData在GPU下载的转换
- //Device to Host 数据复制
- APP_ERROR copyDataToHost(MxBase::MemoryData& hostMem, MxBase::MemoryData& dvppMem)
- {
- // copy data from device to host
- dvppMem.type = MxBase::MemoryData::MEMORY_DVPP;
- hostMem.type = MxBase::MemoryData::MEMORY_HOST;
- hostMem.ptrData = nullptr;
- hostMem.size = dvppMem.size;
- hostMem.deviceId = dvppMem.deviceId;
- APP_ERROR ret = MxBase::MemoryHelper::MxbsMallocAndCopy(hostMem, dvppMem);
- if (ret != APP_ERR_OK)
- {
- LogError << "After dvpp encode, move data from dvpp to host failed.";
- return ret;
- }
- return APP_ERR_OK;
- }

4.MxpiVisionData数据转内存数据MemoryData
- //MxpiVisionData转内存数据MemoryData
- MxBase::MemoryData ConvertMemoryData(const MxTools::MxpiVisionData& mxpiVisionData)
- {
- MxBase::MemoryData memoryData = {};
- memoryData.deviceId = mxpiVisionData.deviceid();
- memoryData.type = (MxBase::MemoryData::MemoryType) 1;
- memoryData.size = (uint32_t)mxpiVisionData.datasize();
- memoryData.ptrData = (void*)mxpiVisionData.dataptr();
- return memoryData;
- }
5.MemoryData转MxpiVisionList
- //将内存MemoryData转MxpiVisionList数据
- std::shared_ptr<MxTools::MxpiVisionList> MemcopyList(MxBase::MemoryData newData)
- {
- // new shared_ptr MxpiVisionList;
- //std::shared_ptr<MxTools::MxpiVisionList> dstMxpiVisionListSptr(new MxTools::MxpiVisionList,MxTools::g_deleteFuncMxpiVisionList);
- std::shared_ptr<MxTools::MxpiVisionList> dstMxpiVisionListSptr(new MxTools::MxpiVisionList);
- MxTools::MxpiVision* dstMxpivision = dstMxpiVisionListSptr->add_visionvec();
- MxTools::MxpiVisionInfo* mxpiVisionInfo = dstMxpivision->mutable_visioninfo();
- mxpiVisionInfo->set_format(1);
- mxpiVisionInfo->set_height(416);
- mxpiVisionInfo->set_width(416);
- mxpiVisionInfo->set_heightaligned(416);
- mxpiVisionInfo->set_widthaligned(416);
- // set MxpiVisionData by MemoryData
- MxTools::MxpiVisionData* mxpiVisionData = dstMxpivision->mutable_visiondata();
- mxpiVisionData->set_dataptr((uint64_t)newData.ptrData);
- mxpiVisionData->set_datasize(newData.size);
- mxpiVisionData->set_deviceid(newData.deviceId);
- mxpiVisionData->set_memtype((MxTools::MxpiMemoryType) newData.type);
- return dstMxpiVisionListSptr;
- }

6.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。