diff --git a/SDK/CPP/CMakeLists.txt b/SDK/CPP/CMakeLists.txt index 472ac9eb1177098e6bb32e92e1c6831e99ebdc0d..123671c2b6581beba4ab4bd5df167ab1e033a531 100644 --- a/SDK/CPP/CMakeLists.txt +++ b/SDK/CPP/CMakeLists.txt @@ -43,7 +43,7 @@ ExternalProject_Add( BINARY_DIR ${SDK_BINARY_DIR} INSTALL_COMMAND "" BUILD_ALWAYS true - CMAKE_ARGS -DOpenCV_DIR=${OpenCV_DIR} + CMAKE_ARGS -DOpenCV_DIR=${OpenCV_DIR} -DWITH_PYTHON=True ) if (BUILD_TESTS) diff --git a/SDK/CPP/private/room_impl.cpp b/SDK/CPP/private/room_impl.cpp index 76ab1b92bad65d098c8a0f2a34685edc9219e458..65825d5152c5bad4f01340e52896db2808880c2b 100644 --- a/SDK/CPP/private/room_impl.cpp +++ b/SDK/CPP/private/room_impl.cpp @@ -16,7 +16,7 @@ RoomImpl::~RoomImpl() if (filter_) filter_->remove(); } -bool RoomImpl::waitNextFrame(int64_t timeout) +bool RoomImpl::waitNextFrame(int64_t timeout, bool except) { if (!filter_) { @@ -40,10 +40,15 @@ bool RoomImpl::waitNextFrame(int64_t timeout) return last_read_ < last_seen_; }); + if (except && last_read_ >= last_seen_) + { + throw voltu::exceptions::Timeout(); + } return last_read_ < last_seen_; } else if (timeout == 0) { + if (except) throw voltu::exceptions::Timeout(); return false; } else diff --git a/SDK/CPP/private/room_impl.hpp b/SDK/CPP/private/room_impl.hpp index be8516a637b316c9a3964b14952f11fcadd23459..67d44474de421f97ba178ce509d1e72e2b76be46 100644 --- a/SDK/CPP/private/room_impl.hpp +++ b/SDK/CPP/private/room_impl.hpp @@ -16,7 +16,7 @@ public: ~RoomImpl() override; - bool waitNextFrame(int64_t) override; + bool waitNextFrame(int64_t, bool except) override; voltu::FramePtr getFrame() override; diff --git a/SDK/CPP/private/system.cpp b/SDK/CPP/private/system.cpp index 84bdbcd406793b0a1b51300b2f7ef0e860e67287..f711a3783c3edc0751d90931b2806e3b5f67e10b 100644 --- a/SDK/CPP/private/system.cpp +++ b/SDK/CPP/private/system.cpp @@ -87,6 +87,11 @@ std::list<voltu::RoomId> SystemImpl::listRooms() voltu::RoomPtr SystemImpl::getRoom(voltu::RoomId id) { + if (feed_->getURI(id).size() == 0) + { + throw voltu::exceptions::InvalidRoomId(); + } + auto s = std::make_shared<voltu::internal::RoomImpl>(feed_); s->addFrameSet(id); return s; diff --git a/SDK/CPP/public/include/voltu/room.hpp b/SDK/CPP/public/include/voltu/room.hpp index 87f0f070cc3fae52bd52a6046c6cd4ae299680ea..f2578236c85c42bc64eb4413c8ba6c616be9bfb8 100644 --- a/SDK/CPP/public/include/voltu/room.hpp +++ b/SDK/CPP/public/include/voltu/room.hpp @@ -70,7 +70,7 @@ public: * @param timeout Millisecond timeout, or 0 or -1. * @return True if a new unseen frame is available. */ - PY_API virtual bool waitNextFrame(int64_t timeout) = 0; + PY_API virtual bool waitNextFrame(int64_t timeout, bool except=false) = 0; /** * @brief Check if a new frame is available. diff --git a/SDK/CPP/public/include/voltu/types/errors.hpp b/SDK/CPP/public/include/voltu/types/errors.hpp index b1e77accc50f9975698db4f61be11a5dd7b1c330..b42964ef8002437e90b2352c9b46d35610faedec 100644 --- a/SDK/CPP/public/include/voltu/types/errors.hpp +++ b/SDK/CPP/public/include/voltu/types/errors.hpp @@ -47,6 +47,7 @@ VOLTU_EXCEPTION(NotImplemented, Exception, "Functionality not implemented"); VOLTU_EXCEPTION(ReadOnly, Exception, "Read only, write not allowed"); VOLTU_EXCEPTION(WriteOnly, Exception, "Write only, read not allowed"); VOLTU_EXCEPTION(IncompatibleOperation, Exception, "The input data and operator are incompatible"); +VOLTU_EXCEPTION(Timeout, Exception, "Request timed out"); } } diff --git a/SDK/CPP/public/include/voltu/voltu.hpp b/SDK/CPP/public/include/voltu/voltu.hpp index a2c4c0a142341a9c145999bc1cadd530271c25b7..d3e1413b4052c065709aaa7591a9c93d37e7550d 100644 --- a/SDK/CPP/public/include/voltu/voltu.hpp +++ b/SDK/CPP/public/include/voltu/voltu.hpp @@ -8,7 +8,7 @@ // Bump these for each release #define VOLTU_VERSION_MAJOR 0 // For API incompatible changes -#define VOLTU_VERSION_MINOR 2 // For binary compatibility and extensions +#define VOLTU_VERSION_MINOR 3 // For binary compatibility and extensions #define VOLTU_VERSION_PATCH 0 // Binary compatible internal fixes #define VOLTU_VERSION ((VOLTU_VERSION_MAJOR*10000) + (VOLTU_VERSION_MINOR*100) + VOLTU_VERSION_PATCH)