diff --git a/src/internal/streams.cc b/src/internal/streams.cc index ff1da2b..7e5a352 100644 --- a/src/internal/streams.cc +++ b/src/internal/streams.cc @@ -173,6 +173,20 @@ void Streams::WaitForStreams() { } } +void Streams::ConfigStreamLimits( + const Stream &stream, std::size_t max_data_size) { + CHECK_GT(max_data_size, 0); + stream_limits_map_[stream] = max_data_size; +} + +std::size_t Streams::GetStreamDataMaxSize(const Stream &stream) const { + try { + return stream_limits_map_.at(stream); + } catch (const std::out_of_range &e) { + return 4; // default stream data max size + } +} + Streams::stream_datas_t Streams::GetStreamDatas(const Stream &stream) { std::unique_lock lock(mtx_); if (!HasStreamDatas(stream) || stream_datas_map_.at(stream).empty()) { @@ -226,7 +240,6 @@ void Streams::AllocStreamData( void Streams::AllocStreamData( const Stream &stream, const StreamRequest &request, const Format &format) { - static std::size_t stream_data_limits_max = 4; stream_data_t data; if (stream == Stream::LEFT || stream == Stream::RIGHT) { data.img = std::make_shared(); @@ -237,10 +250,10 @@ void Streams::AllocStreamData( std::make_shared(request.width, request.height, format, nullptr); stream_datas_map_[stream].push_back(data); // If cached more then limits_max, drop the oldest one. - if (stream_datas_map_.at(stream).size() > stream_data_limits_max) { + if (stream_datas_map_.at(stream).size() > GetStreamDataMaxSize(stream)) { auto &&datas = stream_datas_map_[stream]; datas.erase(datas.begin()); - VLOG(2) << "Stream data of " << stream << " is dropped"; + VLOG(2) << "Stream data of " << stream << " is dropped as out of limits"; } } diff --git a/src/internal/streams.h b/src/internal/streams.h index 3ab7b97..cdd5ddd 100644 --- a/src/internal/streams.h +++ b/src/internal/streams.h @@ -36,6 +36,9 @@ class Streams { void WaitForStreams(); + void ConfigStreamLimits(const Stream &stream, std::size_t max_data_size); + std::size_t GetStreamDataMaxSize(const Stream &stream) const; + stream_datas_t GetStreamDatas(const Stream &stream); stream_data_t GetLatestStreamData(const Stream &stream); @@ -66,6 +69,7 @@ class Streams { std::map unpack_img_data_map_; std::map unpack_img_pixels_map_; + std::map stream_limits_map_; std::map stream_datas_map_; std::mutex mtx_;