/** * Copyright 2020 Huawei Technologies Co., Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * File dvpp_process.cpp * Description: handle dvpp process */ #include #include "acl/acl.h" #include "dvpp_cropandpaste.h" #include "dvpp_jpegd.h" #include "dvpp_process.h" #include "sy_errorinfo.h" using namespace std; DvppProcess::DvppProcess() : isInitOk_(false), dvppChannelDesc_(nullptr) { isGlobalContext_ = false; } DvppProcess::~DvppProcess() { DestroyResource(); } void DvppProcess::DestroyResource() { aclError aclRet; if (dvppChannelDesc_ != nullptr) { aclRet = acldvppDestroyChannel(dvppChannelDesc_); if (aclRet != ACL_SUCCESS) { ERROR_LOG("acldvppDestroyChannel failed, aclRet = %d", aclRet); } (void)acldvppDestroyChannelDesc(dvppChannelDesc_); dvppChannelDesc_ = nullptr; } //INFO_LOG("end to destroy context"); } int DvppProcess::InitResource(aclrtStream& stream) { aclError aclRet; dvppChannelDesc_ = acldvppCreateChannelDesc(); if (dvppChannelDesc_ == nullptr) { ERROR_LOG("acldvppCreateChannelDesc failed"); return SY_FAILED; } aclRet = acldvppCreateChannel(dvppChannelDesc_); if (aclRet != ACL_SUCCESS) { ERROR_LOG("acldvppCreateChannel failed, aclRet = %d", aclRet); return SY_FAILED; } stream_ = stream; isInitOk_ = true; //INFO_LOG("dvpp init resource ok"); return SY_SUCCESS; } // int DvppProcess::CropAndPaste(ImageData& dest, ImageData& src, // uint32_t width, uint32_t height) { // DvppCropAndPaste cropandpasteOp(stream_, dvppChannelDesc_, width, height); // return cropandpasteOp.Process(dest, src); // } // int DvppProcess::Crop2Paste(ImageData& dest, ImageData& leftImage, ImageData& rightImage, // ImageData& src,uint32_t width, uint32_t height) { // DvppCropAndPaste cropandpasteOp(stream_, dvppChannelDesc_, width, height); // return cropandpasteOp.Crop2Process(dest, leftImage, rightImage, src); // } // int DvppProcess::CropAndPadding(ImageData& dest, ImageData& src, // uint32_t width, uint32_t height) { // DvppCropAndPaste cropandpasteOp(stream_, dvppChannelDesc_, width, height); // return cropandpasteOp.ResizeWithPadding(dest, src); // } // int DvppProcess::PatchCropAndPaste(ImageData& dest, ImageData& src, uint32_t xmin, uint32_t ymin, // uint32_t xmax, uint32_t ymax, uint32_t width, uint32_t height) { // DvppCropAndPaste cropandpasteOp(stream_, dvppChannelDesc_, width, height); // return cropandpasteOp.PatchProcess(dest, src, xmin, ymin, xmax, ymax); // } // int DvppProcess::CvtJpegToYuv420sp(ImageData& dest, ImageData& src) { // DvppJpegD jpegD(stream_, dvppChannelDesc_); // return jpegD.Process(dest, src); // } int DvppProcess::CropAndPaste(ImageData& dest, ImageData& src, uint32_t width, uint32_t height) { DvppCropAndPaste cropandpasteOp(stream_, dvppChannelDesc_, width, height); return cropandpasteOp.Process(dest, src); } int DvppProcess::Crop2Paste(ImageData& dest, ImageData& leftImage, ImageData& rightImage, ImageData& src,uint32_t width, uint32_t height) { DvppCropAndPaste cro2pasteOp(stream_, dvppChannelDesc_, width, height); return cro2pasteOp.Crop2Process(dest, leftImage, rightImage, src); } int DvppProcess::CropAndPadding(ImageData& dest, ImageData& src, uint32_t width, uint32_t height) { DvppCropAndPaste cropandpaddingOp(stream_, dvppChannelDesc_, width, height); return cropandpaddingOp.ResizeWithPadding(dest, src); } int DvppProcess::PatchCropAndPaste(ImageData& dest, ImageData& src, uint32_t xmin, uint32_t ymin, uint32_t xmax, uint32_t ymax, uint32_t width, uint32_t height) { DvppCropAndPaste patchcropandpasteOp(stream_, dvppChannelDesc_, width, height); return patchcropandpasteOp.PatchProcess(dest, src, xmin, ymin, xmax, ymax); } int DvppProcess::CvtJpegToYuv420sp(ImageData& dest, ImageData& src) { DvppJpegD jpegD(stream_, dvppChannelDesc_); return jpegD.Process(dest, src); }