]> git.sesse.net Git - casparcg/blob - modules/decklink/decklink.cpp
cea6d03c6f0e7ff9632f9cfca70e3013be4ab850
[casparcg] / modules / decklink / decklink.cpp
1 /*\r
2 * copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
3 *\r
4 *  This file is part of CasparCG.\r
5 *\r
6 *    CasparCG is free software: you can redistribute it and/or modify\r
7 *    it under the terms of the GNU General Public License as published by\r
8 *    the Free Software Foundation, either version 3 of the License, or\r
9 *    (at your option) any later version.\r
10 *\r
11 *    CasparCG is distributed in the hope that it will be useful,\r
12 *    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
14 *    GNU General Public License for more details.\r
15 \r
16 *    You should have received a copy of the GNU General Public License\r
17 *    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
18 *\r
19 */\r
20 #include "stdafx.h"\r
21 \r
22 #include "decklink.h"\r
23 #include "util/util.h"\r
24 \r
25 #include "consumer/decklink_consumer.h"\r
26 #include "producer/decklink_producer.h"\r
27 \r
28 #include <core/consumer/frame_consumer.h>\r
29 #include <core/producer/frame_producer.h>\r
30 \r
31 #include "interop/DeckLinkAPI_h.h"\r
32 \r
33 #pragma warning(push)\r
34 #pragma warning(disable : 4996)\r
35 \r
36         #include <atlbase.h>\r
37 \r
38         #include <atlcom.h>\r
39         #include <atlhost.h>\r
40 \r
41 #pragma warning(push)\r
42 \r
43 namespace caspar{\r
44 \r
45 void init_decklink()\r
46 {\r
47         core::register_consumer_factory([](const std::vector<std::wstring>& params){return create_decklink_consumer(params);});\r
48         core::register_producer_factory(create_decklink_producer);\r
49 }\r
50 \r
51 std::wstring get_decklink_version() \r
52 {\r
53         std::wstring version = L"Not found";\r
54 \r
55         ::CoInitialize(nullptr);\r
56         try\r
57         {\r
58                 CComPtr<IDeckLinkIterator> pDecklinkIterator;\r
59                 if(SUCCEEDED(pDecklinkIterator.CoCreateInstance(CLSID_CDeckLinkIterator)))              \r
60                         version = get_version(pDecklinkIterator);\r
61         }\r
62         catch(...){}\r
63         ::CoUninitialize();\r
64 \r
65         return version;\r
66 }\r
67 \r
68 std::vector<std::wstring> get_decklink_device_list()\r
69 {\r
70         std::vector<std::wstring> devices;\r
71 \r
72         ::CoInitialize(nullptr);\r
73         try\r
74         {\r
75                 CComPtr<IDeckLinkIterator> pDecklinkIterator;\r
76                 if(SUCCEEDED(pDecklinkIterator.CoCreateInstance(CLSID_CDeckLinkIterator)))\r
77                 {               \r
78                         CComPtr<IDeckLink> decklink;\r
79                         for(int n = 1; pDecklinkIterator->Next(&decklink) == S_OK; ++n) \r
80                         {\r
81                                 BSTR model_name = L"Unknown";\r
82                                 decklink->GetModelName(&model_name);\r
83                                 devices.push_back(std::wstring(model_name) + L" [" + boost::lexical_cast<std::wstring>(n) + L"]");      \r
84                         }\r
85                 }\r
86         }\r
87         catch(...){}\r
88         ::CoUninitialize();\r
89 \r
90         return devices;\r
91 }\r
92 \r
93 }