32#include <unordered_map>
35#include <opencv2/core/mat.hpp>
38#include <Image/ByteImage.h>
39#include <Image/FloatImage.h>
47#include <RobotAPI/interface/units/UnitInterface.h>
49#include <VisionX/interface/core/CompressedImageProviderInterface.h>
50#include <VisionX/interface/core/DataTypes.h>
51#include <VisionX/interface/core/ImageProcessorInterface.h>
68 virtual public CompressedImageProviderInterface
77 armarx::Blob
getImages(
const Ice::Current&
c = Ice::emptyCurrent)
override;
80 const Ice::Current&)
override;
86 ImageFormatInfo
getImageFormat(
const Ice::Current&
c = Ice::emptyCurrent)
override;
154 BayerPatternType bayerPatternType = visionx::eBayerPatternRg);
160 const IceUtil::Time& imageTimestamp = IceUtil::Time());
166 const IceUtil::Time& imageTimestamp = IceUtil::Time());
167 void provideImages(
const std::vector<CByteImageUPtr>& images,
168 const IceUtil::Time& imageTimestamp = IceUtil::Time());
174 const IceUtil::Time& imageTimestamp = IceUtil::Time());
179 std::vector<imrec::ChannelPreferences>
212 init(
const Ice::Current&
c)
override
222 stop(
const Ice::Current&
c)
override
226 armarx::UnitExecutionState
229 return armarx::eUndefinedUnitExecutionState;
260 void recordImages(
const IceUtil::Time& image_timestamp);
294 ImageFormatInfo imageFormat;
306 struct CompressionData
308 armarx::Blob compressedImage;
309 IceUtil::Time imageTimestamp;
312 using CompressionDataMap = std::map<std::pair<CompressionType, int>, CompressionData>;
313 CompressionDataMap compressionDataMap;
314 std::mutex compressionDataMapMutex;
316 struct RecordingProperties
318 std::mutex callMutex;
319 imrec::Config config;
321 std::unordered_map<int, visionx::imrec::Recording> channelRecordings;
322 std::mutex statusMutex;
323 imrec::Status status;
324 std::condition_variable
cv;
325 std::mutex bufferMutex;
326 std::deque<std::tuple<std::chrono::microseconds, std::unordered_map<int, CByteImage*>>>
330 RecordingProperties rec;
335 Ice::Int compressionQuality,
336 armarx::MetaInfoSizeBasePtr& info,
337 const Ice::Current&)
override;
Baseclass for all ArmarX ManagedIceObjects requiring properties.
IceUtil::Handle< IceSharedMemoryProvider< MemoryObject, MemoryObjectMetaInfo > > pointer_type
pointer type for convenience.
IceUtil::Handle< RunningTask< T > > pointer_type
Shared pointer type for convenience.
Represents a point in time.
ImageProvider abstract class defines a component which provide images via ice or shared memory.
virtual void onExitImageProvider()=0
This is called when the Component::onExitComponent() setup is called.
bool hasSharedMemorySupport(const Ice::Current &c=Ice::emptyCurrent) override
void onInitComponent() override
void imageRecordingRunningTask()
armarx::Blob getImagesAndMetaInfo(armarx::MetaInfoSizeBasePtr &, const Ice::Current &) override
virtual void onDisconnectImageProvider()
void onDisconnectComponent() override
Hook for subclass.
void stop(const Ice::Current &c) override
void request(const Ice::Current &c) override
void recordImages(const IceUtil::Time &image_timestamp)
bool isExiting()
Retrieve whether provider is exiting.
armarx::IceSharedMemoryProvider< unsignedchar >::pointer_type sharedMemoryProvider
shared memory provider
virtual void onInitImageProvider()=0
This is called when the Component::onInitComponent() is called.
void updateTimestamp(Ice::Long timestamp, bool threadSafe=true)
Updates the timestamp of the currently captured image.
void release(const Ice::Current &c) override
armarx::UnitExecutionState getExecutionState(const Ice::Current &c) override
void start(const Ice::Current &c) override
ImageFormatInfo getImageFormat(const Ice::Current &c=Ice::emptyCurrent) override
Returns the entire image format info struct via Ice.
void setImageFormat(ImageDimension imageDimension, ImageType imageType, BayerPatternType bayerPatternType=visionx::eBayerPatternRg)
Sets the image basic format data.
bool startImageRecording(const imrec::Config &cfg, const Ice::Current &) override
bool stopImageRecording(const Ice::Current &) override
int getNumberImages(const Ice::Current &c=Ice::emptyCurrent) override
Retrieve number of images handled by this provider.
virtual void onConnectImageProvider()
This is called when the Component::onConnectComponent() setup is called.
void provideImages(void **inputBuffers, const IceUtil::Time &imageTimestamp=IceUtil::Time())
send images raw.
void onConnectComponent() override
void setNumberImages(int numberImages)
Sets the number of images on each capture.
void ** imageBuffers
Image buffer memory.
armarx::SharedMemoryScopedWriteLockPtr getScopedWriteLock()
Retrieve scoped lock for writing to the memory.
std::vector< imrec::ChannelPreferences > getImageRecordingChannelPreferences(const Ice::Current &) override
ImageProcessorInterfacePrx imageProcessorProxy
Ice proxy of the image processor interface.
void init(const Ice::Current &c) override
armarx::Blob getImages(const Ice::Current &c=Ice::emptyCurrent) override
Retrieve images via Ice.
void onExitComponent() override
imrec::Status getImageRecordingStatus(const Ice::Current &) override
armarx::Blob getCompressedImagesAndMetaInfo(CompressionType, Ice::Int compressionQuality, armarx::MetaInfoSizeBasePtr &info, const Ice::Current &) override
std::shared_ptr< SharedMemoryScopedWriteLock > SharedMemoryScopedWriteLockPtr
std::vector< std::unique_ptr< CByteImage > > CByteImageUPtrVec
std::unique_ptr< CByteImage > CByteImageUPtr