]> git.sesse.net Git - casparcg/commitdiff
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches...
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sat, 5 Mar 2011 12:36:57 +0000 (12:36 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sat, 5 Mar 2011 12:36:57 +0000 (12:36 +0000)
13 files changed:
core/consumer/bluefish/bluefish_consumer.cpp
core/consumer/bluefish/bluefish_consumer.h
core/consumer/decklink/decklink_consumer.cpp
core/consumer/decklink/decklink_consumer.h
core/consumer/ffmpeg/ffmpeg_consumer.cpp
core/consumer/ffmpeg/ffmpeg_consumer.h
core/consumer/frame_consumer.h
core/consumer/frame_consumer_device.cpp
core/consumer/oal/oal_consumer.cpp
core/consumer/oal/oal_consumer.h
core/consumer/ogl/ogl_consumer.cpp
core/consumer/ogl/ogl_consumer.h
shell/caspar.config

index 07fced0ab29ec2515bfec4272dfd22f9a442cdd7..406f848b62ac8a60b75e4dbe08bea6470be5e4f8 100644 (file)
@@ -143,11 +143,12 @@ public:
                CASPAR_LOG(info) << print() << L" Shutting down.";      \r
        }\r
 \r
-       void initialize(const video_format_desc& format_desc)\r
+       void initialize(const video_format_desc& format_desc, const printer& parent_printer)\r
        {\r
                blue_initialize();\r
                \r
                format_desc_ = format_desc;\r
+               parent_printer_ = parent_printer;\r
 \r
                blue_.reset(BlueVelvetFactory4());\r
 \r
@@ -252,12 +253,7 @@ public:
 \r
                CASPAR_LOG(info) << print() << TEXT(" Successfully initialized for ") << format_desc_ << TEXT(".");\r
        }\r
