25 #include <Image/ImageProcessor.h>
31 this->_imageProviderInfo = imageProviderInfo;
42 std::unique_lock lock(_bufferMutex);
44 triple->rgbImage =
new CByteImage(_imageProviderInfo.
imageFormat.dimension.width,
47 ::ImageProcessor::CopyImage(rgbImage, triple->rgbImage);
49 return isComplete(timestamp);
55 std::unique_lock lock(_bufferMutex);
57 triple->depthImage =
new CByteImage(_imageProviderInfo.
imageFormat.dimension.width,
60 ::ImageProcessor::CopyImage(depthImage, triple->depthImage);
62 return isComplete(timestamp);
68 std::unique_lock lock(_bufferMutex);
72 return isComplete(timestamp);
78 std::unique_lock lock(_bufferMutex);
80 if (triple->keypoints && triple->depthImage && triple->rgbImage)
82 std::map<long, ImageKeypointBuffer::ImageKeypointTriplePtr>::iterator it =
83 _buffer.erase(_buffer.find(timestamp));
85 if (deleteOlderTriples)
87 deleteOlderEntries(it);
97 std::pair<long, ImageKeypointBuffer::ImageKeypointTriplePtr>
100 std::unique_lock lock(_bufferMutex);
101 if (_buffer.size() > 0)
103 auto pair = *_buffer.begin();
104 _buffer.erase(_buffer.begin());
105 return std::move(pair);
113 std::pair<long, ImageKeypointBuffer::ImageKeypointTriplePtr>
116 std::unique_lock lock(_bufferMutex);
118 std::map<long, ImageKeypointBuffer::ImageKeypointTriplePtr>::iterator it = _buffer.begin();
119 while (!isComplete((*it).first))
125 if (deleteOlderTriples)
127 deleteOlderEntries(it);
129 return std::move(pair);
140 ImageKeypointBuffer::ensureTriple(
long timestamp)
142 if (_buffer.count(timestamp) == 0)
144 _buffer.insert(std::make_pair(timestamp, std::make_shared<ImageKeypointTriple>()));
146 return _buffer.at(timestamp);
150 ImageKeypointBuffer::isComplete(
long timestamp)
153 return (triple->keypoints && triple->depthImage && triple->rgbImage) ? true :
false;
157 ImageKeypointBuffer::deleteOlderEntries(
158 std::map<long, ImageKeypointBuffer::ImageKeypointTriplePtr>::iterator it)
160 if (it == _buffer.end())
166 _buffer.erase(_buffer.begin(), it);