40 return "ArMemToImageProvider";
49 defs->topic(debugObserver);
52 p.providerSegmentName,
"img.ProviderSegmentName",
"Name of the provider segment(s).");
53 defs->optional(p.resultImagesName,
54 "img.ResultImagesName",
55 "Name of the resulting (provided) images.\n"
56 "If '(auto)', the provider segment name is used.");
58 defs->defineOptionalPropertyVector(
59 "img.FallbackDimensions",
61 "Image dimensions to use when they cannot be fetched from memory.",
64 p.images.define(*defs);
73 getProperty(p.fallbackDims,
"img.FallbackDimensions");
74 if (p.resultImagesName ==
"(auto)")
76 p.resultImagesName = p.providerSegmentName;
78 p.images.read(*
this, p.providerSegmentName);
81 armemToImage.
addImagesRGB(p.images.rgbEntityID, p.images.rgbIndices);
82 armemToImage.
addImagesDepth(p.images.depthEntityID, p.images.depthIndices);
87 const std::vector<armarx::armem::MemoryID>& updatedSnapshotIDs)
88 { this->fetchUpdates(entityID, updatedSnapshotIDs); };
110 Eigen::Vector2i dimensions = p.fallbackDims;
120 armemToImage.
images.size(), {dimensions(0), dimensions(1)}, eRgb, p.resultImagesName);
126 if (resultImageProvider)
129 resultImageProvider =
nullptr;
150 ArMemToImageProvider::enableResultImages(
size_t numberImages,
151 ImageDimension imageDimension,
153 const std::string& name)
155 if (!resultImageProvider)
158 <<
" result images of size " << imageDimension.width <<
"x"
159 << imageDimension.height <<
".";
162 Component::create<LocalResultImageProvider>();
163 provider->setName(name);
164 provider->setNumberResultImages(
static_cast<int>(numberImages));
165 provider->setResultImageFormat(imageDimension, imageType);
171 catch (
const Ice::AlreadyRegisteredException& e)
174 <<
"' is already used. Please choose another one.\n"
175 <<
"Reason: " << e.what();
178 provider->getObjectScheduler()->waitForObjectState(
179 armarx::ManagedIceObjectState::eManagedIceObjectStarted);
182 this->resultImageProvider = provider;
187 ArMemToImageProvider::fetchUpdates(
189 const std::vector<armarx::armem::MemoryID>& updatedSnapshotIDs)
191 std::scoped_lock lock(armemToImageMutex);
192 armemToImage.
fetchUpdates(entityID, updatedSnapshotIDs);
194 if (resultImageProvider && armemToImage.
updated)
196 std::vector<CByteImage> ivtImages;
197 std::vector<CByteImage*> ivtImagesBuffer;
198 ivtImages.reserve(armemToImage.
images.size());
199 ivtImagesBuffer.reserve(armemToImage.
images.size());
200 for (
auto& image : armemToImage.
images)
202 CByteImage& ivt = ivtImages.emplace_back(image->toCByteImage());
203 ivtImagesBuffer.emplace_back(&ivt);
206 resultImageProvider->provideResultImages(
213 debugObserver->setDebugChannel(