-\r
-       void set_parent_printer(const printer& parent_printer)\r
-       {\r
-               parent_printer_ = parent_printer;\r
-       }\r
-       \r
+               \r
        void enable_video_output()\r
        {\r
                if(!BLUE_PASS(set_card_property(blue_, VIDEO_BLACKGENERATOR, 0)))\r
@@ -361,8 +357,7 @@ public:
 \r
 bluefish_consumer::bluefish_consumer(bluefish_consumer&& other) : impl_(std::move(other.impl_)){}\r
 bluefish_consumer::bluefish_consumer(unsigned int device_index, bool embed_audio) : impl_(new implementation(device_index, embed_audio)){}     \r
-void bluefish_consumer::initialize(const video_format_desc& format_desc){impl_->initialize(format_desc);}\r
-void bluefish_consumer::set_parent_printer(const printer& parent_printer){impl_->set_parent_printer(parent_printer);}\r
+void bluefish_consumer::initialize(const video_format_desc& format_desc, const printer& parent_printer){impl_->initialize(format_desc, parent_printer);}\r
 void bluefish_consumer::send(const safe_ptr<const read_frame>& frame){impl_->send(frame);}\r
 size_t bluefish_consumer::buffer_depth() const{return impl_->buffer_depth();}\r
 std::wstring bluefish_consumer::print() const {return impl_->print();} \r
index c611590226200a6aaea5513c23bac89cf2c4d5b8..fe68fcf7f58553358db773bcdb2fc8daa037a24d 100644 (file)
@@ -34,8 +34,7 @@ public:
        explicit bluefish_consumer(unsigned int device_index, bool embed_audio = false);\r
        bluefish_consumer(bluefish_consumer&& other);\r
        \r
-       virtual void initialize(const video_format_desc& format_desc);\r
-       virtual void set_parent_printer(const printer& parent_printer);\r
+       virtual void initialize(const video_format_desc& format_desc, const printer& parent_printer);\r
        virtual void send(const safe_ptr<const read_frame>&);\r
        virtual size_t buffer_depth() const;\r
        virtual std::wstring print() const;\r
index 0c8a12a8ee7f84b226c4c3f0402cf501924ba8e0..9496d3e5dab6e201d133baa69d326ae1ac9305a7 100644 (file)
@@ -87,7 +87,7 @@ struct decklink_output : public IDeckLinkVideoOutputCallback, public IDeckLinkAu
        tbb::concurrent_bounded_queue<safe_ptr<const read_frame>> audio_frame_buffer_;\r
 \r
 public:\r
-       decklink_output(const printer& parent_printer, size_t device_index, bool embed_audio, bool internalKey) \r
+       decklink_output(const video_format_desc& format_desc, const printer& parent_printer, size_t device_index, bool embed_audio, bool internalKey) \r
                : parent_printer_(parent_printer)\r
                , model_name_(L"DECKLINK")\r
                , device_index_(device_index)\r
@@ -96,21 +96,7 @@ public:
                , internal_key(internalKey)\r
                , frames_scheduled_(0)\r
                , audio_scheduled_(0)\r
-       {}\r
-\r
-       ~decklink_output()\r
-       {                       \r
-               if(output_ != nullptr) \r
-               {\r
-                       output_->StopScheduledPlayback(0, nullptr, 0);\r
-                       if(embed_audio_)\r
-                               output_->DisableAudioOutput();\r
-                       output_->DisableVideoOutput();\r
-               }\r
-               CASPAR_LOG(info) << print() << L" Shutting down.";      \r
-       }\r
-\r
-       void initialize(const video_format_desc& format_desc)\r
+               , format_desc_(format_desc)\r
        {\r
                format_desc_ = format_desc;\r
                CComPtr<IDeckLinkIterator> pDecklinkIterator;\r
@@ -203,7 +189,19 @@ public:
                \r
                CASPAR_LOG(info) << print() << L" Successfully initialized for " << format_desc_.name;  \r
        }\r
-       \r
+\r
+       ~decklink_output()\r
+       {                       \r
+               if(output_ != nullptr) \r
+               {\r
+                       output_->StopScheduledPlayback(0, nullptr, 0);\r
+                       if(embed_audio_)\r
+                               output_->DisableAudioOutput();\r
+                       output_->DisableVideoOutput();\r
+               }\r
+               CASPAR_LOG(info) << print() << L" Shutting down.";      \r
+       }\r
+                       \r
        virtual HRESULT STDMETHODCALLTYPE       QueryInterface (REFIID, LPVOID*)        {return E_NOINTERFACE;}\r
        virtual ULONG STDMETHODCALLTYPE         AddRef ()                                                       {return 1;}\r
        virtual ULONG STDMETHODCALLTYPE         Release ()                                                      {return 1;}\r
@@ -273,20 +271,21 @@ public:
 \r
 struct decklink_consumer::implementation\r
 {\r
-       printer parent_printer_;\r
        std::unique_ptr<decklink_output> input_;\r
+       size_t device_index_;\r
+       bool embed_audio_;\r
+       bool internal_key_;\r
 \r
        executor executor_;\r
 public:\r
 \r
-       implementation(size_t device_index, bool embed_audio, bool internalKey)\r
-               : executor_(L"DECKLINK[" + boost::lexical_cast<std::wstring>(device_index) + L"]")\r
+       implementation(size_t device_index, bool embed_audio, bool internal_key)\r
+               : device_index_(device_index)\r
+               , embed_audio_(embed_audio)\r
+               , internal_key_(internal_key)\r
+               , executor_(L"DECKLINK[" + boost::lexical_cast<std::wstring>(device_index) + L"]")\r
        {\r
                executor_.start();\r
-               executor_.invoke([&]\r
-               {\r
-                       input_.reset(new decklink_output(parent_printer_, device_index, embed_audio, internalKey));\r
-               });\r
        }\r
 \r
        ~implementation()\r
@@ -297,19 +296,14 @@ public:
                });\r
        }\r
 \r
-       void initialize(const video_format_desc& format_desc)\r
+       void initialize(const video_format_desc& format_desc, const printer& parent_printer)\r
        {\r
                executor_.invoke([&]\r
                {\r
-                       input_->initialize(format_desc);\r
+                       input_.reset(new decklink_output(format_desc, parent_printer, device_index_, embed_audio_, internal_key_));\r
                });\r
        }\r
