]> git.sesse.net Git - casparcg/blob - modules/decklink/decklink.cpp
2.0.0.2: Mayor solution reconfiguration.
[casparcg] / modules / decklink / decklink.cpp
1 #include "stdafx.h"\r
2 \r
3 #include "decklink.h"\r
4 #include "util/util.h"\r
5 \r
6 #include "consumer/decklink_consumer.h"\r
7 #include "producer/decklink_producer.h"\r
8 \r
9 #include <core/consumer/frame_consumer.h>\r
10 #include <core/producer/frame_producer.h>\r
11 \r
12 #include "interop/DeckLinkAPI_h.h"\r
13 \r
14 #pragma warning(push)\r
15 #pragma warning(disable : 4996)\r
16 \r
17         #include <atlbase.h>\r
18 \r
19         #include <atlcom.h>\r
20         #include <atlhost.h>\r
21 \r
22 #pragma warning(push)\r
23 \r
24 namespace caspar{\r
25 \r
26 void init_decklink()\r
27 {\r
28         core::register_consumer_factory(create_decklink_consumer);\r
29         core::register_producer_factory(create_decklink_producer);\r
30 }\r
31 \r
32 std::wstring get_decklink_version() \r
33 {\r
34         std::wstring version = L"Unknown";\r
35 \r
36         ::CoInitialize(nullptr);\r
37         try\r
38         {\r
39                 CComPtr<IDeckLinkIterator> pDecklinkIterator;\r
40                 if(SUCCEEDED(pDecklinkIterator.CoCreateInstance(CLSID_CDeckLinkIterator)))              \r
41                         version = get_version(pDecklinkIterator);\r
42         }\r
43         catch(...){}\r
44         ::CoUninitialize();\r
45 \r
46         return version;\r
47 }\r
48 \r
49 std::vector<std::wstring> get_decklink_device_list()\r
50 {\r
51         std::vector<std::wstring> devices;\r
52 \r
53         ::CoInitialize(nullptr);\r
54         try\r
55         {\r
56                 CComPtr<IDeckLinkIterator> pDecklinkIterator;\r
57                 if(SUCCEEDED(pDecklinkIterator.CoCreateInstance(CLSID_CDeckLinkIterator)))\r
58                 {               \r
59                         CComPtr<IDeckLink> decklink;\r
60                         for(int n = 1; pDecklinkIterator->Next(&decklink) == S_OK; ++n) \r
61                         {\r
62                                 BSTR model_name = L"Unknown";\r
63                                 decklink->GetModelName(&model_name);\r
64                                 devices.push_back(L"[" + boost::lexical_cast<std::wstring>(n) + L"] " + model_name);    \r
65                         }\r
66                 }\r
67         }\r
68         catch(...){}\r
69         ::CoUninitialize();\r
70 \r
71         return devices;\r
72 }\r
73 \r
74 }