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
, 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
\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
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
\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