-\r
-       void set_parent_printer(const printer& parent_printer)\r
-       {\r
-               parent_printer_ = parent_printer;\r
-       }\r
-\r
+       \r
        void send(const safe_ptr<const read_frame>& frame)\r
        {\r
                input_->send(frame);\r
@@ -328,8 +322,7 @@ public:
 \r
 decklink_consumer::decklink_consumer(size_t device_index, bool embed_audio, bool internalKey) : impl_(new implementation(device_index, embed_audio, internalKey)){}\r
 decklink_consumer::decklink_consumer(decklink_consumer&& other) : impl_(std::move(other.impl_)){}\r
-void decklink_consumer::initialize(const video_format_desc& format_desc){impl_->initialize(format_desc);}\r
-void decklink_consumer::set_parent_printer(const printer& parent_printer){impl_->set_parent_printer(parent_printer);}\r
+void decklink_consumer::initialize(const video_format_desc& format_desc, const printer& parent_printer){impl_->initialize(format_desc, parent_printer);}\r
 void decklink_consumer::send(const safe_ptr<const read_frame>& frame){impl_->send(frame);}\r
 size_t decklink_consumer::buffer_depth() const{return impl_->buffer_depth();}\r
 std::wstring decklink_consumer::print() const{return impl_->print();}\r
index c74006416ce294b7dea433117fd24e11a615d5ee..174ce597042e4900e684b12993ee4e3f8aeca892 100644 (file)
@@ -33,8 +33,7 @@ public:
        explicit decklink_consumer(size_t device_index, bool embed_audio = false, bool internal_key = false);\r
        decklink_consumer(decklink_consumer&& other);\r
        \r
-       virtual void initialize(const video_format_desc& format_desc);\r
-       virtual void set_parent_printer(const printer& parent_printer);\r
+       virtual void initialize(const video_format_desc& format_desc, const printer& parent_printer);\r
        virtual void send(const safe_ptr<const read_frame>&);\r
        virtual size_t buffer_depth() const;\r
        virtual std::wstring print() const;\r
index 46df6b74ae2a6c0c659f37d918049a02684c1afb..a91a57da72ef69641f47807bdb916e9417cf0338 100644 (file)
@@ -113,9 +113,10 @@ public:
                        url_fclose(oc_->pb); // Close the output ffmpeg.\r
        }\r
 \r
-       void initialize(const video_format_desc& format_desc)\r
+       void initialize(const video_format_desc& format_desc, const printer& parent_printer)\r
        {\r
                format_desc_ = format_desc;\r
+               parent_printer_ = parent_printer;\r
                executor_.start();\r
                active_ = executor_.begin_invoke([]{});\r
 \r
@@ -192,11 +193,6 @@ public:
                CASPAR_LOG(info) << print() << L" Successfully initialized.";\r
        }\r
        \r
