更新时间:2021-03-18 GMT+08:00
分享

图片解码

基本原理

示例代码

您可以从acl_vpc_jpege_resnet50样例的“src/sample_process.cpp”“src/dvpp_process.cpp”“src/utils.cpp”文件中查看完整样例代码。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "acl/acl.h"
#include "acl/ops/acl_dvpp.h"
//1.ACL初始化
const char *aclConfigPath = "../src/acl.json";
aclError ret = aclInit(aclConfigPath);

//2.运行管理资源申请,包括Device、Context、Stream
ret = aclrtSetDevice(deviceId_);
ret = aclrtCreateContext(&context_, deviceId_);
ret = aclrtCreateStream(&stream_);

//3.将图片读入内存,inDevBuffer_表示存放输入图片的内存, inDevBufferSize表示内存大小,输入内存要提前申请
ret = acldvppMalloc(&inDevBuffer_, inDevBufferSize);

//4.创建图片数据处理通道时的通道描述信息,dvppChannelDesc_是acldvppChannelDesc类型
dvppChannelDesc_ = acldvppCreateChannelDesc();

//5.创建图片数据处理的通道。
aclError ret = acldvppCreateChannel(dvppChannelDesc_);

//6. 申请解码输出内存decodeOutDevBuffer_,内存大小decodeOutBufferSize根据计算公式得出
ret = acldvppMalloc(&decodeOutDevBuffer_, decodeOutBufferSize)

//7. 创建解码输出图片的描述信息,设置各属性值
//decodeOutputDesc是acldvppPicDesc类型
decodeOutputDesc_ = acldvppCreatePicDesc();
acldvppSetPicDescData(decodeOutputDesc_, decodeOutDevBuffer_);
acldvppSetPicDescFormat(decodeOutputDesc_, PIXEL_FORMAT_YUV_SEMIPLANAR_420); acldvppSetPicDescWidth(decodeOutputDesc_, inputWidth_);
acldvppSetPicDescHeight(decodeOutputDesc_, inputHeight_);
acldvppSetPicDescWidthStride(decodeOutputDesc_, decodeOutWidthStride);
acldvppSetPicDescHeightStride(decodeOutputDesc_, decodeOutHeightStride);
acldvppSetPicDescSize(decodeOutputDesc_, decodeOutBufferSize);

//8. 执行异步解码,再调用aclrtSynchronizeStream接口阻塞Host运行,直到指定Stream中的所有任务都完成
ret = acldvppJpegDecodeAsync(dvppChannelDesc_, inDevBuffer_, inDevBufferSize, decodeOutputDesc_, stream_);
ret = aclrtSynchronizeStream(stream_);

//9. 解码结束后,释放资源,包括解码输出图片的描述信息、解码输出内存、通道描述信息、通道等
acldvppDestroyPicDesc(decodeOutputDesc_);
(void)acldvppFree(decodeOutDevBuffer_);
acldvppDestroyChannel(dvppChannelDesc_);
(void)acldvppDestroyChannelDesc(dvppChannelDesc_);
dvppChannelDesc_ = nullptr;
//....
分享:

    相关文档

    相关产品

close