Waifu2x::eWaifu2xError Waifu2x::ProcessNet(std::shared_ptr<cNet> net, const int crop_w, const int crop_h, const bool use_tta, const int batch_size, cv::Mat &im) { Waifu2x::eWaifu2xError ret; CudaDeviceSet devset(mProcess, mGPUNo); const auto OutputMemorySize = net->GetOutputMemorySize(crop_w, crop_h, OuterPadding, batch_size); if (OutputMemorySize > mOutputBlockSize) { if (mIsCuda) { CUDA_HOST_SAFE_FREE(mOutputBlock); CUDA_CHECK_WAIFU2X(cudaHostAlloc(&mOutputBlock, OutputMemorySize, cudaHostAllocDefault)); } else { SAFE_DELETE_WAIFU2X(mOutputBlock); mOutputBlock = new float[OutputMemorySize]; } mOutputBlockSize = OutputMemorySize; } ret = net->ReconstructImage(use_tta, crop_w, crop_h, OuterPadding, batch_size, mOutputBlock, im, im); if (ret != Waifu2x::eWaifu2xError_OK) return ret; return Waifu2x::eWaifu2xError_OK; }
void Waifu2x::destroy() { net_noise.reset(); net_scale.reset(); if (isCuda) { CUDA_HOST_SAFE_FREE(input_block); CUDA_HOST_SAFE_FREE(dummy_data); CUDA_HOST_SAFE_FREE(output_block); } else { SAFE_DELETE_WAIFU2X(input_block); SAFE_DELETE_WAIFU2X(dummy_data); SAFE_DELETE_WAIFU2X(output_block); } is_inited = false; }
void Waifu2x::Destroy() { CudaDeviceSet devset(mProcess, mGPUNo); mNoiseNet.reset(); mScaleNet.reset(); if (mIsCuda) { CUDA_HOST_SAFE_FREE(mOutputBlock); } else { SAFE_DELETE_WAIFU2X(mOutputBlock); } mIsInited = false; }