-       void set_parent_printer(const printer& parent_printer) \r
-       {\r
-               parent_printer_ = parent_printer;\r
-       }\r
-\r
        std::wstring print() const\r
        {\r
                return (parent_printer_ ? parent_printer_() + L"/" : L"") + L"ffmpeg[" + widen(filename_) + L"]";\r
@@ -404,8 +400,7 @@ ffmpeg_consumer::ffmpeg_consumer(const std::wstring& filename) : impl_(new imple
 ffmpeg_consumer::ffmpeg_consumer(ffmpeg_consumer&& other) : impl_(std::move(other.impl_)){}\r
 void ffmpeg_consumer::send(const safe_ptr<const read_frame>& frame){impl_->send(frame);}\r
 size_t ffmpeg_consumer::buffer_depth() const{return impl_->buffer_depth();}\r
-void ffmpeg_consumer::initialize(const video_format_desc& format_desc) {impl_->initialize(format_desc);}\r
-void ffmpeg_consumer::set_parent_printer(const printer& parent_printer){impl_->set_parent_printer(parent_printer);}\r
+void ffmpeg_consumer::initialize(const video_format_desc& format_desc, const printer& parent_printer) {impl_->initialize(format_desc, parent_printer);}\r
 std::wstring ffmpeg_consumer::print() const {return impl_->print();}\r
 \r
 safe_ptr<frame_consumer> create_ffmpeg_consumer(const std::vector<std::wstring>& params)\r
index 58543b2a3e380aa9da7863b985f470664bfbcb42..70f94cc1779d81951eddb1f5041c9209fd209df8 100644 (file)
@@ -30,8 +30,7 @@ public:
        explicit ffmpeg_consumer(const std::wstring& filename);\r
        ffmpeg_consumer(ffmpeg_consumer&& other);\r
        \r
-       virtual void initialize(const video_format_desc& format_desc);\r
-       virtual void set_parent_printer(const printer& parent_printer);\r
+       virtual void initialize(const video_format_desc& format_desc, const printer& parent_printer);\r
        virtual void send(const safe_ptr<const read_frame>&);\r
        virtual size_t buffer_depth() const;\r
        virtual std::wstring print() const;\r
index a027e6a6d7395d4d36bee740674b351045f1720b..af48fba55b3c9f93ae364aff3aa19a7968d04a08 100644 (file)
@@ -37,8 +37,7 @@ struct frame_consumer : boost::noncopyable
        \r
        virtual void send(const safe_ptr<const read_frame>& frame) = 0;\r
        virtual size_t buffer_depth() const = 0;\r
-       virtual void initialize(const video_format_desc& format_desc) = 0;\r
-       virtual void set_parent_printer(const printer& parent_printer) = 0;\r
+       virtual void initialize(const video_format_desc& format_desc, const printer& parent_printer = nullptr) = 0;\r
        virtual std::wstring print() const = 0;\r
 \r
        static const safe_ptr<frame_consumer>& empty()\r
@@ -47,8 +46,7 @@ struct frame_consumer : boost::noncopyable
                {\r
                        virtual void send(const safe_ptr<const read_frame>&){}\r
                        virtual size_t buffer_depth() const{return 0;}\r
-                       virtual void initialize(const video_format_desc&){}\r
-                       virtual void set_parent_printer(const printer&){}\r
+                       virtual void initialize(const video_format_desc&, const printer&){}\r
                        virtual std::wstring print() const {return L"empty";}\r
                };\r
                static safe_ptr<frame_consumer> consumer = make_safe<empty_frame_consumer>();\r
index 1c70407ed5af69e1a484bc6d1773ecc4e244a2e1..9c29f92e5a5284c0f219ed064e2629767289ded8 100644 (file)
@@ -51,8 +51,7 @@ public:
 \r
        void add(int index, safe_ptr<frame_consumer>&& consumer)\r
        {               \r
-               consumer->set_parent_printer(std::bind(&implementation::print, this));\r
-               consumer->initialize(format_desc_);\r
+               consumer->initialize(format_desc_, std::bind(&implementation::print, this));\r
                executor_.invoke([&]\r
                {\r
                        if(buffer_.capacity() < consumer->buffer_depth())\r
index e5974fb552a121a5646f45b30c5dc4194734f292..6ebffefec1abd9b39b44217b95abda1e3cc3cd30 100644 (file)
@@ -64,9 +64,10 @@ public:
                CASPAR_LOG(info) << print() << L" Shutting down.";      \r
        }\r
 \r
-       void initialize(const video_format_desc& format_desc)\r
+       void initialize(const video_format_desc& format_desc, const printer& parent_printer)\r
        {\r
                format_desc_ = format_desc;\r
+               parent_printer_ = parent_printer;\r
                for(size_t n = 0; n < buffer_depth(); ++n)\r
                        input_.push(std::vector<short>(static_cast<size_t>(48000.0f/format_desc_.fps)*2, 0)); \r
                sf::SoundStream::Initialize(2, 48000);\r
@@ -74,11 +75,6 @@ public:
                CASPAR_LOG(info) << print() << " Sucessfully initialized.";\r
        }\r
 \r
-       void set_parent_printer(const printer& parent_printer)\r
-       {\r
-               parent_printer_ = parent_printer;\r
-       }\r
-                       \r
        void send(const safe_ptr<const read_frame>& frame)\r
        {                               \r
                if(!frame->audio_data().empty())\r
@@ -114,8 +110,7 @@ oal_consumer::oal_consumer(oal_consumer&& other) : impl_(std::move(other.impl_))
 oal_consumer::oal_consumer() : impl_(new implementation()){}\r
 void oal_consumer::send(const safe_ptr<const read_frame>& frame){impl_->send(frame);}\r
 size_t oal_consumer::buffer_depth() const{return impl_->buffer_depth();}\r
-void oal_consumer::initialize(const video_format_desc& format_desc){impl_->initialize(format_desc);}\r
-void oal_consumer::set_parent_printer(const printer& parent_printer){impl_->set_parent_printer(parent_printer);}\r
+void oal_consumer::initialize(const video_format_desc& format_desc, const printer& parent_printer){impl_->initialize(format_desc, parent_printer);}\r
 std::wstring oal_consumer::print() const { return impl_->print(); }\r
 \r
 safe_ptr<frame_consumer> create_oal_consumer(const std::vector<std::wstring>& params)\r
index b550ce4c00ecc0016e3e7f7a5ab474eade2ae17d..3db5e87c1b4b627fcbbc34f6ee3a3400cf997638 100644 (file)
@@ -30,8 +30,7 @@ public:
        explicit oal_consumer();\r
        oal_consumer(oal_consumer&& other);\r
 \r
-       virtual void initialize(const video_format_desc& format_desc);  \r
-       virtual void set_parent_printer(const printer& parent_printer);\r
+       virtual void initialize(const video_format_desc& format_desc, const printer& parent_printer);   \r
 \r
        virtual void send(const safe_ptr<const read_frame>&);\r
        virtual size_t buffer_depth() const;\r
index df995201765f258d5d210cfdcefbbd5e23d9b6b4..753c0067117f1fc18d4b02f66c28982f85a0dbd6 100644 (file)
@@ -93,12 +93,13 @@ public:
                CASPAR_LOG(info) << print() << L" Shutting down.";      \r
        }\r
 \r
-       void initialize(const video_format_desc& format_desc)\r
+       void initialize(const video_format_desc& format_desc, const printer& parent_printer)\r
        {\r
                if(!GLEE_VERSION_2_1)\r
                        BOOST_THROW_EXCEPTION(not_supported() << msg_info("Missing OpenGL 2.1 support."));\r
-\r
+               \r
                format_desc_ = format_desc;\r
+               parent_printer_ = parent_printer;\r
 \r
                screen_width_ = format_desc.width;\r
                screen_height_ = format_desc.height;\r
@@ -183,12 +184,7 @@ public:
                active_ = executor_.begin_invoke([]{});\r
                CASPAR_LOG(info) << print() << " Sucessfully initialized.";\r
        }\r
-\r
-       void set_parent_printer(const printer& parent_printer)\r
-       {\r
-               parent_printer_ = parent_printer;\r
-       }\r
-       \r
+               \r
        std::pair<float, float> None()\r
        {\r
                float width = static_cast<float>(format_desc_.width)/static_cast<float>(screen_width_);\r
@@ -284,8 +280,7 @@ ogl_consumer::ogl_consumer(ogl_consumer&& other) : impl_(std::move(other.impl_))
 ogl_consumer::ogl_consumer(unsigned int screen_index, stretch stretch, bool windowed) : impl_(new implementation(screen_index, stretch, windowed)){}\r
 void ogl_consumer::send(const safe_ptr<const read_frame>& frame){impl_->send(frame);}\r
 size_t ogl_consumer::buffer_depth() const{return impl_->buffer_depth();}\r
-void ogl_consumer::initialize(const video_format_desc& format_desc){impl_->initialize(format_desc);}\r
-void ogl_consumer::set_parent_printer(const printer& parent_printer){impl_->set_parent_printer(parent_printer);}\r
+void ogl_consumer::initialize(const video_format_desc& format_desc, const printer& parent_printer){impl_->initialize(format_desc, parent_printer);}\r
 std::wstring ogl_consumer::print() const {return impl_->print();}\r
 \r
 safe_ptr<frame_consumer> create_ogl_consumer(const std::vector<std::wstring>& params)\r
index f9d547ee0875dabe044fa7a500586ea61a26f014..30b74a1400b0f226e2ed772bf1151e33ec2735b6 100644 (file)
@@ -40,8 +40,7 @@ public:
        explicit ogl_consumer(unsigned int screen_index = 0, stretch stretch = stretch::fill, bool windowed = false);\r
        ogl_consumer(ogl_consumer&& other);\r
        \r
-       virtual void initialize(const video_format_desc& format_desc);\r
-       virtual void set_parent_printer(const printer& parent_printer);\r
+       virtual void initialize(const video_format_desc& format_desc, const printer& parent_printer);\r
        virtual void send(const safe_ptr<const read_frame>&);\r
        virtual size_t buffer_depth() const;\r
        virtual std::wstring print() const;\r
index 0bf5fd4e640a43e9ed794b19e44938939151bc98..a6157f1abac8e6f93435bb204d9b019a8f531247 100644 (file)
           <windowed>true</windowed>\r
         </ogl>\r
         <audio/>\r
-        <!--decklink>\r
+        <decklink>\r
           <device>1</device>\r
           <embedded-audio>true</embedded-audio>\r
           <internal-key>false</internal-key>\r
-        </decklink-->\r
+        </decklink>\r
         <!--<bluefish>\r
           <device>1</device>\r
           <embedded-audio>true</embedded-audio>\r