]> 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, 7 May 2011 19:56:58 +0000 (19:56 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sat, 7 May 2011 19:56:58 +0000 (19:56 +0000)
modules/decklink/consumer/decklink_consumer.cpp

index 03e4ec37f4429b9c04fb922fe2138999549b1ee0..b7fe6dc757f7568f8e7a6a41e471ec4fc657f1de 100644 (file)
@@ -109,8 +109,9 @@ struct decklink_output : public IDeckLinkVideoOutputCallback, public IDeckLinkAu
        CComPtr<IDeckLink>                                      decklink_;\r
        CComQIPtr<IDeckLinkOutput>                      output_;\r
        CComQIPtr<IDeckLinkConfiguration>       configuration_;\r
-       \r
-       core::video_format_desc format_desc_;\r
+       CComQIPtr<IDeckLinkKeyer>                       keyer_;\r
+\r
+       const core::video_format_desc format_desc_;\r
 \r
        BMDTimeScale frame_time_scale_;\r
        BMDTimeValue frame_duration_;\r
@@ -130,7 +131,6 @@ public:
                , format_desc_(format_desc)\r
        {\r
                is_running_ = true;\r
-               format_desc_ = format_desc;\r
                CComPtr<IDeckLinkIterator> pDecklinkIterator;\r
                if(FAILED(pDecklinkIterator.CoCreateInstance(CLSID_CDeckLinkIterator)))\r
                        BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(narrow(print()) + " No Decklink drivers installed."));\r
@@ -151,6 +151,7 @@ public:
                \r
                output_ = decklink_;\r
                configuration_ = decklink_;\r
+               keyer_ = decklink_;\r
 \r
                auto display_mode = get_display_mode(output_.p, format_desc_.format);\r
                if(display_mode == nullptr) \r
@@ -186,21 +187,20 @@ public:
                else\r
                        CASPAR_LOG(info) << print() << L" Uses driver latency settings.";       \r
                \r
-               CComQIPtr<IDeckLinkKeyer> keyer = decklink_;\r
                if(config_.keyer == internal_key) \r
                {\r
-                       if(FAILED(keyer->Enable(FALSE)))                        \r
+                       if(FAILED(keyer_->Enable(FALSE)))                       \r
                                CASPAR_LOG(error) << print() << L" Failed to enable internal keyer.";                   \r
-                       else if(FAILED(keyer->SetLevel(255)))                   \r
+                       else if(FAILED(keyer_->SetLevel(255)))                  \r
                                CASPAR_LOG(error) << print() << L" Failed to set key-level to max.";\r
                        else\r
                                CASPAR_LOG(info) << print() << L" Enabled internal keyer.";             \r
                }\r
                else if(config.keyer == external_key)\r
                {\r
-                       if(FAILED(keyer->Enable(TRUE)))                 \r
+                       if(FAILED(keyer_->Enable(TRUE)))                        \r
                                CASPAR_LOG(error) << print() << L" Failed to enable external keyer.";   \r
-                       else if(FAILED(keyer->SetLevel(255)))                   \r
+                       else if(FAILED(keyer_->SetLevel(255)))                  \r
                                CASPAR_LOG(error) << print() << L" Failed to set key-level to max.";\r
                        else\r
                                CASPAR_LOG(info) << print() << L" Enabled external keyer.";                     \r
@@ -323,7 +323,7 @@ public:
                        \r
        void schedule_next_video(const safe_ptr<const core::read_frame>& frame)\r
        {\r
-               if(!frame->image_data().empty())\r
+               if(static_cast<size_t>(frame->image_data().size()) == format_desc_.size)\r
                        fast_memcpy(reserved_frames_.front().first, frame->image_data().begin(), frame->image_data().size());\r
                else\r
                        fast_memclr(reserved_frames_.front().first, format_desc_.size);\r