Commit d9483d645351ada0f400055be8c89580597c38ba
1 parent
080131b6
代码优化,没有修改逻辑
Showing
3 changed files
with
30 additions
and
24 deletions
vehicle_structure_platform.git0708-3080-trt-face/src/VPT/MutliSourceVideoProcess.cpp
... | ... | @@ -791,27 +791,9 @@ void CMutliSourceVideoProcess::algorthim_process() |
791 | 791 | delete tasks[i].taskTcuvid; |
792 | 792 | tasks[i].taskTcuvid = NULL; |
793 | 793 | |
794 | - int taskid = tasks[i].taskID; | |
795 | - std::unique_lock<std::mutex> lock(m_snaphot_helper.analysisThreadMutex); | |
796 | - while (std::find_if(m_snaphot_helper.finished_analysis_ss_info.begin(), m_snaphot_helper.finished_analysis_ss_info.end(), [&taskid](const std::pair<OBJ_KEY, video_object_snapshot> & item) ->bool { | |
797 | - if (item.first.videoID == taskid) | |
798 | - { | |
799 | - return true; | |
800 | - } | |
801 | - else | |
802 | - { | |
803 | - return false; | |
804 | - } | |
805 | - | |
806 | - }) != m_snaphot_helper.finished_analysis_ss_info.end()) | |
807 | - { | |
808 | - lock.unlock(); | |
809 | - std::this_thread::yield(); | |
810 | - std::this_thread::sleep_for(std::chrono::milliseconds(100)); | |
811 | - lock.lock(); | |
812 | - } | |
794 | + m_snaphot_helper.waitSaveAnalysisInfo(tasks[i].taskID); | |
813 | 795 | |
814 | - //�ص�֪ͨ�û� ��·����������� | |
796 | + //回调通知上层任务结束 | |
815 | 797 | if (taskFinishCallbackFunc != nullptr) |
816 | 798 | { |
817 | 799 | std::lock_guard<std::mutex> l(m_snaphot_helper.callback_tx); | ... | ... |
vehicle_structure_platform.git0708-3080-trt-face/src/VPT/snapshot_analysis/snapshot_helper.cpp
... | ... | @@ -1884,6 +1884,27 @@ void snapshot_helper::snapshot_thread_process() |
1884 | 1884 | return ; |
1885 | 1885 | } |
1886 | 1886 | |
1887 | +void snapshot_helper::waitSaveAnalysisInfo(int taskid) { | |
1888 | + std::unique_lock<std::mutex> lock(analysisThreadMutex); | |
1889 | + while (std::find_if(finished_analysis_ss_info.begin(), finished_analysis_ss_info.end(), [&taskid](const std::pair<OBJ_KEY, video_object_snapshot> & item) ->bool { | |
1890 | + if (item.first.videoID == taskid) | |
1891 | + { | |
1892 | + return true; | |
1893 | + } | |
1894 | + else | |
1895 | + { | |
1896 | + return false; | |
1897 | + } | |
1898 | + | |
1899 | + }) != finished_analysis_ss_info.end()) | |
1900 | + { | |
1901 | + lock.unlock(); | |
1902 | + std::this_thread::yield(); | |
1903 | + std::this_thread::sleep_for(std::chrono::milliseconds(100)); | |
1904 | + lock.lock(); | |
1905 | + } | |
1906 | +} | |
1907 | + | |
1887 | 1908 | int snapshot_helper::save_snapshot(bool is_image, bool on_image_display, OBJ_KEY obj_key, char* filename, char* mode, float* imgData, int width, int height, int taskID, int objID, int recFlag, int left = 0, int top = 0, int right = 0, int bottom = 0) |
1888 | 1909 | { |
1889 | 1910 | if (recFlag) | ... | ... |
vehicle_structure_platform.git0708-3080-trt-face/src/VPT/snapshot_analysis/snapshot_helper.h
... | ... | @@ -155,7 +155,7 @@ public: |
155 | 155 | public: |
156 | 156 | std::mutex callback_tx; |
157 | 157 | queue<SNAPSHOT_IMAGE_UNIT> snapshotImageQueue; |
158 | - map<OBJ_KEY, video_object_snapshot> finished_analysis_ss_info; | |
158 | + | |
159 | 159 | queue<OBJ_KEY> finished_save_ss_info_que; |
160 | 160 | set<OBJ_KEY> finished_save_ss_info; |
161 | 161 | unordered_map<int, TASK_INFO> m_task_info; |
... | ... | @@ -163,10 +163,8 @@ public: |
163 | 163 | std::deque<SNAPSHOT_IMAGE_UNIT> cur_image_queue; |
164 | 164 | std::mutex threadMutex; |
165 | 165 | std::mutex writeThreadMutex; |
166 | - std::mutex analysisThreadMutex; | |
167 | 166 | std::mutex finishedThreadMutex; |
168 | - //std::condition_variable writeThreadCondVar; | |
169 | - //VC_ANALYSIS_TYPE vc_analysis; | |
167 | + | |
170 | 168 | V_ANALYSIS_TYPE v_analysis; |
171 | 169 | void snapshot_helper_init(int gpuid, double gpu_total_memory, char* dbpath, char* auth_license, int wait_framecount, sy_command hp_analysis_config, \ |
172 | 170 | sy_command hcp_analysis_config, sy_command vehicle_analysis_config, sy_command vehicle_recg_config, sy_command vehicle_plate_det_recg_config, sy_command hf_recg_config, sy_command hcf_recg_config, sy_command vcf_recg_config, sy_command face_detect_config); |
... | ... | @@ -202,6 +200,8 @@ public: |
202 | 200 | |
203 | 201 | void clearSnapshotInfo(); |
204 | 202 | |
203 | + void waitSaveAnalysisInfo(int taskid); | |
204 | + | |
205 | 205 | private: |
206 | 206 | int save_snapshot(bool is_image, bool on_image_display, OBJ_KEY obj_key, char* filename, char* mode, float* imgData, int width, int height, int taskID, int objID, int recFlag, int left, int top, int right, int bottom); |
207 | 207 | int save_snapshot(bool is_image, bool on_image_display, OBJ_KEY obj_key, char* filename, char* mode, unsigned char* imgData, int width, int height, int taskID, int objID, int recFlag, int left, int top, int right, int bottom); |
... | ... | @@ -260,4 +260,7 @@ private: |
260 | 260 | std::thread* ProcessSnapshotThread; |
261 | 261 | std::vector<std::thread*> m_vec_writeThread; |
262 | 262 | bool m_bExit {false}; |
263 | + | |
264 | + map<OBJ_KEY, video_object_snapshot> finished_analysis_ss_info; | |
265 | + std::mutex analysisThreadMutex; | |
263 | 266 | }; |
264 | 267 | \ No newline at end of file | ... | ... |