]> git.sesse.net Git - casparcg/blob - server/cg/FlashCGManager.cpp
Fixed no_bluefish.
[casparcg] / server / cg / FlashCGManager.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  \r
21 #include "..\StdAfx.h"\r
22 \r
23 #include "..\Producers\flash\FlashManager.h"\r
24 #include "..\Producers\flash\FlashProducer.h"\r
25 \r
26 #include "..\Application.h"\r
27 #include "..\transitioninfo.h"\r
28 \r
29 #include "FlashCGManager.h"\r
30 \r
31 namespace caspar {\r
32 namespace CG {\r
33 \r
34 using namespace utils;\r
35 \r
36 FlashCGManager::FlashCGManager(caspar::Channel* pChannel) : pChannel_(pChannel), pFlashManager_(new caspar::FlashManager()) {\r
37 }\r
38 \r
39 FlashCGManager::~FlashCGManager() {\r
40         if(pFlashManager_ != 0) {\r
41                 delete pFlashManager_;\r
42                 pFlashManager_ = 0;\r
43         }\r
44 }\r
45 \r
46 void FlashCGManager::DisplayActive() {\r
47 /*      if(pChannel_->GetActiveProducer() != activeCGProducer_) {\r
48                 LOG << LogLevel::Debug << TEXT("Had to display active cg-producer");\r
49 \r
50                 caspar::TransitionInfo transition;\r
51                 if(pChannel_->LoadBackground(activeCGProducer_, transition)){\r
52                         pChannel_->Play();\r
53                 }\r
54                 else {\r
55                         LOG << TEXT("Failed to display active cg-producer");\r
56                 }\r
57         }*/\r
58 }\r
59 FlashProducerPtr FlashCGManager::CreateNewProducer()\r
60 {\r
61 #if TEMPLATEHOST_VERSION < 1700\r
62         return std::tr1::dynamic_pointer_cast<FlashProducer, MediaProducer>(pFlashManager_->CreateProducer(GetApplication()->GetTemplateFolder()+TEXT("CG.fth")));\r
63 #else\r
64         return std::tr1::dynamic_pointer_cast<FlashProducer, MediaProducer>(pFlashManager_->CreateProducer(GetApplication()->GetTemplateFolder()+TEXT("CG.fth.17")));\r
65 #endif\r
66 }\r
67 \r
68 void FlashCGManager::Add(int layer, const tstring& templateName, unsigned int mixInDuration, bool playOnLoad, const tstring& startFromLabel, const tstring& data) {\r
69         if(activeCGProducer_ == 0 || activeCGProducer_->IsEmpty()) {\r
70                 activeCGProducer_ = CreateNewProducer();\r
71                 \r
72                 LOG << TEXT("Created new flashproducer");\r
73         }\r
74 \r
75         if(activeCGProducer_ != 0) {\r
76                 tstringstream flashParam;\r
77                 flashParam << TEXT("<invoke name=\"Add\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><string>") << templateName << TEXT("</string><number>") << mixInDuration << TEXT("</number>") << (playOnLoad?TEXT("<true/>"):TEXT("<false/>")) << TEXT("<string>") << startFromLabel << TEXT("</string><string><![CDATA[ ") << data << TEXT(" ]]></string></arguments></invoke>");\r
78                 DisplayActive();\r
79                 activeCGProducer_->Param(flashParam.str());\r
80                 LOG << LogLevel::Debug << TEXT("Invoked add-command");\r
81         }\r
82 }\r
83 \r
84 void FlashCGManager::Remove(int layer) {\r
85         if(activeCGProducer_ != 0) {\r
86                 tstringstream flashParam;\r
87 #if TEMPLATEHOST_VERSION < 1700\r
88                 flashParam << TEXT("<invoke name=\"Delete\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number></arguments></invoke>");\r
89 #else\r
90                 flashParam << TEXT("<invoke name=\"Delete\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>") << layer << TEXT("</number></property></array></arguments></invoke>");\r
91 #endif\r
92                 activeCGProducer_->Param(flashParam.str());\r
93                 DisplayActive();\r
94         }\r
95 }\r
96 \r
97 void FlashCGManager::Clear() {\r
98         activeCGProducer_ = CreateNewProducer();\r
99         DisplayActive();\r
100 }\r
101 \r
102 void FlashCGManager::Play(int layer) {\r
103         if(activeCGProducer_ != 0) {\r
104                 tstringstream flashParam;\r
105 #if TEMPLATEHOST_VERSION < 1700\r
106                 flashParam << TEXT("<invoke name=\"Play\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number></arguments></invoke>");\r
107 #else\r
108                 flashParam << TEXT("<invoke name=\"Play\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>") << layer << TEXT("</number></property></array></arguments></invoke>");\r
109 #endif\r
110 \r
111                 activeCGProducer_->Param(flashParam.str());\r
112                 LOG << LogLevel::Debug << TEXT("Invoked play-command");\r
113                 DisplayActive();\r
114         }\r
115 }\r
116 \r
117 void FlashCGManager::Stop(int layer, unsigned int mixOutDuration) {\r
118         if(activeCGProducer_ != 0) {\r
119                 tstringstream flashParam;\r
120 #if TEMPLATEHOST_VERSION < 1700\r
121                 flashParam << TEXT("<invoke name=\"Stop\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><number>") << mixOutDuration << TEXT("</number></arguments></invoke>");\r
122 #else\r
123                 flashParam << TEXT("<invoke name=\"Stop\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>") << layer << TEXT("</number></property></array><number>") << mixOutDuration << TEXT("</number></arguments></invoke>");\r
124 #endif\r
125                 activeCGProducer_->Param(flashParam.str());\r
126                 LOG << LogLevel::Debug << TEXT("Invoked stop-command");\r
127                 DisplayActive();\r
128         }\r
129 }\r
130 \r
131 void FlashCGManager::Next(int layer) {\r
132         if(activeCGProducer_ != 0) {\r
133                 tstringstream flashParam;\r
134 #if TEMPLATEHOST_VERSION < 1700\r
135                 flashParam << TEXT("<invoke name=\"Next\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number></arguments></invoke>");\r
136 #else\r
137                 flashParam << TEXT("<invoke name=\"Next\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>") << layer << TEXT("</number></property></array></arguments></invoke>");\r
138 #endif\r
139                 activeCGProducer_->Param(flashParam.str());\r
140                 DisplayActive();\r
141         }\r
142 }\r
143 \r
144 void FlashCGManager::Goto(int layer, const tstring& label) {\r
145         if(activeCGProducer_ != 0) {\r
146                 tstringstream flashParam;\r
147 #if TEMPLATEHOST_VERSION < 1700\r
148                 flashParam << TEXT("<invoke name=\"GotoLabel\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><string>") << label << TEXT("</string></arguments></invoke>");\r
149 #else\r
150                 flashParam << TEXT("<invoke name=\"GotoLabel\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>") << layer << TEXT("</number></property></array><string>") << label << TEXT("</string></arguments></invoke>");\r
151 #endif\r
152                 activeCGProducer_->Param(flashParam.str());\r
153                 DisplayActive();\r
154         }\r
155 }\r
156 \r
157 void FlashCGManager::Update(int layer, const tstring& data) {\r
158         if(activeCGProducer_ != 0) {\r
159                 tstringstream flashParam;\r
160 #if TEMPLATEHOST_VERSION < 1700\r
161                 flashParam << TEXT("<invoke name=\"SetData\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><string><![CDATA[ ") << data << TEXT(" ]]></string></arguments></invoke>");\r
162 #else\r
163                 flashParam << TEXT("<invoke name=\"SetData\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>") << layer << TEXT("</number></property></array><string><![CDATA[ ") << data << TEXT(" ]]></string></arguments></invoke>");\r
164 #endif\r
165                 activeCGProducer_->Param(flashParam.str());\r
166                 DisplayActive();\r
167         }\r
168 }\r
169 \r
170 void FlashCGManager::Invoke(int layer, const tstring& methodSpec) {\r
171         if(activeCGProducer_ != 0) {\r
172                 tstringstream flashParam;\r
173 #if TEMPLATEHOST_VERSION < 1700\r
174                 flashParam << TEXT("<invoke name=\"ExecuteMethod\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><string>") << methodSpec << TEXT("</string></arguments></invoke>");\r
175 #else\r
176                 flashParam << TEXT("<invoke name=\"ExecuteMethod\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>") << layer << TEXT("</number></property></array><string>") << methodSpec << TEXT("</string></arguments></invoke>");\r
177 #endif\r
178                 activeCGProducer_->Param(flashParam.str());\r
179                 DisplayActive();\r
180         }\r
181 }\r
182 \r
183 }       //namespace CG\r
184 }       //namespace caspar