\brief GetLastUndetectedFrame \return
| 108 | /// \return |
| 109 | /// |
| 110 | frame_ptr GetLastUndetectedFrame() |
| 111 | { |
| 112 | #if SHOW_QUE_LOG |
| 113 | QUE_LOG << "GetLastUndetectedFrame start" << std::endl; |
| 114 | #endif |
| 115 | std::unique_lock<std::mutex> lock(m_mutex); |
| 116 | while (m_que.empty() || m_que.back()->m_inDetector.load() != FrameInfo::StateNotProcessed) |
| 117 | { |
| 118 | if (m_break.load()) |
| 119 | break; |
| 120 | |
| 121 | m_cond.wait(lock); |
| 122 | //PrintQue(); |
| 123 | } |
| 124 | if (!m_break.load()) |
| 125 | { |
| 126 | frame_ptr frameInfo = m_que.back(); |
| 127 | assert(frameInfo->m_inDetector.load() == FrameInfo::StateNotProcessed); |
| 128 | assert(frameInfo->m_inTracker.load() == FrameInfo::StateNotProcessed); |
| 129 | frameInfo->m_inDetector.store(FrameInfo::StateInProcess); |
| 130 | |
| 131 | queue_t::reverse_iterator it = m_que.rbegin(); |
| 132 | for (++it; it != m_que.rend(); ++it) |
| 133 | { |
| 134 | if ((*it)->m_inDetector.load() == FrameInfo::StateNotProcessed) |
| 135 | (*it)->m_inDetector.store(FrameInfo::StateSkipped); |
| 136 | else |
| 137 | break; |
| 138 | } |
| 139 | #if SHOW_QUE_LOG |
| 140 | PrintQue(); |
| 141 | QUE_LOG << "GetLastUndetectedFrame end: " << frameInfo->m_dt << ", frameInd " << frameInfo->m_frameInd << std::endl; |
| 142 | #endif |
| 143 | return frameInfo; |
| 144 | } |
| 145 | return nullptr; |
| 146 | } |
| 147 | |
| 148 | /// |
| 149 | /// \brief SearchUntracked |