dvpp_process.cpp 4.72 KB
/**
* 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 <iostream>
#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);
}