]> git.sesse.net Git - casparcg/commitdiff
Merged decklink reference signal detection
authorhellgore <hellgore@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Thu, 1 Nov 2012 15:40:17 +0000 (15:40 +0000)
committerhellgore <hellgore@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Thu, 1 Nov 2012 15:40:17 +0000 (15:40 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/trunk@3473 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

modules/decklink/consumer/decklink_consumer.cpp

index 4e764ec217033c427be40a320b3917b3d8350ae6..5993492cf8220b078d050bb9512539beb087ddb0 100644 (file)
@@ -204,6 +204,7 @@ struct decklink_consumer : public IDeckLinkVideoOutputCallback, public IDeckLink
        \r
        safe_ptr<diagnostics::graph> graph_;\r
        boost::timer tick_timer_;\r
+       BMDReferenceStatus last_reference_status_;\r
        retry_task<bool> send_completion_;\r
 \r
 public:\r
@@ -222,6 +223,7 @@ public:
                , audio_scheduled_(0)\r
                , preroll_count_(0)\r
                , audio_container_(buffer_size_+1)\r
+               , last_reference_status_(static_cast<BMDReferenceStatus>(-1))\r
        {\r
                is_running_ = true;\r
                                \r
@@ -453,6 +455,31 @@ public:
 \r
                graph_->set_value("tick-time", tick_timer_.elapsed()*format_desc_.fps*0.5);\r
                tick_timer_.restart();\r
+\r
+               detect_reference_signal_change();\r
+       }\r
+\r
+       void detect_reference_signal_change()\r
+       {\r
+               BMDReferenceStatus reference_status;\r
+\r
+               if (output_->GetReferenceStatus(&reference_status) != S_OK)\r
+               {\r
+                       CASPAR_LOG(error) << print() << L" Reference signal: failed while querying status";\r
+               }\r
+               else if (reference_status != last_reference_status_)\r
+               {\r
+                       last_reference_status_ = reference_status;\r
+\r
+                       if (reference_status == 0)\r
+                               CASPAR_LOG(info) << print() << L" Reference signal: not detected.";\r
+                       else if (reference_status & bmdReferenceNotSupportedByHardware)\r
+                               CASPAR_LOG(info) << print() << L" Reference signal: not supported by hardware.";\r
+                       else if (reference_status & bmdReferenceLocked)\r
+                               CASPAR_LOG(info) << print() << L" Reference signal: locked.";\r
+                       else\r
+                               CASPAR_LOG(info) << print() << L" Reference signal: Unhandled enum bitfield: " << reference_status;\r
+               }\r
        }\r
 \r
        boost::unique_future<bool> send(const safe_ptr<core::read_frame>& frame)\r