diff --git a/selfdrive/ui/replay/camera.cc b/selfdrive/ui/replay/camera.cc index 92f11989e7..91eb91add1 100644 --- a/selfdrive/ui/replay/camera.cc +++ b/selfdrive/ui/replay/camera.cc @@ -60,5 +60,12 @@ void CameraServer::thread() { } else { std::cout << "camera[" << type << "] failed to get frame:" << eidx.getSegmentId() << std::endl; } + + --publishing_; } } + +void CameraServer::pushFrame(CameraType type, FrameReader *fr, const cereal::EncodeIndex::Reader &eidx) { + ++publishing_; + queue_.push({type, fr, eidx}); +} diff --git a/selfdrive/ui/replay/camera.h b/selfdrive/ui/replay/camera.h index 1125db5066..457b842140 100644 --- a/selfdrive/ui/replay/camera.h +++ b/selfdrive/ui/replay/camera.h @@ -10,11 +10,9 @@ class CameraServer { public: CameraServer(); ~CameraServer(); - inline void pushFrame(CameraType type, FrameReader* fr, const cereal::EncodeIndex::Reader& eidx) { - queue_.push({type, fr, eidx}); - } + void pushFrame(CameraType type, FrameReader* fr, const cereal::EncodeIndex::Reader& eidx); inline void waitFinish() { - while (!queue_.empty()) usleep(0); + while (publishing_ > 0) usleep(0); } protected: @@ -33,6 +31,8 @@ protected: {.rgb_type = VISION_STREAM_RGB_FRONT, .yuv_type = VISION_STREAM_YUV_FRONT}, {.rgb_type = VISION_STREAM_RGB_WIDE, .yuv_type = VISION_STREAM_YUV_WIDE}, }; + + std::atomic publishing_ = 0; std::thread camera_thread_; std::unique_ptr vipc_server_; SafeQueue> queue_;