#include "CropUtil.h" #include "logger.hpp" #include "sy_errorinfo.h" CropUtil::CropUtil(/* args */) { } CropUtil::~CropUtil() { release(); } int CropUtil::init(int devId){ ACL_CALL(aclrtCreateContext(&m_ctx, devId), ACL_SUCCESS, SY_FAILED); ACL_CALL(aclrtCreateStream(&stream), ACL_SUCCESS, SY_FAILED); m_dvpp = new DvppProcessx(); int ret = m_dvpp->InitResource(stream); if (ret != SY_SUCCESS) { delete m_dvpp; m_dvpp = nullptr; LOG_ERROR("dvpp init failed!"); return SY_FAILED; } return SY_SUCCESS; } int CropUtil::release(){ ACL_CALL(aclrtSetCurrentContext(m_ctx), ACL_SUCCESS, SY_FAILED); if (m_dvpp) { delete m_dvpp; m_dvpp = nullptr; } if (stream != nullptr) { int ret = aclrtDestroyStream(stream); if (ret != ACL_SUCCESS) { LOG_ERROR("destroy stream failed"); } stream = nullptr; } aclrtDestroyContext(m_ctx); } ImageData* CropUtil::crop(ImageData& src, uint32_t xmin, uint32_t ymin, uint32_t xmax, uint32_t ymax) { int ret = aclrtSetCurrentContext(m_ctx); if (ACL_SUCCESS != ret) { return nullptr; } int width = xmax - xmin; int height = ymax - ymin; uint32_t alignWidth = (width + 127) / 128 * 128; uint32_t alignHeight = (height + 15) / 16 * 16; return m_dvpp->Crop_naked(src, xmin, ymin, xmax, ymax, alignWidth, alignHeight); }