]> git.sesse.net Git - casparcg/blobdiff - core/producer/cg_proxy.cpp
[scene_producer] Made it possible for keyframe values to be expressions instead of...
[casparcg] / core / producer / cg_proxy.cpp
index a2b045885421c305a4682c0865d598f80616e758..74a1318e83112232f24990856b8773a04755e3cd 100644 (file)
@@ -75,9 +75,6 @@ private:
                bool                                    reusable_producer_instance;
        };
 
-       struct name {};
-       struct extension {};
-
        mutable boost::mutex                    mutex_;
        std::map<std::wstring, record>  records_by_extension_;
 public:
@@ -107,7 +104,7 @@ public:
        }
 
        spl::shared_ptr<frame_producer> create_producer(
-                       const spl::shared_ptr<video_channel>& video_channel,
+                       const frame_producer_dependencies& dependencies,
                        const std::wstring& filename) const
        {
                auto found = find_record(filename);
@@ -115,10 +112,7 @@ public:
                if (!found)
                        return frame_producer::empty();
 
-               return found->producer_factory(
-                               video_channel->frame_factory(),
-                               video_channel->video_format_desc(),
-                               filename);
+               return found->producer_factory(dependencies, filename);
        }
 
        spl::shared_ptr<cg_proxy> get_proxy(const spl::shared_ptr<frame_producer>& producer) const
@@ -147,6 +141,7 @@ public:
 
        spl::shared_ptr<cg_proxy> get_or_create_proxy(
                        const spl::shared_ptr<video_channel>& video_channel,
+                       const frame_producer_dependencies& dependencies,
                        int render_layer,
                        const std::wstring& filename) const
        {
@@ -167,10 +162,7 @@ public:
                        diagnostics::call_context::for_thread().video_channel = video_channel->index();
                        diagnostics::call_context::for_thread().layer = render_layer;
 
-                       producer = found->producer_factory(
-                                       video_channel->frame_factory(),
-                                       video_channel->video_format_desc(),
-                                       filename);
+                       producer = found->producer_factory(dependencies, filename);
                        video_channel->stage().load(render_layer, producer);
                        video_channel->stage().play(render_layer);
                }
@@ -195,7 +187,7 @@ public:
                                return rec.second.info_extractor(*found);
                }
 
-               BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(L"No meta info extractor for " + filename));
+               CASPAR_THROW_EXCEPTION(user_error() << msg_info(L"No meta info extractor for " + filename));
        }
 
        bool is_cg_extension(const std::wstring& extension) const
@@ -204,6 +196,16 @@ public:
 
                return records_by_extension_.find(extension) != records_by_extension_.end();
        }
+
+       std::wstring get_cg_producer_name(const std::wstring& filename) const
+       {
+               auto record = find_record(filename);
+
+               if (!record)
+                       CASPAR_THROW_EXCEPTION(caspar_exception() << msg_info(filename + L" is not a cg template."));
+
+               return record->name;
+       }
 private:
        boost::optional<record> find_record(const std::wstring& filename) const
        {
@@ -245,10 +247,10 @@ void cg_producer_registry::register_cg_producer(
 }
 
 spl::shared_ptr<frame_producer> cg_producer_registry::create_producer(
-               const spl::shared_ptr<video_channel>& video_channel,
+               const frame_producer_dependencies& dependencies,
                const std::wstring& filename) const
 {
-       return impl_->create_producer(video_channel, filename);
+       return impl_->create_producer(dependencies, filename);
 }
 
 spl::shared_ptr<cg_proxy> cg_producer_registry::get_proxy(
@@ -266,10 +268,11 @@ spl::shared_ptr<cg_proxy> cg_producer_registry::get_proxy(
 
 spl::shared_ptr<cg_proxy> cg_producer_registry::get_or_create_proxy(
                const spl::shared_ptr<video_channel>& video_channel,
+               const frame_producer_dependencies& dependencies,
                int render_layer,
                const std::wstring& filename) const
 {
-       return impl_->get_or_create_proxy(video_channel, render_layer, filename);
+       return impl_->get_or_create_proxy(video_channel, dependencies, render_layer, filename);
 }
 
 std::string cg_producer_registry::read_meta_info(const std::wstring& filename) const
@@ -282,4 +285,9 @@ bool cg_producer_registry::is_cg_extension(const std::wstring& extension) const
        return impl_->is_cg_extension(extension);
 }
 
+std::wstring cg_producer_registry::get_cg_producer_name(const std::wstring& filename) const
+{
+       return impl_->get_cg_producer_name(filename);
+}
+
 }}