Manager of multiple image metadata providers which can cooperate in parsing. More...
#include <metadata_manager.h>
Public Member Functions | |
void | addExtractor (const std::shared_ptr< MetadataExtractor > &extractor) |
Register a new extractor. More... | |
void | clearTimedMetadataCache () |
Clear all cached timed metadata. More... | |
cras::optional< geometry_msgs::Vector3 > | getAcceleration () override |
cras::optional< geometry_msgs::Vector3 > | getAngularVelocity () override |
cras::optional< compass_msgs::Azimuth > | getAzimuth () override |
std::shared_ptr< MetadataCache > | getCache () |
Return the metadata cache. More... | |
cras::optional< std::string > | getCameraGeneralName () override |
cras::optional< sensor_msgs::CameraInfo > | getCameraInfo () override |
cras::optional< std::string > | getCameraMake () override |
cras::optional< std::string > | getCameraModel () override |
cras::optional< std::string > | getCameraSerialNumber () override |
cras::optional< std::string > | getCameraUniqueName () override |
cras::optional< ros::Time > | getCreationTime () override |
cras::optional< double > | getCropFactor () override |
cras::optional< std::pair< DistortionType, Distortion > > | getDistortion () override |
cras::optional< vision_msgs::Detection2DArray > | getFaces () override |
cras::optional< double > | getFocalLength35MM () override |
cras::optional< double > | getFocalLengthMM () override |
cras::optional< double > | getFocalLengthPx () override |
GNSSFixAndDetail | getGNSSPosition () override |
cras::optional< sensor_msgs::Imu > | getImu () override |
cras::optional< IntrinsicMatrix > | getIntrinsicMatrix () override |
cras::optional< std::string > | getLensMake () override |
cras::optional< std::string > | getLensModel () override |
cras::optional< sensor_msgs::MagneticField > | getMagneticField () override |
std::string | getName () const override |
Return the name of the extractor. More... | |
cras::optional< geometry_msgs::Transform > | getOpticalFrameTF () override |
int | getPriority () const override |
Return the priority of the extractor (for ordering in MetadataManager). More... | |
cras::optional< RollPitch > | getRollPitch () override |
cras::optional< int > | getRotation () override |
cras::optional< SensorSize > | getSensorSizeMM () override |
cras::optional< geometry_msgs::Transform > | getZeroRollPitchTF () override |
bool | hasTimedMetadata () const override |
void | loadExtractorPlugins (const MetadataExtractorParams ¶ms) |
Load all known extractors from plugins. More... | |
MetadataManager (const cras::LogHelperPtr &log, const MovieOpenConfig &config, const MovieInfo::ConstPtr &info) | |
Constructor. Each movie should have its own manager. More... | |
void | prepareTimedMetadata (const std::unordered_set< MetadataType > &metadataTypes) override |
Perform any required initialization of the extractor so that it is prepared to extract metadata of the given types. More... | |
void | processPacket (const AVPacket *packet) override |
Optional processing of libav packets as they are read from the movie file. More... | |
size_t | processTimedMetadata (MetadataType type, const StreamTime &maxTime, bool requireOptional) override |
Process timed metadata up until the time passed as parameter. More... | |
void | seekTimedMetadata (const StreamTime &seekTime) override |
Seek timed metadata to the given stream time. More... | |
std::unordered_set< MetadataType > | supportedTimedMetadata (const std::unordered_set< MetadataType > &availableMetadata) const override |
Get a list of timed metadata that are supported by this instance of the extractor based on the given available metadata. More... | |
~MetadataManager () override | |
![]() | |
virtual void | addTimedMetadataListener (const std::shared_ptr< TimedMetadataListener > &listener) |
Add a new timed metadata listener. More... | |
TimedMetadataExtractor (const cras::LogHelperPtr &log) | |
![]() | |
MetadataExtractor (const cras::LogHelperPtr &log) | |
Constructor. More... | |
virtual | ~MetadataExtractor () |
![]() | |
::cras::LogHelperConstPtr | getCrasLogger () const |
HasLogger (const ::cras::LogHelperPtr &log) | |
void | setCrasLogger (const ::cras::LogHelperPtr &log) |
Protected Member Functions | |
template<typename T , typename O = cras::optional<T>> | |
T | checkExtractors (const std::string &func, T(MetadataExtractor::*getFn)(), O(LatestMetadataCache::*getFnLatest)(), const std::string &frame="") |
Call the given function in all extractors and return and cache the first valid result. More... | |
bool | stopRecursion (const std::string &fn, const MetadataExtractor *extractor) const |
Check for infinite recursion when individual extractors call common methods via this manager. More... | |
Protected Attributes | |
std::shared_ptr< MetadataCache > | cache |
Cache of static and timed metadata. More... | |
std::deque< std::pair< std::string, const MetadataExtractor * > > | callStack |
The stack of all calls via the manager. More... | |
MovieOpenConfig | config |
Configuration of the open movie. More... | |
std::multiset< MetadataExtractor::Ptr, PriorityComparator > | extractors |
size_t | height {0u} |
Height of the analyzed movie [px]. More... | |
MovieInfo::ConstPtr | info |
Information about the open movie. More... | |
pluginlib::ClassLoader< MetadataExtractorPlugin > | loader |
The extractor plugin loader. More... | |
std::shared_ptr< CachingMetadataListener > | metadataListener |
The timed metadata listener proxy passed to all timed extractors to collect and cache their output. More... | |
friend | StackGuard |
std::multiset< TimedMetadataExtractor::Ptr, PriorityComparator > | timedExtractors |
Registered timed extractor instances. More... | |
size_t | width {0u} |
Width of the analyzed movie [px]. More... | |
![]() | |
std::vector< TimedMetadataListener::Ptr > | listeners |
The listeners whose callbacks should be called. More... | |
![]() | |
::cras::LogHelperPtr | log |
Additional Inherited Members | |
![]() | |
using | ConstPtr = std::shared_ptr< const TimedMetadataExtractor > |
using | Ptr = std::shared_ptr< TimedMetadataExtractor > |
![]() | |
using | ConstPtr = std::shared_ptr< const MetadataExtractor > |
using | Ptr = std::shared_ptr< MetadataExtractor > |
Manager of multiple image metadata providers which can cooperate in parsing.
The manager itself behaves like a metadata extractor, but it doesn't extract much itself. Most of the work is relayed to the loaded extractor plugins. The manager takes the first valid result and caches it, so that subsequent calls for the same data will just re-use the cache.
If you pass the manager to the extractor plugins, make sure you pass a std::weak_ptr and not normal std::shared_ptr. The weak pointer will break reference cycle which would otherwise be inevitable (because the manager holds pointers to the extractors).
The manager also processes timed metadata. When timed metadata are advanced using processTimedMetadata(), the cached return values of some of the get*() functions will get recomputed so that these functions always return metadata that are closest to the current playback state.
Definition at line 65 of file metadata_manager.h.
movie_publisher::MetadataManager::MetadataManager | ( | const cras::LogHelperPtr & | log, |
const MovieOpenConfig & | config, | ||
const MovieInfo::ConstPtr & | info | ||
) |
Constructor. Each movie should have its own manager.
[in] | log | Logger. |
[in] | width | Width of the parsed movie. |
[in] | height | Height of the parsed movie. |
|
override |
void movie_publisher::MetadataManager::addExtractor | ( | const std::shared_ptr< MetadataExtractor > & | extractor | ) |
Register a new extractor.
[in] | extractor | The new extractor to register. |
|
protected |
Call the given function in all extractors and return and cache the first valid result.
T | Type of the metadata (including cras::optional<>). |
O | Always cras::optional<T>. This parameter is only added to help template resolution. |
[in] | func | Name of the calling function (used in call stack, should be unique per call site). |
[in] | getFn | Function that gets the metadata value by calling this manager. |
[in] | getFnLatest | Function that reads the metadata value from latest values cache. |
[in] | frame | Optional frame_id to be set to the extracted messages (only if they don't specify any frame). |
void movie_publisher::MetadataManager::clearTimedMetadataCache | ( | ) |
Clear all cached timed metadata.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
std::shared_ptr<MetadataCache> movie_publisher::MetadataManager::getCache | ( | ) |
Return the metadata cache.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Return the priority of the extractor (for ordering in MetadataManager).
Implements movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Reimplemented from movie_publisher::TimedMetadataExtractor.
void movie_publisher::MetadataManager::loadExtractorPlugins | ( | const MetadataExtractorParams & | params | ) |
Load all known extractors from plugins.
[in] | params | Parameters passed to the plugin initialization methods. |
|
overridevirtual |
Perform any required initialization of the extractor so that it is prepared to extract metadata of the given types.
[in] | metadataTypes | The types of metadata this extractor should provide. |
Reimplemented from movie_publisher::TimedMetadataExtractor.
|
overridevirtual |
Optional processing of libav packets as they are read from the movie file.
[in] | packet | The libav packet. |
Reimplemented from movie_publisher::MetadataExtractor.
|
overridevirtual |
Process timed metadata up until the time passed as parameter.
[in] | type | Type of the requested metadata. |
[in] | maxTime | The maximum stream timestamp of the timed metadata that should be passed to listeners. |
[in] | requireOptional | If true and the timed metadata are composed of multiple base metadata, treat even optional metadata as required. This is used by the metadata creation loop to first make sure other providers have produced as much as they can before this metadata is asked to be produced even with incomplete optional dependencies. |
Reimplemented from movie_publisher::TimedMetadataExtractor.
|
overridevirtual |
Seek timed metadata to the given stream time.
[in] | seekTime | The stream timestamp to seek to. |
Reimplemented from movie_publisher::TimedMetadataExtractor.
|
protected |
Check for infinite recursion when individual extractors call common methods via this manager.
[in] | fn | The stringified name of the called function. |
[in] | extractor | The extractor that calls the function. |
|
overridevirtual |
Get a list of timed metadata that are supported by this instance of the extractor based on the given available metadata.
[in] | availableMetadata | The timed metadata that is currently available. |
Implements movie_publisher::TimedMetadataExtractor.
|
protected |
Cache of static and timed metadata.
Definition at line 171 of file metadata_manager.h.
|
protected |
The stack of all calls via the manager.
Definition at line 165 of file metadata_manager.h.
|
protected |
Configuration of the open movie.
Definition at line 169 of file metadata_manager.h.
|
protected |
Registered extractor instances.
Definition at line 162 of file metadata_manager.h.
|
protected |
Height of the analyzed movie [px].
Definition at line 167 of file metadata_manager.h.
|
protected |
Information about the open movie.
Definition at line 170 of file metadata_manager.h.
|
protected |
The extractor plugin loader.
Definition at line 161 of file metadata_manager.h.
|
protected |
The timed metadata listener proxy passed to all timed extractors to collect and cache their output.
Definition at line 174 of file metadata_manager.h.
|
protected |
Definition at line 176 of file metadata_manager.h.
|
protected |
Registered timed extractor instances.
Definition at line 164 of file metadata_manager.h.
|
protected |
Width of the analyzed movie [px].
Definition at line 166 of file metadata_manager.h.