Commit c9cf03be4a49effaa61af2d5c64bc30898aa2ffc
1 parent
32f28195
保存失败的图片不发送mq消息
Showing
4 changed files
with
50 additions
and
18 deletions
src/reprocessing_module/save_snapshot_reprocessing.cpp
@@ -93,14 +93,15 @@ void save_snapshot_reprocessing::save_img_process() { | @@ -93,14 +93,15 @@ void save_snapshot_reprocessing::save_img_process() { | ||
93 | waitforsave_img_queue.pop(); | 93 | waitforsave_img_queue.pop(); |
94 | l.unlock(); | 94 | l.unlock(); |
95 | 95 | ||
96 | + bool bSaved = false; | ||
96 | if(!cur_image.file_path.empty()){ | 97 | if(!cur_image.file_path.empty()){ |
97 | - jpegUtil.jpeg_encode(cur_image.img_info.pic_desc, cur_image.file_path); | 98 | + bSaved = jpegUtil.jpeg_encode(cur_image.img_info.pic_desc, cur_image.file_path); |
98 | } | 99 | } |
99 | VPCUtil::vpc_img_release(cur_image.img_info); | 100 | VPCUtil::vpc_img_release(cur_image.img_info); |
100 | 101 | ||
101 | #ifdef POST_USE_RABBITMQ | 102 | #ifdef POST_USE_RABBITMQ |
102 | // LOG_INFO("mq publish process in: {}", cur_image.json_str); | 103 | // LOG_INFO("mq publish process in: {}", cur_image.json_str); |
103 | - if (callback_ != nullptr && cur_image.json_str.length() > 0) { | 104 | + if (bSaved && callback_ != nullptr && cur_image.json_str.length() > 0) { |
104 | // LOG_INFO("mq publish process begin"); | 105 | // LOG_INFO("mq publish process begin"); |
105 | callback_(cur_image.json_str.c_str()); | 106 | callback_(cur_image.json_str.c_str()); |
106 | LOG_INFO("mq publish process end: {} ", cur_image.json_str); | 107 | LOG_INFO("mq publish process end: {} ", cur_image.json_str); |
src/util/JpegUtil.cpp
@@ -75,7 +75,7 @@ int32_t JpegUtil::jpege_save(char* pcData , uint32_t dataLen, string out_file_na | @@ -75,7 +75,7 @@ int32_t JpegUtil::jpege_save(char* pcData , uint32_t dataLen, string out_file_na | ||
75 | return 0; | 75 | return 0; |
76 | } | 76 | } |
77 | 77 | ||
78 | -void JpegUtil::jpeg_encode(acldvppPicDesc *encodeInputDesc_, string out_file_name) { | 78 | +bool JpegUtil::jpeg_encode(acldvppPicDesc *encodeInputDesc_, string out_file_name) { |
79 | 79 | ||
80 | aclError aclRet ; | 80 | aclError aclRet ; |
81 | aclRet = aclrtSetDevice(deviceId_); | 81 | aclRet = aclrtSetDevice(deviceId_); |
@@ -84,23 +84,52 @@ void JpegUtil::jpeg_encode(acldvppPicDesc *encodeInputDesc_, string out_file_nam | @@ -84,23 +84,52 @@ void JpegUtil::jpeg_encode(acldvppPicDesc *encodeInputDesc_, string out_file_nam | ||
84 | // 8. 申请输出内存,申请Device内存encodeOutBufferDev_,存放编码后的输出数据 | 84 | // 8. 申请输出内存,申请Device内存encodeOutBufferDev_,存放编码后的输出数据 |
85 | uint32_t outBufferSize= 0; | 85 | uint32_t outBufferSize= 0; |
86 | int ret = acldvppJpegPredictEncSize(encodeInputDesc_, jpegeConfig_, &outBufferSize); | 86 | int ret = acldvppJpegPredictEncSize(encodeInputDesc_, jpegeConfig_, &outBufferSize); |
87 | + if (ret != ACL_SUCCESS) { | ||
88 | + return false; | ||
89 | + } | ||
87 | void *encodeOutBufferDev_ = nullptr; | 90 | void *encodeOutBufferDev_ = nullptr; |
88 | ret = acldvppMalloc(&encodeOutBufferDev_, outBufferSize); | 91 | ret = acldvppMalloc(&encodeOutBufferDev_, outBufferSize); |
92 | + if (ret != ACL_SUCCESS) { | ||
93 | + return false; | ||
94 | + } | ||
89 | 95 | ||
90 | - // 9. 执行异步编码,再调用aclrtSynchronizeStream接口阻塞程序运行,直到指定Stream中的所有任务都完成 | ||
91 | - aclRet = acldvppJpegEncodeAsync(dvppChannelDesc_, encodeInputDesc_, encodeOutBufferDev_, &outBufferSize, jpegeConfig_, stream_); | ||
92 | - aclRet = aclrtSynchronizeStream(stream_); | 96 | + bool bRet = false; |
97 | + do { | ||
98 | + // 9. 执行异步编码,再调用aclrtSynchronizeStream接口阻塞程序运行,直到指定Stream中的所有任务都完成 | ||
99 | + aclRet = acldvppJpegEncodeAsync(dvppChannelDesc_, encodeInputDesc_, encodeOutBufferDev_, &outBufferSize, jpegeConfig_, stream_); | ||
100 | + if (ret != ACL_SUCCESS) { | ||
101 | + break; | ||
102 | + } | ||
103 | + aclRet = aclrtSynchronizeStream(stream_); | ||
104 | + if (ret != ACL_SUCCESS) { | ||
105 | + break; | ||
106 | + } | ||
93 | 107 | ||
94 | - // 该模式下,由于处理结果在Device侧,因此需要调用内存复制接口传输结果数据后,再释放Device侧内存 | ||
95 | - // 申请Host内存outputHostBuffer | ||
96 | - void* outputHostBuffer = malloc(outBufferSize); | ||
97 | - // 通过aclrtMemcpy接口将Device的处理结果数据传输到Host | ||
98 | - aclRet = aclrtMemcpy(outputHostBuffer, outBufferSize, encodeOutBufferDev_, outBufferSize, ACL_MEMCPY_DEVICE_TO_HOST); | 108 | + // 申请Host内存outputHostBuffer |
109 | + void* outputHostBuffer = malloc(outBufferSize); | ||
110 | + | ||
111 | + // 通过aclrtMemcpy接口将Device的处理结果数据传输到Host | ||
112 | + aclRet = aclrtMemcpy(outputHostBuffer, outBufferSize, encodeOutBufferDev_, outBufferSize, ACL_MEMCPY_DEVICE_TO_HOST); | ||
113 | + if (ret != ACL_SUCCESS) { | ||
114 | + free(outputHostBuffer); | ||
115 | + outputHostBuffer = nullptr; | ||
116 | + break; | ||
117 | + } | ||
118 | + | ||
119 | + // 数据使用完成后,释放内存 | ||
120 | + ret = jpege_save((char*)outputHostBuffer, outBufferSize, out_file_name); | ||
121 | + if(ret != 0) { | ||
122 | + free(outputHostBuffer); | ||
123 | + outputHostBuffer = nullptr; | ||
124 | + break; | ||
125 | + } | ||
126 | + | ||
127 | + bRet = true; | ||
128 | + } while (0); | ||
129 | + | ||
99 | // 释放掉输入输出的device内存 | 130 | // 释放掉输入输出的device内存 |
100 | (void)acldvppFree(encodeOutBufferDev_); | 131 | (void)acldvppFree(encodeOutBufferDev_); |
101 | encodeOutBufferDev_ = nullptr; | 132 | encodeOutBufferDev_ = nullptr; |
102 | - // 数据使用完成后,释放内存 | ||
103 | - jpege_save((char*)outputHostBuffer, outBufferSize, out_file_name); | ||
104 | - free(outputHostBuffer); | ||
105 | - outputHostBuffer = nullptr; | 133 | + |
134 | + return bRet; | ||
106 | } | 135 | } |
107 | \ No newline at end of file | 136 | \ No newline at end of file |
src/util/JpegUtil.h
@@ -15,7 +15,7 @@ public: | @@ -15,7 +15,7 @@ public: | ||
15 | 15 | ||
16 | void jpeg_release(); | 16 | void jpeg_release(); |
17 | 17 | ||
18 | - void jpeg_encode(acldvppPicDesc *encodeInputDesc_, string out_file_name); | 18 | + bool jpeg_encode(acldvppPicDesc *encodeInputDesc_, string out_file_name); |
19 | 19 | ||
20 | private: | 20 | private: |
21 | int32_t jpege_save(char* pcData , uint32_t dataLen, string out_file_name); | 21 | int32_t jpege_save(char* pcData , uint32_t dataLen, string out_file_name); |
src/util/vpc_util.cpp
@@ -175,8 +175,10 @@ vector<vpc_img_info> VPCUtil::crop_batch(DeviceMemory *devMem, vector<video_obje | @@ -175,8 +175,10 @@ vector<vpc_img_info> VPCUtil::crop_batch(DeviceMemory *devMem, vector<video_obje | ||
175 | for (uint32_t i = 0; i < outputBatchSize_; i++) { | 175 | for (uint32_t i = 0; i < outputBatchSize_; i++) { |
176 | video_object_info obj = objs[i]; | 176 | video_object_info obj = objs[i]; |
177 | 177 | ||
178 | - uint32_t cropSizeWidth = (obj.right - obj.left) / 16 * 16; | ||
179 | - uint32_t cropSizeHeight = (obj.bottom - obj.top) / 2 * 2; | 178 | + // uint32_t cropSizeWidth = (obj.right - obj.left) / 16 * 16; |
179 | + // uint32_t cropSizeHeight = (obj.bottom - obj.top) / 2 * 2; | ||
180 | + uint32_t cropSizeWidth = (obj.right - obj.left + 15) / 16 * 16; //debug by zsh | ||
181 | + uint32_t cropSizeHeight = (obj.bottom - obj.top + 1) / 2 * 2; | ||
180 | 182 | ||
181 | uint32_t oddNum = 1; | 183 | uint32_t oddNum = 1; |
182 | uint32_t cropLeftOffset = (obj.left + 1) / 2 * 2; // must even | 184 | uint32_t cropLeftOffset = (obj.left + 1) / 2 * 2; // must even |