Commit 80793f7bc4d46a2b0022a5cdf4578969f21433cd
1 parent
c5950ce3
acl执行错误直接abort
Showing
2 changed files
with
52 additions
and
66 deletions
src/util/JpegUtil.cpp
@@ -6,39 +6,48 @@ | @@ -6,39 +6,48 @@ | ||
6 | 6 | ||
7 | using namespace std; | 7 | using namespace std; |
8 | 8 | ||
9 | +#define ACL_CHECK_AND_ABORT(ret, message) \ | ||
10 | + if(ret != 0) {LOG_ERROR("{}", message); std::abort();} | ||
9 | 11 | ||
10 | int JpegUtil::jpeg_init(int32_t devId){ | 12 | int JpegUtil::jpeg_init(int32_t devId){ |
11 | deviceId_ = devId; | 13 | deviceId_ = devId; |
12 | 14 | ||
13 | - aclError ret; | ||
14 | - /* 2.Run the management resource application, including Device, Context, Stream */ | ||
15 | - aclrtCreateContext(&context_, deviceId_); | 15 | + ACL_CHECK_AND_ABORT(aclrtCreateContext(&context_, deviceId_), "aclrtCreateContext failed!"); |
16 | 16 | ||
17 | // channel 准备 | 17 | // channel 准备 |
18 | dvppChannelDesc_ = acldvppCreateChannelDesc(); | 18 | dvppChannelDesc_ = acldvppCreateChannelDesc(); |
19 | - ret = acldvppCreateChannel(dvppChannelDesc_); | 19 | + if (dvppChannelDesc_ == nullptr) |
20 | + { | ||
21 | + LOG_ERROR("acldvppCreateChannelDesc failed!"); | ||
22 | + std::abort(); | ||
23 | + } | ||
24 | + | ||
25 | + ACL_CHECK_AND_ABORT(acldvppCreateChannel(dvppChannelDesc_), "acldvppCreateChannel failed!"); | ||
20 | 26 | ||
21 | // 创建图片编码配置数据,设置编码质量 | 27 | // 创建图片编码配置数据,设置编码质量 |
22 | // 编码质量范围[0, 100],其中level 0编码质量与level 100差不多,而在[1, 100]内数值越小输出图片质量越差。 | 28 | // 编码质量范围[0, 100],其中level 0编码质量与level 100差不多,而在[1, 100]内数值越小输出图片质量越差。 |
23 | jpegeConfig_ = acldvppCreateJpegeConfig(); | 29 | jpegeConfig_ = acldvppCreateJpegeConfig(); |
24 | - acldvppSetJpegeConfigLevel(jpegeConfig_, 100); | 30 | + if (jpegeConfig_ == nullptr) |
31 | + { | ||
32 | + LOG_ERROR("acldvppCreateJpegeConfig failed!"); | ||
33 | + std::abort(); | ||
34 | + } | ||
35 | + ACL_CHECK_AND_ABORT(acldvppSetJpegeConfigLevel(jpegeConfig_, 100), "acldvppSetJpegeConfigLevel failed!"); | ||
25 | } | 36 | } |
26 | 37 | ||
27 | void JpegUtil::jpeg_release(){ | 38 | void JpegUtil::jpeg_release(){ |
28 | - aclError ret; | ||
29 | - aclrtSetCurrentContext(context_); | ||
30 | 39 | ||
31 | - ret = acldvppDestroyChannel(dvppChannelDesc_); | ||
32 | - ret = acldvppDestroyChannelDesc(dvppChannelDesc_); | 40 | + ACL_CHECK_AND_ABORT(aclrtSetCurrentContext(context_), "aclrtSetCurrentContext failed!"); |
41 | + | ||
42 | + ACL_CHECK_AND_ABORT(acldvppDestroyChannel(dvppChannelDesc_), "acldvppDestroyChannel failed!"); | ||
43 | + ACL_CHECK_AND_ABORT(acldvppDestroyChannelDesc(dvppChannelDesc_), "acldvppDestroyChannelDesc failed!"); | ||
44 | + | ||
33 | dvppChannelDesc_ = nullptr; | 45 | dvppChannelDesc_ = nullptr; |
34 | 46 | ||
35 | acldvppDestroyJpegeConfig(jpegeConfig_); | 47 | acldvppDestroyJpegeConfig(jpegeConfig_); |
36 | 48 | ||
37 | if (context_ != nullptr) { | 49 | if (context_ != nullptr) { |
38 | - ret = aclrtDestroyContext(context_); | ||
39 | - if (ret != ACL_SUCCESS) { | ||
40 | - LOG_ERROR("destroy context failed"); | ||
41 | - } | 50 | + ACL_CHECK_AND_ABORT(aclrtDestroyContext(context_), "aclrtDestroyContext failed!"); |
42 | context_ = nullptr; | 51 | context_ = nullptr; |
43 | } | 52 | } |
44 | } | 53 | } |
@@ -61,38 +70,23 @@ int32_t JpegUtil::jpege_save(char* pcData , uint32_t dataLen, string out_file_na | @@ -61,38 +70,23 @@ int32_t JpegUtil::jpege_save(char* pcData , uint32_t dataLen, string out_file_na | ||
61 | 70 | ||
62 | bool JpegUtil::jpeg_encode(acldvppPicDesc *encodeInputDesc_, string out_file_name) { | 71 | bool JpegUtil::jpeg_encode(acldvppPicDesc *encodeInputDesc_, string out_file_name) { |
63 | 72 | ||
64 | - aclError aclRet ; | ||
65 | - aclrtSetCurrentContext(context_); | 73 | + ACL_CHECK_AND_ABORT(aclrtSetCurrentContext(context_), "aclrtSetCurrentContext failed!"); |
66 | 74 | ||
67 | // 8. 申请输出内存,申请Device内存encodeOutBufferDev_,存放编码后的输出数据 | 75 | // 8. 申请输出内存,申请Device内存encodeOutBufferDev_,存放编码后的输出数据 |
68 | uint32_t outBufferSize= 0; | 76 | uint32_t outBufferSize= 0; |
69 | - int ret = acldvppJpegPredictEncSize(encodeInputDesc_, jpegeConfig_, &outBufferSize); | ||
70 | - if (ret != ACL_SUCCESS) { | ||
71 | - LOG_ERROR("acldvppJpegPredictEncSize failed!"); | ||
72 | - return false; | ||
73 | - } | 77 | + ACL_CHECK_AND_ABORT(acldvppJpegPredictEncSize(encodeInputDesc_, jpegeConfig_, &outBufferSize), "acldvppJpegPredictEncSize failed!"); |
78 | + int ret ; | ||
79 | + | ||
74 | void *encodeOutBufferDev_ = nullptr; | 80 | void *encodeOutBufferDev_ = nullptr; |
75 | - ret = acldvppMalloc(&encodeOutBufferDev_, outBufferSize); | ||
76 | - if (ret != ACL_SUCCESS) { | ||
77 | - LOG_ERROR("acldvppMalloc failed!"); | ||
78 | - return false; | ||
79 | - } | 81 | + ACL_CHECK_AND_ABORT(acldvppMalloc(&encodeOutBufferDev_, outBufferSize), "acldvppJpegPredictEncSize failed!"); |
80 | 82 | ||
81 | bool bRet = false; | 83 | bool bRet = false; |
82 | aclrtStream stream_{nullptr}; | 84 | aclrtStream stream_{nullptr}; |
83 | aclrtCreateStream(&stream_); | 85 | aclrtCreateStream(&stream_); |
84 | do { | 86 | do { |
85 | // 9. 执行异步编码,再调用aclrtSynchronizeStream接口阻塞程序运行,直到指定Stream中的所有任务都完成 | 87 | // 9. 执行异步编码,再调用aclrtSynchronizeStream接口阻塞程序运行,直到指定Stream中的所有任务都完成 |
86 | - aclRet = acldvppJpegEncodeAsync(dvppChannelDesc_, encodeInputDesc_, encodeOutBufferDev_, &outBufferSize, jpegeConfig_, stream_); | ||
87 | - if (ret != ACL_SUCCESS) { | ||
88 | - LOG_ERROR("acldvppJpegEncodeAsync failed!"); | ||
89 | - break; | ||
90 | - } | ||
91 | - aclRet = aclrtSynchronizeStream(stream_); | ||
92 | - if (ret != ACL_SUCCESS) { | ||
93 | - LOG_ERROR("aclrtSynchronizeStream failed!"); | ||
94 | - break; | ||
95 | - } | 88 | + ACL_CHECK_AND_ABORT(acldvppJpegEncodeAsync(dvppChannelDesc_, encodeInputDesc_, encodeOutBufferDev_, &outBufferSize, jpegeConfig_, stream_), "acldvppJpegEncodeAsync failed!"); |
89 | + ACL_CHECK_AND_ABORT(aclrtSynchronizeStream(stream_), "aclrtSynchronizeStream failed!"); | ||
96 | 90 | ||
97 | // 申请Host内存outputHostBuffer | 91 | // 申请Host内存outputHostBuffer |
98 | void* outputHostBuffer = malloc(outBufferSize); | 92 | void* outputHostBuffer = malloc(outBufferSize); |
@@ -102,13 +96,7 @@ bool JpegUtil::jpeg_encode(acldvppPicDesc *encodeInputDesc_, string out_file_nam | @@ -102,13 +96,7 @@ bool JpegUtil::jpeg_encode(acldvppPicDesc *encodeInputDesc_, string out_file_nam | ||
102 | } | 96 | } |
103 | 97 | ||
104 | // 通过aclrtMemcpy接口将Device的处理结果数据传输到Host | 98 | // 通过aclrtMemcpy接口将Device的处理结果数据传输到Host |
105 | - aclRet = aclrtMemcpy(outputHostBuffer, outBufferSize, encodeOutBufferDev_, outBufferSize, ACL_MEMCPY_DEVICE_TO_HOST); | ||
106 | - if (ret != ACL_SUCCESS) { | ||
107 | - free(outputHostBuffer); | ||
108 | - outputHostBuffer = nullptr; | ||
109 | - LOG_ERROR("aclrtMemcpy failed!"); | ||
110 | - break; | ||
111 | - } | 99 | + ACL_CHECK_AND_ABORT(aclrtMemcpy(outputHostBuffer, outBufferSize, encodeOutBufferDev_, outBufferSize, ACL_MEMCPY_DEVICE_TO_HOST), "aclrtMemcpy failed!"); |
112 | 100 | ||
113 | // 数据使用完成后,释放内存 | 101 | // 数据使用完成后,释放内存 |
114 | ret = jpege_save((char*)outputHostBuffer, outBufferSize, out_file_name); | 102 | ret = jpege_save((char*)outputHostBuffer, outBufferSize, out_file_name); |
@@ -123,10 +111,7 @@ bool JpegUtil::jpeg_encode(acldvppPicDesc *encodeInputDesc_, string out_file_nam | @@ -123,10 +111,7 @@ bool JpegUtil::jpeg_encode(acldvppPicDesc *encodeInputDesc_, string out_file_nam | ||
123 | } while (0); | 111 | } while (0); |
124 | 112 | ||
125 | if (stream_ != nullptr) { | 113 | if (stream_ != nullptr) { |
126 | - ret = aclrtDestroyStream(stream_); | ||
127 | - if (ret != ACL_SUCCESS) { | ||
128 | - LOG_ERROR("destroy stream failed"); | ||
129 | - } | 114 | + ACL_CHECK_AND_ABORT(aclrtDestroyStream(stream_), "aclrtDestroyStream failed!"); |
130 | stream_ = nullptr; | 115 | stream_ = nullptr; |
131 | } | 116 | } |
132 | 117 |
src/util/vpc_util.cpp
@@ -18,6 +18,9 @@ | @@ -18,6 +18,9 @@ | ||
18 | #include "../decoder/interface/DeviceMemory.hpp" | 18 | #include "../decoder/interface/DeviceMemory.hpp" |
19 | #include "../common/logger.hpp" | 19 | #include "../common/logger.hpp" |
20 | 20 | ||
21 | +#define ACL_CHECK_AND_ABORT(ret, message) \ | ||
22 | + if(ret != 0) {LOG_ERROR("{}", message); std::abort();} | ||
23 | + | ||
21 | static uint32_t AlignSize(uint32_t origSize, uint32_t alignment){ | 24 | static uint32_t AlignSize(uint32_t origSize, uint32_t alignment){ |
22 | if (alignment == 0) { | 25 | if (alignment == 0) { |
23 | return 0; | 26 | return 0; |
@@ -29,37 +32,39 @@ static uint32_t AlignSize(uint32_t origSize, uint32_t alignment){ | @@ -29,37 +32,39 @@ static uint32_t AlignSize(uint32_t origSize, uint32_t alignment){ | ||
29 | void VPCUtil::release() | 32 | void VPCUtil::release() |
30 | { | 33 | { |
31 | if (context_ != nullptr) { | 34 | if (context_ != nullptr) { |
32 | - aclrtSetCurrentContext(context_); | 35 | + ACL_CHECK_AND_ABORT(aclrtSetCurrentContext(context_), "aclrtSetCurrentContext failed !"); |
33 | 36 | ||
34 | - aclError ret = acldvppDestroyChannel(dvppChannelDesc_); | ||
35 | - ret = acldvppDestroyChannelDesc(dvppChannelDesc_); | 37 | + ACL_CHECK_AND_ABORT(acldvppDestroyChannel(dvppChannelDesc_), "acldvppDestroyChannel failed !"); |
38 | + ACL_CHECK_AND_ABORT(acldvppDestroyChannelDesc(dvppChannelDesc_), "acldvppDestroyChannelDesc failed !"); | ||
36 | 39 | ||
37 | if (stream_ != nullptr) { | 40 | if (stream_ != nullptr) { |
38 | - aclrtDestroyStream(stream_); | 41 | + ACL_CHECK_AND_ABORT(aclrtDestroyStream(stream_), "acldvppDestroyChannelDesc failed !"); |
39 | stream_ = nullptr; | 42 | stream_ = nullptr; |
40 | } | 43 | } |
41 | 44 | ||
42 | - ret = aclrtDestroyContext(context_); | ||
43 | - if (ret != ACL_SUCCESS) { | ||
44 | - LOG_ERROR("destroy context failed"); | ||
45 | - } | 45 | + ACL_CHECK_AND_ABORT(aclrtDestroyContext(context_), "aclrtDestroyContext failed !"); |
46 | + | ||
46 | context_ = nullptr; | 47 | context_ = nullptr; |
47 | } | 48 | } |
48 | 49 | ||
49 | - LOG_INFO("end to reset device is %d", deviceId_); | 50 | + LOG_INFO("end to reset device is {}", deviceId_); |
50 | } | 51 | } |
51 | 52 | ||
52 | int VPCUtil::init(int32_t devId){ | 53 | int VPCUtil::init(int32_t devId){ |
53 | deviceId_ = devId; | 54 | deviceId_ = devId; |
54 | 55 | ||
55 | - aclError ret; | ||
56 | - aclrtCreateContext(&context_, deviceId_); | ||
57 | - | ||
58 | - aclrtCreateStream(&stream_); | 56 | + ACL_CHECK_AND_ABORT(aclrtCreateContext(&context_, deviceId_), "aclrtCreateContext failed !"); |
57 | + ACL_CHECK_AND_ABORT(aclrtCreateStream(&stream_), "aclrtCreateStream failed !"); | ||
59 | 58 | ||
60 | // channel 准备 | 59 | // channel 准备 |
61 | dvppChannelDesc_ = acldvppCreateChannelDesc(); | 60 | dvppChannelDesc_ = acldvppCreateChannelDesc(); |
62 | - ret = acldvppCreateChannel(dvppChannelDesc_); | 61 | + if (dvppChannelDesc_ == nullptr) |
62 | + { | ||
63 | + LOG_INFO("acldvppCreateChannelDesc failed!"); | ||
64 | + std::abort(); | ||
65 | + } | ||
66 | + | ||
67 | + ACL_CHECK_AND_ABORT(acldvppCreateChannel(dvppChannelDesc_), "acldvppCreateChannel failed !"); | ||
63 | } | 68 | } |
64 | 69 | ||
65 | static void adjustCoordinate(uint32_t& left, uint32_t& right, uint32_t& top, uint32_t& bottom, const uint32_t& width, const uint32_t& height) { | 70 | static void adjustCoordinate(uint32_t& left, uint32_t& right, uint32_t& top, uint32_t& bottom, const uint32_t& width, const uint32_t& height) { |
@@ -119,11 +124,7 @@ vpc_img_info VPCUtil::crop(DeviceMemory *devMem, video_object_info obj) { | @@ -119,11 +124,7 @@ vpc_img_info VPCUtil::crop(DeviceMemory *devMem, video_object_info obj) { | ||
119 | } | 124 | } |
120 | 125 | ||
121 | aclError ret; | 126 | aclError ret; |
122 | - ret = aclrtSetCurrentContext(context_); | ||
123 | - if (ret != ACL_SUCCESS) { | ||
124 | - LOG_ERROR("aclrtSetCurrentContext failed"); | ||
125 | - return img_info; | ||
126 | - } | 127 | + ACL_CHECK_AND_ABORT(aclrtSetCurrentContext(context_), "aclrtSetCurrentContext failed !"); |
127 | 128 | ||
128 | // LOG_INFO("crop src {} ({}, {}, {}, {})", obj.object_id, obj.left, obj.right, obj.top, obj.bottom); | 129 | // LOG_INFO("crop src {} ({}, {}, {}, {})", obj.object_id, obj.left, obj.right, obj.top, obj.bottom); |
129 | // LOG_INFO("crop {} ({}, {}, {}, {})", obj.object_id, cropLeftOffset, cropRightOffset, cropTopOffset, cropBottomOffset); | 130 | // LOG_INFO("crop {} ({}, {}, {}, {})", obj.object_id, cropLeftOffset, cropRightOffset, cropTopOffset, cropBottomOffset); |
@@ -204,7 +205,7 @@ vector<vpc_img_info> VPCUtil::crop_batch(DeviceMemory *devMem, vector<video_obje | @@ -204,7 +205,7 @@ vector<vpc_img_info> VPCUtil::crop_batch(DeviceMemory *devMem, vector<video_obje | ||
204 | } | 205 | } |
205 | 206 | ||
206 | aclError ret; | 207 | aclError ret; |
207 | - ret = aclrtSetCurrentContext(context_); | 208 | + ACL_CHECK_AND_ABORT(aclrtSetCurrentContext(context_), "aclrtSetCurrentContext failed !"); |
208 | 209 | ||
209 | // 输入 | 210 | // 输入 |
210 | acldvppBatchPicDesc *vpcInputBatchDesc_ = acldvppCreateBatchPicDesc(1); | 211 | acldvppBatchPicDesc *vpcInputBatchDesc_ = acldvppCreateBatchPicDesc(1); |