+typedef std::function<spl::shared_ptr<frame_consumer>(
+ const std::vector<std::wstring>&,
+ interaction_sink* sink,
+ std::vector<spl::shared_ptr<video_channel>> channels)> consumer_factory_t;
+typedef std::function<spl::shared_ptr<frame_consumer>(
+ const boost::property_tree::wptree& element,
+ interaction_sink* sink,
+ std::vector<spl::shared_ptr<video_channel>> channels)> preconfigured_consumer_factory_t;
+
+class frame_consumer_registry : boost::noncopyable
+{
+public:
+ frame_consumer_registry(spl::shared_ptr<help_repository> help_repo);
+ void register_consumer_factory(const std::wstring& name, const consumer_factory_t& factory, const help_item_describer& describer);
+ void register_preconfigured_consumer_factory(
+ const std::wstring& element_name,
+ const preconfigured_consumer_factory_t& factory);
+ spl::shared_ptr<frame_consumer> create_consumer(
+ const std::vector<std::wstring>& params,
+ interaction_sink* sink,
+ std::vector<spl::shared_ptr<video_channel>> channels) const;
+ spl::shared_ptr<frame_consumer> create_consumer(
+ const std::wstring& element_name,
+ const boost::property_tree::wptree& element,
+ interaction_sink* sink,
+ std::vector<spl::shared_ptr<video_channel>> channels) const;
+private:
+ struct impl;
+ spl::shared_ptr<impl> impl_;
+};