20 lines
1.2 KiB
C++
20 lines
1.2 KiB
C++
#pragma once
|
|
#include "common.hpp"
|
|
#include <npp.h>
|
|
#include <opencv2/core.hpp>
|
|
namespace cms {
|
|
inline void nppCheck(NppStatus status) {if(status<0)throw std::runtime_error("NPP error "+std::to_string(int(status)));}
|
|
inline NppStreamContext nppContext(cudaStream_t stream) {
|
|
NppStreamContext c{};c.hStream=stream;CUDA_CHECK(cudaGetDevice(&c.nCudaDeviceId));cudaDeviceProp p{};CUDA_CHECK(cudaGetDeviceProperties(&p,c.nCudaDeviceId));
|
|
c.nMultiProcessorCount=p.multiProcessorCount;c.nMaxThreadsPerMultiProcessor=p.maxThreadsPerMultiProcessor;c.nMaxThreadsPerBlock=p.maxThreadsPerBlock;c.nSharedMemPerBlock=p.sharedMemPerBlock;c.nCudaDevAttrComputeCapabilityMajor=p.major;c.nCudaDevAttrComputeCapabilityMinor=p.minor;CUDA_CHECK(cudaStreamGetFlags(stream,&c.nStreamFlags));return c;
|
|
}
|
|
class YoloPreprocess {
|
|
public:
|
|
YoloPreprocess(int width,int height):width_(width),height_(height) {CUDA_CHECK(cudaMalloc(&letter_,size_t(width)*height*3));}
|
|
~YoloPreprocess(){cudaFree(source_);cudaFree(letter_);}
|
|
void enqueue(cv::Mat const& frame,float* destination,cudaStream_t stream);
|
|
private:
|
|
int width_,height_;size_t capacity_{};unsigned char *source_{},*letter_{};
|
|
};
|
|
}
|