]> git.sesse.net Git - casparcg/blobdiff - core/producer/flash/cg_producer.cpp
2.0.0.2:
[casparcg] / core / producer / flash / cg_producer.cpp
index 909e9c54a5412ace9aec9b820db8f5d229160d9e..161d67c5d36343a9b9825d402bfae935487337f6 100644 (file)
@@ -30,10 +30,7 @@ struct cg_producer::implementation : boost::noncopyable
 {\r
 public:\r
 \r
-       implementation() : ver_(template_version::invalid), flash_producer_(create_flash())\r
-       {\r
-       \r
-       }\r
+       implementation() : ver_(template_version::invalid), flash_producer_(create_flash()){}\r
 \r
        safe_ptr<flash_producer> create_flash()\r
        {               \r
@@ -144,7 +141,7 @@ public:
                \r
        void initialize(const safe_ptr<frame_processor_device>& frame_processor)\r
        {\r
-               frame_processor_ = frame_processor.get_shared();\r
+               frame_processor_ = frame_processor;\r
                flash_producer_->initialize(frame_processor);\r
        }\r
 \r
@@ -160,14 +157,16 @@ public:
        \r
 safe_ptr<cg_producer> get_default_cg_producer(const safe_ptr<channel>& channel, int render_layer)\r
 {      \r
-       auto producer = std::dynamic_pointer_cast<cg_producer>(channel->foreground(render_layer).get().get_shared());\r
-       if(producer == nullptr)\r
+       try\r
        {\r
-               producer = std::make_shared<cg_producer>();             \r
-               channel->load(render_layer, safe_ptr<frame_producer>(producer), load_option::auto_play); \r
+               return dynamic_pointer_cast<cg_producer>(channel->foreground(render_layer).get());\r
+       }\r
+       catch(std::bad_cast&)\r
+       {\r
+               auto producer = make_safe<cg_producer>();               \r
+               channel->load(render_layer, producer, load_option::auto_play); \r
+               return producer;\r
        }\r
-       \r
-       return safe_ptr<cg_producer>(producer);\r
 }\r
 \r
 cg_producer::cg_producer() : impl_(new implementation()){}\r