]> git.sesse.net Git - casparcg/commitdiff
Removed files
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Mon, 22 Nov 2010 11:01:29 +0000 (11:01 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Mon, 22 Nov 2010 11:01:29 +0000 (11:01 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/trunk@253 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

216 files changed:
casparcg.sln [deleted file]
server/Application.cpp [deleted file]
server/Application.h [deleted file]
server/CLK/CLKCommand.cpp [deleted file]
server/CLK/CLKCommand.h [deleted file]
server/CLK/CLKProtocolStrategy.cpp [deleted file]
server/CLK/CLKProtocolStrategy.h [deleted file]
server/Channel.cpp [deleted file]
server/Channel.h [deleted file]
server/Controller.h [deleted file]
server/FileInfo.h [deleted file]
server/Main.cpp [deleted file]
server/MediaController.h [deleted file]
server/MediaManager.h [deleted file]
server/MediaProducer.h [deleted file]
server/MediaProducerInfo.h [deleted file]
server/Monitor.cpp [deleted file]
server/Monitor.h [deleted file]
server/PlaybackControl.h [deleted file]
server/Resource.h [deleted file]
server/Server.vcproj [deleted file]
server/Server.vcxproj [deleted file]
server/Server.vcxproj.filters [deleted file]
server/StdAfx.cpp [deleted file]
server/StdAfx.h [deleted file]
server/TransitionInfo.h [deleted file]
server/VersionNo.h [deleted file]
server/VideoConsumer.h [deleted file]
server/Window.cpp [deleted file]
server/Window.h [deleted file]
server/amcp/AMCPCommand.h [deleted file]
server/amcp/AMCPCommandQueue.cpp [deleted file]
server/amcp/AMCPCommandQueue.h [deleted file]
server/amcp/AMCPCommandsImpl.cpp [deleted file]
server/amcp/AMCPCommandsImpl.h [deleted file]
server/amcp/AMCPProtocolStrategy.cpp [deleted file]
server/amcp/AMCPProtocolStrategy.h [deleted file]
server/audio/AudioManager.h [deleted file]
server/audio/DirectSoundManager.cpp [deleted file]
server/audio/DirectSoundManager.h [deleted file]
server/cg/CGControl.h [deleted file]
server/cg/FlashCGManager.cpp [deleted file]
server/cg/FlashCGManager.h [deleted file]
server/cg/FlashCGProxy.cpp [deleted file]
server/cg/FlashCGProxy.h [deleted file]
server/cii/CIICommand.h [deleted file]
server/cii/CIICommandsImpl.cpp [deleted file]
server/cii/CIICommandsImpl.h [deleted file]
server/cii/CIIProtocolStrategy.cpp [deleted file]
server/cii/CIIProtocolStrategy.h [deleted file]
server/consumers/Audio/AudioConsumer.cpp [deleted file]
server/consumers/Audio/AudioConsumer.h [deleted file]
server/consumers/GDI/GDIVideoConsumer.cpp [deleted file]
server/consumers/GDI/GDIVideoConsumer.h [deleted file]
server/consumers/OGL/OGLVideoConsumer.cpp [deleted file]
server/consumers/OGL/OGLVideoConsumer.h [deleted file]
server/consumers/bluefish/BlueFishVideoConsumer.cpp [deleted file]
server/consumers/bluefish/BlueFishVideoConsumer.h [deleted file]
server/consumers/bluefish/BluefishException.h [deleted file]
server/consumers/bluefish/BluefishFrameManager.cpp [deleted file]
server/consumers/bluefish/BluefishFrameManager.h [deleted file]
server/consumers/bluefish/BluefishMemory.h [deleted file]
server/consumers/bluefish/BluefishPlaybackStrategy.cpp [deleted file]
server/consumers/bluefish/BluefishPlaybackStrategy.h [deleted file]
server/consumers/bluefish/BluefishUtil.h [deleted file]
server/consumers/decklink/DeckLinkAPI.idl [deleted file]
server/consumers/decklink/DeckLinkAPI_h.h [deleted file]
server/consumers/decklink/DeckLinkAPI_i.c [deleted file]
server/consumers/decklink/DeckLinkAPI_v7_1.idl [deleted file]
server/consumers/decklink/DeckLinkAPI_v7_3.idl [deleted file]
server/consumers/decklink/DecklinkVideoConsumer.cpp [deleted file]
server/consumers/decklink/DecklinkVideoConsumer.h [deleted file]
server/frame/BitmapFrame.cpp [deleted file]
server/frame/BitmapFrame.h [deleted file]
server/frame/BitmapFrameAdapter.cpp [deleted file]
server/frame/BitmapFrameAdapter.h [deleted file]
server/frame/BitmapFrameManager.cpp [deleted file]
server/frame/BitmapFrameManager.h [deleted file]
server/frame/BitmapFrameManagerAdapter.cpp [deleted file]
server/frame/BitmapFrameManagerAdapter.h [deleted file]
server/frame/ClipInfo.h [deleted file]
server/frame/Frame.cpp [deleted file]
server/frame/Frame.h [deleted file]
server/frame/FrameManager.h [deleted file]
server/frame/FrameMediaController.h [deleted file]
server/frame/FramePlaybackControl.cpp [deleted file]
server/frame/FramePlaybackControl.h [deleted file]
server/frame/FramePlaybackStrategy.h [deleted file]
server/frame/SystemFrame.cpp [deleted file]
server/frame/SystemFrame.h [deleted file]
server/frame/SystemFrameManager.cpp [deleted file]
server/frame/SystemFrameManager.h [deleted file]
server/frame/buffers/FrameBuffer.h [deleted file]
server/frame/buffers/MotionFrameBuffer.cpp [deleted file]
server/frame/buffers/MotionFrameBuffer.h [deleted file]
server/frame/buffers/StaticFrameBuffer.cpp [deleted file]
server/frame/buffers/StaticFrameBuffer.h [deleted file]
server/io/AsyncEventServer.cpp [deleted file]
server/io/AsyncEventServer.h [deleted file]
server/io/ClientInfo.h [deleted file]
server/io/ProtocolStrategy.h [deleted file]
server/io/SerialPort.cpp [deleted file]
server/io/SerialPort.h [deleted file]
server/io/SocketInfo.cpp [deleted file]
server/io/SocketInfo.h [deleted file]
server/producers/color/ColorManager.cpp [deleted file]
server/producers/color/ColorManager.h [deleted file]
server/producers/composites/FrameCompositeProducer.cpp [deleted file]
server/producers/composites/FrameCompositeProducer.h [deleted file]
server/producers/composites/TransitionProducer.cpp [deleted file]
server/producers/composites/TransitionProducer.h [deleted file]
server/producers/ffmpeg/FFmpegManager.cpp [deleted file]
server/producers/ffmpeg/audio/audio_decoder.cpp [deleted file]
server/producers/ffmpeg/audio/audio_decoder.h [deleted file]
server/producers/ffmpeg/ffmpeg_producer.cpp [deleted file]
server/producers/ffmpeg/ffmpeg_producer.h [deleted file]
server/producers/ffmpeg/ffmpegmanager.h [deleted file]
server/producers/ffmpeg/input.cpp [deleted file]
server/producers/ffmpeg/input.h [deleted file]
server/producers/ffmpeg/packet.h [deleted file]
server/producers/ffmpeg/video/video_decoder.cpp [deleted file]
server/producers/ffmpeg/video/video_decoder.h [deleted file]
server/producers/ffmpeg/video/video_transformer.cpp [deleted file]
server/producers/ffmpeg/video/video_transformer.h [deleted file]
server/producers/flash/CTManager.cpp [deleted file]
server/producers/flash/CTManager.h [deleted file]
server/producers/flash/Flash9e.IDL [deleted file]
server/producers/flash/Flash9e_i.c [deleted file]
server/producers/flash/FlashAxContainer.cpp [deleted file]
server/producers/flash/FlashAxContainer.h [deleted file]
server/producers/flash/FlashCommand.cpp [deleted file]
server/producers/flash/FlashCommand.h [deleted file]
server/producers/flash/FlashCommandQueue.cpp [deleted file]
server/producers/flash/FlashCommandQueue.h [deleted file]
server/producers/flash/FlashManager.cpp [deleted file]
server/producers/flash/FlashManager.h [deleted file]
server/producers/flash/FlashProducer.cpp [deleted file]
server/producers/flash/FlashProducer.h [deleted file]
server/producers/flash/TimerHelper.h [deleted file]
server/producers/flash/axflash.h [deleted file]
server/producers/targa/TargaManager.cpp [deleted file]
server/producers/targa/TargaManager.h [deleted file]
server/producers/targascroll/TargaScrollManager.cpp [deleted file]
server/producers/targascroll/TargaScrollManager.h [deleted file]
server/producers/targascroll/TargaScrollProducer.cpp [deleted file]
server/producers/targascroll/TargaScrollProducer.h [deleted file]
server/resources/Server.rc [deleted file]
server/resources/icon2.ico [deleted file]
server/resources/server.rc2 [deleted file]
server/string_convert.h [deleted file]
server/utils/Allocator.h [deleted file]
server/utils/BitmapHolder.cpp [deleted file]
server/utils/BitmapHolder.h [deleted file]
server/utils/CPUID.cpp [deleted file]
server/utils/CPUID.hpp [deleted file]
server/utils/CommandQueue.h [deleted file]
server/utils/CritSectLock.h [deleted file]
server/utils/DCWrapper.cpp [deleted file]
server/utils/DCWrapper.h [deleted file]
server/utils/DataBuffer.h [deleted file]
server/utils/Event.h [deleted file]
server/utils/FileExists.cpp [deleted file]
server/utils/FileExists.h [deleted file]
server/utils/FileInputStream.cpp [deleted file]
server/utils/FileInputStream.h [deleted file]
server/utils/FileOutputStream.cpp [deleted file]
server/utils/FileOutputStream.h [deleted file]
server/utils/FindWrapper.cpp [deleted file]
server/utils/FindWrapper.h [deleted file]
server/utils/ID.cpp [deleted file]
server/utils/ID.h [deleted file]
server/utils/InputStream.h [deleted file]
server/utils/Lockable.h [deleted file]
server/utils/LogException.cpp [deleted file]
server/utils/LogException.h [deleted file]
server/utils/LogLevel.h [deleted file]
server/utils/LogStream.cpp [deleted file]
server/utils/LogStream.h [deleted file]
server/utils/Logger.cpp [deleted file]
server/utils/Logger.h [deleted file]
server/utils/Noncopyable.hpp [deleted file]
server/utils/ObjectPool.h [deleted file]
server/utils/OutputStream.h [deleted file]
server/utils/PixmapData.h [deleted file]
server/utils/Process.cpp [deleted file]
server/utils/Process.h [deleted file]
server/utils/Semaphore.cpp [deleted file]
server/utils/Semaphore.h [deleted file]
server/utils/TaskQueue.h [deleted file]
server/utils/Thread.cpp [deleted file]
server/utils/Thread.h [deleted file]
server/utils/Types.hpp [deleted file]
server/utils/UnhandledException.h [deleted file]
server/utils/Win32Exception.cpp [deleted file]
server/utils/Win32Exception.h [deleted file]
server/utils/event.cpp [deleted file]
server/utils/functiontask.hpp [deleted file]
server/utils/image/Clear.cpp [deleted file]
server/utils/image/Clear.hpp [deleted file]
server/utils/image/Copy.cpp [deleted file]
server/utils/image/Copy.hpp [deleted file]
server/utils/image/CopyField.cpp [deleted file]
server/utils/image/CopyField.hpp [deleted file]
server/utils/image/Image.cpp [deleted file]
server/utils/image/Image.hpp [deleted file]
server/utils/image/Lerp.cpp [deleted file]
server/utils/image/Lerp.hpp [deleted file]
server/utils/image/Over.cpp [deleted file]
server/utils/image/Over.hpp [deleted file]
server/utils/image/Premultiply.cpp [deleted file]
server/utils/image/Premultiply.hpp [deleted file]
server/utils/image/Shuffle.cpp [deleted file]
server/utils/image/Shuffle.hpp [deleted file]
server/utils/object_pool.h [deleted file]
server/utils/runnable.h [deleted file]
server/utils/scope_exit.h [deleted file]

diff --git a/casparcg.sln b/casparcg.sln
deleted file mode 100644 (file)
index 9267fc4..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-\r
-Microsoft Visual Studio Solution File, Format Version 11.00\r
-# Visual Studio 2010\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Server", "server\Server.vcxproj", "{79388C20-6499-4BF6-B8B9-D8C33D7D4DDD}"\r
-EndProject\r
-Global\r
-       GlobalSection(SubversionScc) = preSolution\r
-               Svn-Managed = True\r
-               Manager = AnkhSVN - Subversion Support for Visual Studio\r
-       EndGlobalSection\r
-       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
-               Debug|Win32 = Debug|Win32\r
-               no bluefish|Win32 = no bluefish|Win32\r
-               Release|Win32 = Release|Win32\r
-       EndGlobalSection\r
-       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
-               {79388C20-6499-4BF6-B8B9-D8C33D7D4DDD}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {79388C20-6499-4BF6-B8B9-D8C33D7D4DDD}.Debug|Win32.Build.0 = Debug|Win32\r
-               {79388C20-6499-4BF6-B8B9-D8C33D7D4DDD}.no bluefish|Win32.ActiveCfg = no bluefish|Win32\r
-               {79388C20-6499-4BF6-B8B9-D8C33D7D4DDD}.no bluefish|Win32.Build.0 = no bluefish|Win32\r
-               {79388C20-6499-4BF6-B8B9-D8C33D7D4DDD}.Release|Win32.ActiveCfg = Release|Win32\r
-               {79388C20-6499-4BF6-B8B9-D8C33D7D4DDD}.Release|Win32.Build.0 = Release|Win32\r
-       EndGlobalSection\r
-       GlobalSection(SolutionProperties) = preSolution\r
-               HideSolutionNode = FALSE\r
-       EndGlobalSection\r
-EndGlobal\r
diff --git a/server/Application.cpp b/server/Application.cpp
deleted file mode 100644 (file)
index 603834a..0000000
+++ /dev/null
@@ -1,1123 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "stdafx.h"\r
-\r
-#ifdef _DEBUG\r
-       #define _CRTDBG_MAP_ALLOC\r
-       #include <stdlib.h>\r
-       #include <crtdbg.h>\r
-#endif\r
-\r
-#include "Application.h"\r
-\r
-#include <direct.h>\r
-#include <io.h>\r
-#include <time.h>\r
-#include <stdio.h>\r
-#include <string>\r
-\r
-#include "Window.h"\r
-#include "Channel.h"\r
-\r
-#include "amcp\AMCPProtocolStrategy.h"\r
-#include "cii\CIIProtocolStrategy.h"\r
-#include "CLK\CLKProtocolStrategy.h"\r
-#include "io\AsyncEventServer.h"\r
-#include "io\SerialPort.h"\r
-\r
-#include "cg\flashcgproxy.h"\r
-\r
-#include "utils\FindWrapper.h"\r
-#include "utils\FileExists.h"\r
-#include "utils\FileOutputStream.h"\r
-#include "utils\Thread.h"\r
-\r
-#include "FileInfo.h"\r
-#include "consumers\decklink\DecklinkVideoConsumer.h"\r
-#include "consumers\OGL\OGLVideoConsumer.h"\r
-#include "consumers\GDI\GDIVideoConsumer.h"\r
-#include "consumers\audio\AudioConsumer.h"\r
-\r
-#ifndef DISABLE_BLUEFISH\r
-#include "consumers\bluefish\BlueFishVideoConsumer.h"\r
-#endif\r
-\r
-#include "audio\DirectSoundManager.h"\r
-\r
-#include "producers\flash\FlashManager.h"\r
-#include "producers\flash\CTManager.h"\r
-#include "producers\flash\FlashAxContainer.h"\r
-#include "producers\targa\TargaManager.h"\r
-#include "producers\targascroll\TargaScrollManager.h"\r
-#include "producers\ffmpeg\FFmpegManager.h"\r
-#include "producers\color\ColorManager.h"\r
-\r
-WTL::CAppModule _Module;\r
-\r
-void WINAPI SvcMain(DWORD argsCount, LPTSTR* ppArgs) {\r
-       //caspar::GetApplication()->ServiceMain();\r
-}\r
-void WINAPI SvcCtrlHandler(DWORD dwCtrl) {\r
-       //caspar::GetApplication()->ServiceCtrlHandler(dwCtrl);\r
-}\r
-\r
-\r
-LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { \r
-       return caspar::GetApplication()->WndProc(hWnd, message, wParam, lParam);\r
-}\r
-\r
-namespace caspar {\r
-\r
-using namespace utils;\r
-\r
-enum ControllerTransports { TCP, Serial, TransportsCount };\r
-enum ControllerProtocols { AMCP, CII, CLOCK, ProtocolsCount };\r
-\r
-const TCHAR* Application::versionString_(TEXT("CG 1.8.1.2"));\r
-const TCHAR* Application::serviceName_(TEXT("Caspar service"));\r
-\r
-Application::Application(const tstring& cmdline, HINSTANCE hInstance) :           hInstance_(hInstance), logLevel_(2), logDir_(TEXT("log")), \r
-                                                                                                                                                  videoDir_(TEXT("media")),\r
-                                                                                                                                                  templateDir_(TEXT("templates")),\r
-                                                                                                                                                  dataDir_(TEXT("data")),\r
-                                                                                                                                                  colorManagerIndex_(-1),\r
-                                                                                                                                                  pAudioManager_(0),\r
-                                                                                                                                                  terminateEvent_(FALSE, FALSE),\r
-                                                                                                                                                  commandline_(cmdline)\r
-                                                                                                                                                  //svcStatusHandle_(0)\r
-{\r
-#ifdef _DEBUG\r
-       _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF );\r
-       _CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_DEBUG );\r
-       _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_DEBUG );\r
-       _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_DEBUG );\r
-\r
-//     _CrtSetBreakAlloc(1393);\r
-       Thread::EnableWin32ExceptionHandler(false);\r
-#else\r
-       Thread::EnableWin32ExceptionHandler(true);\r
-#endif\r
-\r
-       HRESULT hResult = ::OleInitialize(NULL);\r
-       _Module.Init(NULL, hInstance, &LIBID_ATLLib);\r
-}\r
-\r
-Application::~Application()\r
-{\r
-       Destroy();\r
-\r
-       _Module.Term();\r
-       ::OleUninitialize();\r
-}\r
-\r
-//////////////////////\r
-// Run as service\r
-void Application::RunAsService() {\r
-       SERVICE_TABLE_ENTRY dispatchTable[] = \r
-       { \r
-               { TEXT(""), (LPSERVICE_MAIN_FUNCTION) SvcMain }, \r
-               { NULL, NULL } \r
-       }; \r
-\r
-       // This call returns when the service has stopped. \r
-       // The process should simply terminate when the call returns.\r
-//     if(!StartServiceCtrlDispatcher(dispatchTable)) { \r
-               //SvcReportEvent(TEXT("StartServiceCtrlDispatcher")); \r
-//     }\r
-}\r
-\r
-//void Application::ServiceMain() {\r
-//     // Register the handler function for the service\r
-//     svcStatusHandle_ = RegisterServiceCtrlHandler(serviceName_, SvcCtrlHandler);\r
-//     if(!svcStatusHandle_) { \r
-//             //SvcReportEvent(TEXT("RegisterServiceCtrlHandler")); \r
-//             return; \r
-//     } \r
-//\r
-//     //These SERVICE_STATUS members remain as set here\r
-//     serviceStatus_.dwServiceType = SERVICE_WIN32_OWN_PROCESS; \r
-//     serviceStatus_.dwServiceSpecificExitCode = 0;    \r
-//\r
-//     // Report initial status to the SCM\r
-//     ServiceReportStatus(SERVICE_START_PENDING, NO_ERROR, 3000);\r
-//\r
-//     if(Initialize()) {\r
-//             ReportSvcStatus(SERVICE_RUNNING, NO_ERROR, 0);\r
-//\r
-//             MSG msg;\r
-//             bool bQuit = false;\r
-//             int errorCode = 0;\r
-//\r
-//             while(!bQuit) {\r
-//                     const HANDLE waitEvents[] =  {stopEvent_, terminateEvent_ };\r
-//                     HRESULT waitResult = MsgWaitForMultipleObjects(1, &waitEvents, FALSE, 2500, QS_ALLEVENTS);\r
-//                     switch(waitResult) \r
-//                     {\r
-//                     case WAIT_OBJECT_0:\r
-//                             bQuit = true;\r
-//                             errorCode = NO_ERROR;\r
-//                             break;\r
-//\r
-//                     case WAIT_OBJECT_0 + 1:\r
-//                             bQuit = true;\r
-//                             errorCode = 42;\r
-//                             break;\r
-//\r
-//                     case WAIT_OBJECT_0+2:\r
-//                             if(GetMessage(&msg, NULL, 0, 0))\r
-//                             {\r
-//                                     TranslateMessage(&msg);\r
-//                                     DispatchMessage(&msg);\r
-//                             }\r
-//                             else {\r
-//                                     bQuit = true;\r
-//                                     errorCode = msg.wParam;\r
-//                             }\r
-//                             break;\r
-//\r
-//                     case WAIT_TIMEOUT:\r
-//                             break;\r
-//\r
-//                     case WAIT_FAILED:\r
-//                             LOG << LogLevel::Critical << "Wait failed in main thread. Exiting";\r
-//                     default:\r
-//                             bQuit = true;\r
-//                             errorCode = 42;\r
-//                             break;\r
-//                     }\r
-//             }\r
-//\r
-//             Destroy();\r
-//             ServiceReportStatus(SERVICE_STOPPED, errorCode, 0);\r
-//     }\r
-//     else {\r
-//             ServiceReportStatus(SERVICE_STOPPED, NO_ERROR, 0);\r
-//     }\r
-//}\r
-//\r
-//void Application::ServiceCtrlHandler(DWORD dwCtrl) {\r
-//     switch(dwCtrl) {\r
-//             case SERVICE_CONTROL_STOP:\r
-//                     ServiceReportStatus(SERVICE_STOP_PENDING, NO_ERROR, 0);\r
-//                     this->GetShutdownEvent().Set();\r
-//                     return;\r
-//\r
-//             case SERVICE_CONTROL_INTERROGATE:\r
-//                     break;\r
-//             default:\r
-//                     break;\r
-//     }\r
-//     ServiceReportStatus(serviceStatus_.dwCurrentState, NO_ERROR, 0);\r
-//}\r
-//void Application::ServiceReportStatus(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwWaitHint) {\r
-//    static DWORD dwCheckPoint = 1;\r
-//\r
-//    // Fill in the SERVICE_STATUS structure.\r
-//    serviceStatus_.dwCurrentState = dwCurrentState;\r
-//    serviceStatus_.dwWin32ExitCode = dwWin32ExitCode;\r
-//    serviceStatus_.dwWaitHint = dwWaitHint;\r
-//\r
-//    if (dwCurrentState == SERVICE_START_PENDING)\r
-//        serviceStatus_.dwControlsAccepted = 0;\r
-//    else serviceStatus_.dwControlsAccepted = SERVICE_ACCEPT_STOP;\r
-//\r
-//    if ( (dwCurrentState == SERVICE_RUNNING) ||\r
-//           (dwCurrentState == SERVICE_STOPPED) )\r
-//        serviceStatus_.dwCheckPoint = 0;\r
-//    else serviceStatus_.dwCheckPoint = dwCheckPoint++;\r
-//\r
-//    // Report the status of the service to the SCM.\r
-//    SetServiceStatus(svcStatusHandle_, &serviceStatus_);\r
-//}\r
-\r
-///////////////////\r
-// Run as window\r
-int Application::RunAsWindow() {\r
-       if(Initialize() && pWindow_ != 0) {\r
-               MSG msg;\r
-\r
-               while (GetMessage(&msg, NULL, 0, 0))\r
-               {\r
-                       TranslateMessage(&msg);\r
-                       DispatchMessage(&msg);\r
-               }\r
-               return (int)msg.wParam;\r
-\r
-       //      bool bQuit = false;\r
-\r
-       //      while(!bQuit) {\r
-       //              const HANDLE terminateEvent = terminateEvent_;\r
-       //              HRESULT waitResult = MsgWaitForMultipleObjects(1, &terminateEvent, FALSE, 2500, QS_ALLEVENTS);\r
-       //              switch(waitResult) \r
-       //              {\r
-       //              case WAIT_OBJECT_0:\r
-       //                      return 42;\r
-\r
-       //              case WAIT_OBJECT_0+1:\r
-       //                      if(GetMessage(&msg, NULL, 0, 0))\r
-       //                      {\r
-       //                              TranslateMessage(&msg);\r
-       //                              DispatchMessage(&msg);\r
-       //                      }\r
-       //                      else\r
-       //                              return msg.wParam;\r
-\r
-       //              case WAIT_TIMEOUT:\r
-       //                      break;\r
-\r
-       //              case WAIT_FAILED:\r
-       //                      LOG << LogLevel::Critical << "Wait failed in main thread. Exiting";\r
-       //              default:\r
-       //                      return 99;\r
-       //              }\r
-       //      }\r
-       //      return 0;\r
-       }\r
-       return -1;\r
-}\r
-\r
-LRESULT Application::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)\r
-{\r
-       PAINTSTRUCT ps;\r
-       TCHAR timeString[256];\r
-       static int oldyday = 0;\r
-       static UINT_PTR timerID = 0;\r
-       \r
-    switch (message) \r
-    {\r
-               case WM_PAINT:\r
-                       BeginPaint(hWnd, &ps);\r
-                       EndPaint(hWnd, &ps);\r
-                       break;\r
-\r
-               case WM_CREATE: \r
-                       {\r
-                               timerID = SetTimer(hWnd,1,1000,NULL);\r
-                               InvalidateRect(hWnd,NULL,true);\r
-\r
-                               __time64_t timevalue = _time64(NULL);\r
-                               tm timeStruct;\r
-                               _localtime64_s(&timeStruct, &timevalue);\r
-\r
-                               oldyday = timeStruct.tm_yday;\r
-\r
-                               TCHAR logFile[512];\r
-                               _stprintf_s<>(logFile, TEXT("%slog %04d-%02d-%02d.log"), logDir_.c_str(), timeStruct.tm_year + 1900, timeStruct.tm_mon + 1, timeStruct.tm_mday);\r
-                               Logger::GetInstance().SetOutputStream(OutputStreamPtr(new FileOutputStream(logFile, true)));\r
-                       }\r
-                       break;\r
-\r
-               case WM_TIMER:\r
-                       if(wParam == timerID)\r
-                       {\r
-                               __time64_t timevalue = _time64(NULL);\r
-                               tm timeStruct;\r
-                               _localtime64_s(&timeStruct, &timevalue);\r
-\r
-                               if(timeStruct.tm_yday != oldyday)\r
-                               {\r
-                                       LOG << "new day";\r
-\r
-                                       TCHAR logFile[512];\r
-\r
-                                       oldyday = timeStruct.tm_yday;\r
-                                       _stprintf_s<>(logFile, TEXT("%slog %04d-%02d-%02d.log"), logDir_.c_str(), timeStruct.tm_year + 1900, timeStruct.tm_mon + 1, timeStruct.tm_mday);\r
-                                       Logger::GetInstance().SetOutputStream(OutputStreamPtr(new FileOutputStream(logFile, true)));\r
-                               }\r
-                               \r
-#ifdef DISABLE_BLUEFISH\r
-                               const TCHAR* strCompability = TEXT(" (No bluefish)");\r
-#else\r
-                               const TCHAR* strCompability = TEXT("");\r
-#endif\r
-                               _stprintf_s<>(timeString, TEXT("Caspar %s%s - %02d:%02d:%02d"), GetVersionString(), strCompability, timeStruct.tm_hour, timeStruct.tm_min, timeStruct.tm_sec);\r
-                               SetWindowText(pWindow_->getHwnd(), timeString);\r
-                       }\r
-                       break;\r
-                       \r
-               case WM_ENDSESSION:\r
-                       if(wParam == TRUE) {\r
-                               LOG << TEXT("APPLICATION: User shutdown or rebooting system.\r\n\r\n");\r
-                               if(timerID != 0)\r
-                                       KillTimer(hWnd, timerID);\r
-\r
-                               Destroy();\r
-                       }\r
-                       else {\r
-                               LOG << TEXT("APPLICATION: Received ENDSESSION notification.");\r
-                       }\r
-                       break;\r
-\r
-               case WM_SETFOCUS: \r
-                       break;\r
-\r
-               case WM_CHAR:\r
-                       break;\r
-\r
-               case WM_SIZE: \r
-                       break;\r
-\r
-               case WM_DESTROY:\r
-                       if(timerID != 0)\r
-                               KillTimer(hWnd, timerID);\r
-\r
-                       PostQuitMessage(0);\r
-                       break;\r
-               default:\r
-                       return DefWindowProc(hWnd, message, wParam, lParam);\r
-    }\r
-    return 0;\r
-}\r
-\r
-/////////////////////////////\r
-// Application::Initialize\r
-// PARAMS: hinstance(processens instans. Forwardad frÃ¥n WinMain)\r
-// RETURNS: true if every component was successfully initialized.\r
-// COMMENT: Initializes all the components\r
-/////////////////////////////\r
-bool Application::Initialize()\r
-{\r
-#ifdef _DEBUG\r
-       MessageBox(NULL, TEXT("Now is the time to connect for remote debugging..."), TEXT("Debug"), MB_OK | MB_TOPMOST);\r
-#endif\r
-\r
-       try\r
-       {\r
-               _configthreadlocale(_DISABLE_PER_THREAD_LOCALE);\r
-               std::locale::global(std::locale(""));\r
-\r
-               //Hämtar inställningar\r
-               LoadSettings10();\r
-               LoadSettings15();\r
-               LoadSettings17();\r
-               ParseCommandline();\r
-\r
-               if(!CheckDirectories())\r
-                       return false;\r
-\r
-\r
-               Logger::GetInstance().SetLevel(static_cast<LogLevel::LogLevelEnum>(logLevel_ + 1));\r
-\r
-               pWindow_ = WindowPtr(new Window());\r
-               pWindow_->Initialize(hInstance_, TEXT("Caspar"), TEXT("SVT_CASPAR"));\r
-\r
-               if(caspar::flash::FlashAxContainer::CheckForFlashSupport())\r
-                       caspar::CG::FlashCGProxy::SetCGVersion();\r
-               else {\r
-                       LOG << LogLevel::Critical << TEXT("No flashplayer activex-control installed. Flash support will be disabled");\r
-               }\r
-\r
-               caspar::directsound::DirectSoundManager::GetInstance()->Initialize(pWindow_->getHwnd(), 2, 48000, 16);\r
-               pAudioManager_ = caspar::directsound::DirectSoundManager::GetInstance();\r
-\r
-               sourceMediaManagers_.push_back(MediaManagerPtr(new FlashManager()));\r
-               sourceMediaManagers_.push_back(MediaManagerPtr(new CTManager()));\r
-               sourceMediaManagers_.push_back(MediaManagerPtr(new TargaManager()));\r
-               sourceMediaManagers_.push_back(MediaManagerPtr(new TargaScrollMediaManager()));\r
-               sourceMediaManagers_.push_back(MediaManagerPtr(new ffmpeg::FFMPEGManager()));\r
-               sourceMediaManagers_.push_back(MediaManagerPtr(new ColorManager()));\r
-\r
-               colorManagerIndex_ = static_cast<int>(sourceMediaManagers_.size()-1);\r
-\r
-               ////////////////////////////\r
-               // SETUP VideoOut Channels\r
-               int videoChannelIndex = 1;\r
-#ifndef DISABLE_BLUEFISH\r
-               int videoDeviceCount = caspar::bluefish::BlueFishVideoConsumer::EnumerateDevices();\r
-               LOG << TEXT("BLUEFISH: Found ") << videoDeviceCount << TEXT(" video cards.");\r
-\r
-               for(int bluefishIndex = 1; bluefishIndex<=videoDeviceCount; ++bluefishIndex, ++videoChannelIndex) {\r
-                       CreateVideoChannel(videoChannelIndex, caspar::bluefish::BlueFishVideoConsumer::Create(bluefishIndex));\r
-               }\r
-#endif\r
-\r
-               //Decklink\r
-               if(GetSetting(TEXT("nodecklink")) != TEXT("true")) {\r
-                       VideoConsumerPtr pDecklinkConsumer(caspar::decklink::DecklinkVideoConsumer::Create());\r
-                       if(pDecklinkConsumer)\r
-                               CreateVideoChannel(videoChannelIndex++, pDecklinkConsumer);\r
-               }\r
-\r
-               if(GetSetting(TEXT("gdichannel")) == TEXT("true") && pWindow_ != 0) {\r
-                       CreateVideoChannel(videoChannelIndex++, VideoConsumerPtr(new gdi::GDIVideoConsumer(pWindow_->getHwnd(), FrameFormatDescription::FormatDescriptions[FFormat576p2500])));\r
-               }\r
-               else if(GetSetting(TEXT("oglchannel")) == TEXT("true") && pWindow_ != 0)\r
-               {\r
-                       ogl::Stretch stretch = ogl::Fill;\r
-                       tstring stretchStr = GetSetting(TEXT("stretch"));\r
-                       if(stretchStr == TEXT("none"))\r
-                               stretch = ogl::None;\r
-                       else if(stretchStr == TEXT("uniform"))\r
-                               stretch = ogl::Uniform;\r
-                       else if(stretchStr == TEXT("uniformtofill"))\r
-                               stretch = ogl::UniformToFill;\r
-\r
-                       tstring screenStr = GetSetting(TEXT("displaydevice")).c_str();\r
-                       int screen = 0;\r
-                       if(screenStr != TEXT(""))\r
-                               screen = _wtoi(screenStr.c_str());\r
-\r
-                       tstring strVideoMode = GetSetting(TEXT("oglvideomode"));\r
-                       if(strVideoMode == TEXT(""))\r
-                               strVideoMode = GetSetting(TEXT("videomode"));\r
-                       \r
-                       FrameFormat casparVideoFormat = FFormat576p2500;\r
-                       if(strVideoMode != TEXT(""))\r
-                               casparVideoFormat = caspar::GetVideoFormat(strVideoMode);\r
-\r
-                       CreateVideoChannel(videoChannelIndex++, VideoConsumerPtr(new ogl::OGLVideoConsumer(pWindow_->getHwnd(), FrameFormatDescription::FormatDescriptions[casparVideoFormat], screen, stretch)));\r
-               }\r
-\r
-               CreateVideoChannel(videoChannelIndex++, VideoConsumerPtr(new audio::AudioConsumer(FrameFormatDescription::FormatDescriptions[FFormat576p2500])));\r
-               CreateVideoChannel(videoChannelIndex++, VideoConsumerPtr(new audio::AudioConsumer(FrameFormatDescription::FormatDescriptions[FFormat576p2500])));\r
-\r
-               if(videoChannels_.size() < 1)\r
-               {\r
-                       LOG << TEXT("No channels found, quitting");\r
-                       return false;\r
-               }\r
-\r
-               //////////////////////\r
-               // Setup controllers\r
-               SetupControllers();\r
-\r
-               ///////////////////////////\r
-               // Initiate videochannels\r
-               for(unsigned int i=0;i<videoChannels_.size();++i) {\r
-                       ChannelPtr pChannel = GetChannel(i);\r
-\r
-                       if(pChannel != 0) {\r
-                               pChannel->Clear();\r
-                       }\r
-               }\r
-       }\r
-       catch(const std::exception& ex) {\r
-               LOG << LogLevel::Critical << TEXT("Initialization exception: ") << ex.what();\r
-               MessageBoxA(NULL, ex.what(), "Error", MB_OK | MB_TOPMOST);\r
-               return false;\r
-       }\r
-\r
-       LOG << TEXT("Successful initialization.");\r
-       return true;\r
-}\r
-\r
-/////////////////////////////////////////\r
-// Application::Destroy\r
-// COMMENT: shuts down all the components in the correct order\r
-void Application::Destroy() {\r
-       //First kill all possibilities for new commands to arrive...\r
-       controllers_.clear();\r
-\r
-       //...Then shutdown all channels, stopping playback etc...\r
-       videoChannels_.clear();\r
-\r
-       //...finally delete all mediamanagers\r
-       sourceMediaManagers_.clear();\r
-\r
-       LOG << TEXT("Shutdown complete.\r\n\r\n");\r
-}\r
-\r
-/////////////////////////////////////\r
-// Application::CreateVideoChannel\r
-// PARAMS: index(each channel has to have a unique index), videoConsumer(the consumer)\r
-// COMMENT: Creates a channel and connects a consumer to it\r
-void Application::CreateVideoChannel(int index, VideoConsumerPtr pVideoConsumer) {\r
-       if(pVideoConsumer != 0) {\r
-               ChannelPtr pChannel(new Channel(index, pVideoConsumer));\r
-               if(pChannel != 0 && pChannel->Initialize()) {\r
-                       videoChannels_.push_back(pChannel);\r
-               }\r
-               else {\r
-                       LOG << TEXT("Failed to create channel ") <<  index;\r
-               }\r
-       }\r
-       else {\r
-               LOG << TEXT("Failed to create consumer for channel ") << index << TEXT(". Removing channel completely.");\r
-       }\r
-}\r
-\r
-//////////////////////////////////\r
-// Application::GetChannel\r
-// PARAM: deviceIndex(the index of the requested channel)\r
-// RETURNS: a (smart)pointer to the requested channel.\r
-ChannelPtr Application::GetChannel(unsigned int deviceIndex) {\r
-       ChannelPtr result;\r
-       if(deviceIndex < videoChannels_.size())\r
-               result = videoChannels_[deviceIndex];\r
-\r
-       return result;\r
-}\r
-\r
-/////////////////////////////\r
-// Application::FindFile\r
-// PARAM: filename(fileame without the ending), pFileInfo(pointer to a structure that should be populated with info about the file)\r
-// RETURNS: (smart)pointer to the MediaManager that handles the specified file\r
-// COMMENT: Checks if the file exists and if it can be opened by any of the active mediamanagers.\r
-MediaManagerPtr Application::FindMediaFile(const tstring& filename, FileInfo* pFileInfo)\r
-{\r
-       for(unsigned int index=0;index<sourceMediaManagers_.size();++index)\r
-       {\r
-               const std::vector<tstring>* pExtensions;\r
-               int extensionCount = sourceMediaManagers_[index]->GetSupportedExtensions(pExtensions);\r
-               for(int extensionIndex=0; extensionIndex<extensionCount; ++extensionIndex)\r
-               {\r
-                       tstring fullFilename = filename;\r
-                       if((*pExtensions)[extensionIndex].length() > 0) {\r
-                               fullFilename += TEXT('.');\r
-                               fullFilename += (*pExtensions)[extensionIndex];\r
-                       }\r
-\r
-                       WIN32_FIND_DATA findInfo;\r
-                       FindWrapper findWrapper(fullFilename, &findInfo);\r
-                       if(findWrapper.Success()) {\r
-                               if(pFileInfo != 0) {\r
-                                       pFileInfo->filename = filename;\r
-                                       pFileInfo->filetype = (*pExtensions)[extensionIndex];\r
-\r
-                                       unsigned __int64 fileSize = findInfo.nFileSizeHigh;\r
-                                       fileSize *= 0x100000000;\r
-                                       fileSize += findInfo.nFileSizeLow;\r
-\r
-                                       pFileInfo->size = fileSize;\r
-                               }\r
-\r
-                               return sourceMediaManagers_[index];\r
-                       }\r
-               }\r
-       }\r
-\r
-       return MediaManagerPtr();\r
-}\r
-\r
-bool Application::FindTemplate(const tstring& templateName, tstring* pExtension) {\r
-       bool bResult = exists(templateName + TEXT(".ft"));\r
-       if(bResult) {\r
-               if(pExtension != NULL)\r
-                       *pExtension = TEXT(".ft");\r
-       }\r
-       else {\r
-               bResult = exists(templateName + TEXT(".ct"));\r
-               if(bResult && pExtension != NULL)\r
-                       *pExtension = TEXT(".ct");\r
-       }\r
-       return bResult;\r
-}\r
-\r
-void Application::SetupControllers()\r
-{\r
-       HKEY hKey = 0;\r
-       HKEY hSubkey = 0;\r
-       try {\r
-               if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Sveriges Television AB\\Caspar CG\\Controllers"), 0,KEY_READ, &hKey) == ERROR_SUCCESS)\r
-               {\r
-                       DWORD keyCount = 0;\r
-                       if(RegQueryInfoKey(hKey, NULL, NULL, NULL, &keyCount, NULL, NULL, NULL, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) {\r
-                               tstring subkeyName = TEXT("0");\r
-                               for(DWORD keyIndex = 0; keyIndex < min(keyCount, 10); ++keyIndex) {\r
-                                       subkeyName[0] = TEXT('0')+static_cast<TCHAR>(keyIndex);\r
-\r
-                                       if(RegOpenKeyEx(hKey, subkeyName.c_str(), 0, KEY_READ, &hSubkey) == ERROR_SUCCESS) {\r
-                                               DWORD protocolIndex = 0, transportIndex = 0;\r
-                                               DWORD size = 0;\r
-                                               LONG returnValue = 0;\r
-\r
-                                               size = sizeof(DWORD);\r
-                                               returnValue = RegQueryValueEx(hSubkey, TEXT("transport"), 0, 0, (BYTE*)&transportIndex, &size);\r
-                                               if(returnValue != ERROR_SUCCESS || transportIndex >= TransportsCount)\r
-                                                       continue;\r
-\r
-                                               size = sizeof(DWORD);\r
-                                               returnValue = RegQueryValueEx(hSubkey, TEXT("protocol"), 0, 0, (BYTE*)&protocolIndex, &size);\r
-                                               if(returnValue != ERROR_SUCCESS || protocolIndex >= ProtocolsCount)\r
-                                                       continue;\r
-\r
-                                               //Setup controller\r
-                                               ControllerPtr pController;\r
-                                               switch(transportIndex) {\r
-                                                       case TCP:\r
-                                                               pController = CreateTCPController(hSubkey);\r
-                                                               break;\r
-                                                       case Serial:\r
-                                                               pController = CreateSerialController(hSubkey);\r
-                                                               break;\r
-                                               }\r
-\r
-                                               if(pController != 0) {\r
-                                                       //there is a Controller, create ProtocolStrategy\r
-                                                       caspar::IO::ProtocolStrategyPtr pProtocol;\r
-                                                       switch(protocolIndex) {\r
-                                                               case AMCP:\r
-                                                                       pProtocol = caspar::IO::ProtocolStrategyPtr(new caspar::amcp::AMCPProtocolStrategy());\r
-                                                                       break;\r
-                                                               case CII:\r
-                                                                       pProtocol = caspar::IO::ProtocolStrategyPtr(new caspar::cii::CIIProtocolStrategy());\r
-                                                                       break;\r
-                                                               case CLOCK:\r
-                                                                       pProtocol = caspar::IO::ProtocolStrategyPtr(new caspar::CLK::CLKProtocolStrategy());\r
-                                                                       break;\r
-                                                       }\r
-\r
-                                                       if(pProtocol != 0) {\r
-                                                               //Both Controller and ProtocolStrategy created. Initialize!\r
-                                                               pController->SetProtocolStrategy(pProtocol);\r
-                                                               if(pController->Start())\r
-                                                                       controllers_.push_back(pController);\r
-                                                               else {\r
-                                                                       LOG << TEXT("Failed to start controller.");\r
-                                                               }\r
-                                                       }\r
-                                                       else {\r
-                                                               LOG << TEXT("failed to create protocol.");\r
-                                                       }\r
-                                               }\r
-                                               else {\r
-                                                       LOG << TEXT("Failed to create controller.");\r
-                                               }\r
-                                               \r
-                                               RegCloseKey(hSubkey);\r
-                                               hSubkey = 0;\r
-                                       }\r
-                                       else {\r
-                                               LOG << TEXT("Failed to read controller-settings.");\r
-                                       }\r
-                               }\r
-                       }\r
-                       RegCloseKey(hKey);\r
-               }\r
-               else {\r
-                       LOG << TEXT("Failed to read controller-settings.");\r
-               }\r
-       }\r
-       catch(std::exception&) {\r
-               if(hSubkey != 0)\r
-                       RegCloseKey(hSubkey);\r
-\r
-               if(hKey != 0)\r
-                       RegCloseKey(hKey);\r
-       }\r
-}\r
-\r
-ControllerPtr Application::CreateTCPController(HKEY hSubkey) {\r
-       DWORD port = 5250;\r
-\r
-       //read port setting\r
-       DWORD size = sizeof(DWORD);\r
-       RegQueryValueEx(hSubkey, TEXT("TCPPort"), 0, 0, (BYTE*)&port, &size);\r
-\r
-       ControllerPtr pAsyncEventServer(new caspar::IO::AsyncEventServer(port));\r
-       dynamic_cast<caspar::IO::AsyncEventServer*>(pAsyncEventServer.get())->SetClientDisconnectHandler(std::tr1::bind(&Application::OnClientDisconnected, this, std::tr1::placeholders::_1));\r
-\r
-       return pAsyncEventServer;\r
-}\r
-\r
-ControllerPtr Application::CreateSerialController(HKEY hSubkey)\r
-{\r
-       DWORD baudRate = 19200;\r
-       DWORD dataBits = 8;\r
-       DWORD parity = NOPARITY;\r
-       DWORD stopBits = ONESTOPBIT;\r
-       tstring portName;\r
-       TCHAR pPortname[256];\r
-       ZeroMemory(pPortname, sizeof(pPortname));\r
-\r
-       //read baudrate setting\r
-       DWORD size = sizeof(DWORD);\r
-       RegQueryValueEx(hSubkey, TEXT("SerialBaudrate"), 0, 0, (BYTE*)&baudRate, &size);\r
-\r
-       //read databits setting\r
-       size = sizeof(DWORD);\r
-       RegQueryValueEx(hSubkey, TEXT("SerialDatabits"), 0, 0, (BYTE*)&dataBits, &size);\r
-\r
-       //read parity setting\r
-       size = sizeof(DWORD);\r
-       RegQueryValueEx(hSubkey, TEXT("SerialParity"), 0, 0, (BYTE*)&parity, &size);\r
-\r
-       //read stopbits setting\r
-       size = sizeof(DWORD);\r
-       RegQueryValueEx(hSubkey, TEXT("SerialStopbits"), 0, 0, (BYTE*)&stopBits, &size);\r
-\r
-       //read portname setting\r
-       size = sizeof(pPortname) - sizeof(TCHAR);\r
-       LONG returnValue = RegQueryValueEx(hSubkey, TEXT("SerialPortname"), 0, 0, (BYTE*)pPortname, &size);\r
-       if(returnValue == ERROR_SUCCESS && size > 0)\r
-               portName = pPortname;\r
-\r
-       return ControllerPtr(new caspar::IO::SerialPort(baudRate, static_cast<BYTE>(parity), static_cast<BYTE>(dataBits), static_cast<BYTE>(stopBits), portName));\r
-}\r
-\r
-void Application::OnClientDisconnected(caspar::IO::SocketInfoPtr pClient) \r
-{\r
-       Monitor::ClearListener(pClient);\r
-}\r
-\r
-//////////////////////////////////\r
-// Application::LoadSetting10\r
-bool Application::LoadSettings10()\r
-{\r
-       HKEY hKey;\r
-       if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Sveriges Television AB\\Caspar CG\\1.0"), 0,KEY_READ, &hKey) == ERROR_SUCCESS)\r
-       {\r
-               TCHAR pString[512];\r
-\r
-               //read media-folder setting\r
-               DWORD size = sizeof(pString) - sizeof(TCHAR);\r
-               LONG returnValue = RegQueryValueEx(hKey, TEXT("MediaFolder"), 0, 0, (BYTE*)pString, &size);\r
-               if(returnValue == ERROR_SUCCESS && size > 0)\r
-                       videoDir_ = pString;\r
-\r
-               //read log-folder setting\r
-               size = sizeof(pString) - sizeof(TCHAR);\r
-               returnValue = RegQueryValueEx(hKey, TEXT("LogFolder"), 0, 0, (BYTE*)pString, &size);\r
-               if(returnValue == ERROR_SUCCESS && size > 0)\r
-                       logDir_ = pString;\r
-\r
-               //read loglevel\r
-               size = sizeof(int);\r
-               returnValue = RegQueryValueEx(hKey, TEXT("LogLevel"), 0, 0, (BYTE*)&logLevel_, &size);\r
-\r
-               //close handle after all settings have been saved\r
-               RegCloseKey(hKey);\r
-       }\r
-       else {\r
-               LOG << TEXT("No 1.0 settings defined. Using defaults.");\r
-       }\r
-\r
-       return true;\r
-}\r
-\r
-//////////////////////////////////\r
-// Application::LoadSetting15\r
-bool Application::LoadSettings15()\r
-{\r
-       HKEY hKey;\r
-       if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Sveriges Television AB\\Caspar CG\\1.5"), 0,KEY_READ, &hKey) == ERROR_SUCCESS)\r
-       {\r
-               TCHAR pString[512];\r
-\r
-               //read template-folder setting\r
-               DWORD size = sizeof(pString) - sizeof(TCHAR);\r
-               LONG returnValue = RegQueryValueEx(hKey, TEXT("TemplateFolder"), 0, 0, (BYTE*)pString, &size);\r
-               if(returnValue == ERROR_SUCCESS && size > 0)\r
-                       templateDir_ = pString;\r
-\r
-               //close handle after all settings have been saved\r
-               RegCloseKey(hKey);\r
-       }\r
-       else {\r
-               LOG << TEXT("No 1.5 settings defined. Using defaults.");\r
-       }\r
-\r
-       return true;\r
-}\r
-\r
-//////////////////////////////////\r
-// Application::LoadSetting17\r
-bool Application::LoadSettings17()\r
-{\r
-       HKEY hKey;\r
-       if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Sveriges Television AB\\Caspar CG\\1.7"), 0,KEY_READ, &hKey) == ERROR_SUCCESS)\r
-       {\r
-               TCHAR pString[512];\r
-\r
-               //read data-folder setting\r
-               DWORD size = sizeof(pString) - sizeof(TCHAR);\r
-               LONG returnValue = RegQueryValueEx(hKey, TEXT("DataFolder"), 0, 0, (BYTE*)pString, &size);\r
-               if(returnValue == ERROR_SUCCESS && size > 0)\r
-                       dataDir_ = pString;\r
-\r
-               //close handle after all settings have been saved\r
-               RegCloseKey(hKey);\r
-       }\r
-       else {\r
-               LOG << TEXT("No 1.7 settings defined. Using defaults.");\r
-       }\r
-\r
-       return true;\r
-}\r
-\r
-bool Application::CheckDirectories()\r
-{\r
-       bool returnValue = true;\r
-\r
-       if(logDir_.size() == 0) {\r
-               TCHAR pString[512];\r
-               if(_tgetcwd(pString, _MAX_PATH+1)) {\r
-                       logDir_ = pString;\r
-                       logDir_ += TEXT("\\log");\r
-                       _tmkdir(logDir_.c_str());\r
-               }\r
-       }\r
-\r
-       if(!CheckDirectory(logDir_)) {\r
-               LOG << TEXT("Failed to aquire log-folder, logging to c:\\");\r
-               logDir_ = TEXT("c:\\");\r
-       }\r
-\r
-       if(!CheckDirectory(videoDir_)) {\r
-               LOG << TEXT("Media-folder does not exists");\r
-               tstring error = TEXT("Kunde inte hitta mediafolder. ");\r
-               error += videoDir_;\r
-               MessageBox(NULL, error.c_str(), TEXT("Kritiskt fel"), MB_OK);\r
-               returnValue = false;\r
-       }\r
-\r
-       if(!CheckDirectory(templateDir_)) {\r
-               LOG << TEXT("Template-folder does not exists");\r
-               tstring error = TEXT("Kunde inte hitta templatefolder. ");\r
-               error += templateDir_;\r
-               MessageBox(NULL, error.c_str(), TEXT("Kritiskt fel"), MB_OK);\r
-               returnValue = false;\r
-       }\r
-\r
-       if(returnValue) {\r
-               if(!CheckDirectory(dataDir_)) {\r
-                       LOG << TEXT("Data-folder does not exists, default to same as media-folder");\r
-                       dataDir_ = videoDir_;\r
-               }\r
-       }\r
-\r
-       LOG << TEXT("Media-folder: ") << videoDir_.c_str();\r
-       LOG << TEXT("Template-folder: ") << templateDir_.c_str();\r
-       LOG << TEXT("Log-folder: ") << logDir_.c_str();\r
-       LOG << TEXT("Data-folder: ") << dataDir_.c_str();\r
-\r
-       return returnValue;\r
-}\r
-\r
-bool Application::CheckDirectory(tstring& directory) {\r
-       if(directory.size() == 0 || !exists(directory, true))\r
-               return false;\r
-\r
-       bool bIsRelative = false;\r
-       if(directory.size() >= 2) {\r
-               if(directory[1] != TEXT(':')) {\r
-                       bIsRelative = true;\r
-               }\r
-       }\r
-       else \r
-               bIsRelative = true;\r
-\r
-       if(bIsRelative) {\r
-               TCHAR pCurrentWorkingDirectory[_MAX_PATH+1];\r
-               if(_tgetcwd(pCurrentWorkingDirectory, _MAX_PATH)) {\r
-                       tstring fullPath = pCurrentWorkingDirectory;\r
-                       fullPath.push_back(TEXT('\\'));\r
-                       fullPath.append(directory);\r
-                       directory = fullPath;\r
-               }\r
-       }\r
-\r
-       if(directory[directory.size()-1] != TEXT('\\'))\r
-               directory += '\\';\r
-\r
-       return true;\r
-}\r
-\r
-///////////////////////////\r
-//\r
-// Commandline parameters\r
-//\r
-// hd=[720p50, 1080i50] chooses hd-mode for videochannels if availible\r
-// spy{=true} instructs the serialport to NOT SEND ANYTHING\r
-// internalkey(=true) instructs the videochannels to perform internal keying if availible\r
-void Application::ParseCommandline() {\r
-       tstring currentToken = TEXT("");\r
-       tstring lastKey = TEXT("");\r
-\r
-       bool inValue=false, inQuote=false;\r
-\r
-       unsigned int charIndex = 0;\r
-       for(charIndex = 0; charIndex < commandline_.size(); ++charIndex) {\r
-               TCHAR ch = commandline_[charIndex];\r
-               switch(ch) {\r
-                       case TEXT('\"'):\r
-                               inQuote = !inQuote;\r
-                               if(currentToken.size() > 0) {\r
-                                       if(inValue) {\r
-                                               settings_.insert(SettingsMap::value_type(lastKey, currentToken));\r
-                                               lastKey.clear();\r
-                                               inValue = false;\r
-                                       }\r
-                                       else {\r
-                                               settings_.insert(SettingsMap::value_type(currentToken, TEXT("true")));\r
-                                       }\r
-\r
-                                       currentToken.clear();\r
-                               }\r
-                               break;\r
-\r
-                       case TEXT('='):\r
-                               if(currentToken.size() > 0) {\r
-                                       lastKey = currentToken;\r
-                                       currentToken.clear();\r
-                                       inValue = true;\r
-                               }\r
-                               break;\r
-\r
-                       case TEXT(' '):\r
-                               if(inQuote)\r
-                                       currentToken += ch;\r
-                               else {\r
-                                       if(currentToken.size() > 0) {\r
-                                               if(inValue) {\r
-                                                       settings_.insert(SettingsMap::value_type(lastKey, currentToken));\r
-                                                       lastKey.clear();\r
-                                                       inValue = false;\r
-                                               }\r
-                                               else {\r
-                                                       settings_.insert(SettingsMap::value_type(currentToken, TEXT("true")));\r
-                                               }\r
-\r
-                                               currentToken.clear();\r
-                                       }\r
-                               }\r
-                               break;\r
-\r
-                       default:\r
-                               currentToken += ch;\r
-                               break;\r
-               }\r
-       }\r
-\r
-       if(currentToken.size() > 0) {\r
-               if(inValue) {\r
-                       settings_.insert(SettingsMap::value_type(lastKey, currentToken));\r
-               }\r
-               else {\r
-                       settings_.insert(SettingsMap::value_type(currentToken, TEXT("true")));\r
-               }\r
-       }\r
-}\r
-\r
-tstring Application::GetSetting(const tstring& key) {\r
-       SettingsMap::iterator it = settings_.find(key);\r
-       if(it != settings_.end())\r
-               return (*it).second;\r
-       else\r
-               return TEXT("");\r
-}\r
-\r
-//////////////////////////////\r
-// ServiceHelpers\r
-\r
-void Application::InstallService() \r
-{\r
-       tstringstream message;\r
-    SC_HANDLE schSCManager;\r
-       SC_HANDLE schService;\r
-       TCHAR szPath[MAX_PATH];\r
-\r
-       if(!GetModuleFileName(NULL, szPath, MAX_PATH)) {\r
-               message << TEXT("Error: ") << GetLastError();\r
-               MessageBox(NULL, message.str().c_str(), TEXT("Cannot install service"), MB_OK);\r
-        return;\r
-       }\r
-\r
-       // Get a handle to the SCM database. \r
-       schSCManager = OpenSCManager( \r
-               NULL,                    // local computer\r
-               NULL,                    // ServicesActive database \r
-               SC_MANAGER_ALL_ACCESS);  // full access rights \r
-\r
-       if(schSCManager == NULL) {\r
-               message << TEXT("OpenSCManager failed. Error: ") << GetLastError();\r
-               MessageBox(NULL, message.str().c_str(), TEXT("Cannot install service"), MB_OK);\r
-               return;\r
-       }\r
-\r
-       // Create the service\r
-       tstring imagePath(szPath);\r
-       imagePath.append(TEXT(" service"));\r
-\r
-       schService = CreateService( \r
-               schSCManager,              // SCM database \r
-               serviceName_,              // name of service \r
-               serviceName_,              // service name to display \r
-               SERVICE_ALL_ACCESS,        // desired access \r
-               SERVICE_WIN32_OWN_PROCESS, // service type \r
-               SERVICE_DEMAND_START,      // start type \r
-               SERVICE_ERROR_NORMAL,      // error control type \r
-               imagePath.c_str(),         // path to service's binary \r
-               NULL,                      // no load ordering group \r
-               NULL,                      // no tag identifier \r
-               NULL,                      // no dependencies \r
-               NULL,                      // LocalSystem account \r
-               NULL);                     // no password \r
-\r
-       if(schService == NULL) {\r
-               message << TEXT("CreateService failed. Error: ") << GetLastError(); \r
-               CloseServiceHandle(schSCManager);\r
-               MessageBox(NULL, message.str().c_str(), TEXT("Cannot install service"), MB_OK);\r
-               return;\r
-    }\r
-    else\r
-               MessageBox(NULL, TEXT("Service installed successfully"), TEXT("Done!"), MB_OK);\r
-\r
-    CloseServiceHandle(schService); \r
-    CloseServiceHandle(schSCManager);\r
-}\r
-\r
-void Application::UninstallService()\r
-{\r
-       tstringstream message;\r
-    SC_HANDLE schSCManager;\r
-    SC_HANDLE schService;\r
-\r
-    // Get a handle to the SCM database. \r
-    schSCManager = OpenSCManager( \r
-        NULL,                    // local computer\r
-        NULL,                    // ServicesActive database \r
-        SC_MANAGER_ALL_ACCESS);  // full access rights \r
\r
-    if(schSCManager == NULL){\r
-               message << TEXT("OpenSCManager failed. Error: ") << GetLastError();\r
-               MessageBox(NULL, message.str().c_str(), TEXT("Cannot uninstall service"), MB_OK);\r
-        return;\r
-    }\r
-\r
-    // Get a handle to the service.\r
-    schService = OpenService( \r
-        schSCManager,         // SCM database \r
-        serviceName_,  // name of service \r
-        DELETE);              // need delete access \r
\r
-    if (schService == NULL)\r
-    { \r
-               message << TEXT("OpenService failed. Error: ") << GetLastError();\r
-               MessageBox(NULL, message.str().c_str(), TEXT("Cannot uninstall service"), MB_OK);\r
-        CloseServiceHandle(schSCManager);\r
-        return;\r
-    }\r
-\r
-    // Delete the service.\r
-    if (!DeleteService(schService)) \r
-    {\r
-               message << TEXT("DeleteService failed. Error: ") << GetLastError();\r
-               MessageBox(NULL, message.str().c_str(), TEXT("Cannot uninstall service"), MB_OK);\r
-    }\r
-    else\r
-               MessageBox(NULL, TEXT("Service uninstalled successfully"), TEXT("Done!"), MB_OK);\r
-\r
-    CloseServiceHandle(schService); \r
-    CloseServiceHandle(schSCManager);\r
-}\r
-\r
-}
\ No newline at end of file
diff --git a/server/Application.h b/server/Application.h
deleted file mode 100644 (file)
index 739c1dc..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_APPLICATION_H__\r
-#define _CASPAR_APPLICATION_H__\r
-\r
-#pragma once\r
-\r
-#include "Window.h"\r
-#include "Controller.h"\r
-#include "MediaManager.h"\r
-#include "audio\audiomanager.h"\r
-#include "utils\event.h"\r
-#include "io\socketInfo.h"\r
-\r
-#include <string>\r
-#include <vector>\r
-#include <list>\r
-#include <map>\r
-\r
-#include <boost/lexical_cast.hpp>\r
-\r
-namespace caspar {\r
-\r
-       class Channel;\r
-       typedef std::tr1::shared_ptr<Channel> ChannelPtr;\r
-\r
-       class IVideoConsumer;\r
-       typedef std::tr1::shared_ptr<IVideoConsumer> VideoConsumerPtr;\r
-\r
-       class FileInfo;\r
-\r
-       class Application\r
-       {\r
-       public:\r
-               explicit Application(const tstring& cmdline, HINSTANCE);\r
-               ~Application();\r
-\r
-               static void InstallService();\r
-               static void UninstallService();\r
-               \r
-               void RunAsService();\r
-               int RunAsWindow();\r
-\r
-               //void ServiceMain();\r
-               //void ServiceCtrlHandler(DWORD dwCtrl);\r
-\r
-               LRESULT WndProc(HWND, UINT, WPARAM, LPARAM);\r
-\r
-               const TCHAR* GetVersionString() const {\r
-                       return versionString_;\r
-               }\r
-               WindowPtr& GetMainWindow() {\r
-                       return pWindow_;\r
-               }\r
-               caspar::audio::IAudioManager* GetAudioManager() {\r
-                       return pAudioManager_;\r
-               }\r
-               const tstring& GetMediaFolder() {\r
-                       return videoDir_;\r
-               }\r
-               const tstring& GetTemplateFolder() {\r
-                       return templateDir_;\r
-               }\r
-               const tstring& GetDataFolder() {\r
-                       return dataDir_;\r
-               }\r
-\r
-               ChannelPtr GetChannel(unsigned int deviceIndex);\r
-\r
-               bool FindTemplate(const tstring& templateName, tstring* pExtension = NULL);\r
-               MediaManagerPtr FindMediaFile(const tstring& filename, FileInfo* pFileInfo=0);\r
-               MediaManagerPtr GetColorMediaManager() {\r
-                       if(colorManagerIndex_ != -1)\r
-                               return sourceMediaManagers_[colorManagerIndex_];\r
-                       else \r
-                               return MediaManagerPtr();\r
-               }\r
-\r
-               tstring GetSetting(const tstring& key);\r
-\r
-               template <typename T>\r
-               T GetSetting(const std::wstring& key, T defaultValue)\r
-               {\r
-                       try\r
-                       {\r
-                               std::wstring str = GetSetting(key);\r
-                               if(!str.empty())\r
-                                       return boost::lexical_cast<T>(str);\r
-                       }\r
-                       catch(...){}\r
-                       return defaultValue;\r
-               }\r
-\r
-               utils::Event& GetTerminateEvent() { return terminateEvent_; }\r
-               //utils::Event& GetStopEvent() { return stopEvent_; }\r
-\r
-       private:\r
-               bool Initialize();\r
-               void Destroy();\r
-\r
-               typedef std::map<tstring, tstring> SettingsMap;\r
-\r
-               void CreateVideoChannel(int index, VideoConsumerPtr videoConsumer);\r
-               ControllerPtr CreateTCPController(HKEY);\r
-               ControllerPtr CreateSerialController(HKEY);\r
-\r
-               bool LoadSettings10();\r
-               bool LoadSettings15();\r
-               bool LoadSettings17();\r
-               void ParseCommandline();\r
-\r
-               bool CheckDirectories();\r
-               bool CheckDirectory(tstring& directory);\r
-\r
-               void SetupControllers();\r
-               void OnClientDisconnected(caspar::IO::SocketInfoPtr);\r
-\r
-               WindowPtr                                                       pWindow_;\r
-\r
-               std::vector<ChannelPtr>         videoChannels_;\r
-               std::vector<MediaManagerPtr>    sourceMediaManagers_;\r
-               std::vector<ControllerPtr>                      controllers_;\r
-\r
-               caspar::audio::IAudioManager*           pAudioManager_;\r
-\r
-               //Once the program is initiated, these directories are guaranteed to have a trailing '\'\r
-               tstring         videoDir_;\r
-               tstring         templateDir_;\r
-               tstring         logDir_;\r
-               tstring         dataDir_;\r
-\r
-               int                             logLevel_;\r
-               static const TCHAR*     versionString_;\r
-               \r
-               static const TCHAR*     serviceName_;\r
-               //SERVICE_STATUS_HANDLE   svcStatusHandle_;\r
-               //SERVICE_STATUS                        serviceStatus_;\r
-               //void ServiceReportStatus(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwWaitHint);\r
-\r
-               int                             colorManagerIndex_;\r
-               utils::Event    terminateEvent_;\r
-               //utils::Event  stopEvent_;\r
-\r
-               HINSTANCE hInstance_;\r
-               tstring commandline_;\r
-               SettingsMap settings_;\r
-\r
-       };\r
-\r
-}      //namespace caspar\r
-\r
-#endif //_CASPAR_APPLICATION_H__
\ No newline at end of file
diff --git a/server/CLK/CLKCommand.cpp b/server/CLK/CLKCommand.cpp
deleted file mode 100644 (file)
index 254e866..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\stdafx.h"\r
-#include <algorithm>\r
-#include <locale>\r
-#include "CLKCommand.h"\r
-\r
-namespace caspar {\r
-namespace CLK {\r
-\r
-CLKCommand::CLKCommand() : clockID_(0), command_(CLKInvalidCommand) {\r
-}\r
-\r
-CLKCommand::~CLKCommand() {\r
-}\r
-\r
-const tstring& CLKCommand::GetData() {\r
-       tstringstream dataStream;\r
-\r
-       dataStream << TEXT("<templateData>");   \r
-       dataStream << TEXT("<componentData id=\"command\">");\r
-       dataStream << TEXT("<command id=\"") << commandString_ << TEXT("\" time=\"") << time_ << TEXT("\" clockID=\"") << clockID_ << TEXT("\">");\r
-\r
-       std::vector<tstring>::const_iterator it = parameters_.begin();\r
-       std::vector<tstring>::const_iterator end = parameters_.end();\r
-       for(; it != end; ++it) {\r
-               dataStream << TEXT("<parameter>") << (*it) << TEXT("</parameter>"); \r
-       }\r
-\r
-       dataStream << TEXT("</command>"); \r
-       dataStream << TEXT("</componentData>"); \r
-       dataStream << TEXT("</templateData>");\r
-\r
-       dataCache_ = dataStream.str();\r
-       return dataCache_;\r
-}\r
-\r
-bool CLKCommand::SetCommand() {\r
-       bool bResult = true;\r
-       std::transform(commandString_.begin(), commandString_.end(), commandString_.begin(), toupper);\r
-\r
-       if(commandString_ == TEXT("DUR"))\r
-               command_ = CLKDuration;\r
-       else if(commandString_ == TEXT("NEWDUR"))\r
-               command_ = CLKNewDuration;\r
-       else if(commandString_ == TEXT("NEXTEVENT"))\r
-               command_ = CLKNextEvent;\r
-       else if(commandString_ == TEXT("STOP"))\r
-               command_ = CLKStop;\r
-       else if(commandString_ == TEXT("UNTIL"))\r
-               command_ = CLKUntil;\r
-       else if(commandString_ == TEXT("ADD"))\r
-               command_ = CLKAdd;\r
-       else if(commandString_ == TEXT("SUB"))\r
-               command_ = CLKSub;\r
-       else if(commandString_ == TEXT("RESET"))\r
-               command_ = CLKReset;\r
-       else {\r
-               command_ = CLKInvalidCommand;\r
-               bResult = false;\r
-       }\r
-\r
-       return bResult;\r
-}\r
-\r
-void CLKCommand::Clear() {\r
-       dataCache_.clear();\r
-       commandString_.clear();\r
-       time_.clear();\r
-       command_ = CLKDuration;\r
-       clockID_ = 0;\r
-       parameters_.clear();\r
-}\r
-\r
-}      //namespace CLK\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/CLK/CLKCommand.h b/server/CLK/CLKCommand.h
deleted file mode 100644 (file)
index 20cc543..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include <vector>\r
-#include <string>\r
-\r
-namespace caspar {\r
-namespace CLK {\r
-\r
-class CLKCommand\r
-{\r
-public:\r
-       enum CLKCommands {\r
-               CLKDuration,\r
-               CLKNewDuration,\r
-               CLKNextEvent,\r
-               CLKStop,\r
-               CLKUntil,\r
-               CLKAdd,\r
-               CLKSub,\r
-               CLKReset,\r
-               CLKInvalidCommand\r
-       };\r
-\r
-       CLKCommand();\r
-       virtual ~CLKCommand();\r
-\r
-       bool SetCommand();\r
-       bool NeedsTime() const {\r
-               return !(command_ == CLKNextEvent || command_ == CLKStop);\r
-       }\r
-       void Clear();\r
-       const tstring& GetData();\r
-\r
-       tstring dataCache_;\r
-       tstring commandString_;\r
-       CLKCommands command_;\r
-       int clockID_;\r
-       tstring time_;\r
-       std::vector<tstring> parameters_;\r
-\r
-\r
-\r
-};\r
-\r
-}      //namespace CLK\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/CLK/CLKProtocolStrategy.cpp b/server/CLK/CLKProtocolStrategy.cpp
deleted file mode 100644 (file)
index 40903b3..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-\r
-#include <string>\r
-#include <sstream>\r
-#include <algorithm>\r
-#include "CLKProtocolStrategy.h"\r
-#include "..\CG\CGControl.h"\r
-#include "..\producers\flash\FlashManager.h"\r
-#include "..\application.h"\r
-#include "..\fileinfo.h"\r
-\r
-namespace caspar {\r
-namespace CLK {\r
-\r
-using namespace utils;\r
-\r
-CLKProtocolStrategy::CLKProtocolStrategy() : currentState_(ExpectingNewCommand), bClockLoaded_(false) {\r
-       pChannel_ = GetApplication()->GetChannel(0);\r
-       pCGControl_ = pChannel_->GetCGControl();\r
-}\r
-\r
-CLKProtocolStrategy::~CLKProtocolStrategy() {\r
-}\r
-\r
-void CLKProtocolStrategy::Parse(const TCHAR* pData, int charCount, caspar::IO::ClientInfoPtr pClientInfo) {\r
-       for(int index=0; index < charCount; ++index) {\r
-               if(currentState_ == ExpectingNewCommand)\r
-                       currentCommandString_.str(TEXT(""));\r
-\r
-               TCHAR currentByte = pData[index];\r
-               if(currentByte < 32)\r
-                       currentCommandString_ << TEXT("<") << (int)currentByte << TEXT(">");\r
-               else\r
-                       currentCommandString_ << currentByte;\r
-\r
-               if(currentByte != 0) {\r
-                       switch(currentState_) {\r
-                               case ExpectingNewCommand:\r
-                                       if(currentByte == 1) {\r
-                                               currentState_ = ExpectingCommand;\r
-                                       }\r
-                                       //just throw anything else away\r
-                                       break;\r
-\r
-                               case ExpectingCommand:\r
-                                       if(currentByte == 2) {\r
-                                               if(!currentCommand_.SetCommand()) {\r
-                                                       LOG << TEXT("CLK: Failed to interpret command");\r
-                                                       currentState_ = ExpectingNewCommand;\r
-                                                       currentCommand_.Clear();\r
-                                               }\r
-                                               else {\r
-                                                       currentState_ = ExpectingClockID;\r
-                                               }\r
-                                       }\r
-                                       else\r
-                                               currentCommand_.commandString_ += currentByte;\r
-                                       break;\r
-\r
-                               case ExpectingClockID:\r
-                                       if(currentByte == 2)\r
-                                               currentState_ = currentCommand_.NeedsTime() ? ExpectingTime : ExpectingParameter;\r
-                                       else\r
-                                               currentCommand_.clockID_ = currentByte - TCHAR('0');\r
-                                       break;\r
-\r
-                               case ExpectingTime:\r
-                                       if(currentByte == 2)\r
-                                               currentState_ = ExpectingParameter;\r
-                                       else\r
-                                               currentCommand_.time_ += currentByte;\r
-                                       break;\r
-\r
-                               case ExpectingParameter:\r
-                                       //allocate new parameter\r
-                                       if(currentCommand_.parameters_.size() == 0 || currentByte == 2)\r
-                                               currentCommand_.parameters_.push_back(tstring());\r
-\r
-                                       //add the character to end end of the last parameter\r
-                                       if(currentByte == TEXT('<'))\r
-                                               currentCommand_.parameters_[currentCommand_.parameters_.size()-1] += TEXT("&lt;");\r
-                                       else if(currentByte == TEXT('>'))\r
-                                               currentCommand_.parameters_[currentCommand_.parameters_.size()-1] += TEXT("&gt;");\r
-                                       else if(currentByte == TEXT('\"'))\r
-                                               currentCommand_.parameters_[currentCommand_.parameters_.size()-1] += TEXT("&quot;");\r
-                                       else\r
-                                               currentCommand_.parameters_[currentCommand_.parameters_.size()-1] += currentByte;\r
-\r
-                                       break;\r
-                       }\r
-               }\r
-               else {\r
-                       if(currentState_ == ExpectingCommand) {\r
-                               if(!currentCommand_.SetCommand())\r
-                                       LOG << TEXT("CLK: Failed to interpret command");\r
-                       }\r
-\r
-                       if(currentCommand_.command_ == CLKCommand::CLKReset) {\r
-                               pCGControl_->Clear();\r
-                               bClockLoaded_ = false;\r
-                               \r
-                               LOG << TEXT("CLK: Recieved and executed reset-command");\r
-                       }\r
-                       else if(currentCommand_.command_ != CLKCommand::CLKInvalidCommand) {\r
-                               if(!bClockLoaded_) {\r
-                                       pCGControl_->Add(0, TEXT("hawrysklocka/clock"), true, TEXT(""), currentCommand_.GetData());\r
-                                       bClockLoaded_ = true;\r
-                               }\r
-                               else {\r
-                                       pCGControl_->Update(0, currentCommand_.GetData());\r
-                               }\r
-\r
-                               LOG << LogLevel::Debug << TEXT("CLK: Clockdata sent: ") << currentCommand_.GetData();\r
-                               LOG << TEXT("CLK: Executed valid command: ") << currentCommandString_.str();\r
-                       }\r
-\r
-                       currentState_ = ExpectingNewCommand;\r
-                       currentCommand_.Clear();\r
-               }\r
-       }\r
-}\r
-\r
-}      //namespace CLK\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/CLK/CLKProtocolStrategy.h b/server/CLK/CLKProtocolStrategy.h
deleted file mode 100644 (file)
index 2e05186..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-#include <vector>\r
-\r
-#include "CLKCommand.h"\r
-#include "..\io\ProtocolStrategy.h"\r
-#include "..\channel.h"\r
-#include "..\MediaManager.h"\r
-#include "..\Application.h"\r
-\r
-namespace caspar {\r
-       namespace CG { class ICGControl; }\r
-namespace CLK {\r
-\r
-class CLKProtocolStrategy : public caspar::IO::IProtocolStrategy\r
-{\r
-public:\r
-       CLKProtocolStrategy();\r
-       virtual ~CLKProtocolStrategy();\r
-\r
-       virtual void Parse(const TCHAR* pData, int charCount, caspar::IO::ClientInfoPtr pClientInfo);\r
-       virtual UINT GetCodepage() { return GetApplication()->GetSetting(L"clk-encoding") == L"latin1" ? 28591 : CP_UTF8; } //28591 = ISO 8859-1, Latin1\r
-\r
-private:\r
-       enum ParserState {\r
-               ExpectingNewCommand,\r
-               ExpectingCommand,\r
-               ExpectingClockID,\r
-               ExpectingTime,\r
-               ExpectingParameter\r
-       };\r
-\r
-       ParserState     currentState_;\r
-       CLKCommand currentCommand_;\r
-       tstringstream currentCommandString_;\r
-\r
-       caspar::MediaManagerPtr pFlashManager_;\r
-       caspar::CG::ICGControl* pCGControl_;\r
-       ChannelPtr pChannel_;\r
-\r
-       bool bClockLoaded_;\r
-};\r
-\r
-}      //namespace CLK\r
-}      //namespace caspar\r
diff --git a/server/Channel.cpp b/server/Channel.cpp
deleted file mode 100644 (file)
index af9d931..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "stdAfx.h"\r
-\r
-#include "Application.h"\r
-#include "utils\critsectlock.h"\r
-#include "Channel.h"\r
-#include <algorithm>\r
-\r
-using namespace std;\r
-\r
-namespace caspar {\r
-\r
-using namespace caspar::utils;\r
-\r
-Channel::Channel(int index, VideoConsumerPtr pConsumer) : pConsumer_(pConsumer), index_(index), monitor_(index)\r
-{\r
-}\r
-\r
-Channel::~Channel() {\r
-       Destroy();\r
-}\r
-\r
-bool Channel::Initialize() {\r
-       pConsumer_->GetPlaybackControl()->SetMonitor(&monitor_);\r
-       return true;\r
-}\r
-\r
-void Channel::Destroy() {\r
-       pConsumer_.reset();\r
-}\r
-\r
-const TCHAR* Channel::GetFormatDescription() const \r
-{\r
-       return pConsumer_->GetFormatDescription();\r
-}\r
-\r
-bool Channel::IsPlaybackRunning() const \r
-{\r
-       return pConsumer_->GetPlaybackControl()->IsRunning();\r
-}\r
-\r
-CG::ICGControl* Channel::GetCGControl() {\r
-       return pConsumer_->GetPlaybackControl()->GetCGControl();\r
-}\r
-\r
-////////////////\r
-// LOAD\r
-bool Channel::Load(MediaProducerPtr pFP, bool loop)\r
-{\r
-       return pConsumer_->GetPlaybackControl()->Load(pFP, loop);\r
-}\r
-\r
-////////////////\r
-// LOADBG\r
-bool Channel::LoadBackground(MediaProducerPtr pFP, const TransitionInfo& transitionInfo, bool loop)\r
-{\r
-       return pConsumer_->GetPlaybackControl()->LoadBackground(pFP, transitionInfo, loop);\r
-}\r
-\r
-////////////////\r
-// PLAY\r
-bool Channel::Play()\r
-{\r
-       return pConsumer_->GetPlaybackControl()->Play();\r
-}\r
-\r
-////////////////\r
-// STOP\r
-bool Channel::Stop(bool block)\r
-{\r
-       return pConsumer_->GetPlaybackControl()->StopPlayback(block);\r
-}\r
-\r
-bool Channel::SetVideoFormat(const tstring& strDesiredFrameFormat)\r
-{\r
-       tstring strDesiredFrameFormatUpper = strDesiredFrameFormat;\r
-       tstring strFmtDescUpper = this->pConsumer_->GetFormatDescription();\r
-\r
-       std::transform(strDesiredFrameFormatUpper.begin(), strDesiredFrameFormatUpper.end(), strDesiredFrameFormatUpper.begin(), toupper);\r
-       std::transform(strFmtDescUpper.begin(), strFmtDescUpper.end(), strFmtDescUpper.begin(), toupper);\r
-\r
-       if(strDesiredFrameFormatUpper == strFmtDescUpper)\r
-               return true;\r
-\r
-       bool stopped = this->Stop(true);        \r
-       bool formatSet = stopped && this->pConsumer_->SetVideoFormat(strDesiredFrameFormat);    \r
-       bool cleared = formatSet && this->Clear();\r
-\r
-       return stopped && formatSet && cleared;\r
-}\r
-\r
-\r
-\r
-bool Channel::Clear() \r
-{      \r
-       pConsumer_->GetPlaybackControl()->LoadEmpty();\r
-       return true;\r
-}\r
-\r
-bool Channel::Param(const tstring& str) {\r
-       return pConsumer_->GetPlaybackControl()->Param(str);\r
-}\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/Channel.h b/server/Channel.h
deleted file mode 100644 (file)
index c4437a9..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include "VideoConsumer.h"\r
-#include "MediaProducer.h"\r
-#include "PlaybackControl.h"\r
-#include "producers\composites\TransitionProducer.h"\r
-#include "TransitionInfo.h"\r
-#include "frame\clipinfo.h"\r
-\r
-#include "monitor.h"\r
-\r
-namespace caspar {\r
-\r
-class Channel\r
-{\r
-public:\r
-       explicit Channel(int index, VideoConsumerPtr pVideoConsumer);\r
-       ~Channel();\r
-\r
-       bool Initialize();      //call from app in main-thread\r
-       void Destroy();         //call from app in main-thread\r
-\r
-       const TCHAR* GetFormatDescription() const;\r
-       bool IsPlaybackRunning() const;\r
-\r
-       int GetIndex() const {\r
-               return index_;\r
-       }\r
-\r
-       CG::ICGControl* GetCGControl();\r
-       Monitor& GetMonitor() {\r
-               return monitor_;\r
-       }\r
-\r
-       bool Load(MediaProducerPtr, bool loop=false);                   //call from misc IO threads\r
-       bool LoadBackground(MediaProducerPtr, const TransitionInfo& transitionInfo, bool loop=false);   //call from misc IO threads\r
-       bool Play();    //call from misc IO threads\r
-       bool Stop(bool block = false);  //call from misc IO threads\r
-       bool Param(const tstring& str); //call from misc IO threads\r
-       bool Clear();\r
-       bool SetVideoFormat(const tstring& strDesiredFrameFormat);\r
-\r
-\r
-private:\r
-       Monitor monitor_;\r
-       int index_;\r
-       VideoConsumerPtr        pConsumer_;\r
-};\r
-typedef std::tr1::shared_ptr<Channel> ChannelPtr;\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/Controller.h b/server/Controller.h
deleted file mode 100644 (file)
index 1db59c4..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include "io\protocolStrategy.h"\r
-\r
-namespace caspar {\r
-\r
-class IController {\r
-public:\r
-       virtual ~IController() {\r
-       }\r
-\r
-       virtual bool Start() = 0;\r
-       virtual void Stop() = 0;\r
-       virtual void SetProtocolStrategy(caspar::IO::ProtocolStrategyPtr) = 0;\r
-};\r
-typedef std::tr1::shared_ptr<IController> ControllerPtr;\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/FileInfo.h b/server/FileInfo.h
deleted file mode 100644 (file)
index 1976b02..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef __FILEINFO_H__\r
-#define __FILEINFO_H__\r
-\r
-namespace caspar {\r
-\r
-class FileInfo\r
-{\r
-public:\r
-       FileInfo() : length(0), resolution(0), size(0), filetype(TEXT("")), filename(TEXT("")), encoding(TEXT("")), type(TEXT(""))\r
-       {}\r
-       tstring filename;\r
-       tstring filetype;\r
-       tstring encoding;\r
-       tstring type;\r
-       int length;\r
-       int resolution;\r
-       unsigned long long size;\r
-};\r
-\r
-}      //namespace caspar\r
-\r
-#endif __FILEINFO_H__
\ No newline at end of file
diff --git a/server/Main.cpp b/server/Main.cpp
deleted file mode 100644 (file)
index c6e0c9f..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "StdAfx.h"\r
-#include "Application.h"\r
-#include "utils\FileOutputStream.h"\r
-#include <tbb/task_scheduler_init.h>\r
-#include <tbb/task_scheduler_observer.h>\r
-#include "utils\Win32Exception.h"\r
-\r
-//the easy way to make it possible to forward WndProc messages into the application-object\r
-caspar::Application* pGlobal_Application = 0;\r
-\r
-namespace caspar {\r
-       Application* GetApplication()\r
-       {\r
-               return pGlobal_Application;\r
-       }\r
-}\r
-\r
-class win32_handler_tbb_installer : public tbb::task_scheduler_observer\r
-{\r
-public:\r
-       win32_handler_tbb_installer()   {observe(true);}\r
-       void on_scheduler_entry(bool is_worker) \r
-       {\r
-               Win32Exception::InstallHandler();\r
-       } \r
-};\r
-\r
-int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int)\r
-{\r
-       int returnValue = 0;\r
-       tstring commandline(lpCmdLine);\r
-       \r
-       win32_handler_tbb_installer win32_handler_tbb_installer;\r
-       tbb::task_scheduler_init task_scheduler(max(2, tbb::task_scheduler_init::default_num_threads()));\r
-       \r
-       //if(commandline == TEXT("install"))\r
-       //{\r
-       //      caspar::Application::InstallService();\r
-       //}\r
-       //else if(commandline == TEXT("uninstall"))\r
-       //{\r
-       //      caspar::Application::UninstallService();\r
-       //}\r
-       //else {\r
-               try \r
-               {\r
-                       caspar::utils::OutputStreamPtr pOutputStream(new caspar::utils::FileOutputStream(TEXT("startup.log")));\r
-                       caspar::utils::Logger::GetInstance().SetOutputStream(pOutputStream);\r
-                       caspar::utils::Logger::GetInstance().SetTimestamp(true);\r
-\r
-                       caspar::Application app(lpCmdLine, hInstance);\r
-                       pGlobal_Application = &app;\r
-\r
-                       //if(commandline.find(TEXT("service")) != tstring::npos)\r
-                       //      app.RunAsService();\r
-                       //else\r
-                               returnValue = app.RunAsWindow();\r
-               }\r
-               catch(const std::exception& ex)\r
-               {\r
-                       LOG << caspar::utils::LogLevel::Critical << TEXT("UNHANDLED EXCEPTION in main thread. Message: ") << ex.what();\r
-               }\r
-//     }\r
-\r
-       return returnValue;\r
-}\r
diff --git a/server/MediaController.h b/server/MediaController.h
deleted file mode 100644 (file)
index 46ea95f..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_MEDIACONTROLLER_H__\r
-#define _CASPAR_MEDIACONTROLLER_H__\r
-\r
-namespace caspar {\r
-\r
-class IMediaController\r
-{\r
-       IMediaController(const IMediaController&);\r
-       IMediaController& operator=(const IMediaController&);\r
-\r
-protected:\r
-       IMediaController() {}\r
-\r
-public:\r
-       virtual ~IMediaController() {}\r
-\r
-};\r
-\r
-}      //namespace caspar\r
-\r
-#endif //_CASPAR_MEDIACONTROLLER_H__
\ No newline at end of file
diff --git a/server/MediaManager.h b/server/MediaManager.h
deleted file mode 100644 (file)
index c17c4c4..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include <string>\r
-#include <vector>\r
-#include "fileinfo.h"\r
-\r
-namespace caspar {\r
-\r
-class FileInfo;\r
-\r
-class MediaProducer;\r
-typedef std::tr1::shared_ptr<MediaProducer> MediaProducerPtr;\r
-\r
-class IMediaManager\r
-{\r
-public:\r
-\r
-       IMediaManager()\r
-       {}\r
-\r
-       virtual ~IMediaManager()\r
-       {}\r
-       virtual MediaProducerPtr CreateProducer(const tstring& filename) = 0;\r
-\r
-       unsigned short GetSupportedExtensions(const std::vector<tstring>*& extensions)\r
-       {\r
-               extensions = &_extensions;\r
-               return (unsigned short)_extensions.size();\r
-       }\r
-\r
-       virtual bool getFileInfo(FileInfo* pFileInfo) = 0;\r
-protected:\r
-       std::vector<tstring>    _extensions;\r
-};\r
-typedef std::tr1::shared_ptr<IMediaManager> MediaManagerPtr;\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/MediaProducer.h b/server/MediaProducer.h
deleted file mode 100644 (file)
index 9462f7b..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-namespace caspar {\r
-\r
-class IMediaController;\r
-\r
-class MediaProducer;\r
-typedef std::tr1::shared_ptr<MediaProducer> MediaProducerPtr;\r
-\r
-class MediaProducer\r
-{\r
-       MediaProducer(const MediaProducer&);\r
-       MediaProducer& operator=(const MediaProducer&);\r
-\r
-public:\r
-       MediaProducer() : bLoop_(false)\r
-       {}\r
-       virtual ~MediaProducer()\r
-       {}\r
-\r
-       virtual IMediaController* QueryController(const tstring&) = 0;\r
-\r
-       virtual bool Param(const tstring&) { return false; }\r
-       virtual bool IsEmpty() const { return false; }\r
-\r
-       virtual MediaProducerPtr GetFollowingProducer() {\r
-               return MediaProducerPtr();\r
-       }\r
-\r
-       virtual void SetLoop(bool bLoop) {\r
-               bLoop_ = bLoop;\r
-       }\r
-       bool GetLoop() {\r
-               return bLoop_;\r
-       }\r
-\r
-private:\r
-       bool bLoop_;\r
-};\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/MediaProducerInfo.h b/server/MediaProducerInfo.h
deleted file mode 100644 (file)
index a6edccb..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-namespace caspar {\r
-\r
-struct MediaProducerInfo {\r
-\r
-       MediaProducerInfo() : HaveAudio(false), HaveVideo(false), AudioSamplesPerSec(0), AudioChannels(0), BitsPerAudioSample(0)\r
-       {}\r
-\r
-       bool HaveAudio;\r
-       bool HaveVideo;\r
-\r
-       unsigned int AudioSamplesPerSec;\r
-       unsigned short AudioChannels;\r
-       unsigned short BitsPerAudioSample;\r
-};\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/Monitor.cpp b/server/Monitor.cpp
deleted file mode 100644 (file)
index 12a459f..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "stdAfx.h"\r
-\r
-#include "Monitor.h"\r
-#include "io/AsyncEventServer.h"\r
-#include <algorithm>\r
-\r
-namespace caspar {\r
-\r
-using namespace std;\r
-\r
-const int Monitor::ResponseCodeNoParam = 102;\r
-const int Monitor::ResponseCodeWithParam = 101;\r
-\r
-Monitor::MonitorList Monitor::monitors_;\r
-\r
-Monitor::Monitor(int channelIndex) : channelIndex_(channelIndex) {\r
-       monitors_.push_back(this);\r
-}\r
-Monitor::~Monitor() {\r
-       monitors_.remove(this);\r
-}\r
-\r
-void Monitor::ClearListener(const caspar::IO::ClientInfoPtr& pClient) {\r
-       MonitorList::iterator it = monitors_.begin();\r
-       MonitorList::iterator end = monitors_.end();\r
-\r
-       for(; it != end; ++it) {\r
-               (*it)->RemoveListener(pClient);\r
-       }\r
-}\r
-\r
-void Monitor::Inform(MonitorEventType type, const tstring& parameter, MonitorParameterFormatter formatter)\r
-{\r
-       taskSeraializer_.enqueue(bind(&Monitor::internal_Inform, this, type, parameter, formatter));\r
-}\r
-\r
-void Monitor::internal_Inform(MonitorEventType type, const tstring parameter, MonitorParameterFormatter formatter)\r
-{\r
-       //lock the list and make a local copy\r
-       ListenerList localListeners;\r
-       {\r
-               Lock lock(*this);\r
-               localListeners = listeners_;\r
-       }\r
-\r
-       if(localListeners.size() == 0)\r
-               return;\r
-\r
-       tstringstream msg;\r
-       int code = ResponseCodeNoParam;\r
-       if(parameter.size() > 0)\r
-               code = ResponseCodeWithParam;\r
-\r
-       msg << code << TEXT(' ');\r
-\r
-       FormatInfo(msg, type);\r
-\r
-       if(parameter.size() > 0) {\r
-               if(formatter)\r
-                       msg << formatter(parameter) << TEXT("\r\n");\r
-               else\r
-                       msg << parameter << TEXT("\r\n");\r
-       }\r
-\r
-       tstring message(msg.str());\r
-\r
-       //iterate over the local copy\r
-       ListenerList::iterator it = localListeners.begin();\r
-       ListenerList::iterator end = localListeners.end();\r
-       for(; it != end; ++it) {\r
-               (*it)->Send(message);\r
-       }\r
-\r
-//     LOG << utils::LogLevel::Debug << TEXT("MONITOR: ") << msg.str();\r
-}\r
-\r
-void Monitor::FormatInfo(tstringstream& msg, MonitorEventType type) \r
-{\r
-       switch(type) \r
-       {\r
-       case LOADBG:\r
-               msg << TEXT("LOADBG");\r
-               break;\r
-       case LOAD:\r
-               msg << TEXT("LOAD");\r
-               break;\r
-       case PLAY:\r
-               msg << TEXT("PLAY");\r
-               break;\r
-       case STOPPED:\r
-               msg << TEXT("STOP");\r
-               break;\r
-       case CLEAR:\r
-               msg << TEXT("CLEAR");\r
-               break;\r
-\r
-       case CG_ADD:\r
-       case CG_CLEAR:\r
-       case CG_PLAY:\r
-       case CG_STOP:\r
-       case CG_NEXT:\r
-       case CG_REMOVE:\r
-       case CG_UPDATE:\r
-       case CG_INVOKE:\r
-               msg << TEXT("CG");\r
-               break;\r
-\r
-       default:\r
-               break;\r
-       }\r
-\r
-       if(channelIndex_ > 0)\r
-               msg << TEXT(' ') << channelIndex_;\r
-\r
-       switch(type)\r
-       {\r
-       case CG_ADD:\r
-               msg << TEXT(" ADD");\r
-               break;\r
-       case CG_CLEAR:\r
-               msg << TEXT(" CLEAR");\r
-               break;\r
-       case CG_PLAY:\r
-               msg << TEXT(" PLAY");\r
-               break;\r
-       case CG_STOP:\r
-               msg << TEXT(" STOP");\r
-               break;\r
-       case CG_NEXT:\r
-               msg << TEXT(" NEXT");\r
-               break;\r
-       case CG_REMOVE:\r
-               msg << TEXT(" REMOVE");\r
-               break;\r
-       case CG_UPDATE:\r
-               msg << TEXT(" UPDATE");\r
-               break;\r
-       case CG_INVOKE:\r
-               msg << TEXT(" INVOKE");\r
-               break;\r
-       default:\r
-               break;\r
-       }\r
-       msg << TEXT("\r\n");\r
-}\r
-\r
-void Monitor::AddListener(caspar::IO::ClientInfoPtr& pClient) {\r
-       Lock lock(*this);\r
-       ListenerList::iterator it = std::find(listeners_.begin(), listeners_.end(), pClient);\r
-       if(it == listeners_.end()) {\r
-               LOG << utils::LogLevel::Debug << TEXT("Added a client as listener");\r
-               listeners_.push_back(pClient);\r
-       }\r
-}\r
-\r
-void Monitor::RemoveListener(const caspar::IO::ClientInfoPtr& pClient) {\r
-       Lock lock(*this);\r
-       listeners_.remove(pClient);\r
-}\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/Monitor.h b/server/Monitor.h
deleted file mode 100644 (file)
index 062b05f..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include "utils/noncopyable.hpp"\r
-#include "utils/lockable.h"\r
-#include "io/clientinfo.h"\r
-#include <list>\r
-#include <functional>\r
-\r
-#include "utils/functiontask.hpp"\r
-\r
-namespace caspar {\r
-\r
-typedef std::function<tstring(const tstring&)> MonitorParameterFormatter;\r
-\r
-enum MonitorEventType\r
-{\r
-       LOADBG,\r
-       LOAD,\r
-       PLAY,\r
-       STOPPED,\r
-       CLEAR,\r
-\r
-       CG_ADD,\r
-       CG_CLEAR,\r
-       CG_PLAY,\r
-       CG_STOP,\r
-       CG_NEXT,\r
-       CG_REMOVE,\r
-       CG_UPDATE,\r
-       CG_INVOKE\r
-};\r
-\r
-class Monitor : private utils::LockableObject, private utils::Noncopyable\r
-{\r
-public:\r
-       static const int ResponseCodeNoParam;\r
-       static const int ResponseCodeWithParam;\r
-\r
-       //removes the client from all monitors\r
-       static void ClearListener(const caspar::IO::ClientInfoPtr& pClient);\r
-\r
-       explicit Monitor(int channelIndex);\r
-       virtual ~Monitor();\r
-\r
-       void Inform(MonitorEventType type, const tstring& parameter = TEXT(""), MonitorParameterFormatter formatter = 0);\r
-\r
-       void AddListener(caspar::IO::ClientInfoPtr& pClient);\r
-       void RemoveListener(const caspar::IO::ClientInfoPtr& pClient);\r
-\r
-private:\r
-       void internal_Inform(MonitorEventType type, const tstring parameter, MonitorParameterFormatter formatter);\r
-\r
-       void FormatInfo(tstringstream& sstream, MonitorEventType type);\r
-\r
-       int channelIndex_;\r
-       typedef std::list<caspar::IO::ClientInfoPtr> ListenerList;\r
-       typedef std::list<Monitor*> MonitorList;\r
-\r
-       function_task_serializer taskSeraializer_;\r
-\r
-       ListenerList listeners_;\r
-       static MonitorList monitors_;\r
-};\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/PlaybackControl.h b/server/PlaybackControl.h
deleted file mode 100644 (file)
index 5f15f4c..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include "MediaProducer.h"\r
-#include "TransitionInfo.h"\r
-\r
-namespace caspar\r
-{\r
-       namespace CG\r
-       {\r
-               class ICGControl;\r
-       }\r
-\r
-       class Monitor;\r
-\r
-       class IPlaybackControl\r
-       {\r
-               IPlaybackControl(IPlaybackControl&);\r
-               const IPlaybackControl& operator=(const IPlaybackControl&);\r
-\r
-       public:\r
-               IPlaybackControl() {}\r
-               virtual ~IPlaybackControl() {}\r
-\r
-               virtual void SetMonitor(Monitor* pMonitor) = 0;\r
-\r
-               virtual bool Load(MediaProducerPtr pFP, bool loop) = 0;\r
-               virtual bool LoadBackground(MediaProducerPtr pFP, const TransitionInfo& transitionInfo, bool loop) = 0;\r
-               virtual bool Play() = 0;\r
-               virtual void LoadEmpty() = 0;\r
-               //virtual bool Pause() = 0;\r
-               virtual bool StopPlayback(bool block = false) = 0;\r
-               virtual bool IsRunning() = 0;\r
-               virtual bool Param(const tstring& param) = 0;\r
-\r
-               virtual CG::ICGControl* GetCGControl() = 0;\r
-       };\r
-\r
-       typedef std::tr1::shared_ptr<IPlaybackControl> PlaybackControlPtr;\r
-}
\ No newline at end of file
diff --git a/server/Resource.h b/server/Resource.h
deleted file mode 100644 (file)
index 4693e04..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-//{{NO_DEPENDENCIES}}\r
-// Microsoft Visual C++ generated include file.\r
-// Used by Server.rc\r
-//\r
-#define IDI_ICON1                       101\r
-\r
-// Next default values for new objects\r
-// \r
-#ifdef APSTUDIO_INVOKED\r
-#ifndef APSTUDIO_READONLY_SYMBOLS\r
-#define _APS_NEXT_RESOURCE_VALUE        102\r
-#define _APS_NEXT_COMMAND_VALUE         40001\r
-#define _APS_NEXT_CONTROL_VALUE         1001\r
-#define _APS_NEXT_SYMED_VALUE           101\r
-#endif\r
-#endif\r
diff --git a/server/Server.vcproj b/server/Server.vcproj
deleted file mode 100644 (file)
index 3dfce93..0000000
+++ /dev/null
@@ -1,3575 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>\r
-<VisualStudioProject\r
-       ProjectType="Visual C++"\r
-       Version="9,00"\r
-       Name="Server"\r
-       ProjectGUID="{79388C20-6499-4BF6-B8B9-D8C33D7D4DDD}"\r
-       RootNamespace="Server"\r
-       Keyword="Win32Proj"\r
-       TargetFrameworkVersion="131072"\r
-       >\r
-       <Platforms>\r
-               <Platform\r
-                       Name="Win32"\r
-               />\r
-       </Platforms>\r
-       <ToolFiles>\r
-       </ToolFiles>\r
-       <Configurations>\r
-               <Configuration\r
-                       Name="Debug|Win32"\r
-                       OutputDirectory="$(ProjectDir)build\"\r
-                       IntermediateDirectory="debug"\r
-                       ConfigurationType="1"\r
-                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"\r
-                       CharacterSet="1"\r
-                       >\r
-                       <Tool\r
-                               Name="VCPreBuildEventTool"\r
-                               CommandLine=""\r
-                       />\r
-                       <Tool\r
-                               Name="VCCustomBuildTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCXMLDataGeneratorTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCWebServiceProxyGeneratorTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCMIDLTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCCLCompilerTool"\r
-                               Optimization="0"\r
-                               AdditionalIncludeDirectories=""\r
-                               MinimalRebuild="true"\r
-                               ExceptionHandling="2"\r
-                               BasicRuntimeChecks="3"\r
-                               SmallerTypeCheck="true"\r
-                               RuntimeLibrary="3"\r
-                               EnableEnhancedInstructionSet="0"\r
-                               RuntimeTypeInfo="true"\r
-                               UsePrecompiledHeader="2"\r
-                               BrowseInformation="1"\r
-                               WarningLevel="3"\r
-                               Detect64BitPortabilityProblems="false"\r
-                               DebugInformationFormat="4"\r
-                       />\r
-                       <Tool\r
-                               Name="VCManagedResourceCompilerTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCResourceCompilerTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCPreLinkEventTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCLinkerTool"\r
-                               AdditionalDependencies="GLee.lib Dxguid.lib Dsound.lib Winmm.lib Ws2_32.lib BlueVelvet3_d.lib avformat-51.lib avcodec-51.lib avutil-49.lib"\r
-                               OutputFile="$(OutDir)/casparcg_bluefish.exe"\r
-                               Version=""\r
-                               LinkIncremental="2"\r
-                               AdditionalLibraryDirectories=""\r
-                               IgnoreDefaultLibraryNames="LIBC.LIB"\r
-                               GenerateDebugInformation="true"\r
-                               ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
-                               GenerateMapFile="true"\r
-                               MapFileName=""\r
-                               SubSystem="2"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
-                               TargetMachine="1"\r
-                       />\r
-                       <Tool\r
-                               Name="VCALinkTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCManifestTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCXDCMakeTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCBscMakeTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCFxCopTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCAppVerifierTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCPostBuildEventTool"\r
-                               CommandLine=""\r
-                       />\r
-               </Configuration>\r
-               <Configuration\r
-                       Name="Release|Win32"\r
-                       OutputDirectory="$(ProjectDir)build\"\r
-                       IntermediateDirectory="release"\r
-                       ConfigurationType="1"\r
-                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"\r
-                       CharacterSet="1"\r
-                       >\r
-                       <Tool\r
-                               Name="VCPreBuildEventTool"\r
-                               CommandLine=""\r
-                       />\r
-                       <Tool\r
-                               Name="VCCustomBuildTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCXMLDataGeneratorTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCWebServiceProxyGeneratorTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCMIDLTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCCLCompilerTool"\r
-                               Optimization="2"\r
-                               InlineFunctionExpansion="2"\r
-                               EnableIntrinsicFunctions="true"\r
-                               FavorSizeOrSpeed="1"\r
-                               AdditionalIncludeDirectories=""\r
-                               ExceptionHandling="2"\r
-                               RuntimeLibrary="2"\r
-                               EnableEnhancedInstructionSet="2"\r
-                               RuntimeTypeInfo="true"\r
-                               UsePrecompiledHeader="2"\r
-                               WarningLevel="3"\r
-                               Detect64BitPortabilityProblems="false"\r
-                               DebugInformationFormat="3"\r
-                       />\r
-                       <Tool\r
-                               Name="VCManagedResourceCompilerTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCResourceCompilerTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCPreLinkEventTool"\r
-                               CommandLine=""\r
-                       />\r
-                       <Tool\r
-                               Name="VCLinkerTool"\r
-                               AdditionalDependencies="Dxguid.lib Dsound.lib Winmm.lib Ws2_32.lib Bluevelvet3.lib avformat-51.lib avcodec-51.lib avutil-49.lib tbb.lib Glee.lib"\r
-                               OutputFile="$(OutDir)/casparcg_bluefish.exe"\r
-                               Version=""\r
-                               LinkIncremental="1"\r
-                               AdditionalLibraryDirectories=""\r
-                               IgnoreDefaultLibraryNames="LIBC.lib"\r
-                               GenerateDebugInformation="true"\r
-                               GenerateMapFile="true"\r
-                               MapExports="true"\r
-                               SubSystem="2"\r
-                               OptimizeReferences="0"\r
-                               EnableCOMDATFolding="0"\r
-                               RandomizedBaseAddress="1"\r
-                               FixedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
-                               TargetMachine="1"\r
-                       />\r
-                       <Tool\r
-                               Name="VCALinkTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCManifestTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCXDCMakeTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCBscMakeTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCFxCopTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCAppVerifierTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCPostBuildEventTool"\r
-                               CommandLine=""\r
-                       />\r
-               </Configuration>\r
-               <Configuration\r
-                       Name="no bluefish|Win32"\r
-                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
-                       IntermediateDirectory="$(ConfigurationName)"\r
-                       ConfigurationType="1"\r
-                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"\r
-                       CharacterSet="1"\r
-                       >\r
-                       <Tool\r
-                               Name="VCPreBuildEventTool"\r
-                               CommandLine=""\r
-                       />\r
-                       <Tool\r
-                               Name="VCCustomBuildTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCXMLDataGeneratorTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCWebServiceProxyGeneratorTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCMIDLTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCCLCompilerTool"\r
-                               Optimization="0"\r
-                               InlineFunctionExpansion="2"\r
-                               EnableIntrinsicFunctions="true"\r
-                               FavorSizeOrSpeed="1"\r
-                               AdditionalIncludeDirectories=""\r
-                               PreprocessorDefinitions="DISABLE_BLUEFISH"\r
-                               ExceptionHandling="2"\r
-                               RuntimeLibrary="2"\r
-                               EnableEnhancedInstructionSet="2"\r
-                               RuntimeTypeInfo="true"\r
-                               UsePrecompiledHeader="2"\r
-                               WarningLevel="3"\r
-                               Detect64BitPortabilityProblems="false"\r
-                               DebugInformationFormat="3"\r
-                       />\r
-                       <Tool\r
-                               Name="VCManagedResourceCompilerTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCResourceCompilerTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCPreLinkEventTool"\r
-                               CommandLine=""\r
-                       />\r
-                       <Tool\r
-                               Name="VCLinkerTool"\r
-                               AdditionalDependencies="Dxguid.lib Dsound.lib Winmm.lib Ws2_32.lib avformat-51.lib avcodec-51.lib avutil-49.lib GLee.lib tbb.lib"\r
-                               OutputFile="$(OutDir)/casparcg.exe"\r
-                               Version=""\r
-                               LinkIncremental="1"\r
-                               AdditionalLibraryDirectories=""\r
-                               IgnoreDefaultLibraryNames="LIBC.lib"\r
-                               GenerateDebugInformation="true"\r
-                               GenerateMapFile="true"\r
-                               MapExports="true"\r
-                               SubSystem="2"\r
-                               OptimizeReferences="0"\r
-                               EnableCOMDATFolding="0"\r
-                               RandomizedBaseAddress="1"\r
-                               FixedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
-                               TargetMachine="1"\r
-                       />\r
-                       <Tool\r
-                               Name="VCALinkTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCManifestTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCXDCMakeTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCBscMakeTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCFxCopTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCAppVerifierTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCPostBuildEventTool"\r
-                               CommandLine=""\r
-                       />\r
-               </Configuration>\r
-               <Configuration\r
-                       Name="SVT special|Win32"\r
-                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
-                       IntermediateDirectory="$(ConfigurationName)"\r
-                       ConfigurationType="1"\r
-                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"\r
-                       CharacterSet="1"\r
-                       >\r
-                       <Tool\r
-                               Name="VCPreBuildEventTool"\r
-                               CommandLine=""\r
-                       />\r
-                       <Tool\r
-                               Name="VCCustomBuildTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCXMLDataGeneratorTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCWebServiceProxyGeneratorTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCMIDLTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCCLCompilerTool"\r
-                               Optimization="0"\r
-                               InlineFunctionExpansion="2"\r
-                               EnableIntrinsicFunctions="true"\r
-                               FavorSizeOrSpeed="1"\r
-                               AdditionalIncludeDirectories=""\r
-                               PreprocessorDefinitions="ENABLE_SVT"\r
-                               ExceptionHandling="2"\r
-                               RuntimeLibrary="2"\r
-                               EnableEnhancedInstructionSet="2"\r
-                               RuntimeTypeInfo="true"\r
-                               UsePrecompiledHeader="2"\r
-                               WarningLevel="3"\r
-                               Detect64BitPortabilityProblems="false"\r
-                               DebugInformationFormat="3"\r
-                       />\r
-                       <Tool\r
-                               Name="VCManagedResourceCompilerTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCResourceCompilerTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCPreLinkEventTool"\r
-                               CommandLine=""\r
-                       />\r
-                       <Tool\r
-                               Name="VCLinkerTool"\r
-                               AdditionalDependencies="Dxguid.lib Dsound.lib Winmm.lib Ws2_32.lib Bluevelvet3.lib avformat-51.lib avcodec-51.lib avutil-49.lib tbb.lib Glee.lib"\r
-                               OutputFile="$(OutDir)/casparcg_bluefish.exe"\r
-                               Version=""\r
-                               LinkIncremental="1"\r
-                               AdditionalLibraryDirectories=""\r
-                               IgnoreDefaultLibraryNames="LIBC.lib"\r
-                               GenerateDebugInformation="true"\r
-                               GenerateMapFile="true"\r
-                               MapExports="true"\r
-                               SubSystem="2"\r
-                               OptimizeReferences="0"\r
-                               EnableCOMDATFolding="0"\r
-                               RandomizedBaseAddress="1"\r
-                               FixedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
-                               TargetMachine="1"\r
-                       />\r
-                       <Tool\r
-                               Name="VCALinkTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCManifestTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCXDCMakeTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCBscMakeTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCFxCopTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCAppVerifierTool"\r
-                       />\r
-                       <Tool\r
-                               Name="VCPostBuildEventTool"\r
-                               CommandLine=""\r
-                       />\r
-               </Configuration>\r
-       </Configurations>\r
-       <References>\r
-       </References>\r
-       <Files>\r
-               <Filter\r
-                       Name="resources"\r
-                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"\r
-                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"\r
-                       >\r
-                       <File\r
-                               RelativePath=".\resources\Icon2.ico"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\resources\Server.rc"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\resources\server.rc2"\r
-                               >\r
-                       </File>\r
-               </Filter>\r
-               <Filter\r
-                       Name="utils"\r
-                       >\r
-                       <File\r
-                               RelativePath=".\Utils\Allocator.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\utils\BitmapHolder.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\utils\BitmapHolder.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\CommandQueue.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\utils\CPUID.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               UsePrecompiledHeader="0"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               UsePrecompiledHeader="0"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               UsePrecompiledHeader="0"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               UsePrecompiledHeader="0"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\utils\CPUID.hpp"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\CritSectLock.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\DataBuffer.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\utils\DCWrapper.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\utils\DCWrapper.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\Event.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\Event.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\FileExists.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               UsePrecompiledHeader="2"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               UsePrecompiledHeader="2"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               UsePrecompiledHeader="2"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               UsePrecompiledHeader="2"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\FileExists.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\FileInputStream.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\FileInputStream.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\FileOutputStream.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               UsePrecompiledHeader="2"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               UsePrecompiledHeader="2"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               UsePrecompiledHeader="2"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               UsePrecompiledHeader="2"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\FileOutputStream.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\FindWrapper.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               UsePrecompiledHeader="2"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               UsePrecompiledHeader="2"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               UsePrecompiledHeader="2"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               UsePrecompiledHeader="2"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\FindWrapper.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\ID.cpp"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\ID.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\InputStream.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\Lockable.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\utils\LogException.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\utils\LogException.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\Logger.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\Logger.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\utils\LogLevel.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\utils\LogStream.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\utils\LogStream.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\utils\Noncopyable.hpp"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\OutputStream.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\PixmapData.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\utils\Process.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\utils\Process.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\Runnable.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\Semaphore.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\Semaphore.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\utils\TaskQueue.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\Thread.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\Thread.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\utils\Types.hpp"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\Win32Exception.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\Utils\Win32Exception.h"\r
-                               >\r
-                       </File>\r
-                       <Filter\r
-                               Name="image"\r
-                               >\r
-                               <File\r
-                                       RelativePath=".\Utils\image\Clear.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\Utils\image\Clear.hpp"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\Utils\image\Copy.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\Utils\image\Copy.hpp"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\utils\image\CopyField.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\utils\image\CopyField.hpp"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\utils\image\Image.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\utils\image\Image.hpp"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\utils\image\Lerp.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\utils\image\Lerp.hpp"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\utils\image\Over.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\utils\image\Over.hpp"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\utils\image\Premultiply.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\utils\image\Premultiply.hpp"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\utils\image\Shuffle.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="2"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\utils\image\Shuffle.hpp"\r
-                                       >\r
-                               </File>\r
-                       </Filter>\r
-               </Filter>\r
-               <Filter\r
-                       Name="io"\r
-                       >\r
-                       <File\r
-                               RelativePath=".\IO\AsyncEventServer.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\IO\AsyncEventServer.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\IO\ClientInfo.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\IO\ProtocolStrategy.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\IO\SerialPort.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\IO\SerialPort.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\IO\SocketInfo.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\IO\SocketInfo.h"\r
-                               >\r
-                       </File>\r
-               </Filter>\r
-               <Filter\r
-                       Name="consumers"\r
-                       >\r
-                       <Filter\r
-                               Name="bluefish"\r
-                               >\r
-                               <File\r
-                                       RelativePath=".\consumers\bluefish\BluefishException.h"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCustomBuildTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\consumers\bluefish\BluefishFrameManager.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\stdafx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\stdafx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\stdafx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\stdafx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\consumers\bluefish\BluefishFrameManager.h"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCustomBuildTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\consumers\bluefish\BluefishPlaybackStrategy.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\stdafx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\stdafx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\stdafx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\stdafx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\consumers\bluefish\BluefishPlaybackStrategy.h"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCustomBuildTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\consumers\bluefish\BlueFishVideoConsumer.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\stdafx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\stdafx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\stdafx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\stdafx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\consumers\bluefish\BlueFishVideoConsumer.h"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCustomBuildTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                       </Filter>\r
-                       <Filter\r
-                               Name="gdi"\r
-                               >\r
-                               <File\r
-                                       RelativePath=".\consumers\GDI\GDIVideoConsumer.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\consumers\GDI\GDIVideoConsumer.h"\r
-                                       >\r
-                               </File>\r
-                       </Filter>\r
-                       <Filter\r
-                               Name="ogl"\r
-                               >\r
-                               <File\r
-                                       RelativePath=".\Consumers\OGL\OGLVideoConsumer.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\Consumers\OGL\OGLVideoConsumer.h"\r
-                                       >\r
-                               </File>\r
-                       </Filter>\r
-                       <Filter\r
-                               Name="audio"\r
-                               >\r
-                               <File\r
-                                       RelativePath=".\consumers\Audio\AudioConsumer.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\consumers\Audio\AudioConsumer.h"\r
-                                       >\r
-                               </File>\r
-                       </Filter>\r
-                       <Filter\r
-                               Name="decklink"\r
-                               >\r
-                               <File\r
-                                       RelativePath=".\consumers\decklink\DeckLinkAPI.idl"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCMIDLTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCMIDLTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCMIDLTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCMIDLTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\consumers\decklink\DeckLinkAPI_h.h"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\consumers\decklink\DeckLinkAPI_i.c"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="0"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="0"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="0"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="0"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\consumers\decklink\DeckLinkAPI_v7_1.idl"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCMIDLTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCMIDLTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCMIDLTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCMIDLTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\consumers\decklink\DeckLinkAPI_v7_3.idl"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCMIDLTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCMIDLTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCMIDLTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCMIDLTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\consumers\decklink\DecklinkVideoConsumer.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\consumers\decklink\DecklinkVideoConsumer.h"\r
-                                       >\r
-                               </File>\r
-                       </Filter>\r
-               </Filter>\r
-               <Filter\r
-                       Name="cg"\r
-                       >\r
-                       <File\r
-                               RelativePath=".\cg\CGControl.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\cg\FlashCGProxy.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\cg\FlashCGProxy.h"\r
-                               >\r
-                       </File>\r
-               </Filter>\r
-               <Filter\r
-                       Name="producers"\r
-                       >\r
-                       <Filter\r
-                               Name="ffmpeg"\r
-                               >\r
-                               <File\r
-                                       RelativePath=".\Producers\ffmpeg\FFmpegManager.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\Producers\ffmpeg\FFmpegManager.h"\r
-                                       >\r
-                               </File>\r
-                       </Filter>\r
-                       <Filter\r
-                               Name="flash"\r
-                               >\r
-                               <File\r
-                                       RelativePath=".\Producers\flash\AxFlash.h"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\producers\flash\CTManager.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\producers\flash\CTManager.h"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\Producers\flash\Flash9e.IDL"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCMIDLTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCMIDLTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCMIDLTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCMIDLTool"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\Producers\flash\Flash9e_i.c"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="0"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="0"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="0"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       UsePrecompiledHeader="0"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\Producers\flash\FlashAxContainer.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\Producers\flash\FlashAxContainer.h"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\Producers\flash\FlashCommand.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\Producers\flash\FlashCommand.h"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\Producers\flash\FlashCommandQueue.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\Producers\flash\FlashCommandQueue.h"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\producers\flash\FlashManager.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\producers\flash\FlashManager.h"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\Producers\flash\FlashProducer.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\Producers\flash\FlashProducer.h"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\Producers\flash\TimerHelper.h"\r
-                                       >\r
-                               </File>\r
-                       </Filter>\r
-                       <Filter\r
-                               Name="color"\r
-                               >\r
-                               <File\r
-                                       RelativePath=".\producers\color\ColorManager.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\producers\color\ColorManager.h"\r
-                                       >\r
-                               </File>\r
-                       </Filter>\r
-                       <Filter\r
-                               Name="targa"\r
-                               >\r
-                               <File\r
-                                       RelativePath=".\producers\targa\TargaManager.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\producers\targa\TargaManager.h"\r
-                                       >\r
-                               </File>\r
-                       </Filter>\r
-                       <Filter\r
-                               Name="composites"\r
-                               >\r
-                               <File\r
-                                       RelativePath=".\producers\composites\FrameCompositeProducer.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\producers\composites\FrameCompositeProducer.h"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\producers\composites\TransitionProducer.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\producers\composites\TransitionProducer.h"\r
-                                       >\r
-                               </File>\r
-                       </Filter>\r
-                       <Filter\r
-                               Name="targascroll"\r
-                               >\r
-                               <File\r
-                                       RelativePath=".\producers\targascroll\TargaScrollManager.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\producers\targascroll\TargaScrollManager.h"\r
-                                       >\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\producers\targascroll\TargaScrollProducer.cpp"\r
-                                       >\r
-                                       <FileConfiguration\r
-                                               Name="Debug|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="Release|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="no bluefish|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                                       <FileConfiguration\r
-                                               Name="SVT special|Win32"\r
-                                               ExcludedFromBuild="true"\r
-                                               >\r
-                                               <Tool\r
-                                                       Name="VCCLCompilerTool"\r
-                                                       PrecompiledHeaderThrough="..\..\StdAfx.h"\r
-                                               />\r
-                                       </FileConfiguration>\r
-                               </File>\r
-                               <File\r
-                                       RelativePath=".\producers\targascroll\TargaScrollProducer.h"\r
-                                       >\r
-                               </File>\r
-                       </Filter>\r
-               </Filter>\r
-               <Filter\r
-                       Name="amcp"\r
-                       >\r
-                       <File\r
-                               RelativePath=".\AMCP\AMCPCommand.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\AMCP\AMCPCommandQueue.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\AMCP\AMCPCommandQueue.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\AMCP\AMCPCommandsImpl.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\AMCP\AMCPCommandsImpl.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\AMCP\AMCPProtocolStrategy.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\AMCP\AMCPProtocolStrategy.h"\r
-                               >\r
-                       </File>\r
-               </Filter>\r
-               <Filter\r
-                       Name="audio"\r
-                       >\r
-                       <File\r
-                               RelativePath=".\audio\AudioManager.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\audio\DirectSoundManager.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\audio\DirectSoundManager.h"\r
-                               >\r
-                       </File>\r
-               </Filter>\r
-               <Filter\r
-                       Name="frame"\r
-                       >\r
-                       <File\r
-                               RelativePath=".\frame\BitmapFrame.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\BitmapFrame.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\BitmapFrameAdapter.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="../StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="../StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\BitmapFrameAdapter.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\BitmapFrameManager.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\BitmapFrameManager.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\BitmapFrameManagerAdapter.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="../StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="../StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="../StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\BitmapFrameManagerAdapter.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\ClipInfo.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\Frame.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\Frame.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\FrameManager.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\FrameMediaController.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\FramePlaybackControl.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\FramePlaybackControl.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\FramePlaybackStrategy.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\SystemFrame.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\SystemFrame.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\SystemFrameManager.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\frame\SystemFrameManager.h"\r
-                               >\r
-                       </File>\r
-               </Filter>\r
-               <Filter\r
-                       Name="CLK"\r
-                       >\r
-                       <File\r
-                               RelativePath=".\CLK\CLKCommand.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\CLK\CLKCommand.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\CLK\CLKProtocolStrategy.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\CLK\CLKProtocolStrategy.h"\r
-                               >\r
-                       </File>\r
-               </Filter>\r
-               <Filter\r
-                       Name="cii"\r
-                       >\r
-                       <File\r
-                               RelativePath=".\CII\CIICommand.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\CII\CIICommandsImpl.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\CII\CIICommandsImpl.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\CII\CIIProtocolStrategy.cpp"\r
-                               >\r
-                               <FileConfiguration\r
-                                       Name="Debug|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="Release|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="no bluefish|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                               <FileConfiguration\r
-                                       Name="SVT special|Win32"\r
-                                       >\r
-                                       <Tool\r
-                                               Name="VCCLCompilerTool"\r
-                                               PrecompiledHeaderThrough="..\StdAfx.h"\r
-                                       />\r
-                               </FileConfiguration>\r
-                       </File>\r
-                       <File\r
-                               RelativePath=".\CII\CIIProtocolStrategy.h"\r
-                               >\r
-                       </File>\r
-               </Filter>\r
-               <File\r
-                       RelativePath=".\Application.cpp"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\Application.h"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\Channel.cpp"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\Channel.h"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\Controller.h"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\FileInfo.h"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\Main.cpp"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\MediaController.h"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\MediaManager.h"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\MediaProducer.h"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\MediaProducerInfo.h"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\Monitor.cpp"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\Monitor.h"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\PlaybackControl.h"\r
-                       >\r
-                       <FileConfiguration\r
-                               Name="Debug|Win32"\r
-                               >\r
-                               <Tool\r
-                                       Name="VCCustomBuildTool"\r
-                               />\r
-                       </FileConfiguration>\r
-                       <FileConfiguration\r
-                               Name="Release|Win32"\r
-                               >\r
-                               <Tool\r
-                                       Name="VCCustomBuildTool"\r
-                               />\r
-                       </FileConfiguration>\r
-                       <FileConfiguration\r
-                               Name="no bluefish|Win32"\r
-                               >\r
-                               <Tool\r
-                                       Name="VCCustomBuildTool"\r
-                               />\r
-                       </FileConfiguration>\r
-                       <FileConfiguration\r
-                               Name="SVT special|Win32"\r
-                               >\r
-                               <Tool\r
-                                       Name="VCCustomBuildTool"\r
-                               />\r
-                       </FileConfiguration>\r
-               </File>\r
-               <File\r
-                       RelativePath=".\Resource.h"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\StdAfx.cpp"\r
-                       >\r
-                       <FileConfiguration\r
-                               Name="Debug|Win32"\r
-                               >\r
-                               <Tool\r
-                                       Name="VCCLCompilerTool"\r
-                                       UsePrecompiledHeader="1"\r
-                               />\r
-                       </FileConfiguration>\r
-                       <FileConfiguration\r
-                               Name="Release|Win32"\r
-                               >\r
-                               <Tool\r
-                                       Name="VCCLCompilerTool"\r
-                                       UsePrecompiledHeader="1"\r
-                               />\r
-                       </FileConfiguration>\r
-                       <FileConfiguration\r
-                               Name="no bluefish|Win32"\r
-                               >\r
-                               <Tool\r
-                                       Name="VCCLCompilerTool"\r
-                                       UsePrecompiledHeader="1"\r
-                               />\r
-                       </FileConfiguration>\r
-                       <FileConfiguration\r
-                               Name="SVT special|Win32"\r
-                               >\r
-                               <Tool\r
-                                       Name="VCCLCompilerTool"\r
-                                       UsePrecompiledHeader="1"\r
-                               />\r
-                       </FileConfiguration>\r
-               </File>\r
-               <File\r
-                       RelativePath=".\StdAfx.h"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\TransitionInfo.h"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\VersionNo.h"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\VideoConsumer.h"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\Window.cpp"\r
-                       >\r
-               </File>\r
-               <File\r
-                       RelativePath=".\Window.h"\r
-                       >\r
-               </File>\r
-       </Files>\r
-       <Globals>\r
-       </Globals>\r
-</VisualStudioProject>\r
diff --git a/server/Server.vcxproj b/server/Server.vcxproj
deleted file mode 100644 (file)
index 56aad01..0000000
+++ /dev/null
@@ -1,774 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="no bluefish|Win32">\r
-      <Configuration>no bluefish</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{79388C20-6499-4BF6-B8B9-D8C33D7D4DDD}</ProjectGuid>\r
-    <RootNamespace>Server</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)build\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">debug\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)build\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">release\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">$(SolutionDir)$(Configuration)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">false</LinkIncremental>\r
-    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\dependencies\BluefishSDK_V5_8_0_31\Inc\;..\..\..\dependencies\BluefishSDK_V5_8_0_31\Inc\;..\..\dependencies\boost_1_44_0\;..\..\..\dependencies\boost_1_44_0\;..\..\dependencies\ffmpeg 0.6\include\;..\..\..\dependencies\ffmpeg 0.6\include\;..\..\dependencies\FreeImage\Dist\;..\..\..\dependencies\FreeImage\Dist\;..\..\dependencies\GLee5_4\;..\..\..\dependencies\GLee5_4\;..\..\dependencies\SFML-1.6\include\;..\..\..\dependencies\SFML-1.6\include\;..\..\dependencies\tbb30_20100406oss\include\;..\..\..\dependencies\tbb30_20100406oss\include\;..\..\dependencies\wtl80\include\;..\..\..\dependencies\wtl80\include\;$(IncludePath)</IncludePath>\r
-    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\dependencies\BluefishSDK_V5_8_0_31\Lib\;..\..\..\dependencies\BluefishSDK_V5_8_0_31\Lib\;..\..\dependencies\boost_1_44_0\stage\lib\;..\..\..\dependencies\boost_1_44_0\stage\lib\;..\..\dependencies\ffmpeg 0.6\lib\;..\..\..\dependencies\ffmpeg 0.6\lib\;..\..\dependencies\FreeImage\Dist\;..\..\..\dependencies\FreeImage\Dist\;..\..\dependencies\GLee5_4\;..\..\..\dependencies\GLee5_4\;..\..\dependencies\SFML-1.6\lib\;..\..\..\dependencies\SFML-1.6\lib\;..\..\dependencies\tbb30_20100406oss\lib\ia32\vc10\;..\..\..\dependencies\tbb30_20100406oss\lib\ia32\vc10\;C:\Program Files\Microsoft DirectX SDK (June 2010)\Lib\x86;C:\Program\Microsoft DirectX SDK (June 2010)\Lib\x86;$(LibraryPath)</LibraryPath>\r
-    <IncludePath Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\dependencies\BluefishSDK_V5_8_0_31\Inc\;..\..\..\dependencies\BluefishSDK_V5_8_0_31\Inc\;..\..\dependencies\boost_1_44_0\;..\..\..\dependencies\boost_1_44_0\;..\..\dependencies\ffmpeg 0.6\include\;..\..\..\dependencies\ffmpeg 0.6\include\;..\..\dependencies\FreeImage\Dist\;..\..\..\dependencies\FreeImage\Dist\;..\..\dependencies\GLee5_4\;..\..\..\dependencies\GLee5_4\;..\..\dependencies\SFML-1.6\include\;..\..\..\dependencies\SFML-1.6\include\;..\..\dependencies\tbb30_20100406oss\include\;..\..\..\dependencies\tbb30_20100406oss\include\;..\..\dependencies\wtl80\include\;..\..\..\dependencies\wtl80\include\;$(IncludePath)</IncludePath>\r
-    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\dependencies\BluefishSDK_V5_8_0_31\Lib\;..\..\..\dependencies\BluefishSDK_V5_8_0_31\Lib\;..\..\dependencies\boost_1_44_0\stage\lib\;..\..\..\dependencies\boost_1_44_0\stage\lib\;..\..\dependencies\ffmpeg 0.6\lib\;..\..\..\dependencies\ffmpeg 0.6\lib\;..\..\dependencies\FreeImage\Dist\;..\..\..\dependencies\FreeImage\Dist\;..\..\dependencies\GLee5_4\;..\..\..\dependencies\GLee5_4\;..\..\dependencies\SFML-1.6\lib\;..\..\..\dependencies\SFML-1.6\lib\;..\..\dependencies\tbb30_20100406oss\lib\ia32\vc10\;..\..\..\dependencies\tbb30_20100406oss\lib\ia32\vc10\;C:\Program Files\Microsoft DirectX SDK (June 2010)\Lib\x86;$(LibraryPath)</LibraryPath>\r
-    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\dependencies\BluefishSDK_V5_8_0_31\Inc\;..\..\..\dependencies\BluefishSDK_V5_8_0_31\Inc\;..\..\dependencies\boost_1_44_0\;..\..\..\dependencies\boost_1_44_0\;..\..\dependencies\ffmpeg 0.6\include\;..\..\..\dependencies\ffmpeg 0.6\include\;..\..\dependencies\FreeImage\Dist\;..\..\..\dependencies\FreeImage\Dist\;..\..\dependencies\GLee5_4\;..\..\..\dependencies\GLee5_4\;..\..\dependencies\SFML-1.6\include\;..\..\..\dependencies\SFML-1.6\include\;..\..\dependencies\tbb30_20100406oss\include\;..\..\..\dependencies\tbb30_20100406oss\include\;..\..\dependencies\wtl80\include\;..\..\..\dependencies\wtl80\include\;$(IncludePath)</IncludePath>\r
-    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\dependencies\BluefishSDK_V5_8_0_31\Lib\;..\..\..\dependencies\BluefishSDK_V5_8_0_31\Lib\;..\..\dependencies\boost_1_44_0\stage\lib\;..\..\..\dependencies\boost_1_44_0\stage\lib\;..\..\dependencies\ffmpeg 0.6\lib\;..\..\..\dependencies\ffmpeg 0.6\lib\;..\..\dependencies\FreeImage\Dist\;..\..\..\dependencies\FreeImage\Dist\;..\..\dependencies\GLee5_4\;..\..\..\dependencies\GLee5_4\;..\..\dependencies\SFML-1.6\lib\;..\..\..\dependencies\SFML-1.6\lib\;..\..\dependencies\tbb30_20100406oss\lib\ia32\vc10\;..\..\..\dependencies\tbb30_20100406oss\lib\ia32\vc10\;C:\Program\Microsoft DirectX SDK (June 2010)\Lib\x86;C:\Program Files\Microsoft DirectX SDK (June 2010)\Lib\x86;$(LibraryPath)</LibraryPath>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <PreBuildEvent>\r
-      <Command>\r
-      </Command>\r
-    </PreBuildEvent>\r
-    <ClCompile>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <ExceptionHandling>Async</ExceptionHandling>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <SmallerTypeCheck>true</SmallerTypeCheck>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>\r
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>\r
-      <PrecompiledHeader>Use</PrecompiledHeader>\r
-      <BrowseInformation>true</BrowseInformation>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>BlueHancUtils_d.lib;GLee.lib;Dxguid.lib;Dsound.lib;Winmm.lib;Ws2_32.lib;BlueVelvet3_d.lib;avformat-52.lib;avcodec-52.lib;avutil-50.lib;swscale-0.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <Version>\r
-      </Version>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <IgnoreSpecificDefaultLibraries>LIBC.LIB;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <GenerateMapFile>true</GenerateMapFile>\r
-      <MapFileName>\r
-      </MapFileName>\r
-      <SubSystem>Windows</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-    <PostBuildEvent>\r
-      <Command>\r
-      </Command>\r
-    </PostBuildEvent>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <PreBuildEvent>\r
-      <Command>\r
-      </Command>\r
-    </PreBuildEvent>\r
-    <ClCompile>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <ExceptionHandling>Async</ExceptionHandling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>\r
-      <PrecompiledHeader>Use</PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r
-      <WholeProgramOptimization>true</WholeProgramOptimization>\r
-      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-    </ClCompile>\r
-    <PreLinkEvent>\r
-      <Command>\r
-      </Command>\r
-    </PreLinkEvent>\r
-    <Link>\r
-      <AdditionalDependencies>BlueHancUtils.lib;Dxguid.lib;Dsound.lib;Winmm.lib;Ws2_32.lib;Bluevelvet3.lib;avformat-52.lib;avcodec-52.lib;avutil-50.lib;swscale-0.lib;tbb.lib;Glee.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <Version>\r
-      </Version>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <IgnoreSpecificDefaultLibraries>LIBC.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <GenerateMapFile>true</GenerateMapFile>\r
-      <MapExports>true</MapExports>\r
-      <SubSystem>Windows</SubSystem>\r
-      <OptimizeReferences>\r
-      </OptimizeReferences>\r
-      <EnableCOMDATFolding>\r
-      </EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <FixedBaseAddress>false</FixedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-    <PostBuildEvent>\r
-      <Command>\r
-      </Command>\r
-    </PostBuildEvent>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">\r
-    <PreBuildEvent>\r
-      <Command>\r
-      </Command>\r
-    </PreBuildEvent>\r
-    <ClCompile>\r
-      <Optimization>Disabled</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>DISABLE_BLUEFISH;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <ExceptionHandling>Async</ExceptionHandling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>\r
-      <PrecompiledHeader>Use</PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-    </ClCompile>\r
-    <PreLinkEvent>\r
-      <Command>\r
-      </Command>\r
-    </PreLinkEvent>\r
-    <Link>\r
-      <AdditionalDependencies>Dxguid.lib;Dsound.lib;Winmm.lib;Ws2_32.lib;avformat-52.lib;avcodec-52.lib;avutil-50.lib;swscale-0.lib;GLee.lib;tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <Version>\r
-      </Version>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <IgnoreSpecificDefaultLibraries>LIBC.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <GenerateMapFile>true</GenerateMapFile>\r
-      <MapExports>true</MapExports>\r
-      <SubSystem>Windows</SubSystem>\r
-      <OptimizeReferences>\r
-      </OptimizeReferences>\r
-      <EnableCOMDATFolding>\r
-      </EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <FixedBaseAddress>false</FixedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-    <PostBuildEvent>\r
-      <Command>\r
-      </Command>\r
-    </PostBuildEvent>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <None Include="resources\Icon2.ico" />\r
-    <None Include="resources\server.rc2" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ResourceCompile Include="resources\Server.rc" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="consumers\bluefish\BluefishMemory.h" />\r
-    <ClInclude Include="consumers\bluefish\BluefishUtil.h" />\r
-    <ClInclude Include="frame\buffers\FrameBuffer.h" />\r
-    <ClInclude Include="frame\buffers\MotionFrameBuffer.h" />\r
-    <ClInclude Include="frame\buffers\StaticFrameBuffer.h" />\r
-    <ClInclude Include="producers\ffmpeg\audio\audio_decoder.h" />\r
-    <ClInclude Include="producers\ffmpeg\FFMPEGManager.h" />\r
-    <ClInclude Include="producers\ffmpeg\ffmpeg_producer.h" />\r
-    <ClInclude Include="producers\ffmpeg\input.h" />\r
-    <ClInclude Include="producers\ffmpeg\packet.h" />\r
-    <ClInclude Include="producers\ffmpeg\video\video_decoder.h" />\r
-    <ClInclude Include="producers\ffmpeg\video\video_transformer.h" />\r
-    <ClInclude Include="string_convert.h" />\r
-    <ClInclude Include="Utils\Allocator.h" />\r
-    <ClInclude Include="utils\BitmapHolder.h" />\r
-    <ClInclude Include="Utils\CommandQueue.h" />\r
-    <ClInclude Include="utils\CPUID.hpp" />\r
-    <ClInclude Include="Utils\CritSectLock.h" />\r
-    <ClInclude Include="Utils\DataBuffer.h" />\r
-    <ClInclude Include="utils\DCWrapper.h" />\r
-    <ClInclude Include="Utils\Event.h" />\r
-    <ClInclude Include="Utils\FileExists.h" />\r
-    <ClInclude Include="Utils\FileInputStream.h" />\r
-    <ClInclude Include="Utils\FileOutputStream.h" />\r
-    <ClInclude Include="Utils\FindWrapper.h" />\r
-    <ClInclude Include="utils\functiontask.hpp" />\r
-    <ClInclude Include="Utils\ID.h" />\r
-    <ClInclude Include="Utils\InputStream.h" />\r
-    <ClInclude Include="Utils\Lockable.h" />\r
-    <ClInclude Include="utils\LogException.h" />\r
-    <ClInclude Include="Utils\Logger.h" />\r
-    <ClInclude Include="utils\LogLevel.h" />\r
-    <ClInclude Include="utils\LogStream.h" />\r
-    <ClInclude Include="utils\Noncopyable.hpp" />\r
-    <ClInclude Include="utils\ObjectPool.h" />\r
-    <ClInclude Include="Utils\OutputStream.h" />\r
-    <ClInclude Include="Utils\PixmapData.h" />\r
-    <ClInclude Include="utils\Process.h" />\r
-    <ClInclude Include="Utils\Runnable.h" />\r
-    <ClInclude Include="utils\scope_exit.h" />\r
-    <ClInclude Include="Utils\Semaphore.h" />\r
-    <ClInclude Include="utils\TaskQueue.h" />\r
-    <ClInclude Include="Utils\Thread.h" />\r
-    <ClInclude Include="utils\Types.hpp" />\r
-    <ClInclude Include="utils\UnhandledException.h" />\r
-    <ClInclude Include="Utils\Win32Exception.h" />\r
-    <ClInclude Include="Utils\image\Clear.hpp" />\r
-    <ClInclude Include="Utils\image\Copy.hpp" />\r
-    <ClInclude Include="utils\image\CopyField.hpp" />\r
-    <ClInclude Include="utils\image\Image.hpp" />\r
-    <ClInclude Include="utils\image\Lerp.hpp" />\r
-    <ClInclude Include="utils\image\Over.hpp" />\r
-    <ClInclude Include="utils\image\Premultiply.hpp" />\r
-    <ClInclude Include="utils\image\Shuffle.hpp" />\r
-    <ClInclude Include="IO\AsyncEventServer.h" />\r
-    <ClInclude Include="IO\ClientInfo.h" />\r
-    <ClInclude Include="IO\ProtocolStrategy.h" />\r
-    <ClInclude Include="IO\SerialPort.h" />\r
-    <ClInclude Include="IO\SocketInfo.h" />\r
-    <CustomBuildStep Include="consumers\bluefish\BluefishException.h" />\r
-    <CustomBuildStep Include="consumers\bluefish\BluefishFrameManager.h" />\r
-    <CustomBuildStep Include="consumers\bluefish\BluefishPlaybackStrategy.h" />\r
-    <CustomBuildStep Include="consumers\bluefish\BlueFishVideoConsumer.h" />\r
-    <ClInclude Include="consumers\GDI\GDIVideoConsumer.h" />\r
-    <ClInclude Include="Consumers\OGL\OGLVideoConsumer.h" />\r
-    <ClInclude Include="consumers\Audio\AudioConsumer.h" />\r
-    <ClInclude Include="consumers\decklink\DeckLinkAPI_h.h" />\r
-    <ClInclude Include="consumers\decklink\DecklinkVideoConsumer.h" />\r
-    <ClInclude Include="cg\CGControl.h" />\r
-    <ClInclude Include="cg\FlashCGProxy.h" />\r
-    <ClInclude Include="Producers\flash\AxFlash.h" />\r
-    <ClInclude Include="producers\flash\CTManager.h" />\r
-    <ClInclude Include="Producers\flash\FlashAxContainer.h" />\r
-    <ClInclude Include="Producers\flash\FlashCommand.h" />\r
-    <ClInclude Include="Producers\flash\FlashCommandQueue.h" />\r
-    <ClInclude Include="producers\flash\FlashManager.h" />\r
-    <ClInclude Include="Producers\flash\FlashProducer.h" />\r
-    <ClInclude Include="Producers\flash\TimerHelper.h" />\r
-    <ClInclude Include="producers\color\ColorManager.h" />\r
-    <ClInclude Include="producers\targa\TargaManager.h" />\r
-    <ClInclude Include="producers\composites\FrameCompositeProducer.h" />\r
-    <ClInclude Include="producers\composites\TransitionProducer.h" />\r
-    <ClInclude Include="producers\targascroll\TargaScrollManager.h" />\r
-    <ClInclude Include="producers\targascroll\TargaScrollProducer.h" />\r
-    <ClInclude Include="AMCP\AMCPCommand.h" />\r
-    <ClInclude Include="AMCP\AMCPCommandQueue.h" />\r
-    <ClInclude Include="AMCP\AMCPCommandsImpl.h" />\r
-    <ClInclude Include="AMCP\AMCPProtocolStrategy.h" />\r
-    <ClInclude Include="audio\AudioManager.h" />\r
-    <ClInclude Include="audio\DirectSoundManager.h" />\r
-    <ClInclude Include="frame\BitmapFrame.h" />\r
-    <ClInclude Include="frame\BitmapFrameAdapter.h" />\r
-    <ClInclude Include="frame\BitmapFrameManager.h" />\r
-    <ClInclude Include="frame\BitmapFrameManagerAdapter.h" />\r
-    <ClInclude Include="frame\ClipInfo.h" />\r
-    <ClInclude Include="frame\Frame.h" />\r
-    <ClInclude Include="frame\FrameManager.h" />\r
-    <ClInclude Include="frame\FrameMediaController.h" />\r
-    <ClInclude Include="frame\FramePlaybackControl.h" />\r
-    <ClInclude Include="frame\FramePlaybackStrategy.h" />\r
-    <ClInclude Include="frame\SystemFrame.h" />\r
-    <ClInclude Include="frame\SystemFrameManager.h" />\r
-    <ClInclude Include="CLK\CLKCommand.h" />\r
-    <ClInclude Include="CLK\CLKProtocolStrategy.h" />\r
-    <ClInclude Include="CII\CIICommand.h" />\r
-    <ClInclude Include="CII\CIICommandsImpl.h" />\r
-    <ClInclude Include="CII\CIIProtocolStrategy.h" />\r
-    <ClInclude Include="Application.h" />\r
-    <ClInclude Include="Channel.h" />\r
-    <ClInclude Include="Controller.h" />\r
-    <ClInclude Include="FileInfo.h" />\r
-    <ClInclude Include="MediaController.h" />\r
-    <ClInclude Include="MediaManager.h" />\r
-    <ClInclude Include="MediaProducer.h" />\r
-    <ClInclude Include="MediaProducerInfo.h" />\r
-    <ClInclude Include="Monitor.h" />\r
-    <CustomBuildStep Include="PlaybackControl.h" />\r
-    <ClInclude Include="Resource.h" />\r
-    <ClInclude Include="StdAfx.h" />\r
-    <ClInclude Include="TransitionInfo.h" />\r
-    <ClInclude Include="VersionNo.h" />\r
-    <ClInclude Include="VideoConsumer.h" />\r
-    <ClInclude Include="Window.h" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="frame\buffers\MotionFrameBuffer.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="frame\buffers\StaticFrameBuffer.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\ffmpeg\audio\audio_decoder.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../../StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">../../../StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../../StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\ffmpeg\FFMPEGManager.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\ffmpeg\ffmpeg_producer.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\ffmpeg\input.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\ffmpeg\video\video_decoder.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../../StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">../../../StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../../StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\ffmpeg\video\video_transformer.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../../StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">../../../StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../../StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\BitmapHolder.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\CPUID.cpp">\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-      </PrecompiledHeader>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-      </PrecompiledHeader>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">\r
-      </PrecompiledHeader>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\DCWrapper.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\Event.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\FileExists.cpp">\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\FileInputStream.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\FileOutputStream.cpp">\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\FindWrapper.cpp">\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\ID.cpp" />\r
-    <ClCompile Include="utils\LogException.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\Logger.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\LogStream.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\Process.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\Semaphore.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\Thread.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\Win32Exception.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\image\Clear.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\image\Copy.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\image\CopyField.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\image\Image.cpp">\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\image\Lerp.cpp">\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\image\Over.cpp">\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\image\Premultiply.cpp">\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\image\Shuffle.cpp">\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">Use</PrecompiledHeader>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="IO\AsyncEventServer.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="IO\SerialPort.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="IO\SocketInfo.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="consumers\bluefish\BluefishPlaybackStrategy.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\stdafx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\stdafx.h</PrecompiledHeaderFile>\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">true</ExcludedFromBuild>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\stdafx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="consumers\bluefish\BlueFishVideoConsumer.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\stdafx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\stdafx.h</PrecompiledHeaderFile>\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">true</ExcludedFromBuild>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\stdafx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="consumers\GDI\GDIVideoConsumer.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="Consumers\OGL\OGLVideoConsumer.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="consumers\Audio\AudioConsumer.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="consumers\decklink\DeckLinkAPI_i.c">\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-      </PrecompiledHeader>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-      </PrecompiledHeader>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">\r
-      </PrecompiledHeader>\r
-    </ClCompile>\r
-    <ClCompile Include="consumers\decklink\DecklinkVideoConsumer.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="cg\FlashCGProxy.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\flash\CTManager.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="Producers\flash\Flash9e_i.c">\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-      </PrecompiledHeader>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-      </PrecompiledHeader>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">\r
-      </PrecompiledHeader>\r
-    </ClCompile>\r
-    <ClCompile Include="Producers\flash\FlashAxContainer.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="Producers\flash\FlashCommand.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="Producers\flash\FlashCommandQueue.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\flash\FlashManager.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="Producers\flash\FlashProducer.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\color\ColorManager.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\targa\TargaManager.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\composites\FrameCompositeProducer.cpp">\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">true</ExcludedFromBuild>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\composites\TransitionProducer.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\targascroll\TargaScrollManager.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\targascroll\TargaScrollProducer.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="AMCP\AMCPCommandQueue.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="AMCP\AMCPCommandsImpl.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="AMCP\AMCPProtocolStrategy.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="audio\DirectSoundManager.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="frame\BitmapFrame.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="frame\BitmapFrameAdapter.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="frame\BitmapFrameManager.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="frame\BitmapFrameManagerAdapter.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="frame\Frame.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="frame\FramePlaybackControl.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="frame\SystemFrame.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="frame\SystemFrameManager.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="CLK\CLKCommand.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="CLK\CLKProtocolStrategy.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="CII\CIICommandsImpl.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="CII\CIIProtocolStrategy.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">..\StdAfx.h</PrecompiledHeaderFile>\r
-    </ClCompile>\r
-    <ClCompile Include="Application.cpp" />\r
-    <ClCompile Include="Channel.cpp" />\r
-    <ClCompile Include="Main.cpp" />\r
-    <ClCompile Include="Monitor.cpp" />\r
-    <ClCompile Include="StdAfx.cpp">\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>\r
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">Create</PrecompiledHeader>\r
-    </ClCompile>\r
-    <ClCompile Include="Window.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <Midl Include="consumers\decklink\DeckLinkAPI.idl">\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">true</ExcludedFromBuild>\r
-    </Midl>\r
-    <Midl Include="consumers\decklink\DeckLinkAPI_v7_1.idl">\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">true</ExcludedFromBuild>\r
-    </Midl>\r
-    <Midl Include="consumers\decklink\DeckLinkAPI_v7_3.idl">\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">true</ExcludedFromBuild>\r
-    </Midl>\r
-    <Midl Include="Producers\flash\Flash9e.IDL">\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='no bluefish|Win32'">true</ExcludedFromBuild>\r
-    </Midl>\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/server/Server.vcxproj.filters b/server/Server.vcxproj.filters
deleted file mode 100644 (file)
index 6f528bc..0000000
+++ /dev/null
@@ -1,668 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <Filter Include="resources">\r
-      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
-      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx</Extensions>\r
-    </Filter>\r
-    <Filter Include="utils">\r
-      <UniqueIdentifier>{de65234e-d9fe-4005-af84-09ea8eeda314}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="utils\image">\r
-      <UniqueIdentifier>{5322381c-6ced-444c-8f53-ae02ebdd1cd5}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="io">\r
-      <UniqueIdentifier>{5782c398-5fef-43f1-b52e-0b099f648a93}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="consumers">\r
-      <UniqueIdentifier>{de0e92f0-d699-4302-9362-d3bee8f8621d}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="consumers\bluefish">\r
-      <UniqueIdentifier>{4461591f-a286-4c8d-9f0a-303befed0603}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="consumers\gdi">\r
-      <UniqueIdentifier>{d87ea4f0-ef3f-4647-9655-ac378bb21224}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="consumers\ogl">\r
-      <UniqueIdentifier>{8454244b-d974-4c5c-8c8f-eb024eb304fe}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="consumers\audio">\r
-      <UniqueIdentifier>{642f599a-19a8-4082-acf5-e74e8666c4ac}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="consumers\decklink">\r
-      <UniqueIdentifier>{f7d3bde2-2d03-4bac-808c-93ff623d7279}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="cg">\r
-      <UniqueIdentifier>{ff78e1a7-a8d8-4660-91f6-f374f0124d72}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="producers">\r
-      <UniqueIdentifier>{6f75412d-3d6d-4603-a638-c03d08598942}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="producers\ffmpeg">\r
-      <UniqueIdentifier>{bbdb38a3-e939-426f-824c-13665bafdce1}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="producers\flash">\r
-      <UniqueIdentifier>{b97c7904-7f85-4930-9966-8b00c0686a3b}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="producers\color">\r
-      <UniqueIdentifier>{442348e2-9459-42b2-b688-965775724270}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="producers\targa">\r
-      <UniqueIdentifier>{73ab2334-4260-4806-86c5-d04316b05706}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="producers\composites">\r
-      <UniqueIdentifier>{5f667ffb-04d6-4bdf-be40-47277b4aba35}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="producers\targascroll">\r
-      <UniqueIdentifier>{ac3a349b-4646-4fc1-bdb1-2a3ea9c6e89d}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="amcp">\r
-      <UniqueIdentifier>{d33e8ddc-ccb4-4f4f-ad20-e788a796bb7b}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="frame">\r
-      <UniqueIdentifier>{69627759-fb18-42fa-8339-66ce27062c90}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="CLK">\r
-      <UniqueIdentifier>{8355a891-c4db-4a0e-8ecc-795314127cdc}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="cii">\r
-      <UniqueIdentifier>{a94bc00a-4753-4bce-a777-6a3ea2ceca59}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="frame\buffers">\r
-      <UniqueIdentifier>{5f57e8d6-78fb-4784-9dea-91e0c95d8aec}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="producers\ffmpeg\video">\r
-      <UniqueIdentifier>{3d3dff86-9539-4103-9f5b-2feb7300782f}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="producers\ffmpeg\audio">\r
-      <UniqueIdentifier>{52231829-a35a-42e0-b828-84fc8088adb4}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <None Include="resources\Icon2.ico">\r
-      <Filter>resources</Filter>\r
-    </None>\r
-    <None Include="resources\server.rc2">\r
-      <Filter>resources</Filter>\r
-    </None>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ResourceCompile Include="resources\Server.rc">\r
-      <Filter>resources</Filter>\r
-    </ResourceCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="Utils\Allocator.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\BitmapHolder.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\CommandQueue.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\CPUID.hpp">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\CritSectLock.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\DataBuffer.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\DCWrapper.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\Event.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\FileExists.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\FileInputStream.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\FileOutputStream.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\FindWrapper.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\ID.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\InputStream.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\Lockable.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\LogException.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\Logger.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\LogLevel.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\LogStream.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\Noncopyable.hpp">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\OutputStream.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\PixmapData.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\Process.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\Runnable.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\Semaphore.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\TaskQueue.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\Thread.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\Types.hpp">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\Win32Exception.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\image\Clear.hpp">\r
-      <Filter>utils\image</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Utils\image\Copy.hpp">\r
-      <Filter>utils\image</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\image\CopyField.hpp">\r
-      <Filter>utils\image</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\image\Image.hpp">\r
-      <Filter>utils\image</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\image\Lerp.hpp">\r
-      <Filter>utils\image</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\image\Over.hpp">\r
-      <Filter>utils\image</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\image\Premultiply.hpp">\r
-      <Filter>utils\image</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\image\Shuffle.hpp">\r
-      <Filter>utils\image</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="IO\AsyncEventServer.h">\r
-      <Filter>io</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="IO\ClientInfo.h">\r
-      <Filter>io</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="IO\ProtocolStrategy.h">\r
-      <Filter>io</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="IO\SerialPort.h">\r
-      <Filter>io</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="IO\SocketInfo.h">\r
-      <Filter>io</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="consumers\GDI\GDIVideoConsumer.h">\r
-      <Filter>consumers\gdi</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Consumers\OGL\OGLVideoConsumer.h">\r
-      <Filter>consumers\ogl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="consumers\Audio\AudioConsumer.h">\r
-      <Filter>consumers\audio</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="consumers\decklink\DeckLinkAPI_h.h">\r
-      <Filter>consumers\decklink</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="consumers\decklink\DecklinkVideoConsumer.h">\r
-      <Filter>consumers\decklink</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="cg\CGControl.h">\r
-      <Filter>cg</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="cg\FlashCGProxy.h">\r
-      <Filter>cg</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Producers\flash\AxFlash.h">\r
-      <Filter>producers\flash</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="producers\flash\CTManager.h">\r
-      <Filter>producers\flash</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Producers\flash\FlashAxContainer.h">\r
-      <Filter>producers\flash</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Producers\flash\FlashCommand.h">\r
-      <Filter>producers\flash</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Producers\flash\FlashCommandQueue.h">\r
-      <Filter>producers\flash</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="producers\flash\FlashManager.h">\r
-      <Filter>producers\flash</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Producers\flash\FlashProducer.h">\r
-      <Filter>producers\flash</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Producers\flash\TimerHelper.h">\r
-      <Filter>producers\flash</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="producers\color\ColorManager.h">\r
-      <Filter>producers\color</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="producers\targa\TargaManager.h">\r
-      <Filter>producers\targa</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="producers\composites\FrameCompositeProducer.h">\r
-      <Filter>producers\composites</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="producers\composites\TransitionProducer.h">\r
-      <Filter>producers\composites</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="producers\targascroll\TargaScrollManager.h">\r
-      <Filter>producers\targascroll</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="producers\targascroll\TargaScrollProducer.h">\r
-      <Filter>producers\targascroll</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="AMCP\AMCPCommand.h">\r
-      <Filter>amcp</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="AMCP\AMCPCommandQueue.h">\r
-      <Filter>amcp</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="AMCP\AMCPCommandsImpl.h">\r
-      <Filter>amcp</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="AMCP\AMCPProtocolStrategy.h">\r
-      <Filter>amcp</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="audio\AudioManager.h">\r
-      <Filter>consumers\audio</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="audio\DirectSoundManager.h">\r
-      <Filter>consumers\audio</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="frame\BitmapFrame.h">\r
-      <Filter>frame</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="frame\BitmapFrameAdapter.h">\r
-      <Filter>frame</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="frame\BitmapFrameManager.h">\r
-      <Filter>frame</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="frame\BitmapFrameManagerAdapter.h">\r
-      <Filter>frame</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="frame\ClipInfo.h">\r
-      <Filter>frame</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="frame\Frame.h">\r
-      <Filter>frame</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="frame\FrameManager.h">\r
-      <Filter>frame</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="frame\FrameMediaController.h">\r
-      <Filter>frame</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="frame\FramePlaybackControl.h">\r
-      <Filter>frame</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="frame\FramePlaybackStrategy.h">\r
-      <Filter>frame</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="frame\SystemFrame.h">\r
-      <Filter>frame</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="frame\SystemFrameManager.h">\r
-      <Filter>frame</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="CLK\CLKCommand.h">\r
-      <Filter>CLK</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="CLK\CLKProtocolStrategy.h">\r
-      <Filter>CLK</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="CII\CIICommand.h">\r
-      <Filter>cii</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="CII\CIICommandsImpl.h">\r
-      <Filter>cii</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="CII\CIIProtocolStrategy.h">\r
-      <Filter>cii</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="Application.h" />\r
-    <ClInclude Include="Channel.h" />\r
-    <ClInclude Include="Controller.h" />\r
-    <ClInclude Include="FileInfo.h" />\r
-    <ClInclude Include="MediaController.h" />\r
-    <ClInclude Include="MediaManager.h" />\r
-    <ClInclude Include="MediaProducer.h" />\r
-    <ClInclude Include="MediaProducerInfo.h" />\r
-    <ClInclude Include="Monitor.h" />\r
-    <ClInclude Include="Resource.h" />\r
-    <ClInclude Include="StdAfx.h" />\r
-    <ClInclude Include="TransitionInfo.h" />\r
-    <ClInclude Include="VersionNo.h" />\r
-    <ClInclude Include="VideoConsumer.h" />\r
-    <ClInclude Include="Window.h" />\r
-    <ClInclude Include="frame\buffers\FrameBuffer.h">\r
-      <Filter>frame\buffers</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="frame\buffers\MotionFrameBuffer.h">\r
-      <Filter>frame\buffers</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="frame\buffers\StaticFrameBuffer.h">\r
-      <Filter>frame\buffers</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="string_convert.h" />\r
-    <ClInclude Include="utils\UnhandledException.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\scope_exit.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\ObjectPool.h">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="utils\functiontask.hpp">\r
-      <Filter>utils</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="producers\ffmpeg\ffmpeg_producer.h">\r
-      <Filter>producers\ffmpeg</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="producers\ffmpeg\input.h">\r
-      <Filter>producers\ffmpeg</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="producers\ffmpeg\packet.h">\r
-      <Filter>producers\ffmpeg</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="producers\ffmpeg\video\video_transformer.h">\r
-      <Filter>producers\ffmpeg\video</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="producers\ffmpeg\video\video_decoder.h">\r
-      <Filter>producers\ffmpeg\video</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="producers\ffmpeg\audio\audio_decoder.h">\r
-      <Filter>producers\ffmpeg\audio</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="producers\ffmpeg\FFMPEGManager.h">\r
-      <Filter>producers\ffmpeg</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="consumers\bluefish\BluefishUtil.h">\r
-      <Filter>consumers\bluefish</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="consumers\bluefish\BluefishMemory.h">\r
-      <Filter>consumers\bluefish</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="utils\BitmapHolder.cpp">\r
-      <Filter>utils</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\CPUID.cpp">\r
-      <Filter>utils</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\DCWrapper.cpp">\r
-      <Filter>utils</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\Event.cpp">\r
-      <Filter>utils</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\FileExists.cpp">\r
-      <Filter>utils</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\FileInputStream.cpp">\r
-      <Filter>utils</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\FileOutputStream.cpp">\r
-      <Filter>utils</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\FindWrapper.cpp">\r
-      <Filter>utils</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\ID.cpp">\r
-      <Filter>utils</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\LogException.cpp">\r
-      <Filter>utils</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\Logger.cpp">\r
-      <Filter>utils</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\LogStream.cpp">\r
-      <Filter>utils</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\Process.cpp">\r
-      <Filter>utils</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\Semaphore.cpp">\r
-      <Filter>utils</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\Thread.cpp">\r
-      <Filter>utils</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\Win32Exception.cpp">\r
-      <Filter>utils</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\image\Clear.cpp">\r
-      <Filter>utils\image</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Utils\image\Copy.cpp">\r
-      <Filter>utils\image</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\image\CopyField.cpp">\r
-      <Filter>utils\image</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\image\Image.cpp">\r
-      <Filter>utils\image</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\image\Lerp.cpp">\r
-      <Filter>utils\image</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\image\Over.cpp">\r
-      <Filter>utils\image</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\image\Premultiply.cpp">\r
-      <Filter>utils\image</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="utils\image\Shuffle.cpp">\r
-      <Filter>utils\image</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="IO\AsyncEventServer.cpp">\r
-      <Filter>io</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="IO\SerialPort.cpp">\r
-      <Filter>io</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="IO\SocketInfo.cpp">\r
-      <Filter>io</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="consumers\bluefish\BluefishPlaybackStrategy.cpp">\r
-      <Filter>consumers\bluefish</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="consumers\bluefish\BlueFishVideoConsumer.cpp">\r
-      <Filter>consumers\bluefish</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="consumers\GDI\GDIVideoConsumer.cpp">\r
-      <Filter>consumers\gdi</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Consumers\OGL\OGLVideoConsumer.cpp">\r
-      <Filter>consumers\ogl</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="consumers\Audio\AudioConsumer.cpp">\r
-      <Filter>consumers\audio</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="consumers\decklink\DeckLinkAPI_i.c">\r
-      <Filter>consumers\decklink</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="consumers\decklink\DecklinkVideoConsumer.cpp">\r
-      <Filter>consumers\decklink</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="cg\FlashCGProxy.cpp">\r
-      <Filter>cg</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\flash\CTManager.cpp">\r
-      <Filter>producers\flash</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Producers\flash\Flash9e_i.c">\r
-      <Filter>producers\flash</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Producers\flash\FlashAxContainer.cpp">\r
-      <Filter>producers\flash</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Producers\flash\FlashCommand.cpp">\r
-      <Filter>producers\flash</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Producers\flash\FlashCommandQueue.cpp">\r
-      <Filter>producers\flash</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\flash\FlashManager.cpp">\r
-      <Filter>producers\flash</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Producers\flash\FlashProducer.cpp">\r
-      <Filter>producers\flash</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\color\ColorManager.cpp">\r
-      <Filter>producers\color</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\targa\TargaManager.cpp">\r
-      <Filter>producers\targa</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\composites\FrameCompositeProducer.cpp">\r
-      <Filter>producers\composites</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\composites\TransitionProducer.cpp">\r
-      <Filter>producers\composites</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\targascroll\TargaScrollManager.cpp">\r
-      <Filter>producers\targascroll</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\targascroll\TargaScrollProducer.cpp">\r
-      <Filter>producers\targascroll</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="AMCP\AMCPCommandQueue.cpp">\r
-      <Filter>amcp</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="AMCP\AMCPCommandsImpl.cpp">\r
-      <Filter>amcp</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="AMCP\AMCPProtocolStrategy.cpp">\r
-      <Filter>amcp</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="audio\DirectSoundManager.cpp">\r
-      <Filter>consumers\audio</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="frame\BitmapFrame.cpp">\r
-      <Filter>frame</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="frame\BitmapFrameAdapter.cpp">\r
-      <Filter>frame</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="frame\BitmapFrameManager.cpp">\r
-      <Filter>frame</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="frame\BitmapFrameManagerAdapter.cpp">\r
-      <Filter>frame</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="frame\Frame.cpp">\r
-      <Filter>frame</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="frame\FramePlaybackControl.cpp">\r
-      <Filter>frame</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="frame\SystemFrame.cpp">\r
-      <Filter>frame</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="frame\SystemFrameManager.cpp">\r
-      <Filter>frame</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="CLK\CLKCommand.cpp">\r
-      <Filter>CLK</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="CLK\CLKProtocolStrategy.cpp">\r
-      <Filter>CLK</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="CII\CIICommandsImpl.cpp">\r
-      <Filter>cii</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="CII\CIIProtocolStrategy.cpp">\r
-      <Filter>cii</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="Application.cpp" />\r
-    <ClCompile Include="Channel.cpp" />\r
-    <ClCompile Include="Main.cpp" />\r
-    <ClCompile Include="Monitor.cpp" />\r
-    <ClCompile Include="StdAfx.cpp" />\r
-    <ClCompile Include="Window.cpp" />\r
-    <ClCompile Include="frame\buffers\MotionFrameBuffer.cpp">\r
-      <Filter>frame\buffers</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="frame\buffers\StaticFrameBuffer.cpp">\r
-      <Filter>frame\buffers</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\ffmpeg\ffmpeg_producer.cpp">\r
-      <Filter>producers\ffmpeg</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\ffmpeg\input.cpp">\r
-      <Filter>producers\ffmpeg</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\ffmpeg\video\video_transformer.cpp">\r
-      <Filter>producers\ffmpeg\video</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\ffmpeg\video\video_decoder.cpp">\r
-      <Filter>producers\ffmpeg\video</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\ffmpeg\audio\audio_decoder.cpp">\r
-      <Filter>producers\ffmpeg\audio</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="producers\ffmpeg\FFMPEGManager.cpp">\r
-      <Filter>producers\ffmpeg</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <Midl Include="consumers\decklink\DeckLinkAPI.idl">\r
-      <Filter>consumers\decklink</Filter>\r
-    </Midl>\r
-    <Midl Include="consumers\decklink\DeckLinkAPI_v7_1.idl">\r
-      <Filter>consumers\decklink</Filter>\r
-    </Midl>\r
-    <Midl Include="consumers\decklink\DeckLinkAPI_v7_3.idl">\r
-      <Filter>consumers\decklink</Filter>\r
-    </Midl>\r
-    <Midl Include="Producers\flash\Flash9e.IDL">\r
-      <Filter>producers\flash</Filter>\r
-    </Midl>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <CustomBuildStep Include="consumers\bluefish\BluefishException.h">\r
-      <Filter>consumers\bluefish</Filter>\r
-    </CustomBuildStep>\r
-    <CustomBuildStep Include="consumers\bluefish\BluefishPlaybackStrategy.h">\r
-      <Filter>consumers\bluefish</Filter>\r
-    </CustomBuildStep>\r
-    <CustomBuildStep Include="consumers\bluefish\BlueFishVideoConsumer.h">\r
-      <Filter>consumers\bluefish</Filter>\r
-    </CustomBuildStep>\r
-    <CustomBuildStep Include="PlaybackControl.h" />\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/server/StdAfx.cpp b/server/StdAfx.cpp
deleted file mode 100644 (file)
index 2bd615b..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-// stdafx.cpp : source file that includes just the standard includes\r
-//     dma.pch will be the pre-compiled header\r
-//     stdafx.obj will contain the pre-compiled type information\r
-\r
-#include "stdafx.h"\r
-\r
-// TODO: reference any additional headers you need in STDAFX.H\r
-// and not in this file\r
diff --git a/server/StdAfx.h b/server/StdAfx.h
deleted file mode 100644 (file)
index 3e14200..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-// stdafx.h : include file for standard system include files,\r
-//  or project specific include files that are used frequently, but\r
-//      are changed infrequently\r
-//\r
-\r
-#if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)\r
-#define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_\r
-\r
-#if _MSC_VER > 1000\r
-#pragma once\r
-#endif // _MSC_VER > 1000\r
-\r
-#ifdef _DEBUG\r
-#include <crtdbg.h>\r
-#endif\r
-\r
-#include <winsock2.h>\r
-#include <tchar.h>\r
-#include <sstream>\r
-#include <memory>\r
-\r
-#ifndef TEMPLATEHOST_VERSION\r
-#define TEMPLATEHOST_VERSION 1700\r
-#endif\r
-\r
-\r
-#ifndef _UNICODE\r
-typedef std::ostringstream tstringstream;\r
-typedef std::string tstring;\r
-#else\r
-typedef std::wostringstream tstringstream;\r
-typedef std::wstring tstring;\r
-#endif\r
-\r
-#include <assert.h>\r
-\r
-#include "utils\Logger.h"\r
-#define LOG    caspar::utils::Logger::GetInstance().GetStream(caspar::utils::LogLevel::Release)\r
-\r
-\r
-       #include <atlbase.h>\r
-       #include <atlapp.h>\r
-\r
-       extern WTL::CAppModule _Module;\r
-\r
-       #include <atlcom.h>\r
-       #include <atlhost.h>\r
-\r
-       extern LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);\r
-\r
-namespace caspar\r
-{\r
-       class Application;\r
-       Application* GetApplication();\r
-};\r
-//{{AFX_INSERT_LOCATION}}\r
-// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r
-\r
-#endif // !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)\r
diff --git a/server/TransitionInfo.h b/server/TransitionInfo.h
deleted file mode 100644 (file)
index ffe4a31..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include <string>\r
-\r
-namespace caspar {\r
-\r
-enum TransitionType\r
-{\r
-       Cut = 1,\r
-       Mix,\r
-       Push,\r
-       Slide,\r
-       Wipe\r
-};\r
-\r
-enum TransitionDirection\r
-{\r
-       FromLeft = 1,\r
-       FromRight,\r
-       FromTop,\r
-       FromBottom\r
-};\r
-\r
-class TransitionInfo\r
-{\r
-public:\r
-       TransitionInfo() : type_(Cut), duration_(0), borderWidth_(0), borderColor_(TEXT("#00000000")), direction_(FromLeft)\r
-       {}\r
-\r
-       ~TransitionInfo()\r
-       {}\r
-\r
-       TransitionType          type_;\r
-       unsigned short          duration_;\r
-       unsigned short          borderWidth_;\r
-       tstring                 borderImage_;\r
-       tstring                 borderColor_;\r
-       TransitionDirection     direction_;\r
-};\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/VersionNo.h b/server/VersionNo.h
deleted file mode 100644 (file)
index bd13733..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*-----------------------------------------------------------\r
-  VERSION CONTROL BUILD SYSTEM                               \r
-  This header file was created by VERBUILD v1.0.1            \r
-  -----------------------------------------------------------\r
-  help : verbuild -?                                         \r
-  info : http://www.yeamaec.com                              \r
-         yeamaec@hanafos.com ,krkim@yeamaec.com              \r
------------------------------------------------------------*/\r
-\r
-#ifndef VERSIONNO__H\r
-#define VERSIONNO__H\r
-\r
-#define VERSION_FULL           1.8.10082.884\r
-\r
-#define VERSION_BASEYEAR       2000\r
-#define VERSION_DATE           "2010-03-24"\r
-#define VERSION_TIME           "14:59:28"\r
-\r
-#define VERSION_MAJOR          1\r
-#define VERSION_MINOR          8\r
-#define VERSION_BUILDNO        10082\r
-#define VERSION_EXTEND         884\r
-\r
-#define VERSION_FILE           1,8,10082,884\r
-#define VERSION_PRODUCT        1,5,7340,5\r
-#define VERSION_FILESTR        "1,8,10082,884"\r
-#define VERSION_PRODUCTSTR     "1,8,0\0"\r
-\r
-#endif\r
diff --git a/server/VideoConsumer.h b/server/VideoConsumer.h
deleted file mode 100644 (file)
index 217e13a..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef __VIDEO_CONSUMER_H__\r
-#define __VIDEO_CONSUMER_H__\r
-\r
-namespace caspar {\r
-\r
-class IPlaybackControl;\r
-class MediaProducer;\r
-\r
-class IVideoConsumer\r
-{\r
-public:\r
-       virtual ~IVideoConsumer() {}\r
-       virtual IPlaybackControl* GetPlaybackControl() const = 0;\r
-       virtual void EnableVideoOutput() = 0;\r
-       virtual void DisableVideoOutput() = 0;\r
-       virtual bool SetupDevice(unsigned int deviceIndex) = 0;\r
-       virtual bool ReleaseDevice() = 0;\r
-       virtual const TCHAR* GetFormatDescription() const = 0;\r
-\r
-       virtual bool SetVideoFormat(const tstring& strDesiredFrameFormat)\r
-       {\r
-               LOG << TEXT("SetVideoFormat is no supported");\r
-               return false; \r
-       }\r
-};\r
-typedef std::tr1::shared_ptr<IVideoConsumer> VideoConsumerPtr;\r
-\r
-}      //namespace caspar\r
-#endif //__VIDEO_CONSUMER_H__
\ No newline at end of file
diff --git a/server/Window.cpp b/server/Window.cpp
deleted file mode 100644 (file)
index d7e1856..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "stdafx.h"\r
-\r
-#include "window.h"\r
-#include "resource.h"\r
-\r
-namespace caspar {\r
-\r
-using namespace utils;\r
-\r
-Window::Window() : _hwnd(NULL), _hinstance(NULL), _hdc(NULL)\r
-{\r
-}\r
-\r
-Window::~Window()\r
-{\r
-       Destroy();\r
-}\r
-\r
-bool Window::Initialize(HINSTANCE hinstance, const TCHAR* windowTitle, const TCHAR* className)\r
-{\r
-       _hinstance = hinstance;\r
-       _classname = className;\r
-\r
-    WNDCLASSEX wndClass;         // Window class\r
-    ZeroMemory(&wndClass, sizeof(wndClass)); // Clear the window class structure\r
-    wndClass.cbSize = sizeof(WNDCLASSEX); \r
-    wndClass.style          = CS_HREDRAW | CS_VREDRAW | CS_CLASSDC;\r
-    wndClass.lpfnWndProc    = (WNDPROC)WndProc;\r
-    wndClass.cbClsExtra     = 0;\r
-    wndClass.cbWndExtra     = 0;\r
-    wndClass.hInstance      = _hinstance;\r
-    wndClass.hIcon          = LoadIcon(_hinstance, MAKEINTRESOURCE(IDI_ICON1));\r
-    wndClass.hCursor        = LoadCursor(NULL, IDC_ARROW);\r
-    wndClass.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);\r
-    wndClass.lpszMenuName   = NULL;//MAKEINTRESOURCE(IDR_MAINMENU);\r
-    wndClass.lpszClassName  = _classname.c_str();\r
-    wndClass.hIconSm        = 0;\r
-\r
-    if (RegisterClassEx(&wndClass) == 0)// Attemp to register the window class\r
-    {\r
-               LOG << TEXT("WINDOW ERROR: Failed to register the window class!") << LogStream::Flush;\r
-        return false;\r
-    }\r
-    DWORD dwStyle;              // Window styles\r
-    DWORD dwExStyle;            // Extended window styles\r
-\r
-    dwStyle = WS_OVERLAPPEDWINDOW |        // Creates an overlapping window\r
-              WS_CLIPCHILDREN |            // Doesn"t draw within child windows\r
-              WS_CLIPSIBLINGS;              // Doesn"t draw within sibling windows\r
-    dwExStyle = WS_EX_APPWINDOW |          // Top level window\r
-                WS_EX_WINDOWEDGE;           // Border with a raised edge\r
-    \r
-    //adjust window size\r
-    RECT rMain;\r
-    rMain.left = 0;\r
-    rMain.right = 720;\r
-    rMain.top = 0;\r
-    rMain.bottom = 576;  \r
-\r
-    AdjustWindowRect(&rMain, dwStyle, 0);\r
-\r
-    // Attempt to create the actual window\r
-    _hwnd = CreateWindowEx( dwExStyle,       // Extended window styles\r
-                            _classname.c_str(),   // Class name\r
-                            windowTitle,       // Window title (caption)\r
-                            dwStyle,         // Window styles\r
-                            0, 0,            // Window position\r
-                            rMain.right - rMain.left,\r
-                            rMain.bottom - rMain.top,   // Size of window\r
-                            0,               // No parent window\r
-                            0,               // No menu\r
-                            _hinstance,      // Instance\r
-                            0);            // Pass nothing to WM_CREATE\r
-\r
-    if(_hwnd == 0) \r
-    {\r
-        Destroy();\r
-        LOG << TEXT("WINDOW ERROR: Unable to create window!") << LogStream::Flush;\r
-        return false;\r
-    }\r
-\r
-    ShowWindow(_hwnd, SW_SHOW);\r
-    SetForegroundWindow(_hwnd);\r
-    SetFocus(_hwnd);\r
-\r
-\r
-       //TEST: select a more appropriate pixelformat\r
-       _hdc = ::GetDC(_hwnd);\r
-\r
-       PIXELFORMATDESCRIPTOR pfd = \r
-       {\r
-               sizeof(PIXELFORMATDESCRIPTOR),          //size of struct\r
-               1,                                                                      //version number\r
-               //PFD_DRAW_TO_WINDOW |                          //Format must support draw to window\r
-               PFD_DRAW_TO_BITMAP |                            //Format must support draw to bitmap\r
-               PFD_DOUBLEBUFFER_DONTCARE |                     //Format does not have to support doublebuffer\r
-               PFD_DEPTH_DONTCARE,                                     //Formet does not have to support depthbuffer\r
-               PFD_TYPE_RGBA,                                          //Request RGBA format\r
-               24,                                                                     //Color depth\r
-               0,0,0,0,0,0,                                            //colorbits ignored\r
-               8,                                                                      //8-bit alpha-buffer\r
-               0,                                                                      //shift bit ignored\r
-               0,                                                                      //no accumulation-buffer\r
-               0,0,0,0,                                                        //Accumulation bits ignored\r
-               0,                                                                      //no depth-buffer\r
-               0,                                                                      //no stencil-buffer\r
-               0,                                                                      //no auxiliary-buffer\r
-               PFD_MAIN_PLANE,                                         //Main drawing layer\r
-               0,                                                                      //RESERVED\r
-               0,0,0                                                           //Layer masks ignored\r
-       };\r
-\r
-       unsigned int nPixelFormat = ChoosePixelFormat(_hdc, &pfd);\r
-       if(nPixelFormat) {\r
-               if(!SetPixelFormat(_hdc, nPixelFormat, &pfd)) {\r
-                       ;\r
-               }\r
-       }\r
-       //END TEST: select a more appropriate pixelformat\r
-/*\r
-       //TEST: give flash access to a directdraw device\r
-       IDirectDrawFactory* pDDF = NULL;\r
-       pDD_ = NULL;\r
-       CComBSTR ddfGUID(_T("{4FD2A832-86C8-11d0-8FCA-00C04FD9189D}"));\r
-       CLSID clsid;\r
-       HRESULT hr = CLSIDFromString((LPOLESTR)ddfGUID, &clsid);\r
-\r
-       hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, GUID_DDFactory, (void **)&pDDF);\r
-       if(pDDF != 0) {\r
-               pDDF->CreateDirectDraw(NULL, _hwnd, DDSCL_NORMAL, NULL, NULL, &pDD_);\r
-               pDDF->Release();\r
-       }\r
-       //END TEST: give flash access to a directdraw device\r
-*/\r
-       return true;\r
-}\r
-\r
-void Window::Destroy()\r
-{\r
-/*     if(pDD_ != 0) {\r
-               pDD_->Release();\r
-               pDD_ = 0;\r
-       }\r
-*/\r
-       // Attempts to destroy the window\r
-       if(_hwnd) {\r
-               DestroyWindow(_hwnd);\r
-               _hwnd = NULL;\r
-       }\r
-\r
-    // Attempts to unregister the window class\r
-    if (!UnregisterClass(_classname.c_str(), _hinstance))\r
-    {\r
-        LOG << TEXT("WINDOW ERROR: Unable to unregister window class!") << LogStream::Flush;\r
-        _hinstance = NULL;\r
-    }\r
-}\r
-\r
-}
\ No newline at end of file
diff --git a/server/Window.h b/server/Window.h
deleted file mode 100644 (file)
index b98cdd1..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-\r
-#pragma once\r
-\r
-#include <string>\r
-#include <memory>\r
-//struct IDirectDraw;\r
-\r
-//extern const GUID GUID_DDFactory;\r
-//extern const GUID GUID_DD3;\r
-\r
-namespace caspar\r
-{\r
-       class Window\r
-       {\r
-       public:\r
-               Window();\r
-               virtual ~Window();\r
-\r
-               bool Initialize(HINSTANCE, const TCHAR* windowTitle, const TCHAR* className);\r
-               void Destroy();\r
-\r
-               HWND getHwnd()\r
-               {\r
-                       return _hwnd;\r
-               }\r
-               HINSTANCE getInstance()\r
-               {\r
-                       return _hinstance;\r
-               }\r
-\r
-//             IDirectDraw* pDD_;\r
-       private:\r
-               HDC                     _hdc;\r
-               HWND            _hwnd;\r
-               HINSTANCE       _hinstance;\r
-               tstring _classname;\r
-       };\r
-\r
-       typedef std::tr1::shared_ptr<Window> WindowPtr;\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/amcp/AMCPCommand.h b/server/amcp/AMCPCommand.h
deleted file mode 100644 (file)
index 3e7cc32..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef __AMCPCOMMAND_H__\r
-#define __AMCPCOMMAND_H__\r
-\r
-#include "..\Channel.h"\r
-#include "..\io\clientinfo.h"\r
-#include <string>\r
-#include <vector>\r
-\r
-namespace caspar {\r
-namespace amcp {\r
-\r
-       enum AMCPCommandCondition {\r
-               ConditionGood = 1,\r
-               ConditionTemporarilyBad,\r
-               ConditionPermanentlyBad\r
-       };\r
-\r
-       enum AMCPCommandScheduling\r
-       {\r
-               Default = 0,\r
-               AddToQueue,\r
-               ImmediatelyAndClear\r
-       };\r
-\r
-       class AMCPCommand\r
-       {\r
-               AMCPCommand(const AMCPCommand&);\r
-               AMCPCommand& operator=(const AMCPCommand&);\r
-       public:\r
-               AMCPCommand();\r
-               virtual ~AMCPCommand() {}\r
-               virtual bool Execute() = 0;\r
-               virtual AMCPCommandCondition CheckConditions() = 0;\r
-\r
-               virtual bool NeedChannel() = 0;\r
-               virtual AMCPCommandScheduling GetDefaultScheduling() = 0;\r
-               virtual int GetMinimumParameters() = 0;\r
-\r
-               void SendReply();\r
-\r
-               void AddParameter(const tstring& param) {\r
-                       _parameters.push_back(param);\r
-               }\r
-               void SetClientInfo(caspar::IO::ClientInfoPtr& s) {\r
-                       pClientInfo_ = s;\r
-               }\r
-               caspar::IO::ClientInfoPtr GetClientInfo() {\r
-                       return pClientInfo_;\r
-               }\r
-               void SetChannel(const ChannelPtr& pChannel) {\r
-                       pChannel_ = pChannel;\r
-               }\r
-               ChannelPtr GetChannel() {\r
-                       return pChannel_;\r
-               }\r
-               void SetChannelIndex(unsigned int channelIndex) {\r
-                       channelIndex_ = channelIndex;\r
-               }\r
-               unsigned int GetChannelIndex() {\r
-                       return channelIndex_;\r
-               }\r
-               virtual void Clear();\r
-\r
-               AMCPCommandScheduling GetScheduling()\r
-               {\r
-                       return scheduling_ == Default ? GetDefaultScheduling() : scheduling_;\r
-               }\r
-               void SetScheduling(AMCPCommandScheduling s)\r
-               {\r
-                       scheduling_ = s;\r
-               }\r
-\r
-       protected:\r
-               void SetReplyString(const tstring& str) {\r
-                       replyString_ = str;\r
-               }\r
-               std::vector<tstring> _parameters;\r
-\r
-       private:\r
-               unsigned int channelIndex_;\r
-               caspar::IO::ClientInfoPtr pClientInfo_;\r
-               ChannelPtr pChannel_;\r
-               AMCPCommandScheduling scheduling_;\r
-               tstring replyString_;\r
-       };\r
-\r
-       typedef std::tr1::shared_ptr<AMCPCommand> AMCPCommandPtr;\r
-\r
-}      //namespace amcp\r
-}      //namespace caspar\r
-\r
-#endif //__AMCPCOMMAND_H__
\ No newline at end of file
diff --git a/server/amcp/AMCPCommandQueue.cpp b/server/amcp/AMCPCommandQueue.cpp
deleted file mode 100644 (file)
index 152b06b..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\stdafx.h"\r
-\r
-#include "AMCPCommandQueue.h"\r
-\r
-namespace caspar {\r
-namespace amcp {\r
-\r
-using namespace utils;\r
-\r
-AMCPCommandQueue::AMCPCommandQueue() : newCommandEvent_(FALSE, FALSE) {\r
-}\r
-\r
-AMCPCommandQueue::~AMCPCommandQueue() {\r
-       Stop();\r
-}\r
-\r
-bool AMCPCommandQueue::Start() {\r
-       if(commandPump_.IsRunning())\r
-               return false;\r
-\r
-       return commandPump_.Start(this);\r
-}\r
-\r
-void AMCPCommandQueue::Stop() {\r
-       commandPump_.Stop();\r
-}\r
-\r
-void AMCPCommandQueue::AddCommand(AMCPCommandPtr pNewCommand)\r
-{\r
-       {\r
-               Lock lock(*this);\r
-\r
-               if(pNewCommand->GetScheduling() == ImmediatelyAndClear) {\r
-                       //Clears the queue, objects are deleted automatically\r
-                       commands_.clear();\r
-\r
-                       commands_.push_back(pNewCommand);\r
-                       LOG << LogLevel::Verbose << TEXT("Cleared queue and added command");\r
-               }\r
-               else {\r
-                       commands_.push_back(pNewCommand);\r
-                       LOG << LogLevel::Verbose << TEXT("Added command to end of queue");\r
-               }\r
-       }\r
-\r
-       SetEvent(newCommandEvent_);\r
-}\r
-\r
-void AMCPCommandQueue::Run(HANDLE stopEvent)\r
-{\r
-       bool logTemporarilyBadState = true;\r
-       AMCPCommandPtr pCurrentCommand;\r
-\r
-       LOG << LogLevel::Verbose << TEXT("CommandPump started");\r
-\r
-       while(WaitForSingleObject(stopEvent, 0) != WAIT_OBJECT_0) {\r
-               DWORD waitResult = WaitForSingleObject(newCommandEvent_, 50);\r
-               if(waitResult == WAIT_OBJECT_0) {\r
-                       Lock lock(*this);\r
-\r
-                       if(commands_.size() > 0) {\r
-                               LOG << LogLevel::Debug << TEXT("Found ") << commands_.size() << TEXT(" commands in queue");\r
-\r
-                               AMCPCommandPtr pNextCommand = commands_.front();\r
-\r
-                               if(pCurrentCommand == 0 || pNextCommand->GetScheduling() == ImmediatelyAndClear) {\r
-                                       pCurrentCommand = pNextCommand;\r
-                                       commands_.pop_front();\r
-                               }\r
-                       }\r
-               }\r
-\r
-               if(pCurrentCommand != 0) {\r
-                       AMCPCommandCondition condition = pCurrentCommand->CheckConditions();\r
-                       if(condition == ConditionTemporarilyBad) {\r
-                               if(logTemporarilyBadState) {\r
-                                       LOG << LogLevel::Debug << TEXT("Cound not execute command right now, waiting a sec");\r
-                                       logTemporarilyBadState = false;\r
-                               }\r
-\r
-                               //don't fail, just wait for a while and then try again\r
-                               continue;\r
-                       }\r
-                       else if(condition == ConditionGood) {\r
-                               if(pCurrentCommand->Execute()) {\r
-                                       LOG << LogLevel::Verbose << TEXT("Executed command");\r
-                               }\r
-                               else {\r
-                                       LOG << LogLevel::Verbose << TEXT("Failed to executed command");\r
-                               }               \r
-                       }\r
-                       else {  //condition == ConditionPermanentlyBad\r
-                               LOG << TEXT("Invalid commandobject");\r
-                       }\r
-\r
-                       pCurrentCommand->SendReply();\r
-                       pCurrentCommand.reset();\r
-\r
-                       newCommandEvent_.Set();\r
-                       logTemporarilyBadState = true;\r
-\r
-                       LOG << LogLevel::Debug << TEXT("Ready for a new command");\r
-               }\r
-       }\r
-\r
-       LOG << LogLevel::Verbose << TEXT("CommandPump ended");\r
-}\r
-\r
-bool AMCPCommandQueue::OnUnhandledException(const std::exception& ex) throw() {\r
-       bool bDoRestart = true;\r
-\r
-       try \r
-       {\r
-               LOG << LogLevel::Critical << TEXT("UNHANDLED EXCEPTION in commandqueue. Message: ") << ex.what();\r
-       }\r
-       catch(...)\r
-       {\r
-               bDoRestart = false;\r
-       }\r
-\r
-       return bDoRestart;\r
-}\r
-\r
-}      //namespace amcp\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/amcp/AMCPCommandQueue.h b/server/amcp/AMCPCommandQueue.h
deleted file mode 100644 (file)
index 934004d..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _AMCPCOMMANDQUEUE_H__\r
-#define _AMCPCOMMANDQUEUE_H__\r
-\r
-#pragma once\r
-\r
-#include <list>\r
-#include "..\utils\thread.h"\r
-#include "..\utils\Lockable.h"\r
-\r
-#include "AMCPCommand.h"\r
-\r
-namespace caspar {\r
-namespace amcp {\r
-\r
-class AMCPCommandQueue : public utils::IRunnable, private utils::LockableObject\r
-{\r
-       AMCPCommandQueue(const AMCPCommandQueue&);\r
-       AMCPCommandQueue& operator=(const AMCPCommandQueue&);\r
-public:\r
-       AMCPCommandQueue();\r
-       ~AMCPCommandQueue();\r
-\r
-       bool Start();\r
-       void Stop();\r
-       void AddCommand(AMCPCommandPtr pCommand);\r
-\r
-private:\r
-       utils::Thread                           commandPump_;\r
-       virtual void Run(HANDLE stopEvent);\r
-       virtual bool OnUnhandledException(const std::exception& ex) throw();\r
-\r
-       utils::Event newCommandEvent_;\r
-\r
-       //Needs synro-protection\r
-       std::list<AMCPCommandPtr>       commands_;\r
-};\r
-typedef std::tr1::shared_ptr<AMCPCommandQueue> AMCPCommandQueuePtr;\r
-\r
-}      //namespace amcp\r
-}      //namespace caspar\r
-\r
-#endif //_AMCPCOMMANDQUEUE_H__
\ No newline at end of file
diff --git a/server/amcp/AMCPCommandsImpl.cpp b/server/amcp/AMCPCommandsImpl.cpp
deleted file mode 100644 (file)
index 63f854e..0000000
+++ /dev/null
@@ -1,1214 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-#include "AMCPCommandsImpl.h"\r
-#include "AMCPProtocolStrategy.h"\r
-#include "..\MediaManager.h"\r
-#include "..\Application.h"\r
-#include "..\channel.h"\r
-#include "..\FileInfo.h"\r
-#include "..\utils\findwrapper.h"\r
-#include "..\utils\fileexists.h"\r
-#include "..\cg\cgcontrol.h"\r
-\r
-#include <algorithm>\r
-#include <locale>\r
-#include <fstream>\r
-#include <cctype>\r
-#include <io.h>\r
-\r
-/* Return codes\r
-\r
-100 [action]                   Information om att nÃ¥got har hänt  \r
-101 [action]                   Information om att nÃ¥got har hänt, en rad data skickas  \r
-\r
-202 [kommando] OK              Kommandot har utförts  \r
-201 [kommando] OK              Kommandot har utförts, och en rad data skickas tillbaka  \r
-200 [kommando] OK              Kommandot har utförts, och flera rader data skickas tillbaka. Avslutas med tomrad  \r
-\r
-400 ERROR                              Kommandot kunde inte förstÃ¥s  \r
-401 [kommando] ERROR   Ogiltig kanal  \r
-402 [kommando] ERROR   Parameter saknas  \r
-403 [kommando] ERROR   Ogiltig parameter  \r
-404 [kommando] ERROR   Mediafilen hittades inte  \r
-\r
-500 FAILED                             Internt serverfel  \r
-501 [kommando] FAILED  Internt serverfel  \r
-502 [kommando] FAILED  Oläslig mediafil  \r
-\r
-600 [kommando] FAILED  funktion ej implementerad\r
-*/\r
-\r
-namespace caspar {\r
-namespace amcp {\r
-\r
-using namespace utils;\r
-\r
-AMCPCommand::AMCPCommand() : channelIndex_(0), scheduling_(Default)\r
-{}\r
-\r
-void AMCPCommand::SendReply() {\r
-       if(pClientInfo_) {\r
-               if(replyString_.length() > 0) {\r
-                       pClientInfo_->Send(replyString_);\r
-               }\r
-       }\r
-}\r
-\r
-void AMCPCommand::Clear() {\r
-       pChannel_.reset();\r
-       pClientInfo_.reset();\r
-       channelIndex_ = 0;\r
-       _parameters.clear();\r
-}\r
-\r
-//////////\r
-// LOAD\r
-AMCPCommandCondition LoadCommand::CheckConditions()\r
-{\r
-       return ConditionGood;\r
-}\r
-\r
-bool LoadCommand::Execute()\r
-{\r
-       if(!GetChannel())\r
-               return false;\r
-       if(_parameters.size() < 1)\r
-               return false;\r
-\r
-       bool bLoop = false;\r
-       FileInfo fileInfo;\r
-       MediaManagerPtr pMediaManager;\r
-       \r
-       tstring fullFilename = _parameters[0];\r
-\r
-       if(_parameters.size()>1)\r
-       {\r
-               transform(_parameters[1].begin(), _parameters[1].end(), _parameters[1].begin(), toupper);\r
-               if(_parameters[1] == TEXT("LOOP"))\r
-                       bLoop = true;\r
-       }\r
-\r
-       if(fullFilename[0] == TEXT('#'))\r
-               pMediaManager = GetApplication()->GetColorMediaManager();\r
-       else\r
-               pMediaManager = GetApplication()->FindMediaFile(GetApplication()->GetMediaFolder()+fullFilename, &fileInfo);\r
-\r
-       for(unsigned int i=0;i<_parameters.size();++i)\r
-               transform(_parameters[i].begin(), _parameters[i].end(), _parameters[i].begin(), toupper);\r
-\r
-       if(pMediaManager != 0)\r
-       {\r
-               if(fileInfo.filetype.length()>0)\r
-               {\r
-                       fullFilename += TEXT(".");\r
-                       fullFilename += fileInfo.filetype;\r
-               }\r
-\r
-               MediaProducerPtr pFP;\r
-               if(fullFilename[0] == TEXT('#'))\r
-                       pFP = pMediaManager->CreateProducer(fullFilename);\r
-               else\r
-                       pFP = pMediaManager->CreateProducer(GetApplication()->GetMediaFolder()+fullFilename);\r
-\r
-               if(GetChannel()->Load(pFP, bLoop))\r
-               {\r
-                       LOG << LogLevel::Verbose << TEXT("Loaded ") <<  fullFilename << TEXT(" successfully");\r
-\r
-                       SetReplyString(TEXT("202 LOAD OK\r\n"));\r
-\r
-                       GetChannel()->GetMonitor().Inform(LOAD, _parameters[0]);\r
-                       return true;\r
-               }\r
-               else\r
-               {\r
-                       LOG << LogLevel::Verbose << TEXT("Failed to load ") << fullFilename << TEXT(". It might be corrupt");\r
-\r
-                       SetReplyString(TEXT("502 LOAD FAILED\r\n"));\r
-                       return false;\r
-               }\r
-       }\r
-       //else\r
-       LOG << LogLevel::Verbose << TEXT("Could not find ") << fullFilename;\r
-\r
-       SetReplyString(TEXT("404 LOAD ERROR\r\n"));\r
-       return false;\r
-\r
-}\r
-\r
-//////////\r
-// LOADBG\r
-AMCPCommandCondition LoadbgCommand::CheckConditions()\r
-{\r
-       return ConditionGood;\r
-}\r
-\r
-bool LoadbgCommand::Execute()\r
-{\r
-       if(!GetChannel())\r
-               return false;\r
-       if(_parameters.size() < 1)\r
-               return false;\r
-\r
-       TransitionInfo transitionInfo;\r
-\r
-       FileInfo fileInfo;\r
-       MediaManagerPtr pMediaManager;\r
-\r
-       tstring fullFilename = _parameters[0];\r
-\r
-       bool bLoop = false;\r
-       unsigned short transitionParameterIndex = 1;\r
-\r
-       if(_parameters.size()>1)\r
-       {\r
-               transform(_parameters[1].begin(), _parameters[1].end(), _parameters[1].begin(), toupper);\r
-               if(_parameters[1] == TEXT("LOOP"))\r
-               {\r
-                       ++transitionParameterIndex;\r
-                       bLoop = true;\r
-               }\r
-       }\r
-\r
-       if(fullFilename[0] == TEXT('#'))\r
-               pMediaManager = GetApplication()->GetColorMediaManager();\r
-       else\r
-               pMediaManager = GetApplication()->FindMediaFile(GetApplication()->GetMediaFolder()+fullFilename, &fileInfo);\r
-\r
-       //Setup transition info\r
-       if(_parameters.size()>transitionParameterIndex) //type\r
-       {\r
-               tstring transitionType = _parameters[transitionParameterIndex];\r
-               transform(transitionType.begin(), transitionType.end(), transitionType.begin(), toupper);\r
-\r
-               if(transitionType == TEXT("CUT"))\r
-                       transitionInfo.type_ = Cut;\r
-               else if(transitionType == TEXT("MIX"))\r
-                       transitionInfo.type_ = Mix;\r
-               else if(transitionType == TEXT("PUSH"))\r
-                       transitionInfo.type_ = Push;\r
-               else if(transitionType == TEXT("SLIDE"))\r
-                       transitionInfo.type_ = Slide;\r
-               else if(transitionType == TEXT("WIPE"))\r
-                       transitionInfo.type_ = Wipe;\r
-\r
-               if(_parameters.size() > static_cast<unsigned short>(transitionParameterIndex+1))        //duration\r
-               {\r
-                       int duration = _ttoi(_parameters[transitionParameterIndex+1].c_str());\r
-                       if(duration > 0)\r
-                               transitionInfo.duration_ = duration;\r
-\r
-                       if(_parameters.size() > static_cast<unsigned short>(transitionParameterIndex+2))        //direction\r
-                       {\r
-                               tstring direction = _parameters[transitionParameterIndex+2];\r
-                               transform(direction.begin(), direction.end(), direction.begin(), toupper);\r
-\r
-                               if(direction == TEXT("FROMLEFT"))\r
-                                       transitionInfo.direction_ = FromLeft;\r
-                               else if(direction == TEXT("FROMRIGHT"))\r
-                                       transitionInfo.direction_ = FromRight;\r
-                               else if(direction == TEXT("LEFT"))\r
-                                       transitionInfo.direction_ = FromRight;\r
-                               else if(direction == TEXT("RIGHT"))\r
-                                       transitionInfo.direction_ = FromLeft;\r
-\r
-                               if(_parameters.size() > static_cast<unsigned short>(transitionParameterIndex+3))        //border\r
-                               {\r
-                                       tstring border = _parameters[transitionParameterIndex+3];\r
-                                       if(border.size()>0)\r
-                                       {\r
-                                               if(border[0] == TEXT('#'))\r
-                                                       transitionInfo.borderColor_ = border;\r
-                                               else\r
-                                                       transitionInfo.borderImage_ = border;\r
-                                       }\r
-\r
-                                       if(_parameters.size() > static_cast<unsigned short>(transitionParameterIndex+4))        //border width\r
-                                       {\r
-                                               transitionInfo.borderWidth_ = _ttoi(_parameters[transitionParameterIndex+4].c_str());\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-       //Perform loading of the clip\r
-       if(pMediaManager != 0)\r
-       {\r
-               if(fileInfo.filetype.length()>0)\r
-               {\r
-                       fullFilename += TEXT(".");\r
-                       fullFilename += fileInfo.filetype;\r
-               }\r
-\r
-               MediaProducerPtr pFP;\r
-               if(fullFilename[0] == TEXT('#'))\r
-                       pFP = pMediaManager->CreateProducer(fullFilename);\r
-               else\r
-                       pFP = pMediaManager->CreateProducer(GetApplication()->GetMediaFolder()+fullFilename);\r
-\r
-               if(GetChannel()->LoadBackground(pFP, transitionInfo, bLoop))\r
-               {\r
-                       LOG << LogLevel::Verbose << TEXT("Loaded ") << fullFilename << TEXT(" successfully to background");\r
-                       SetReplyString(TEXT("202 LOADBG OK\r\n"));\r
-\r
-                       GetChannel()->GetMonitor().Inform(LOADBG, _parameters[0]);\r
-                       return true;\r
-               }\r
-               else\r
-               {\r
-                       LOG << LogLevel::Verbose << TEXT("Failed to load ") << fullFilename << TEXT(" to background. It might be corrupt");\r
-                       SetReplyString(TEXT("502 LOADBG FAILED\r\n"));\r
-                       return false;\r
-               }\r
-       }\r
-       //else\r
-       LOG << LogLevel::Verbose << TEXT("Could not find ") << fullFilename;\r
-       SetReplyString(TEXT("404 LOADBG ERROR\r\n"));\r
-       return false;\r
-\r
-}\r
-\r
-//////////\r
-// PLAY\r
-AMCPCommandCondition PlayCommand::CheckConditions()\r
-{\r
-       return ConditionGood;\r
-}\r
-\r
-bool PlayCommand::Execute()\r
-{\r
-       if(!GetChannel())\r
-               return false;\r
-\r
-       if(GetChannel()->Play())\r
-       {\r
-               SetReplyString(TEXT("202 PLAY OK\r\n"));\r
-               return true;\r
-       }\r
-\r
-       SetReplyString(TEXT("501 PLAY FAILED\r\n"));\r
-       return false;\r
-}\r
-\r
-//////////\r
-// STOP\r
-AMCPCommandCondition StopCommand::CheckConditions()\r
-{\r
-       return ConditionGood;\r
-}\r
-\r
-bool StopCommand::Execute()\r
-{\r
-       if(!GetChannel())\r
-               return false;\r
-\r
-       if(GetChannel()->Stop())\r
-       {\r
-               SetReplyString(TEXT("202 STOP OK\r\n"));\r
-               return true;\r
-       }\r
-\r
-       SetReplyString(TEXT("501 STOP FAILED\r\n"));\r
-       return false;\r
-}\r
-\r
-//////////\r
-// CLEAR\r
-AMCPCommandCondition ClearCommand::CheckConditions()\r
-{\r
-       return ConditionGood;\r
-}\r
-\r
-bool ClearCommand::Execute()\r
-{\r
-       if(!GetChannel())\r
-               return false;\r
-\r
-       if(GetChannel()->Clear())\r
-       {\r
-               SetReplyString(TEXT("202 CLEAR OK\r\n"));\r
-\r
-               GetChannel()->GetMonitor().Inform(CLEAR);\r
-               return true;\r
-       }\r
-\r
-       SetReplyString(TEXT("501 CLEAR FAILED\r\n"));\r
-       return false;\r
-}\r
-\r
-//////////\r
-// PARAM\r
-AMCPCommandCondition ParamCommand::CheckConditions()\r
-{\r
-       return ConditionGood;\r
-}\r
-\r
-bool ParamCommand::Execute()\r
-{\r
-       if(_parameters.size() < 1)\r
-               return false;\r
-\r
-       if(!GetChannel())\r
-               return false;\r
-\r
-       if(GetChannel()->Param(_parameters[0]))\r
-       {\r
-               SetReplyString(TEXT("202 PARAM OK\r\n"));\r
-               return true;\r
-       }\r
-\r
-       SetReplyString(TEXT("501 PARAM FAILED\r\n"));\r
-       return true;\r
-}\r
-\r
-//////////\r
-// CG\r
-AMCPCommandCondition CGCommand::CheckConditions()\r
-{\r
-       return ConditionGood;\r
-}\r
-\r
-bool CGCommand::Execute()\r
-{\r
-       if(_parameters.size() < 1)\r
-               return false;\r
-       if(!GetChannel())\r
-               return false;\r
-\r
-       tstring command = _parameters[0];\r
-       std::transform(command.begin(), command.end(), command.begin(), toupper);\r
-       if(command == TEXT("ADD"))\r
-               return ExecuteAdd();\r
-       else if(command == TEXT("PLAY"))\r
-               return ExecutePlay();\r
-       else if(command == TEXT("STOP"))\r
-               return ExecuteStop();\r
-       else if(command == TEXT("NEXT"))\r
-               return ExecuteNext();\r
-       else if(command == TEXT("REMOVE"))\r
-               return ExecuteRemove();\r
-       else if(command == TEXT("CLEAR"))\r
-               return ExecuteClear();\r
-       else if(command == TEXT("UPDATE"))\r
-               return ExecuteUpdate();\r
-       else if(command == TEXT("INVOKE"))\r
-               return ExecuteInvoke();\r
-       else if(command == TEXT("INFO"))\r
-               return ExecuteInfo();\r
-\r
-       SetReplyString(TEXT("403 CG ERROR\r\n"));\r
-       return false;\r
-}\r
-\r
-bool CGCommand::ValidateLayer(const tstring& layerstring) {\r
-       int length = layerstring.length();\r
-       for(int i = 0; i < length; ++i) {\r
-               if(!_istdigit(layerstring[i])) {\r
-                       return false;\r
-               }\r
-       }\r
-\r
-       return true;\r
-}\r
-\r
-bool CGCommand::ExecuteAdd() {\r
-       //CG 1 ADD 0 "templatefolder/templatename" [STARTLABEL] 0/1 [DATA]\r
-\r
-       int layer = 0;                          //_parameters[1]\r
-//     tstring templateName;   //_parameters[2]\r
-       tstring label;          //_parameters[3]\r
-       bool bDoStart = false;          //_parameters[3] alt. _parameters[4]\r
-//     tstring data;                   //_parameters[4] alt. _parameters[5]\r
-\r
-       if(_parameters.size() < 4) {\r
-               SetReplyString(TEXT("402 CG ERROR\r\n"));\r
-               return false;\r
-       }\r
-       unsigned int dataIndex = 4;\r
-\r
-       if(!ValidateLayer(_parameters[1])) {\r
-               SetReplyString(TEXT("403 CG ERROR\r\n"));\r
-               return false;\r
-       }\r
-\r
-       layer = _ttoi(_parameters[1].c_str());\r
-\r
-       if(_parameters[3].length() > 1) {       //read label\r
-               label = _parameters[3];\r
-               ++dataIndex;\r
-\r
-               if(_parameters.size() > 4 && _parameters[4].length() > 0)       //read play-on-load-flag\r
-                       bDoStart = (_parameters[4][0]==TEXT('1')) ? true : false;\r
-               else {\r
-                       SetReplyString(TEXT("402 CG ERROR\r\n"));\r
-                       return false;\r
-               }\r
-       }\r
-       else if(_parameters[3].length() > 0) {  //read play-on-load-flag\r
-               bDoStart = (_parameters[3][0]==TEXT('1')) ? true : false;\r
-       }\r
-       else {\r
-               SetReplyString(TEXT("403 CG ERROR\r\n"));\r
-               return false;\r
-       }\r
-\r
-       const TCHAR* pDataString = 0;\r
-       tstringstream data;\r
-       tstring dataFromFile;\r
-       if(_parameters.size() > dataIndex) {    //read data\r
-               const tstring& dataString = _parameters[dataIndex];\r
-\r
-               if(dataString[0] == TEXT('<')) {\r
-                       //the data is an XML-string\r
-                       pDataString = dataString.c_str();\r
-               }\r
-               else {\r
-                       //The data is not an XML-string, it must be a filename\r
-                       tstring filename = GetApplication()->GetDataFolder();\r
-                       filename.append(dataString);\r
-                       filename.append(TEXT(".ftd"));\r
-\r
-                       //open file\r
-                       std::wifstream datafile(filename.c_str());\r
-                       if(datafile) {\r
-                               //read all data\r
-                               data << datafile.rdbuf();\r
-                               datafile.close();\r
-\r
-                               //extract data to _parameters\r
-                               dataFromFile = data.str();\r
-                               pDataString = dataFromFile.c_str();\r
-                       }\r
-               }\r
-       }\r
-\r
-       tstring fullFilename = GetApplication()->GetTemplateFolder() + _parameters[2];\r
-       tstring extension;\r
-       if(GetApplication()->FindTemplate(fullFilename, &extension))\r
-       {\r
-               tstring filename = _parameters[2];\r
-               filename.append(extension);\r
-\r
-               GetChannel()->GetCGControl()->Add(layer, filename, bDoStart, label, (pDataString!=0) ? pDataString : TEXT(""));\r
-               SetReplyString(TEXT("202 CG OK\r\n"));\r
-\r
-               GetChannel()->GetMonitor().Inform(CG_ADD, _parameters[2]);\r
-       }\r
-       else\r
-       {\r
-               LOG << LogLevel::Verbose << TEXT("Could not find template ") << _parameters[2];\r
-               SetReplyString(TEXT("404 CG ERROR\r\n"));\r
-       }\r
-       return true;\r
-}\r
-\r
-bool CGCommand::ExecutePlay() {\r
-       if(_parameters.size() > 1) {\r
-               if(!ValidateLayer(_parameters[1])) {\r
-                       SetReplyString(TEXT("403 CG ERROR\r\n"));\r
-                       return false;\r
-               }\r
-               int layer = _ttoi(_parameters[1].c_str());\r
-               GetChannel()->GetCGControl()->Play(layer);\r
-       }\r
-       else {\r
-               SetReplyString(TEXT("402 CG ERROR\r\n"));\r
-               return true;\r
-       }\r
-\r
-       SetReplyString(TEXT("202 CG OK\r\n"));\r
-       return true;\r
-}\r
-\r
-bool CGCommand::ExecuteStop() {\r
-       if(_parameters.size() > 1) {\r
-               if(!ValidateLayer(_parameters[1])) {\r
-                       SetReplyString(TEXT("403 CG ERROR\r\n"));\r
-                       return false;\r
-               }\r
-               int layer = _ttoi(_parameters[1].c_str());\r
-               GetChannel()->GetCGControl()->Stop(layer, 0);\r
-       }\r
-       else {\r
-               SetReplyString(TEXT("402 CG ERROR\r\n"));\r
-               return true;\r
-       }\r
-\r
-       SetReplyString(TEXT("202 CG OK\r\n"));\r
-       return true;\r
-}\r
-\r
-bool CGCommand::ExecuteNext() {\r
-       if(_parameters.size() > 1) {\r
-               if(!ValidateLayer(_parameters[1])) {\r
-                       SetReplyString(TEXT("403 CG ERROR\r\n"));\r
-                       return false;\r
-               }\r
-               int layer = _ttoi(_parameters[1].c_str());\r
-               GetChannel()->GetCGControl()->Next(layer);\r
-       }\r
-       else {\r
-               SetReplyString(TEXT("402 CG ERROR\r\n"));\r
-               return true;\r
-       }\r
-\r
-       SetReplyString(TEXT("202 CG OK\r\n"));\r
-       return true;\r
-}\r
-\r
-bool CGCommand::ExecuteRemove() {\r
-       if(_parameters.size() > 1) {\r
-               if(!ValidateLayer(_parameters[1])) {\r
-                       SetReplyString(TEXT("403 CG ERROR\r\n"));\r
-                       return false;\r
-               }\r
-               int layer = _ttoi(_parameters[1].c_str());\r
-               GetChannel()->GetCGControl()->Remove(layer);\r
-       }\r
-       else {\r
-               SetReplyString(TEXT("402 CG ERROR\r\n"));\r
-               return true;\r
-       }\r
-\r
-       SetReplyString(TEXT("202 CG OK\r\n"));\r
-       return true;\r
-}\r
-\r
-bool CGCommand::ExecuteClear() {\r
-       GetChannel()->GetCGControl()->Clear();\r
-       SetReplyString(TEXT("202 CG OK\r\n"));\r
-       GetChannel()->GetMonitor().Inform(CG_CLEAR);\r
-       return true;\r
-}\r
-\r
-bool CGCommand::ExecuteUpdate() {\r
-       if(_parameters.size() > 2) {\r
-               if(!ValidateLayer(_parameters[1])) {\r
-                       SetReplyString(TEXT("403 CG ERROR\r\n"));\r
-                       return false;\r
-               }\r
-               int layer = _ttoi(_parameters[1].c_str());\r
-               //TODO: Implement indirect data loading from file. Same as in Add\r
-               GetChannel()->GetCGControl()->Update(layer, _parameters[2]);\r
-       }\r
-       else {\r
-               SetReplyString(TEXT("402 CG ERROR\r\n"));\r
-               return true;\r
-       }\r
-\r
-       SetReplyString(TEXT("202 CG OK\r\n"));\r
-       return true;\r
-}\r
-\r
-bool CGCommand::ExecuteInvoke() {\r
-       if(_parameters.size() > 2) {\r
-               if(!ValidateLayer(_parameters[1])) {\r
-                       SetReplyString(TEXT("403 CG ERROR\r\n"));\r
-                       return false;\r
-               }\r
-               int layer = _ttoi(_parameters[1].c_str());\r
-               GetChannel()->GetCGControl()->Invoke(layer, _parameters[2]);\r
-       }\r
-       else {\r
-               SetReplyString(TEXT("402 CG ERROR\r\n"));\r
-               return true;\r
-       }\r
-\r
-       SetReplyString(TEXT("202 CG OK\r\n"));\r
-       return true;\r
-}\r
-\r
-bool CGCommand::ExecuteInfo() {\r
-//     GetChannel()->GetCGControl()->Info();\r
-       SetReplyString(TEXT("600 CG FAILED\r\n"));\r
-       return true;\r
-}\r
-\r
-//////////\r
-// DATA\r
-AMCPCommandCondition DataCommand::CheckConditions()\r
-{\r
-       return ConditionGood;\r
-}\r
-\r
-bool DataCommand::Execute()\r
-{\r
-       if(_parameters.size() < 1)\r
-               return false;\r
-\r
-       tstring command = _parameters[0];\r
-       std::transform(command.begin(), command.end(), command.begin(), toupper);\r
-       if(command == TEXT("STORE"))\r
-               return ExecuteStore();\r
-       else if(command == TEXT("RETRIEVE"))\r
-               return ExecuteRetrieve();\r
-       else if(command == TEXT("LIST"))\r
-               return ExecuteList();\r
-\r
-       SetReplyString(TEXT("403 DATA ERROR\r\n"));\r
-       return false;\r
-}\r
-\r
-bool DataCommand::ExecuteStore() {\r
-       if(_parameters.size() < 3) {\r
-               SetReplyString(TEXT("402 DATA STORE ERROR\r\n"));\r
-               return false;\r
-       }\r
-\r
-       tstring filename = GetApplication()->GetDataFolder();\r
-       filename.append(_parameters[1]);\r
-       filename.append(TEXT(".ftd"));\r
-\r
-       std::wofstream datafile(filename.c_str());\r
-       if(!datafile) {\r
-               SetReplyString(TEXT("501 DATA STORE FAILED\r\n"));\r
-               return false;\r
-       }\r
-\r
-       datafile << _parameters[2];\r
-       datafile.close();\r
-\r
-       tstring replyString = TEXT("202 DATA STORE OK\r\n");\r
-       SetReplyString(replyString);\r
-       return true;\r
-}\r
-\r
-bool DataCommand::ExecuteRetrieve() {\r
-       if(_parameters.size() < 2) {\r
-               SetReplyString(TEXT("402 DATA RETRIEVE ERROR\r\n"));\r
-               return false;\r
-       }\r
-\r
-       tstring filename = GetApplication()->GetDataFolder();\r
-       filename.append(_parameters[1]);\r
-       filename.append(TEXT(".ftd"));\r
-\r
-       std::wifstream datafile(filename.c_str());\r
-       if(!datafile) {\r
-               SetReplyString(TEXT("404 DATA RETRIEVE ERROR\r\n"));\r
-               return false;\r
-       }\r
-\r
-       tstringstream reply(TEXT("201 DATA RETRIEVE OK\r\n"));\r
-       tstring line;\r
-       bool bFirstLine = true;\r
-       while(std::getline(datafile, line)) {\r
-               if(!bFirstLine)\r
-                       reply << "\\n";\r
-               else\r
-                       bFirstLine = false;\r
-\r
-               reply << line;\r
-       }\r
-       datafile.close();\r
-\r
-       reply << "\r\n";\r
-       SetReplyString(reply.str());\r
-       return true;\r
-}\r
-\r
-bool DataCommand::ExecuteList() {\r
-       tstringstream replyString;\r
-       replyString << TEXT("200 DATA LIST OK\r\n");\r
-\r
-       WIN32_FIND_DATA fileInfo;\r
-       caspar::utils::FindWrapper findWrapper(GetApplication()->GetDataFolder() + TEXT("*.ftd"), &fileInfo);\r
-       if(findWrapper.Success())\r
-       {\r
-               do\r
-               {\r
-                       tstring filename = fileInfo.cFileName;\r
-                       transform(filename.begin(), filename.end(), filename.begin(), toupper);\r
-                       \r
-                       tstring::size_type pos = filename.rfind(TEXT("."));\r
-                       if(pos != tstring::npos)\r
-                       {\r
-                               TCHAR numBuffer[32];\r
-                               TCHAR timeBuffer[32];\r
-                               TCHAR dateBuffer[32];\r
-\r
-                               unsigned __int64 fileSize = fileInfo.nFileSizeHigh;\r
-                               fileSize *= 0x100000000;\r
-                               fileSize += fileInfo.nFileSizeLow;\r
-\r
-                               _ui64tot_s(fileSize, numBuffer, 32, 10);\r
-\r
-                               SYSTEMTIME lastWriteTime;\r
-                               FileTimeToSystemTime(&(fileInfo.ftLastWriteTime), &lastWriteTime);\r
-                               GetDateFormat(LOCALE_USER_DEFAULT, 0, &lastWriteTime, _T("yyyyMMdd"), dateBuffer, sizeof(dateBuffer));\r
-                               GetTimeFormat(LOCALE_USER_DEFAULT, 0, &lastWriteTime, _T("HHmmss"), timeBuffer, sizeof(timeBuffer));\r
-\r
-                               replyString << TEXT("\"") << filename.substr(0, pos) << TEXT("\" ") << numBuffer << TEXT(" ") << dateBuffer << timeBuffer << TEXT("\r\n");\r
-                       }\r
-               }\r
-               while(findWrapper.FindNext(&fileInfo));\r
-       }\r
-       replyString << TEXT("\r\n");\r
-\r
-       SetReplyString(replyString.str());\r
-       return true;\r
-}\r
-\r
-//////////\r
-// CINF\r
-AMCPCommandCondition CinfCommand::CheckConditions()\r
-{\r
-       return ConditionGood;\r
-}\r
-\r
-bool CinfCommand::Execute()\r
-{\r
-       tstringstream replyString;\r
-\r
-       if(_parameters.size() < 1)\r
-               return false;\r
-\r
-       tstring filename = GetApplication()->GetMediaFolder()+_parameters[0];\r
-\r
-       FileInfo fileInfo;\r
-\r
-       MediaManagerPtr pMediaManager = GetApplication()->FindMediaFile(filename, &fileInfo);\r
-       if(pMediaManager != 0 && fileInfo.filetype.length() >0) //File was found\r
-       {\r
-               if(pMediaManager->getFileInfo(&fileInfo))\r
-               {\r
-                       TCHAR numBuffer[32];\r
-                       _ui64tot_s(fileInfo.size, numBuffer, 32, 10);\r
-\r
-                       replyString << TEXT("201 CINF OK\r\n\"") << fileInfo.filename << TEXT("\" ") << fileInfo.type << TEXT("/") << fileInfo.filetype << TEXT("/") << fileInfo.encoding << TEXT(" ") << numBuffer << TEXT("\r\n");\r
-\r
-                       SetReplyString(replyString.str());\r
-                       return true;\r
-               }\r
-       }\r
-\r
-       SetReplyString(TEXT("404 CINF ERROR\r\n"));\r
-       return false;\r
-}\r
-\r
-//////////\r
-// INFO\r
-AMCPCommandCondition InfoCommand::CheckConditions()\r
-{\r
-       return ConditionGood;\r
-}\r
-\r
-bool InfoCommand::Execute()\r
-{\r
-       tstringstream replyString;\r
-\r
-       if(_parameters.size() >= 1)\r
-       {\r
-               int channelIndex = _ttoi(_parameters[0].c_str())-1;\r
-               ChannelPtr pChannel = GetApplication()->GetChannel(static_cast<unsigned int>(channelIndex));\r
-\r
-               if(pChannel != 0)\r
-               {\r
-                       replyString << TEXT("201 INFO OK\r\n");\r
-                       GenerateChannelInfo(pChannel, replyString);\r
-               }\r
-               else\r
-               {\r
-                       SetReplyString(TEXT("401 INFO ERROR\r\n"));\r
-                       return false;\r
-               }\r
-       }\r
-       else\r
-       {\r
-               replyString << TEXT("200 INFO OK\r\n");\r
-\r
-               ChannelPtr pChannel;\r
-               unsigned int channelIndex = 0;\r
-               while((pChannel = GetApplication()->GetChannel(channelIndex++)) != 0)\r
-               {\r
-                       GenerateChannelInfo(pChannel, replyString);\r
-               }\r
-               replyString << TEXT("\r\n");\r
-       }\r
-\r
-       SetReplyString(replyString.str());\r
-       return true;\r
-}\r
-\r
-void InfoCommand::GenerateChannelInfo(ChannelPtr& pChannel, tstringstream& replyString)\r
-{\r
-       replyString << pChannel->GetIndex() << TEXT(" ") << pChannel->GetFormatDescription() << (pChannel->IsPlaybackRunning() ? TEXT(" PLAYING") : TEXT(" STOPPED")) << TEXT("\r\n");\r
-}\r
-\r
-//////////\r
-// CLS\r
-AMCPCommandCondition ClsCommand::CheckConditions()\r
-{\r
-       return ConditionGood;\r
-}\r
-\r
-bool ClsCommand::Execute()\r
-{\r
-       /*\r
-               wav = audio\r
-               mp3 = audio\r
-               swf     = movie\r
-               dv  = movie\r
-               tga = still\r
-               col = still\r
-       */\r
-       tstring cliptype[4] = { _T(" N/A "), _T(" AUDIO "), _T(" MOVIE "), _T(" STILL ") };\r
-\r
-\r
-       tstringstream replyString;\r
-       replyString << TEXT("200 CLS OK\r\n");\r
-\r
-       WIN32_FIND_DATA fileInfo;\r
-       caspar::utils::FindWrapper findWrapper(GetApplication()->GetMediaFolder() + TEXT("*.*"), &fileInfo);\r
-       if(findWrapper.Success())\r
-       {\r
-               unsigned char cliptypeindex = 0;\r
-               bool bGood = false;\r
-\r
-               do\r
-               {\r
-                       tstring filename = fileInfo.cFileName;\r
-\r
-                       transform(filename.begin(), filename.end(), filename.begin(), toupper);\r
-                       \r
-                       tstring::size_type pos = filename.rfind(TEXT("."));\r
-                       if(pos != tstring::npos)\r
-                       {\r
-                               tstring extension = filename.substr(pos+1);\r
-                               if(extension == TEXT("TGA") || extension == TEXT("COL"))\r
-                               {\r
-                                       cliptypeindex = 3;\r
-                                       bGood = true;\r
-                               }\r
-                               else if(extension == TEXT("SWF") || extension == TEXT("CT") || extension == TEXT("DV") || extension == TEXT("MOV") || extension == TEXT("MPG") || extension == TEXT("AVI"))\r
-                               {\r
-                                       cliptypeindex = 2;\r
-                                       bGood = true;\r
-                               }\r
-                               else if(extension == TEXT("WAV") || extension == TEXT("MP3"))\r
-                               {\r
-                                       cliptypeindex = 1;\r
-                                       bGood = true;\r
-                               }\r
-\r
-                               if(bGood)\r
-                               {\r
-                                       TCHAR numBuffer[32];\r
-                                       TCHAR timeBuffer[32];\r
-                                       TCHAR dateBuffer[32];\r
-\r
-                                       unsigned __int64 fileSize = fileInfo.nFileSizeHigh;\r
-                                       fileSize *= 0x100000000;\r
-                                       fileSize += fileInfo.nFileSizeLow;\r
-\r
-                                       _ui64tot_s(fileSize, numBuffer, 32, 10);\r
-\r
-                                       SYSTEMTIME lastWriteTime;\r
-                                       FileTimeToSystemTime(&(fileInfo.ftLastWriteTime), &lastWriteTime);\r
-                                       GetDateFormat(LOCALE_USER_DEFAULT, 0, &lastWriteTime, _T("yyyyMMdd"), dateBuffer, sizeof(dateBuffer));\r
-                                       GetTimeFormat(LOCALE_USER_DEFAULT, 0, &lastWriteTime, _T("HHmmss"), timeBuffer, sizeof(timeBuffer));\r
-\r
-                                       replyString << TEXT("\"") << filename.substr(0, pos) << TEXT("\" ") << cliptype[cliptypeindex] << TEXT(" ") << numBuffer << TEXT(" ") << dateBuffer << timeBuffer << TEXT("\r\n");\r
-\r
-                                       cliptypeindex = 0;\r
-                                       bGood = false;\r
-                               }\r
-                       }\r
-               }\r
-               while(findWrapper.FindNext(&fileInfo));\r
-       }\r
-       replyString << TEXT("\r\n");\r
-\r
-       SetReplyString(replyString.str());\r
-       return true;\r
-}\r
-\r
-//////////\r
-// TLS\r
-AMCPCommandCondition TlsCommand::CheckConditions()\r
-{\r
-       return ConditionGood;\r
-}\r
-\r
-bool TlsCommand::Execute()\r
-{\r
-       tstringstream replyString;\r
-       replyString << TEXT("200 TLS OK\r\n");\r
-\r
-       FindInDirectory(TEXT(""), replyString);\r
-       replyString << TEXT("\r\n");\r
-\r
-       SetReplyString(replyString.str());\r
-       return true;\r
-}\r
-\r
-void TlsCommand::FindInDirectory(const tstring& dir, tstringstream& replyString) {\r
-       {       //Find files in directory\r
-               WIN32_FIND_DATA fileInfo;\r
-               caspar::utils::FindWrapper findWrapper(GetApplication()->GetTemplateFolder() + dir + TEXT("*.ft"), &fileInfo);\r
-               if(findWrapper.Success())\r
-               {\r
-                       do\r
-                       {\r
-                               if(((fileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY) && ((fileInfo.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) != FILE_ATTRIBUTE_HIDDEN)) {\r
-                                       tstring filename = fileInfo.cFileName;\r
-\r
-                                       transform(filename.begin(), filename.end(), filename.begin(), toupper);\r
-                                       \r
-                                       TCHAR numBuffer[32];\r
-                                       TCHAR timeBuffer[32];\r
-                                       TCHAR dateBuffer[32];\r
-\r
-                                       unsigned __int64 fileSize = fileInfo.nFileSizeHigh;\r
-                                       fileSize *= 0x100000000;\r
-                                       fileSize += fileInfo.nFileSizeLow;\r
-\r
-                                       _ui64tot_s(fileSize, numBuffer, 32, 10);\r
-\r
-                                       SYSTEMTIME lastWriteTime;\r
-                                       FileTimeToSystemTime(&(fileInfo.ftLastWriteTime), &lastWriteTime);\r
-                                       GetDateFormat(LOCALE_USER_DEFAULT, 0, &lastWriteTime, _T("yyyyMMdd"), dateBuffer, sizeof(dateBuffer));\r
-                                       GetTimeFormat(LOCALE_USER_DEFAULT, 0, &lastWriteTime, _T("HHmmss"), timeBuffer, sizeof(timeBuffer));\r
-\r
-                                       replyString << TEXT("\"") << dir << filename.substr(0, filename.size()-3) << TEXT("\" ") << numBuffer << TEXT(" ") << dateBuffer << timeBuffer << TEXT("\r\n");\r
-                               }\r
-                       }\r
-                       while(findWrapper.FindNext(&fileInfo));\r
-               }\r
-       }\r
-\r
-       {       //Find subdirectories in directory\r
-               WIN32_FIND_DATA fileInfo;\r
-               caspar::utils::FindWrapper findWrapper(GetApplication()->GetTemplateFolder() + dir + TEXT("*"), &fileInfo);\r
-               if(findWrapper.Success())\r
-               {\r
-                       do\r
-                       {\r
-                               if((fileInfo.cFileName[0] != TEXT('.')) && ((fileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) && ((fileInfo.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) != FILE_ATTRIBUTE_HIDDEN)) {\r
-                                       FindInDirectory(dir + fileInfo.cFileName + TEXT('\\'), replyString);\r
-                               }\r
-                       }\r
-                       while(findWrapper.FindNext(&fileInfo));\r
-               }\r
-       }\r
-}\r
-\r
-//////////\r
-// VERSION\r
-AMCPCommandCondition VersionCommand::CheckConditions()\r
-{\r
-       return ConditionGood;\r
-}\r
-\r
-bool VersionCommand::Execute()\r
-{\r
-       tstringstream replyString;\r
-       replyString << TEXT("201 VERSION OK\r\n") << GetApplication()->GetVersionString() << TEXT("\r\n");\r
-\r
-       SetReplyString(replyString.str());\r
-       return true;\r
-}\r
-\r
-//////////\r
-// BYE\r
-AMCPCommandCondition ByeCommand::CheckConditions()\r
-{\r
-       return ConditionGood;\r
-}\r
-\r
-bool ByeCommand::Execute()\r
-{\r
-       GetClientInfo()->Disconnect();\r
-       return true;\r
-}\r
-\r
-\r
-//////////\r
-// SET\r
-\r
-AMCPCommandCondition SetCommand::CheckConditions()\r
-{\r
-       return ConditionGood;\r
-}\r
-\r
-bool SetCommand::Execute()\r
-{\r
-       tstring name = _parameters[0];\r
-       std::transform(name.begin(), name.end(), name.begin(), toupper);\r
-\r
-       tstring value = _parameters[1];\r
-       std::transform(value.begin(), value.end(), value.begin(), toupper);\r
-\r
-       if(name == TEXT("MODE"))\r
-       {\r
-               if(this->GetChannel()->SetVideoFormat(value))\r
-                       this->SetReplyString(TEXT("202 SET MODE OK\r\n"));\r
-               else\r
-                       this->SetReplyString(TEXT("501 SET MODE FAILED\r\n"));\r
-       }\r
-       else\r
-       {\r
-               this->SetReplyString(TEXT("403 SET ERROR\r\n"));\r
-       }\r
-\r
-       return true;\r
-}\r
-\r
-///////////\r
-// MONITOR\r
-AMCPCommandCondition MonitorCommand::CheckConditions()\r
-{\r
-       return ConditionGood;\r
-}\r
-\r
-bool MonitorCommand::Execute()\r
-{\r
-       if(!GetChannel())\r
-               return false;\r
-\r
-       tstring cmd = _parameters[0];\r
-       std::transform(cmd.begin(), cmd.end(), cmd.begin(), toupper);\r
-\r
-       if(cmd == TEXT("START")) {\r
-               GetChannel()->GetMonitor().AddListener(GetClientInfo());\r
-               SetReplyString(TEXT("202 MONITOR START OK\r\n"));\r
-       }\r
-       else if(cmd == TEXT("STOP")) {\r
-               GetChannel()->GetMonitor().RemoveListener(GetClientInfo());\r
-               SetReplyString(TEXT("202 MONITOR STOP OK\r\n"));\r
-       }\r
-       else\r
-               SetReplyString(TEXT("403 MONITOR ERROR\r\n"));\r
-\r
-       return true;\r
-}\r
-\r
-//////////\r
-// KILL\r
-//AMCPCommandCondition KillCommand::CheckConditions()\r
-//{\r
-//     return ConditionGood;\r
-//}\r
-//\r
-//bool KillCommand::Execute()\r
-//{\r
-//     //int* pS = 0;\r
-//     //*pS = 42;\r
-//     caspar::GetApplication()->GetTerminateEvent().Set();\r
-//     return true;\r
-//}\r
-\r
-/*\r
-//////////\r
-// FLS\r
-AMCPCommandCondition FlsCommand::CheckConditions()\r
-{\r
-       return ConditionGood;\r
-}\r
-\r
-bool FlsCommand::Execute()\r
-{\r
-       tstring returnMessage = "200 FLS OK";\r
-       returnMessage += "\r\n";\r
-\r
-       tstring searchPattern = "*.*";\r
-       tstring directory = "";\r
-\r
-       if(_parameters.size() >= 1) {\r
-               tstring::size_type separatorIndex = _parameters[0].find_last_of('\\');\r
-               if(separatorIndex != tstring::npos) {\r
-                       directory = _parameters[0].substr(0, separatorIndex+1);\r
-                       if(_parameters[0].length() > (separatorIndex+1))\r
-                               searchPattern = _parameters[0].substr(separatorIndex+1);\r
-               }\r
-               else\r
-                       searchPattern = _parameters[0];\r
-       }\r
-\r
-       FindFilesInDirectory(directory, searchPattern, returnMessage);\r
-       SetReplyString(returnMessage);\r
-\r
-       return true;\r
-}\r
-\r
-void FlsCommand::FindFilesInDirectory(const tstring& dir, const tstring& pattern, tstring& result)\r
-{\r
-       WIN32_FIND_DATA fileInfo;\r
-\r
-       tstring searchPattern = pattern;\r
-       if(dir.length() > 0) {\r
-               searchPattern = dir + '\\' + pattern;\r
-       }\r
-       HANDLE hFile = FindFirstFile(searchPattern.c_str(), &fileInfo);\r
-       if(hFile != INVALID_HANDLE_VALUE)\r
-       {\r
-               do\r
-               {\r
-                       if((fileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) {\r
-                               if(fileInfo.cFileName[0] != '.') {\r
-                                       tstring completeDir = fileInfo.cFileName;\r
-                                       if(dir.length() > 0) {\r
-                                               completeDir = dir + '\\' + completeDir;\r
-                                       }\r
-\r
-                                       FindFilesInDirectory(completeDir, pattern, result);\r
-                               }\r
-                       }\r
-                       else {\r
-                               tstring filename = fileInfo.cFileName;\r
-                               if(dir.length() > 0) {\r
-                                       filename = dir + '\\' + filename;\r
-                               }\r
-\r
-                               transform(filename.begin(), filename.end(), filename.begin(), toupper);\r
-                               \r
-                               char numBuffer[32];\r
-                               TCHAR timeBuffer[32];\r
-                               TCHAR dateBuffer[32];\r
-\r
-                               _itoa_s(fileInfo.nFileSizeLow, numBuffer, sizeof(numBuffer), 10);\r
-\r
-                               SYSTEMTIME lastWriteTime;\r
-                               FileTimeToSystemTime(&(fileInfo.ftLastWriteTime), &lastWriteTime);\r
-                               GetDateFormat(LOCALE_USER_DEFAULT, 0, &lastWriteTime, _T("yyyyMMdd"), dateBuffer, sizeof(dateBuffer));\r
-                               GetTimeFormat(LOCALE_USER_DEFAULT, 0, &lastWriteTime, _T("HHmmss"), timeBuffer, sizeof(timeBuffer));\r
-\r
-                               result += "\"";\r
-                               result += filename;\r
-                               result += "\" ";\r
-\r
-                               result += numBuffer;\r
-                               result += " ";\r
-                               result += dateBuffer;\r
-                               result += timeBuffer;\r
-                               result += "\r\n";\r
-                       }\r
-               }\r
-               while(FindNextFile(hFile, &fileInfo));\r
-       }\r
-       FindClose(hFile);\r
-}\r
-\r
-*/\r
-\r
-}      //namespace amcp\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/amcp/AMCPCommandsImpl.h b/server/amcp/AMCPCommandsImpl.h
deleted file mode 100644 (file)
index 85fec8d..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef __AMCPCOMMANDSIMPL_H__\r
-#define __AMCPCOMMANDSIMPL_H__\r
-\r
-#include "AMCPCommand.h"\r
-\r
-namespace caspar {\r
-namespace amcp {\r
-\r
-\r
-class LoadCommand : public AMCPCommand\r
-{\r
-public:\r
-       LoadCommand() {}\r
-       virtual bool Execute();\r
-       virtual AMCPCommandCondition CheckConditions();\r
-       virtual bool NeedChannel() {\r
-               return true;\r
-       }\r
-       virtual AMCPCommandScheduling GetDefaultScheduling() {\r
-               return ImmediatelyAndClear;\r
-       }\r
-       virtual int GetMinimumParameters() {\r
-               return 1;\r
-       }\r
-};\r
-\r
-class LoadbgCommand : public AMCPCommand\r
-{\r
-public:\r
-       LoadbgCommand() {}\r
-       virtual bool Execute();\r
-       virtual AMCPCommandCondition CheckConditions();\r
-\r
-       virtual bool NeedChannel() {\r
-               return true;\r
-       }\r
-       virtual AMCPCommandScheduling GetDefaultScheduling() {\r
-               return AddToQueue;\r
-       }\r
-       virtual int GetMinimumParameters() {\r
-               return 1;\r
-       }\r
-};\r
-\r
-class PlayCommand : public AMCPCommand\r
-{\r
-public:\r
-       PlayCommand() {}\r
-       virtual bool Execute();\r
-       virtual AMCPCommandCondition CheckConditions();\r
-\r
-       virtual bool NeedChannel() {\r
-               return true;\r
-       }\r
-       virtual AMCPCommandScheduling GetDefaultScheduling() {\r
-               return AddToQueue;\r
-       }\r
-       virtual int GetMinimumParameters() {\r
-               return 0;\r
-       }\r
-};\r
-\r
-class StopCommand : public AMCPCommand\r
-{\r
-public:\r
-       StopCommand() {}\r
-       virtual bool Execute();\r
-       virtual AMCPCommandCondition CheckConditions();\r
-\r
-       virtual bool NeedChannel() {\r
-               return true;\r
-       }\r
-       virtual AMCPCommandScheduling GetDefaultScheduling() {\r
-               return ImmediatelyAndClear;\r
-       }\r
-       virtual int GetMinimumParameters() {\r
-               return 0;\r
-       }\r
-};\r
-\r
-class ClearCommand : public AMCPCommand\r
-{\r
-public:\r
-       ClearCommand() {}\r
-       virtual bool Execute();\r
-       virtual AMCPCommandCondition CheckConditions();\r
-\r
-       virtual bool NeedChannel() {\r
-               return true;\r
-       }\r
-       virtual AMCPCommandScheduling GetDefaultScheduling() {\r
-               return ImmediatelyAndClear;\r
-       }\r
-       virtual int GetMinimumParameters() {\r
-               return 0;\r
-       }\r
-};\r
-\r
-class ParamCommand : public AMCPCommand\r
-{\r
-public:\r
-       ParamCommand() {}\r
-       virtual bool Execute();\r
-       virtual AMCPCommandCondition CheckConditions();\r
-\r
-       virtual bool NeedChannel() {\r
-               return true;\r
-       }\r
-       virtual AMCPCommandScheduling GetDefaultScheduling() {\r
-               return AddToQueue;\r
-       }\r
-       virtual int GetMinimumParameters() {\r
-               return 1;\r
-       }\r
-};\r
-\r
-class CGCommand : public AMCPCommand\r
-{\r
-public:\r
-       CGCommand() {}\r
-       virtual bool Execute();\r
-       virtual AMCPCommandCondition CheckConditions();\r
-\r
-       virtual bool NeedChannel() {\r
-               return true;\r
-       }\r
-       virtual AMCPCommandScheduling GetDefaultScheduling() {\r
-               return AddToQueue;\r
-       }\r
-       virtual int GetMinimumParameters() {\r
-               return 1;\r
-       }\r
-\r
-private:\r
-       bool ValidateLayer(const tstring& layerstring);\r
-\r
-       bool ExecuteAdd();\r
-       bool ExecutePlay();\r
-       bool ExecuteStop();\r
-       bool ExecuteNext();\r
-       bool ExecuteRemove();\r
-       bool ExecuteClear();\r
-       bool ExecuteUpdate();\r
-       bool ExecuteInvoke();\r
-       bool ExecuteInfo();\r
-};\r
-\r
-class DataCommand : public AMCPCommand\r
-{\r
-public:\r
-       DataCommand() {}\r
-       virtual bool Execute();\r
-       virtual AMCPCommandCondition CheckConditions();\r
-\r
-       virtual bool NeedChannel() {\r
-               return false;\r
-       }\r
-       virtual AMCPCommandScheduling GetDefaultScheduling() {\r
-               return AddToQueue;\r
-       }\r
-       virtual int GetMinimumParameters() {\r
-               return 1;\r
-       }\r
-\r
-private:\r
-       bool ExecuteStore();\r
-       bool ExecuteRetrieve();\r
-       bool ExecuteList();\r
-};\r
-\r
-class ClsCommand : public AMCPCommand\r
-{\r
-public:\r
-       ClsCommand() {}\r
-       virtual bool Execute();\r
-       virtual AMCPCommandCondition CheckConditions();\r
-\r
-       virtual bool NeedChannel() {\r
-               return false;\r
-       }\r
-       virtual AMCPCommandScheduling GetDefaultScheduling() {\r
-               return AddToQueue;\r
-       }\r
-       virtual int GetMinimumParameters() {\r
-               return 0;\r
-       }\r
-};\r
-\r
-class TlsCommand : public AMCPCommand\r
-{\r
-public:\r
-       TlsCommand() {}\r
-       virtual bool Execute();\r
-       virtual AMCPCommandCondition CheckConditions();\r
-\r
-       virtual bool NeedChannel() {\r
-               return false;\r
-       }\r
-       virtual AMCPCommandScheduling GetDefaultScheduling() {\r
-               return AddToQueue;\r
-       }\r
-       virtual int GetMinimumParameters() {\r
-               return 0;\r
-       }\r
-\r
-private:\r
-       void FindInDirectory(const tstring& dir, tstringstream&);\r
-};\r
-\r
-class CinfCommand : public AMCPCommand\r
-{\r
-public:\r
-       CinfCommand() {}\r
-       virtual bool Execute();\r
-       virtual AMCPCommandCondition CheckConditions();\r
-\r
-       virtual bool NeedChannel() {\r
-               return false;\r
-       }\r
-       virtual AMCPCommandScheduling GetDefaultScheduling() {\r
-               return AddToQueue;\r
-       }\r
-       virtual int GetMinimumParameters() {\r
-               return 1;\r
-       }\r
-};\r
-\r
-class InfoCommand : public AMCPCommand\r
-{\r
-public:\r
-       InfoCommand() {}\r
-       virtual bool Execute();\r
-       virtual AMCPCommandCondition CheckConditions();\r
-\r
-       virtual bool NeedChannel() {\r
-               return false;\r
-       }\r
-       virtual AMCPCommandScheduling GetDefaultScheduling() {\r
-               return AddToQueue;\r
-       }\r
-       virtual int GetMinimumParameters() {\r
-               return 0;\r
-       }\r
-\r
-private:\r
-       void GenerateChannelInfo(ChannelPtr&, tstringstream&);\r
-};\r
-\r
-class VersionCommand : public AMCPCommand\r
-{\r
-public:\r
-       VersionCommand() {}\r
-       virtual bool Execute();\r
-       virtual AMCPCommandCondition CheckConditions();\r
-\r
-       virtual bool NeedChannel() {\r
-               return false;\r
-       }\r
-       virtual AMCPCommandScheduling GetDefaultScheduling() {\r
-               return AddToQueue;\r
-       }\r
-       virtual int GetMinimumParameters() {\r
-               return 0;\r
-       }\r
-};\r
-\r
-class ByeCommand : public AMCPCommand\r
-{\r
-public:\r
-       ByeCommand() {}\r
-       virtual bool Execute();\r
-       virtual AMCPCommandCondition CheckConditions();\r
-\r
-       virtual bool NeedChannel() {\r
-               return false;\r
-       }\r
-       virtual AMCPCommandScheduling GetDefaultScheduling() {\r
-               return AddToQueue;\r
-       }\r
-       virtual int GetMinimumParameters() {\r
-               return 0;\r
-       }\r
-};\r
-\r
-class SetCommand : public AMCPCommand\r
-{\r
-public:\r
-       SetCommand() \r
-       {}\r
-\r
-       virtual bool Execute();\r
-       virtual AMCPCommandCondition CheckConditions();\r
-\r
-       virtual bool NeedChannel() {\r
-               return true;\r
-       }\r
-       virtual AMCPCommandScheduling GetDefaultScheduling() {\r
-               return AddToQueue;\r
-       }\r
-       virtual int GetMinimumParameters() {\r
-               return 2;\r
-       }\r
-};\r
-\r
-class MonitorCommand : public AMCPCommand\r
-{\r
-public:\r
-       MonitorCommand() \r
-       {}\r
-\r
-       virtual bool Execute();\r
-       virtual AMCPCommandCondition CheckConditions();\r
-\r
-       virtual bool NeedChannel() {\r
-               return true;\r
-       }\r
-       virtual AMCPCommandScheduling GetDefaultScheduling() {\r
-               return AddToQueue;\r
-       }\r
-       virtual int GetMinimumParameters() {\r
-               return 1;\r
-       }\r
-};\r
-\r
-//class KillCommand : public AMCPCommand\r
-//{\r
-//public:\r
-//     KillCommand() {}\r
-//     virtual bool Execute();\r
-//     virtual AMCPCommandCondition CheckConditions();\r
-//\r
-//     virtual bool NeedChannel() {\r
-//             return false;\r
-//     }\r
-//     virtual AMCPCommandScheduling GetDefaultScheduling() {\r
-//             return AddToQueue;\r
-//     }\r
-//     virtual int GetMinimumParameters() {\r
-//             return 0;\r
-//     }\r
-//};\r
-\r
-}      //namespace amcp\r
-}      //namespace caspar\r
-\r
-#endif //__AMCPCOMMANDSIMPL_H__
\ No newline at end of file
diff --git a/server/amcp/AMCPProtocolStrategy.cpp b/server/amcp/AMCPProtocolStrategy.cpp
deleted file mode 100644 (file)
index adb9903..0000000
+++ /dev/null
@@ -1,431 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-#include "..\Application.h"\r
-\r
-#include "AMCPProtocolStrategy.h"\r
-\r
-#include "..\io\AsyncEventServer.h"\r
-#include "AMCPCommandsImpl.h"\r
-#include "..\Channel.h"\r
-\r
-#include <stdio.h>\r
-#include <crtdbg.h>\r
-#include <string.h>\r
-#include <algorithm>\r
-#include <cctype>\r
-\r
-namespace caspar {\r
-namespace amcp {\r
-\r
-using namespace utils;\r
-using IO::ClientInfoPtr;\r
-\r
-const tstring AMCPProtocolStrategy::MessageDelimiter = TEXT("\r\n");\r
-\r
-AMCPProtocolStrategy::AMCPProtocolStrategy() {\r
-       AMCPCommandQueuePtr pGeneralCommandQueue(new AMCPCommandQueue());\r
-       if(!pGeneralCommandQueue->Start()) {\r
-               LOG << TEXT("Failed to start the general command-queue");\r
-\r
-               //TODO: THROW!\r
-       }\r
-       else\r
-               commandQueues_.push_back(pGeneralCommandQueue);\r
-\r
-\r
-       ChannelPtr pChannel;\r
-       unsigned int index = -1;\r
-       //Create a commandpump for each channel\r
-       while((pChannel = GetApplication()->GetChannel(++index)) != 0) {\r
-               AMCPCommandQueuePtr pChannelCommandQueue(new AMCPCommandQueue());\r
-               tstring title = TEXT("CHANNEL ");\r
-\r
-               //HACK: Perform real conversion from int to string\r
-               TCHAR num = TEXT('1')+static_cast<TCHAR>(index);\r
-               title += num;\r
-\r
-               if(!pChannelCommandQueue->Start()) {\r
-                       tstring logString = TEXT("Failed to start command-queue for ");\r
-                       logString += title;\r
-                       LOG << logString;\r
-\r
-                       //TODO: THROW!\r
-               }\r
-               else\r
-                       commandQueues_.push_back(pChannelCommandQueue);\r
-       }\r
-}\r
-\r
-AMCPProtocolStrategy::~AMCPProtocolStrategy() {\r
-}\r
-\r
-void AMCPProtocolStrategy::Parse(const TCHAR* pData, int charCount, ClientInfoPtr pClientInfo)\r
-{\r
-       size_t pos;\r
-       tstring recvData(pData, charCount);\r
-       tstring availibleData = pClientInfo->currentMessage_ + recvData;\r
-\r
-       while(true) {\r
-               pos = availibleData.find(MessageDelimiter);\r
-               if(pos != tstring::npos)\r
-               {\r
-                       tstring message = availibleData.substr(0,pos);\r
-\r
-                       //This is where a complete message gets taken care of\r
-                       if(message.length() > 0) {\r
-                               ProcessMessage(message, pClientInfo);\r
-                       }\r
-\r
-                       std::size_t nextStartPos = pos + MessageDelimiter.length();\r
-                       if(nextStartPos < availibleData.length())\r
-                               availibleData = availibleData.substr(nextStartPos);\r
-                       else {\r
-                               availibleData.clear();\r
-                               break;\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       break;\r
-               }\r
-       }\r
-       pClientInfo->currentMessage_ = availibleData;\r
-}\r
-\r
-void AMCPProtocolStrategy::ProcessMessage(const tstring& message, ClientInfoPtr& pClientInfo)\r
-{\r
-       bool bError = true;\r
-       MessageParserState state = New;\r
-\r
-       AMCPCommandPtr pCommand;\r
-\r
-       pCommand = InterpretCommandString(message, &state);\r
-\r
-       if(pCommand != 0) {\r
-               pCommand->SetClientInfo(pClientInfo);   \r
-               if(QueueCommand(pCommand))\r
-                       bError = false;\r
-               else\r
-                       state = GetChannel;\r
-       }\r
-\r
-       if(bError == true) {\r
-               tstringstream answer;\r
-               switch(state)\r
-               {\r
-               case GetCommand:\r
-                       answer << TEXT("400 ERROR\r\n") + message << "\r\n";\r
-                       break;\r
-               case GetChannel:\r
-                       answer << TEXT("401 ERROR\r\n");\r
-                       break;\r
-               case GetParameters:\r
-                       answer << TEXT("402 ERROR\r\n");\r
-                       break;\r
-               default:\r
-                       answer << TEXT("500 FAILED\r\n");\r
-                       break;\r
-               }\r
-               pClientInfo->Send(answer.str());\r
-       }\r
-}\r
-\r
-AMCPCommandPtr AMCPProtocolStrategy::InterpretCommandString(const tstring& message, MessageParserState* pOutState)\r
-{\r
-       std::vector<tstring> tokens;\r
-       unsigned int currentToken = 0;\r
-       tstring commandSwitch;\r
-\r
-       AMCPCommandPtr pCommand;\r
-       MessageParserState state = New;\r
-\r
-       LOG << message;\r
-\r
-       std::size_t tokensInMessage = TokenizeMessage(message, &tokens);\r
-\r
-       //parse the message one token at the time\r
-       while(currentToken < tokensInMessage)\r
-       {\r
-               switch(state)\r
-               {\r
-               case New:\r
-                       if(tokens[currentToken][0] == TEXT('/'))\r
-                               state = GetSwitch;\r
-                       else\r
-                               state = GetCommand;\r
-                       break;\r
-\r
-               case GetSwitch:\r
-                       commandSwitch = tokens[currentToken];\r
-                       state = GetCommand;\r
-                       ++currentToken;\r
-                       break;\r
-\r
-               case GetCommand:\r
-                       pCommand = CommandFactory(tokens[currentToken]);\r
-                       if(pCommand == 0) {\r
-                               goto ParseFinnished;\r
-                       }\r
-                       else\r
-                       {\r
-                               //Set scheduling\r
-                               if(commandSwitch.size() > 0) {\r
-                                       transform(commandSwitch.begin(), commandSwitch.end(), commandSwitch.begin(), toupper);\r
-\r
-                                       if(commandSwitch == TEXT("/APP"))\r
-                                               pCommand->SetScheduling(AddToQueue);\r
-                                       else if(commandSwitch  == TEXT("/IMMF"))\r
-                                               pCommand->SetScheduling(ImmediatelyAndClear);\r
-                               }\r
-\r
-                               if(pCommand->NeedChannel())\r
-                                       state = GetChannel;\r
-                               else\r
-                                       state = GetParameters;\r
-                       }\r
-                       ++currentToken;\r
-                       break;\r
-\r
-               case GetParameters:\r
-                       {\r
-                               _ASSERTE(pCommand != 0);\r
-                               int parameterCount=0;\r
-                               while(currentToken<tokensInMessage)\r
-                               {\r
-                                       pCommand->AddParameter(tokens[currentToken++]);\r
-                                       ++parameterCount;\r
-                               }\r
-                               if(parameterCount < pCommand->GetMinimumParameters()) {\r
-                                       goto ParseFinnished;\r
-                               }\r
-\r
-                               state = Done;\r
-                               break;\r
-                       }\r
-\r
-               case GetChannel:\r
-                       {\r
-//                             assert(pCommand != 0);\r
-\r
-                               int channelIndex = _ttoi(tokens[currentToken].c_str())-1;\r
-\r
-                               ChannelPtr pChannel = GetApplication()->GetChannel(channelIndex);\r
-                               if(pChannel == 0) {\r
-                                       goto ParseFinnished;\r
-                               }\r
-\r
-                               pCommand->SetChannel(pChannel);\r
-                               pCommand->SetChannelIndex(channelIndex);\r
-\r
-                               state = GetParameters;\r
-                               ++currentToken;\r
-                               break;\r
-                       }\r
-\r
-               default:        //Done and unexpected\r
-                       goto ParseFinnished;\r
-               }\r
-       }\r
-\r
-ParseFinnished:\r
-       if(state == GetParameters && pCommand->GetMinimumParameters()==0)\r
-               state = Done;\r
-\r
-       if(state != Done) {\r
-               pCommand.reset();\r
-       }\r
-\r
-       if(pOutState != 0) {\r
-               *pOutState = state;\r
-       }\r
-\r
-       return pCommand;\r
-}\r
-\r
-bool AMCPProtocolStrategy::QueueCommand(AMCPCommandPtr pCommand) {\r
-       if(pCommand->NeedChannel()) {\r
-               unsigned int channelIndex = pCommand->GetChannelIndex() + 1;\r
-               if(commandQueues_.size() > channelIndex) {\r
-                       commandQueues_[channelIndex]->AddCommand(pCommand);\r
-               }\r
-               else\r
-                       return false;\r
-       }\r
-       else {\r
-               commandQueues_[0]->AddCommand(pCommand);\r
-       }\r
-       return true;\r
-}\r
-\r
-AMCPCommandPtr AMCPProtocolStrategy::CommandFactory(const tstring& str)\r
-{\r
-       tstring s = str;\r
-       transform(s.begin(), s.end(), s.begin(), toupper);\r
-\r
-       AMCPCommandPtr result;\r
-\r
-       if(s == TEXT("LOAD"))\r
-       {\r
-               result = AMCPCommandPtr(new LoadCommand());\r
-       }\r
-       else if(s == TEXT("LOADBG"))\r
-       {\r
-               result = AMCPCommandPtr(new LoadbgCommand());\r
-       }\r
-       else if(s == TEXT("PLAY"))\r
-       {\r
-               result = AMCPCommandPtr(new PlayCommand());\r
-       }\r
-       else if(s == TEXT("STOP"))\r
-       {\r
-               result = AMCPCommandPtr(new StopCommand());\r
-       }\r
-       else if(s == TEXT("CLEAR"))\r
-       {\r
-               result = AMCPCommandPtr(new ClearCommand());\r
-       }\r
-       else if(s == TEXT("PARAM"))\r
-       {\r
-               result = AMCPCommandPtr(new ParamCommand());\r
-       }\r
-       else if(s == TEXT("CG"))\r
-       {\r
-               result = AMCPCommandPtr(new CGCommand());\r
-       }\r
-       else if(s == TEXT("DATA"))\r
-       {\r
-               result = AMCPCommandPtr(new DataCommand());\r
-       }\r
-       else if(s == TEXT("CINF"))\r
-       {\r
-               result = AMCPCommandPtr(new CinfCommand());\r
-       }\r
-       else if(s == TEXT("INFO"))\r
-       {\r
-               result = AMCPCommandPtr(new InfoCommand());\r
-       }\r
-       else if(s == TEXT("CLS"))\r
-       {\r
-               result = AMCPCommandPtr(new ClsCommand());\r
-       }\r
-       else if(s == TEXT("TLS"))\r
-       {\r
-               result = AMCPCommandPtr(new TlsCommand());\r
-       }\r
-       else if(s == TEXT("VERSION"))\r
-       {\r
-               result = AMCPCommandPtr(new VersionCommand());\r
-       }\r
-       else if(s == TEXT("BYE"))\r
-       {\r
-               result = AMCPCommandPtr(new ByeCommand());\r
-       }\r
-       else if(s == TEXT("SET"))\r
-       {\r
-               result = AMCPCommandPtr(new SetCommand());\r
-       }\r
-       //else if(s == TEXT("MONITOR"))\r
-       //{\r
-       //      result = AMCPCommandPtr(new MonitorCommand());\r
-       //}\r
-       //else if(s == TEXT("KILL"))\r
-       //{\r
-       //      result = AMCPCommandPtr(new KillCommand());\r
-       //}\r
-       return result;\r
-}\r
-\r
-std::size_t AMCPProtocolStrategy::TokenizeMessage(const tstring& message, std::vector<tstring>* pTokenVector)\r
-{\r
-       //split on whitespace but keep strings within quotationmarks\r
-       //treat \ as the start of an escape-sequence: the following char will indicate what to actually put in the string\r
-\r
-       tstring currentToken;\r
-\r
-       char inQuote = 0;\r
-       bool getSpecialCode = false;\r
-\r
-       for(unsigned int charIndex=0; charIndex<message.size(); ++charIndex)\r
-       {\r
-               if(getSpecialCode)\r
-               {\r
-                       //insert code-handling here\r
-                       switch(message[charIndex])\r
-                       {\r
-                       case TEXT('\\'):\r
-                currentToken += TEXT("\\");\r
-                               break;\r
-                       case TEXT('\"'):\r
-                               currentToken += TEXT("\"");\r
-                               break;\r
-                       case TEXT('n'):\r
-                               currentToken += TEXT("\n");\r
-                               break;\r
-                       default:\r
-                               break;\r
-                       };\r
-                       getSpecialCode = false;\r
-                       continue;\r
-               }\r
-\r
-               if(message[charIndex]==TEXT('\\'))\r
-               {\r
-                       getSpecialCode = true;\r
-                       continue;\r
-               }\r
-\r
-               if(message[charIndex]==' ' && inQuote==false)\r
-               {\r
-                       if(currentToken.size()>0)\r
-                       {\r
-                               pTokenVector->push_back(currentToken);\r
-                               currentToken.clear();\r
-                       }\r
-                       continue;\r
-               }\r
-\r
-               if(message[charIndex]==TEXT('\"'))\r
-               {\r
-                       inQuote ^= 1;\r
-\r
-                       if(currentToken.size()>0)\r
-                       {\r
-                               pTokenVector->push_back(currentToken);\r
-                               currentToken.clear();\r
-                       }\r
-                       continue;\r
-               }\r
-\r
-               currentToken += message[charIndex];\r
-       }\r
-\r
-       if(currentToken.size()>0)\r
-       {\r
-               pTokenVector->push_back(currentToken);\r
-               currentToken.clear();\r
-       }\r
-\r
-       return pTokenVector->size();\r
-}\r
-\r
-}      //namespace amcp\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/amcp/AMCPProtocolStrategy.h b/server/amcp/AMCPProtocolStrategy.h
deleted file mode 100644 (file)
index e13c344..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _AMCPMESSAGEHANDLER_H__\r
-#define _AMCPMESSAGEHANDLER_H__\r
-#pragma once\r
-\r
-#include <string>\r
-#include <vector>\r
-\r
-#include "..\io\protocolstrategy.h"\r
-#include "AMCPCommand.h"\r
-#include "AMCPCommandQueue.h"\r
-\r
-namespace caspar {\r
-namespace amcp {\r
-\r
-\r
-class AMCPProtocolStrategy : public caspar::IO::IProtocolStrategy\r
-{\r
-       enum MessageParserState {\r
-               New = 0,\r
-               GetSwitch,\r
-               GetCommand,\r
-               GetParameters,\r
-               GetChannel,\r
-               Done\r
-       };\r
-\r
-       AMCPProtocolStrategy(const AMCPProtocolStrategy&);\r
-       AMCPProtocolStrategy& operator=(const AMCPProtocolStrategy&);\r
-\r
-public:\r
-       AMCPProtocolStrategy();\r
-       virtual ~AMCPProtocolStrategy();\r
-\r
-       virtual void Parse(const TCHAR* pData, int charCount, caspar::IO::ClientInfoPtr pClientInfo);\r
-       virtual UINT GetCodepage() {\r
-               return CP_UTF8;\r
-       }\r
-\r
-       static AMCPCommandPtr InterpretCommandString(const tstring& str, MessageParserState* pOutState=0);\r
-\r
-private:\r
-       friend class AMCPCommand;\r
-\r
-       void ProcessMessage(const tstring& message, caspar::IO::ClientInfoPtr& pClientInfo);\r
-       static std::size_t TokenizeMessage(const tstring& message, std::vector<tstring>* pTokenVector);\r
-       static AMCPCommandPtr CommandFactory(const tstring& str);\r
-\r
-       bool QueueCommand(AMCPCommandPtr);\r
-\r
-       std::vector<AMCPCommandQueuePtr> commandQueues_;\r
-       static const tstring MessageDelimiter;\r
-};\r
-\r
-}      //namespace amcp\r
-}      //namespace caspar\r
-\r
-#endif //_AMCPMESSAGEHANDLER_H__
\ No newline at end of file
diff --git a/server/audio/AudioManager.h b/server/audio/AudioManager.h
deleted file mode 100644 (file)
index 79ac490..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include "..\frame\Frame.h"\r
-\r
-namespace caspar {\r
-\r
-class FrameMediaController;\r
-struct MediaProducerInfo;\r
-\r
-namespace audio {\r
-\r
-class AudioDataChunk \r
-{\r
-public:\r
-       AudioDataChunk(int len) : length_(len), pData_(new char[len]), volume_(1.0f)\r
-       {}\r
-\r
-       ~AudioDataChunk() {\r
-               if(pData_ != 0)\r
-                       delete[] pData_;\r
-\r
-               pData_ = 0;\r
-               length_ = 0;\r
-       }\r
-\r
-       char* GetDataPtr() {\r
-               return pData_;\r
-       }\r
-       int GetLength() {\r
-               return length_;\r
-       }\r
-\r
-       void SetVolume(float value)\r
-       {\r
-               volume_ = value;\r
-       }\r
-\r
-       float GetVolume() const\r
-       {\r
-               return volume_;\r
-       }\r
-\r
-private:\r
-       float volume_;\r
-       char* pData_;\r
-       int length_;\r
-};\r
-typedef std::tr1::shared_ptr<AudioDataChunk> AudioDataChunkPtr;\r
-\r
-class ISoundBufferWorker \r
-{\r
-public:\r
-       virtual ~ISoundBufferWorker()\r
-       {}\r
-\r
-       virtual void Start() = 0;\r
-       virtual void Stop() = 0;\r
-\r
-       virtual bool PushChunk(AudioDataChunkPtr) = 0;\r
-       virtual HANDLE GetWaitHandle() = 0;\r
-};\r
-typedef std::tr1::shared_ptr<ISoundBufferWorker> SoundBufferWorkerPtr;\r
-\r
-class IAudioManager \r
-{\r
-public:\r
-       virtual ~IAudioManager()\r
-       {}\r
-\r
-       virtual bool CueAudio(FrameMediaController*) = 0;\r
-       virtual bool StartAudio(FrameMediaController*) = 0;\r
-       virtual bool StopAudio(FrameMediaController*) = 0;\r
-       virtual bool PushAudioData(FrameMediaController*, FramePtr) = 0;\r
-};\r
-\r
-}      //namespace audio\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/audio/DirectSoundManager.cpp b/server/audio/DirectSoundManager.cpp
deleted file mode 100644 (file)
index 09f865f..0000000
+++ /dev/null
@@ -1,488 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-\r
-#include "..\utils\thread.h"\r
-#include "..\utils\lockable.h"\r
-#include <queue>\r
-\r
-#include <mmsystem.h>\r
-#include <dsound.h>\r
-\r
-#include "..\MediaProducerInfo.h"\r
-#include "..\frame\FrameMediaController.h"\r
-#include "DirectSoundManager.h"\r
-\r
-namespace caspar {\r
-namespace directsound {\r
-\r
-using namespace audio;\r
-using namespace utils;\r
-\r
-///////////////////////////////\r
-// DirectSoundBufferWorker\r
-///////////////////////////////\r
-class DirectSoundBufferWorker : public caspar::audio::ISoundBufferWorker, private utils::IRunnable, private utils::LockableObject\r
-{\r
-       friend class DirectSoundManager;\r
-\r
-       DirectSoundBufferWorker(const DirectSoundBufferWorker&);\r
-       DirectSoundBufferWorker& operator=(const DirectSoundBufferWorker&);\r
-\r
-public:\r
-       static const int BufferLengthInFrames;\r
-\r
-       virtual ~DirectSoundBufferWorker();\r
-\r
-       void Start() {\r
-               worker_.Start(this);\r
-       }\r
-       void Stop() {\r
-               worker_.Stop();\r
-       }\r
-\r
-       bool PushChunk(AudioDataChunkPtr);\r
-\r
-       HANDLE GetWaitHandle() {\r
-               return writeEvent_;\r
-       }\r
-\r
-private:\r
-       AudioDataChunkPtr GetNextChunk();\r
-\r
-private:\r
-       explicit DirectSoundBufferWorker(LPDIRECTSOUNDBUFFER8 pDirectSound);\r
-       HRESULT InitSoundBuffer(WORD channels, WORD bits, DWORD samplesPerSec, DWORD fps);\r
-\r
-       virtual void Run(HANDLE stopEvent);\r
-       virtual bool OnUnhandledException(const std::exception&) throw();\r
-       utils::Thread worker_;\r
-\r
-\r
-       void WriteChunkToBuffer(int offset, AudioDataChunkPtr pChunk);\r
-       int IncreaseFrameIndex(int frameIndex) {\r
-               return (frameIndex+1)%BufferLengthInFrames;\r
-       }\r
-\r
-       HANDLE notificationEvents_[2];\r
-\r
-       int bytesPerFrame_;\r
-       bool bIsRunning_;\r
-\r
-       LPDIRECTSOUNDBUFFER8 pSoundBuffer_;\r
-\r
-       std::queue<AudioDataChunkPtr> chunkQueue_;\r
-       utils::Event writeEvent_;\r
-       utils::Event startPlayback_;\r
-\r
-       int soundBufferLoadIndex_;\r
-       int lastPlayIndex_;\r
-};\r
-typedef std::tr1::shared_ptr<DirectSoundBufferWorker> DirectSoundBufferWorkerPtr;\r
-\r
-\r
-///////////////////////////////\r
-//\r
-// DirectSoundManager\r
-//\r
-///////////////////////////////\r
-DirectSoundManager::DirectSoundManager() : pDirectSound_(0)\r
-{\r
-}\r
-\r
-DirectSoundManager::~DirectSoundManager()\r
-{\r
-       Destroy();\r
-}\r
-\r
-bool DirectSoundManager::Initialize(HWND hWnd, DWORD channels, DWORD samplesPerSec, DWORD bitsPerSample) {\r
-#ifndef DISABLE_AUDIO\r
-       HRESULT hr = E_FAIL;\r
-       hr = DirectSoundCreate8(NULL, &pDirectSound_, NULL);\r
-       if(FAILED(hr)) {\r
-               LOG << TEXT("DirectSound: Failed to create device.");\r
-               return false;\r
-       }\r
-\r
-       hr = pDirectSound_->SetCooperativeLevel(hWnd, DSSCL_PRIORITY);\r
-       if(FAILED(hr)) {\r
-               LOG << TEXT("DirectSound: Failed to set CooperativeLevel.");\r
-               return false;\r
-       }\r
-\r
-       hr = SetPrimaryBufferFormat(channels, samplesPerSec, bitsPerSample);\r
-       if(FAILED(hr)) {\r
-               LOG << TEXT("DirectSound: Failed to set Primarybuffer format.");\r
-               return false;\r
-       }\r
-#endif\r
-       return true;\r
-}\r
-\r
-void DirectSoundManager::Destroy() {\r
-       if(pDirectSound_ != 0) {\r
-               pDirectSound_->Release();\r
-               pDirectSound_ = 0;\r
-       }\r
-}\r
-\r
-bool DirectSoundManager::CueAudio(FrameMediaController* pController) \r
-{\r
-       MediaProducerInfo clipInfo;\r
-#ifndef DISABLE_AUDIO\r
-       if(pController->GetProducerInfo(&clipInfo) && clipInfo.HaveAudio) {\r
-               caspar::audio::SoundBufferWorkerPtr pSBW = CreateSoundBufferWorker(clipInfo.AudioChannels, clipInfo.BitsPerAudioSample, clipInfo.AudioSamplesPerSec, 25);\r
-               if(pSBW) {\r
-                       pController->AddSoundBufferWorker(pSBW);\r
-                       return true;\r
-               }\r
-       }\r
-#endif\r
-       return false;\r
-}\r
-\r
-bool DirectSoundManager::StartAudio(FrameMediaController* pController)\r
-{\r
-#ifndef DISABLE_AUDIO\r
-       SoundBufferWorkerList& sbwList = pController->GetSoundBufferWorkers();\r
-       SoundBufferWorkerList::iterator it = sbwList.begin();\r
-       SoundBufferWorkerList::iterator end = sbwList.end();\r
-       for(;it != end; ++it)\r
-       {\r
-               (*it)->Start();\r
-       }\r
-#endif\r
-       return true;\r
-}\r
-\r
-bool DirectSoundManager::StopAudio(FrameMediaController* pController)\r
-{\r
-#ifndef DISABLE_AUDIO\r
-       SoundBufferWorkerList& sbwList = pController->GetSoundBufferWorkers();\r
-       SoundBufferWorkerList::iterator it = sbwList.begin();\r
-       SoundBufferWorkerList::iterator end = sbwList.end();\r
-       for(;it != end; ++it)\r
-       {\r
-               (*it)->Stop();\r
-       }\r
-#endif\r
-       return true;\r
-}\r
-\r
-bool DirectSoundManager::PushAudioData(FrameMediaController* pController, FramePtr pFrame)\r
-{\r
-#ifndef DISABLE_AUDIO\r
-       SoundBufferWorkerList& sbwList = pController->GetSoundBufferWorkers();\r
-       AudioDataChunkList data = pFrame->GetAudioData();\r
-\r
-       SoundBufferWorkerList::iterator it = sbwList.begin();\r
-       SoundBufferWorkerList::iterator end = sbwList.end();\r
-\r
-       for(int dataIndex = 0;it != end && dataIndex < data.size(); ++it, ++dataIndex) {\r
-               if(dataIndex < pFrame->GetAudioData().size())\r
-                       (*it)->PushChunk(pFrame->GetAudioData()[dataIndex]);\r
-               else\r
-                       break;\r
-       }\r
-#endif\r
-       return true;\r
-}\r
-\r
-SoundBufferWorkerPtr DirectSoundManager::CreateSoundBufferWorker(WORD channels, WORD bits, DWORD samplesPerSec, DWORD fps) {\r
-       SoundBufferWorkerPtr result;\r
-\r
-       if(pDirectSound_ != 0) {\r
-               WAVEFORMATEX wfx;\r
-               DSBUFFERDESC bufferDesc;\r
-               LPDIRECTSOUNDBUFFER pSoundBuffer;\r
-               LPDIRECTSOUNDBUFFER8 pSoundBuffer8;\r
-\r
-               HRESULT hr;\r
-\r
-               ZeroMemory(&wfx, sizeof(wfx));\r
-               wfx.cbSize = sizeof(wfx);\r
-               wfx.wFormatTag = WAVE_FORMAT_PCM;\r
-               wfx.nChannels = channels;\r
-               wfx.wBitsPerSample = bits;\r
-               wfx.nSamplesPerSec = samplesPerSec;\r
-               wfx.nBlockAlign = (wfx.nChannels * wfx.wBitsPerSample) / 8;\r
-               wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign;\r
-\r
-               int bytesPerFrame = wfx.nAvgBytesPerSec / fps;\r
-\r
-               ZeroMemory(&bufferDesc, sizeof(bufferDesc));\r
-               bufferDesc.dwSize = sizeof(bufferDesc);\r
-               bufferDesc.dwFlags = DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPOSITIONNOTIFY | DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_CTRLVOLUME;\r
-               bufferDesc.dwBufferBytes = bytesPerFrame * DirectSoundBufferWorker::BufferLengthInFrames;\r
-               bufferDesc.lpwfxFormat = &wfx;\r
-\r
-               hr = pDirectSound_->CreateSoundBuffer(&bufferDesc, &pSoundBuffer, NULL);\r
-               if(SUCCEEDED(hr)) {\r
-                       hr = pSoundBuffer->QueryInterface(IID_IDirectSoundBuffer8, (LPVOID*) &pSoundBuffer8);\r
-                       pSoundBuffer->Release();\r
-                       if(FAILED(hr)) {\r
-                               LOG << TEXT("DirectSound: Failed to create SoundBuffer.");\r
-                               return result;\r
-                       }\r
-               }\r
-               else {\r
-                       LOG << TEXT("DirectSound: Failed to create SoundBuffer.");\r
-                       return result;\r
-               }\r
-\r
-               DirectSoundBufferWorkerPtr pSBW(new DirectSoundBufferWorker(pSoundBuffer8));\r
-               if(FAILED(pSBW->InitSoundBuffer(channels, bits, samplesPerSec, fps))) {\r
-                       LOG << TEXT("DirectSound: Failed to init SoundBuffer.");\r
-                       return result;\r
-               }\r
-               pSBW->Start();\r
-               result = pSBW;\r
-       }\r
-\r
-       return result;\r
-}\r
-\r
-HRESULT DirectSoundManager::SetPrimaryBufferFormat(DWORD dwPrimaryChannels, DWORD dwPrimaryFreq,  DWORD dwPrimaryBitRate)\r
-{\r
-       HRESULT hr;\r
-       LPDIRECTSOUNDBUFFER pDSBPrimary = NULL;\r
-\r
-       if(pDirectSound_ == NULL )\r
-               return CO_E_NOTINITIALIZED;\r
-\r
-       // Get the primary buffer \r
-       DSBUFFERDESC dsbd;\r
-       ZeroMemory( &dsbd, sizeof(DSBUFFERDESC) );\r
-       dsbd.dwSize        = sizeof(DSBUFFERDESC);\r
-       dsbd.dwFlags       = DSBCAPS_PRIMARYBUFFER;\r
-       dsbd.dwBufferBytes = 0;\r
-       dsbd.lpwfxFormat   = NULL;\r
-\r
-       hr = pDirectSound_->CreateSoundBuffer( &dsbd, &pDSBPrimary, NULL );\r
-       if(FAILED(hr))\r
-               return hr;\r
-\r
-       WAVEFORMATEX wfx;\r
-       ZeroMemory( &wfx, sizeof(WAVEFORMATEX) ); \r
-       wfx.wFormatTag          = (WORD) WAVE_FORMAT_PCM; \r
-       wfx.nChannels           = (WORD) dwPrimaryChannels; \r
-       wfx.nSamplesPerSec      = (DWORD) dwPrimaryFreq; \r
-       wfx.wBitsPerSample      = (WORD) dwPrimaryBitRate; \r
-       wfx.nBlockAlign         = (WORD) (wfx.wBitsPerSample / 8 * wfx.nChannels);\r
-       wfx.nAvgBytesPerSec     = (DWORD) (wfx.nSamplesPerSec * wfx.nBlockAlign);\r
-\r
-       hr = pDSBPrimary->SetFormat(&wfx);\r
-       if(FAILED(hr)) {\r
-               pDSBPrimary->Release();\r
-               pDSBPrimary = 0;\r
-               return hr;\r
-       }\r
-\r
-       pDSBPrimary->Release();\r
-       pDSBPrimary = 0;\r
-\r
-       return S_OK;\r
-}\r
-\r
-/////////////////////////////////\r
-//\r
-// DirectSoundBufferWorker Impl\r
-//\r
-/////////////////////////////////\r
-const int DirectSoundBufferWorker::BufferLengthInFrames = 3;\r
-\r
-DirectSoundBufferWorker::DirectSoundBufferWorker(LPDIRECTSOUNDBUFFER8 pSoundBuffer) : writeEvent_(TRUE, TRUE), bytesPerFrame_(0), pSoundBuffer_(pSoundBuffer), bIsRunning_(false), startPlayback_(FALSE, FALSE), soundBufferLoadIndex_(0), lastPlayIndex_(0)\r
-{\r
-       //reserve the first event for the stopEvent\r
-       notificationEvents_[0] = 0;\r
-       notificationEvents_[1] = CreateEvent(NULL, FALSE, FALSE, NULL);\r
-}\r
-\r
-DirectSoundBufferWorker::~DirectSoundBufferWorker(void) {\r
-       Stop();\r
-\r
-       pSoundBuffer_->Release();\r
-       pSoundBuffer_ = 0;\r
-\r
-       CloseHandle(notificationEvents_[1]);\r
-       notificationEvents_[1] = 0;\r
-}\r
-\r
-void DirectSoundBufferWorker::Run(HANDLE stopEvent) {\r
-       bool bQuit = false;\r
-       notificationEvents_[0] = stopEvent;\r
-\r
-       {\r
-               HANDLE waitEvents[2] = {stopEvent, startPlayback_};\r
-               HRESULT waitResult = WAIT_TIMEOUT;\r
-               while(waitResult == WAIT_TIMEOUT || waitResult == WAIT_OBJECT_0)\r
-               {\r
-                       waitResult = WaitForMultipleObjects(2, waitEvents, FALSE, 2500);\r
-                       if(waitResult == WAIT_OBJECT_0)\r
-                               goto workerloop_end;\r
-               }\r
-       }\r
-\r
-       bIsRunning_ = true;\r
-       HRESULT hr = pSoundBuffer_->Play(0, 0, DSBPLAY_LOOPING);\r
-       while(!bQuit) {\r
-               DWORD waitResult = WaitForMultipleObjects(2, notificationEvents_, FALSE, 2500);\r
-               switch(waitResult) {\r
-                       case WAIT_OBJECT_0:     //stopEvent\r
-                               bQuit = true;\r
-                               break;\r
-\r
-                       case WAIT_TIMEOUT:\r
-                               break;\r
-\r
-                       case WAIT_FAILED:\r
-                               bQuit = true;\r
-                               break;\r
-\r
-                       default:\r
-                               {\r
-                                       DWORD currentPlayCursor = 0, currentWriteCursor = 0;\r
-                                       HRESULT hr = pSoundBuffer_->GetCurrentPosition(&currentPlayCursor, &currentWriteCursor);\r
-                                       if(SUCCEEDED(hr)) {\r
-                                               int currentPlayCursorIndex = currentPlayCursor / bytesPerFrame_;\r
-                                               if(currentPlayCursorIndex != lastPlayIndex_) {\r
-                                                       AudioDataChunkPtr pChunk = GetNextChunk();\r
-                                                       int offset = lastPlayIndex_ * bytesPerFrame_;\r
-\r
-                                                       WriteChunkToBuffer(offset, pChunk);\r
-\r
-                                                       lastPlayIndex_ = currentPlayCursorIndex;\r
-                                               }\r
-                                       }\r
-                               }\r
-                               break;\r
-               }\r
-       }\r
-\r
-workerloop_end:\r
-       pSoundBuffer_->Stop();\r
-       bIsRunning_ = false;\r
-}\r
-\r
-bool DirectSoundBufferWorker::OnUnhandledException(const std::exception&) throw() {\r
-       try {\r
-               if(pSoundBuffer_ != 0)\r
-                       pSoundBuffer_->Stop();\r
-\r
-               LOG << TEXT("UNEXPECTED EXCEPTION in SoundBufferWorker.");\r
-       }\r
-       catch(...) \r
-       {}\r
-\r
-       return false;\r
-}\r
-\r
-void DirectSoundBufferWorker::WriteChunkToBuffer(int offset, AudioDataChunkPtr pChunk) {\r
-       void* pPtr;\r
-       DWORD len;\r
-\r
-       HRESULT hr = pSoundBuffer_->Lock(offset, bytesPerFrame_, &pPtr, &len, NULL, NULL, 0); \r
-       if(SUCCEEDED(hr)) {\r
-               if(pChunk != 0) {\r
-                       //len and pChunk-length SHOULD be the same, but better safe than sorry\r
-                       memcpy(pPtr, pChunk->GetDataPtr(), min(len, pChunk->GetLength()));\r
-               }\r
-               else {\r
-                       memset(pPtr, 0, len);\r
-               }\r
-\r
-               pSoundBuffer_->Unlock(pPtr, len, NULL, 0);\r
-       }\r
-}\r
-\r
-bool DirectSoundBufferWorker::PushChunk(AudioDataChunkPtr pChunk) {\r
-       Lock lock(*this);\r
-\r
-       //WaitForSingleObject(writeEvent_, 200);\r
-\r
-       if(!bIsRunning_) {\r
-               if(soundBufferLoadIndex_ < 3) {\r
-                       WriteChunkToBuffer(bytesPerFrame_ * soundBufferLoadIndex_, pChunk);\r
-                       ++soundBufferLoadIndex_;\r
-                       return true;\r
-               }\r
-               else\r
-                       startPlayback_.Set();\r
-       }\r
-\r
-       chunkQueue_.push(pChunk);\r
-\r
-       if(chunkQueue_.size() >= 5)\r
-               writeEvent_.Reset();\r
-\r
-       return true;\r
-}\r
-\r
-AudioDataChunkPtr DirectSoundBufferWorker::GetNextChunk() {\r
-       Lock lock(*this);\r
-       AudioDataChunkPtr pChunk;\r
-\r
-       if(chunkQueue_.size() > 0) {\r
-               pChunk = chunkQueue_.front();\r
-               chunkQueue_.pop();\r
-       }\r
-\r
-       if(chunkQueue_.size() < 5)\r
-               writeEvent_.Set();\r
-\r
-       return pChunk;\r
-}\r
-\r
-HRESULT DirectSoundBufferWorker::InitSoundBuffer(WORD channels, WORD bits, DWORD samplesPerSec, DWORD fps) {\r
-\r
-       bytesPerFrame_ = samplesPerSec * channels * (bits/8) / fps;\r
-       DWORD bufferSize = bytesPerFrame_ * BufferLengthInFrames;\r
-       \r
-       LPDIRECTSOUNDNOTIFY8 pBufferNotify;\r
-       HRESULT hr = pSoundBuffer_->QueryInterface(IID_IDirectSoundNotify8, (LPVOID*) &pBufferNotify);\r
-       if(SUCCEEDED(hr)) {\r
-               DSBPOSITIONNOTIFY pPositionNotifies[BufferLengthInFrames];\r
-\r
-               for(int i=0; i < BufferLengthInFrames; ++i) {\r
-                       pPositionNotifies[i].dwOffset = (i+1)*bytesPerFrame_ - 1;\r
-                       pPositionNotifies[i].hEventNotify = notificationEvents_[1];\r
-               }\r
-\r
-               hr = pBufferNotify->SetNotificationPositions(BufferLengthInFrames, &(pPositionNotifies[0]));\r
-               pBufferNotify->Release();\r
-       }\r
-       else \r
-               return hr;\r
-\r
-       //Init the buffer to silence\r
-       void* pPtr = 0;\r
-       DWORD len = 0;\r
-       hr = pSoundBuffer_->Lock(0, bufferSize, &pPtr, &len, NULL, NULL, 0); \r
-       if(SUCCEEDED(hr) && pPtr != 0) {\r
-               memset(pPtr, 0, len);\r
-               pSoundBuffer_->Unlock(pPtr, len, NULL, 0);\r
-       }\r
-\r
-       return hr;\r
-}\r
-\r
-}      //namespace directsound\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/audio/DirectSoundManager.h b/server/audio/DirectSoundManager.h
deleted file mode 100644 (file)
index f67c1f3..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include "AudioManager.h"\r
-\r
-struct IDirectSound8;\r
-typedef IDirectSound8* LPDIRECTSOUND8;\r
-\r
-namespace caspar {\r
-namespace directsound {\r
-\r
-class DirectSoundManager : public caspar::audio::IAudioManager\r
-{\r
-       DirectSoundManager(const DirectSoundManager&);\r
-       DirectSoundManager& operator=(const DirectSoundManager&);\r
-       DirectSoundManager();\r
-\r
-public:\r
-       static DirectSoundManager* GetInstance() {\r
-               static DirectSoundManager instance;\r
-               return &instance;\r
-       }\r
-\r
-       ~DirectSoundManager();\r
-\r
-       bool Initialize(HWND hWnd, DWORD channels, DWORD samplesPerSec, DWORD bitsPerSample);\r
-       void Destroy();\r
-\r
-       virtual bool CueAudio(FrameMediaController*);\r
-       virtual bool StartAudio(FrameMediaController*);\r
-       virtual bool StopAudio(FrameMediaController*);\r
-       virtual bool PushAudioData(FrameMediaController*, FramePtr);\r
-\r
-private:\r
-       caspar::audio::SoundBufferWorkerPtr CreateSoundBufferWorker(WORD channels, WORD bits, DWORD samplesPerSec, DWORD fps);\r
-       HRESULT SetPrimaryBufferFormat(DWORD dwPrimaryChannels, DWORD dwPrimaryFreq,  DWORD dwPrimaryBitRate);\r
-\r
-       IDirectSound8* pDirectSound_;\r
-};\r
-\r
-}      //namespace directsound\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/cg/CGControl.h b/server/cg/CGControl.h
deleted file mode 100644 (file)
index 97ded37..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_CGCONTROL_H__\r
-#define _CASPAR_CGCONTROL_H__\r
-\r
-#pragma once\r
-\r
-namespace caspar {\r
-namespace CG { \r
-\r
-class ICGControl\r
-{\r
-public:\r
-       virtual ~ICGControl() {}\r
-\r
-       virtual void Add(int layer, const tstring& templateName, bool playOnLoad, const tstring& label, const tstring& data) = 0;\r
-       virtual void Remove(int layer) = 0;\r
-       virtual void Clear() = 0;\r
-       virtual void Play(int layer) = 0;\r
-       virtual void Stop(int layer, unsigned int mixOutDuration) = 0;\r
-       virtual void Next(int layer) = 0;\r
-       virtual void Update(int layer, const tstring& data) = 0;\r
-       virtual void Invoke(int layer, const tstring& label) = 0;\r
-};\r
-\r
-}\r
-}\r
-\r
-#endif //_CASPAR_CGCONTROL_H__
\ No newline at end of file
diff --git a/server/cg/FlashCGManager.cpp b/server/cg/FlashCGManager.cpp
deleted file mode 100644 (file)
index 9d59c5b..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-\r
-#include "..\Producers\flash\FlashManager.h"\r
-#include "..\Producers\flash\FlashProducer.h"\r
-\r
-#include "..\Application.h"\r
-#include "..\transitioninfo.h"\r
-\r
-#include "FlashCGManager.h"\r
-\r
-namespace caspar {\r
-namespace CG {\r
-\r
-using namespace utils;\r
-\r
-FlashCGManager::FlashCGManager(caspar::Channel* pChannel) : pChannel_(pChannel), pFlashManager_(new caspar::FlashManager()) {\r
-}\r
-\r
-FlashCGManager::~FlashCGManager() {\r
-       if(pFlashManager_ != 0) {\r
-               delete pFlashManager_;\r
-               pFlashManager_ = 0;\r
-       }\r
-}\r
-\r
-void FlashCGManager::DisplayActive() {\r
-/*     if(pChannel_->GetActiveProducer() != activeCGProducer_) {\r
-               LOG << LogLevel::Debug << TEXT("Had to display active cg-producer");\r
-\r
-               caspar::TransitionInfo transition;\r
-               if(pChannel_->LoadBackground(activeCGProducer_, transition)){\r
-                       pChannel_->Play();\r
-               }\r
-               else {\r
-                       LOG << TEXT("Failed to display active cg-producer");\r
-               }\r
-       }*/\r
-}\r
-FlashProducerPtr FlashCGManager::CreateNewProducer()\r
-{\r
-#if TEMPLATEHOST_VERSION < 1700\r
-       return std::tr1::dynamic_pointer_cast<FlashProducer, MediaProducer>(pFlashManager_->CreateProducer(GetApplication()->GetTemplateFolder()+TEXT("CG.fth")));\r
-#else\r
-       return std::tr1::dynamic_pointer_cast<FlashProducer, MediaProducer>(pFlashManager_->CreateProducer(GetApplication()->GetTemplateFolder()+TEXT("CG.fth.17")));\r
-#endif\r
-}\r
-\r
-void FlashCGManager::Add(int layer, const tstring& templateName, unsigned int mixInDuration, bool playOnLoad, const tstring& startFromLabel, const tstring& data) {\r
-       if(activeCGProducer_ == 0 || activeCGProducer_->IsEmpty()) {\r
-               activeCGProducer_ = CreateNewProducer();\r
-               \r
-               LOG << TEXT("Created new flashproducer");\r
-       }\r
-\r
-       if(activeCGProducer_ != 0) {\r
-               tstringstream flashParam;\r
-               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
-               DisplayActive();\r
-               activeCGProducer_->Param(flashParam.str());\r
-               LOG << LogLevel::Debug << TEXT("Invoked add-command");\r
-       }\r
-}\r
-\r
-void FlashCGManager::Remove(int layer) {\r
-       if(activeCGProducer_ != 0) {\r
-               tstringstream flashParam;\r
-#if TEMPLATEHOST_VERSION < 1700\r
-               flashParam << TEXT("<invoke name=\"Delete\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number></arguments></invoke>");\r
-#else\r
-               flashParam << TEXT("<invoke name=\"Delete\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>") << layer << TEXT("</number></property></array></arguments></invoke>");\r
-#endif\r
-               activeCGProducer_->Param(flashParam.str());\r
-               DisplayActive();\r
-       }\r
-}\r
-\r
-void FlashCGManager::Clear() {\r
-       activeCGProducer_ = CreateNewProducer();\r
-       DisplayActive();\r
-}\r
-\r
-void FlashCGManager::Play(int layer) {\r
-       if(activeCGProducer_ != 0) {\r
-               tstringstream flashParam;\r
-#if TEMPLATEHOST_VERSION < 1700\r
-               flashParam << TEXT("<invoke name=\"Play\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number></arguments></invoke>");\r
-#else\r
-               flashParam << TEXT("<invoke name=\"Play\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>") << layer << TEXT("</number></property></array></arguments></invoke>");\r
-#endif\r
-\r
-               activeCGProducer_->Param(flashParam.str());\r
-               LOG << LogLevel::Debug << TEXT("Invoked play-command");\r
-               DisplayActive();\r
-       }\r
-}\r
-\r
-void FlashCGManager::Stop(int layer, unsigned int mixOutDuration) {\r
-       if(activeCGProducer_ != 0) {\r
-               tstringstream flashParam;\r
-#if TEMPLATEHOST_VERSION < 1700\r
-               flashParam << TEXT("<invoke name=\"Stop\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><number>") << mixOutDuration << TEXT("</number></arguments></invoke>");\r
-#else\r
-               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
-#endif\r
-               activeCGProducer_->Param(flashParam.str());\r
-               LOG << LogLevel::Debug << TEXT("Invoked stop-command");\r
-               DisplayActive();\r
-       }\r
-}\r
-\r
-void FlashCGManager::Next(int layer) {\r
-       if(activeCGProducer_ != 0) {\r
-               tstringstream flashParam;\r
-#if TEMPLATEHOST_VERSION < 1700\r
-               flashParam << TEXT("<invoke name=\"Next\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number></arguments></invoke>");\r
-#else\r
-               flashParam << TEXT("<invoke name=\"Next\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>") << layer << TEXT("</number></property></array></arguments></invoke>");\r
-#endif\r
-               activeCGProducer_->Param(flashParam.str());\r
-               DisplayActive();\r
-       }\r
-}\r
-\r
-void FlashCGManager::Goto(int layer, const tstring& label) {\r
-       if(activeCGProducer_ != 0) {\r
-               tstringstream flashParam;\r
-#if TEMPLATEHOST_VERSION < 1700\r
-               flashParam << TEXT("<invoke name=\"GotoLabel\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><string>") << label << TEXT("</string></arguments></invoke>");\r
-#else\r
-               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
-#endif\r
-               activeCGProducer_->Param(flashParam.str());\r
-               DisplayActive();\r
-       }\r
-}\r
-\r
-void FlashCGManager::Update(int layer, const tstring& data) {\r
-       if(activeCGProducer_ != 0) {\r
-               tstringstream flashParam;\r
-#if TEMPLATEHOST_VERSION < 1700\r
-               flashParam << TEXT("<invoke name=\"SetData\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><string><![CDATA[ ") << data << TEXT(" ]]></string></arguments></invoke>");\r
-#else\r
-               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
-#endif\r
-               activeCGProducer_->Param(flashParam.str());\r
-               DisplayActive();\r
-       }\r
-}\r
-\r
-void FlashCGManager::Invoke(int layer, const tstring& methodSpec) {\r
-       if(activeCGProducer_ != 0) {\r
-               tstringstream flashParam;\r
-#if TEMPLATEHOST_VERSION < 1700\r
-               flashParam << TEXT("<invoke name=\"ExecuteMethod\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><string>") << methodSpec << TEXT("</string></arguments></invoke>");\r
-#else\r
-               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
-#endif\r
-               activeCGProducer_->Param(flashParam.str());\r
-               DisplayActive();\r
-       }\r
-}\r
-\r
-}      //namespace CG\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/cg/FlashCGManager.h b/server/cg/FlashCGManager.h
deleted file mode 100644 (file)
index e490861..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include "..\channel.h"\r
-#include "..\MediaManager.h"\r
-#include <string>\r
-#include <list>\r
-\r
-namespace caspar {\r
-       class Channel;\r
-       class FlashManager;\r
-       class FlashProducer;\r
-       typedef std::tr1::shared_ptr<FlashProducer> FlashProducerPtr;\r
-\r
-namespace CG {\r
-\r
-class FlashCGManager\r
-{\r
-public:\r
-       explicit FlashCGManager(caspar::Channel*);\r
-public:\r
-       virtual ~FlashCGManager();\r
-\r
-       void Add(int layer, const tstring& templateName, unsigned int mixInDuration, bool playOnLoad, const tstring& startFromLabel, const tstring& data);\r
-       void Remove(int layer);\r
-       void Clear();\r
-       void Play(int layer);\r
-       void Stop(int layer, unsigned int mixOutDuration);\r
-       void Next(int layer);\r
-       void Goto(int layer, const tstring& label);\r
-       void Update(int layer, const tstring& data);\r
-       void Invoke(int layer, const tstring& methodSpec);\r
-\r
-\r
-private:\r
-       void DisplayActive();\r
-       FlashProducerPtr CreateNewProducer();\r
-\r
-       caspar::Channel* pChannel_;\r
-\r
-       caspar::FlashManager* pFlashManager_;\r
-       FlashProducerPtr activeCGProducer_;\r
-};\r
-\r
-typedef std::tr1::shared_ptr<FlashCGManager> FlashCGManagerPtr;\r
-\r
-}      //namespace CG\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/cg/FlashCGProxy.cpp b/server/cg/FlashCGProxy.cpp
deleted file mode 100644 (file)
index 78f5d31..0000000
+++ /dev/null
@@ -1,320 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-\r
-#include "../producers/flash/flashproducer.h"\r
-#include "../application.h"\r
-#include "../utils/fileexists.h"\r
-#include "FlashCGProxy.h"\r
-\r
-namespace caspar {\r
-namespace CG { \r
-\r
-using namespace utils;\r
-\r
-int FlashCGProxy::cgVersion_ = 0;\r
-\r
-class FlashCGProxy16 : public FlashCGProxy\r
-{\r
-public:\r
-       FlashCGProxy16::FlashCGProxy16()\r
-       {\r
-               pFlashProducer_ = FlashProducer::Create(GetApplication()->GetTemplateFolder()+TEXT("CG.fth"));\r
-               if(!pFlashProducer_)\r
-                       throw std::exception("Failed to create flashproducer for templatehost");\r
-       }\r
-\r
-       virtual void Add(int layer, const tstring& templateName, bool playOnLoad, const tstring& label, const tstring& data) {\r
-               tstringstream flashParam;\r
-\r
-               tstring::size_type pos = templateName.find('.');\r
-               tstring filename = (pos != tstring::npos) ? templateName.substr(0, pos) : templateName;\r
-               \r
-               flashParam << TEXT("<invoke name=\"Add\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><string>") << filename << TEXT("</string><number>0</number>") << (playOnLoad?TEXT("<true/>"):TEXT("<false/>")) << TEXT("<string>") << label << TEXT("</string><string><![CDATA[ ") << data << TEXT(" ]]></string></arguments></invoke>");\r
-               LOG << LogLevel::Debug << TEXT("Invoking add-command");\r
-               pFlashProducer_->Param(flashParam.str());\r
-       }\r
-       virtual void Remove(int layer) {\r
-               tstringstream flashParam;\r
-               flashParam << TEXT("<invoke name=\"Delete\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number></arguments></invoke>");\r
-               LOG << LogLevel::Debug << TEXT("Invoking remove-command");\r
-               pFlashProducer_->Param(flashParam.str());\r
-       }\r
-       virtual void Play(int layer) {\r
-               tstringstream flashParam;\r
-               flashParam << TEXT("<invoke name=\"Play\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number></arguments></invoke>");\r
-               LOG << LogLevel::Debug << TEXT("Invoking play-command");\r
-               pFlashProducer_->Param(flashParam.str());\r
-       }\r
-       virtual void Stop(int layer, unsigned int mixOutDuration) {\r
-               tstringstream flashParam;\r
-               flashParam << TEXT("<invoke name=\"Stop\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><number>") << mixOutDuration << TEXT("</number></arguments></invoke>");\r
-               LOG << LogLevel::Debug << TEXT("Invoking stop-command");\r
-               pFlashProducer_->Param(flashParam.str());\r
-       }\r
-       virtual void Next(int layer) {\r
-               tstringstream flashParam;\r
-               flashParam << TEXT("<invoke name=\"Next\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number></arguments></invoke>");\r
-               LOG << LogLevel::Debug << TEXT("Invoking next-command");\r
-               pFlashProducer_->Param(flashParam.str());\r
-       }\r
-       virtual void Update(int layer, const tstring& data) {\r
-               tstringstream flashParam;\r
-               flashParam << TEXT("<invoke name=\"SetData\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><string><![CDATA[ ") << data << TEXT(" ]]></string></arguments></invoke>");\r
-               LOG << LogLevel::Debug << TEXT("Invoking update-command");\r
-               pFlashProducer_->Param(flashParam.str());\r
-       }\r
-       virtual void Invoke(int layer, const tstring& label) {\r
-               tstringstream flashParam;\r
-               flashParam << TEXT("<invoke name=\"ExecuteMethod\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><string>") << label << TEXT("</string></arguments></invoke>");\r
-               LOG << LogLevel::Debug << TEXT("Invoking invoke-command");\r
-               pFlashProducer_->Param(flashParam.str());\r
-       }\r
-};\r
-\r
-class FlashCGProxy17 : public FlashCGProxy\r
-{\r
-public:\r
-       FlashCGProxy17::FlashCGProxy17()\r
-       {\r
-               pFlashProducer_ = FlashProducer::Create(GetApplication()->GetTemplateFolder()+TEXT("CG.fth.17"));\r
-               if(!pFlashProducer_)\r
-                       throw std::exception("Failed to create flashproducer for templatehost");\r
-       }\r
-\r
-       virtual void Add(int layer, const tstring& templateName, bool playOnLoad, const tstring& label, const tstring& data) {\r
-               tstringstream flashParam;\r
-\r
-               tstring::size_type pos = templateName.find('.');\r
-               tstring filename = (pos != tstring::npos) ? templateName.substr(0, pos) : templateName;\r
-               \r
-               flashParam << TEXT("<invoke name=\"Add\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><string>") << filename << TEXT("</string>") << (playOnLoad?TEXT("<true/>"):TEXT("<false/>")) << TEXT("<string>") << label << TEXT("</string><string><![CDATA[ ") << data << TEXT(" ]]></string></arguments></invoke>");\r
-               LOG << LogLevel::Debug << TEXT("Invoking add-command");\r
-               pFlashProducer_->Param(flashParam.str());\r
-       }\r
-       virtual void Remove(int layer) {\r
-               tstringstream flashParam;\r
-               flashParam << TEXT("<invoke name=\"Delete\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>") << layer << TEXT("</number></property></array></arguments></invoke>");\r
-               LOG << LogLevel::Debug << TEXT("Invoking remove-command");\r
-               pFlashProducer_->Param(flashParam.str());\r
-       }\r
-       virtual void Play(int layer) {\r
-               tstringstream flashParam;\r
-               flashParam << TEXT("<invoke name=\"Play\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>") << layer << TEXT("</number></property></array></arguments></invoke>");\r
-               LOG << LogLevel::Debug << TEXT("Invoking play-command");\r
-               pFlashProducer_->Param(flashParam.str());\r
-       }\r
-       virtual void Stop(int layer, unsigned int mixOutDuration) {\r
-               tstringstream flashParam;\r
-               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
-               LOG << LogLevel::Debug << TEXT("Invoking stop-command");\r
-               pFlashProducer_->Param(flashParam.str());\r
-       }\r
-       virtual void Next(int layer) {\r
-               tstringstream flashParam;\r
-               flashParam << TEXT("<invoke name=\"Next\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>") << layer << TEXT("</number></property></array></arguments></invoke>");\r
-               LOG << LogLevel::Debug << TEXT("Invoking next-command");\r
-               pFlashProducer_->Param(flashParam.str());\r
-       }\r
-       virtual void Update(int layer, const tstring& data) {\r
-               tstringstream flashParam;\r
-               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
-               LOG << LogLevel::Debug << TEXT("Invoking update-command");\r
-               pFlashProducer_->Param(flashParam.str());\r
-       }\r
-       virtual void Invoke(int layer, const tstring& label) {\r
-               tstringstream flashParam;\r
-               flashParam << TEXT("<invoke name=\"Invoke\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>") << layer << TEXT("</number></property></array><string>") << label << TEXT("</string></arguments></invoke>");\r
-               LOG << LogLevel::Debug << TEXT("Invoking invoke-command");\r
-               pFlashProducer_->Param(flashParam.str());\r
-       }\r
-};\r
-\r
-class FlashCGProxy18 : public FlashCGProxy17\r
-{\r
-public:\r
-       FlashCGProxy18::FlashCGProxy18(Monitor* pMonitor)\r
-       {\r
-               pFlashProducer_ = FlashProducer::Create(GetApplication()->GetTemplateFolder()+TEXT("CG.fth.18"), pMonitor);\r
-               if(!pFlashProducer_)\r
-                       throw std::exception("Failed to create flashproducer for templatehost");\r
-       }\r
-\r
-       virtual void Add(int layer, const tstring& templateName, bool playOnLoad, const tstring& label, const tstring& data) {\r
-               tstringstream flashParam;\r
-               flashParam << TEXT("<invoke name=\"Add\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><string>") << templateName << TEXT("</string>") << (playOnLoad?TEXT("<true/>"):TEXT("<false/>")) << TEXT("<string>") << label << TEXT("</string><string><![CDATA[ ") << data << TEXT(" ]]></string></arguments></invoke>");\r
-               LOG << LogLevel::Debug << TEXT("Invoking add-command");\r
-               pFlashProducer_->Param(flashParam.str());\r
-       }\r
-};\r
-\r
-FlashCGProxy::FlashCGProxy()\r
-{}\r
-\r
-FlashCGProxy::~FlashCGProxy()\r
-{}\r
-\r
-FlashCGProxyPtr FlashCGProxy::Create(Monitor* pMonitor)\r
-{\r
-       FlashCGProxyPtr result;\r
-       switch(cgVersion_) {\r
-               case 18:\r
-                       result.reset(new FlashCGProxy18(pMonitor));\r
-                       break;\r
-               case 17:\r
-                       result.reset(new FlashCGProxy17());\r
-                       break;\r
-               case 16:\r
-                       result.reset(new FlashCGProxy16());\r
-                       break;\r
-\r
-               default:\r
-                       break;\r
-       }\r
-\r
-       return result;\r
-}\r
-\r
-void FlashCGProxy::SetCGVersion() {\r
-       if(exists(GetApplication()->GetTemplateFolder()+TEXT("cg.fth.18"))) {\r
-               LOG << TEXT("Running version 1.8 template graphics.");\r
-               cgVersion_ = 18;\r
-       }\r
-       else if(exists(GetApplication()->GetTemplateFolder()+TEXT("cg.fth.17"))) {\r
-               LOG << TEXT("Running version 1.7 template graphics.");\r
-               cgVersion_ = 17;\r
-       }\r
-       else if(exists(GetApplication()->GetTemplateFolder()+TEXT("cg.fth"))) {\r
-               LOG << TEXT("Running version 1.6 template graphics.");\r
-               cgVersion_ = 16;\r
-       }\r
-       else {\r
-               LOG << TEXT("No templatehost found. Template graphics will be disabled");\r
-               cgVersion_ = 0;\r
-       }\r
-}\r
-\r
-bool FlashCGProxy::Initialize(FrameManagerPtr pFrameManager) {\r
-       return pFlashProducer_->Initialize(pFrameManager);\r
-}\r
-\r
-FrameBuffer& FlashCGProxy::GetFrameBuffer() {\r
-       return pFlashProducer_->GetFrameBuffer();\r
-}\r
-\r
-bool FlashCGProxy::IsEmpty() const {\r
-       return pFlashProducer_->IsEmpty();\r
-}\r
-void FlashCGProxy::SetEmptyAlert(EmptyCallback callback) {\r
-       pFlashProducer_->SetEmptyAlert(callback);\r
-}\r
-void FlashCGProxy::Stop() {\r
-       pFlashProducer_->Stop();\r
-}\r
-\r
-void FlashCGProxy::Clear() {\r
-       pFlashProducer_->Stop();\r
-}\r
-\r
-/*\r
-void FlashCGProxy::Add(int layer, const tstring& templateName, bool playOnLoad, const tstring& label, const tstring& data) {\r
-       tstringstream flashParam;\r
-\r
-#if TEMPLATEHOST_VERSION < 1700\r
-       flashParam << TEXT("<invoke name=\"Add\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><string>") << templateName << TEXT("</string><number>0</number>") << (playOnLoad?TEXT("<true/>"):TEXT("<false/>")) << TEXT("<string>") << label << TEXT("</string><string><![CDATA[ ") << data << TEXT(" ]]></string></arguments></invoke>");\r
-#else\r
-       flashParam << TEXT("<invoke name=\"Add\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><string>") << templateName << TEXT("</string>") << (playOnLoad?TEXT("<true/>"):TEXT("<false/>")) << TEXT("<string>") << label << TEXT("</string><string><![CDATA[ ") << data << TEXT(" ]]></string></arguments></invoke>");\r
-#endif\r
-\r
-       LOG << LogLevel::Debug << TEXT("Invoking add-command");\r
-       pFlashProducer_->Param(flashParam.str());\r
-}\r
-\r
-void FlashCGProxy::Remove(int layer) {\r
-       tstringstream flashParam;\r
-#if TEMPLATEHOST_VERSION < 1700\r
-       flashParam << TEXT("<invoke name=\"Delete\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number></arguments></invoke>");\r
-#else\r
-       flashParam << TEXT("<invoke name=\"Delete\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>") << layer << TEXT("</number></property></array></arguments></invoke>");\r
-#endif\r
-       LOG << LogLevel::Debug << TEXT("Invoking remove-command");\r
-       pFlashProducer_->Param(flashParam.str());\r
-}\r
-\r
-\r
-void FlashCGProxy::Play(int layer) {\r
-       tstringstream flashParam;\r
-#if TEMPLATEHOST_VERSION < 1700\r
-       flashParam << TEXT("<invoke name=\"Play\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number></arguments></invoke>");\r
-#else\r
-       flashParam << TEXT("<invoke name=\"Play\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>") << layer << TEXT("</number></property></array></arguments></invoke>");\r
-#endif\r
-\r
-       LOG << LogLevel::Debug << TEXT("Invoking play-command");\r
-       pFlashProducer_->Param(flashParam.str());\r
-}\r
-\r
-void FlashCGProxy::Stop(int layer, unsigned int mixOutDuration) {\r
-       tstringstream flashParam;\r
-#if TEMPLATEHOST_VERSION < 1700\r
-       flashParam << TEXT("<invoke name=\"Stop\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><number>") << mixOutDuration << TEXT("</number></arguments></invoke>");\r
-#else\r
-       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
-#endif\r
-       LOG << LogLevel::Debug << TEXT("Invoking stop-command");\r
-       pFlashProducer_->Param(flashParam.str());\r
-}\r
-\r
-void FlashCGProxy::Next(int layer) {\r
-       tstringstream flashParam;\r
-#if TEMPLATEHOST_VERSION < 1700\r
-       flashParam << TEXT("<invoke name=\"Next\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number></arguments></invoke>");\r
-#else\r
-       flashParam << TEXT("<invoke name=\"Next\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>") << layer << TEXT("</number></property></array></arguments></invoke>");\r
-#endif\r
-       LOG << LogLevel::Debug << TEXT("Invoking next-command");\r
-       pFlashProducer_->Param(flashParam.str());\r
-}\r
-\r
-void FlashCGProxy::Update(int layer, const tstring& data) {\r
-       tstringstream flashParam;\r
-#if TEMPLATEHOST_VERSION < 1700\r
-       flashParam << TEXT("<invoke name=\"SetData\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><string><![CDATA[ ") << data << TEXT(" ]]></string></arguments></invoke>");\r
-#else\r
-       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
-#endif\r
-       LOG << LogLevel::Debug << TEXT("Invoking update-command");\r
-       pFlashProducer_->Param(flashParam.str());\r
-}\r
-\r
-void FlashCGProxy::Invoke(int layer, const tstring& label) {\r
-       tstringstream flashParam;\r
-#if TEMPLATEHOST_VERSION < 1700\r
-       flashParam << TEXT("<invoke name=\"ExecuteMethod\" returntype=\"xml\"><arguments><number>") << layer << TEXT("</number><string>") << label << TEXT("</string></arguments></invoke>");\r
-#else\r
-       flashParam << TEXT("<invoke name=\"Invoke\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>") << layer << TEXT("</number></property></array><string>") << label << TEXT("</string></arguments></invoke>");\r
-#endif\r
-       LOG << LogLevel::Debug << TEXT("Invoking invoke-command");\r
-       pFlashProducer_->Param(flashParam.str());\r
-}\r
-*/\r
-}      //namespace CG\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/cg/FlashCGProxy.h b/server/cg/FlashCGProxy.h
deleted file mode 100644 (file)
index d23a563..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_FLASHCGPROXY_H__\r
-#define _CASPAR_FLASHCGPROXY_H__\r
-\r
-#pragma once\r
-\r
-#include "CGControl.h"\r
-\r
-namespace caspar {\r
-\r
-class Monitor;\r
-\r
-class FlashProducer;\r
-typedef std::tr1::shared_ptr<FlashProducer> FlashProducerPtr;\r
-\r
-typedef std::tr1::function<void()> EmptyCallback;\r
-\r
-namespace CG { \r
-\r
-class FlashCGProxy;\r
-typedef std::tr1::shared_ptr<FlashCGProxy> FlashCGProxyPtr;\r
-\r
-class FlashCGProxy : public ICGControl\r
-{\r
-       static int cgVersion_;\r
-\r
-protected:\r
-       FlashCGProxy();\r
-\r
-public:\r
-       virtual ~FlashCGProxy();\r
-\r
-       static FlashCGProxyPtr Create(Monitor* pMonitor = 0);\r
-\r
-       static void SetCGVersion();\r
-\r
-       bool Initialize(FrameManagerPtr pFrameManager);\r
-       FrameBuffer& GetFrameBuffer();\r
-       bool IsEmpty() const;\r
-       void SetEmptyAlert(EmptyCallback callback);\r
-       void Stop();\r
-\r
-       //ICGControl\r
-       virtual void Clear();\r
-       virtual void Add(int layer, const tstring& templateName,  bool playOnLoad, const tstring& startFromLabel = TEXT(""), const tstring& data = TEXT("")) {}\r
-       virtual void Remove(int layer) {}\r
-       virtual void Play(int layer) {}\r
-       virtual void Stop(int layer, unsigned int mixOutDuration) {}\r
-       virtual void Next(int layer) {}\r
-       virtual void Update(int layer, const tstring& data) {}\r
-       virtual void Invoke(int layer, const tstring& label) {}\r
-       \r
-       FlashProducerPtr GetFlashProducer() {\r
-               return pFlashProducer_;\r
-       }\r
-protected:\r
-       FlashProducerPtr pFlashProducer_;\r
-};\r
-\r
-\r
-}      //namespace CG\r
-}      //namespace caspar\r
-\r
-#endif //_CASPAR_FLASHCGPROXY_H__
\ No newline at end of file
diff --git a/server/cii/CIICommand.h b/server/cii/CIICommand.h
deleted file mode 100644 (file)
index 53b9700..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include <vector>\r
-#include <string>\r
-\r
-namespace caspar {\r
-namespace cii {\r
-\r
-class ICIICommand\r
-{\r
-public:\r
-       virtual ~ICIICommand() {}\r
-       virtual int GetMinimumParameters() = 0;\r
-       virtual void Setup(const std::vector<tstring>& parameters) = 0;\r
-\r
-       virtual void Execute() = 0;\r
-};\r
-typedef std::tr1::shared_ptr<ICIICommand> CIICommandPtr;\r
-\r
-}      //namespace cii\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/cii/CIICommandsImpl.cpp b/server/cii/CIICommandsImpl.cpp
deleted file mode 100644 (file)
index bcb3336..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-\r
-#include "CIIProtocolStrategy.h"\r
-#include "..\channel.h"\r
-#include "..\cg\cgcontrol.h"\r
-#include "CIICommandsImpl.h"\r
-#include <sstream>\r
-#include <algorithm>\r
-\r
-namespace caspar {\r
-namespace cii {\r
-\r
-/////////////////\r
-// MediaCommand\r
-void MediaCommand::Setup(const std::vector<tstring>& parameters) {\r
-       graphicProfile_ = parameters[1].substr(2);\r
-}\r
-\r
-void MediaCommand::Execute() {\r
-       pCIIStrategy_->SetProfile(graphicProfile_);\r
-}\r
-\r
-\r
-/////////////////\r
-// WriteCommand\r
-void WriteCommand::Setup(const std::vector<tstring>& parameters) {\r
-       try {\r
-               if(parameters.size()>2) {\r
-                       targetName_ = parameters[1];\r
-                       templateName_ = parameters[2];\r
-\r
-                       tstringstream dataStream;\r
-\r
-                       dataStream << TEXT("<templateData>");\r
-\r
-                       std::vector<tstring>::size_type end = parameters.size();\r
-                       for(std::vector<tstring>::size_type i = 3; i < end; ++i) {\r
-                               dataStream << TEXT("<componentData id=\"field") << i-2 << TEXT("\"><data id=\"text\" value=\"") << parameters[i] << TEXT("\" /></componentData>"); \r
-                       }\r
-\r
-                       dataStream << TEXT("</templateData>");\r
-                       xmlData_ = dataStream.str();\r
-               }\r
-       }\r
-       catch(std::exception) {\r
-       }\r
-}\r
-\r
-void WriteCommand::Execute() {\r
-       pCIIStrategy_->WriteTemplateData(templateName_, targetName_, xmlData_);\r
-}\r
-\r
-\r
-//////////////////////\r
-// ImagestoreCommand\r
-void ImagestoreCommand::Setup(const std::vector<tstring>& parameters) {\r
-       if(parameters[1] == TEXT("7") && parameters.size() > 2) {\r
-               titleName_ = parameters[2].substr(0, 4);\r
-       }\r
-}\r
-\r
-void ImagestoreCommand::Execute() {\r
-       pCIIStrategy_->DisplayTemplate(titleName_);\r
-}\r
-\r
-\r
-//////////////////////\r
-// MiscellaneousCommand\r
-void MiscellaneousCommand::Setup(const std::vector<tstring>& parameters) {\r
-       //HAWRYS:       V\5\3\1\1\namn.tga\1\r
-       //                      Display still\r
-       if((parameters.size() > 5) && parameters[1] == TEXT("5") && parameters[2] == TEXT("3")) {\r
-               filename_ = parameters[5];\r
-               filename_ = filename_.substr(0, filename_.find_last_of(TEXT('.')));\r
-               state_ = 0;\r
-               return;\r
-       }\r
-       \r
-       //NEPTUNE:      V\5\13\1\X\Template\0\TabField1\TabField2...\r
-       //                      Add Template to layer X in the active templatehost\r
-       if((parameters.size() > 5) && parameters[1] == TEXT("5") && parameters[2] == TEXT("13"))\r
-       {\r
-               layer_ = _ttoi(parameters[4].c_str());\r
-               filename_ = parameters[5];\r
-               state_ = 1;\r
-               if(parameters.size() > 7) {\r
-                       tstringstream dataStream;\r
-\r
-                       dataStream << TEXT("<templateData>");\r
-                       std::vector<tstring>::size_type end = parameters.size();\r
-                       for(std::vector<tstring>::size_type i = 7; i < end; ++i) {\r
-                               dataStream << TEXT("<componentData id=\"f") << i-7 << TEXT("\"><data id=\"text\" value=\"") << parameters[i] << TEXT("\" /></componentData>"); \r
-                       }\r
-                       dataStream << TEXT("</templateData>");\r
-\r
-                       xmlData_ = dataStream.str();\r
-               }\r
-       }\r
-\r
-       // VIDEO MODE V\5\14\MODE\r
-       if((parameters.size() > 3) && parameters[1] == TEXT("5") && parameters[2] == TEXT("14"))\r
-       {\r
-               tstring value = parameters[3];\r
-               std::transform(value.begin(), value.end(), value.begin(), toupper);\r
-\r
-               this->pCIIStrategy_->GetChannel()->SetVideoFormat(value);\r
-       }\r
-}\r
-\r
-void MiscellaneousCommand::Execute() {\r
-       if(state_ == 0)\r
-       {\r
-               pCIIStrategy_->DisplayMediaFile(filename_);\r
-       }\r
-\r
-       //TODO: Need to be checked for validity\r
-       else if(state_ == 1)\r
-               pCIIStrategy_->GetCGControl()->Add(layer_, filename_, false, TEXT(""), xmlData_);\r
-}\r
-\r
-\r
-///////////////////\r
-// KeydataCommand\r
-void KeydataCommand::Execute() {\r
-       if(state_ == 0)\r
-       {\r
-               pCIIStrategy_->DisplayTemplate(titleName_);\r
-       }\r
-\r
-       //TODO: Need to be checked for validity\r
-       else if(state_ == 1)\r
-               pCIIStrategy_->GetCGControl()->Stop(layer_, 0);\r
-       else if(state_ == 2)\r
-               pCIIStrategy_->GetCGControl()->Clear();\r
-       else if(state_ == 3)\r
-               pCIIStrategy_->GetCGControl()->Play(layer_);\r
-}\r
-\r
-void KeydataCommand::Setup(const std::vector<tstring>& parameters) {\r
-       //HAWRYS:       Y\<205><247><202><196><192><192><200><248>\r
-       //parameter[1] looks like this: "=g:XXXXh" where XXXX is the name that we want\r
-       if(parameters[1].size() > 6) {\r
-               titleName_.resize(4);\r
-               for(int i=0;i<4;++i) {\r
-                       if(parameters[1][i+3] < 176) {\r
-                               titleName_ = TEXT("");\r
-                               break;\r
-                       }\r
-                       titleName_[i] = parameters[1][i+3]-144;\r
-               }\r
-               state_ = 0;\r
-       }\r
-\r
-       if(parameters.size() > 2)\r
-       {\r
-               layer_ = _ttoi(parameters[2].c_str());\r
-       }\r
-\r
-       if(parameters[1].at(0) == 27)   //NEPTUNE:      Y\<27>\X                        Stop layer X.\r
-               state_ = 1;\r
-       else if(static_cast<unsigned char>(parameters[1].at(0)) == 254) //NEPTUNE:      Y\<254>                 Clear Canvas. \r
-               state_ = 2;\r
-       else if(static_cast<unsigned char>(parameters[1].at(0)) == 213) //NEPTUNE:      Y\<213><243>\X  Play layer X. \r
-               state_ = 3;\r
-}\r
-\r
-}      //namespace cii\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/cii/CIICommandsImpl.h b/server/cii/CIICommandsImpl.h
deleted file mode 100644 (file)
index b7a2f4b..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include <string>\r
-#include <vector>\r
-\r
-#include "ciicommand.h"\r
-\r
-namespace caspar {\r
-\r
-namespace cii {\r
-\r
-class CIIProtocolStrategy;\r
-\r
-class MediaCommand : public ICIICommand\r
-{\r
-public:\r
-       MediaCommand(CIIProtocolStrategy* pPS) : pCIIStrategy_(pPS)\r
-       {}\r
-\r
-       virtual int GetMinimumParameters() {\r
-               return 1;\r
-       }\r
-\r
-       virtual void Setup(const std::vector<tstring>& parameters);\r
-       virtual void Execute();\r
-\r
-private:\r
-       tstring graphicProfile_;\r
-\r
-       CIIProtocolStrategy* pCIIStrategy_;\r
-};\r
-\r
-class WriteCommand : public ICIICommand\r
-{\r
-public:\r
-       WriteCommand(CIIProtocolStrategy* pPS) : pCIIStrategy_(pPS)\r
-       {}\r
-\r
-       virtual int GetMinimumParameters() {\r
-               return 2;\r
-       }\r
-\r
-       virtual void Setup(const std::vector<tstring>& parameters);\r
-       virtual void Execute();\r
-\r
-private:\r
-       tstring targetName_;\r
-       tstring templateName_;\r
-       tstring xmlData_;\r
-\r
-       CIIProtocolStrategy* pCIIStrategy_;\r
-};\r
-\r
-class MiscellaneousCommand : public ICIICommand\r
-{\r
-public:\r
-       MiscellaneousCommand(CIIProtocolStrategy* pPS) : pCIIStrategy_(pPS), state_(-1), layer_(0)\r
-       {}\r
-\r
-       virtual int GetMinimumParameters() {\r
-               return 5;\r
-       }\r
-\r
-       virtual void Setup(const std::vector<tstring>& parameters);\r
-       virtual void Execute();\r
-\r
-private:\r
-       tstring filename_;\r
-       tstring xmlData_;\r
-       int state_;\r
-       int layer_;\r
-\r
-       CIIProtocolStrategy* pCIIStrategy_;\r
-};\r
-\r
-class ImagestoreCommand : public ICIICommand\r
-{\r
-public:\r
-       ImagestoreCommand(CIIProtocolStrategy* pPS) : pCIIStrategy_(pPS)\r
-       {}\r
-\r
-       virtual int GetMinimumParameters() {\r
-               return 1;\r
-       }\r
-\r
-       virtual void Setup(const std::vector<tstring>& parameters);\r
-       virtual void Execute();\r
-\r
-private:\r
-       tstring titleName_;\r
-\r
-       CIIProtocolStrategy* pCIIStrategy_;\r
-};\r
-\r
-class KeydataCommand : public ICIICommand\r
-{\r
-public:\r
-       KeydataCommand(CIIProtocolStrategy* pPS) : pCIIStrategy_(pPS), state_(-1), layer_(0)\r
-       {}\r
-\r
-       virtual int GetMinimumParameters() {\r
-               return 1;\r
-       }\r
-\r
-       virtual void Setup(const std::vector<tstring>& parameters);\r
-       virtual void Execute();\r
-\r
-private:\r
-       tstring titleName_;\r
-       int state_;\r
-       int layer_;\r
-\r
-       CIIProtocolStrategy* pCIIStrategy_;\r
-};\r
-\r
-}      //namespace cii\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/cii/CIIProtocolStrategy.cpp b/server/cii/CIIProtocolStrategy.cpp
deleted file mode 100644 (file)
index 92a6b9c..0000000
+++ /dev/null
@@ -1,296 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-\r
-#include <string>\r
-#include <sstream>\r
-#include <algorithm>\r
-#include "CIIProtocolStrategy.h"\r
-#include "CIICommandsimpl.h"\r
-#include "..\producers\flash\FlashManager.h"\r
-#include "..\application.h"\r
-#include "..\fileinfo.h"\r
-\r
-namespace caspar {\r
-namespace cii {\r
-\r
-using namespace utils;\r
-\r
-const tstring CIIProtocolStrategy::MessageDelimiter = TEXT("\r\n");\r
-const TCHAR CIIProtocolStrategy::TokenDelimiter = TEXT('\\');\r
-\r
-CIIProtocolStrategy::CIIProtocolStrategy() {\r
-       pChannel_ = GetApplication()->GetChannel(0);\r
-       pCGControl_ = pChannel_->GetCGControl();\r
-\r
-       if(!commandQueue_.Start()) {\r
-               //throw\r
-       }\r
-}\r
-\r
-CIIProtocolStrategy::~CIIProtocolStrategy() {\r
-}\r
-\r
-void CIIProtocolStrategy::Parse(const TCHAR* pData, int charCount, caspar::IO::ClientInfoPtr pClientInfo) {\r
-       std::size_t pos;\r
-       tstring msg(pData, charCount);\r
-       tstring availibleData = currentMessage_ + msg;\r
-\r
-       while(true) {\r
-               pos = availibleData.find(MessageDelimiter);\r
-               if(pos != tstring::npos)\r
-               {\r
-                       tstring message = availibleData.substr(0,pos);\r
-\r
-                       if(message.length() > 0) {\r
-                               ProcessMessage(message);\r
-                               if(pClientInfo != 0)\r
-                                       pClientInfo->Send(TEXT("*\r\n"));\r
-                       }\r
-\r
-                       std::size_t nextStartPos = pos + MessageDelimiter.length();\r
-                       if(nextStartPos < availibleData.length())\r
-                               availibleData = availibleData.substr(nextStartPos);\r
-                       else {\r
-                               availibleData.clear();\r
-                               break;\r
-                       }\r
-               }\r
-               else\r
-                       break;\r
-       }\r
-       currentMessage_ = availibleData;\r
-}\r
-\r
-void CIIProtocolStrategy::ProcessMessage(const tstring& message) {\r
-       LOG << message.c_str() << LogStream::Flush;\r
-\r
-       std::vector<tstring> tokens;\r
-       int tokenCount = TokenizeMessage(message, &tokens);\r
-\r
-       CIICommandPtr pCommand = Create(tokens[0]);\r
-       if((pCommand != 0) && (tokenCount-1) >= pCommand->GetMinimumParameters()) {\r
-               pCommand->Setup(tokens);\r
-               commandQueue_.AddCommand(pCommand);\r
-       }\r
-       else {\r
-               //report error\r
-       }\r
-}\r
-\r
-int CIIProtocolStrategy::TokenizeMessage(const tstring& message, std::vector<tstring>* pTokenVector)\r
-{\r
-       tstringstream currentToken;\r
-\r
-       for(unsigned int charIndex=0; charIndex<message.size(); ++charIndex) {\r
-               if(message[charIndex] == TokenDelimiter) {\r
-                       pTokenVector->push_back(currentToken.str());\r
-                       currentToken.str(TEXT(""));\r
-                       continue;\r
-               }\r
-\r
-               if(message[charIndex] == TEXT('\"')) {\r
-                       currentToken << TEXT("&quot;");\r
-               }\r
-               else if(message[charIndex] == TEXT('<')) {\r
-                       currentToken << TEXT("&lt;");\r
-               }\r
-               else if(message[charIndex] == TEXT('>')) {\r
-                       currentToken << TEXT("&gt;");\r
-               }\r
-               else \r
-                       currentToken << message[charIndex];\r
-       }\r
-\r
-       if(currentToken.str().size() > 0) {\r
-               pTokenVector->push_back(currentToken.str());\r
-       }\r
-\r
-       return (int)pTokenVector->size();\r
-}\r
-\r
-/************\r
-// Examples (<X> = ASCIICHAR X)\r
-\r
-I\25\3\VII\\                                                                   sätter outputtype till 'vii'\r
-I\25\4\1\\                                                                             enablar framebuffer (ignore this)\r
-\r
-M\C/SVTNEWS\\                                                                  pekar ut vilken grafisk profil som skall användas\r
-\r
-W\4009\4067\Jonas Björkman\\                                   Skriver "Jonas Björkman" till första textfältet i template 4067 och sparar den färdiga skylten som 4009\r
-\r
-T\7\4009.VII\A\\                                                               lägger ut skylt 4009\r
-\r
-Y\<205><247><202><196><192><192><200><248>\\   lägger ut skylten 4008 (<205><247><202><196><192><192><200><248> = "=g:4008h" om man drar bort 144 frÃ¥n varje asciivärde)\r
-\r
-V\5\3\1\1\namn.tga\1\\                                                 lägger ut bilden namn.tga\r
-V\0\1\D\C\10\0\0\0\\                                                   gör nÃ¥gon inställning som har med föregÃ¥ende kommando att göra.\r
-\r
-*************/\r
-\r
-/**********************\r
-New Commands to support the Netupe automation system\r
-V\5\13\1\1\Template\0\TabField1\TabField2...\\         Build. Ettan före Template indikerar vilket lager den nya templaten skall laddas in i. OBS. Skall inte visas efter det här steget\r
-Y\<27>\\                                                                                       Stop. Här kommer ett lagerID ocksÃ¥ att skickas med (<27> = ESC)\r
-Y\<254>\\                                                                                      Clear Canvas. Här kommer ett lagerID ocksÃ¥ att skickas med, utan det skall allt tömmas\r
-Y\<213><243>\\                                                                         Play. Här kommer ett lagerID ocksÃ¥ att skickas med\r
-\r
-**********************/\r
-CIICommandPtr CIIProtocolStrategy::Create(const tstring& name) {\r
-       CIICommandPtr result;\r
-\r
-       switch(name[0]) {\r
-               case TEXT('M'):\r
-                       result = CIICommandPtr(new MediaCommand(this));\r
-                       break;\r
-               case TEXT('W'):\r
-                       result = CIICommandPtr(new WriteCommand(this));\r
-                       break;\r
-               case TEXT('T'):\r
-                       result = CIICommandPtr(new ImagestoreCommand(this));\r
-                       break;\r
-               case TEXT('V'):\r
-                       result = CIICommandPtr(new MiscellaneousCommand(this));\r
-                       break;\r
-               case TEXT('Y'):\r
-                       result = CIICommandPtr(new KeydataCommand(this));\r
-                       break;\r
-\r
-               default:\r
-                       break;\r
-       }\r
-\r
-       return result;\r
-}\r
-\r
-void CIIProtocolStrategy::WriteTemplateData(const tstring& templateName, const tstring& titleName, const tstring& xmlData) {\r
-       tstring fullTemplateFilename = GetApplication()->GetTemplateFolder();\r
-       if(currentProfile_.size() > 0)\r
-       {\r
-               fullTemplateFilename += currentProfile_;\r
-               fullTemplateFilename += TEXT("\\");\r
-       }\r
-       fullTemplateFilename += templateName;\r
-\r
-       if(!GetApplication()->FindTemplate(fullTemplateFilename))\r
-       {\r
-               LOG << TEXT("Failed to save instance of ") << templateName << TEXT(" as ") << titleName << TEXT(", template ") << fullTemplateFilename << TEXT(" not found") << LogStream::Flush;\r
-               return;\r
-       }\r
-\r
-       MediaProducerPtr pFP = pFlashManager_->CreateProducer(GetApplication()->GetTemplateFolder()+TEXT("CG.fth"));\r
-       if(pFP != 0)\r
-       {\r
-               //TODO: Initialize with valid FrameFactory\r
-//             pFP->Initialize(0, false);\r
-\r
-               tstringstream flashParam;\r
-               flashParam << TEXT("<invoke name=\"Add\" returntype=\"xml\"><arguments><number>1</number><string>") << currentProfile_ << '/' <<  templateName << TEXT("</string><number>0</number><true/><string> </string><string><![CDATA[ ") << xmlData << TEXT(" ]]></string></arguments></invoke>");\r
-               pFP->Param(flashParam.str());\r
-\r
-               LOG << LogLevel::Verbose << TEXT("Saved an instance of ") << templateName << TEXT(" as ") << titleName << LogStream::Flush;\r
-\r
-               PutPreparedTemplate(titleName, pFP);\r
-       }\r
-}\r
-\r
-void CIIProtocolStrategy::DisplayTemplate(const tstring& titleName) {\r
-       MediaProducerPtr pFP = GetPreparedTemplate(titleName);\r
-       if(pFP != 0)\r
-       {\r
-               TransitionInfo transition;\r
-               if(pChannel_->LoadBackground(pFP, transition)) {\r
-                       pChannel_->Play();\r
-\r
-                       LOG << LogLevel::Verbose << TEXT("Displayed title ") << titleName << LogStream::Flush;\r
-                       return;\r
-               }\r
-       }\r
-       LOG << TEXT("Failed to display title ") << titleName << LogStream::Flush;\r
-}\r
-\r
-void CIIProtocolStrategy::DisplayMediaFile(const tstring& filename) {\r
-       caspar::FileInfo fileInfo;\r
-       MediaManagerPtr pMediaManager = GetApplication()->FindMediaFile(GetApplication()->GetMediaFolder()+filename, &fileInfo);\r
-       if(pMediaManager != 0)\r
-       {\r
-               tstring fullFilename = filename;\r
-               if(fileInfo.filetype.length()>0)\r
-               {\r
-                       fullFilename += TEXT(".");\r
-                       fullFilename += fileInfo.filetype;\r
-               }\r
-\r
-               MediaProducerPtr pFP = pMediaManager->CreateProducer(GetApplication()->GetMediaFolder()+fullFilename);\r
-               if(pFP != 0)\r
-               {\r
-                       caspar::TransitionInfo transition;\r
-                       transition.type_ = Mix;\r
-                       transition.duration_ = 12;\r
-                       if(pChannel_->LoadBackground(pFP, transition)){\r
-                               pChannel_->Play();\r
-\r
-                               LOG << LogLevel::Verbose << TEXT("Displayed ") << fullFilename << LogStream::Flush;\r
-                               return;\r
-                       }\r
-               }\r
-       }\r
-       LOG << TEXT("Failed to display ") << filename << LogStream::Flush;\r
-}\r
-\r
-MediaProducerPtr CIIProtocolStrategy::GetPreparedTemplate(const tstring& titleName) {\r
-       MediaProducerPtr result;\r
-\r
-       TitleList::iterator it = std::find(titles_.begin(), titles_.end(), titleName);\r
-       if(it != titles_.end()) {\r
-               LOG << LogLevel::Debug << TEXT("Found title with name ") << (*it).titleName << LogStream::Flush;\r
-               result = (*it).pMediaProducer;\r
-       }\r
-       else {\r
-               LOG << TEXT("Could not find title with name ") << titleName << LogStream::Flush;\r
-       }\r
-\r
-       return result;\r
-}\r
-\r
-void CIIProtocolStrategy::PutPreparedTemplate(const tstring& titleName, MediaProducerPtr& pFP) {\r
-       LOG << LogLevel::Debug << TEXT("Saved title with name ") << titleName << LogStream::Flush;\r
-\r
-       TitleList::iterator it = std::find(titles_.begin(), titles_.end(), titleName);\r
-       if(it != titles_.end()) {\r
-               titles_.remove((*it));\r
-       }\r
-\r
-       titles_.push_front(TitleHolder(titleName, pFP));\r
-\r
-       if(titles_.size() >= 6)\r
-               titles_.resize(5);\r
-}\r
-\r
-bool operator==(const CIIProtocolStrategy::TitleHolder& lhs, const tstring& rhs) {\r
-       return lhs.titleName == rhs;\r
-}\r
-bool operator==(const tstring& lhs, const CIIProtocolStrategy::TitleHolder& rhs) {\r
-       return lhs == rhs.titleName;\r
-}\r
-\r
-}      //namespace cii\r
-}      //namespace caspar\r
diff --git a/server/cii/CIIProtocolStrategy.h b/server/cii/CIIProtocolStrategy.h
deleted file mode 100644 (file)
index 9310886..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-#include <vector>\r
-#include "..\io\ProtocolStrategy.h"\r
-#include "..\utils\commandqueue.h"\r
-#include "..\channel.h"\r
-#include "..\MediaManager.h"\r
-#include "CIICommand.h"\r
-\r
-namespace caspar {\r
-       namespace CG { class ICGControl; }\r
-namespace cii {\r
-\r
-class CIIProtocolStrategy : public caspar::IO::IProtocolStrategy\r
-{\r
-public:\r
-       CIIProtocolStrategy();\r
-       virtual ~CIIProtocolStrategy();\r
-\r
-       virtual void Parse(const TCHAR* pData, int charCount, caspar::IO::ClientInfoPtr pClientInfo);\r
-       virtual UINT GetCodepage() {\r
-               return 28591;   //ISO 8859-1\r
-       }\r
-\r
-       void SetProfile(const tstring& profile) {\r
-               currentProfile_ = profile;\r
-       }\r
-       caspar::CG::ICGControl* GetCGControl() const {\r
-               return pCGControl_;\r
-       }\r
-\r
-       caspar::ChannelPtr GetChannel() const\r
-       {\r
-               return this->pChannel_;\r
-       }\r
-\r
-       void DisplayMediaFile(const tstring& filename);\r
-       void DisplayTemplate(const tstring& titleName);\r
-       void WriteTemplateData(const tstring& templateName, const tstring& titleName, const tstring& xmlData);\r
-\r
-public:\r
-       struct TitleHolder\r
-       {\r
-               TitleHolder() : titleName(TEXT(""))\r
-               {}\r
-               TitleHolder(const tstring& name, MediaProducerPtr pFP) : titleName(name), pMediaProducer(pFP)\r
-               {}\r
-               TitleHolder(const TitleHolder& th) : titleName(th.titleName), pMediaProducer(th.pMediaProducer)\r
-               {}\r
-               const TitleHolder& operator=(const TitleHolder& th) {\r
-                       titleName = th.titleName;\r
-                       pMediaProducer = th.pMediaProducer;\r
-               }\r
-               bool operator==(const TitleHolder& rhs) {\r
-                       return pMediaProducer == rhs.pMediaProducer;\r
-               }\r
-\r
-               tstring titleName;\r
-               MediaProducerPtr pMediaProducer;\r
-               friend CIIProtocolStrategy;\r
-       };\r
-private:\r
-       friend TitleHolder;\r
-       friend bool operator==(const TitleHolder& lhs, const tstring& rhs);\r
-       friend bool operator==(const tstring& lhs, const TitleHolder& rhs);\r
-\r
-       typedef std::list<TitleHolder> TitleList;\r
-       TitleList titles_;\r
-       MediaProducerPtr GetPreparedTemplate(const tstring& name);\r
-       void PutPreparedTemplate(const tstring& name, MediaProducerPtr& pMediaProducer);\r
-\r
-       static const TCHAR TokenDelimiter;\r
-       static const tstring MessageDelimiter;\r
-\r
-       void ProcessMessage(const tstring& message);\r
-       int TokenizeMessage(const tstring& message, std::vector<tstring>* pTokenVector);\r
-       CIICommandPtr Create(const tstring& name);\r
-\r
-       caspar::utils::CommandQueue<CIICommandPtr> commandQueue_;\r
-       tstring currentMessage_;\r
-\r
-       tstring currentProfile_;\r
-       caspar::MediaManagerPtr pFlashManager_;\r
-       caspar::CG::ICGControl* pCGControl_;\r
-       ChannelPtr pChannel_;\r
-};\r
-\r
-}      //namespace cii\r
-}      //namespace caspar\r
diff --git a/server/consumers/Audio/AudioConsumer.cpp b/server/consumers/Audio/AudioConsumer.cpp
deleted file mode 100644 (file)
index fa4335a..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "AudioConsumer.h"\r
-#include "..\..\frame\FramePlaybackControl.h"\r
-#include "..\..\frame\SystemFrameManager.h"\r
-#include "..\..\frame\Frame.h"\r
-#include "..\..\frame\FramePlaybackStrategy.h"\r
-#include "..\..\utils\image\Image.hpp"\r
-\r
-namespace caspar {\r
-namespace audio {\r
-\r
-\r
-struct AudioConsumer::Implementation\r
-{\r
-       struct AudioPlaybackStrategy : public IFramePlaybackStrategy\r
-       {\r
-               explicit AudioPlaybackStrategy(Implementation* pConsumerImpl) : pConsumerImpl_(pConsumerImpl)\r
-               {\r
-                       lastTime_ = timeGetTime();\r
-               }\r
-\r
-               FrameManagerPtr GetFrameManager()\r
-               {\r
-                       return pConsumerImpl_->pFrameManager_;\r
-               }\r
-               FramePtr GetReservedFrame()\r
-               {\r
-                       return pConsumerImpl_->pFrameManager_->CreateFrame();\r
-               }\r
-\r
-               void DisplayFrame(Frame* pFrame)\r
-               {\r
-                       DWORD timediff = timeGetTime() - lastTime_;\r
-                       if(timediff < 30) {\r
-                               Sleep(40 - timediff);\r
-                               lastTime_ += 40;\r
-                       }\r
-                       else\r
-                               lastTime_ = timeGetTime();\r
-\r
-                       if(pFrame == NULL || pFrame->ID() == lastFrameID_)\r
-                               return;\r
-\r
-                       lastFrameID_ = pFrame->ID();\r
-               }\r
-\r
-               Implementation* pConsumerImpl_;\r
-               DWORD lastTime_;        \r
-               utils::ID lastFrameID_;\r
-       };\r
-\r
-       explicit Implementation(const FrameFormatDescription& fmtDesc) : fmtDesc_(fmtDesc)\r
-       {       \r
-               SetupDevice();\r
-       }\r
-\r
-       ~Implementation()\r
-       {\r
-               ReleaseDevice();\r
-       }\r
-\r
-       bool SetupDevice()\r
-       {\r
-               pFrameManager_.reset(new SystemFrameManager(fmtDesc_));\r
-               pPlaybackControl_.reset(new FramePlaybackControl(FramePlaybackStrategyPtr(new AudioPlaybackStrategy(this))));\r
-\r
-               pPlaybackControl_->Start();\r
-               return true;\r
-       }\r
-\r
-       bool ReleaseDevice()\r
-       {\r
-               pPlaybackControl_->Stop();\r
-               return true;\r
-       }\r
-\r
-       FramePlaybackControlPtr pPlaybackControl_;\r
-       SystemFrameManagerPtr pFrameManager_;\r
-\r
-       FrameFormatDescription fmtDesc_;\r
-};\r
-\r
-AudioConsumer::AudioConsumer(const FrameFormatDescription& fmtDesc) : pImpl_(new Implementation(fmtDesc))\r
-{}\r
-\r
-AudioConsumer::~AudioConsumer()\r
-{}\r
-\r
-IPlaybackControl* AudioConsumer::GetPlaybackControl() const\r
-{\r
-       return pImpl_->pPlaybackControl_.get();\r
-}\r
-\r
-bool AudioConsumer::SetupDevice(unsigned int deviceIndex)\r
-{\r
-       return pImpl_->SetupDevice();\r
-}\r
-\r
-bool AudioConsumer::ReleaseDevice()\r
-{\r
-       return pImpl_->ReleaseDevice();\r
-}\r
-\r
-void AudioConsumer::EnableVideoOutput(){}\r
-void AudioConsumer::DisableVideoOutput(){}\r
-\r
-const FrameFormatDescription& AudioConsumer::GetFrameFormatDescription() const {\r
-       return pImpl_->fmtDesc_;\r
-}\r
-const TCHAR* AudioConsumer::GetFormatDescription() const {\r
-       return pImpl_->fmtDesc_.name;\r
-}\r
-\r
-\r
-}      //namespace audio\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/consumers/Audio/AudioConsumer.h b/server/consumers/Audio/AudioConsumer.h
deleted file mode 100644 (file)
index 5253935..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-#include "..\..\VideoConsumer.h"\r
-#include "..\..\MediaProducer.h"\r
-\r
-#include "..\..\utils\thread.h"\r
-#include "..\..\utils\lockable.h"\r
-#include "..\..\utils\Noncopyable.hpp"\r
-\r
-#include "..\..\frame\Frame.h"\r
-\r
-namespace caspar {\r
-namespace audio {\r
-\r
-class AudioConsumer : public IVideoConsumer, private utils::LockableObject, utils::Noncopyable\r
-{\r
-public:\r
-       explicit AudioConsumer(const FrameFormatDescription& fmtDesc);\r
-       virtual ~AudioConsumer();\r
-\r
-       virtual IPlaybackControl* GetPlaybackControl() const;\r
-\r
-       virtual void EnableVideoOutput();\r
-       virtual void DisableVideoOutput();\r
-       virtual bool SetupDevice(unsigned int deviceIndex);\r
-       virtual bool ReleaseDevice();\r
-       virtual const FrameFormatDescription& GetFrameFormatDescription() const;\r
-       virtual const TCHAR* GetFormatDescription() const;\r
-\r
-private:\r
-       struct Implementation;\r
-       std::tr1::shared_ptr<Implementation> pImpl_;\r
-};\r
-\r
-}      //namespace audio\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/consumers/GDI/GDIVideoConsumer.cpp b/server/consumers/GDI/GDIVideoConsumer.cpp
deleted file mode 100644 (file)
index 936fc0c..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "GDIVideoConsumer.h"\r
-#include "..\..\frame\FramePlaybackControl.h"\r
-#include "..\..\frame\BitmapFrameManager.h"\r
-#include "..\..\frame\Frame.h"\r
-#include "..\..\frame\FramePlaybackStrategy.h"\r
-#include "..\..\utils\DCWrapper.h"\r
-#include "..\..\utils\BitmapHolder.h"\r
-#include "..\..\utils\image\Image.hpp"\r
-\r
-namespace caspar {\r
-namespace gdi {\r
-\r
-\r
-struct GDIVideoConsumer::Implementation\r
-{\r
-       struct GDIPlaybackStrategy : public IFramePlaybackStrategy\r
-       {\r
-               GDIPlaybackStrategy(Implementation* pConsumerImpl) : pConsumerImpl_(pConsumerImpl), pTempBitmapData_(new BitmapHolder(pConsumerImpl_->hWnd_, pConsumerImpl_->fmtDesc_.width, pConsumerImpl_->fmtDesc_.height))\r
-               {\r
-                       lastTime_ = timeGetTime();\r
-               }\r
-\r
-               FrameManagerPtr GetFrameManager()\r
-               {\r
-                       return pConsumerImpl_->pFrameManager_;\r
-               }\r
-               FramePtr GetReservedFrame()\r
-               {\r
-                       return pConsumerImpl_->pFrameManager_->CreateFrame();\r
-               }\r
-\r
-               void DisplayFrame(Frame* pFrame)\r
-               {\r
-                       DWORD timediff = timeGetTime() - lastTime_;\r
-                       if(timediff < 30) {\r
-                               Sleep(40 - timediff);\r
-                               lastTime_ += 40;\r
-                       }\r
-                       else\r
-                               lastTime_ = timeGetTime();\r
-\r
-                       if(pFrame == NULL || pFrame->ID() == lastFrameID_)\r
-                               return;\r
-\r
-                       DCWrapper hDC(pConsumerImpl_->hWnd_);\r
-\r
-                       RECT rect;\r
-                       GetClientRect(pConsumerImpl_->hWnd_, &rect);\r
-                       if(this->GetFrameManager()->Owns(*pFrame))\r
-                               BitBlt(hDC, rect.left, rect.top, rect.right, rect.bottom, reinterpret_cast<HDC>(pFrame->GetMetadata()), 0, 0, SRCCOPY);\r
-                       else {\r
-                               utils::image::Copy(pTempBitmapData_->GetPtr(), pFrame->GetDataPtr(), pFrame->GetDataSize());\r
-                               BitBlt(hDC, rect.left, rect.top, rect.right, rect.bottom, pTempBitmapData_->GetDC(), 0, 0, SRCCOPY);\r
-                       }\r
-\r
-                       lastFrameID_ = pFrame->ID();\r
-               }\r
-\r
-               Implementation* pConsumerImpl_;\r
-               BitmapHolderPtr pTempBitmapData_;               \r
-               DWORD lastTime_;        \r
-               utils::ID lastFrameID_;\r
-       };\r
-\r
-       Implementation(HWND hWnd, const FrameFormatDescription& fmtDesc) : hWnd_(hWnd), fmtDesc_(fmtDesc)\r
-       {       \r
-               SetupDevice();\r
-       }\r
-\r
-       ~Implementation()\r
-       {\r
-               ReleaseDevice();\r
-       }\r
-\r
-       bool SetupDevice()\r
-       {\r
-               pFrameManager_.reset(new BitmapFrameManager(fmtDesc_, hWnd_));\r
-               pPlaybackControl_.reset(new FramePlaybackControl(FramePlaybackStrategyPtr(new GDIPlaybackStrategy(this))));\r
-\r
-               pPlaybackControl_->Start();\r
-               return true;\r
-       }\r
-\r
-       bool ReleaseDevice()\r
-       {\r
-               pPlaybackControl_->Stop();\r
-               return true;\r
-       }\r
-\r
-       FramePlaybackControlPtr pPlaybackControl_;\r
-       BitmapFrameManagerPtr pFrameManager_;\r
-\r
-       HWND    hWnd_;\r
-       FrameFormatDescription fmtDesc_;\r
-};\r
-\r
-GDIVideoConsumer::GDIVideoConsumer(HWND hWnd, const FrameFormatDescription& fmtDesc) : pImpl_(new Implementation(hWnd, fmtDesc))\r
-{}\r
-\r
-GDIVideoConsumer::~GDIVideoConsumer()\r
-{}\r
-\r
-IPlaybackControl* GDIVideoConsumer::GetPlaybackControl() const\r
-{\r
-       return pImpl_->pPlaybackControl_.get();\r
-}\r
-\r
-bool GDIVideoConsumer::SetupDevice(unsigned int deviceIndex)\r
-{\r
-       return pImpl_->SetupDevice();\r
-}\r
-\r
-bool GDIVideoConsumer::ReleaseDevice()\r
-{\r
-       return pImpl_->ReleaseDevice();\r
-}\r
-\r
-void GDIVideoConsumer::EnableVideoOutput(){}\r
-void GDIVideoConsumer::DisableVideoOutput(){}\r
-\r
-const FrameFormatDescription& GDIVideoConsumer::GetFrameFormatDescription() const {\r
-       return pImpl_->fmtDesc_;\r
-}\r
-const TCHAR* GDIVideoConsumer::GetFormatDescription() const {\r
-       return pImpl_->fmtDesc_.name;\r
-}\r
-\r
-\r
-}      //namespace gdi\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/consumers/GDI/GDIVideoConsumer.h b/server/consumers/GDI/GDIVideoConsumer.h
deleted file mode 100644 (file)
index 3327686..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-#include "..\..\VideoConsumer.h"\r
-#include "..\..\MediaProducer.h"\r
-\r
-#include "..\..\utils\thread.h"\r
-#include "..\..\utils\lockable.h"\r
-#include "..\..\utils\Noncopyable.hpp"\r
-\r
-#include "..\..\frame\BitmapFrameManager.h"\r
-#include "..\..\frame\Frame.h"\r
-\r
-namespace caspar {\r
-namespace gdi {\r
-\r
-class GDIVideoConsumer : public IVideoConsumer, private utils::LockableObject, utils::Noncopyable\r
-{\r
-public:\r
-       GDIVideoConsumer(HWND hwnd, const FrameFormatDescription& fmtDesc);\r
-       virtual ~GDIVideoConsumer();\r
-\r
-       virtual IPlaybackControl* GetPlaybackControl() const;\r
-\r
-       virtual void EnableVideoOutput();\r
-       virtual void DisableVideoOutput();\r
-       virtual bool SetupDevice(unsigned int deviceIndex);\r
-       virtual bool ReleaseDevice();\r
-       virtual const FrameFormatDescription& GetFrameFormatDescription() const;\r
-       virtual const TCHAR* GetFormatDescription() const;\r
-\r
-private:\r
-       struct Implementation;\r
-       std::tr1::shared_ptr<Implementation> pImpl_;\r
-};\r
-\r
-}      //namespace gdi\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/consumers/OGL/OGLVideoConsumer.cpp b/server/consumers/OGL/OGLVideoConsumer.cpp
deleted file mode 100644 (file)
index f8437c4..0000000
+++ /dev/null
@@ -1,461 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\StdAfx.h"\r
-#include "OGLVideoConsumer.h"\r
-#include "..\..\frame\FramePlaybackControl.h"\r
-#include "..\..\frame\FramePlaybackStrategy.h"\r
-\r
-#include <Glee.h>\r
-\r
-namespace caspar {\r
-namespace ogl {\r
-\r
-struct OGLVideoConsumer::Implementation\r
-{\r
-       struct OGLDevice\r
-       {\r
-               OGLDevice(HWND hWnd, Stretch stretch, int screenWidth, int screenHeight) \r
-                       : hDC(NULL), \r
-                         hRC(NULL),\r
-                         width_(0), \r
-                         height_(0),\r
-                         size_(0),\r
-                         texture_(0),\r
-                         stretch_(stretch),\r
-                         screenWidth_(screenWidth),\r
-                         screenHeight_(screenHeight), \r
-                         pboIndex_(0),\r
-                         firstFrame_(true)\r
-               {                                               \r
-                       static PIXELFORMATDESCRIPTOR pfd =                              \r
-                       {\r
-                               sizeof(PIXELFORMATDESCRIPTOR),                          // Size Of This Pixel Format Descriptor\r
-                               1,                                                                                      // Version Number\r
-                               PFD_SUPPORT_OPENGL |                                            // Format Must Support OpenGL\r
-                               PFD_DOUBLEBUFFER,                                                       // Must Support Double Buffering\r
-                               PFD_TYPE_RGBA,                                                          // Request An RGBA Format\r
-                               32,                                                                                     // Select Our Color Depth\r
-                               0, 0, 0, 0, 0, 0,                                                       // Color Bits Ignored\r
-                               0,                                                                                      // No Alpha Buffer\r
-                               0,                                                                                      // Shift Bit Ignored\r
-                               0,                                                                                      // No Accumulation Buffer\r
-                               0, 0, 0, 0,                                                                     // Accumulation Bits Ignored\r
-                               0,                                                                                      // 16Bit Z-Buffer (Depth Buffer)  \r
-                               0,                                                                                      //  No Stencil Buffer\r
-                               0,                                                                                      // No Auxiliary Buffer\r
-                               PFD_MAIN_PLANE,                                                         // Main Drawing Layer\r
-                               0,                                                                                      // Reserved\r
-                               0, 0, 0                                                                         // Layer Masks Ignored\r
-                       };\r
-\r
-                       ;\r
-                       if(!(hDC = GetDC(hWnd)))\r
-                               throw std::exception("Failed To Get Device Context");\r
-\r
-                       if(!SetPixelFormat(hDC, ChoosePixelFormat(hDC, &pfd),&pfd))\r
-                               throw std::exception("Failed To Set Pixel Format");\r
-\r
-                       if(!(hRC = wglCreateContext(hDC)))\r
-                               throw std::exception("Failed To Create Render Context");\r
-\r
-                       if(!wglMakeCurrent(hDC, hRC))\r
-                               throw std::exception("Failed To Activate Render Context");\r
-\r
-                       glClearColor(0.0f, 0.0f, 0.0f, 0.0f);\r
-                       glEnable(GL_TEXTURE_2D);\r
-\r
-                       dlist_ = glGenLists(1);\r
-\r
-                       if(glGetError() != GL_NO_ERROR)\r
-                               throw std::exception("Failed To Initialize OpenGL");\r
-               }\r
-\r
-               ~OGLDevice()\r
-               {\r
-                       if (hRC)\r
-                       {\r
-                               wglMakeCurrent(NULL, NULL);\r
-                               wglDeleteContext(hRC);\r
-                               hRC = NULL;\r
-                       }\r
-\r
-                       if(texture_)\r
-                       {\r
-                               glDeleteTextures( 1, &texture_);\r
-                               texture_ = 0;\r
-                       }\r
-                       glDeleteBuffers(2, pbos_);\r
-               }\r
-\r
-               GLvoid ReSizeGLScene(GLsizei width, GLsizei height)     \r
-               {\r
-                       width_ = width;\r
-                       height_ = height;\r
-                       size_ = width_*height_*4;\r
-                       \r
-                       glViewport(0, 0, screenWidth_, screenHeight_);\r
-\r
-                       if(glGetError() != GL_NO_ERROR)\r
-                               throw std::exception("Failed To Update Viewport");\r
-\r
-                       float wratio = (float)width_/(float)width_;\r
-                       float hratio = (float)height_/(float)height_;\r
-\r
-                       std::pair<float, float> targetRatio = None();\r
-                       if(stretch_ == ogl::Fill)\r
-                               targetRatio = Fill();\r
-                       else if(stretch_ == ogl::Uniform)\r
-                               targetRatio = Uniform();\r
-                       else if(stretch_ == ogl::UniformToFill)\r
-                               targetRatio = UniformToFill();\r
-\r
-                       float wSize = targetRatio.first;\r
-                       float hSize = targetRatio.second;\r
-\r
-                       glNewList(dlist_, GL_COMPILE);\r
-                               glBegin(GL_QUADS);\r
-                                       glTexCoord2f(0.0f,       hratio);       glVertex2f(-wSize, -hSize);\r
-                                       glTexCoord2f(wratio, hratio);   glVertex2f( wSize, -hSize);\r
-                                       glTexCoord2f(wratio, 0.0f);             glVertex2f( wSize,  hSize);\r
-                                       glTexCoord2f(0.0f,       0.0f);         glVertex2f(-wSize,  hSize);\r
-                               glEnd();        \r
-                       glEndList();\r
-\r
-                       if(texture_ != 0)                       \r
-                       {\r
-                               glDeleteTextures( 1, &texture_);\r
-                               texture_ = 0;\r
-                       }\r
-                       \r
-                       glDeleteBuffers(2, pbos_);\r
-\r
-                       glGenTextures(1, &texture_);    \r
-                       glBindTexture( GL_TEXTURE_2D, texture_);\r
-\r
-                       glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );\r
-                       glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );\r
-\r
-                       glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, width_, height_, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL);\r
-\r
-                       if(glGetError() != GL_NO_ERROR)\r
-                               throw std::exception("Failed To Create Texture");\r
-\r
-                       glGenBuffersARB(2, pbos_);\r
-                       GLenum error = glGetError();\r
-                       glBindBuffer(GL_PIXEL_PACK_BUFFER, pbos_[0]);\r
-                       error = glGetError();\r
-                       glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, size_, 0, GL_STREAM_DRAW);\r
-                       error = glGetError();\r
-                       glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pbos_[1]);\r
-                       glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, size_, 0, GL_STREAM_DRAW);\r
-\r
-                       error = glGetError();\r
-                       if(error != GL_NO_ERROR)\r
-                               throw std::exception("Failed To Create PBOs");\r
-\r
-                       pboIndex_ = 0;\r
-               }\r
-\r
-               std::pair<float, float> None()\r
-               {\r
-                       float width = (float)width_/(float)screenWidth_;\r
-                       float height = (float)height_/(float)screenHeight_;\r
-\r
-                       return std::make_pair(width, height);\r
-               }\r
-\r
-               std::pair<float, float> Uniform()\r
-               {\r
-                       float aspect = (float)width_/(float)height_;\r
-                       float width = min(1.0f, (float)screenHeight_*aspect/(float)screenWidth_);\r
-                       float height = (float)(screenWidth_*width)/(float)(screenHeight_*aspect);\r
-\r
-                       return std::make_pair(width, height);\r
-               }\r
-\r
-               std::pair<float, float> Fill()\r
-               {\r
-                       return std::make_pair(1.0f, 1.0f);\r
-               }\r
-\r
-               std::pair<float, float> UniformToFill()\r
-               {\r
-                       float aspect = (float)width_/(float)height_;\r
-\r
-                       float wr = (float)width_/(float)screenWidth_;\r
-                       float hr = (float)height_/(float)screenHeight_;\r
-                       float r_inv = 1.0f/min(wr, hr);\r
-\r
-                       float width = wr*r_inv;\r
-                       float height = hr*r_inv;\r
-\r
-                       return std::make_pair(width, height);\r
-               }\r
-\r
-               void Render(unsigned char* data)\r
-               {                                       \r
-                       // RENDER\r
-\r
-                       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\r
-                       glClearColor(0.0f, 0.0f, 0.0f, 0.0f);\r
-                       glLoadIdentity();\r
-       \r
-                       glBindTexture(GL_TEXTURE_2D, texture_);\r
-                       glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pbos_[pboIndex_]);\r
-       \r
-                       glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width_, height_, GL_BGRA, GL_UNSIGNED_BYTE, 0);\r
-\r
-                       if(!firstFrame_)\r
-                               glCallList(dlist_);             \r
-\r
-                       // UPDATE\r
-\r
-                       int nextPboIndex = pboIndex_ ^ 1;\r
-\r
-                       glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pbos_[nextPboIndex]);\r
-                       glBufferData(GL_PIXEL_UNPACK_BUFFER, size_, NULL, GL_STREAM_DRAW);\r
-                       GLubyte* ptr = (GLubyte*)glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_WRITE_ONLY);\r
-\r
-                       if(ptr != NULL)                 \r
-                       {\r
-                               memcpy(ptr, data, size_);                               \r
-                               glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);\r
-                       }\r
-\r
-                       // SWAP\r
-\r
-                       pboIndex_ = nextPboIndex;\r
-                       SwapBuffers(hDC);\r
-\r
-                       if(firstFrame_)\r
-                       {\r
-                               firstFrame_ = false;\r
-                               Render(data);\r
-                       }\r
-               }\r
-       \r
-               int screenWidth_;\r
-               int screenHeight_;\r
-\r
-               bool firstFrame_;\r
-\r
-               GLuint dlist_;\r
-               GLuint texture_;\r
-\r
-               int width_;\r
-               int height_;\r
-               int size_;\r
-\r
-               HDC       hDC;\r
-               HGLRC hRC;\r
-               \r
-               Stretch stretch_;\r
-               GLuint pbos_[2];\r
-               int pboIndex_;\r
-       };\r
-\r
-       typedef std::tr1::shared_ptr<OGLDevice> OGLDevicePtr;\r
-\r
-       struct OGLPlaybackStrategy: public IFramePlaybackStrategy\r
-       {\r
-               OGLPlaybackStrategy(Implementation* pConsumerImpl) : pConsumerImpl_(pConsumerImpl), lastTime_(timeGetTime()), lastFrameCount_(0)\r
-               {}\r
-\r
-               FrameManagerPtr GetFrameManager()\r
-               {\r
-                       return pConsumerImpl_->pFrameManager_;\r
-               }       \r
-               FramePtr GetReservedFrame()\r
-               {\r
-                       return pConsumerImpl_->pFrameManager_->CreateFrame();\r
-               }\r
-\r
-               void DisplayFrame(Frame* pFrame)\r
-               {\r
-                       DWORD timediff = timeGetTime() - lastTime_;\r
-                       if(timediff < 35)\r
-                               Sleep(40 - timediff);\r
-                       lastTime_ = timeGetTime();\r
-\r
-                       // Check if frame is valid and if it has already been rendered\r
-                       if(pFrame == NULL || (pFrame->ID() == lastFrameID_ && lastFrameCount_ > 1)) // Potential problem is that if the HDC is invalidated by external application it will stay that way, (R.N), keep or remove?\r
-                               return;         \r
-\r
-                       lastFrameCount_ = pFrame->ID() == lastFrameID_ ? ++lastFrameCount_ : 0; // Cant stop rendering until 2 frames are pushed due to doublebuffering\r
-\r
-                       if(!pOGLDevice_)\r
-                       {\r
-                               pOGLDevice_.reset(new OGLDevice(pConsumerImpl_->hWnd_, pConsumerImpl_->stretch_, pConsumerImpl_->screenWidth_, pConsumerImpl_->screenHeight_));\r
-                               pOGLDevice_->ReSizeGLScene(pConsumerImpl_->fmtDesc_.width, pConsumerImpl_->fmtDesc_.height);\r
-                       }\r
-\r
-                       pOGLDevice_->Render(pFrame->GetDataPtr());\r
-\r
-                       lastFrameID_ = pFrame->ID();\r
-               }\r
-\r
-               int lastFrameCount_;\r
-               utils::ID lastFrameID_;\r
-               OGLDevicePtr pOGLDevice_;\r
-               Implementation* pConsumerImpl_;\r
-               DWORD lastTime_;        \r
-       };\r
-       \r
-       Implementation(HWND hWnd, const FrameFormatDescription& fmtDesc, unsigned int screenIndex, Stretch stretch) \r
-               : hWnd_(hWnd), fmtDesc_(fmtDesc), pFrameManager_(new SystemFrameManager(fmtDesc_)), stretch_(stretch), screenIndex_(screenIndex)\r
-       {\r
-               bool succeeded = SetupDevice();\r
-               assert(succeeded);\r
-       }\r
-\r
-       ~Implementation()\r
-       {\r
-               bool succeeded = ReleaseDevice();\r
-               assert(succeeded);\r
-       }\r
-\r
-       bool SetupDevice()\r
-       {\r
-               DISPLAY_DEVICE dDevice;                 \r
-               memset(&dDevice,0,sizeof(dDevice));\r
-               dDevice.cb = sizeof(dDevice);\r
-\r
-               std::vector<DISPLAY_DEVICE> displayDevices;\r
-               for(int n = 0; EnumDisplayDevices(NULL, n, &dDevice, NULL); ++n)\r
-               {\r
-                       displayDevices.push_back(dDevice);\r
-                       memset(&dDevice,0,sizeof(dDevice));\r
-                       dDevice.cb = sizeof(dDevice);\r
-               }\r
-\r
-               if(screenIndex_ >= displayDevices.size())\r
-                       return false;\r
-               \r
-               if(!GetWindowRect(hWnd_, &prevRect_))\r
-                       throw std::exception("Failed to get Window Rectangle.");\r
-\r
-               DEVMODE devmode;\r
-               memset(&devmode,0,sizeof(devmode));\r
-               \r
-               if(!EnumDisplaySettings(displayDevices[screenIndex_].DeviceName, ENUM_CURRENT_SETTINGS, &devmode))\r
-               {\r
-                       std::stringstream msg;\r
-                       msg << "Failed to enumerate Display Settings for DisplayDevice " << screenIndex_ << ".";\r
-                       throw std::exception(msg.str().c_str());\r
-               }\r
-\r
-               prevMode_ = devmode;\r
-\r
-               screenWidth_ = devmode.dmPelsWidth;\r
-               screenHeight_ = devmode.dmPelsHeight;\r
-\r
-               ChangeDisplaySettings(&devmode, CDS_FULLSCREEN);\r
-\r
-               //if(result != DISP_CHANGE_SUCCESSFUL)\r
-               //      throw std::exception("Failed to change Display Settings.");\r
-\r
-               prevStyle_   = GetWindowLong(hWnd_, GWL_STYLE);\r
-               prevExStyle_ = GetWindowLong(hWnd_, GWL_EXSTYLE);\r
-       \r
-               if(!(SetWindowLong(hWnd_, GWL_STYLE, WS_POPUP) && SetWindowLong(hWnd_, GWL_EXSTYLE, WS_EX_APPWINDOW | WS_EX_TOPMOST)))\r
-                       throw std::exception("Failed to change window style.");\r
-\r
-               if(!MoveWindow(hWnd_, devmode.dmPosition.x, devmode.dmPosition.y, screenWidth_, screenHeight_, TRUE))\r
-                       throw std::exception("Failed to move window to display device.");\r
-\r
-               ShowWindow(hWnd_,SW_SHOW);                                              // Show The Window\r
-               SetForegroundWindow(hWnd_);                                             // Slightly Higher Priority\r
-               \r
-\r
-               pPlaybackControl_.reset(new FramePlaybackControl(FramePlaybackStrategyPtr(new OGLPlaybackStrategy(this))));\r
-               pPlaybackControl_->Start();\r
-\r
-               LOG << TEXT("OGL INFO: Successfully initialized device ");\r
-               return true;\r
-       }\r
-\r
-       bool ReleaseDevice()\r
-       {\r
-               pPlaybackControl_->Stop();\r
-               pPlaybackControl_.reset();\r
-\r
-               SetWindowLong(hWnd_, GWL_STYLE, prevStyle_);\r
-               SetWindowLong(hWnd_, GWL_EXSTYLE, prevExStyle_);\r
-\r
-               ChangeDisplaySettings(&prevMode_, 0);\r
-\r
-               MoveWindow(hWnd_, prevRect_.bottom, prevRect_.left, (prevRect_.right - prevRect_.left), (prevRect_.top-prevRect_.bottom), TRUE);\r
-               \r
-               LOG << TEXT("OGL INFO: Successfully released device ") << utils::LogStream::Flush;\r
-               return true;\r
-       }\r
-\r
-       unsigned int screenIndex_;\r
-       int screenWidth_;\r
-       int screenHeight_;\r
-       \r
-       DEVMODE prevMode_;\r
-       RECT  prevRect_;\r
-       DWORD prevExStyle_;\r
-       DWORD prevStyle_;\r
-\r
-       Stretch stretch_;\r
-       FrameFormatDescription fmtDesc_;\r
-       HWND hWnd_;\r
-       SystemFrameManagerPtr pFrameManager_;\r
-       FramePlaybackControlPtr pPlaybackControl_;      \r
-};\r
-\r
-OGLVideoConsumer::OGLVideoConsumer(HWND hWnd, const FrameFormatDescription& fmtDesc, unsigned int screenIndex, Stretch stretch)\r
-: pImpl_(new Implementation(hWnd, fmtDesc, screenIndex, stretch))\r
-{\r
-}\r
-\r
-OGLVideoConsumer::~OGLVideoConsumer(void)\r
-{\r
-}\r
-\r
-IPlaybackControl* OGLVideoConsumer::GetPlaybackControl() const\r
-{\r
-       return pImpl_->pPlaybackControl_.get();\r
-}\r
-\r
-void OGLVideoConsumer::EnableVideoOutput(){}\r
-\r
-void OGLVideoConsumer::DisableVideoOutput(){}\r
-\r
-bool OGLVideoConsumer::SetupDevice(unsigned int deviceIndex)\r
-{\r
-       return pImpl_->SetupDevice();\r
-}\r
-\r
-bool OGLVideoConsumer::ReleaseDevice()\r
-{\r
-       return pImpl_->ReleaseDevice();\r
-}\r
-\r
-const TCHAR* OGLVideoConsumer::GetFormatDescription() const\r
-{\r
-       return pImpl_->fmtDesc_.name;\r
-}\r
-\r
-}\r
-}
\ No newline at end of file
diff --git a/server/consumers/OGL/OGLVideoConsumer.h b/server/consumers/OGL/OGLVideoConsumer.h
deleted file mode 100644 (file)
index 5a9267c..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _OGL_CONSUMER_H_\r
-#define _OGL_CONSUMER_H_\r
-\r
-#include "..\..\VideoConsumer.h"\r
-#include "..\..\MediaProducer.h"\r
-#include "..\..\frame\BitmapFrameManager.h"\r
-\r
-#include "..\..\utils\thread.h"\r
-#include "..\..\utils\lockable.h"\r
-\r
-#include <memory>\r
-\r
-namespace caspar {\r
-namespace ogl {\r
-\r
-enum Stretch\r
-{\r
-       None,\r
-       Uniform,\r
-       Fill,\r
-       UniformToFill\r
-};\r
-\r
-class OGLVideoConsumer : public IVideoConsumer, private utils::LockableObject\r
-{\r
-public:\r
-\r
-       OGLVideoConsumer(HWND hWnd, const FrameFormatDescription& fmtDesc, unsigned int screenIndex = 0, Stretch stretch = Fill);\r
-       ~OGLVideoConsumer(void);\r
-       \r
-       IPlaybackControl* GetPlaybackControl() const;\r
-       void EnableVideoOutput();\r
-       void DisableVideoOutput();\r
-       bool SetupDevice(unsigned int deviceIndex);\r
-       bool ReleaseDevice();\r
-       const TCHAR* GetFormatDescription() const;\r
-               \r
-private:\r
-       struct Implementation;\r
-       std::tr1::shared_ptr<Implementation> pImpl_;\r
-};\r
-\r
-typedef std::tr1::shared_ptr<OGLVideoConsumer> OGLVideoConsumerPtr;\r
-\r
-\r
-}\r
-}\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/consumers/bluefish/BlueFishVideoConsumer.cpp b/server/consumers/bluefish/BlueFishVideoConsumer.cpp
deleted file mode 100644 (file)
index 22f0382..0000000
+++ /dev/null
@@ -1,297 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\StdAfx.h"\r
-\r
-#include <BlueVelvet4.h>\r
-#include "..\..\application.h"\r
-#include "BlueFishVideoConsumer.h"\r
-#include "..\..\frame\FramePlaybackControl.h"\r
-#include "BluefishPlaybackStrategy.h"\r
-\r
-#include <stdlib.h>\r
-#include <stdio.h>\r
-\r
-namespace caspar { namespace bluefish {\r
-\r
-int BlueFishVideoConsumer::EnumerateDevices()\r
-{\r
-       LOG << TEXT("Bluefish SDK version: ") << BlueVelvetVersion();\r
-       BlueVelvetPtr pSDK(BlueVelvetFactory4());\r
-\r
-       if(pSDK != 0) \r
-       {\r
-               int deviceCount = 0;\r
-               pSDK->device_enumerate(deviceCount);\r
-               return deviceCount;\r
-       }\r
-       else\r
-               return 0;\r
-}\r
-\r
-VideoConsumerPtr BlueFishVideoConsumer::Create(unsigned int deviceIndex)\r
-{\r
-       BlueFishVideoConsumerPtr card(new BlueFishVideoConsumer());\r
-       if(card != 0 && card->SetupDevice(deviceIndex) == false)\r
-               card.reset();\r
-\r
-       return card;\r
-}\r
-\r
-BlueFishVideoConsumer::BlueFishVideoConsumer() : pSDK_(BlueVelvetFactory4()), currentFormat_(FFormatPAL), _deviceIndex(0)\r
-{}\r
-\r
-BlueFishVideoConsumer::~BlueFishVideoConsumer()\r
-{\r
-       ReleaseDevice();\r
-}\r
-\r
-IPlaybackControl* BlueFishVideoConsumer::GetPlaybackControl() const\r
-{\r
-       return pPlaybackControl_.get();\r
-}\r
-\r
-bool BlueFishVideoConsumer::SetupDevice(unsigned int deviceIndex)\r
-{\r
-       tstring strDesiredFrameFormat = caspar::GetApplication()->GetSetting(TEXT("videomode"));\r
-       return this->DoSetupDevice(deviceIndex, strDesiredFrameFormat);\r
-}\r
-\r
-unsigned long BlueFishVideoConsumer::BlueSetVideoFormat(tstring strDesiredFrameFormat)\r
-{\r
-       unsigned long vidFmt = VID_FMT_PAL;\r
-       unsigned long desiredVideoFormat = VID_FMT_PAL;\r
-\r
-       if(strDesiredFrameFormat.size() == 0)\r
-               strDesiredFrameFormat = TEXT("PAL");\r
-\r
-       FrameFormat casparVideoFormat = caspar::GetVideoFormat(strDesiredFrameFormat);\r
-       desiredVideoFormat = bluefish::VidFmtFromFrameFormat(casparVideoFormat);\r
-       currentFormat_ = casparVideoFormat != FFormatInvalid ? casparVideoFormat : FFormatPAL;\r
-       if(desiredVideoFormat == ULONG_MAX) \r
-       {\r
-               LOG << TEXT("BLUECARD ERROR: Unsupported videomode: ") << strDesiredFrameFormat << TEXT(". (device ") << _deviceIndex << TEXT(")");\r
-               return ULONG_MAX;\r
-       }\r
-\r
-       if(desiredVideoFormat != VID_FMT_PAL)\r
-       {\r
-               int videoModeCount = pSDK_->count_video_mode();\r
-               for(int videoModeIndex=1; videoModeIndex <= videoModeCount; ++videoModeIndex) \r
-               {\r
-                       EVideoMode videoMode = pSDK_->enum_video_mode(videoModeIndex);\r
-                       if(videoMode == desiredVideoFormat) \r
-                               vidFmt = videoMode;                     \r
-               }\r
-       }\r
-\r
-       if(vidFmt != desiredVideoFormat)\r
-               LOG << TEXT("BLUECARD ERROR: Failed to set desired videomode: ") << strDesiredFrameFormat << TEXT(". (device ") << _deviceIndex << TEXT(")");\r
-       \r
-       if(vidFmt == VID_FMT_PAL)\r
-       {\r
-               strDesiredFrameFormat = TEXT("PAL");\r
-               currentFormat_ = FFormatPAL;\r
-       }\r
-       return vidFmt;\r
-}\r
-\r
-bool BlueFishVideoConsumer::DoSetupDevice(unsigned int deviceIndex, tstring strDesiredFrameFormat)\r
-{                              \r
-       memFmt_         = MEM_FMT_ARGB_PC;\r
-       updFmt_         = UPD_FMT_FRAME;\r
-       vidFmt_         = VID_FMT_PAL; \r
-       resFmt_         = RES_FMT_NORMAL; \r
-       engineMode_     = VIDEO_ENGINE_FRAMESTORE;\r
-\r
-       _deviceIndex = deviceIndex;\r
-               \r
-       if(BLUE_FAIL(pSDK_->device_attach(_deviceIndex, FALSE))) \r
-       {\r
-               LOG << TEXT("BLUECARD ERROR: Failed to attach device. (device ") << _deviceIndex << TEXT(")");;\r
-               return false;\r
-       }\r
-       \r
-       int videoCardType = pSDK_->has_video_cardtype();\r
-       LOG << TEXT("BLUECARD INFO: Card type: ") << GetBluefishCardDesc(videoCardType) << TEXT(". (device ") << _deviceIndex << TEXT(")");;\r
-       \r
-       //void* pBlueDevice = blue_attach_to_device(1);\r
-       //EBlueConnectorPropertySetting video_routing[1];\r
-       //auto channel = BLUE_VIDEO_OUTPUT_CHANNEL_A;\r
-       //video_routing[0].channel = channel;   \r
-       //video_routing[0].propType = BLUE_CONNECTOR_PROP_SINGLE_LINK;\r
-       //video_routing[0].connector = channel == BLUE_VIDEO_OUTPUT_CHANNEL_A ? BLUE_CONNECTOR_SDI_OUTPUT_A : BLUE_CONNECTOR_SDI_OUTPUT_B;\r
-       //blue_set_connector_property(pBlueDevice, 1, video_routing);\r
-       //blue_detach_from_device(&pBlueDevice);\r
-               \r
-       vidFmt_ = BlueSetVideoFormat(strDesiredFrameFormat);\r
-       if(vidFmt_ == ULONG_MAX)\r
-               return false;\r
-               \r
-       // Set default video output channel\r
-       //if(BLUE_FAIL(SetCardProperty(pSDK_, DEFAULT_VIDEO_OUTPUT_CHANNEL, channel)))\r
-       //      LOG << TEXT("BLUECARD ERROR: Failed to set default channel. (device ") << _deviceIndex << TEXT(")");\r
-\r
-       //Setting output Video mode\r
-       if(BLUE_FAIL(SetCardProperty(pSDK_, VIDEO_MODE, vidFmt_))) \r
-       {\r
-               LOG << TEXT("BLUECARD ERROR: Failed to set videomode. (device ") << _deviceIndex << TEXT(")");\r
-               return false;\r
-       }\r
-\r
-       //Select Update Mode for output\r
-       if(BLUE_FAIL(SetCardProperty(pSDK_, VIDEO_UPDATE_TYPE, updFmt_))) \r
-       {\r
-               LOG << TEXT("BLUECARD ERROR: Failed to set update type. (device ") << _deviceIndex << TEXT(")");\r
-               return false;\r
-       }\r
-\r
-       DisableVideoOutput();\r
-\r
-       //Enable dual link output\r
-       if(BLUE_FAIL(SetCardProperty(pSDK_, VIDEO_DUAL_LINK_OUTPUT, 1)))\r
-       {\r
-               LOG << TEXT("BLUECARD ERROR: Failed to enable dual link. (device ") << _deviceIndex << TEXT(")");\r
-               return false;\r
-       }\r
-\r
-       if(BLUE_FAIL(SetCardProperty(pSDK_, VIDEO_DUAL_LINK_OUTPUT_SIGNAL_FORMAT_TYPE, Signal_FormatType_4224)))\r
-       {\r
-               LOG << TEXT("BLUECARD ERROR: Failed to set dual link format type to 4:2:2:4. (device ") << _deviceIndex << TEXT(")");\r
-               return false;\r
-       }\r
-\r
-       \r
-       //Select output memory format\r
-       if(BLUE_FAIL(SetCardProperty(pSDK_, VIDEO_MEMORY_FORMAT, memFmt_))) \r
-       {\r
-               LOG << TEXT("BLUECARD ERROR: Failed to set memory format. (device ") << _deviceIndex << TEXT(")");\r
-               return false;\r
-       }\r
-\r
-       //Select image orientation\r
-       if(BLUE_FAIL(SetCardProperty(pSDK_, VIDEO_IMAGE_ORIENTATION, ImageOrientation_Normal)))\r
-               LOG << TEXT("BLUECARD ERROR: Failed to set image orientation to normal. (device ") << _deviceIndex << TEXT(")");        \r
-\r
-       // Select data range\r
-       if(BLUE_FAIL(SetCardProperty(pSDK_, VIDEO_RGB_DATA_RANGE, CGR_RANGE))) \r
-               LOG << TEXT("BLUECARD ERROR: Failed to set RGB data range to CGR. (device ") << _deviceIndex << TEXT(")");      \r
-               \r
-       if(BLUE_FAIL(SetCardProperty(pSDK_, VIDEO_PREDEFINED_COLOR_MATRIX, vidFmt_ == VID_FMT_PAL ? MATRIX_601_CGR : MATRIX_709_CGR)))\r
-               LOG << TEXT("BLUECARD ERROR: Failed to set colormatrix to ") << (vidFmt_ == VID_FMT_PAL ? TEXT("601 CGR") : TEXT("709 CGR")) << TEXT(". (device ") << _deviceIndex << TEXT(")");\r
-               \r
-       //if(BLUE_FAIL(SetCardProperty(pSDK_, EMBEDDED_AUDIO_OUTPUT, 0)))       \r
-       //      LOG << TEXT("BLUECARD ERROR: Failed to enable embedded audio. (device ") << _deviceIndex << TEXT(")");  \r
-       //else \r
-       //{\r
-       //      LOG << TEXT("BLUECARD INFO: Enabled embedded audio. (device ") << _deviceIndex << TEXT(")");\r
-       //      hasEmbeddedAudio_ = true;\r
-       //}\r
-\r
-       LOG << TEXT("BLUECARD INFO: Successfully configured bluecard for ") << strDesiredFrameFormat << TEXT(". (device ") << _deviceIndex << TEXT(")");\r
-\r
-       if (pSDK_->has_output_key()) \r
-       {\r
-               int dummy = TRUE;\r
-               int v4444 = FALSE;\r
-               int invert = FALSE;\r
-               int white = FALSE;\r
-               pSDK_->set_output_key(dummy, v4444, invert, white);\r
-       }\r
-\r
-       if(pSDK_->GetHDCardType(_deviceIndex) != CRD_HD_INVALID) \r
-               pSDK_->Set_DownConverterSignalType(vidFmt_ == VID_FMT_PAL ? SD_SDI : HD_SDI);   \r
-       \r
-       if(BLUE_FAIL(pSDK_->set_video_engine(engineMode_)))\r
-       {\r
-               LOG << TEXT("BLUECARD ERROR: Failed to set vido engine. (device ") << _deviceIndex << TEXT(")");\r
-               return false;\r
-       }\r
-\r
-       EnableVideoOutput();\r
-\r
-       LOG << TEXT("BLUECARD INFO: Successfully initialized device ") << _deviceIndex;\r
-\r
-       pFrameManager_ = std::make_shared<SystemFrameManager>(FrameFormatDescription::FormatDescriptions[FFormatPAL]);\r
-\r
-       pPlaybackControl_ = std::make_shared<FramePlaybackControl>(FramePlaybackStrategyPtr(new BluefishPlaybackStrategy(this)));\r
-       pPlaybackControl_->Start();\r
-\r
-       return true;\r
-}\r
-\r
-bool BlueFishVideoConsumer::ReleaseDevice()\r
-{\r
-       pPlaybackControl_.reset();\r
-       pFrameManager_.reset();\r
-\r
-       DisableVideoOutput();\r
-\r
-       if(pSDK_) \r
-               pSDK_->device_detach(); \r
-\r
-       LOG << TEXT("BLUECARD INFO: Successfully released device ") << _deviceIndex;\r
-       return true;\r
-}\r
-\r
-void BlueFishVideoConsumer::EnableVideoOutput()\r
-{      \r
-       if(pSDK_)\r
-       {\r
-               if(BLUE_FAIL(SetCardProperty(pSDK_, VIDEO_BLACKGENERATOR, 0))) \r
-                       LOG << TEXT("BLUECARD ERROR: Failed to disable video output. (device ") << _deviceIndex << TEXT(")");           \r
-       }\r
-}\r
-\r
-void BlueFishVideoConsumer::DisableVideoOutput()\r
-{      \r
-       if(pSDK_)\r
-       {\r
-               if(BLUE_FAIL(SetCardProperty(pSDK_, VIDEO_BLACKGENERATOR, 1))) \r
-                       LOG << TEXT("BLUECARD ERROR: Failed to disable video output. (device ") << _deviceIndex << TEXT(")");           \r
-       }\r
-}\r
-\r
-bool BlueFishVideoConsumer::SetVideoFormat(const tstring& strDesiredFrameFormat)\r
-{\r
-       tstring prevFrameFormat = this->GetFormatDescription();\r
-\r
-       unsigned long desiredVideoFormat = bluefish::VidFmtFromFrameFormat(caspar::GetVideoFormat(strDesiredFrameFormat));\r
-       if(desiredVideoFormat == ULONG_MAX)\r
-       {\r
-               LOG << TEXT("BLUECARD INFO: Unsupported video format. Ignored ") << strDesiredFrameFormat;\r
-               return false;\r
-       }\r
-\r
-       this->ReleaseDevice();\r
-       \r
-       if(!this->DoSetupDevice(this->_deviceIndex, strDesiredFrameFormat))\r
-       {       \r
-               LOG << TEXT("BLUECARD ERROR: Failed to set video format. Trying to revert to previous format ") << prevFrameFormat;\r
-               DoSetupDevice(this->_deviceIndex, prevFrameFormat);\r
-               return false;\r
-       }\r
-\r
-       LOG << TEXT("BLUECARD INFO: Successfully set video format ") << strDesiredFrameFormat;\r
-\r
-       return true;\r
-}\r
-\r
-}}\r
diff --git a/server/consumers/bluefish/BlueFishVideoConsumer.h b/server/consumers/bluefish/BlueFishVideoConsumer.h
deleted file mode 100644 (file)
index a86aae2..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_BLUEFISHVIDEOCONSUMER_H__\r
-#define _CASPAR_BLUEFISHVIDEOCONSUMER_H__\r
-\r
-#pragma once\r
-\r
-#include "..\..\utils\thread.h"\r
-#include "BluefishException.h"\r
-#include "BluefishUtil.h"\r
-#include "..\..\VideoConsumer.h"\r
-\r
-#define TIMEOUT                        1000\r
-\r
-class CBlueVelvet4;\r
-\r
-namespace caspar {\r
-\r
-class FramePlaybackControl;\r
-typedef std::tr1::shared_ptr<FramePlaybackControl> FramePlaybackControlPtr;\r
-\r
-namespace bluefish {\r
-\r
-typedef std::tr1::shared_ptr<CBlueVelvet4> BlueVelvetPtr;\r
-\r
-class BlueFishVideoConsumer : public IVideoConsumer\r
-{\r
-       friend class BluefishPlaybackStrategy;\r
-\r
-       BlueFishVideoConsumer();\r
-       BlueFishVideoConsumer(const BlueFishVideoConsumer&);\r
-       const BlueFishVideoConsumer& operator=(const BlueFishVideoConsumer&);\r
-\r
-public:\r
-       virtual ~BlueFishVideoConsumer();\r
-\r
-       static int EnumerateDevices();\r
-       static VideoConsumerPtr Create(unsigned int deviceIndex);\r
-\r
-       virtual IPlaybackControl* GetPlaybackControl() const;\r
-\r
-       void EnableVideoOutput();\r
-       void DisableVideoOutput();\r
-       bool SetupDevice(unsigned int deviceIndex);\r
-       bool ReleaseDevice();\r
-       const TCHAR* GetFormatDescription() const \r
-       {\r
-               return FrameFormatDescription::FormatDescriptions[currentFormat_].name;\r
-       }\r
-       bool SetVideoFormat(const tstring& strDesiredFrameFormat);\r
-\r
-private:\r
-       \r
-       unsigned long BlueSetVideoFormat(tstring strDesiredFrameFormat);\r
-\r
-       bool DoSetupDevice(unsigned int deviceIndex, tstring strDesiredFrameFormat);\r
-\r
-       BlueVelvetPtr pSDK_;\r
-       FramePlaybackControlPtr pPlaybackControl_;\r
-       FrameManagerPtr pFrameManager_;\r
-       unsigned long m_bufferCount;\r
-       unsigned long m_length;\r
-       unsigned long m_actual;\r
-       unsigned long m_golden;\r
-       \r
-       FrameFormat currentFormat_;\r
-       unsigned int _deviceIndex;\r
-               \r
-       unsigned long memFmt_;\r
-       unsigned long updFmt_;\r
-       unsigned long vidFmt_; \r
-       unsigned long resFmt_; \r
-       unsigned long engineMode_;\r
-};\r
-typedef std::tr1::shared_ptr<BlueFishVideoConsumer> BlueFishVideoConsumerPtr;\r
-\r
-}      //namespace bluefish\r
-}      //namespace caspar\r
-\r
-\r
-#endif //_CASPAR_BLUEFISHVIDEOCONSUMER_H__\r
diff --git a/server/consumers/bluefish/BluefishException.h b/server/consumers/bluefish/BluefishException.h
deleted file mode 100644 (file)
index 4ea18eb..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_BLUEFISHEXCEPTION_H__\r
-#define _CASPAR_BLUEFISHEXCEPTION_H__\r
-\r
-#include <exception>\r
-\r
-namespace caspar {\r
-namespace bluefish {\r
-\r
-class BluefishException : public std::exception\r
-{\r
-public:\r
-       explicit BluefishException(const char* msg) : std::exception(msg) {}\r
-       ~BluefishException() {}\r
-};\r
-\r
-}      //namespace bluefish\r
-}      //namespace caspar\r
-\r
-#endif //_CASPAR_BLUEFISHEXCEPTION_H__
\ No newline at end of file
diff --git a/server/consumers/bluefish/BluefishFrameManager.cpp b/server/consumers/bluefish/BluefishFrameManager.cpp
deleted file mode 100644 (file)
index 01d0053..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\StdAfx.h"\r
-\r
-#include <BlueVelvet4.h>\r
-#include "..\..\utils\Process.h"\r
-#include "BluefishFrameManager.h"\r
-\r
-#define        BUFFER_ID_USER_BASE             (6)\r
-\r
-namespace caspar {\r
-namespace bluefish {\r
-\r
-//////////////////////\r
-// CardFrameInfo\r
-//\r
-CardFrameInfo::CardFrameInfo(BlueVelvetPtr pSDK, int dataSize, int bufferID) : pSDK_(pSDK), dataSize_(dataSize), pData_(0), bufferID_(bufferID)\r
-{\r
-       if(BLUE_FAIL(pSDK->system_buffer_map(reinterpret_cast<void**>(&pData_), bufferID)))\r
-       {\r
-               throw BluefishException("Failed to map buffer");\r
-       }\r
-}\r
-\r
-CardFrameInfo::~CardFrameInfo()\r
-{\r
-       try\r
-       {\r
-               if(pSDK_ != 0 && pData_ != 0)\r
-                       pSDK_->system_buffer_unmap(pData_);\r
-       }\r
-       catch(...) {}\r
-}\r
-\r
-\r
-//////////////////////\r
-// SystemFrameInfo\r
-//\r
-SystemFrameInfo::SystemFrameInfo(int dataSize, int bufferID) : dataSize_(dataSize), pData_(0), bufferID_(bufferID)\r
-{\r
-       pData_ = static_cast<unsigned char*>(::VirtualAlloc(NULL, dataSize_, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE));\r
-       if(pData_ == 0)\r
-       {\r
-               throw BluefishException("Failed to allocate memory for frame");\r
-       }\r
-       if(::VirtualLock(pData_, dataSize_) == 0)\r
-       {\r
-               throw BluefishException("Failed to lock memory for frame");\r
-       }\r
-}\r
-\r
-SystemFrameInfo::~SystemFrameInfo()\r
-{\r
-       try\r
-       {\r
-               if(pData_ != 0)\r
-                       ::VirtualFree(pData_, 0, MEM_RELEASE);\r
-       }\r
-       catch(...) {}\r
-}\r
-\r
-////////////////////////\r
-// BluefishVideoFrame\r
-//\r
-BluefishVideoFrame::BluefishVideoFrame(BluefishFrameManager* pFrameManager) : pFrameManager_(pFrameManager)\r
-{\r
-       if(pFrameManager_ != 0)\r
-       {\r
-               factoryID_ = pFrameManager_->ID();\r
-               pInfo_ = pFrameManager_->GetBuffer();\r
-       }\r
-}\r
-\r
-BluefishVideoFrame::~BluefishVideoFrame()\r
-{\r
-       if(pFrameManager_ != 0 && pInfo_ != 0)\r
-               pFrameManager_->ReturnBuffer(pInfo_);\r
-}\r
-\r
-//////////////////////////////\r
-// BluefishVideoFrameFactory\r
-//\r
-BluefishFrameManager::BluefishFrameManager(BlueVelvetPtr pSDK, FrameFormat fmt, unsigned long optimalLength) : pSDK_(pSDK), format_(fmt)\r
-{\r
-       const FrameFormatDescription& fmtDesc = FrameFormatDescription::FormatDescriptions[fmt];\r
-       pBackupFrameManager_.reset(new SystemFrameManager(fmtDesc));\r
-\r
-       SIZE_T workingSetMinSize = 0, workingSetMaxSize = 0;\r
-       if(utils::Process::GetCurrentProcess().GetWorkingSetSize(workingSetMinSize, workingSetMaxSize))\r
-       {\r
-               LOG << utils::LogLevel::Debug << TEXT("WorkingSet size: min = ") << workingSetMinSize << TEXT(", max = ") << workingSetMaxSize;\r
-               \r
-               workingSetMinSize += optimalLength * 6;\r
-               workingSetMaxSize += optimalLength * 6;\r
-\r
-               if(!utils::Process::GetCurrentProcess().SetWorkingSetSize(workingSetMinSize, workingSetMaxSize))\r
-               {\r
-                       LOG << utils::LogLevel::Critical << TEXT("Failed to set workingset: min = ") << workingSetMinSize << TEXT(", max = ") << workingSetMaxSize;\r
-               }\r
-       }\r
-\r
-       //for(int cardBufferIndex = 0; cardBufferIndex < 4; ++cardBufferIndex)\r
-       //{\r
-       //      frameBuffers_.push_back(VideoFrameInfoPtr(new CardFrameInfo(pSDK, optimalLength, BUFFER_ID_VIDEO0 + cardBufferIndex)));\r
-       //}\r
-       for(int systemBufferIndex = 0; systemBufferIndex < 6; ++systemBufferIndex)\r
-       {\r
-               frameBuffers_.push_back(VideoFrameInfoPtr(new SystemFrameInfo(optimalLength, BUFFER_ID_USER_BASE + systemBufferIndex)));\r
-       }\r
-\r
-       FrameInfoList::const_iterator it = frameBuffers_.begin();\r
-       FrameInfoList::const_iterator end = frameBuffers_.end();\r
-       for(; it != end; ++it)\r
-       {\r
-               if(BLUE_FAIL(pSDK_->system_buffer_assign((*it)->GetPtr(), (*it)->GetBufferID(), (*it)->GetDataSize(), BUFFER_TYPE_VIDEO)))\r
-               {\r
-                       throw BluefishException("Failed to assign buffer");\r
-               }\r
-       }\r
-}\r
-\r
-BluefishFrameManager::~BluefishFrameManager()\r
-{\r
-}\r
-\r
-FramePtr BluefishFrameManager::CreateFrame()\r
-{\r
-       FramePtr pBluefishFrame(new BluefishVideoFrame(this));\r
-       if(pBluefishFrame->HasValidDataPtr())\r
-               return pBluefishFrame;\r
-       else\r
-               return pBackupFrameManager_->CreateFrame();\r
-}\r
-\r
-const FrameFormatDescription& BluefishFrameManager::GetFrameFormatDescription() const\r
-{\r
-       return FrameFormatDescription::FormatDescriptions[format_];\r
-}\r
-\r
-VideoFrameInfoPtr BluefishFrameManager::GetBuffer()\r
-{\r
-       Lock lock(*this);\r
-       VideoFrameInfoPtr pInfo;\r
-\r
-       if(frameBuffers_.size() > 0)\r
-       {\r
-               pInfo = frameBuffers_.front();\r
-               frameBuffers_.pop_front();\r
-       }\r
-\r
-       return pInfo;\r
-}\r
-\r
-void BluefishFrameManager::ReturnBuffer(VideoFrameInfoPtr pInfo)\r
-{\r
-       Lock lock(*this);\r
-       if(pInfo != 0)\r
-               frameBuffers_.push_back(pInfo);\r
-}\r
-\r
-}      //namespace bluefish\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/consumers/bluefish/BluefishFrameManager.h b/server/consumers/bluefish/BluefishFrameManager.h
deleted file mode 100644 (file)
index 3f9daa8..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_BLUEFISHVIDEOFRAMEFACTORY_H__\r
-#define _CASPAR_BLUEFISHVIDEOFRAMEFACTORY_H__\r
-\r
-#pragma once\r
-\r
-#include "..\..\utils\Lockable.h"\r
-#include "..\..\frame\FrameManager.h"\r
-#include "..\..\frame\SystemFrameManager.h"\r
-#include "..\..\frame\Frame.h"\r
-#include <list>\r
-#include <memory>\r
-#include "BluefishException.h"\r
-\r
-class CBlueVelvet4;\r
-\r
-namespace caspar {\r
-namespace bluefish {\r
-\r
-typedef std::tr1::shared_ptr<CBlueVelvet4> BlueVelvetPtr;\r
-\r
-class VideoFrameInfo\r
-{\r
-public:\r
-       VideoFrameInfo() {}\r
-       virtual ~VideoFrameInfo() {}\r
-\r
-       virtual unsigned char* GetPtr() const = 0;\r
-       virtual int GetBufferID() const = 0;\r
-       virtual int GetDataSize() const = 0;\r
-};\r
-typedef std::tr1::shared_ptr<VideoFrameInfo> VideoFrameInfoPtr;\r
-\r
-class CardFrameInfo : public VideoFrameInfo\r
-{\r
-public:\r
-       CardFrameInfo(BlueVelvetPtr pSDK, int dataSize, int bufferID);\r
-       ~CardFrameInfo();\r
-\r
-       unsigned char* GetPtr() const {\r
-               return pData_;\r
-       }\r
-       int GetBufferID() const {\r
-               return bufferID_;\r
-       }\r
-       int GetDataSize() const {\r
-               return dataSize_;\r
-       }\r
-\r
-private:\r
-       BlueVelvetPtr pSDK_;\r
-       unsigned char* pData_;\r
-       int bufferID_;\r
-       int dataSize_;\r
-};\r
-\r
-class SystemFrameInfo : public VideoFrameInfo\r
-{\r
-public:\r
-       SystemFrameInfo(int dataSize, int bufferID);\r
-       ~SystemFrameInfo();\r
-\r
-       unsigned char* GetPtr() const {\r
-               return pData_;\r
-       }\r
-       int GetBufferID() const {\r
-               return bufferID_;\r
-       }\r
-       int GetDataSize() const {\r
-               return dataSize_;\r
-       }\r
-\r
-private:\r
-       unsigned char* pData_;\r
-       int bufferID_;\r
-       int dataSize_;\r
-};\r
-\r
-class BluefishFrameManager : public FrameManager, private utils::LockableObject\r
-{\r
-       friend class BluefishVideoFrame;\r
-       typedef std::list<VideoFrameInfoPtr> FrameInfoList;\r
-\r
-       BluefishFrameManager(const BluefishFrameManager&);\r
-       const BluefishFrameManager& operator=(const BluefishFrameManager&);\r
-\r
-public:\r
-       BluefishFrameManager(BlueVelvetPtr pSDK, FrameFormat fmt, unsigned long optimalLength);\r
-       virtual ~BluefishFrameManager();\r
-\r
-       virtual FramePtr CreateFrame();\r
-       virtual const FrameFormatDescription& GetFrameFormatDescription() const;\r
-\r
-private:\r
-       VideoFrameInfoPtr GetBuffer();\r
-       void ReturnBuffer(VideoFrameInfoPtr);\r
-\r
-       BlueVelvetPtr pSDK_;\r
-       FrameFormat format_;\r
-       FrameInfoList frameBuffers_;\r
-       SystemFrameManagerPtr   pBackupFrameManager_;\r
-};\r
-typedef std::tr1::shared_ptr<BluefishFrameManager> BluefishFrameManagerPtr;\r
-\r
-\r
-class BluefishVideoFrame : public Frame\r
-{\r
-       friend class BluefishFrameManager;\r
-       explicit BluefishVideoFrame(BluefishFrameManager* pFrameManager);\r
-\r
-public:\r
-       virtual ~BluefishVideoFrame();\r
-\r
-       virtual unsigned char* GetDataPtr() const {\r
-               if(pInfo_ != 0) {\r
-                       HasVideo(true);\r
-                       return pInfo_->GetPtr();\r
-               }\r
-               return 0;\r
-       }\r
-       virtual bool HasValidDataPtr() const {\r
-               return (pInfo_ != 0 && pInfo_->GetPtr() != 0);\r
-       }\r
-\r
-       virtual unsigned int GetDataSize() const {\r
-               return (pInfo_ != 0) ? pInfo_->GetDataSize() : 0;\r
-       }\r
-       virtual FrameMetadata GetMetadata() const {\r
-               return (pInfo_ != 0) ? reinterpret_cast<FrameMetadata>(pInfo_->GetBufferID()) : 0;\r
-       }\r
-       const utils::ID& FactoryID() const {\r
-               return factoryID_;\r
-       }\r
-\r
-private:\r
-       VideoFrameInfoPtr pInfo_;\r
-       BluefishFrameManager* pFrameManager_;\r
-       utils::ID factoryID_;\r
-};\r
-\r
-\r
-}      //namespace bluefish\r
-}      //namespace caspar\r
-\r
-#endif //_CASPAR_BLUEFISHVIDEOFRAMEFACTORY_H__
\ No newline at end of file
diff --git a/server/consumers/bluefish/BluefishMemory.h b/server/consumers/bluefish/BluefishMemory.h
deleted file mode 100644 (file)
index 8361b7a..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-#pragma once\r
-\r
-#include <BlueVelvet4.h>\r
-#include "../../frame/Frame.h"\r
-#include "BluefishException.h"\r
-#include "../../utils/Process.h"\r
-\r
-namespace caspar { namespace bluefish {\r
-       \r
-static const size_t MAX_HANC_BUFFER_SIZE = 256*1024;\r
-static const size_t MAX_VBI_BUFFER_SIZE = 36*1920*4;\r
-\r
-struct page_locked_buffer\r
-{\r
-public:\r
-       page_locked_buffer(size_t size) : size_(size), data_(static_cast<unsigned char*>(::VirtualAlloc(NULL, size_, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE)))\r
-       {\r
-               if(!data_)      \r
-                       throw BluefishException("Failed to allocate memory for paged locked buffer.");  \r
-               if(::VirtualLock(data_.get(), size_) == 0)      \r
-                       throw BluefishException("Failed to lock memory for paged locked buffer.");\r
-       }\r
-\r
-       static void reserve_working_size(size_t size)\r
-       {\r
-               SIZE_T workingSetMinSize = 0, workingSetMaxSize = 0;\r
-               if(utils::Process::GetCurrentProcess().GetWorkingSetSize(workingSetMinSize, workingSetMaxSize))\r
-               {\r
-                       LOG << utils::LogLevel::Debug << TEXT("WorkingSet size: min = ") << workingSetMinSize << TEXT(", max = ") << workingSetMaxSize;\r
-                       \r
-                       workingSetMinSize += size;\r
-                       workingSetMaxSize += size;\r
-\r
-                       if(!utils::Process::GetCurrentProcess().SetWorkingSetSize(workingSetMinSize, workingSetMaxSize))                \r
-                               LOG << utils::LogLevel::Critical << TEXT("Failed to set workingset: min = ") << workingSetMinSize << TEXT(", max = ") << workingSetMaxSize;             \r
-               }\r
-       }\r
-\r
-       PBYTE data() const { return data_.get(); }\r
-       size_t size() const { return size_; }\r
-private:\r
-\r
-       struct virtual_free\r
-       {\r
-               void operator()(LPVOID lpAddress)\r
-               {\r
-                       if(lpAddress != nullptr)                \r
-                               try{::VirtualFree(lpAddress, 0, MEM_RELEASE);}catch(...){}              \r
-               }\r
-       };\r
-\r
-       size_t size_;\r
-       std::unique_ptr<BYTE, virtual_free> data_;\r
-};\r
-typedef std::shared_ptr<page_locked_buffer> page_locked_buffer_ptr;\r
-\r
-struct blue_dma_buffer\r
-{\r
-public:\r
-       blue_dma_buffer(int image_size, int id) : id_(id), image_buffer_(image_size), hanc_buffer_(256*1024){}\r
-                       \r
-       int id() const {return id_;}\r
-\r
-       PBYTE image_data() const { return image_buffer_.data(); }\r
-       PBYTE hanc_data() const { return hanc_buffer_.data(); }\r
-\r
-       size_t image_size() const { return image_buffer_.size(); }\r
-       size_t hanc_size() const { return hanc_buffer_.size(); }\r
-\r
-private:       \r
-       int id_;\r
-       page_locked_buffer image_buffer_;\r
-       page_locked_buffer hanc_buffer_;\r
-};\r
-typedef std::shared_ptr<blue_dma_buffer> blue_dma_buffer_ptr;\r
-\r
-}}
\ No newline at end of file
diff --git a/server/consumers/bluefish/BluefishPlaybackStrategy.cpp b/server/consumers/bluefish/BluefishPlaybackStrategy.cpp
deleted file mode 100644 (file)
index 3b83f16..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\StdAfx.h"\r
-\r
-#include "..\..\utils\image\Image.hpp"\r
-#include "..\..\audio\AudioManager.h"\r
-#include "..\..\utils\Process.h"\r
-#include "..\..\Application.h"\r
-#include "BluefishUtil.h"\r
-#include "BluefishMemory.h"\r
-#include <BlueVelvet4.h>\r
-#include <BlueHancUtils.h>\r
-\r
-#include <vector>\r
-#include <functional>\r
-#include <numeric>\r
-\r
-#include "BluefishPlaybackStrategy.h"\r
-#include "BluefishVideoConsumer.h"\r
-\r
-namespace caspar { namespace bluefish {\r
-\r
-using namespace caspar::utils;\r
-\r
-struct BluefishPlaybackStrategy::Implementation\r
-{      \r
-       Implementation(BlueFishVideoConsumer* pConsumer) : pConsumer_(pConsumer), currentReservedFrameIndex_(0), log_(true), pSDK_(pConsumer->pSDK_)\r
-       {\r
-               auto golden = BlueVelvetGolden(pConsumer_->vidFmt_, pConsumer_->memFmt_, pConsumer_->updFmt_); // 5 196 248\r
-               auto num_frames = 3;\r
-\r
-               page_locked_buffer::reserve_working_size((golden + MAX_HANC_BUFFER_SIZE) * num_frames + MAX_HANC_BUFFER_SIZE);\r
-               \r
-               for(int n = 0; n < num_frames; ++n)\r
-                       reservedFrames_.push_back(std::make_shared<blue_dma_buffer>(pConsumer_->pFrameManager_->GetFrameFormatDescription().size, n));\r
-               \r
-               audio_buffer_ = std::make_shared<page_locked_buffer>(MAX_HANC_BUFFER_SIZE);\r
-                                               \r
-               if(GetApplication()->GetSetting(L"embedded-audio") == L"true")\r
-                       render_func_ = std::bind(&BluefishPlaybackStrategy::Implementation::DoRenderEmbAudio, this, std::placeholders::_1, std::placeholders::_2);      \r
-               else\r
-                       render_func_ = std::bind(&BluefishPlaybackStrategy::Implementation::DoRender, this, std::placeholders::_1, std::placeholders::_2);      \r
-       }\r
-       \r
-       FramePtr GetReservedFrame() \r
-       {\r
-               return pConsumer_->pFrameManager_->CreateFrame();\r
-       }\r
-\r
-       FrameManagerPtr GetFrameManager()\r
-       {\r
-               return pConsumer_->pFrameManager_;\r
-       }\r
-\r
-       void DisplayFrame(Frame* pFrame)\r
-       {\r
-               if(!pFrame->HasValidDataPtr() || pFrame->GetDataSize() != pConsumer_->pFrameManager_->GetFrameFormatDescription().size)\r
-               {                       \r
-                       LOG << TEXT("BLUEFISH: Tried to render frame with no data or invalid data size");\r
-                       return;\r
-               }\r
-               \r
-               auto buffer = reservedFrames_[currentReservedFrameIndex_];\r
-               utils::image::Copy(buffer->image_data(), pFrame->GetDataPtr(), buffer->image_size());\r
-               \r
-               currentReservedFrameIndex_ = (currentReservedFrameIndex_+1) % reservedFrames_.size();           \r
-                       \r
-               render_func_(buffer, pFrame->GetAudioData());\r
-       }\r
-       \r
-       void DoRender(const blue_dma_buffer_ptr& buffer, const AudioDataChunkList& frame_audio_data) \r
-       {\r
-               unsigned long fieldCount = 0;\r
-               pSDK_->wait_output_video_synch(UPD_FMT_FRAME, fieldCount);\r
-               \r
-               pSDK_->system_buffer_write_async(buffer->image_data(), buffer->image_size(), 0, buffer->id(), 0);\r
-               if(BLUE_FAIL(pSDK_->render_buffer_update(buffer->id())))\r
-               {\r
-                       if(log_) \r
-                       {\r
-                               LOG << TEXT("BLUEFISH: render_buffer_update failed");\r
-                               log_ = false;\r
-                       }\r
-               }\r
-               else\r
-                       log_ = true;\r
-       }\r
-       \r
-       void DoRenderEmbAudio(const blue_dma_buffer_ptr& buffer, const AudioDataChunkList& frame_audio_data) \r
-       {\r
-               unsigned long fieldCount = 0;\r
-               pSDK_->wait_output_video_synch(UPD_FMT_FRAME, fieldCount);\r
-                               \r
-               static size_t audio_samples = 1920;\r
-               static size_t audio_nchannels = 2;\r
-               \r
-               MixAudio(reinterpret_cast<BLUE_UINT16*>(audio_buffer_->data()), frame_audio_data, audio_samples, audio_nchannels);              \r
-               EncodeHANC(reinterpret_cast<BLUE_UINT32*>(buffer->hanc_data()), audio_buffer_->data(), audio_samples, audio_nchannels);\r
-\r
-               pSDK_->system_buffer_write_async(buffer->image_data(), \r
-                                                                                buffer->image_size(), \r
-                                                                                nullptr, \r
-                                                                                BlueImage_HANC_DMABuffer(buffer->id(), BLUE_DATA_IMAGE));\r
-\r
-               pSDK_->system_buffer_write_async(buffer->hanc_data(),\r
-                                                                                buffer->hanc_size(), \r
-                                                                                nullptr,                 \r
-                                                                                BlueImage_HANC_DMABuffer(buffer->id(), BLUE_DATA_HANC));\r
-\r
-               if(BLUE_FAIL(pSDK_->render_buffer_update(BlueBuffer_Image_HANC(buffer->id()))))\r
-               {\r
-                       if(log_) \r
-                       {\r
-                               LOG << TEXT("BLUEFISH: render_buffer_update failed");\r
-                               log_ = false;\r
-                       }\r
-               }\r
-               else\r
-                       log_ = true;\r
-       }\r
-\r
-       void EncodeHANC(BLUE_UINT32* hanc_data, void* audio_data, size_t audio_samples, size_t audio_nchannels)\r
-       {       \r
-               auto card_type = pSDK_->has_video_cardtype();\r
-               auto vid_fmt = pConsumer_->vidFmt_;\r
-               auto sample_type = (AUDIO_CHANNEL_16BIT | AUDIO_CHANNEL_LITTLEENDIAN);\r
-               \r
-               hanc_stream_info_struct hanc_stream_info;\r
-               memset(&hanc_stream_info, 0, sizeof(hanc_stream_info));\r
-\r
-               hanc_stream_info.AudioDBNArray[0] = -1;\r
-               hanc_stream_info.AudioDBNArray[1] = -1;\r
-               hanc_stream_info.AudioDBNArray[2] = -1;\r
-               hanc_stream_info.AudioDBNArray[3] = -1;\r
-               hanc_stream_info.hanc_data_ptr = hanc_data;\r
-               hanc_stream_info.video_mode = vid_fmt;\r
-               \r
-               auto emb_audio_flag = (blue_emb_audio_enable | blue_emb_audio_group1_enable);\r
-\r
-               if (!is_epoch_card(card_type))\r
-               {\r
-                       encode_hanc_frame(&hanc_stream_info,\r
-                                                         audio_data,\r
-                                                         audio_nchannels,\r
-                                                         audio_samples,\r
-                                                         sample_type,\r
-                                                         emb_audio_flag);\r
-               }\r
-               else\r
-               {\r
-                       encode_hanc_frame_ex(card_type,\r
-                                                                &hanc_stream_info,\r
-                                                                audio_data,\r
-                                                                audio_nchannels,\r
-                                                                audio_samples,\r
-                                                                sample_type,\r
-                                                                emb_audio_flag);\r
-               }                                               \r
-       }\r
-\r
-       void MixAudio(BLUE_UINT16* dest, const AudioDataChunkList& frame_audio_data, size_t audio_samples, size_t audio_nchannels)\r
-       {               \r
-               size_t size = audio_samples*audio_nchannels;\r
-               memset(dest, 0, size*2);\r
-               std::for_each(frame_audio_data.begin(), frame_audio_data.end(), [&](const audio::AudioDataChunkPtr& chunk)\r
-               {\r
-                       BLUE_UINT16* src = reinterpret_cast<BLUE_UINT16*>(chunk->GetDataPtr());\r
-                       for(int n = 0; n < size; ++n)\r
-                               dest[n] = static_cast<BLUE_UINT16>(static_cast<BLUE_UINT32>(dest[n])+static_cast<BLUE_UINT32>(src[n]));\r
-               });\r
-       }\r
-\r
-       std::function<void(const blue_dma_buffer_ptr&, const AudioDataChunkList&)> render_func_;\r
-       BlueVelvetPtr pSDK_;\r
-\r
-       bool log_;\r
-       BlueFishVideoConsumer* pConsumer_;\r
-       std::vector<blue_dma_buffer_ptr> reservedFrames_;\r
-       int currentReservedFrameIndex_;\r
-       \r
-       page_locked_buffer_ptr audio_buffer_;\r
-};\r
-\r
-BluefishPlaybackStrategy::BluefishPlaybackStrategy(BlueFishVideoConsumer* pConsumer) : pImpl_(new Implementation(pConsumer)){}\r
-IVideoConsumer* BluefishPlaybackStrategy::GetConsumer(){return pImpl_->pConsumer_;}\r
-FramePtr BluefishPlaybackStrategy::GetReservedFrame(){return pImpl_->GetReservedFrame();}\r
-FrameManagerPtr BluefishPlaybackStrategy::GetFrameManager(){return pImpl_->GetFrameManager();}\r
-void BluefishPlaybackStrategy::DisplayFrame(Frame* pFrame){return pImpl_->DisplayFrame(pFrame);}\r
-}}
\ No newline at end of file
diff --git a/server/consumers/bluefish/BluefishPlaybackStrategy.h b/server/consumers/bluefish/BluefishPlaybackStrategy.h
deleted file mode 100644 (file)
index b727924..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include "..\..\frame\FramePlaybackStrategy.h"\r
-\r
-namespace caspar { namespace bluefish {\r
-\r
-class BlueFishVideoConsumer;\r
-\r
-class BluefishPlaybackStrategy : public IFramePlaybackStrategy\r
-{\r
-       struct Implementation;\r
-       std::shared_ptr<Implementation> pImpl_;\r
-\r
-public:\r
-       explicit BluefishPlaybackStrategy(BlueFishVideoConsumer* pConsumer);\r
-\r
-       virtual void DisplayFrame(Frame*);\r
-       virtual IVideoConsumer* GetConsumer();\r
-       virtual FrameManagerPtr GetFrameManager();\r
-       virtual FramePtr GetReservedFrame();\r
-};\r
-\r
-}}\r
diff --git a/server/consumers/bluefish/BluefishUtil.h b/server/consumers/bluefish/BluefishUtil.h
deleted file mode 100644 (file)
index 4a0efa9..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-#pragma once\r
-\r
-#include <BlueVelvet4.h>\r
-#include "../../frame/Frame.h"\r
-\r
-namespace caspar { namespace bluefish {\r
-       \r
-inline bool is_epoch_card(int card_type)\r
-{\r
-       return  card_type == CRD_BLUE_EPOCH_2K ||       \r
-                       card_type == CRD_BLUE_EPOCH_HORIZON || \r
-                       card_type == CRD_BLUE_EPOCH_2K_CORE ||  \r
-                       card_type == CRD_BLUE_EPOCH_2K_ULTRA || \r
-                       card_type == CRD_BLUE_EPOCH_CORE || \r
-                       card_type == CRD_BLUE_EPOCH_ULTRA;\r
-}\r
-\r
-inline unsigned long VidFmtFromFrameFormat(FrameFormat fmt) \r
-{\r
-       switch(fmt)\r
-       {\r
-       case FFormatPAL:                return VID_FMT_PAL;\r
-       case FFormatNTSC:               return VID_FMT_NTSC;\r
-       case FFormat576p2500:   return ULONG_MAX;       //not supported\r
-       case FFormat720p5000:   return VID_FMT_720P_5000;\r
-       case FFormat720p5994:   return VID_FMT_720P_5994;\r
-       case FFormat720p6000:   return VID_FMT_720P_6000;\r
-       case FFormat1080p2397:  return VID_FMT_1080P_2397;\r
-       case FFormat1080p2400:  return VID_FMT_1080P_2400;\r
-       case FFormat1080i5000:  return VID_FMT_1080I_5000;\r
-       case FFormat1080i5994:  return VID_FMT_1080I_5994;\r
-       case FFormat1080i6000:  return VID_FMT_1080I_6000;\r
-       case FFormat1080p2500:  return VID_FMT_1080P_2500;\r
-       case FFormat1080p2997:  return VID_FMT_1080P_2997;\r
-       case FFormat1080p3000:  return VID_FMT_1080P_3000;\r
-       default:                                return ULONG_MAX;\r
-       }\r
-}\r
-\r
-inline TCHAR* GetBluefishCardDesc(int cardType)\r
-{\r
-       switch(cardType) \r
-       {\r
-       case CRD_BLUEDEEP_LT:                           return TEXT("Deepblue LT");// D64 Lite\r
-       case CRD_BLUEDEEP_SD:                           return TEXT("Iridium SD");// Iridium SD\r
-       case CRD_BLUEDEEP_AV:                           return TEXT("Iridium AV");// Iridium AV\r
-       case CRD_BLUEDEEP_IO:                           return TEXT("Deepblue IO");// D64 Full\r
-       case CRD_BLUEWILD_AV:                           return TEXT("Wildblue AV");// D64 AV\r
-       case CRD_IRIDIUM_HD:                            return TEXT("Iridium HD");// * Iridium HD\r
-       case CRD_BLUEWILD_RT:                           return TEXT("Wildblue RT");// D64 RT\r
-       case CRD_BLUEWILD_HD:                           return TEXT("Wildblue HD");// * BadAss G2\r
-       case CRD_REDDEVIL:                                      return TEXT("Iridium Full");// Iridium Full\r
-       case CRD_BLUEDEEP_HD:   \r
-       case CRD_BLUEDEEP_HDS:                          return TEXT("Reserved for \"BasAss G2");// * BadAss G2 variant, proposed, reserved\r
-       case CRD_BLUE_ENVY:                                     return TEXT("Blue envy"); // Mini Din \r
-       case CRD_BLUE_PRIDE:                            return TEXT("Blue pride");//Mini Din Output \r
-       case CRD_BLUE_GREED:                            return TEXT("Blue greed");\r
-       case CRD_BLUE_INGEST:                           return TEXT("Blue ingest");\r
-       case CRD_BLUE_SD_DUALLINK:                      return TEXT("Blue SD duallink");\r
-       case CRD_BLUE_CATALYST:                         return TEXT("Blue catalyst");\r
-       case CRD_BLUE_SD_DUALLINK_PRO:          return TEXT("Blue SD duallink pro");\r
-       case CRD_BLUE_SD_INGEST_PRO:            return TEXT("Blue SD ingest pro");\r
-       case CRD_BLUE_SD_DEEPBLUE_LITE_PRO:     return TEXT("Blue SD deepblue lite pro");\r
-       case CRD_BLUE_SD_SINGLELINK_PRO:        return TEXT("Blue SD singlelink pro");\r
-       case CRD_BLUE_SD_IRIDIUM_AV_PRO:        return TEXT("Blue SD iridium AV pro");\r
-       case CRD_BLUE_SD_FIDELITY:                      return TEXT("Blue SD fidelity");\r
-       case CRD_BLUE_SD_FOCUS:                         return TEXT("Blue SD focus");\r
-       case CRD_BLUE_SD_PRIME:                         return TEXT("Blue SD prime");\r
-       case CRD_BLUE_EPOCH_2K_CORE:            return TEXT("Blue epoch 2k core");\r
-       case CRD_BLUE_EPOCH_2K_ULTRA:           return TEXT("Blue epoch 2k ultra");\r
-       case CRD_BLUE_EPOCH_HORIZON:            return TEXT("Blue epoch horizon");\r
-       case CRD_BLUE_EPOCH_CORE:                       return TEXT("Blue epoch core");\r
-       case CRD_BLUE_EPOCH_ULTRA:                      return TEXT("Blue epoch ultra");\r
-       case CRD_BLUE_CREATE_HD:                        return TEXT("Blue create HD");\r
-       case CRD_BLUE_CREATE_2K:                        return TEXT("Blue create 2k");\r
-       case CRD_BLUE_CREATE_2K_ULTRA:          return TEXT("Blue create 2k ultra");\r
-       default:                                                        return TEXT("Unknown");\r
-       }\r
-}\r
-\r
-inline unsigned int GetAudioSamplesPerFrame(unsigned int nVideoSignal,unsigned int frame_no)\r
-{\r
-       unsigned int samples_to_read = 1920;\r
-       UINT32 NTSC_frame_seq[]={1602,1601,1602,1601,1602};\r
-       UINT32 p59_frame_seq[]={801,800,801,801,801};\r
-       UINT32 p23_frame_seq[]={2002,2002,2002,2002,2002};\r
-\r
-       switch (nVideoSignal)\r
-       {\r
-       case VID_FMT_1080PSF_2397:\r
-       case VID_FMT_1080P_2397:\r
-       case VID_FMT_2048_1080PSF_2397:\r
-       case VID_FMT_2048_1080P_2397:\r
-               samples_to_read = p23_frame_seq[frame_no%5];\r
-               break;\r
-       case VID_FMT_NTSC:\r
-       case VID_FMT_1080I_5994:\r
-       case VID_FMT_1080P_2997:\r
-       case VID_FMT_1080PSF_2997:\r
-               samples_to_read = NTSC_frame_seq[frame_no%5];\r
-               break;\r
-       case VID_FMT_720P_5994:\r
-               samples_to_read = p59_frame_seq[frame_no%5];\r
-               break;\r
-       case VID_FMT_1080PSF_2400:\r
-       case VID_FMT_1080P_2400:\r
-       case VID_FMT_2048_1080PSF_2400:\r
-       case VID_FMT_2048_1080P_2400:\r
-               samples_to_read = 2000;\r
-               break;\r
-       case VID_FMT_1080I_6000:\r
-       case VID_FMT_1080P_3000:\r
-       case VID_FMT_1080PSF_3000:\r
-               samples_to_read = 1600;\r
-               break;\r
-       case VID_FMT_720P_6000:\r
-               samples_to_read = 800;\r
-               break;\r
-       case VID_FMT_720P_5000:\r
-               samples_to_read = 960;\r
-               break;\r
-       case VID_FMT_PAL:\r
-       case VID_FMT_1080I_5000:\r
-       case VID_FMT_1080P_2500:\r
-       case VID_FMT_1080PSF_2500:\r
-       default:\r
-               samples_to_read = 1920;\r
-               break;\r
-       }\r
-       return samples_to_read;\r
-}\r
-\r
-inline int SetCardProperty(CBlueVelvet4 * pSdk,ULONG prop, ULONG value)\r
-{\r
-       VARIANT variantValue;\r
-       variantValue.vt  = VT_UI4;\r
-       variantValue.ulVal = value;\r
-       return (pSdk->SetCardProperty(prop,variantValue));\r
-}\r
-\r
-inline int SetCardProperty(const std::shared_ptr<CBlueVelvet4> pSdk, ULONG prop, ULONG value)\r
-{\r
-       return SetCardProperty(pSdk.get(), prop, value);\r
-}\r
-\r
-inline int GetCardProperty(CBlueVelvet4 * pSdk,ULONG prop,ULONG & value)\r
-{\r
-       VARIANT variantValue;\r
-       int errorCode;\r
-       variantValue.vt  = VT_UI4;\r
-       errorCode = pSdk->QueryCardProperty(prop,variantValue);\r
-       value = variantValue.ulVal;\r
-       return (errorCode);\r
-}\r
-\r
-}}
\ No newline at end of file
diff --git a/server/consumers/decklink/DeckLinkAPI.idl b/server/consumers/decklink/DeckLinkAPI.idl
deleted file mode 100644 (file)
index 0c055f7..0000000
+++ /dev/null
@@ -1,847 +0,0 @@
-/* -LICENSE-START-\r
-** Copyright (c) 2009 Blackmagic Design\r
-**\r
-** Permission is hereby granted, free of charge, to any person or organization\r
-** obtaining a copy of the software and accompanying documentation covered by\r
-** this license (the "Software") to use, reproduce, display, distribute,\r
-** execute, and transmit the Software, and to prepare derivative works of the\r
-** Software, and to permit third-parties to whom the Software is furnished to\r
-** do so, all subject to the following:\r
-** \r
-** The copyright notices in the Software and this entire statement, including\r
-** the above license grant, this restriction and the following disclaimer,\r
-** must be included in all copies of the Software, in whole or in part, and\r
-** all derivative works of the Software, unless such copies or derivative\r
-** works are solely in the form of machine-executable object code generated by\r
-** a source language processor.\r
-** \r
-** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
-** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
-** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\r
-** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\r
-** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\r
-** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r
-** DEALINGS IN THE SOFTWARE.\r
-** -LICENSE-END-\r
-*/\r
-\r
-/* DeckLinkAPI.idl */\r
-\r
-import "unknwn.idl";\r
-\r
-[uuid(D864517A-EDD5-466D-867D-C819F1C052BB),\r
-version(1.0), helpstring("DeckLink API Library")]\r
-library DeckLinkAPI\r
-{\r
-\r
-/* Type Declarations */\r
-\r
-typedef LONGLONG BMDTimeValue;\r
-typedef LONGLONG BMDTimeScale;\r
-typedef unsigned long BMDTimecodeBCD;\r
-\r
-/* End Type Declarations */\r
-\r
-/* Enumeration Mapping */\r
-\r
-cpp_quote("typedef unsigned long BMDFrameFlags;")\r
-cpp_quote("typedef unsigned long BMDVideoInputFlags;")\r
-cpp_quote("typedef unsigned long BMDVideoInputFormatChangedEvents;")\r
-cpp_quote("typedef unsigned long BMDDetectedVideoInputFormatFlags;")\r
-cpp_quote("typedef unsigned long BMDTimecodeFlags;")\r
-cpp_quote("typedef unsigned long BMDAnalogVideoFlags;")\r
-cpp_quote("#if 0")\r
-typedef enum _BMDFrameFlags BMDFrameFlags;\r
-typedef enum _BMDVideoInputFlags BMDVideoInputFlags;\r
-typedef enum _BMDVideoInputFormatChangedEvents BMDVideoInputFormatChangedEvents;\r
-typedef enum _BMDDetectedVideoInputFormatFlags BMDDetectedVideoInputFormatFlags;\r
-typedef enum _BMDTimecodeFlags BMDTimecodeFlags;\r
-typedef enum _BMDAnalogVideoFlags BMDAnalogVideoFlags;\r
-cpp_quote("#endif")\r
-\r
-/* End Enumeration Mapping */\r
-\r
-/* Enum BMDDisplayMode - Video display modes */\r
-\r
-typedef [v1_enum] enum _BMDDisplayMode {\r
-    bmdModeNTSC                                        = /* 'ntsc' */ 0x6E747363,\r
-    bmdModeNTSC2398                                    = /* 'nt23' */ 0x6E743233, // 3:2 pulldown\r
-    bmdModePAL                                         = /* 'pal ' */ 0x70616C20,\r
-\r
-    /* HD 1080 Modes */\r
-\r
-    bmdModeHD1080p2398                                 = /* '23ps' */ 0x32337073,\r
-    bmdModeHD1080p24                                   = /* '24ps' */ 0x32347073,\r
-    bmdModeHD1080p25                                   = /* 'Hp25' */ 0x48703235,\r
-    bmdModeHD1080p2997                                 = /* 'Hp29' */ 0x48703239,\r
-    bmdModeHD1080p30                                   = /* 'Hp30' */ 0x48703330,\r
-    bmdModeHD1080i50                                   = /* 'Hi50' */ 0x48693530,\r
-    bmdModeHD1080i5994                                 = /* 'Hi59' */ 0x48693539,\r
-    bmdModeHD1080i6000                                 = /* 'Hi60' */ 0x48693630, // N.B. This _really_ is 60.00 Hz.\r
-    bmdModeHD1080p50                                   = /* 'Hp50' */ 0x48703530,\r
-    bmdModeHD1080p5994                                 = /* 'Hp59' */ 0x48703539,\r
-    bmdModeHD1080p6000                                 = /* 'Hp60' */ 0x48703630, // N.B. This _really_ is 60.00 Hz.\r
-\r
-    /* HD 720 Modes */\r
-\r
-    bmdModeHD720p50                                    = /* 'hp50' */ 0x68703530,\r
-    bmdModeHD720p5994                                  = /* 'hp59' */ 0x68703539,\r
-    bmdModeHD720p60                                    = /* 'hp60' */ 0x68703630,\r
-\r
-    /* 2k Modes */\r
-\r
-    bmdMode2k2398                                      = /* '2k23' */ 0x326B3233,\r
-    bmdMode2k24                                        = /* '2k24' */ 0x326B3234,\r
-    bmdMode2k25                                        = /* '2k25' */ 0x326B3235\r
-} BMDDisplayMode;\r
-\r
-/* End Enum BMDDisplayMode */\r
-\r
-/* Enum BMDFieldDominance - Video field dominance */\r
-\r
-typedef [v1_enum] enum _BMDFieldDominance {\r
-    bmdUnknownFieldDominance                           = 0,\r
-    bmdLowerFieldFirst                                 = /* 'lowr' */ 0x6C6F7772,\r
-    bmdUpperFieldFirst                                 = /* 'uppr' */ 0x75707072,\r
-    bmdProgressiveFrame                                = /* 'prog' */ 0x70726F67,\r
-    bmdProgressiveSegmentedFrame                       = /* 'psf ' */ 0x70736620\r
-} BMDFieldDominance;\r
-\r
-/* End Enum BMDFieldDominance */\r
-\r
-/* Enum BMDPixelFormat - Video pixel formats supported for output/input */\r
-\r
-typedef [v1_enum] enum _BMDPixelFormat {\r
-    bmdFormat8BitYUV                                   = /* '2vuy' */ 0x32767579,\r
-    bmdFormat10BitYUV                                  = /* 'v210' */ 0x76323130,\r
-    bmdFormat8BitARGB                                  = 0x20,\r
-    bmdFormat8BitBGRA                                  = /* 'BGRA' */ 0x42475241,\r
-    bmdFormat10BitRGB                                  = /* 'r210' */ 0x72323130\r
-} BMDPixelFormat;\r
-\r
-/* End Enum BMDPixelFormat */\r
-\r
-/* Enum BMDVideoOutputFlags - Flags to control the output of ancillary data along with video. */\r
-\r
-typedef [v1_enum] enum _BMDVideoOutputFlags {\r
-    bmdVideoOutputFlagDefault                          = 0,\r
-    bmdVideoOutputRP188                                = 1 << 0,\r
-    bmdVideoOutputVANC                                 = 1 << 1\r
-} BMDVideoOutputFlags;\r
-\r
-/* End Enum BMDVideoOutputFlags */\r
-\r
-/* Enum BMDFrameFlags - Frame flags */\r
-\r
-[v1_enum] enum _BMDFrameFlags {\r
-    bmdFrameFlagDefault                                = 0,\r
-    bmdFrameFlagFlipVertical                           = 1 << 0,\r
-\r
-    /* Flags that are valid only for frames returned through IDeckLinkInput */\r
-\r
-    bmdFrameHasNoInputSource                           = 1 << 31\r
-};\r
-\r
-/* End Enum BMDFrameFlags */\r
-\r
-/* Enum BMDVideoInputFlags - Flags applicable to video input */\r
-\r
-[v1_enum] enum _BMDVideoInputFlags {\r
-    bmdVideoInputFlagDefault                           = 0,\r
-    bmdVideoInputEnableFormatDetection                 = 1 << 0\r
-};\r
-\r
-/* End Enum BMDVideoInputFlags */\r
-\r
-/* Enum BMDVideoInputFormatChangedEvents - Bitmask passed to the VideoInputFormatChanged notification to identify the properties of the input signal that have changed */\r
-\r
-[v1_enum] enum _BMDVideoInputFormatChangedEvents {\r
-    bmdVideoInputDisplayModeChanged                    = 1 << 0,\r
-    bmdVideoInputFieldDominanceChanged                 = 1 << 1,\r
-    bmdVideoInputColorspaceChanged                     = 1 << 2\r
-};\r
-\r
-/* End Enum BMDVideoInputFormatChangedEvents */\r
-\r
-/* Enum BMDDetectedVideoInputFormatFlags - Flags passed to the VideoInputFormatChanged notification to describe the detected video input signal */\r
-\r
-[v1_enum] enum _BMDDetectedVideoInputFormatFlags {\r
-    bmdDetectedVideoInputYCbCr422                      = 1 << 0,\r
-    bmdDetectedVideoInputRGB444                        = 1 << 1\r
-};\r
-\r
-/* End Enum BMDDetectedVideoInputFormatFlags */\r
-\r
-/* Enum BMDOutputFrameCompletionResult - Frame Completion Callback */\r
-\r
-typedef [v1_enum] enum _BMDOutputFrameCompletionResult {\r
-    bmdOutputFrameCompleted,                          \r
-    bmdOutputFrameDisplayedLate,                      \r
-    bmdOutputFrameDropped,                            \r
-    bmdOutputFrameFlushed                             \r
-} BMDOutputFrameCompletionResult;\r
-\r
-/* End Enum BMDOutputFrameCompletionResult */\r
-\r
-/* Enum BMDAudioSampleRate - Audio sample rates supported for output/input */\r
-\r
-typedef [v1_enum] enum _BMDAudioSampleRate {\r
-    bmdAudioSampleRate48kHz                            = 48000\r
-} BMDAudioSampleRate;\r
-\r
-/* End Enum BMDAudioSampleRate */\r
-\r
-/* Enum BMDAudioSampleType - Audio sample sizes supported for output/input */\r
-\r
-typedef [v1_enum] enum _BMDAudioSampleType {\r
-    bmdAudioSampleType16bitInteger                     = 16,\r
-    bmdAudioSampleType32bitInteger                     = 32\r
-} BMDAudioSampleType;\r
-\r
-/* End Enum BMDAudioSampleType */\r
-\r
-/* Enum BMDAudioOutputStreamType - Audio output stream type */\r
-\r
-typedef [v1_enum] enum _BMDAudioOutputStreamType {\r
-    bmdAudioOutputStreamContinuous,                   \r
-    bmdAudioOutputStreamContinuousDontResample,       \r
-    bmdAudioOutputStreamTimestamped                   \r
-} BMDAudioOutputStreamType;\r
-\r
-/* End Enum BMDAudioOutputStreamType */\r
-\r
-/* Enum BMDDisplayModeSupport - Output mode supported flags */\r
-\r
-typedef [v1_enum] enum _BMDDisplayModeSupport {\r
-    bmdDisplayModeNotSupported                         = 0,\r
-    bmdDisplayModeSupported,                          \r
-    bmdDisplayModeSupportedWithConversion             \r
-} BMDDisplayModeSupport;\r
-\r
-/* End Enum BMDDisplayModeSupport */\r
-\r
-/* Enum BMDTimecodeFormat - Timecode formats for frame metadata */\r
-\r
-typedef [v1_enum] enum _BMDTimecodeFormat {\r
-    bmdTimecodeRP188                                   = /* 'rp18' */ 0x72703138,\r
-    bmdTimecodeVITC                                    = /* 'vitc' */ 0x76697463,\r
-    bmdTimecodeSerial                                  = /* 'seri' */ 0x73657269\r
-} BMDTimecodeFormat;\r
-\r
-/* End Enum BMDTimecodeFormat */\r
-\r
-/* Enum BMDTimecodeFlags - Timecode flags */\r
-\r
-[v1_enum] enum _BMDTimecodeFlags {\r
-    bmdTimecodeFlagDefault                             = 0,\r
-    bmdTimecodeIsDropFrame                             = 1 << 0\r
-};\r
-\r
-/* End Enum BMDTimecodeFlags */\r
-\r
-/* Enum BMDVideoConnection - Video connection types */\r
-\r
-typedef [v1_enum] enum _BMDVideoConnection {\r
-    bmdVideoConnectionSDI                              = /* 'sdi ' */ 0x73646920,\r
-    bmdVideoConnectionHDMI                             = /* 'hdmi' */ 0x68646D69,\r
-    bmdVideoConnectionOpticalSDI                       = /* 'opti' */ 0x6F707469,\r
-    bmdVideoConnectionComponent                        = /* 'cpnt' */ 0x63706E74,\r
-    bmdVideoConnectionComposite                        = /* 'cmst' */ 0x636D7374,\r
-    bmdVideoConnectionSVideo                           = /* 'svid' */ 0x73766964\r
-} BMDVideoConnection;\r
-\r
-/* End Enum BMDVideoConnection */\r
-\r
-/* Enum BMDAnalogVideoFlags - Analog video display flags */\r
-\r
-[v1_enum] enum _BMDAnalogVideoFlags {\r
-    bmdAnalogVideoFlagCompositeSetup75                 = 1 << 0,\r
-    bmdAnalogVideoFlagComponentBetacamLevels           = 1 << 1\r
-};\r
-\r
-/* End Enum BMDAnalogVideoFlags */\r
-\r
-/* Enum BMDAudioConnection - Audio connection types */\r
-\r
-typedef [v1_enum] enum _BMDAudioConnection {\r
-    bmdAudioConnectionEmbedded                         = /* 'embd' */ 0x656D6264,\r
-    bmdAudioConnectionAESEBU                           = /* 'aes ' */ 0x61657320,\r
-    bmdAudioConnectionAnalog                           = /* 'anlg' */ 0x616E6C67\r
-} BMDAudioConnection;\r
-\r
-/* End Enum BMDAudioConnection */\r
-\r
-/* Enum BMDVideoOutputConversionMode - Video/audio conversion mode */\r
-\r
-typedef [v1_enum] enum _BMDVideoOutputConversionMode {\r
-    bmdNoVideoOutputConversion                         = /* 'none' */ 0x6E6F6E65,\r
-    bmdVideoOutputLetterboxDownonversion               = /* 'ltbx' */ 0x6C746278,\r
-    bmdVideoOutputAnamorphicDownonversion              = /* 'amph' */ 0x616D7068,\r
-    bmdVideoOutputHD720toHD1080Conversion              = /* '720c' */ 0x37323063,\r
-    bmdVideoOutputHardwareLetterboxDownconversion      = /* 'HWlb' */ 0x48576C62,\r
-    bmdVideoOutputHardwareAnamorphicDownconversion     = /* 'HWam' */ 0x4857616D,\r
-    bmdVideoOutputHardwareCenterCutDownconversion      = /* 'HWcc' */ 0x48576363\r
-} BMDVideoOutputConversionMode;\r
-\r
-/* End Enum BMDVideoOutputConversionMode */\r
-\r
-/* Enum BMDVideoInputConversionMode - Video input conversion mode */\r
-\r
-typedef [v1_enum] enum _BMDVideoInputConversionMode {\r
-    bmdNoVideoInputConversion                          = /* 'none' */ 0x6E6F6E65,\r
-    bmdVideoInputLetterboxDownconversionFromHD1080     = /* '10lb' */ 0x31306C62,\r
-    bmdVideoInputAnamorphicDownconversionFromHD1080    = /* '10am' */ 0x3130616D,\r
-    bmdVideoInputLetterboxDownconversionFromHD720      = /* '72lb' */ 0x37326C62,\r
-    bmdVideoInputAnamorphicDownconversionFromHD720     = /* '72am' */ 0x3732616D,\r
-    bmdVideoInputLetterboxUpconversion                 = /* 'lbup' */ 0x6C627570,\r
-    bmdVideoInputAnamorphicUpconversion                = /* 'amup' */ 0x616D7570\r
-} BMDVideoInputConversionMode;\r
-\r
-/* End Enum BMDVideoInputConversionMode */\r
-\r
-/* Enum BMDDeckLinkAttributeID - DeckLink Atribute ID */\r
-\r
-typedef [v1_enum] enum _BMDDeckLinkAttributeID {\r
-\r
-    /* Flags */\r
-\r
-    BMDDeckLinkSupportsInternalKeying                  = /* 'keyi' */ 0x6B657969,\r
-    BMDDeckLinkSupportsExternalKeying                  = /* 'keye' */ 0x6B657965,\r
-    BMDDeckLinkSupportsHDKeying                        = /* 'keyh' */ 0x6B657968,\r
-    BMDDeckLinkSupportsInputFormatDetection            = /* 'infd' */ 0x696E6664,\r
-    BMDDeckLinkHasSerialPort                           = /* 'hspt' */ 0x68737074,\r
-\r
-    /* Integers */\r
-\r
-    BMDDeckLinkMaximumAudioChannels                    = /* 'mach' */ 0x6D616368,\r
-\r
-    /* Strings */\r
-\r
-    BMDDeckLinkSerialPortDeviceName                    = /* 'slpn' */ 0x736C706E\r
-} BMDDeckLinkAttributeID;\r
-\r
-/* End Enum BMDDeckLinkAttributeID */\r
-\r
-/* Enum BMDDeckLinkAPIInformationID - DeckLinkAPI information ID */\r
-\r
-typedef [v1_enum] enum _BMDDeckLinkAPIInformationID {\r
-    BMDDeckLinkAPIVersion                              = /* 'vers' */ 0x76657273\r
-} BMDDeckLinkAPIInformationID;\r
-\r
-/* End Enum BMDDeckLinkAPIInformationID */\r
-\r
-/* Forward Declarations */\r
-\r
-interface IDeckLinkVideoOutputCallback;\r
-interface IDeckLinkInputCallback;\r
-interface IDeckLinkMemoryAllocator;\r
-interface IDeckLinkAudioOutputCallback;\r
-interface IDeckLinkIterator;\r
-interface IDeckLinkAPIInformation;\r
-interface IDeckLinkDisplayModeIterator;\r
-interface IDeckLinkDisplayMode;\r
-interface IDeckLink;\r
-interface IDeckLinkOutput;\r
-interface IDeckLinkInput;\r
-interface IDeckLinkTimecode;\r
-interface IDeckLinkVideoFrame;\r
-interface IDeckLinkMutableVideoFrame;\r
-interface IDeckLinkVideoInputFrame;\r
-interface IDeckLinkVideoFrameAncillary;\r
-interface IDeckLinkAudioInputPacket;\r
-interface IDeckLinkScreenPreviewCallback;\r
-interface IDeckLinkGLScreenPreviewHelper;\r
-interface IDeckLinkConfiguration;\r
-interface IDeckLinkAttributes;\r
-interface IDeckLinkKeyer;\r
-\r
-/* End Forward Declarations */\r
-\r
-/* Interface IDeckLinkVideoOutputCallback - Frame completion callback. */\r
-\r
-[\r
-    object,\r
-    uuid(E763A626-4A3C-49D1-BF13-E7AD3692AE52),\r
-    helpstring("Frame completion callback.")\r
-] interface IDeckLinkVideoOutputCallback : IUnknown\r
-{\r
-    HRESULT ScheduledFrameCompleted([in] IDeckLinkVideoFrame *completedFrame, [in] BMDOutputFrameCompletionResult result);\r
-    HRESULT ScheduledPlaybackHasStopped(void);\r
-};\r
-\r
-/* End Interface IDeckLinkVideoOutputCallback */\r
-\r
-/* Interface IDeckLinkInputCallback - Frame arrival callback. */\r
-\r
-[\r
-    object,\r
-    uuid(31D28EE7-88B6-4CB1-897A-CDBF79A26414),\r
-    helpstring("Frame arrival callback.")\r
-] interface IDeckLinkInputCallback : IUnknown\r
-{\r
-    HRESULT VideoInputFormatChanged([in] BMDVideoInputFormatChangedEvents notificationEvents, [in] IDeckLinkDisplayMode *newDisplayMode, [in] BMDDetectedVideoInputFormatFlags detectedSignalFlags);\r
-    HRESULT VideoInputFrameArrived([in] IDeckLinkVideoInputFrame *videoFrame, [in] IDeckLinkAudioInputPacket *audioPacket);\r
-};\r
-\r
-/* End Interface IDeckLinkInputCallback */\r
-\r
-/* Interface IDeckLinkMemoryAllocator - Memory allocator for video frames. */\r
-\r
-[\r
-    object,\r
-    uuid(B36EB6E7-9D29-4AA8-92EF-843B87A289E8),\r
-    local, \r
-    helpstring("Memory allocator for video frames.")\r
-] interface IDeckLinkMemoryAllocator : IUnknown\r
-{\r
-    HRESULT AllocateBuffer(unsigned long bufferSize, [out] void **allocatedBuffer);\r
-    HRESULT ReleaseBuffer([in] void *buffer);\r
-\r
-    HRESULT Commit(void);\r
-    HRESULT Decommit(void);\r
-};\r
-\r
-/* End Interface IDeckLinkMemoryAllocator */\r
-\r
-/* Interface IDeckLinkAudioOutputCallback - Optional callback to allow audio samples to be pulled as required. */\r
-\r
-[\r
-    object,\r
-    uuid(403C681B-7F46-4A12-B993-2BB127084EE6),\r
-    local, \r
-    helpstring("Optional callback to allow audio samples to be pulled as required.")\r
-] interface IDeckLinkAudioOutputCallback : IUnknown\r
-{\r
-    HRESULT RenderAudioSamples(BOOL preroll);\r
-};\r
-\r
-/* End Interface IDeckLinkAudioOutputCallback */\r
-\r
-/* Interface IDeckLinkIterator - enumerates installed DeckLink hardware */\r
-\r
-[\r
-    object,\r
-    uuid(74E936FC-CC28-4A67-81A0-1E94E52D4E69),\r
-    helpstring("enumerates installed DeckLink hardware")\r
-] interface IDeckLinkIterator : IUnknown\r
-{\r
-    HRESULT Next([out] IDeckLink **deckLinkInstance);\r
-};\r
-\r
-/* End Interface IDeckLinkIterator */\r
-\r
-/* Interface IDeckLinkAPIInformation - DeckLinkAPI attribute interface */\r
-\r
-[\r
-    object,\r
-    uuid(7BEA3C68-730D-4322-AF34-8A7152B532A4),\r
-    helpstring("DeckLinkAPI attribute interface")\r
-] interface IDeckLinkAPIInformation : IUnknown\r
-{\r
-    HRESULT GetFlag([in] BMDDeckLinkAPIInformationID cfgID, [out] BOOL *value);\r
-    HRESULT GetInt([in] BMDDeckLinkAPIInformationID cfgID, [out] LONGLONG *value);\r
-    HRESULT GetFloat([in] BMDDeckLinkAPIInformationID cfgID, [out] double *value);\r
-    HRESULT GetString([in] BMDDeckLinkAPIInformationID cfgID, [out] BSTR *value);\r
-};\r
-\r
-/* End Interface IDeckLinkAPIInformation */\r
-\r
-/* Interface IDeckLinkDisplayModeIterator - enumerates over supported input/output display modes. */\r
-\r
-[\r
-    object,\r
-    uuid(455D741F-1779-4800-86F5-0B5D13D79751),\r
-    helpstring("enumerates over supported input/output display modes.")\r
-] interface IDeckLinkDisplayModeIterator : IUnknown\r
-{\r
-    HRESULT Next([out] IDeckLinkDisplayMode **deckLinkDisplayMode);\r
-};\r
-\r
-/* End Interface IDeckLinkDisplayModeIterator */\r
-\r
-/* Interface IDeckLinkDisplayMode - represents a display mode */\r
-\r
-[\r
-    object,\r
-    uuid(87451E84-2B7E-439E-A629-4393EA4A8550),\r
-    helpstring("represents a display mode")\r
-] interface IDeckLinkDisplayMode : IUnknown\r
-{\r
-    HRESULT GetName([out] BSTR *name);\r
-    BMDDisplayMode GetDisplayMode(void);\r
-    long GetWidth(void);\r
-    long GetHeight(void);\r
-    HRESULT GetFrameRate([out] BMDTimeValue *frameDuration, [out] BMDTimeScale *timeScale);\r
-    BMDFieldDominance GetFieldDominance(void);\r
-};\r
-\r
-/* End Interface IDeckLinkDisplayMode */\r
-\r
-/* Interface IDeckLink - represents a DeckLink device */\r
-\r
-[\r
-    object,\r
-    uuid(62BFF75D-6569-4E55-8D4D-66AA03829ABC),\r
-    helpstring("represents a DeckLink device")\r
-] interface IDeckLink : IUnknown\r
-{\r
-    HRESULT GetModelName([out] BSTR *modelName);\r
-};\r
-\r
-/* End Interface IDeckLink */\r
-\r
-/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */\r
-\r
-[\r
-    object,\r
-    uuid(29228142-EB8C-4141-A621-F74026450955),\r
-    local, \r
-    helpstring("Created by QueryInterface from IDeckLink.")\r
-] interface IDeckLinkOutput : IUnknown\r
-{\r
-    HRESULT DoesSupportVideoMode(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport *result);\r
-    HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator **iterator);\r
-\r
-    HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback *previewCallback);\r
-\r
-    /* Video Output */\r
-\r
-    HRESULT EnableVideoOutput(BMDDisplayMode displayMode, BMDVideoOutputFlags flags);\r
-    HRESULT DisableVideoOutput(void);\r
-\r
-    HRESULT SetVideoOutputFrameMemoryAllocator([in] IDeckLinkMemoryAllocator *theAllocator);\r
-    HRESULT CreateVideoFrame(long width, long height, long rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, [out] IDeckLinkMutableVideoFrame **outFrame);\r
-    HRESULT CreateAncillaryData(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] IDeckLinkVideoFrameAncillary **outBuffer);\r
-\r
-    HRESULT DisplayVideoFrameSync([in] IDeckLinkVideoFrame *theFrame);\r
-    HRESULT ScheduleVideoFrame([in] IDeckLinkVideoFrame *theFrame, BMDTimeValue displayTime, BMDTimeValue displayDuration, BMDTimeScale timeScale);\r
-    HRESULT SetScheduledFrameCompletionCallback([in] IDeckLinkVideoOutputCallback *theCallback);\r
-    HRESULT GetBufferedVideoFrameCount([out] unsigned long *bufferedFrameCount);\r
-\r
-    /* Audio Output */\r
-\r
-    HRESULT EnableAudioOutput(BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, unsigned long channelCount, BMDAudioOutputStreamType streamType);\r
-    HRESULT DisableAudioOutput(void);\r
-\r
-    HRESULT WriteAudioSamplesSync([in] void *buffer, unsigned long sampleFrameCount, [out] unsigned long *sampleFramesWritten);\r
-\r
-    HRESULT BeginAudioPreroll(void);\r
-    HRESULT EndAudioPreroll(void);\r
-    HRESULT ScheduleAudioSamples([in] void *buffer, unsigned long sampleFrameCount, BMDTimeValue streamTime, BMDTimeScale timeScale, [out] unsigned long *sampleFramesWritten);\r
-\r
-    HRESULT GetBufferedAudioSampleFrameCount([out] unsigned long *bufferedSampleFrameCount);\r
-    HRESULT FlushBufferedAudioSamples(void);\r
-\r
-    HRESULT SetAudioCallback([in] IDeckLinkAudioOutputCallback *theCallback);\r
-\r
-    /* Output Control */\r
-\r
-    HRESULT StartScheduledPlayback(BMDTimeValue playbackStartTime, BMDTimeScale timeScale, double playbackSpeed);\r
-    HRESULT StopScheduledPlayback(BMDTimeValue stopPlaybackAtTime, [out] BMDTimeValue *actualStopTime, BMDTimeScale timeScale);\r
-    HRESULT IsScheduledPlaybackRunning([out] BOOL *active);\r
-    HRESULT GetScheduledStreamTime(BMDTimeScale desiredTimeScale, [out] BMDTimeValue *streamTime, [out] double *playbackSpeed);\r
-\r
-    /* Hardware Timing */\r
-\r
-    HRESULT GetHardwareReferenceClock(BMDTimeScale desiredTimeScale, [out] BMDTimeValue *hardwareTime, [out] BMDTimeValue *timeInFrame, [out] BMDTimeValue *ticksPerFrame);\r
-};\r
-\r
-/* End Interface IDeckLinkOutput */\r
-\r
-/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */\r
-\r
-[\r
-    object,\r
-    uuid(300C135A-9F43-48E2-9906-6D7911D93CF1),\r
-    helpstring("Created by QueryInterface from IDeckLink.")\r
-] interface IDeckLinkInput : IUnknown\r
-{\r
-    HRESULT DoesSupportVideoMode(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport *result);\r
-    HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator **iterator);\r
-\r
-    HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback *previewCallback);\r
-\r
-    /* Video Input */\r
-\r
-    HRESULT EnableVideoInput(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDVideoInputFlags flags);\r
-    HRESULT DisableVideoInput(void);\r
-    HRESULT GetAvailableVideoFrameCount([out] unsigned long *availableFrameCount);\r
-\r
-    /* Audio Input */\r
-\r
-    HRESULT EnableAudioInput(BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, unsigned long channelCount);\r
-    HRESULT DisableAudioInput(void);\r
-    HRESULT GetAvailableAudioSampleFrameCount([out] unsigned long *availableSampleFrameCount);\r
-\r
-    /* Input Control */\r
-\r
-    HRESULT StartStreams(void);\r
-    HRESULT StopStreams(void);\r
-    HRESULT PauseStreams(void);\r
-    HRESULT FlushStreams(void);\r
-    HRESULT SetCallback([in] IDeckLinkInputCallback *theCallback);\r
-\r
-    /* Hardware Timing */\r
-\r
-    HRESULT GetHardwareReferenceClock(BMDTimeScale desiredTimeScale, [out] BMDTimeValue *hardwareTime, [out] BMDTimeValue *timeInFrame, [out] BMDTimeValue *ticksPerFrame);\r
-};\r
-\r
-/* End Interface IDeckLinkInput */\r
-\r
-/* Interface IDeckLinkTimecode - Used for video frame timecode representation. */\r
-\r
-[\r
-    object,\r
-    uuid(EFB9BCA6-A521-44F7-BD69-2332F24D9EE6),\r
-    helpstring("Used for video frame timecode representation.")\r
-] interface IDeckLinkTimecode : IUnknown\r
-{\r
-    BMDTimecodeBCD GetBCD(void);\r
-    HRESULT GetComponents([out] unsigned char *hours, [out] unsigned char *minutes, [out] unsigned char *seconds, [out] unsigned char *frames);\r
-    HRESULT GetString([out] BSTR *timecode);\r
-    BMDTimecodeFlags GetFlags(void);\r
-};\r
-\r
-/* End Interface IDeckLinkTimecode */\r
-\r
-/* Interface IDeckLinkVideoFrame - Interface to encapsulate a video frame; can be caller-implemented. */\r
-\r
-[\r
-    object,\r
-    uuid(A8D8238E-6B18-4196-99E1-5AF717B83D32),\r
-    local, \r
-    helpstring("Interface to encapsulate a video frame; can be caller-implemented.")\r
-] interface IDeckLinkVideoFrame : IUnknown\r
-{\r
-    long GetWidth(void);\r
-    long GetHeight(void);\r
-    long GetRowBytes(void);\r
-    BMDPixelFormat GetPixelFormat(void);\r
-    BMDFrameFlags GetFlags(void);\r
-    HRESULT GetBytes([out] void **buffer);\r
-\r
-    HRESULT GetTimecode(BMDTimecodeFormat format, [out] IDeckLinkTimecode **timecode);\r
-    HRESULT GetAncillaryData([out] IDeckLinkVideoFrameAncillary **ancillary);\r
-};\r
-\r
-/* End Interface IDeckLinkVideoFrame */\r
-\r
-/* Interface IDeckLinkMutableVideoFrame - Created by IDeckLinkOutput::CreateVideoFrame. */\r
-\r
-[\r
-    object,\r
-    uuid(46FCEE00-B4E6-43D0-91C0-023A7FCEB34F),\r
-    local, \r
-    helpstring("Created by IDeckLinkOutput::CreateVideoFrame.")\r
-] interface IDeckLinkMutableVideoFrame : IDeckLinkVideoFrame\r
-{\r
-    HRESULT SetFlags(BMDFrameFlags newFlags);\r
-\r
-    HRESULT SetTimecode(BMDTimecodeFormat format, [in] IDeckLinkTimecode *timecode);\r
-    HRESULT SetTimecodeFromComponents(BMDTimecodeFormat format, unsigned char hours, unsigned char minutes, unsigned char seconds, unsigned char frames, BMDTimecodeFlags flags);\r
-    HRESULT SetAncillaryData([in] IDeckLinkVideoFrameAncillary *ancillary);\r
-};\r
-\r
-/* End Interface IDeckLinkMutableVideoFrame */\r
-\r
-/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */\r
-\r
-[\r
-    object,\r
-    uuid(9A74FA41-AE9F-47AC-8CF4-01F42DD59965),\r
-    local, \r
-    helpstring("Provided by the IDeckLinkVideoInput frame arrival callback.")\r
-] interface IDeckLinkVideoInputFrame : IDeckLinkVideoFrame\r
-{\r
-    HRESULT GetStreamTime([out] BMDTimeValue *frameTime, [out] BMDTimeValue *frameDuration, BMDTimeScale timeScale);\r
-    HRESULT GetHardwareReferenceTimestamp(BMDTimeScale timeScale, [out] BMDTimeValue *frameTime, [out] BMDTimeValue *frameDuration);\r
-};\r
-\r
-/* End Interface IDeckLinkVideoInputFrame */\r
-\r
-/* Interface IDeckLinkVideoFrameAncillary - Obtained through QueryInterface() on an IDeckLinkVideoFrame object. */\r
-\r
-[\r
-    object,\r
-    uuid(732E723C-D1A4-4E29-9E8E-4A88797A0004),\r
-    local, \r
-    helpstring("Obtained through QueryInterface() on an IDeckLinkVideoFrame object.")\r
-] interface IDeckLinkVideoFrameAncillary : IUnknown\r
-{\r
-\r
-    HRESULT GetBufferForVerticalBlankingLine(unsigned long lineNumber, [out] void **buffer);\r
-    BMDPixelFormat GetPixelFormat(void);\r
-    BMDDisplayMode GetDisplayMode(void);\r
-};\r
-\r
-/* End Interface IDeckLinkVideoFrameAncillary */\r
-\r
-/* Interface IDeckLinkAudioInputPacket - Provided by the IDeckLinkInput callback. */\r
-\r
-[\r
-    object,\r
-    uuid(E43D5870-2894-11DE-8C30-0800200C9A66),\r
-    local, \r
-    helpstring("Provided by the IDeckLinkInput callback.")\r
-] interface IDeckLinkAudioInputPacket : IUnknown\r
-{\r
-    long GetSampleFrameCount(void);\r
-    HRESULT GetBytes([out] void **buffer);\r
-    HRESULT GetPacketTime([out] BMDTimeValue *packetTime, BMDTimeScale timeScale);\r
-};\r
-\r
-/* End Interface IDeckLinkAudioInputPacket */\r
-\r
-/* Interface IDeckLinkScreenPreviewCallback - Screen preview callback */\r
-\r
-[\r
-    object,\r
-    uuid(373F499D-4B4D-4518-AD22-6354E5A5825E),\r
-    local, \r
-    helpstring("Screen preview callback")\r
-] interface IDeckLinkScreenPreviewCallback : IUnknown\r
-{\r
-    HRESULT DrawFrame([in] IDeckLinkVideoFrame *theFrame);\r
-};\r
-\r
-/* End Interface IDeckLinkScreenPreviewCallback */\r
-\r
-/* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance(). */\r
-\r
-[\r
-    object,\r
-    uuid(BA575CD9-A15E-497B-B2C2-F9AFE7BE4EBA),\r
-    local, \r
-    helpstring("Created with CoCreateInstance().")\r
-] interface IDeckLinkGLScreenPreviewHelper : IUnknown\r
-{\r
-\r
-    /* Methods must be called with OpenGL context set */\r
-\r
-    HRESULT InitializeGL(void);\r
-    HRESULT PaintGL(void);\r
-    HRESULT SetFrame([in] IDeckLinkVideoFrame *theFrame);\r
-};\r
-\r
-/* End Interface IDeckLinkGLScreenPreviewHelper */\r
-\r
-/* Interface IDeckLinkConfiguration - Created by QueryInterface from IDeckLink. */\r
-\r
-[\r
-    object,\r
-    uuid(B8EAD569-B764-47F0-A73F-AE40DF6CBF10),\r
-    helpstring("Created by QueryInterface from IDeckLink.")\r
-] interface IDeckLinkConfiguration : IUnknown\r
-{\r
-    HRESULT GetConfigurationValidator([out] IDeckLinkConfiguration **configObject);\r
-    HRESULT WriteConfigurationToPreferences(void);\r
-\r
-    /* Video Output Configuration */\r
-\r
-    HRESULT SetVideoOutputFormat(BMDVideoConnection videoOutputConnection);\r
-    HRESULT IsVideoOutputActive(BMDVideoConnection videoOutputConnection, [out] BOOL *active);\r
-\r
-    HRESULT SetAnalogVideoOutputFlags(BMDAnalogVideoFlags analogVideoFlags);\r
-    HRESULT GetAnalogVideoOutputFlags([out] BMDAnalogVideoFlags *analogVideoFlags);\r
-\r
-    HRESULT EnableFieldFlickerRemovalWhenPaused(BOOL enable);\r
-    HRESULT IsEnabledFieldFlickerRemovalWhenPaused([out] BOOL *enabled);\r
-\r
-    HRESULT Set444And3GBpsVideoOutput(BOOL enable444VideoOutput, BOOL enable3GbsOutput);\r
-    HRESULT Get444And3GBpsVideoOutput([out] BOOL *is444VideoOutputEnabled, [out] BOOL *threeGbsOutputEnabled);\r
-\r
-    HRESULT SetVideoOutputConversionMode(BMDVideoOutputConversionMode conversionMode);\r
-    HRESULT GetVideoOutputConversionMode([out] BMDVideoOutputConversionMode *conversionMode);\r
-\r
-    HRESULT Set_HD1080p24_to_HD1080i5994_Conversion(BOOL enable);\r
-    HRESULT Get_HD1080p24_to_HD1080i5994_Conversion([out] BOOL *enabled);\r
-\r
-    /* Video Input Configuration */\r
-\r
-    HRESULT SetVideoInputFormat(BMDVideoConnection videoInputFormat);\r
-    HRESULT GetVideoInputFormat([out] BMDVideoConnection *videoInputFormat);\r
-\r
-    HRESULT SetAnalogVideoInputFlags(BMDAnalogVideoFlags analogVideoFlags);\r
-    HRESULT GetAnalogVideoInputFlags([out] BMDAnalogVideoFlags *analogVideoFlags);\r
-\r
-    HRESULT SetVideoInputConversionMode(BMDVideoInputConversionMode conversionMode);\r
-    HRESULT GetVideoInputConversionMode([out] BMDVideoInputConversionMode *conversionMode);\r
-\r
-    HRESULT SetBlackVideoOutputDuringCapture(BOOL blackOutInCapture);\r
-    HRESULT GetBlackVideoOutputDuringCapture([out] BOOL *blackOutInCapture);\r
-\r
-    HRESULT Set32PulldownSequenceInitialTimecodeFrame(unsigned long aFrameTimecode);\r
-    HRESULT Get32PulldownSequenceInitialTimecodeFrame([out] unsigned long *aFrameTimecode);\r
-\r
-    HRESULT SetVancSourceLineMapping(unsigned long activeLine1VANCsource, unsigned long activeLine2VANCsource, unsigned long activeLine3VANCsource);\r
-    HRESULT GetVancSourceLineMapping([out] unsigned long *activeLine1VANCsource, [out] unsigned long *activeLine2VANCsource, [out] unsigned long *activeLine3VANCsource);\r
-\r
-    /* Audio Input Configuration */\r
-\r
-    HRESULT SetAudioInputFormat(BMDAudioConnection audioInputFormat);\r
-    HRESULT GetAudioInputFormat([out] BMDAudioConnection *audioInputFormat);\r
-};\r
-\r
-/* End Interface IDeckLinkConfiguration */\r
-\r
-/* Interface IDeckLinkAttributes - DeckLink Attribute interface */\r
-\r
-[\r
-    object,\r
-    uuid(ABC11843-D966-44CB-96E2-A1CB5D3135C4),\r
-    local, \r
-    helpstring("DeckLink Attribute interface")\r
-] interface IDeckLinkAttributes : IUnknown\r
-{\r
-    HRESULT GetFlag([in] BMDDeckLinkAttributeID cfgID, [out] BOOL *value);\r
-    HRESULT GetInt([in] BMDDeckLinkAttributeID cfgID, [out] LONGLONG *value);\r
-    HRESULT GetFloat([in] BMDDeckLinkAttributeID cfgID, [out] double *value);\r
-    HRESULT GetString([in] BMDDeckLinkAttributeID cfgID, [out] BSTR *value);\r
-};\r
-\r
-/* End Interface IDeckLinkAttributes */\r
-\r
-/* Interface IDeckLinkKeyer - DeckLink Keyer interface */\r
-\r
-[\r
-    object,\r
-    uuid(89AFCAF5-65F8-421E-98F7-96FE5F5BFBA3),\r
-    local, \r
-    helpstring("DeckLink Keyer interface")\r
-] interface IDeckLinkKeyer : IUnknown\r
-{\r
-    HRESULT Enable([in] BOOL isExternal);\r
-    HRESULT SetLevel([in] unsigned char level);\r
-    HRESULT RampUp([in] unsigned long numberOfFrames);\r
-    HRESULT RampDown([in] unsigned long numberOfFrames);\r
-    HRESULT Disable(void);\r
-};\r
-\r
-/* End Interface IDeckLinkKeyer */\r
-\r
-/* Coclasses */\r
-\r
-importlib("stdole2.tlb");\r
-\r
-[\r
-    uuid(D9EDA3B3-2887-41FA-B724-017CF1EB1D37),\r
-    helpstring("CDeckLinkIterator Class")\r
-] coclass CDeckLinkIterator\r
-{\r
-    [default] interface IDeckLinkIterator;\r
-};\r
-\r
-[\r
-    uuid(D398CEE7-4434-4CA3-9BA6-5AE34556B905),\r
-    helpstring("CDeckLinkGLScreenPreviewHelper Class")\r
-] coclass CDeckLinkGLScreenPreviewHelper\r
-{\r
-    [default] interface IDeckLinkGLScreenPreviewHelper;\r
-};\r
-\r
-/* End Coclasses */\r
-\r
-// import deprecated interfaces\r
-#include "DeckLinkAPI_v7_1.idl"\r
-#include "DeckLinkAPI_v7_3.idl"\r
-};\r
diff --git a/server/consumers/decklink/DeckLinkAPI_h.h b/server/consumers/decklink/DeckLinkAPI_h.h
deleted file mode 100644 (file)
index 1321b07..0000000
+++ /dev/null
@@ -1,5584 +0,0 @@
-\r
-\r
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */\r
-\r
-\r
- /* File created by MIDL compiler version 7.00.0500 */\r
-/* at Wed Jan 13 09:58:01 2010\r
- */\r
-/* Compiler settings for .\consumers\declink\DeckLinkAPI.idl:\r
-    Oicf, W1, Zp8, env=Win32 (32b run)\r
-    protocol : dce , ms_ext, c_ext, robust\r
-    error checks: allocation ref bounds_check enum stub_data \r
-    VC __declspec() decoration level: \r
-         __declspec(uuid()), __declspec(selectany), __declspec(novtable)\r
-         DECLSPEC_UUID(), MIDL_INTERFACE()\r
-*/\r
-//@@MIDL_FILE_HEADING(  )\r
-\r
-#pragma warning( disable: 4049 )  /* more than 64k source lines */\r
-\r
-\r
-/* verify that the <rpcndr.h> version is high enough to compile this file*/\r
-#ifndef __REQUIRED_RPCNDR_H_VERSION__\r
-#define __REQUIRED_RPCNDR_H_VERSION__ 475\r
-#endif\r
-\r
-#include "rpc.h"\r
-#include "rpcndr.h"\r
-\r
-#ifndef __RPCNDR_H_VERSION__\r
-#error this stub requires an updated version of <rpcndr.h>\r
-#endif // __RPCNDR_H_VERSION__\r
-\r
-\r
-#ifndef __DeckLinkAPI_h_h__\r
-#define __DeckLinkAPI_h_h__\r
-\r
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)\r
-#pragma once\r
-#endif\r
-\r
-/* Forward Declarations */ \r
-\r
-#ifndef __IDeckLinkVideoOutputCallback_FWD_DEFINED__\r
-#define __IDeckLinkVideoOutputCallback_FWD_DEFINED__\r
-typedef interface IDeckLinkVideoOutputCallback IDeckLinkVideoOutputCallback;\r
-#endif         /* __IDeckLinkVideoOutputCallback_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkInputCallback_FWD_DEFINED__\r
-#define __IDeckLinkInputCallback_FWD_DEFINED__\r
-typedef interface IDeckLinkInputCallback IDeckLinkInputCallback;\r
-#endif         /* __IDeckLinkInputCallback_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkMemoryAllocator_FWD_DEFINED__\r
-#define __IDeckLinkMemoryAllocator_FWD_DEFINED__\r
-typedef interface IDeckLinkMemoryAllocator IDeckLinkMemoryAllocator;\r
-#endif         /* __IDeckLinkMemoryAllocator_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkAudioOutputCallback_FWD_DEFINED__\r
-#define __IDeckLinkAudioOutputCallback_FWD_DEFINED__\r
-typedef interface IDeckLinkAudioOutputCallback IDeckLinkAudioOutputCallback;\r
-#endif         /* __IDeckLinkAudioOutputCallback_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkIterator_FWD_DEFINED__\r
-#define __IDeckLinkIterator_FWD_DEFINED__\r
-typedef interface IDeckLinkIterator IDeckLinkIterator;\r
-#endif         /* __IDeckLinkIterator_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkAPIInformation_FWD_DEFINED__\r
-#define __IDeckLinkAPIInformation_FWD_DEFINED__\r
-typedef interface IDeckLinkAPIInformation IDeckLinkAPIInformation;\r
-#endif         /* __IDeckLinkAPIInformation_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkDisplayModeIterator_FWD_DEFINED__\r
-#define __IDeckLinkDisplayModeIterator_FWD_DEFINED__\r
-typedef interface IDeckLinkDisplayModeIterator IDeckLinkDisplayModeIterator;\r
-#endif         /* __IDeckLinkDisplayModeIterator_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkDisplayMode_FWD_DEFINED__\r
-#define __IDeckLinkDisplayMode_FWD_DEFINED__\r
-typedef interface IDeckLinkDisplayMode IDeckLinkDisplayMode;\r
-#endif         /* __IDeckLinkDisplayMode_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLink_FWD_DEFINED__\r
-#define __IDeckLink_FWD_DEFINED__\r
-typedef interface IDeckLink IDeckLink;\r
-#endif         /* __IDeckLink_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkOutput_FWD_DEFINED__\r
-#define __IDeckLinkOutput_FWD_DEFINED__\r
-typedef interface IDeckLinkOutput IDeckLinkOutput;\r
-#endif         /* __IDeckLinkOutput_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkInput_FWD_DEFINED__\r
-#define __IDeckLinkInput_FWD_DEFINED__\r
-typedef interface IDeckLinkInput IDeckLinkInput;\r
-#endif         /* __IDeckLinkInput_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkTimecode_FWD_DEFINED__\r
-#define __IDeckLinkTimecode_FWD_DEFINED__\r
-typedef interface IDeckLinkTimecode IDeckLinkTimecode;\r
-#endif         /* __IDeckLinkTimecode_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkVideoFrame_FWD_DEFINED__\r
-#define __IDeckLinkVideoFrame_FWD_DEFINED__\r
-typedef interface IDeckLinkVideoFrame IDeckLinkVideoFrame;\r
-#endif         /* __IDeckLinkVideoFrame_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkMutableVideoFrame_FWD_DEFINED__\r
-#define __IDeckLinkMutableVideoFrame_FWD_DEFINED__\r
-typedef interface IDeckLinkMutableVideoFrame IDeckLinkMutableVideoFrame;\r
-#endif         /* __IDeckLinkMutableVideoFrame_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkVideoInputFrame_FWD_DEFINED__\r
-#define __IDeckLinkVideoInputFrame_FWD_DEFINED__\r
-typedef interface IDeckLinkVideoInputFrame IDeckLinkVideoInputFrame;\r
-#endif         /* __IDeckLinkVideoInputFrame_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkVideoFrameAncillary_FWD_DEFINED__\r
-#define __IDeckLinkVideoFrameAncillary_FWD_DEFINED__\r
-typedef interface IDeckLinkVideoFrameAncillary IDeckLinkVideoFrameAncillary;\r
-#endif         /* __IDeckLinkVideoFrameAncillary_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkAudioInputPacket_FWD_DEFINED__\r
-#define __IDeckLinkAudioInputPacket_FWD_DEFINED__\r
-typedef interface IDeckLinkAudioInputPacket IDeckLinkAudioInputPacket;\r
-#endif         /* __IDeckLinkAudioInputPacket_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkScreenPreviewCallback_FWD_DEFINED__\r
-#define __IDeckLinkScreenPreviewCallback_FWD_DEFINED__\r
-typedef interface IDeckLinkScreenPreviewCallback IDeckLinkScreenPreviewCallback;\r
-#endif         /* __IDeckLinkScreenPreviewCallback_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkGLScreenPreviewHelper_FWD_DEFINED__\r
-#define __IDeckLinkGLScreenPreviewHelper_FWD_DEFINED__\r
-typedef interface IDeckLinkGLScreenPreviewHelper IDeckLinkGLScreenPreviewHelper;\r
-#endif         /* __IDeckLinkGLScreenPreviewHelper_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkConfiguration_FWD_DEFINED__\r
-#define __IDeckLinkConfiguration_FWD_DEFINED__\r
-typedef interface IDeckLinkConfiguration IDeckLinkConfiguration;\r
-#endif         /* __IDeckLinkConfiguration_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkAttributes_FWD_DEFINED__\r
-#define __IDeckLinkAttributes_FWD_DEFINED__\r
-typedef interface IDeckLinkAttributes IDeckLinkAttributes;\r
-#endif         /* __IDeckLinkAttributes_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkKeyer_FWD_DEFINED__\r
-#define __IDeckLinkKeyer_FWD_DEFINED__\r
-typedef interface IDeckLinkKeyer IDeckLinkKeyer;\r
-#endif         /* __IDeckLinkKeyer_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __CDeckLinkIterator_FWD_DEFINED__\r
-#define __CDeckLinkIterator_FWD_DEFINED__\r
-\r
-#ifdef __cplusplus\r
-typedef class CDeckLinkIterator CDeckLinkIterator;\r
-#else\r
-typedef struct CDeckLinkIterator CDeckLinkIterator;\r
-#endif /* __cplusplus */\r
-\r
-#endif         /* __CDeckLinkIterator_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __CDeckLinkGLScreenPreviewHelper_FWD_DEFINED__\r
-#define __CDeckLinkGLScreenPreviewHelper_FWD_DEFINED__\r
-\r
-#ifdef __cplusplus\r
-typedef class CDeckLinkGLScreenPreviewHelper CDeckLinkGLScreenPreviewHelper;\r
-#else\r
-typedef struct CDeckLinkGLScreenPreviewHelper CDeckLinkGLScreenPreviewHelper;\r
-#endif /* __cplusplus */\r
-\r
-#endif         /* __CDeckLinkGLScreenPreviewHelper_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkDisplayModeIterator_v7_1_FWD_DEFINED__\r
-#define __IDeckLinkDisplayModeIterator_v7_1_FWD_DEFINED__\r
-typedef interface IDeckLinkDisplayModeIterator_v7_1 IDeckLinkDisplayModeIterator_v7_1;\r
-#endif         /* __IDeckLinkDisplayModeIterator_v7_1_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkDisplayMode_v7_1_FWD_DEFINED__\r
-#define __IDeckLinkDisplayMode_v7_1_FWD_DEFINED__\r
-typedef interface IDeckLinkDisplayMode_v7_1 IDeckLinkDisplayMode_v7_1;\r
-#endif         /* __IDeckLinkDisplayMode_v7_1_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkVideoFrame_v7_1_FWD_DEFINED__\r
-#define __IDeckLinkVideoFrame_v7_1_FWD_DEFINED__\r
-typedef interface IDeckLinkVideoFrame_v7_1 IDeckLinkVideoFrame_v7_1;\r
-#endif         /* __IDeckLinkVideoFrame_v7_1_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkVideoInputFrame_v7_1_FWD_DEFINED__\r
-#define __IDeckLinkVideoInputFrame_v7_1_FWD_DEFINED__\r
-typedef interface IDeckLinkVideoInputFrame_v7_1 IDeckLinkVideoInputFrame_v7_1;\r
-#endif         /* __IDeckLinkVideoInputFrame_v7_1_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkAudioInputPacket_v7_1_FWD_DEFINED__\r
-#define __IDeckLinkAudioInputPacket_v7_1_FWD_DEFINED__\r
-typedef interface IDeckLinkAudioInputPacket_v7_1 IDeckLinkAudioInputPacket_v7_1;\r
-#endif         /* __IDeckLinkAudioInputPacket_v7_1_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkVideoOutputCallback_v7_1_FWD_DEFINED__\r
-#define __IDeckLinkVideoOutputCallback_v7_1_FWD_DEFINED__\r
-typedef interface IDeckLinkVideoOutputCallback_v7_1 IDeckLinkVideoOutputCallback_v7_1;\r
-#endif         /* __IDeckLinkVideoOutputCallback_v7_1_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkInputCallback_v7_1_FWD_DEFINED__\r
-#define __IDeckLinkInputCallback_v7_1_FWD_DEFINED__\r
-typedef interface IDeckLinkInputCallback_v7_1 IDeckLinkInputCallback_v7_1;\r
-#endif         /* __IDeckLinkInputCallback_v7_1_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkOutput_v7_1_FWD_DEFINED__\r
-#define __IDeckLinkOutput_v7_1_FWD_DEFINED__\r
-typedef interface IDeckLinkOutput_v7_1 IDeckLinkOutput_v7_1;\r
-#endif         /* __IDeckLinkOutput_v7_1_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkInput_v7_1_FWD_DEFINED__\r
-#define __IDeckLinkInput_v7_1_FWD_DEFINED__\r
-typedef interface IDeckLinkInput_v7_1 IDeckLinkInput_v7_1;\r
-#endif         /* __IDeckLinkInput_v7_1_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkInputCallback_v7_3_FWD_DEFINED__\r
-#define __IDeckLinkInputCallback_v7_3_FWD_DEFINED__\r
-typedef interface IDeckLinkInputCallback_v7_3 IDeckLinkInputCallback_v7_3;\r
-#endif         /* __IDeckLinkInputCallback_v7_3_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkOutput_v7_3_FWD_DEFINED__\r
-#define __IDeckLinkOutput_v7_3_FWD_DEFINED__\r
-typedef interface IDeckLinkOutput_v7_3 IDeckLinkOutput_v7_3;\r
-#endif         /* __IDeckLinkOutput_v7_3_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkInput_v7_3_FWD_DEFINED__\r
-#define __IDeckLinkInput_v7_3_FWD_DEFINED__\r
-typedef interface IDeckLinkInput_v7_3 IDeckLinkInput_v7_3;\r
-#endif         /* __IDeckLinkInput_v7_3_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkVideoInputFrame_v7_3_FWD_DEFINED__\r
-#define __IDeckLinkVideoInputFrame_v7_3_FWD_DEFINED__\r
-typedef interface IDeckLinkVideoInputFrame_v7_3 IDeckLinkVideoInputFrame_v7_3;\r
-#endif         /* __IDeckLinkVideoInputFrame_v7_3_FWD_DEFINED__ */\r
-\r
-\r
-/* header files for imported files */\r
-#include "unknwn.h"\r
-\r
-#ifdef __cplusplus\r
-extern "C"{\r
-#endif \r
-\r
-\r
-\r
-#ifndef __DeckLinkAPI_LIBRARY_DEFINED__\r
-#define __DeckLinkAPI_LIBRARY_DEFINED__\r
-\r
-/* library DeckLinkAPI */\r
-/* [helpstring][version][uuid] */ \r
-\r
-typedef LONGLONG BMDTimeValue;\r
-\r
-typedef LONGLONG BMDTimeScale;\r
-\r
-typedef unsigned long BMDTimecodeBCD;\r
-\r
-typedef unsigned long BMDFrameFlags;\r
-typedef unsigned long BMDVideoInputFlags;\r
-typedef unsigned long BMDVideoInputFormatChangedEvents;\r
-typedef unsigned long BMDDetectedVideoInputFormatFlags;\r
-typedef unsigned long BMDTimecodeFlags;\r
-typedef unsigned long BMDAnalogVideoFlags;\r
-#if 0\r
-typedef enum _BMDFrameFlags BMDFrameFlags;\r
-\r
-typedef enum _BMDVideoInputFlags BMDVideoInputFlags;\r
-\r
-typedef enum _BMDVideoInputFormatChangedEvents BMDVideoInputFormatChangedEvents;\r
-\r
-typedef enum _BMDDetectedVideoInputFormatFlags BMDDetectedVideoInputFormatFlags;\r
-\r
-typedef enum _BMDTimecodeFlags BMDTimecodeFlags;\r
-\r
-typedef enum _BMDAnalogVideoFlags BMDAnalogVideoFlags;\r
-\r
-#endif\r
-typedef /* [v1_enum] */ \r
-enum _BMDDisplayMode\r
-    {  bmdModeNTSC     = 0x6e747363,\r
-       bmdModeNTSC2398 = 0x6e743233,\r
-       bmdModePAL      = 0x70616c20,\r
-       bmdModeHD1080p2398      = 0x32337073,\r
-       bmdModeHD1080p24        = 0x32347073,\r
-       bmdModeHD1080p25        = 0x48703235,\r
-       bmdModeHD1080p2997      = 0x48703239,\r
-       bmdModeHD1080p30        = 0x48703330,\r
-       bmdModeHD1080i50        = 0x48693530,\r
-       bmdModeHD1080i5994      = 0x48693539,\r
-       bmdModeHD1080i6000      = 0x48693630,\r
-       bmdModeHD1080p50        = 0x48703530,\r
-       bmdModeHD1080p5994      = 0x48703539,\r
-       bmdModeHD1080p6000      = 0x48703630,\r
-       bmdModeHD720p50 = 0x68703530,\r
-       bmdModeHD720p5994       = 0x68703539,\r
-       bmdModeHD720p60 = 0x68703630,\r
-       bmdMode2k2398   = 0x326b3233,\r
-       bmdMode2k24     = 0x326b3234,\r
-       bmdMode2k25     = 0x326b3235\r
-    }  BMDDisplayMode;\r
-\r
-typedef /* [v1_enum] */ \r
-enum _BMDFieldDominance\r
-    {  bmdUnknownFieldDominance        = 0,\r
-       bmdLowerFieldFirst      = 0x6c6f7772,\r
-       bmdUpperFieldFirst      = 0x75707072,\r
-       bmdProgressiveFrame     = 0x70726f67,\r
-       bmdProgressiveSegmentedFrame    = 0x70736620\r
-    }  BMDFieldDominance;\r
-\r
-typedef /* [v1_enum] */ \r
-enum _BMDPixelFormat\r
-    {  bmdFormat8BitYUV        = 0x32767579,\r
-       bmdFormat10BitYUV       = 0x76323130,\r
-       bmdFormat8BitARGB       = 0x20,\r
-       bmdFormat8BitBGRA       = 0x42475241,\r
-       bmdFormat10BitRGB       = 0x72323130\r
-    }  BMDPixelFormat;\r
-\r
-typedef /* [v1_enum] */ \r
-enum _BMDVideoOutputFlags\r
-    {  bmdVideoOutputFlagDefault       = 0,\r
-       bmdVideoOutputRP188     = ( 1 << 0 ) ,\r
-       bmdVideoOutputVANC      = ( 1 << 1 ) \r
-    }  BMDVideoOutputFlags;\r
-\r
-/* [v1_enum] */ \r
-enum _BMDFrameFlags\r
-    {  bmdFrameFlagDefault     = 0,\r
-       bmdFrameFlagFlipVertical        = ( 1 << 0 ) ,\r
-       bmdFrameHasNoInputSource        = ( 1 << 31 ) \r
-    } ;\r
-/* [v1_enum] */ \r
-enum _BMDVideoInputFlags\r
-    {  bmdVideoInputFlagDefault        = 0,\r
-       bmdVideoInputEnableFormatDetection      = ( 1 << 0 ) \r
-    } ;\r
-/* [v1_enum] */ \r
-enum _BMDVideoInputFormatChangedEvents\r
-    {  bmdVideoInputDisplayModeChanged = ( 1 << 0 ) ,\r
-       bmdVideoInputFieldDominanceChanged      = ( 1 << 1 ) ,\r
-       bmdVideoInputColorspaceChanged  = ( 1 << 2 ) \r
-    } ;\r
-/* [v1_enum] */ \r
-enum _BMDDetectedVideoInputFormatFlags\r
-    {  bmdDetectedVideoInputYCbCr422   = ( 1 << 0 ) ,\r
-       bmdDetectedVideoInputRGB444     = ( 1 << 1 ) \r
-    } ;\r
-typedef /* [v1_enum] */ \r
-enum _BMDOutputFrameCompletionResult\r
-    {  bmdOutputFrameCompleted = 0,\r
-       bmdOutputFrameDisplayedLate     = ( bmdOutputFrameCompleted + 1 ) ,\r
-       bmdOutputFrameDropped   = ( bmdOutputFrameDisplayedLate + 1 ) ,\r
-       bmdOutputFrameFlushed   = ( bmdOutputFrameDropped + 1 ) \r
-    }  BMDOutputFrameCompletionResult;\r
-\r
-typedef /* [v1_enum] */ \r
-enum _BMDAudioSampleRate\r
-    {  bmdAudioSampleRate48kHz = 48000\r
-    }  BMDAudioSampleRate;\r
-\r
-typedef /* [v1_enum] */ \r
-enum _BMDAudioSampleType\r
-    {  bmdAudioSampleType16bitInteger  = 16,\r
-       bmdAudioSampleType32bitInteger  = 32\r
-    }  BMDAudioSampleType;\r
-\r
-typedef /* [v1_enum] */ \r
-enum _BMDAudioOutputStreamType\r
-    {  bmdAudioOutputStreamContinuous  = 0,\r
-       bmdAudioOutputStreamContinuousDontResample      = ( bmdAudioOutputStreamContinuous + 1 ) ,\r
-       bmdAudioOutputStreamTimestamped = ( bmdAudioOutputStreamContinuousDontResample + 1 ) \r
-    }  BMDAudioOutputStreamType;\r
-\r
-typedef /* [v1_enum] */ \r
-enum _BMDDisplayModeSupport\r
-    {  bmdDisplayModeNotSupported      = 0,\r
-       bmdDisplayModeSupported = ( bmdDisplayModeNotSupported + 1 ) ,\r
-       bmdDisplayModeSupportedWithConversion   = ( bmdDisplayModeSupported + 1 ) \r
-    }  BMDDisplayModeSupport;\r
-\r
-typedef /* [v1_enum] */ \r
-enum _BMDTimecodeFormat\r
-    {  bmdTimecodeRP188        = 0x72703138,\r
-       bmdTimecodeVITC = 0x76697463,\r
-       bmdTimecodeSerial       = 0x73657269\r
-    }  BMDTimecodeFormat;\r
-\r
-/* [v1_enum] */ \r
-enum _BMDTimecodeFlags\r
-    {  bmdTimecodeFlagDefault  = 0,\r
-       bmdTimecodeIsDropFrame  = ( 1 << 0 ) \r
-    } ;\r
-typedef /* [v1_enum] */ \r
-enum _BMDVideoConnection\r
-    {  bmdVideoConnectionSDI   = 0x73646920,\r
-       bmdVideoConnectionHDMI  = 0x68646d69,\r
-       bmdVideoConnectionOpticalSDI    = 0x6f707469,\r
-       bmdVideoConnectionComponent     = 0x63706e74,\r
-       bmdVideoConnectionComposite     = 0x636d7374,\r
-       bmdVideoConnectionSVideo        = 0x73766964\r
-    }  BMDVideoConnection;\r
-\r
-/* [v1_enum] */ \r
-enum _BMDAnalogVideoFlags\r
-    {  bmdAnalogVideoFlagCompositeSetup75      = ( 1 << 0 ) ,\r
-       bmdAnalogVideoFlagComponentBetacamLevels        = ( 1 << 1 ) \r
-    } ;\r
-typedef /* [v1_enum] */ \r
-enum _BMDAudioConnection\r
-    {  bmdAudioConnectionEmbedded      = 0x656d6264,\r
-       bmdAudioConnectionAESEBU        = 0x61657320,\r
-       bmdAudioConnectionAnalog        = 0x616e6c67\r
-    }  BMDAudioConnection;\r
-\r
-typedef /* [v1_enum] */ \r
-enum _BMDVideoOutputConversionMode\r
-    {  bmdNoVideoOutputConversion      = 0x6e6f6e65,\r
-       bmdVideoOutputLetterboxDownonversion    = 0x6c746278,\r
-       bmdVideoOutputAnamorphicDownonversion   = 0x616d7068,\r
-       bmdVideoOutputHD720toHD1080Conversion   = 0x37323063,\r
-       bmdVideoOutputHardwareLetterboxDownconversion   = 0x48576c62,\r
-       bmdVideoOutputHardwareAnamorphicDownconversion  = 0x4857616d,\r
-       bmdVideoOutputHardwareCenterCutDownconversion   = 0x48576363\r
-    }  BMDVideoOutputConversionMode;\r
-\r
-typedef /* [v1_enum] */ \r
-enum _BMDVideoInputConversionMode\r
-    {  bmdNoVideoInputConversion       = 0x6e6f6e65,\r
-       bmdVideoInputLetterboxDownconversionFromHD1080  = 0x31306c62,\r
-       bmdVideoInputAnamorphicDownconversionFromHD1080 = 0x3130616d,\r
-       bmdVideoInputLetterboxDownconversionFromHD720   = 0x37326c62,\r
-       bmdVideoInputAnamorphicDownconversionFromHD720  = 0x3732616d,\r
-       bmdVideoInputLetterboxUpconversion      = 0x6c627570,\r
-       bmdVideoInputAnamorphicUpconversion     = 0x616d7570\r
-    }  BMDVideoInputConversionMode;\r
-\r
-typedef /* [v1_enum] */ \r
-enum _BMDDeckLinkAttributeID\r
-    {  BMDDeckLinkSupportsInternalKeying       = 0x6b657969,\r
-       BMDDeckLinkSupportsExternalKeying       = 0x6b657965,\r
-       BMDDeckLinkSupportsHDKeying     = 0x6b657968,\r
-       BMDDeckLinkSupportsInputFormatDetection = 0x696e6664,\r
-       BMDDeckLinkHasSerialPort        = 0x68737074,\r
-       BMDDeckLinkMaximumAudioChannels = 0x6d616368,\r
-       BMDDeckLinkSerialPortDeviceName = 0x736c706e\r
-    }  BMDDeckLinkAttributeID;\r
-\r
-typedef /* [v1_enum] */ \r
-enum _BMDDeckLinkAPIInformationID\r
-    {  BMDDeckLinkAPIVersion   = 0x76657273\r
-    }  BMDDeckLinkAPIInformationID;\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-EXTERN_C const IID LIBID_DeckLinkAPI;\r
-\r
-#ifndef __IDeckLinkVideoOutputCallback_INTERFACE_DEFINED__\r
-#define __IDeckLinkVideoOutputCallback_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkVideoOutputCallback */\r
-/* [helpstring][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkVideoOutputCallback;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("E763A626-4A3C-49D1-BF13-E7AD3692AE52")\r
-    IDeckLinkVideoOutputCallback : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE ScheduledFrameCompleted( \r
-            /* [in] */ IDeckLinkVideoFrame *completedFrame,\r
-            /* [in] */ BMDOutputFrameCompletionResult result) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE ScheduledPlaybackHasStopped( void) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkVideoOutputCallbackVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkVideoOutputCallback * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkVideoOutputCallback * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkVideoOutputCallback * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *ScheduledFrameCompleted )( \r
-            IDeckLinkVideoOutputCallback * This,\r
-            /* [in] */ IDeckLinkVideoFrame *completedFrame,\r
-            /* [in] */ BMDOutputFrameCompletionResult result);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *ScheduledPlaybackHasStopped )( \r
-            IDeckLinkVideoOutputCallback * This);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkVideoOutputCallbackVtbl;\r
-\r
-    interface IDeckLinkVideoOutputCallback\r
-    {\r
-        CONST_VTBL struct IDeckLinkVideoOutputCallbackVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkVideoOutputCallback_QueryInterface(This,riid,ppvObject)       \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkVideoOutputCallback_AddRef(This)      \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkVideoOutputCallback_Release(This)     \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkVideoOutputCallback_ScheduledFrameCompleted(This,completedFrame,result)       \\r
-    ( (This)->lpVtbl -> ScheduledFrameCompleted(This,completedFrame,result) ) \r
-\r
-#define IDeckLinkVideoOutputCallback_ScheduledPlaybackHasStopped(This) \\r
-    ( (This)->lpVtbl -> ScheduledPlaybackHasStopped(This) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkVideoOutputCallback_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkInputCallback_INTERFACE_DEFINED__\r
-#define __IDeckLinkInputCallback_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkInputCallback */\r
-/* [helpstring][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkInputCallback;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("31D28EE7-88B6-4CB1-897A-CDBF79A26414")\r
-    IDeckLinkInputCallback : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE VideoInputFormatChanged( \r
-            /* [in] */ BMDVideoInputFormatChangedEvents notificationEvents,\r
-            /* [in] */ IDeckLinkDisplayMode *newDisplayMode,\r
-            /* [in] */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE VideoInputFrameArrived( \r
-            /* [in] */ IDeckLinkVideoInputFrame *videoFrame,\r
-            /* [in] */ IDeckLinkAudioInputPacket *audioPacket) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkInputCallbackVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkInputCallback * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkInputCallback * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkInputCallback * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *VideoInputFormatChanged )( \r
-            IDeckLinkInputCallback * This,\r
-            /* [in] */ BMDVideoInputFormatChangedEvents notificationEvents,\r
-            /* [in] */ IDeckLinkDisplayMode *newDisplayMode,\r
-            /* [in] */ BMDDetectedVideoInputFormatFlags detectedSignalFlags);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *VideoInputFrameArrived )( \r
-            IDeckLinkInputCallback * This,\r
-            /* [in] */ IDeckLinkVideoInputFrame *videoFrame,\r
-            /* [in] */ IDeckLinkAudioInputPacket *audioPacket);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkInputCallbackVtbl;\r
-\r
-    interface IDeckLinkInputCallback\r
-    {\r
-        CONST_VTBL struct IDeckLinkInputCallbackVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkInputCallback_QueryInterface(This,riid,ppvObject)     \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkInputCallback_AddRef(This)    \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkInputCallback_Release(This)   \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkInputCallback_VideoInputFormatChanged(This,notificationEvents,newDisplayMode,detectedSignalFlags)     \\r
-    ( (This)->lpVtbl -> VideoInputFormatChanged(This,notificationEvents,newDisplayMode,detectedSignalFlags) ) \r
-\r
-#define IDeckLinkInputCallback_VideoInputFrameArrived(This,videoFrame,audioPacket)     \\r
-    ( (This)->lpVtbl -> VideoInputFrameArrived(This,videoFrame,audioPacket) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkInputCallback_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkMemoryAllocator_INTERFACE_DEFINED__\r
-#define __IDeckLinkMemoryAllocator_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkMemoryAllocator */\r
-/* [helpstring][local][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkMemoryAllocator;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("B36EB6E7-9D29-4AA8-92EF-843B87A289E8")\r
-    IDeckLinkMemoryAllocator : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE AllocateBuffer( \r
-            unsigned long bufferSize,\r
-            /* [out] */ void **allocatedBuffer) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE ReleaseBuffer( \r
-            /* [in] */ void *buffer) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE Commit( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE Decommit( void) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkMemoryAllocatorVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkMemoryAllocator * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkMemoryAllocator * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkMemoryAllocator * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *AllocateBuffer )( \r
-            IDeckLinkMemoryAllocator * This,\r
-            unsigned long bufferSize,\r
-            /* [out] */ void **allocatedBuffer);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *ReleaseBuffer )( \r
-            IDeckLinkMemoryAllocator * This,\r
-            /* [in] */ void *buffer);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *Commit )( \r
-            IDeckLinkMemoryAllocator * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *Decommit )( \r
-            IDeckLinkMemoryAllocator * This);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkMemoryAllocatorVtbl;\r
-\r
-    interface IDeckLinkMemoryAllocator\r
-    {\r
-        CONST_VTBL struct IDeckLinkMemoryAllocatorVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkMemoryAllocator_QueryInterface(This,riid,ppvObject)   \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkMemoryAllocator_AddRef(This)  \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkMemoryAllocator_Release(This) \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkMemoryAllocator_AllocateBuffer(This,bufferSize,allocatedBuffer)       \\r
-    ( (This)->lpVtbl -> AllocateBuffer(This,bufferSize,allocatedBuffer) ) \r
-\r
-#define IDeckLinkMemoryAllocator_ReleaseBuffer(This,buffer)    \\r
-    ( (This)->lpVtbl -> ReleaseBuffer(This,buffer) ) \r
-\r
-#define IDeckLinkMemoryAllocator_Commit(This)  \\r
-    ( (This)->lpVtbl -> Commit(This) ) \r
-\r
-#define IDeckLinkMemoryAllocator_Decommit(This)        \\r
-    ( (This)->lpVtbl -> Decommit(This) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkMemoryAllocator_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkAudioOutputCallback_INTERFACE_DEFINED__\r
-#define __IDeckLinkAudioOutputCallback_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkAudioOutputCallback */\r
-/* [helpstring][local][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkAudioOutputCallback;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("403C681B-7F46-4A12-B993-2BB127084EE6")\r
-    IDeckLinkAudioOutputCallback : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE RenderAudioSamples( \r
-            BOOL preroll) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkAudioOutputCallbackVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkAudioOutputCallback * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkAudioOutputCallback * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkAudioOutputCallback * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *RenderAudioSamples )( \r
-            IDeckLinkAudioOutputCallback * This,\r
-            BOOL preroll);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkAudioOutputCallbackVtbl;\r
-\r
-    interface IDeckLinkAudioOutputCallback\r
-    {\r
-        CONST_VTBL struct IDeckLinkAudioOutputCallbackVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkAudioOutputCallback_QueryInterface(This,riid,ppvObject)       \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkAudioOutputCallback_AddRef(This)      \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkAudioOutputCallback_Release(This)     \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkAudioOutputCallback_RenderAudioSamples(This,preroll)  \\r
-    ( (This)->lpVtbl -> RenderAudioSamples(This,preroll) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkAudioOutputCallback_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkIterator_INTERFACE_DEFINED__\r
-#define __IDeckLinkIterator_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkIterator */\r
-/* [helpstring][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkIterator;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("74E936FC-CC28-4A67-81A0-1E94E52D4E69")\r
-    IDeckLinkIterator : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE Next( \r
-            /* [out] */ IDeckLink **deckLinkInstance) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkIteratorVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkIterator * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkIterator * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkIterator * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *Next )( \r
-            IDeckLinkIterator * This,\r
-            /* [out] */ IDeckLink **deckLinkInstance);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkIteratorVtbl;\r
-\r
-    interface IDeckLinkIterator\r
-    {\r
-        CONST_VTBL struct IDeckLinkIteratorVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkIterator_QueryInterface(This,riid,ppvObject)  \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkIterator_AddRef(This) \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkIterator_Release(This)        \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkIterator_Next(This,deckLinkInstance)  \\r
-    ( (This)->lpVtbl -> Next(This,deckLinkInstance) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkIterator_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkAPIInformation_INTERFACE_DEFINED__\r
-#define __IDeckLinkAPIInformation_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkAPIInformation */\r
-/* [helpstring][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkAPIInformation;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("7BEA3C68-730D-4322-AF34-8A7152B532A4")\r
-    IDeckLinkAPIInformation : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE GetFlag( \r
-            /* [in] */ BMDDeckLinkAPIInformationID cfgID,\r
-            /* [out] */ BOOL *value) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetInt( \r
-            /* [in] */ BMDDeckLinkAPIInformationID cfgID,\r
-            /* [out] */ LONGLONG *value) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetFloat( \r
-            /* [in] */ BMDDeckLinkAPIInformationID cfgID,\r
-            /* [out] */ double *value) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetString( \r
-            /* [in] */ BMDDeckLinkAPIInformationID cfgID,\r
-            /* [out] */ BSTR *value) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkAPIInformationVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkAPIInformation * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkAPIInformation * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkAPIInformation * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetFlag )( \r
-            IDeckLinkAPIInformation * This,\r
-            /* [in] */ BMDDeckLinkAPIInformationID cfgID,\r
-            /* [out] */ BOOL *value);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetInt )( \r
-            IDeckLinkAPIInformation * This,\r
-            /* [in] */ BMDDeckLinkAPIInformationID cfgID,\r
-            /* [out] */ LONGLONG *value);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetFloat )( \r
-            IDeckLinkAPIInformation * This,\r
-            /* [in] */ BMDDeckLinkAPIInformationID cfgID,\r
-            /* [out] */ double *value);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetString )( \r
-            IDeckLinkAPIInformation * This,\r
-            /* [in] */ BMDDeckLinkAPIInformationID cfgID,\r
-            /* [out] */ BSTR *value);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkAPIInformationVtbl;\r
-\r
-    interface IDeckLinkAPIInformation\r
-    {\r
-        CONST_VTBL struct IDeckLinkAPIInformationVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkAPIInformation_QueryInterface(This,riid,ppvObject)    \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkAPIInformation_AddRef(This)   \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkAPIInformation_Release(This)  \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkAPIInformation_GetFlag(This,cfgID,value)      \\r
-    ( (This)->lpVtbl -> GetFlag(This,cfgID,value) ) \r
-\r
-#define IDeckLinkAPIInformation_GetInt(This,cfgID,value)       \\r
-    ( (This)->lpVtbl -> GetInt(This,cfgID,value) ) \r
-\r
-#define IDeckLinkAPIInformation_GetFloat(This,cfgID,value)     \\r
-    ( (This)->lpVtbl -> GetFloat(This,cfgID,value) ) \r
-\r
-#define IDeckLinkAPIInformation_GetString(This,cfgID,value)    \\r
-    ( (This)->lpVtbl -> GetString(This,cfgID,value) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkAPIInformation_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkDisplayModeIterator_INTERFACE_DEFINED__\r
-#define __IDeckLinkDisplayModeIterator_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkDisplayModeIterator */\r
-/* [helpstring][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkDisplayModeIterator;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("455D741F-1779-4800-86F5-0B5D13D79751")\r
-    IDeckLinkDisplayModeIterator : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE Next( \r
-            /* [out] */ IDeckLinkDisplayMode **deckLinkDisplayMode) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkDisplayModeIteratorVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkDisplayModeIterator * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkDisplayModeIterator * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkDisplayModeIterator * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *Next )( \r
-            IDeckLinkDisplayModeIterator * This,\r
-            /* [out] */ IDeckLinkDisplayMode **deckLinkDisplayMode);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkDisplayModeIteratorVtbl;\r
-\r
-    interface IDeckLinkDisplayModeIterator\r
-    {\r
-        CONST_VTBL struct IDeckLinkDisplayModeIteratorVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkDisplayModeIterator_QueryInterface(This,riid,ppvObject)       \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkDisplayModeIterator_AddRef(This)      \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkDisplayModeIterator_Release(This)     \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkDisplayModeIterator_Next(This,deckLinkDisplayMode)    \\r
-    ( (This)->lpVtbl -> Next(This,deckLinkDisplayMode) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkDisplayModeIterator_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkDisplayMode_INTERFACE_DEFINED__\r
-#define __IDeckLinkDisplayMode_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkDisplayMode */\r
-/* [helpstring][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkDisplayMode;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("87451E84-2B7E-439E-A629-4393EA4A8550")\r
-    IDeckLinkDisplayMode : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE GetName( \r
-            /* [out] */ BSTR *name) = 0;\r
-        \r
-        virtual BMDDisplayMode STDMETHODCALLTYPE GetDisplayMode( void) = 0;\r
-        \r
-        virtual long STDMETHODCALLTYPE GetWidth( void) = 0;\r
-        \r
-        virtual long STDMETHODCALLTYPE GetHeight( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetFrameRate( \r
-            /* [out] */ BMDTimeValue *frameDuration,\r
-            /* [out] */ BMDTimeScale *timeScale) = 0;\r
-        \r
-        virtual BMDFieldDominance STDMETHODCALLTYPE GetFieldDominance( void) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkDisplayModeVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkDisplayMode * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkDisplayMode * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkDisplayMode * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetName )( \r
-            IDeckLinkDisplayMode * This,\r
-            /* [out] */ BSTR *name);\r
-        \r
-        BMDDisplayMode ( STDMETHODCALLTYPE *GetDisplayMode )( \r
-            IDeckLinkDisplayMode * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetWidth )( \r
-            IDeckLinkDisplayMode * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetHeight )( \r
-            IDeckLinkDisplayMode * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetFrameRate )( \r
-            IDeckLinkDisplayMode * This,\r
-            /* [out] */ BMDTimeValue *frameDuration,\r
-            /* [out] */ BMDTimeScale *timeScale);\r
-        \r
-        BMDFieldDominance ( STDMETHODCALLTYPE *GetFieldDominance )( \r
-            IDeckLinkDisplayMode * This);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkDisplayModeVtbl;\r
-\r
-    interface IDeckLinkDisplayMode\r
-    {\r
-        CONST_VTBL struct IDeckLinkDisplayModeVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkDisplayMode_QueryInterface(This,riid,ppvObject)       \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkDisplayMode_AddRef(This)      \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkDisplayMode_Release(This)     \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkDisplayMode_GetName(This,name)        \\r
-    ( (This)->lpVtbl -> GetName(This,name) ) \r
-\r
-#define IDeckLinkDisplayMode_GetDisplayMode(This)      \\r
-    ( (This)->lpVtbl -> GetDisplayMode(This) ) \r
-\r
-#define IDeckLinkDisplayMode_GetWidth(This)    \\r
-    ( (This)->lpVtbl -> GetWidth(This) ) \r
-\r
-#define IDeckLinkDisplayMode_GetHeight(This)   \\r
-    ( (This)->lpVtbl -> GetHeight(This) ) \r
-\r
-#define IDeckLinkDisplayMode_GetFrameRate(This,frameDuration,timeScale)        \\r
-    ( (This)->lpVtbl -> GetFrameRate(This,frameDuration,timeScale) ) \r
-\r
-#define IDeckLinkDisplayMode_GetFieldDominance(This)   \\r
-    ( (This)->lpVtbl -> GetFieldDominance(This) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkDisplayMode_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLink_INTERFACE_DEFINED__\r
-#define __IDeckLink_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLink */\r
-/* [helpstring][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLink;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("62BFF75D-6569-4E55-8D4D-66AA03829ABC")\r
-    IDeckLink : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE GetModelName( \r
-            /* [out] */ BSTR *modelName) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLink * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLink * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLink * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetModelName )( \r
-            IDeckLink * This,\r
-            /* [out] */ BSTR *modelName);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkVtbl;\r
-\r
-    interface IDeckLink\r
-    {\r
-        CONST_VTBL struct IDeckLinkVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLink_QueryInterface(This,riid,ppvObject)  \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLink_AddRef(This) \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLink_Release(This)        \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLink_GetModelName(This,modelName) \\r
-    ( (This)->lpVtbl -> GetModelName(This,modelName) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLink_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkOutput_INTERFACE_DEFINED__\r
-#define __IDeckLinkOutput_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkOutput */\r
-/* [helpstring][local][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkOutput;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("29228142-EB8C-4141-A621-F74026450955")\r
-    IDeckLinkOutput : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE DoesSupportVideoMode( \r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            /* [out] */ BMDDisplayModeSupport *result) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetDisplayModeIterator( \r
-            /* [out] */ IDeckLinkDisplayModeIterator **iterator) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetScreenPreviewCallback( \r
-            /* [in] */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE EnableVideoOutput( \r
-            BMDDisplayMode displayMode,\r
-            BMDVideoOutputFlags flags) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE DisableVideoOutput( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetVideoOutputFrameMemoryAllocator( \r
-            /* [in] */ IDeckLinkMemoryAllocator *theAllocator) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE CreateVideoFrame( \r
-            long width,\r
-            long height,\r
-            long rowBytes,\r
-            BMDPixelFormat pixelFormat,\r
-            BMDFrameFlags flags,\r
-            /* [out] */ IDeckLinkMutableVideoFrame **outFrame) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE CreateAncillaryData( \r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            /* [out] */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE DisplayVideoFrameSync( \r
-            /* [in] */ IDeckLinkVideoFrame *theFrame) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE ScheduleVideoFrame( \r
-            /* [in] */ IDeckLinkVideoFrame *theFrame,\r
-            BMDTimeValue displayTime,\r
-            BMDTimeValue displayDuration,\r
-            BMDTimeScale timeScale) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetScheduledFrameCompletionCallback( \r
-            /* [in] */ IDeckLinkVideoOutputCallback *theCallback) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetBufferedVideoFrameCount( \r
-            /* [out] */ unsigned long *bufferedFrameCount) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE EnableAudioOutput( \r
-            BMDAudioSampleRate sampleRate,\r
-            BMDAudioSampleType sampleType,\r
-            unsigned long channelCount,\r
-            BMDAudioOutputStreamType streamType) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE DisableAudioOutput( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE WriteAudioSamplesSync( \r
-            /* [in] */ void *buffer,\r
-            unsigned long sampleFrameCount,\r
-            /* [out] */ unsigned long *sampleFramesWritten) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE BeginAudioPreroll( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE EndAudioPreroll( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE ScheduleAudioSamples( \r
-            /* [in] */ void *buffer,\r
-            unsigned long sampleFrameCount,\r
-            BMDTimeValue streamTime,\r
-            BMDTimeScale timeScale,\r
-            /* [out] */ unsigned long *sampleFramesWritten) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetBufferedAudioSampleFrameCount( \r
-            /* [out] */ unsigned long *bufferedSampleFrameCount) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE FlushBufferedAudioSamples( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetAudioCallback( \r
-            /* [in] */ IDeckLinkAudioOutputCallback *theCallback) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE StartScheduledPlayback( \r
-            BMDTimeValue playbackStartTime,\r
-            BMDTimeScale timeScale,\r
-            double playbackSpeed) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE StopScheduledPlayback( \r
-            BMDTimeValue stopPlaybackAtTime,\r
-            /* [out] */ BMDTimeValue *actualStopTime,\r
-            BMDTimeScale timeScale) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE IsScheduledPlaybackRunning( \r
-            /* [out] */ BOOL *active) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetScheduledStreamTime( \r
-            BMDTimeScale desiredTimeScale,\r
-            /* [out] */ BMDTimeValue *streamTime,\r
-            /* [out] */ double *playbackSpeed) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetHardwareReferenceClock( \r
-            BMDTimeScale desiredTimeScale,\r
-            /* [out] */ BMDTimeValue *hardwareTime,\r
-            /* [out] */ BMDTimeValue *timeInFrame,\r
-            /* [out] */ BMDTimeValue *ticksPerFrame) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkOutputVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkOutput * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkOutput * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkOutput * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DoesSupportVideoMode )( \r
-            IDeckLinkOutput * This,\r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            /* [out] */ BMDDisplayModeSupport *result);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetDisplayModeIterator )( \r
-            IDeckLinkOutput * This,\r
-            /* [out] */ IDeckLinkDisplayModeIterator **iterator);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetScreenPreviewCallback )( \r
-            IDeckLinkOutput * This,\r
-            /* [in] */ IDeckLinkScreenPreviewCallback *previewCallback);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *EnableVideoOutput )( \r
-            IDeckLinkOutput * This,\r
-            BMDDisplayMode displayMode,\r
-            BMDVideoOutputFlags flags);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DisableVideoOutput )( \r
-            IDeckLinkOutput * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetVideoOutputFrameMemoryAllocator )( \r
-            IDeckLinkOutput * This,\r
-            /* [in] */ IDeckLinkMemoryAllocator *theAllocator);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *CreateVideoFrame )( \r
-            IDeckLinkOutput * This,\r
-            long width,\r
-            long height,\r
-            long rowBytes,\r
-            BMDPixelFormat pixelFormat,\r
-            BMDFrameFlags flags,\r
-            /* [out] */ IDeckLinkMutableVideoFrame **outFrame);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *CreateAncillaryData )( \r
-            IDeckLinkOutput * This,\r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            /* [out] */ IDeckLinkVideoFrameAncillary **outBuffer);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DisplayVideoFrameSync )( \r
-            IDeckLinkOutput * This,\r
-            /* [in] */ IDeckLinkVideoFrame *theFrame);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *ScheduleVideoFrame )( \r
-            IDeckLinkOutput * This,\r
-            /* [in] */ IDeckLinkVideoFrame *theFrame,\r
-            BMDTimeValue displayTime,\r
-            BMDTimeValue displayDuration,\r
-            BMDTimeScale timeScale);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetScheduledFrameCompletionCallback )( \r
-            IDeckLinkOutput * This,\r
-            /* [in] */ IDeckLinkVideoOutputCallback *theCallback);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetBufferedVideoFrameCount )( \r
-            IDeckLinkOutput * This,\r
-            /* [out] */ unsigned long *bufferedFrameCount);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *EnableAudioOutput )( \r
-            IDeckLinkOutput * This,\r
-            BMDAudioSampleRate sampleRate,\r
-            BMDAudioSampleType sampleType,\r
-            unsigned long channelCount,\r
-            BMDAudioOutputStreamType streamType);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DisableAudioOutput )( \r
-            IDeckLinkOutput * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *WriteAudioSamplesSync )( \r
-            IDeckLinkOutput * This,\r
-            /* [in] */ void *buffer,\r
-            unsigned long sampleFrameCount,\r
-            /* [out] */ unsigned long *sampleFramesWritten);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *BeginAudioPreroll )( \r
-            IDeckLinkOutput * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *EndAudioPreroll )( \r
-            IDeckLinkOutput * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *ScheduleAudioSamples )( \r
-            IDeckLinkOutput * This,\r
-            /* [in] */ void *buffer,\r
-            unsigned long sampleFrameCount,\r
-            BMDTimeValue streamTime,\r
-            BMDTimeScale timeScale,\r
-            /* [out] */ unsigned long *sampleFramesWritten);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetBufferedAudioSampleFrameCount )( \r
-            IDeckLinkOutput * This,\r
-            /* [out] */ unsigned long *bufferedSampleFrameCount);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *FlushBufferedAudioSamples )( \r
-            IDeckLinkOutput * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetAudioCallback )( \r
-            IDeckLinkOutput * This,\r
-            /* [in] */ IDeckLinkAudioOutputCallback *theCallback);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *StartScheduledPlayback )( \r
-            IDeckLinkOutput * This,\r
-            BMDTimeValue playbackStartTime,\r
-            BMDTimeScale timeScale,\r
-            double playbackSpeed);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *StopScheduledPlayback )( \r
-            IDeckLinkOutput * This,\r
-            BMDTimeValue stopPlaybackAtTime,\r
-            /* [out] */ BMDTimeValue *actualStopTime,\r
-            BMDTimeScale timeScale);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *IsScheduledPlaybackRunning )( \r
-            IDeckLinkOutput * This,\r
-            /* [out] */ BOOL *active);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetScheduledStreamTime )( \r
-            IDeckLinkOutput * This,\r
-            BMDTimeScale desiredTimeScale,\r
-            /* [out] */ BMDTimeValue *streamTime,\r
-            /* [out] */ double *playbackSpeed);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetHardwareReferenceClock )( \r
-            IDeckLinkOutput * This,\r
-            BMDTimeScale desiredTimeScale,\r
-            /* [out] */ BMDTimeValue *hardwareTime,\r
-            /* [out] */ BMDTimeValue *timeInFrame,\r
-            /* [out] */ BMDTimeValue *ticksPerFrame);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkOutputVtbl;\r
-\r
-    interface IDeckLinkOutput\r
-    {\r
-        CONST_VTBL struct IDeckLinkOutputVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkOutput_QueryInterface(This,riid,ppvObject)    \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkOutput_AddRef(This)   \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkOutput_Release(This)  \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkOutput_DoesSupportVideoMode(This,displayMode,pixelFormat,result)      \\r
-    ( (This)->lpVtbl -> DoesSupportVideoMode(This,displayMode,pixelFormat,result) ) \r
-\r
-#define IDeckLinkOutput_GetDisplayModeIterator(This,iterator)  \\r
-    ( (This)->lpVtbl -> GetDisplayModeIterator(This,iterator) ) \r
-\r
-#define IDeckLinkOutput_SetScreenPreviewCallback(This,previewCallback) \\r
-    ( (This)->lpVtbl -> SetScreenPreviewCallback(This,previewCallback) ) \r
-\r
-#define IDeckLinkOutput_EnableVideoOutput(This,displayMode,flags)      \\r
-    ( (This)->lpVtbl -> EnableVideoOutput(This,displayMode,flags) ) \r
-\r
-#define IDeckLinkOutput_DisableVideoOutput(This)       \\r
-    ( (This)->lpVtbl -> DisableVideoOutput(This) ) \r
-\r
-#define IDeckLinkOutput_SetVideoOutputFrameMemoryAllocator(This,theAllocator)  \\r
-    ( (This)->lpVtbl -> SetVideoOutputFrameMemoryAllocator(This,theAllocator) ) \r
-\r
-#define IDeckLinkOutput_CreateVideoFrame(This,width,height,rowBytes,pixelFormat,flags,outFrame)        \\r
-    ( (This)->lpVtbl -> CreateVideoFrame(This,width,height,rowBytes,pixelFormat,flags,outFrame) ) \r
-\r
-#define IDeckLinkOutput_CreateAncillaryData(This,displayMode,pixelFormat,outBuffer)    \\r
-    ( (This)->lpVtbl -> CreateAncillaryData(This,displayMode,pixelFormat,outBuffer) ) \r
-\r
-#define IDeckLinkOutput_DisplayVideoFrameSync(This,theFrame)   \\r
-    ( (This)->lpVtbl -> DisplayVideoFrameSync(This,theFrame) ) \r
-\r
-#define IDeckLinkOutput_ScheduleVideoFrame(This,theFrame,displayTime,displayDuration,timeScale)        \\r
-    ( (This)->lpVtbl -> ScheduleVideoFrame(This,theFrame,displayTime,displayDuration,timeScale) ) \r
-\r
-#define IDeckLinkOutput_SetScheduledFrameCompletionCallback(This,theCallback)  \\r
-    ( (This)->lpVtbl -> SetScheduledFrameCompletionCallback(This,theCallback) ) \r
-\r
-#define IDeckLinkOutput_GetBufferedVideoFrameCount(This,bufferedFrameCount)    \\r
-    ( (This)->lpVtbl -> GetBufferedVideoFrameCount(This,bufferedFrameCount) ) \r
-\r
-#define IDeckLinkOutput_EnableAudioOutput(This,sampleRate,sampleType,channelCount,streamType)  \\r
-    ( (This)->lpVtbl -> EnableAudioOutput(This,sampleRate,sampleType,channelCount,streamType) ) \r
-\r
-#define IDeckLinkOutput_DisableAudioOutput(This)       \\r
-    ( (This)->lpVtbl -> DisableAudioOutput(This) ) \r
-\r
-#define IDeckLinkOutput_WriteAudioSamplesSync(This,buffer,sampleFrameCount,sampleFramesWritten)        \\r
-    ( (This)->lpVtbl -> WriteAudioSamplesSync(This,buffer,sampleFrameCount,sampleFramesWritten) ) \r
-\r
-#define IDeckLinkOutput_BeginAudioPreroll(This)        \\r
-    ( (This)->lpVtbl -> BeginAudioPreroll(This) ) \r
-\r
-#define IDeckLinkOutput_EndAudioPreroll(This)  \\r
-    ( (This)->lpVtbl -> EndAudioPreroll(This) ) \r
-\r
-#define IDeckLinkOutput_ScheduleAudioSamples(This,buffer,sampleFrameCount,streamTime,timeScale,sampleFramesWritten)    \\r
-    ( (This)->lpVtbl -> ScheduleAudioSamples(This,buffer,sampleFrameCount,streamTime,timeScale,sampleFramesWritten) ) \r
-\r
-#define IDeckLinkOutput_GetBufferedAudioSampleFrameCount(This,bufferedSampleFrameCount)        \\r
-    ( (This)->lpVtbl -> GetBufferedAudioSampleFrameCount(This,bufferedSampleFrameCount) ) \r
-\r
-#define IDeckLinkOutput_FlushBufferedAudioSamples(This)        \\r
-    ( (This)->lpVtbl -> FlushBufferedAudioSamples(This) ) \r
-\r
-#define IDeckLinkOutput_SetAudioCallback(This,theCallback)     \\r
-    ( (This)->lpVtbl -> SetAudioCallback(This,theCallback) ) \r
-\r
-#define IDeckLinkOutput_StartScheduledPlayback(This,playbackStartTime,timeScale,playbackSpeed) \\r
-    ( (This)->lpVtbl -> StartScheduledPlayback(This,playbackStartTime,timeScale,playbackSpeed) ) \r
-\r
-#define IDeckLinkOutput_StopScheduledPlayback(This,stopPlaybackAtTime,actualStopTime,timeScale)        \\r
-    ( (This)->lpVtbl -> StopScheduledPlayback(This,stopPlaybackAtTime,actualStopTime,timeScale) ) \r
-\r
-#define IDeckLinkOutput_IsScheduledPlaybackRunning(This,active)        \\r
-    ( (This)->lpVtbl -> IsScheduledPlaybackRunning(This,active) ) \r
-\r
-#define IDeckLinkOutput_GetScheduledStreamTime(This,desiredTimeScale,streamTime,playbackSpeed) \\r
-    ( (This)->lpVtbl -> GetScheduledStreamTime(This,desiredTimeScale,streamTime,playbackSpeed) ) \r
-\r
-#define IDeckLinkOutput_GetHardwareReferenceClock(This,desiredTimeScale,hardwareTime,timeInFrame,ticksPerFrame)        \\r
-    ( (This)->lpVtbl -> GetHardwareReferenceClock(This,desiredTimeScale,hardwareTime,timeInFrame,ticksPerFrame) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkOutput_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkInput_INTERFACE_DEFINED__\r
-#define __IDeckLinkInput_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkInput */\r
-/* [helpstring][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkInput;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("300C135A-9F43-48E2-9906-6D7911D93CF1")\r
-    IDeckLinkInput : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE DoesSupportVideoMode( \r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            /* [out] */ BMDDisplayModeSupport *result) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetDisplayModeIterator( \r
-            /* [out] */ IDeckLinkDisplayModeIterator **iterator) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetScreenPreviewCallback( \r
-            /* [in] */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE EnableVideoInput( \r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            BMDVideoInputFlags flags) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE DisableVideoInput( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetAvailableVideoFrameCount( \r
-            /* [out] */ unsigned long *availableFrameCount) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE EnableAudioInput( \r
-            BMDAudioSampleRate sampleRate,\r
-            BMDAudioSampleType sampleType,\r
-            unsigned long channelCount) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE DisableAudioInput( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetAvailableAudioSampleFrameCount( \r
-            /* [out] */ unsigned long *availableSampleFrameCount) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE StartStreams( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE StopStreams( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE PauseStreams( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE FlushStreams( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetCallback( \r
-            /* [in] */ IDeckLinkInputCallback *theCallback) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetHardwareReferenceClock( \r
-            BMDTimeScale desiredTimeScale,\r
-            /* [out] */ BMDTimeValue *hardwareTime,\r
-            /* [out] */ BMDTimeValue *timeInFrame,\r
-            /* [out] */ BMDTimeValue *ticksPerFrame) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkInputVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkInput * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkInput * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkInput * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DoesSupportVideoMode )( \r
-            IDeckLinkInput * This,\r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            /* [out] */ BMDDisplayModeSupport *result);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetDisplayModeIterator )( \r
-            IDeckLinkInput * This,\r
-            /* [out] */ IDeckLinkDisplayModeIterator **iterator);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetScreenPreviewCallback )( \r
-            IDeckLinkInput * This,\r
-            /* [in] */ IDeckLinkScreenPreviewCallback *previewCallback);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *EnableVideoInput )( \r
-            IDeckLinkInput * This,\r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            BMDVideoInputFlags flags);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DisableVideoInput )( \r
-            IDeckLinkInput * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetAvailableVideoFrameCount )( \r
-            IDeckLinkInput * This,\r
-            /* [out] */ unsigned long *availableFrameCount);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *EnableAudioInput )( \r
-            IDeckLinkInput * This,\r
-            BMDAudioSampleRate sampleRate,\r
-            BMDAudioSampleType sampleType,\r
-            unsigned long channelCount);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DisableAudioInput )( \r
-            IDeckLinkInput * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetAvailableAudioSampleFrameCount )( \r
-            IDeckLinkInput * This,\r
-            /* [out] */ unsigned long *availableSampleFrameCount);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *StartStreams )( \r
-            IDeckLinkInput * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *StopStreams )( \r
-            IDeckLinkInput * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *PauseStreams )( \r
-            IDeckLinkInput * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *FlushStreams )( \r
-            IDeckLinkInput * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetCallback )( \r
-            IDeckLinkInput * This,\r
-            /* [in] */ IDeckLinkInputCallback *theCallback);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetHardwareReferenceClock )( \r
-            IDeckLinkInput * This,\r
-            BMDTimeScale desiredTimeScale,\r
-            /* [out] */ BMDTimeValue *hardwareTime,\r
-            /* [out] */ BMDTimeValue *timeInFrame,\r
-            /* [out] */ BMDTimeValue *ticksPerFrame);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkInputVtbl;\r
-\r
-    interface IDeckLinkInput\r
-    {\r
-        CONST_VTBL struct IDeckLinkInputVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkInput_QueryInterface(This,riid,ppvObject)     \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkInput_AddRef(This)    \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkInput_Release(This)   \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkInput_DoesSupportVideoMode(This,displayMode,pixelFormat,result)       \\r
-    ( (This)->lpVtbl -> DoesSupportVideoMode(This,displayMode,pixelFormat,result) ) \r
-\r
-#define IDeckLinkInput_GetDisplayModeIterator(This,iterator)   \\r
-    ( (This)->lpVtbl -> GetDisplayModeIterator(This,iterator) ) \r
-\r
-#define IDeckLinkInput_SetScreenPreviewCallback(This,previewCallback)  \\r
-    ( (This)->lpVtbl -> SetScreenPreviewCallback(This,previewCallback) ) \r
-\r
-#define IDeckLinkInput_EnableVideoInput(This,displayMode,pixelFormat,flags)    \\r
-    ( (This)->lpVtbl -> EnableVideoInput(This,displayMode,pixelFormat,flags) ) \r
-\r
-#define IDeckLinkInput_DisableVideoInput(This) \\r
-    ( (This)->lpVtbl -> DisableVideoInput(This) ) \r
-\r
-#define IDeckLinkInput_GetAvailableVideoFrameCount(This,availableFrameCount)   \\r
-    ( (This)->lpVtbl -> GetAvailableVideoFrameCount(This,availableFrameCount) ) \r
-\r
-#define IDeckLinkInput_EnableAudioInput(This,sampleRate,sampleType,channelCount)       \\r
-    ( (This)->lpVtbl -> EnableAudioInput(This,sampleRate,sampleType,channelCount) ) \r
-\r
-#define IDeckLinkInput_DisableAudioInput(This) \\r
-    ( (This)->lpVtbl -> DisableAudioInput(This) ) \r
-\r
-#define IDeckLinkInput_GetAvailableAudioSampleFrameCount(This,availableSampleFrameCount)       \\r
-    ( (This)->lpVtbl -> GetAvailableAudioSampleFrameCount(This,availableSampleFrameCount) ) \r
-\r
-#define IDeckLinkInput_StartStreams(This)      \\r
-    ( (This)->lpVtbl -> StartStreams(This) ) \r
-\r
-#define IDeckLinkInput_StopStreams(This)       \\r
-    ( (This)->lpVtbl -> StopStreams(This) ) \r
-\r
-#define IDeckLinkInput_PauseStreams(This)      \\r
-    ( (This)->lpVtbl -> PauseStreams(This) ) \r
-\r
-#define IDeckLinkInput_FlushStreams(This)      \\r
-    ( (This)->lpVtbl -> FlushStreams(This) ) \r
-\r
-#define IDeckLinkInput_SetCallback(This,theCallback)   \\r
-    ( (This)->lpVtbl -> SetCallback(This,theCallback) ) \r
-\r
-#define IDeckLinkInput_GetHardwareReferenceClock(This,desiredTimeScale,hardwareTime,timeInFrame,ticksPerFrame) \\r
-    ( (This)->lpVtbl -> GetHardwareReferenceClock(This,desiredTimeScale,hardwareTime,timeInFrame,ticksPerFrame) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkInput_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkTimecode_INTERFACE_DEFINED__\r
-#define __IDeckLinkTimecode_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkTimecode */\r
-/* [helpstring][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkTimecode;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("EFB9BCA6-A521-44F7-BD69-2332F24D9EE6")\r
-    IDeckLinkTimecode : public IUnknown\r
-    {\r
-    public:\r
-        virtual BMDTimecodeBCD STDMETHODCALLTYPE GetBCD( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetComponents( \r
-            /* [out] */ unsigned char *hours,\r
-            /* [out] */ unsigned char *minutes,\r
-            /* [out] */ unsigned char *seconds,\r
-            /* [out] */ unsigned char *frames) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetString( \r
-            /* [out] */ BSTR *timecode) = 0;\r
-        \r
-        virtual BMDTimecodeFlags STDMETHODCALLTYPE GetFlags( void) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkTimecodeVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkTimecode * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkTimecode * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkTimecode * This);\r
-        \r
-        BMDTimecodeBCD ( STDMETHODCALLTYPE *GetBCD )( \r
-            IDeckLinkTimecode * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetComponents )( \r
-            IDeckLinkTimecode * This,\r
-            /* [out] */ unsigned char *hours,\r
-            /* [out] */ unsigned char *minutes,\r
-            /* [out] */ unsigned char *seconds,\r
-            /* [out] */ unsigned char *frames);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetString )( \r
-            IDeckLinkTimecode * This,\r
-            /* [out] */ BSTR *timecode);\r
-        \r
-        BMDTimecodeFlags ( STDMETHODCALLTYPE *GetFlags )( \r
-            IDeckLinkTimecode * This);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkTimecodeVtbl;\r
-\r
-    interface IDeckLinkTimecode\r
-    {\r
-        CONST_VTBL struct IDeckLinkTimecodeVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkTimecode_QueryInterface(This,riid,ppvObject)  \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkTimecode_AddRef(This) \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkTimecode_Release(This)        \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkTimecode_GetBCD(This) \\r
-    ( (This)->lpVtbl -> GetBCD(This) ) \r
-\r
-#define IDeckLinkTimecode_GetComponents(This,hours,minutes,seconds,frames)     \\r
-    ( (This)->lpVtbl -> GetComponents(This,hours,minutes,seconds,frames) ) \r
-\r
-#define IDeckLinkTimecode_GetString(This,timecode)     \\r
-    ( (This)->lpVtbl -> GetString(This,timecode) ) \r
-\r
-#define IDeckLinkTimecode_GetFlags(This)       \\r
-    ( (This)->lpVtbl -> GetFlags(This) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkTimecode_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkVideoFrame_INTERFACE_DEFINED__\r
-#define __IDeckLinkVideoFrame_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkVideoFrame */\r
-/* [helpstring][local][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkVideoFrame;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("A8D8238E-6B18-4196-99E1-5AF717B83D32")\r
-    IDeckLinkVideoFrame : public IUnknown\r
-    {\r
-    public:\r
-        virtual long STDMETHODCALLTYPE GetWidth( void) = 0;\r
-        \r
-        virtual long STDMETHODCALLTYPE GetHeight( void) = 0;\r
-        \r
-        virtual long STDMETHODCALLTYPE GetRowBytes( void) = 0;\r
-        \r
-        virtual BMDPixelFormat STDMETHODCALLTYPE GetPixelFormat( void) = 0;\r
-        \r
-        virtual BMDFrameFlags STDMETHODCALLTYPE GetFlags( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetBytes( \r
-            /* [out] */ void **buffer) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetTimecode( \r
-            BMDTimecodeFormat format,\r
-            /* [out] */ IDeckLinkTimecode **timecode) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetAncillaryData( \r
-            /* [out] */ IDeckLinkVideoFrameAncillary **ancillary) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkVideoFrameVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkVideoFrame * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkVideoFrame * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkVideoFrame * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetWidth )( \r
-            IDeckLinkVideoFrame * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetHeight )( \r
-            IDeckLinkVideoFrame * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetRowBytes )( \r
-            IDeckLinkVideoFrame * This);\r
-        \r
-        BMDPixelFormat ( STDMETHODCALLTYPE *GetPixelFormat )( \r
-            IDeckLinkVideoFrame * This);\r
-        \r
-        BMDFrameFlags ( STDMETHODCALLTYPE *GetFlags )( \r
-            IDeckLinkVideoFrame * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetBytes )( \r
-            IDeckLinkVideoFrame * This,\r
-            /* [out] */ void **buffer);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetTimecode )( \r
-            IDeckLinkVideoFrame * This,\r
-            BMDTimecodeFormat format,\r
-            /* [out] */ IDeckLinkTimecode **timecode);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetAncillaryData )( \r
-            IDeckLinkVideoFrame * This,\r
-            /* [out] */ IDeckLinkVideoFrameAncillary **ancillary);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkVideoFrameVtbl;\r
-\r
-    interface IDeckLinkVideoFrame\r
-    {\r
-        CONST_VTBL struct IDeckLinkVideoFrameVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkVideoFrame_QueryInterface(This,riid,ppvObject)        \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkVideoFrame_AddRef(This)       \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkVideoFrame_Release(This)      \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkVideoFrame_GetWidth(This)     \\r
-    ( (This)->lpVtbl -> GetWidth(This) ) \r
-\r
-#define IDeckLinkVideoFrame_GetHeight(This)    \\r
-    ( (This)->lpVtbl -> GetHeight(This) ) \r
-\r
-#define IDeckLinkVideoFrame_GetRowBytes(This)  \\r
-    ( (This)->lpVtbl -> GetRowBytes(This) ) \r
-\r
-#define IDeckLinkVideoFrame_GetPixelFormat(This)       \\r
-    ( (This)->lpVtbl -> GetPixelFormat(This) ) \r
-\r
-#define IDeckLinkVideoFrame_GetFlags(This)     \\r
-    ( (This)->lpVtbl -> GetFlags(This) ) \r
-\r
-#define IDeckLinkVideoFrame_GetBytes(This,buffer)      \\r
-    ( (This)->lpVtbl -> GetBytes(This,buffer) ) \r
-\r
-#define IDeckLinkVideoFrame_GetTimecode(This,format,timecode)  \\r
-    ( (This)->lpVtbl -> GetTimecode(This,format,timecode) ) \r
-\r
-#define IDeckLinkVideoFrame_GetAncillaryData(This,ancillary)   \\r
-    ( (This)->lpVtbl -> GetAncillaryData(This,ancillary) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkVideoFrame_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkMutableVideoFrame_INTERFACE_DEFINED__\r
-#define __IDeckLinkMutableVideoFrame_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkMutableVideoFrame */\r
-/* [helpstring][local][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkMutableVideoFrame;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("46FCEE00-B4E6-43D0-91C0-023A7FCEB34F")\r
-    IDeckLinkMutableVideoFrame : public IDeckLinkVideoFrame\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE SetFlags( \r
-            BMDFrameFlags newFlags) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetTimecode( \r
-            BMDTimecodeFormat format,\r
-            /* [in] */ IDeckLinkTimecode *timecode) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetTimecodeFromComponents( \r
-            BMDTimecodeFormat format,\r
-            unsigned char hours,\r
-            unsigned char minutes,\r
-            unsigned char seconds,\r
-            unsigned char frames,\r
-            BMDTimecodeFlags flags) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetAncillaryData( \r
-            /* [in] */ IDeckLinkVideoFrameAncillary *ancillary) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkMutableVideoFrameVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkMutableVideoFrame * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkMutableVideoFrame * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkMutableVideoFrame * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetWidth )( \r
-            IDeckLinkMutableVideoFrame * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetHeight )( \r
-            IDeckLinkMutableVideoFrame * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetRowBytes )( \r
-            IDeckLinkMutableVideoFrame * This);\r
-        \r
-        BMDPixelFormat ( STDMETHODCALLTYPE *GetPixelFormat )( \r
-            IDeckLinkMutableVideoFrame * This);\r
-        \r
-        BMDFrameFlags ( STDMETHODCALLTYPE *GetFlags )( \r
-            IDeckLinkMutableVideoFrame * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetBytes )( \r
-            IDeckLinkMutableVideoFrame * This,\r
-            /* [out] */ void **buffer);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetTimecode )( \r
-            IDeckLinkMutableVideoFrame * This,\r
-            BMDTimecodeFormat format,\r
-            /* [out] */ IDeckLinkTimecode **timecode);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetAncillaryData )( \r
-            IDeckLinkMutableVideoFrame * This,\r
-            /* [out] */ IDeckLinkVideoFrameAncillary **ancillary);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetFlags )( \r
-            IDeckLinkMutableVideoFrame * This,\r
-            BMDFrameFlags newFlags);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetTimecode )( \r
-            IDeckLinkMutableVideoFrame * This,\r
-            BMDTimecodeFormat format,\r
-            /* [in] */ IDeckLinkTimecode *timecode);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetTimecodeFromComponents )( \r
-            IDeckLinkMutableVideoFrame * This,\r
-            BMDTimecodeFormat format,\r
-            unsigned char hours,\r
-            unsigned char minutes,\r
-            unsigned char seconds,\r
-            unsigned char frames,\r
-            BMDTimecodeFlags flags);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetAncillaryData )( \r
-            IDeckLinkMutableVideoFrame * This,\r
-            /* [in] */ IDeckLinkVideoFrameAncillary *ancillary);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkMutableVideoFrameVtbl;\r
-\r
-    interface IDeckLinkMutableVideoFrame\r
-    {\r
-        CONST_VTBL struct IDeckLinkMutableVideoFrameVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkMutableVideoFrame_QueryInterface(This,riid,ppvObject) \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkMutableVideoFrame_AddRef(This)        \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkMutableVideoFrame_Release(This)       \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkMutableVideoFrame_GetWidth(This)      \\r
-    ( (This)->lpVtbl -> GetWidth(This) ) \r
-\r
-#define IDeckLinkMutableVideoFrame_GetHeight(This)     \\r
-    ( (This)->lpVtbl -> GetHeight(This) ) \r
-\r
-#define IDeckLinkMutableVideoFrame_GetRowBytes(This)   \\r
-    ( (This)->lpVtbl -> GetRowBytes(This) ) \r
-\r
-#define IDeckLinkMutableVideoFrame_GetPixelFormat(This)        \\r
-    ( (This)->lpVtbl -> GetPixelFormat(This) ) \r
-\r
-#define IDeckLinkMutableVideoFrame_GetFlags(This)      \\r
-    ( (This)->lpVtbl -> GetFlags(This) ) \r
-\r
-#define IDeckLinkMutableVideoFrame_GetBytes(This,buffer)       \\r
-    ( (This)->lpVtbl -> GetBytes(This,buffer) ) \r
-\r
-#define IDeckLinkMutableVideoFrame_GetTimecode(This,format,timecode)   \\r
-    ( (This)->lpVtbl -> GetTimecode(This,format,timecode) ) \r
-\r
-#define IDeckLinkMutableVideoFrame_GetAncillaryData(This,ancillary)    \\r
-    ( (This)->lpVtbl -> GetAncillaryData(This,ancillary) ) \r
-\r
-\r
-#define IDeckLinkMutableVideoFrame_SetFlags(This,newFlags)     \\r
-    ( (This)->lpVtbl -> SetFlags(This,newFlags) ) \r
-\r
-#define IDeckLinkMutableVideoFrame_SetTimecode(This,format,timecode)   \\r
-    ( (This)->lpVtbl -> SetTimecode(This,format,timecode) ) \r
-\r
-#define IDeckLinkMutableVideoFrame_SetTimecodeFromComponents(This,format,hours,minutes,seconds,frames,flags)   \\r
-    ( (This)->lpVtbl -> SetTimecodeFromComponents(This,format,hours,minutes,seconds,frames,flags) ) \r
-\r
-#define IDeckLinkMutableVideoFrame_SetAncillaryData(This,ancillary)    \\r
-    ( (This)->lpVtbl -> SetAncillaryData(This,ancillary) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkMutableVideoFrame_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkVideoInputFrame_INTERFACE_DEFINED__\r
-#define __IDeckLinkVideoInputFrame_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkVideoInputFrame */\r
-/* [helpstring][local][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkVideoInputFrame;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("9A74FA41-AE9F-47AC-8CF4-01F42DD59965")\r
-    IDeckLinkVideoInputFrame : public IDeckLinkVideoFrame\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE GetStreamTime( \r
-            /* [out] */ BMDTimeValue *frameTime,\r
-            /* [out] */ BMDTimeValue *frameDuration,\r
-            BMDTimeScale timeScale) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetHardwareReferenceTimestamp( \r
-            BMDTimeScale timeScale,\r
-            /* [out] */ BMDTimeValue *frameTime,\r
-            /* [out] */ BMDTimeValue *frameDuration) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkVideoInputFrameVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkVideoInputFrame * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkVideoInputFrame * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkVideoInputFrame * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetWidth )( \r
-            IDeckLinkVideoInputFrame * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetHeight )( \r
-            IDeckLinkVideoInputFrame * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetRowBytes )( \r
-            IDeckLinkVideoInputFrame * This);\r
-        \r
-        BMDPixelFormat ( STDMETHODCALLTYPE *GetPixelFormat )( \r
-            IDeckLinkVideoInputFrame * This);\r
-        \r
-        BMDFrameFlags ( STDMETHODCALLTYPE *GetFlags )( \r
-            IDeckLinkVideoInputFrame * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetBytes )( \r
-            IDeckLinkVideoInputFrame * This,\r
-            /* [out] */ void **buffer);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetTimecode )( \r
-            IDeckLinkVideoInputFrame * This,\r
-            BMDTimecodeFormat format,\r
-            /* [out] */ IDeckLinkTimecode **timecode);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetAncillaryData )( \r
-            IDeckLinkVideoInputFrame * This,\r
-            /* [out] */ IDeckLinkVideoFrameAncillary **ancillary);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetStreamTime )( \r
-            IDeckLinkVideoInputFrame * This,\r
-            /* [out] */ BMDTimeValue *frameTime,\r
-            /* [out] */ BMDTimeValue *frameDuration,\r
-            BMDTimeScale timeScale);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetHardwareReferenceTimestamp )( \r
-            IDeckLinkVideoInputFrame * This,\r
-            BMDTimeScale timeScale,\r
-            /* [out] */ BMDTimeValue *frameTime,\r
-            /* [out] */ BMDTimeValue *frameDuration);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkVideoInputFrameVtbl;\r
-\r
-    interface IDeckLinkVideoInputFrame\r
-    {\r
-        CONST_VTBL struct IDeckLinkVideoInputFrameVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkVideoInputFrame_QueryInterface(This,riid,ppvObject)   \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkVideoInputFrame_AddRef(This)  \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkVideoInputFrame_Release(This) \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkVideoInputFrame_GetWidth(This)        \\r
-    ( (This)->lpVtbl -> GetWidth(This) ) \r
-\r
-#define IDeckLinkVideoInputFrame_GetHeight(This)       \\r
-    ( (This)->lpVtbl -> GetHeight(This) ) \r
-\r
-#define IDeckLinkVideoInputFrame_GetRowBytes(This)     \\r
-    ( (This)->lpVtbl -> GetRowBytes(This) ) \r
-\r
-#define IDeckLinkVideoInputFrame_GetPixelFormat(This)  \\r
-    ( (This)->lpVtbl -> GetPixelFormat(This) ) \r
-\r
-#define IDeckLinkVideoInputFrame_GetFlags(This)        \\r
-    ( (This)->lpVtbl -> GetFlags(This) ) \r
-\r
-#define IDeckLinkVideoInputFrame_GetBytes(This,buffer) \\r
-    ( (This)->lpVtbl -> GetBytes(This,buffer) ) \r
-\r
-#define IDeckLinkVideoInputFrame_GetTimecode(This,format,timecode)     \\r
-    ( (This)->lpVtbl -> GetTimecode(This,format,timecode) ) \r
-\r
-#define IDeckLinkVideoInputFrame_GetAncillaryData(This,ancillary)      \\r
-    ( (This)->lpVtbl -> GetAncillaryData(This,ancillary) ) \r
-\r
-\r
-#define IDeckLinkVideoInputFrame_GetStreamTime(This,frameTime,frameDuration,timeScale) \\r
-    ( (This)->lpVtbl -> GetStreamTime(This,frameTime,frameDuration,timeScale) ) \r
-\r
-#define IDeckLinkVideoInputFrame_GetHardwareReferenceTimestamp(This,timeScale,frameTime,frameDuration) \\r
-    ( (This)->lpVtbl -> GetHardwareReferenceTimestamp(This,timeScale,frameTime,frameDuration) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkVideoInputFrame_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkVideoFrameAncillary_INTERFACE_DEFINED__\r
-#define __IDeckLinkVideoFrameAncillary_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkVideoFrameAncillary */\r
-/* [helpstring][local][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkVideoFrameAncillary;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("732E723C-D1A4-4E29-9E8E-4A88797A0004")\r
-    IDeckLinkVideoFrameAncillary : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE GetBufferForVerticalBlankingLine( \r
-            unsigned long lineNumber,\r
-            /* [out] */ void **buffer) = 0;\r
-        \r
-        virtual BMDPixelFormat STDMETHODCALLTYPE GetPixelFormat( void) = 0;\r
-        \r
-        virtual BMDDisplayMode STDMETHODCALLTYPE GetDisplayMode( void) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkVideoFrameAncillaryVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkVideoFrameAncillary * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkVideoFrameAncillary * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkVideoFrameAncillary * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetBufferForVerticalBlankingLine )( \r
-            IDeckLinkVideoFrameAncillary * This,\r
-            unsigned long lineNumber,\r
-            /* [out] */ void **buffer);\r
-        \r
-        BMDPixelFormat ( STDMETHODCALLTYPE *GetPixelFormat )( \r
-            IDeckLinkVideoFrameAncillary * This);\r
-        \r
-        BMDDisplayMode ( STDMETHODCALLTYPE *GetDisplayMode )( \r
-            IDeckLinkVideoFrameAncillary * This);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkVideoFrameAncillaryVtbl;\r
-\r
-    interface IDeckLinkVideoFrameAncillary\r
-    {\r
-        CONST_VTBL struct IDeckLinkVideoFrameAncillaryVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkVideoFrameAncillary_QueryInterface(This,riid,ppvObject)       \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkVideoFrameAncillary_AddRef(This)      \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkVideoFrameAncillary_Release(This)     \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkVideoFrameAncillary_GetBufferForVerticalBlankingLine(This,lineNumber,buffer)  \\r
-    ( (This)->lpVtbl -> GetBufferForVerticalBlankingLine(This,lineNumber,buffer) ) \r
-\r
-#define IDeckLinkVideoFrameAncillary_GetPixelFormat(This)      \\r
-    ( (This)->lpVtbl -> GetPixelFormat(This) ) \r
-\r
-#define IDeckLinkVideoFrameAncillary_GetDisplayMode(This)      \\r
-    ( (This)->lpVtbl -> GetDisplayMode(This) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkVideoFrameAncillary_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkAudioInputPacket_INTERFACE_DEFINED__\r
-#define __IDeckLinkAudioInputPacket_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkAudioInputPacket */\r
-/* [helpstring][local][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkAudioInputPacket;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("E43D5870-2894-11DE-8C30-0800200C9A66")\r
-    IDeckLinkAudioInputPacket : public IUnknown\r
-    {\r
-    public:\r
-        virtual long STDMETHODCALLTYPE GetSampleFrameCount( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetBytes( \r
-            /* [out] */ void **buffer) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetPacketTime( \r
-            /* [out] */ BMDTimeValue *packetTime,\r
-            BMDTimeScale timeScale) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkAudioInputPacketVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkAudioInputPacket * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkAudioInputPacket * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkAudioInputPacket * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetSampleFrameCount )( \r
-            IDeckLinkAudioInputPacket * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetBytes )( \r
-            IDeckLinkAudioInputPacket * This,\r
-            /* [out] */ void **buffer);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetPacketTime )( \r
-            IDeckLinkAudioInputPacket * This,\r
-            /* [out] */ BMDTimeValue *packetTime,\r
-            BMDTimeScale timeScale);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkAudioInputPacketVtbl;\r
-\r
-    interface IDeckLinkAudioInputPacket\r
-    {\r
-        CONST_VTBL struct IDeckLinkAudioInputPacketVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkAudioInputPacket_QueryInterface(This,riid,ppvObject)  \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkAudioInputPacket_AddRef(This) \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkAudioInputPacket_Release(This)        \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkAudioInputPacket_GetSampleFrameCount(This)    \\r
-    ( (This)->lpVtbl -> GetSampleFrameCount(This) ) \r
-\r
-#define IDeckLinkAudioInputPacket_GetBytes(This,buffer)        \\r
-    ( (This)->lpVtbl -> GetBytes(This,buffer) ) \r
-\r
-#define IDeckLinkAudioInputPacket_GetPacketTime(This,packetTime,timeScale)     \\r
-    ( (This)->lpVtbl -> GetPacketTime(This,packetTime,timeScale) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkAudioInputPacket_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkScreenPreviewCallback_INTERFACE_DEFINED__\r
-#define __IDeckLinkScreenPreviewCallback_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkScreenPreviewCallback */\r
-/* [helpstring][local][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkScreenPreviewCallback;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("373F499D-4B4D-4518-AD22-6354E5A5825E")\r
-    IDeckLinkScreenPreviewCallback : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE DrawFrame( \r
-            /* [in] */ IDeckLinkVideoFrame *theFrame) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkScreenPreviewCallbackVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkScreenPreviewCallback * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkScreenPreviewCallback * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkScreenPreviewCallback * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DrawFrame )( \r
-            IDeckLinkScreenPreviewCallback * This,\r
-            /* [in] */ IDeckLinkVideoFrame *theFrame);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkScreenPreviewCallbackVtbl;\r
-\r
-    interface IDeckLinkScreenPreviewCallback\r
-    {\r
-        CONST_VTBL struct IDeckLinkScreenPreviewCallbackVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkScreenPreviewCallback_QueryInterface(This,riid,ppvObject)     \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkScreenPreviewCallback_AddRef(This)    \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkScreenPreviewCallback_Release(This)   \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkScreenPreviewCallback_DrawFrame(This,theFrame)        \\r
-    ( (This)->lpVtbl -> DrawFrame(This,theFrame) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkScreenPreviewCallback_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkGLScreenPreviewHelper_INTERFACE_DEFINED__\r
-#define __IDeckLinkGLScreenPreviewHelper_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkGLScreenPreviewHelper */\r
-/* [helpstring][local][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkGLScreenPreviewHelper;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("BA575CD9-A15E-497B-B2C2-F9AFE7BE4EBA")\r
-    IDeckLinkGLScreenPreviewHelper : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE InitializeGL( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE PaintGL( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetFrame( \r
-            /* [in] */ IDeckLinkVideoFrame *theFrame) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkGLScreenPreviewHelperVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkGLScreenPreviewHelper * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkGLScreenPreviewHelper * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkGLScreenPreviewHelper * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *InitializeGL )( \r
-            IDeckLinkGLScreenPreviewHelper * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *PaintGL )( \r
-            IDeckLinkGLScreenPreviewHelper * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetFrame )( \r
-            IDeckLinkGLScreenPreviewHelper * This,\r
-            /* [in] */ IDeckLinkVideoFrame *theFrame);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkGLScreenPreviewHelperVtbl;\r
-\r
-    interface IDeckLinkGLScreenPreviewHelper\r
-    {\r
-        CONST_VTBL struct IDeckLinkGLScreenPreviewHelperVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkGLScreenPreviewHelper_QueryInterface(This,riid,ppvObject)     \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkGLScreenPreviewHelper_AddRef(This)    \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkGLScreenPreviewHelper_Release(This)   \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkGLScreenPreviewHelper_InitializeGL(This)      \\r
-    ( (This)->lpVtbl -> InitializeGL(This) ) \r
-\r
-#define IDeckLinkGLScreenPreviewHelper_PaintGL(This)   \\r
-    ( (This)->lpVtbl -> PaintGL(This) ) \r
-\r
-#define IDeckLinkGLScreenPreviewHelper_SetFrame(This,theFrame) \\r
-    ( (This)->lpVtbl -> SetFrame(This,theFrame) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkGLScreenPreviewHelper_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkConfiguration_INTERFACE_DEFINED__\r
-#define __IDeckLinkConfiguration_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkConfiguration */\r
-/* [helpstring][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkConfiguration;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("B8EAD569-B764-47F0-A73F-AE40DF6CBF10")\r
-    IDeckLinkConfiguration : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE GetConfigurationValidator( \r
-            /* [out] */ IDeckLinkConfiguration **configObject) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE WriteConfigurationToPreferences( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetVideoOutputFormat( \r
-            BMDVideoConnection videoOutputConnection) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE IsVideoOutputActive( \r
-            BMDVideoConnection videoOutputConnection,\r
-            /* [out] */ BOOL *active) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetAnalogVideoOutputFlags( \r
-            BMDAnalogVideoFlags analogVideoFlags) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetAnalogVideoOutputFlags( \r
-            /* [out] */ BMDAnalogVideoFlags *analogVideoFlags) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE EnableFieldFlickerRemovalWhenPaused( \r
-            BOOL enable) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE IsEnabledFieldFlickerRemovalWhenPaused( \r
-            /* [out] */ BOOL *enabled) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE Set444And3GBpsVideoOutput( \r
-            BOOL enable444VideoOutput,\r
-            BOOL enable3GbsOutput) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE Get444And3GBpsVideoOutput( \r
-            /* [out] */ BOOL *is444VideoOutputEnabled,\r
-            /* [out] */ BOOL *threeGbsOutputEnabled) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetVideoOutputConversionMode( \r
-            BMDVideoOutputConversionMode conversionMode) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetVideoOutputConversionMode( \r
-            /* [out] */ BMDVideoOutputConversionMode *conversionMode) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE Set_HD1080p24_to_HD1080i5994_Conversion( \r
-            BOOL enable) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE Get_HD1080p24_to_HD1080i5994_Conversion( \r
-            /* [out] */ BOOL *enabled) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetVideoInputFormat( \r
-            BMDVideoConnection videoInputFormat) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetVideoInputFormat( \r
-            /* [out] */ BMDVideoConnection *videoInputFormat) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetAnalogVideoInputFlags( \r
-            BMDAnalogVideoFlags analogVideoFlags) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetAnalogVideoInputFlags( \r
-            /* [out] */ BMDAnalogVideoFlags *analogVideoFlags) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetVideoInputConversionMode( \r
-            BMDVideoInputConversionMode conversionMode) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetVideoInputConversionMode( \r
-            /* [out] */ BMDVideoInputConversionMode *conversionMode) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetBlackVideoOutputDuringCapture( \r
-            BOOL blackOutInCapture) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetBlackVideoOutputDuringCapture( \r
-            /* [out] */ BOOL *blackOutInCapture) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE Set32PulldownSequenceInitialTimecodeFrame( \r
-            unsigned long aFrameTimecode) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE Get32PulldownSequenceInitialTimecodeFrame( \r
-            /* [out] */ unsigned long *aFrameTimecode) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetVancSourceLineMapping( \r
-            unsigned long activeLine1VANCsource,\r
-            unsigned long activeLine2VANCsource,\r
-            unsigned long activeLine3VANCsource) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetVancSourceLineMapping( \r
-            /* [out] */ unsigned long *activeLine1VANCsource,\r
-            /* [out] */ unsigned long *activeLine2VANCsource,\r
-            /* [out] */ unsigned long *activeLine3VANCsource) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetAudioInputFormat( \r
-            BMDAudioConnection audioInputFormat) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetAudioInputFormat( \r
-            /* [out] */ BMDAudioConnection *audioInputFormat) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkConfigurationVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkConfiguration * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkConfiguration * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkConfiguration * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetConfigurationValidator )( \r
-            IDeckLinkConfiguration * This,\r
-            /* [out] */ IDeckLinkConfiguration **configObject);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *WriteConfigurationToPreferences )( \r
-            IDeckLinkConfiguration * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetVideoOutputFormat )( \r
-            IDeckLinkConfiguration * This,\r
-            BMDVideoConnection videoOutputConnection);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *IsVideoOutputActive )( \r
-            IDeckLinkConfiguration * This,\r
-            BMDVideoConnection videoOutputConnection,\r
-            /* [out] */ BOOL *active);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetAnalogVideoOutputFlags )( \r
-            IDeckLinkConfiguration * This,\r
-            BMDAnalogVideoFlags analogVideoFlags);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetAnalogVideoOutputFlags )( \r
-            IDeckLinkConfiguration * This,\r
-            /* [out] */ BMDAnalogVideoFlags *analogVideoFlags);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *EnableFieldFlickerRemovalWhenPaused )( \r
-            IDeckLinkConfiguration * This,\r
-            BOOL enable);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *IsEnabledFieldFlickerRemovalWhenPaused )( \r
-            IDeckLinkConfiguration * This,\r
-            /* [out] */ BOOL *enabled);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *Set444And3GBpsVideoOutput )( \r
-            IDeckLinkConfiguration * This,\r
-            BOOL enable444VideoOutput,\r
-            BOOL enable3GbsOutput);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *Get444And3GBpsVideoOutput )( \r
-            IDeckLinkConfiguration * This,\r
-            /* [out] */ BOOL *is444VideoOutputEnabled,\r
-            /* [out] */ BOOL *threeGbsOutputEnabled);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetVideoOutputConversionMode )( \r
-            IDeckLinkConfiguration * This,\r
-            BMDVideoOutputConversionMode conversionMode);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetVideoOutputConversionMode )( \r
-            IDeckLinkConfiguration * This,\r
-            /* [out] */ BMDVideoOutputConversionMode *conversionMode);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *Set_HD1080p24_to_HD1080i5994_Conversion )( \r
-            IDeckLinkConfiguration * This,\r
-            BOOL enable);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *Get_HD1080p24_to_HD1080i5994_Conversion )( \r
-            IDeckLinkConfiguration * This,\r
-            /* [out] */ BOOL *enabled);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetVideoInputFormat )( \r
-            IDeckLinkConfiguration * This,\r
-            BMDVideoConnection videoInputFormat);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetVideoInputFormat )( \r
-            IDeckLinkConfiguration * This,\r
-            /* [out] */ BMDVideoConnection *videoInputFormat);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetAnalogVideoInputFlags )( \r
-            IDeckLinkConfiguration * This,\r
-            BMDAnalogVideoFlags analogVideoFlags);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetAnalogVideoInputFlags )( \r
-            IDeckLinkConfiguration * This,\r
-            /* [out] */ BMDAnalogVideoFlags *analogVideoFlags);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetVideoInputConversionMode )( \r
-            IDeckLinkConfiguration * This,\r
-            BMDVideoInputConversionMode conversionMode);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetVideoInputConversionMode )( \r
-            IDeckLinkConfiguration * This,\r
-            /* [out] */ BMDVideoInputConversionMode *conversionMode);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetBlackVideoOutputDuringCapture )( \r
-            IDeckLinkConfiguration * This,\r
-            BOOL blackOutInCapture);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetBlackVideoOutputDuringCapture )( \r
-            IDeckLinkConfiguration * This,\r
-            /* [out] */ BOOL *blackOutInCapture);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *Set32PulldownSequenceInitialTimecodeFrame )( \r
-            IDeckLinkConfiguration * This,\r
-            unsigned long aFrameTimecode);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *Get32PulldownSequenceInitialTimecodeFrame )( \r
-            IDeckLinkConfiguration * This,\r
-            /* [out] */ unsigned long *aFrameTimecode);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetVancSourceLineMapping )( \r
-            IDeckLinkConfiguration * This,\r
-            unsigned long activeLine1VANCsource,\r
-            unsigned long activeLine2VANCsource,\r
-            unsigned long activeLine3VANCsource);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetVancSourceLineMapping )( \r
-            IDeckLinkConfiguration * This,\r
-            /* [out] */ unsigned long *activeLine1VANCsource,\r
-            /* [out] */ unsigned long *activeLine2VANCsource,\r
-            /* [out] */ unsigned long *activeLine3VANCsource);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetAudioInputFormat )( \r
-            IDeckLinkConfiguration * This,\r
-            BMDAudioConnection audioInputFormat);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetAudioInputFormat )( \r
-            IDeckLinkConfiguration * This,\r
-            /* [out] */ BMDAudioConnection *audioInputFormat);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkConfigurationVtbl;\r
-\r
-    interface IDeckLinkConfiguration\r
-    {\r
-        CONST_VTBL struct IDeckLinkConfigurationVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkConfiguration_QueryInterface(This,riid,ppvObject)     \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkConfiguration_AddRef(This)    \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkConfiguration_Release(This)   \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkConfiguration_GetConfigurationValidator(This,configObject)    \\r
-    ( (This)->lpVtbl -> GetConfigurationValidator(This,configObject) ) \r
-\r
-#define IDeckLinkConfiguration_WriteConfigurationToPreferences(This)   \\r
-    ( (This)->lpVtbl -> WriteConfigurationToPreferences(This) ) \r
-\r
-#define IDeckLinkConfiguration_SetVideoOutputFormat(This,videoOutputConnection)        \\r
-    ( (This)->lpVtbl -> SetVideoOutputFormat(This,videoOutputConnection) ) \r
-\r
-#define IDeckLinkConfiguration_IsVideoOutputActive(This,videoOutputConnection,active)  \\r
-    ( (This)->lpVtbl -> IsVideoOutputActive(This,videoOutputConnection,active) ) \r
-\r
-#define IDeckLinkConfiguration_SetAnalogVideoOutputFlags(This,analogVideoFlags)        \\r
-    ( (This)->lpVtbl -> SetAnalogVideoOutputFlags(This,analogVideoFlags) ) \r
-\r
-#define IDeckLinkConfiguration_GetAnalogVideoOutputFlags(This,analogVideoFlags)        \\r
-    ( (This)->lpVtbl -> GetAnalogVideoOutputFlags(This,analogVideoFlags) ) \r
-\r
-#define IDeckLinkConfiguration_EnableFieldFlickerRemovalWhenPaused(This,enable)        \\r
-    ( (This)->lpVtbl -> EnableFieldFlickerRemovalWhenPaused(This,enable) ) \r
-\r
-#define IDeckLinkConfiguration_IsEnabledFieldFlickerRemovalWhenPaused(This,enabled)    \\r
-    ( (This)->lpVtbl -> IsEnabledFieldFlickerRemovalWhenPaused(This,enabled) ) \r
-\r
-#define IDeckLinkConfiguration_Set444And3GBpsVideoOutput(This,enable444VideoOutput,enable3GbsOutput)   \\r
-    ( (This)->lpVtbl -> Set444And3GBpsVideoOutput(This,enable444VideoOutput,enable3GbsOutput) ) \r
-\r
-#define IDeckLinkConfiguration_Get444And3GBpsVideoOutput(This,is444VideoOutputEnabled,threeGbsOutputEnabled)   \\r
-    ( (This)->lpVtbl -> Get444And3GBpsVideoOutput(This,is444VideoOutputEnabled,threeGbsOutputEnabled) ) \r
-\r
-#define IDeckLinkConfiguration_SetVideoOutputConversionMode(This,conversionMode)       \\r
-    ( (This)->lpVtbl -> SetVideoOutputConversionMode(This,conversionMode) ) \r
-\r
-#define IDeckLinkConfiguration_GetVideoOutputConversionMode(This,conversionMode)       \\r
-    ( (This)->lpVtbl -> GetVideoOutputConversionMode(This,conversionMode) ) \r
-\r
-#define IDeckLinkConfiguration_Set_HD1080p24_to_HD1080i5994_Conversion(This,enable)    \\r
-    ( (This)->lpVtbl -> Set_HD1080p24_to_HD1080i5994_Conversion(This,enable) ) \r
-\r
-#define IDeckLinkConfiguration_Get_HD1080p24_to_HD1080i5994_Conversion(This,enabled)   \\r
-    ( (This)->lpVtbl -> Get_HD1080p24_to_HD1080i5994_Conversion(This,enabled) ) \r
-\r
-#define IDeckLinkConfiguration_SetVideoInputFormat(This,videoInputFormat)      \\r
-    ( (This)->lpVtbl -> SetVideoInputFormat(This,videoInputFormat) ) \r
-\r
-#define IDeckLinkConfiguration_GetVideoInputFormat(This,videoInputFormat)      \\r
-    ( (This)->lpVtbl -> GetVideoInputFormat(This,videoInputFormat) ) \r
-\r
-#define IDeckLinkConfiguration_SetAnalogVideoInputFlags(This,analogVideoFlags) \\r
-    ( (This)->lpVtbl -> SetAnalogVideoInputFlags(This,analogVideoFlags) ) \r
-\r
-#define IDeckLinkConfiguration_GetAnalogVideoInputFlags(This,analogVideoFlags) \\r
-    ( (This)->lpVtbl -> GetAnalogVideoInputFlags(This,analogVideoFlags) ) \r
-\r
-#define IDeckLinkConfiguration_SetVideoInputConversionMode(This,conversionMode)        \\r
-    ( (This)->lpVtbl -> SetVideoInputConversionMode(This,conversionMode) ) \r
-\r
-#define IDeckLinkConfiguration_GetVideoInputConversionMode(This,conversionMode)        \\r
-    ( (This)->lpVtbl -> GetVideoInputConversionMode(This,conversionMode) ) \r
-\r
-#define IDeckLinkConfiguration_SetBlackVideoOutputDuringCapture(This,blackOutInCapture)        \\r
-    ( (This)->lpVtbl -> SetBlackVideoOutputDuringCapture(This,blackOutInCapture) ) \r
-\r
-#define IDeckLinkConfiguration_GetBlackVideoOutputDuringCapture(This,blackOutInCapture)        \\r
-    ( (This)->lpVtbl -> GetBlackVideoOutputDuringCapture(This,blackOutInCapture) ) \r
-\r
-#define IDeckLinkConfiguration_Set32PulldownSequenceInitialTimecodeFrame(This,aFrameTimecode)  \\r
-    ( (This)->lpVtbl -> Set32PulldownSequenceInitialTimecodeFrame(This,aFrameTimecode) ) \r
-\r
-#define IDeckLinkConfiguration_Get32PulldownSequenceInitialTimecodeFrame(This,aFrameTimecode)  \\r
-    ( (This)->lpVtbl -> Get32PulldownSequenceInitialTimecodeFrame(This,aFrameTimecode) ) \r
-\r
-#define IDeckLinkConfiguration_SetVancSourceLineMapping(This,activeLine1VANCsource,activeLine2VANCsource,activeLine3VANCsource)        \\r
-    ( (This)->lpVtbl -> SetVancSourceLineMapping(This,activeLine1VANCsource,activeLine2VANCsource,activeLine3VANCsource) ) \r
-\r
-#define IDeckLinkConfiguration_GetVancSourceLineMapping(This,activeLine1VANCsource,activeLine2VANCsource,activeLine3VANCsource)        \\r
-    ( (This)->lpVtbl -> GetVancSourceLineMapping(This,activeLine1VANCsource,activeLine2VANCsource,activeLine3VANCsource) ) \r
-\r
-#define IDeckLinkConfiguration_SetAudioInputFormat(This,audioInputFormat)      \\r
-    ( (This)->lpVtbl -> SetAudioInputFormat(This,audioInputFormat) ) \r
-\r
-#define IDeckLinkConfiguration_GetAudioInputFormat(This,audioInputFormat)      \\r
-    ( (This)->lpVtbl -> GetAudioInputFormat(This,audioInputFormat) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkConfiguration_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkAttributes_INTERFACE_DEFINED__\r
-#define __IDeckLinkAttributes_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkAttributes */\r
-/* [helpstring][local][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkAttributes;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("ABC11843-D966-44CB-96E2-A1CB5D3135C4")\r
-    IDeckLinkAttributes : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE GetFlag( \r
-            /* [in] */ BMDDeckLinkAttributeID cfgID,\r
-            /* [out] */ BOOL *value) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetInt( \r
-            /* [in] */ BMDDeckLinkAttributeID cfgID,\r
-            /* [out] */ LONGLONG *value) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetFloat( \r
-            /* [in] */ BMDDeckLinkAttributeID cfgID,\r
-            /* [out] */ double *value) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetString( \r
-            /* [in] */ BMDDeckLinkAttributeID cfgID,\r
-            /* [out] */ BSTR *value) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkAttributesVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkAttributes * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkAttributes * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkAttributes * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetFlag )( \r
-            IDeckLinkAttributes * This,\r
-            /* [in] */ BMDDeckLinkAttributeID cfgID,\r
-            /* [out] */ BOOL *value);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetInt )( \r
-            IDeckLinkAttributes * This,\r
-            /* [in] */ BMDDeckLinkAttributeID cfgID,\r
-            /* [out] */ LONGLONG *value);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetFloat )( \r
-            IDeckLinkAttributes * This,\r
-            /* [in] */ BMDDeckLinkAttributeID cfgID,\r
-            /* [out] */ double *value);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetString )( \r
-            IDeckLinkAttributes * This,\r
-            /* [in] */ BMDDeckLinkAttributeID cfgID,\r
-            /* [out] */ BSTR *value);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkAttributesVtbl;\r
-\r
-    interface IDeckLinkAttributes\r
-    {\r
-        CONST_VTBL struct IDeckLinkAttributesVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkAttributes_QueryInterface(This,riid,ppvObject)        \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkAttributes_AddRef(This)       \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkAttributes_Release(This)      \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkAttributes_GetFlag(This,cfgID,value)  \\r
-    ( (This)->lpVtbl -> GetFlag(This,cfgID,value) ) \r
-\r
-#define IDeckLinkAttributes_GetInt(This,cfgID,value)   \\r
-    ( (This)->lpVtbl -> GetInt(This,cfgID,value) ) \r
-\r
-#define IDeckLinkAttributes_GetFloat(This,cfgID,value) \\r
-    ( (This)->lpVtbl -> GetFloat(This,cfgID,value) ) \r
-\r
-#define IDeckLinkAttributes_GetString(This,cfgID,value)        \\r
-    ( (This)->lpVtbl -> GetString(This,cfgID,value) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkAttributes_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkKeyer_INTERFACE_DEFINED__\r
-#define __IDeckLinkKeyer_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkKeyer */\r
-/* [helpstring][local][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkKeyer;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("89AFCAF5-65F8-421E-98F7-96FE5F5BFBA3")\r
-    IDeckLinkKeyer : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE Enable( \r
-            /* [in] */ BOOL isExternal) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetLevel( \r
-            /* [in] */ unsigned char level) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE RampUp( \r
-            /* [in] */ unsigned long numberOfFrames) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE RampDown( \r
-            /* [in] */ unsigned long numberOfFrames) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE Disable( void) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkKeyerVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkKeyer * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkKeyer * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkKeyer * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *Enable )( \r
-            IDeckLinkKeyer * This,\r
-            /* [in] */ BOOL isExternal);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetLevel )( \r
-            IDeckLinkKeyer * This,\r
-            /* [in] */ unsigned char level);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *RampUp )( \r
-            IDeckLinkKeyer * This,\r
-            /* [in] */ unsigned long numberOfFrames);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *RampDown )( \r
-            IDeckLinkKeyer * This,\r
-            /* [in] */ unsigned long numberOfFrames);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *Disable )( \r
-            IDeckLinkKeyer * This);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkKeyerVtbl;\r
-\r
-    interface IDeckLinkKeyer\r
-    {\r
-        CONST_VTBL struct IDeckLinkKeyerVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkKeyer_QueryInterface(This,riid,ppvObject)     \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkKeyer_AddRef(This)    \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkKeyer_Release(This)   \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkKeyer_Enable(This,isExternal) \\r
-    ( (This)->lpVtbl -> Enable(This,isExternal) ) \r
-\r
-#define IDeckLinkKeyer_SetLevel(This,level)    \\r
-    ( (This)->lpVtbl -> SetLevel(This,level) ) \r
-\r
-#define IDeckLinkKeyer_RampUp(This,numberOfFrames)     \\r
-    ( (This)->lpVtbl -> RampUp(This,numberOfFrames) ) \r
-\r
-#define IDeckLinkKeyer_RampDown(This,numberOfFrames)   \\r
-    ( (This)->lpVtbl -> RampDown(This,numberOfFrames) ) \r
-\r
-#define IDeckLinkKeyer_Disable(This)   \\r
-    ( (This)->lpVtbl -> Disable(This) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkKeyer_INTERFACE_DEFINED__ */\r
-\r
-\r
-EXTERN_C const CLSID CLSID_CDeckLinkIterator;\r
-\r
-#ifdef __cplusplus\r
-\r
-class DECLSPEC_UUID("D9EDA3B3-2887-41FA-B724-017CF1EB1D37")\r
-CDeckLinkIterator;\r
-#endif\r
-\r
-EXTERN_C const CLSID CLSID_CDeckLinkGLScreenPreviewHelper;\r
-\r
-#ifdef __cplusplus\r
-\r
-class DECLSPEC_UUID("D398CEE7-4434-4CA3-9BA6-5AE34556B905")\r
-CDeckLinkGLScreenPreviewHelper;\r
-#endif\r
-\r
-#ifndef __IDeckLinkDisplayModeIterator_v7_1_INTERFACE_DEFINED__\r
-#define __IDeckLinkDisplayModeIterator_v7_1_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkDisplayModeIterator_v7_1 */\r
-/* [helpstring][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkDisplayModeIterator_v7_1;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("B28131B6-59AC-4857-B5AC-CD75D5883E2F")\r
-    IDeckLinkDisplayModeIterator_v7_1 : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE Next( \r
-            /* [out] */ IDeckLinkDisplayMode_v7_1 **deckLinkDisplayMode) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkDisplayModeIterator_v7_1Vtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkDisplayModeIterator_v7_1 * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkDisplayModeIterator_v7_1 * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkDisplayModeIterator_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *Next )( \r
-            IDeckLinkDisplayModeIterator_v7_1 * This,\r
-            /* [out] */ IDeckLinkDisplayMode_v7_1 **deckLinkDisplayMode);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkDisplayModeIterator_v7_1Vtbl;\r
-\r
-    interface IDeckLinkDisplayModeIterator_v7_1\r
-    {\r
-        CONST_VTBL struct IDeckLinkDisplayModeIterator_v7_1Vtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkDisplayModeIterator_v7_1_QueryInterface(This,riid,ppvObject)  \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkDisplayModeIterator_v7_1_AddRef(This) \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkDisplayModeIterator_v7_1_Release(This)        \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkDisplayModeIterator_v7_1_Next(This,deckLinkDisplayMode)       \\r
-    ( (This)->lpVtbl -> Next(This,deckLinkDisplayMode) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkDisplayModeIterator_v7_1_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkDisplayMode_v7_1_INTERFACE_DEFINED__\r
-#define __IDeckLinkDisplayMode_v7_1_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkDisplayMode_v7_1 */\r
-/* [helpstring][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkDisplayMode_v7_1;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("AF0CD6D5-8376-435E-8433-54F9DD530AC3")\r
-    IDeckLinkDisplayMode_v7_1 : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE GetName( \r
-            /* [out] */ BSTR *name) = 0;\r
-        \r
-        virtual BMDDisplayMode STDMETHODCALLTYPE GetDisplayMode( void) = 0;\r
-        \r
-        virtual long STDMETHODCALLTYPE GetWidth( void) = 0;\r
-        \r
-        virtual long STDMETHODCALLTYPE GetHeight( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetFrameRate( \r
-            /* [out] */ BMDTimeValue *frameDuration,\r
-            /* [out] */ BMDTimeScale *timeScale) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkDisplayMode_v7_1Vtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkDisplayMode_v7_1 * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkDisplayMode_v7_1 * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkDisplayMode_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetName )( \r
-            IDeckLinkDisplayMode_v7_1 * This,\r
-            /* [out] */ BSTR *name);\r
-        \r
-        BMDDisplayMode ( STDMETHODCALLTYPE *GetDisplayMode )( \r
-            IDeckLinkDisplayMode_v7_1 * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetWidth )( \r
-            IDeckLinkDisplayMode_v7_1 * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetHeight )( \r
-            IDeckLinkDisplayMode_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetFrameRate )( \r
-            IDeckLinkDisplayMode_v7_1 * This,\r
-            /* [out] */ BMDTimeValue *frameDuration,\r
-            /* [out] */ BMDTimeScale *timeScale);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkDisplayMode_v7_1Vtbl;\r
-\r
-    interface IDeckLinkDisplayMode_v7_1\r
-    {\r
-        CONST_VTBL struct IDeckLinkDisplayMode_v7_1Vtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkDisplayMode_v7_1_QueryInterface(This,riid,ppvObject)  \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkDisplayMode_v7_1_AddRef(This) \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkDisplayMode_v7_1_Release(This)        \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkDisplayMode_v7_1_GetName(This,name)   \\r
-    ( (This)->lpVtbl -> GetName(This,name) ) \r
-\r
-#define IDeckLinkDisplayMode_v7_1_GetDisplayMode(This) \\r
-    ( (This)->lpVtbl -> GetDisplayMode(This) ) \r
-\r
-#define IDeckLinkDisplayMode_v7_1_GetWidth(This)       \\r
-    ( (This)->lpVtbl -> GetWidth(This) ) \r
-\r
-#define IDeckLinkDisplayMode_v7_1_GetHeight(This)      \\r
-    ( (This)->lpVtbl -> GetHeight(This) ) \r
-\r
-#define IDeckLinkDisplayMode_v7_1_GetFrameRate(This,frameDuration,timeScale)   \\r
-    ( (This)->lpVtbl -> GetFrameRate(This,frameDuration,timeScale) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkDisplayMode_v7_1_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkVideoFrame_v7_1_INTERFACE_DEFINED__\r
-#define __IDeckLinkVideoFrame_v7_1_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkVideoFrame_v7_1 */\r
-/* [helpstring][local][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkVideoFrame_v7_1;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("333F3A10-8C2D-43CF-B79D-46560FEEA1CE")\r
-    IDeckLinkVideoFrame_v7_1 : public IUnknown\r
-    {\r
-    public:\r
-        virtual long STDMETHODCALLTYPE GetWidth( void) = 0;\r
-        \r
-        virtual long STDMETHODCALLTYPE GetHeight( void) = 0;\r
-        \r
-        virtual long STDMETHODCALLTYPE GetRowBytes( void) = 0;\r
-        \r
-        virtual BMDPixelFormat STDMETHODCALLTYPE GetPixelFormat( void) = 0;\r
-        \r
-        virtual BMDFrameFlags STDMETHODCALLTYPE GetFlags( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetBytes( \r
-            void **buffer) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkVideoFrame_v7_1Vtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkVideoFrame_v7_1 * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkVideoFrame_v7_1 * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkVideoFrame_v7_1 * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetWidth )( \r
-            IDeckLinkVideoFrame_v7_1 * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetHeight )( \r
-            IDeckLinkVideoFrame_v7_1 * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetRowBytes )( \r
-            IDeckLinkVideoFrame_v7_1 * This);\r
-        \r
-        BMDPixelFormat ( STDMETHODCALLTYPE *GetPixelFormat )( \r
-            IDeckLinkVideoFrame_v7_1 * This);\r
-        \r
-        BMDFrameFlags ( STDMETHODCALLTYPE *GetFlags )( \r
-            IDeckLinkVideoFrame_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetBytes )( \r
-            IDeckLinkVideoFrame_v7_1 * This,\r
-            void **buffer);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkVideoFrame_v7_1Vtbl;\r
-\r
-    interface IDeckLinkVideoFrame_v7_1\r
-    {\r
-        CONST_VTBL struct IDeckLinkVideoFrame_v7_1Vtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkVideoFrame_v7_1_QueryInterface(This,riid,ppvObject)   \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkVideoFrame_v7_1_AddRef(This)  \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkVideoFrame_v7_1_Release(This) \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkVideoFrame_v7_1_GetWidth(This)        \\r
-    ( (This)->lpVtbl -> GetWidth(This) ) \r
-\r
-#define IDeckLinkVideoFrame_v7_1_GetHeight(This)       \\r
-    ( (This)->lpVtbl -> GetHeight(This) ) \r
-\r
-#define IDeckLinkVideoFrame_v7_1_GetRowBytes(This)     \\r
-    ( (This)->lpVtbl -> GetRowBytes(This) ) \r
-\r
-#define IDeckLinkVideoFrame_v7_1_GetPixelFormat(This)  \\r
-    ( (This)->lpVtbl -> GetPixelFormat(This) ) \r
-\r
-#define IDeckLinkVideoFrame_v7_1_GetFlags(This)        \\r
-    ( (This)->lpVtbl -> GetFlags(This) ) \r
-\r
-#define IDeckLinkVideoFrame_v7_1_GetBytes(This,buffer) \\r
-    ( (This)->lpVtbl -> GetBytes(This,buffer) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkVideoFrame_v7_1_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkVideoInputFrame_v7_1_INTERFACE_DEFINED__\r
-#define __IDeckLinkVideoInputFrame_v7_1_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkVideoInputFrame_v7_1 */\r
-/* [helpstring][local][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkVideoInputFrame_v7_1;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("C8B41D95-8848-40EE-9B37-6E3417FB114B")\r
-    IDeckLinkVideoInputFrame_v7_1 : public IDeckLinkVideoFrame_v7_1\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE GetFrameTime( \r
-            BMDTimeValue *frameTime,\r
-            BMDTimeValue *frameDuration,\r
-            BMDTimeScale timeScale) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkVideoInputFrame_v7_1Vtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkVideoInputFrame_v7_1 * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkVideoInputFrame_v7_1 * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkVideoInputFrame_v7_1 * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetWidth )( \r
-            IDeckLinkVideoInputFrame_v7_1 * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetHeight )( \r
-            IDeckLinkVideoInputFrame_v7_1 * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetRowBytes )( \r
-            IDeckLinkVideoInputFrame_v7_1 * This);\r
-        \r
-        BMDPixelFormat ( STDMETHODCALLTYPE *GetPixelFormat )( \r
-            IDeckLinkVideoInputFrame_v7_1 * This);\r
-        \r
-        BMDFrameFlags ( STDMETHODCALLTYPE *GetFlags )( \r
-            IDeckLinkVideoInputFrame_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetBytes )( \r
-            IDeckLinkVideoInputFrame_v7_1 * This,\r
-            void **buffer);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetFrameTime )( \r
-            IDeckLinkVideoInputFrame_v7_1 * This,\r
-            BMDTimeValue *frameTime,\r
-            BMDTimeValue *frameDuration,\r
-            BMDTimeScale timeScale);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkVideoInputFrame_v7_1Vtbl;\r
-\r
-    interface IDeckLinkVideoInputFrame_v7_1\r
-    {\r
-        CONST_VTBL struct IDeckLinkVideoInputFrame_v7_1Vtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkVideoInputFrame_v7_1_QueryInterface(This,riid,ppvObject)      \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkVideoInputFrame_v7_1_AddRef(This)     \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkVideoInputFrame_v7_1_Release(This)    \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkVideoInputFrame_v7_1_GetWidth(This)   \\r
-    ( (This)->lpVtbl -> GetWidth(This) ) \r
-\r
-#define IDeckLinkVideoInputFrame_v7_1_GetHeight(This)  \\r
-    ( (This)->lpVtbl -> GetHeight(This) ) \r
-\r
-#define IDeckLinkVideoInputFrame_v7_1_GetRowBytes(This)        \\r
-    ( (This)->lpVtbl -> GetRowBytes(This) ) \r
-\r
-#define IDeckLinkVideoInputFrame_v7_1_GetPixelFormat(This)     \\r
-    ( (This)->lpVtbl -> GetPixelFormat(This) ) \r
-\r
-#define IDeckLinkVideoInputFrame_v7_1_GetFlags(This)   \\r
-    ( (This)->lpVtbl -> GetFlags(This) ) \r
-\r
-#define IDeckLinkVideoInputFrame_v7_1_GetBytes(This,buffer)    \\r
-    ( (This)->lpVtbl -> GetBytes(This,buffer) ) \r
-\r
-\r
-#define IDeckLinkVideoInputFrame_v7_1_GetFrameTime(This,frameTime,frameDuration,timeScale)     \\r
-    ( (This)->lpVtbl -> GetFrameTime(This,frameTime,frameDuration,timeScale) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkVideoInputFrame_v7_1_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkAudioInputPacket_v7_1_INTERFACE_DEFINED__\r
-#define __IDeckLinkAudioInputPacket_v7_1_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkAudioInputPacket_v7_1 */\r
-/* [helpstring][local][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkAudioInputPacket_v7_1;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("C86DE4F6-A29F-42E3-AB3A-1363E29F0788")\r
-    IDeckLinkAudioInputPacket_v7_1 : public IUnknown\r
-    {\r
-    public:\r
-        virtual long STDMETHODCALLTYPE GetSampleCount( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetBytes( \r
-            void **buffer) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetAudioPacketTime( \r
-            BMDTimeValue *packetTime,\r
-            BMDTimeScale timeScale) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkAudioInputPacket_v7_1Vtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkAudioInputPacket_v7_1 * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkAudioInputPacket_v7_1 * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkAudioInputPacket_v7_1 * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetSampleCount )( \r
-            IDeckLinkAudioInputPacket_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetBytes )( \r
-            IDeckLinkAudioInputPacket_v7_1 * This,\r
-            void **buffer);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetAudioPacketTime )( \r
-            IDeckLinkAudioInputPacket_v7_1 * This,\r
-            BMDTimeValue *packetTime,\r
-            BMDTimeScale timeScale);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkAudioInputPacket_v7_1Vtbl;\r
-\r
-    interface IDeckLinkAudioInputPacket_v7_1\r
-    {\r
-        CONST_VTBL struct IDeckLinkAudioInputPacket_v7_1Vtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkAudioInputPacket_v7_1_QueryInterface(This,riid,ppvObject)     \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkAudioInputPacket_v7_1_AddRef(This)    \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkAudioInputPacket_v7_1_Release(This)   \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkAudioInputPacket_v7_1_GetSampleCount(This)    \\r
-    ( (This)->lpVtbl -> GetSampleCount(This) ) \r
-\r
-#define IDeckLinkAudioInputPacket_v7_1_GetBytes(This,buffer)   \\r
-    ( (This)->lpVtbl -> GetBytes(This,buffer) ) \r
-\r
-#define IDeckLinkAudioInputPacket_v7_1_GetAudioPacketTime(This,packetTime,timeScale)   \\r
-    ( (This)->lpVtbl -> GetAudioPacketTime(This,packetTime,timeScale) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkAudioInputPacket_v7_1_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkVideoOutputCallback_v7_1_INTERFACE_DEFINED__\r
-#define __IDeckLinkVideoOutputCallback_v7_1_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkVideoOutputCallback_v7_1 */\r
-/* [helpstring][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkVideoOutputCallback_v7_1;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("EBD01AFA-E4B0-49C6-A01D-EDB9D1B55FD9")\r
-    IDeckLinkVideoOutputCallback_v7_1 : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE ScheduledFrameCompleted( \r
-            /* [in] */ IDeckLinkVideoFrame_v7_1 *completedFrame,\r
-            /* [in] */ BMDOutputFrameCompletionResult result) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkVideoOutputCallback_v7_1Vtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkVideoOutputCallback_v7_1 * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkVideoOutputCallback_v7_1 * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkVideoOutputCallback_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *ScheduledFrameCompleted )( \r
-            IDeckLinkVideoOutputCallback_v7_1 * This,\r
-            /* [in] */ IDeckLinkVideoFrame_v7_1 *completedFrame,\r
-            /* [in] */ BMDOutputFrameCompletionResult result);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkVideoOutputCallback_v7_1Vtbl;\r
-\r
-    interface IDeckLinkVideoOutputCallback_v7_1\r
-    {\r
-        CONST_VTBL struct IDeckLinkVideoOutputCallback_v7_1Vtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkVideoOutputCallback_v7_1_QueryInterface(This,riid,ppvObject)  \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkVideoOutputCallback_v7_1_AddRef(This) \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkVideoOutputCallback_v7_1_Release(This)        \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkVideoOutputCallback_v7_1_ScheduledFrameCompleted(This,completedFrame,result)  \\r
-    ( (This)->lpVtbl -> ScheduledFrameCompleted(This,completedFrame,result) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkVideoOutputCallback_v7_1_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkInputCallback_v7_1_INTERFACE_DEFINED__\r
-#define __IDeckLinkInputCallback_v7_1_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkInputCallback_v7_1 */\r
-/* [helpstring][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkInputCallback_v7_1;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("7F94F328-5ED4-4E9F-9729-76A86BDC99CC")\r
-    IDeckLinkInputCallback_v7_1 : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE VideoInputFrameArrived( \r
-            /* [in] */ IDeckLinkVideoInputFrame_v7_1 *videoFrame,\r
-            /* [in] */ IDeckLinkAudioInputPacket_v7_1 *audioPacket) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkInputCallback_v7_1Vtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkInputCallback_v7_1 * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkInputCallback_v7_1 * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkInputCallback_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *VideoInputFrameArrived )( \r
-            IDeckLinkInputCallback_v7_1 * This,\r
-            /* [in] */ IDeckLinkVideoInputFrame_v7_1 *videoFrame,\r
-            /* [in] */ IDeckLinkAudioInputPacket_v7_1 *audioPacket);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkInputCallback_v7_1Vtbl;\r
-\r
-    interface IDeckLinkInputCallback_v7_1\r
-    {\r
-        CONST_VTBL struct IDeckLinkInputCallback_v7_1Vtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkInputCallback_v7_1_QueryInterface(This,riid,ppvObject)        \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkInputCallback_v7_1_AddRef(This)       \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkInputCallback_v7_1_Release(This)      \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkInputCallback_v7_1_VideoInputFrameArrived(This,videoFrame,audioPacket)        \\r
-    ( (This)->lpVtbl -> VideoInputFrameArrived(This,videoFrame,audioPacket) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkInputCallback_v7_1_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkOutput_v7_1_INTERFACE_DEFINED__\r
-#define __IDeckLinkOutput_v7_1_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkOutput_v7_1 */\r
-/* [helpstring][local][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkOutput_v7_1;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("AE5B3E9B-4E1E-4535-B6E8-480FF52F6CE5")\r
-    IDeckLinkOutput_v7_1 : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE DoesSupportVideoMode( \r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            /* [out] */ BMDDisplayModeSupport *result) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetDisplayModeIterator( \r
-            /* [out] */ IDeckLinkDisplayModeIterator_v7_1 **iterator) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE EnableVideoOutput( \r
-            BMDDisplayMode displayMode) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE DisableVideoOutput( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetVideoOutputFrameMemoryAllocator( \r
-            /* [in] */ IDeckLinkMemoryAllocator *theAllocator) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE CreateVideoFrame( \r
-            long width,\r
-            long height,\r
-            long rowBytes,\r
-            BMDPixelFormat pixelFormat,\r
-            BMDFrameFlags flags,\r
-            IDeckLinkVideoFrame_v7_1 **outFrame) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE CreateVideoFrameFromBuffer( \r
-            void *buffer,\r
-            long width,\r
-            long height,\r
-            long rowBytes,\r
-            BMDPixelFormat pixelFormat,\r
-            BMDFrameFlags flags,\r
-            IDeckLinkVideoFrame_v7_1 **outFrame) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE DisplayVideoFrameSync( \r
-            IDeckLinkVideoFrame_v7_1 *theFrame) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE ScheduleVideoFrame( \r
-            IDeckLinkVideoFrame_v7_1 *theFrame,\r
-            BMDTimeValue displayTime,\r
-            BMDTimeValue displayDuration,\r
-            BMDTimeScale timeScale) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetScheduledFrameCompletionCallback( \r
-            /* [in] */ IDeckLinkVideoOutputCallback_v7_1 *theCallback) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE EnableAudioOutput( \r
-            BMDAudioSampleRate sampleRate,\r
-            BMDAudioSampleType sampleType,\r
-            unsigned long channelCount) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE DisableAudioOutput( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE WriteAudioSamplesSync( \r
-            void *buffer,\r
-            unsigned long sampleFrameCount,\r
-            /* [out] */ unsigned long *sampleFramesWritten) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE BeginAudioPreroll( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE EndAudioPreroll( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE ScheduleAudioSamples( \r
-            void *buffer,\r
-            unsigned long sampleFrameCount,\r
-            BMDTimeValue streamTime,\r
-            BMDTimeScale timeScale,\r
-            /* [out] */ unsigned long *sampleFramesWritten) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetBufferedAudioSampleFrameCount( \r
-            /* [out] */ unsigned long *bufferedSampleCount) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE FlushBufferedAudioSamples( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetAudioCallback( \r
-            /* [in] */ IDeckLinkAudioOutputCallback *theCallback) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE StartScheduledPlayback( \r
-            BMDTimeValue playbackStartTime,\r
-            BMDTimeScale timeScale,\r
-            double playbackSpeed) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE StopScheduledPlayback( \r
-            BMDTimeValue stopPlaybackAtTime,\r
-            BMDTimeValue *actualStopTime,\r
-            BMDTimeScale timeScale) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetHardwareReferenceClock( \r
-            BMDTimeScale desiredTimeScale,\r
-            BMDTimeValue *elapsedTimeSinceSchedulerBegan) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkOutput_v7_1Vtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkOutput_v7_1 * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkOutput_v7_1 * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkOutput_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DoesSupportVideoMode )( \r
-            IDeckLinkOutput_v7_1 * This,\r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            /* [out] */ BMDDisplayModeSupport *result);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetDisplayModeIterator )( \r
-            IDeckLinkOutput_v7_1 * This,\r
-            /* [out] */ IDeckLinkDisplayModeIterator_v7_1 **iterator);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *EnableVideoOutput )( \r
-            IDeckLinkOutput_v7_1 * This,\r
-            BMDDisplayMode displayMode);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DisableVideoOutput )( \r
-            IDeckLinkOutput_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetVideoOutputFrameMemoryAllocator )( \r
-            IDeckLinkOutput_v7_1 * This,\r
-            /* [in] */ IDeckLinkMemoryAllocator *theAllocator);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *CreateVideoFrame )( \r
-            IDeckLinkOutput_v7_1 * This,\r
-            long width,\r
-            long height,\r
-            long rowBytes,\r
-            BMDPixelFormat pixelFormat,\r
-            BMDFrameFlags flags,\r
-            IDeckLinkVideoFrame_v7_1 **outFrame);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *CreateVideoFrameFromBuffer )( \r
-            IDeckLinkOutput_v7_1 * This,\r
-            void *buffer,\r
-            long width,\r
-            long height,\r
-            long rowBytes,\r
-            BMDPixelFormat pixelFormat,\r
-            BMDFrameFlags flags,\r
-            IDeckLinkVideoFrame_v7_1 **outFrame);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DisplayVideoFrameSync )( \r
-            IDeckLinkOutput_v7_1 * This,\r
-            IDeckLinkVideoFrame_v7_1 *theFrame);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *ScheduleVideoFrame )( \r
-            IDeckLinkOutput_v7_1 * This,\r
-            IDeckLinkVideoFrame_v7_1 *theFrame,\r
-            BMDTimeValue displayTime,\r
-            BMDTimeValue displayDuration,\r
-            BMDTimeScale timeScale);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetScheduledFrameCompletionCallback )( \r
-            IDeckLinkOutput_v7_1 * This,\r
-            /* [in] */ IDeckLinkVideoOutputCallback_v7_1 *theCallback);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *EnableAudioOutput )( \r
-            IDeckLinkOutput_v7_1 * This,\r
-            BMDAudioSampleRate sampleRate,\r
-            BMDAudioSampleType sampleType,\r
-            unsigned long channelCount);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DisableAudioOutput )( \r
-            IDeckLinkOutput_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *WriteAudioSamplesSync )( \r
-            IDeckLinkOutput_v7_1 * This,\r
-            void *buffer,\r
-            unsigned long sampleFrameCount,\r
-            /* [out] */ unsigned long *sampleFramesWritten);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *BeginAudioPreroll )( \r
-            IDeckLinkOutput_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *EndAudioPreroll )( \r
-            IDeckLinkOutput_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *ScheduleAudioSamples )( \r
-            IDeckLinkOutput_v7_1 * This,\r
-            void *buffer,\r
-            unsigned long sampleFrameCount,\r
-            BMDTimeValue streamTime,\r
-            BMDTimeScale timeScale,\r
-            /* [out] */ unsigned long *sampleFramesWritten);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetBufferedAudioSampleFrameCount )( \r
-            IDeckLinkOutput_v7_1 * This,\r
-            /* [out] */ unsigned long *bufferedSampleCount);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *FlushBufferedAudioSamples )( \r
-            IDeckLinkOutput_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetAudioCallback )( \r
-            IDeckLinkOutput_v7_1 * This,\r
-            /* [in] */ IDeckLinkAudioOutputCallback *theCallback);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *StartScheduledPlayback )( \r
-            IDeckLinkOutput_v7_1 * This,\r
-            BMDTimeValue playbackStartTime,\r
-            BMDTimeScale timeScale,\r
-            double playbackSpeed);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *StopScheduledPlayback )( \r
-            IDeckLinkOutput_v7_1 * This,\r
-            BMDTimeValue stopPlaybackAtTime,\r
-            BMDTimeValue *actualStopTime,\r
-            BMDTimeScale timeScale);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetHardwareReferenceClock )( \r
-            IDeckLinkOutput_v7_1 * This,\r
-            BMDTimeScale desiredTimeScale,\r
-            BMDTimeValue *elapsedTimeSinceSchedulerBegan);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkOutput_v7_1Vtbl;\r
-\r
-    interface IDeckLinkOutput_v7_1\r
-    {\r
-        CONST_VTBL struct IDeckLinkOutput_v7_1Vtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkOutput_v7_1_QueryInterface(This,riid,ppvObject)       \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkOutput_v7_1_AddRef(This)      \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkOutput_v7_1_Release(This)     \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkOutput_v7_1_DoesSupportVideoMode(This,displayMode,pixelFormat,result) \\r
-    ( (This)->lpVtbl -> DoesSupportVideoMode(This,displayMode,pixelFormat,result) ) \r
-\r
-#define IDeckLinkOutput_v7_1_GetDisplayModeIterator(This,iterator)     \\r
-    ( (This)->lpVtbl -> GetDisplayModeIterator(This,iterator) ) \r
-\r
-#define IDeckLinkOutput_v7_1_EnableVideoOutput(This,displayMode)       \\r
-    ( (This)->lpVtbl -> EnableVideoOutput(This,displayMode) ) \r
-\r
-#define IDeckLinkOutput_v7_1_DisableVideoOutput(This)  \\r
-    ( (This)->lpVtbl -> DisableVideoOutput(This) ) \r
-\r
-#define IDeckLinkOutput_v7_1_SetVideoOutputFrameMemoryAllocator(This,theAllocator)     \\r
-    ( (This)->lpVtbl -> SetVideoOutputFrameMemoryAllocator(This,theAllocator) ) \r
-\r
-#define IDeckLinkOutput_v7_1_CreateVideoFrame(This,width,height,rowBytes,pixelFormat,flags,outFrame)   \\r
-    ( (This)->lpVtbl -> CreateVideoFrame(This,width,height,rowBytes,pixelFormat,flags,outFrame) ) \r
-\r
-#define IDeckLinkOutput_v7_1_CreateVideoFrameFromBuffer(This,buffer,width,height,rowBytes,pixelFormat,flags,outFrame)  \\r
-    ( (This)->lpVtbl -> CreateVideoFrameFromBuffer(This,buffer,width,height,rowBytes,pixelFormat,flags,outFrame) ) \r
-\r
-#define IDeckLinkOutput_v7_1_DisplayVideoFrameSync(This,theFrame)      \\r
-    ( (This)->lpVtbl -> DisplayVideoFrameSync(This,theFrame) ) \r
-\r
-#define IDeckLinkOutput_v7_1_ScheduleVideoFrame(This,theFrame,displayTime,displayDuration,timeScale)   \\r
-    ( (This)->lpVtbl -> ScheduleVideoFrame(This,theFrame,displayTime,displayDuration,timeScale) ) \r
-\r
-#define IDeckLinkOutput_v7_1_SetScheduledFrameCompletionCallback(This,theCallback)     \\r
-    ( (This)->lpVtbl -> SetScheduledFrameCompletionCallback(This,theCallback) ) \r
-\r
-#define IDeckLinkOutput_v7_1_EnableAudioOutput(This,sampleRate,sampleType,channelCount)        \\r
-    ( (This)->lpVtbl -> EnableAudioOutput(This,sampleRate,sampleType,channelCount) ) \r
-\r
-#define IDeckLinkOutput_v7_1_DisableAudioOutput(This)  \\r
-    ( (This)->lpVtbl -> DisableAudioOutput(This) ) \r
-\r
-#define IDeckLinkOutput_v7_1_WriteAudioSamplesSync(This,buffer,sampleFrameCount,sampleFramesWritten)   \\r
-    ( (This)->lpVtbl -> WriteAudioSamplesSync(This,buffer,sampleFrameCount,sampleFramesWritten) ) \r
-\r
-#define IDeckLinkOutput_v7_1_BeginAudioPreroll(This)   \\r
-    ( (This)->lpVtbl -> BeginAudioPreroll(This) ) \r
-\r
-#define IDeckLinkOutput_v7_1_EndAudioPreroll(This)     \\r
-    ( (This)->lpVtbl -> EndAudioPreroll(This) ) \r
-\r
-#define IDeckLinkOutput_v7_1_ScheduleAudioSamples(This,buffer,sampleFrameCount,streamTime,timeScale,sampleFramesWritten)       \\r
-    ( (This)->lpVtbl -> ScheduleAudioSamples(This,buffer,sampleFrameCount,streamTime,timeScale,sampleFramesWritten) ) \r
-\r
-#define IDeckLinkOutput_v7_1_GetBufferedAudioSampleFrameCount(This,bufferedSampleCount)        \\r
-    ( (This)->lpVtbl -> GetBufferedAudioSampleFrameCount(This,bufferedSampleCount) ) \r
-\r
-#define IDeckLinkOutput_v7_1_FlushBufferedAudioSamples(This)   \\r
-    ( (This)->lpVtbl -> FlushBufferedAudioSamples(This) ) \r
-\r
-#define IDeckLinkOutput_v7_1_SetAudioCallback(This,theCallback)        \\r
-    ( (This)->lpVtbl -> SetAudioCallback(This,theCallback) ) \r
-\r
-#define IDeckLinkOutput_v7_1_StartScheduledPlayback(This,playbackStartTime,timeScale,playbackSpeed)    \\r
-    ( (This)->lpVtbl -> StartScheduledPlayback(This,playbackStartTime,timeScale,playbackSpeed) ) \r
-\r
-#define IDeckLinkOutput_v7_1_StopScheduledPlayback(This,stopPlaybackAtTime,actualStopTime,timeScale)   \\r
-    ( (This)->lpVtbl -> StopScheduledPlayback(This,stopPlaybackAtTime,actualStopTime,timeScale) ) \r
-\r
-#define IDeckLinkOutput_v7_1_GetHardwareReferenceClock(This,desiredTimeScale,elapsedTimeSinceSchedulerBegan)   \\r
-    ( (This)->lpVtbl -> GetHardwareReferenceClock(This,desiredTimeScale,elapsedTimeSinceSchedulerBegan) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkOutput_v7_1_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkInput_v7_1_INTERFACE_DEFINED__\r
-#define __IDeckLinkInput_v7_1_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkInput_v7_1 */\r
-/* [helpstring][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkInput_v7_1;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("2B54EDEF-5B32-429F-BA11-BB990596EACD")\r
-    IDeckLinkInput_v7_1 : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE DoesSupportVideoMode( \r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            /* [out] */ BMDDisplayModeSupport *result) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetDisplayModeIterator( \r
-            /* [out] */ IDeckLinkDisplayModeIterator_v7_1 **iterator) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE EnableVideoInput( \r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            BMDVideoInputFlags flags) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE DisableVideoInput( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE EnableAudioInput( \r
-            BMDAudioSampleRate sampleRate,\r
-            BMDAudioSampleType sampleType,\r
-            unsigned long channelCount) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE DisableAudioInput( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE ReadAudioSamples( \r
-            void *buffer,\r
-            unsigned long sampleFrameCount,\r
-            /* [out] */ unsigned long *sampleFramesRead,\r
-            /* [out] */ BMDTimeValue *audioPacketTime,\r
-            BMDTimeScale timeScale) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetBufferedAudioSampleFrameCount( \r
-            /* [out] */ unsigned long *bufferedSampleCount) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE StartStreams( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE StopStreams( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE PauseStreams( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetCallback( \r
-            /* [in] */ IDeckLinkInputCallback_v7_1 *theCallback) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkInput_v7_1Vtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkInput_v7_1 * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkInput_v7_1 * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkInput_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DoesSupportVideoMode )( \r
-            IDeckLinkInput_v7_1 * This,\r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            /* [out] */ BMDDisplayModeSupport *result);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetDisplayModeIterator )( \r
-            IDeckLinkInput_v7_1 * This,\r
-            /* [out] */ IDeckLinkDisplayModeIterator_v7_1 **iterator);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *EnableVideoInput )( \r
-            IDeckLinkInput_v7_1 * This,\r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            BMDVideoInputFlags flags);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DisableVideoInput )( \r
-            IDeckLinkInput_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *EnableAudioInput )( \r
-            IDeckLinkInput_v7_1 * This,\r
-            BMDAudioSampleRate sampleRate,\r
-            BMDAudioSampleType sampleType,\r
-            unsigned long channelCount);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DisableAudioInput )( \r
-            IDeckLinkInput_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *ReadAudioSamples )( \r
-            IDeckLinkInput_v7_1 * This,\r
-            void *buffer,\r
-            unsigned long sampleFrameCount,\r
-            /* [out] */ unsigned long *sampleFramesRead,\r
-            /* [out] */ BMDTimeValue *audioPacketTime,\r
-            BMDTimeScale timeScale);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetBufferedAudioSampleFrameCount )( \r
-            IDeckLinkInput_v7_1 * This,\r
-            /* [out] */ unsigned long *bufferedSampleCount);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *StartStreams )( \r
-            IDeckLinkInput_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *StopStreams )( \r
-            IDeckLinkInput_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *PauseStreams )( \r
-            IDeckLinkInput_v7_1 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetCallback )( \r
-            IDeckLinkInput_v7_1 * This,\r
-            /* [in] */ IDeckLinkInputCallback_v7_1 *theCallback);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkInput_v7_1Vtbl;\r
-\r
-    interface IDeckLinkInput_v7_1\r
-    {\r
-        CONST_VTBL struct IDeckLinkInput_v7_1Vtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkInput_v7_1_QueryInterface(This,riid,ppvObject)        \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkInput_v7_1_AddRef(This)       \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkInput_v7_1_Release(This)      \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkInput_v7_1_DoesSupportVideoMode(This,displayMode,pixelFormat,result)  \\r
-    ( (This)->lpVtbl -> DoesSupportVideoMode(This,displayMode,pixelFormat,result) ) \r
-\r
-#define IDeckLinkInput_v7_1_GetDisplayModeIterator(This,iterator)      \\r
-    ( (This)->lpVtbl -> GetDisplayModeIterator(This,iterator) ) \r
-\r
-#define IDeckLinkInput_v7_1_EnableVideoInput(This,displayMode,pixelFormat,flags)       \\r
-    ( (This)->lpVtbl -> EnableVideoInput(This,displayMode,pixelFormat,flags) ) \r
-\r
-#define IDeckLinkInput_v7_1_DisableVideoInput(This)    \\r
-    ( (This)->lpVtbl -> DisableVideoInput(This) ) \r
-\r
-#define IDeckLinkInput_v7_1_EnableAudioInput(This,sampleRate,sampleType,channelCount)  \\r
-    ( (This)->lpVtbl -> EnableAudioInput(This,sampleRate,sampleType,channelCount) ) \r
-\r
-#define IDeckLinkInput_v7_1_DisableAudioInput(This)    \\r
-    ( (This)->lpVtbl -> DisableAudioInput(This) ) \r
-\r
-#define IDeckLinkInput_v7_1_ReadAudioSamples(This,buffer,sampleFrameCount,sampleFramesRead,audioPacketTime,timeScale)  \\r
-    ( (This)->lpVtbl -> ReadAudioSamples(This,buffer,sampleFrameCount,sampleFramesRead,audioPacketTime,timeScale) ) \r
-\r
-#define IDeckLinkInput_v7_1_GetBufferedAudioSampleFrameCount(This,bufferedSampleCount) \\r
-    ( (This)->lpVtbl -> GetBufferedAudioSampleFrameCount(This,bufferedSampleCount) ) \r
-\r
-#define IDeckLinkInput_v7_1_StartStreams(This) \\r
-    ( (This)->lpVtbl -> StartStreams(This) ) \r
-\r
-#define IDeckLinkInput_v7_1_StopStreams(This)  \\r
-    ( (This)->lpVtbl -> StopStreams(This) ) \r
-\r
-#define IDeckLinkInput_v7_1_PauseStreams(This) \\r
-    ( (This)->lpVtbl -> PauseStreams(This) ) \r
-\r
-#define IDeckLinkInput_v7_1_SetCallback(This,theCallback)      \\r
-    ( (This)->lpVtbl -> SetCallback(This,theCallback) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkInput_v7_1_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkInputCallback_v7_3_INTERFACE_DEFINED__\r
-#define __IDeckLinkInputCallback_v7_3_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkInputCallback_v7_3 */\r
-/* [helpstring][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkInputCallback_v7_3;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("FD6F311D-4D00-444B-9ED4-1F25B5730AD0")\r
-    IDeckLinkInputCallback_v7_3 : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE VideoInputFormatChanged( \r
-            /* [in] */ BMDVideoInputFormatChangedEvents notificationEvents,\r
-            /* [in] */ IDeckLinkDisplayMode *newDisplayMode,\r
-            /* [in] */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE VideoInputFrameArrived( \r
-            /* [in] */ IDeckLinkVideoInputFrame_v7_3 *videoFrame,\r
-            /* [in] */ IDeckLinkAudioInputPacket *audioPacket) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkInputCallback_v7_3Vtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkInputCallback_v7_3 * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkInputCallback_v7_3 * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkInputCallback_v7_3 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *VideoInputFormatChanged )( \r
-            IDeckLinkInputCallback_v7_3 * This,\r
-            /* [in] */ BMDVideoInputFormatChangedEvents notificationEvents,\r
-            /* [in] */ IDeckLinkDisplayMode *newDisplayMode,\r
-            /* [in] */ BMDDetectedVideoInputFormatFlags detectedSignalFlags);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *VideoInputFrameArrived )( \r
-            IDeckLinkInputCallback_v7_3 * This,\r
-            /* [in] */ IDeckLinkVideoInputFrame_v7_3 *videoFrame,\r
-            /* [in] */ IDeckLinkAudioInputPacket *audioPacket);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkInputCallback_v7_3Vtbl;\r
-\r
-    interface IDeckLinkInputCallback_v7_3\r
-    {\r
-        CONST_VTBL struct IDeckLinkInputCallback_v7_3Vtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkInputCallback_v7_3_QueryInterface(This,riid,ppvObject)        \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkInputCallback_v7_3_AddRef(This)       \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkInputCallback_v7_3_Release(This)      \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkInputCallback_v7_3_VideoInputFormatChanged(This,notificationEvents,newDisplayMode,detectedSignalFlags)        \\r
-    ( (This)->lpVtbl -> VideoInputFormatChanged(This,notificationEvents,newDisplayMode,detectedSignalFlags) ) \r
-\r
-#define IDeckLinkInputCallback_v7_3_VideoInputFrameArrived(This,videoFrame,audioPacket)        \\r
-    ( (This)->lpVtbl -> VideoInputFrameArrived(This,videoFrame,audioPacket) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkInputCallback_v7_3_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkOutput_v7_3_INTERFACE_DEFINED__\r
-#define __IDeckLinkOutput_v7_3_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkOutput_v7_3 */\r
-/* [helpstring][local][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkOutput_v7_3;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("271C65E3-C323-4344-A30F-D908BCB20AA3")\r
-    IDeckLinkOutput_v7_3 : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE DoesSupportVideoMode( \r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            /* [out] */ BMDDisplayModeSupport *result) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetDisplayModeIterator( \r
-            /* [out] */ IDeckLinkDisplayModeIterator **iterator) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetScreenPreviewCallback( \r
-            /* [in] */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE EnableVideoOutput( \r
-            BMDDisplayMode displayMode,\r
-            BMDVideoOutputFlags flags) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE DisableVideoOutput( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetVideoOutputFrameMemoryAllocator( \r
-            /* [in] */ IDeckLinkMemoryAllocator *theAllocator) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE CreateVideoFrame( \r
-            long width,\r
-            long height,\r
-            long rowBytes,\r
-            BMDPixelFormat pixelFormat,\r
-            BMDFrameFlags flags,\r
-            /* [out] */ IDeckLinkMutableVideoFrame **outFrame) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE CreateAncillaryData( \r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            /* [out] */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE DisplayVideoFrameSync( \r
-            /* [in] */ IDeckLinkVideoFrame *theFrame) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE ScheduleVideoFrame( \r
-            /* [in] */ IDeckLinkVideoFrame *theFrame,\r
-            BMDTimeValue displayTime,\r
-            BMDTimeValue displayDuration,\r
-            BMDTimeScale timeScale) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetScheduledFrameCompletionCallback( \r
-            /* [in] */ IDeckLinkVideoOutputCallback *theCallback) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetBufferedVideoFrameCount( \r
-            /* [out] */ unsigned long *bufferedFrameCount) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE EnableAudioOutput( \r
-            BMDAudioSampleRate sampleRate,\r
-            BMDAudioSampleType sampleType,\r
-            unsigned long channelCount,\r
-            BMDAudioOutputStreamType streamType) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE DisableAudioOutput( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE WriteAudioSamplesSync( \r
-            /* [in] */ void *buffer,\r
-            unsigned long sampleFrameCount,\r
-            /* [out] */ unsigned long *sampleFramesWritten) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE BeginAudioPreroll( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE EndAudioPreroll( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE ScheduleAudioSamples( \r
-            /* [in] */ void *buffer,\r
-            unsigned long sampleFrameCount,\r
-            BMDTimeValue streamTime,\r
-            BMDTimeScale timeScale,\r
-            /* [out] */ unsigned long *sampleFramesWritten) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetBufferedAudioSampleFrameCount( \r
-            /* [out] */ unsigned long *bufferedSampleFrameCount) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE FlushBufferedAudioSamples( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetAudioCallback( \r
-            /* [in] */ IDeckLinkAudioOutputCallback *theCallback) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE StartScheduledPlayback( \r
-            BMDTimeValue playbackStartTime,\r
-            BMDTimeScale timeScale,\r
-            double playbackSpeed) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE StopScheduledPlayback( \r
-            BMDTimeValue stopPlaybackAtTime,\r
-            /* [out] */ BMDTimeValue *actualStopTime,\r
-            BMDTimeScale timeScale) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE IsScheduledPlaybackRunning( \r
-            /* [out] */ BOOL *active) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetHardwareReferenceClock( \r
-            BMDTimeScale desiredTimeScale,\r
-            /* [out] */ BMDTimeValue *elapsedTimeSinceSchedulerBegan) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkOutput_v7_3Vtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkOutput_v7_3 * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkOutput_v7_3 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DoesSupportVideoMode )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            /* [out] */ BMDDisplayModeSupport *result);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetDisplayModeIterator )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            /* [out] */ IDeckLinkDisplayModeIterator **iterator);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetScreenPreviewCallback )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            /* [in] */ IDeckLinkScreenPreviewCallback *previewCallback);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *EnableVideoOutput )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            BMDDisplayMode displayMode,\r
-            BMDVideoOutputFlags flags);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DisableVideoOutput )( \r
-            IDeckLinkOutput_v7_3 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetVideoOutputFrameMemoryAllocator )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            /* [in] */ IDeckLinkMemoryAllocator *theAllocator);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *CreateVideoFrame )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            long width,\r
-            long height,\r
-            long rowBytes,\r
-            BMDPixelFormat pixelFormat,\r
-            BMDFrameFlags flags,\r
-            /* [out] */ IDeckLinkMutableVideoFrame **outFrame);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *CreateAncillaryData )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            /* [out] */ IDeckLinkVideoFrameAncillary **outBuffer);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DisplayVideoFrameSync )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            /* [in] */ IDeckLinkVideoFrame *theFrame);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *ScheduleVideoFrame )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            /* [in] */ IDeckLinkVideoFrame *theFrame,\r
-            BMDTimeValue displayTime,\r
-            BMDTimeValue displayDuration,\r
-            BMDTimeScale timeScale);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetScheduledFrameCompletionCallback )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            /* [in] */ IDeckLinkVideoOutputCallback *theCallback);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetBufferedVideoFrameCount )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            /* [out] */ unsigned long *bufferedFrameCount);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *EnableAudioOutput )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            BMDAudioSampleRate sampleRate,\r
-            BMDAudioSampleType sampleType,\r
-            unsigned long channelCount,\r
-            BMDAudioOutputStreamType streamType);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DisableAudioOutput )( \r
-            IDeckLinkOutput_v7_3 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *WriteAudioSamplesSync )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            /* [in] */ void *buffer,\r
-            unsigned long sampleFrameCount,\r
-            /* [out] */ unsigned long *sampleFramesWritten);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *BeginAudioPreroll )( \r
-            IDeckLinkOutput_v7_3 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *EndAudioPreroll )( \r
-            IDeckLinkOutput_v7_3 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *ScheduleAudioSamples )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            /* [in] */ void *buffer,\r
-            unsigned long sampleFrameCount,\r
-            BMDTimeValue streamTime,\r
-            BMDTimeScale timeScale,\r
-            /* [out] */ unsigned long *sampleFramesWritten);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetBufferedAudioSampleFrameCount )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            /* [out] */ unsigned long *bufferedSampleFrameCount);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *FlushBufferedAudioSamples )( \r
-            IDeckLinkOutput_v7_3 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetAudioCallback )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            /* [in] */ IDeckLinkAudioOutputCallback *theCallback);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *StartScheduledPlayback )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            BMDTimeValue playbackStartTime,\r
-            BMDTimeScale timeScale,\r
-            double playbackSpeed);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *StopScheduledPlayback )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            BMDTimeValue stopPlaybackAtTime,\r
-            /* [out] */ BMDTimeValue *actualStopTime,\r
-            BMDTimeScale timeScale);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *IsScheduledPlaybackRunning )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            /* [out] */ BOOL *active);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetHardwareReferenceClock )( \r
-            IDeckLinkOutput_v7_3 * This,\r
-            BMDTimeScale desiredTimeScale,\r
-            /* [out] */ BMDTimeValue *elapsedTimeSinceSchedulerBegan);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkOutput_v7_3Vtbl;\r
-\r
-    interface IDeckLinkOutput_v7_3\r
-    {\r
-        CONST_VTBL struct IDeckLinkOutput_v7_3Vtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkOutput_v7_3_QueryInterface(This,riid,ppvObject)       \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkOutput_v7_3_AddRef(This)      \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkOutput_v7_3_Release(This)     \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkOutput_v7_3_DoesSupportVideoMode(This,displayMode,pixelFormat,result) \\r
-    ( (This)->lpVtbl -> DoesSupportVideoMode(This,displayMode,pixelFormat,result) ) \r
-\r
-#define IDeckLinkOutput_v7_3_GetDisplayModeIterator(This,iterator)     \\r
-    ( (This)->lpVtbl -> GetDisplayModeIterator(This,iterator) ) \r
-\r
-#define IDeckLinkOutput_v7_3_SetScreenPreviewCallback(This,previewCallback)    \\r
-    ( (This)->lpVtbl -> SetScreenPreviewCallback(This,previewCallback) ) \r
-\r
-#define IDeckLinkOutput_v7_3_EnableVideoOutput(This,displayMode,flags) \\r
-    ( (This)->lpVtbl -> EnableVideoOutput(This,displayMode,flags) ) \r
-\r
-#define IDeckLinkOutput_v7_3_DisableVideoOutput(This)  \\r
-    ( (This)->lpVtbl -> DisableVideoOutput(This) ) \r
-\r
-#define IDeckLinkOutput_v7_3_SetVideoOutputFrameMemoryAllocator(This,theAllocator)     \\r
-    ( (This)->lpVtbl -> SetVideoOutputFrameMemoryAllocator(This,theAllocator) ) \r
-\r
-#define IDeckLinkOutput_v7_3_CreateVideoFrame(This,width,height,rowBytes,pixelFormat,flags,outFrame)   \\r
-    ( (This)->lpVtbl -> CreateVideoFrame(This,width,height,rowBytes,pixelFormat,flags,outFrame) ) \r
-\r
-#define IDeckLinkOutput_v7_3_CreateAncillaryData(This,displayMode,pixelFormat,outBuffer)       \\r
-    ( (This)->lpVtbl -> CreateAncillaryData(This,displayMode,pixelFormat,outBuffer) ) \r
-\r
-#define IDeckLinkOutput_v7_3_DisplayVideoFrameSync(This,theFrame)      \\r
-    ( (This)->lpVtbl -> DisplayVideoFrameSync(This,theFrame) ) \r
-\r
-#define IDeckLinkOutput_v7_3_ScheduleVideoFrame(This,theFrame,displayTime,displayDuration,timeScale)   \\r
-    ( (This)->lpVtbl -> ScheduleVideoFrame(This,theFrame,displayTime,displayDuration,timeScale) ) \r
-\r
-#define IDeckLinkOutput_v7_3_SetScheduledFrameCompletionCallback(This,theCallback)     \\r
-    ( (This)->lpVtbl -> SetScheduledFrameCompletionCallback(This,theCallback) ) \r
-\r
-#define IDeckLinkOutput_v7_3_GetBufferedVideoFrameCount(This,bufferedFrameCount)       \\r
-    ( (This)->lpVtbl -> GetBufferedVideoFrameCount(This,bufferedFrameCount) ) \r
-\r
-#define IDeckLinkOutput_v7_3_EnableAudioOutput(This,sampleRate,sampleType,channelCount,streamType)     \\r
-    ( (This)->lpVtbl -> EnableAudioOutput(This,sampleRate,sampleType,channelCount,streamType) ) \r
-\r
-#define IDeckLinkOutput_v7_3_DisableAudioOutput(This)  \\r
-    ( (This)->lpVtbl -> DisableAudioOutput(This) ) \r
-\r
-#define IDeckLinkOutput_v7_3_WriteAudioSamplesSync(This,buffer,sampleFrameCount,sampleFramesWritten)   \\r
-    ( (This)->lpVtbl -> WriteAudioSamplesSync(This,buffer,sampleFrameCount,sampleFramesWritten) ) \r
-\r
-#define IDeckLinkOutput_v7_3_BeginAudioPreroll(This)   \\r
-    ( (This)->lpVtbl -> BeginAudioPreroll(This) ) \r
-\r
-#define IDeckLinkOutput_v7_3_EndAudioPreroll(This)     \\r
-    ( (This)->lpVtbl -> EndAudioPreroll(This) ) \r
-\r
-#define IDeckLinkOutput_v7_3_ScheduleAudioSamples(This,buffer,sampleFrameCount,streamTime,timeScale,sampleFramesWritten)       \\r
-    ( (This)->lpVtbl -> ScheduleAudioSamples(This,buffer,sampleFrameCount,streamTime,timeScale,sampleFramesWritten) ) \r
-\r
-#define IDeckLinkOutput_v7_3_GetBufferedAudioSampleFrameCount(This,bufferedSampleFrameCount)   \\r
-    ( (This)->lpVtbl -> GetBufferedAudioSampleFrameCount(This,bufferedSampleFrameCount) ) \r
-\r
-#define IDeckLinkOutput_v7_3_FlushBufferedAudioSamples(This)   \\r
-    ( (This)->lpVtbl -> FlushBufferedAudioSamples(This) ) \r
-\r
-#define IDeckLinkOutput_v7_3_SetAudioCallback(This,theCallback)        \\r
-    ( (This)->lpVtbl -> SetAudioCallback(This,theCallback) ) \r
-\r
-#define IDeckLinkOutput_v7_3_StartScheduledPlayback(This,playbackStartTime,timeScale,playbackSpeed)    \\r
-    ( (This)->lpVtbl -> StartScheduledPlayback(This,playbackStartTime,timeScale,playbackSpeed) ) \r
-\r
-#define IDeckLinkOutput_v7_3_StopScheduledPlayback(This,stopPlaybackAtTime,actualStopTime,timeScale)   \\r
-    ( (This)->lpVtbl -> StopScheduledPlayback(This,stopPlaybackAtTime,actualStopTime,timeScale) ) \r
-\r
-#define IDeckLinkOutput_v7_3_IsScheduledPlaybackRunning(This,active)   \\r
-    ( (This)->lpVtbl -> IsScheduledPlaybackRunning(This,active) ) \r
-\r
-#define IDeckLinkOutput_v7_3_GetHardwareReferenceClock(This,desiredTimeScale,elapsedTimeSinceSchedulerBegan)   \\r
-    ( (This)->lpVtbl -> GetHardwareReferenceClock(This,desiredTimeScale,elapsedTimeSinceSchedulerBegan) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkOutput_v7_3_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkInput_v7_3_INTERFACE_DEFINED__\r
-#define __IDeckLinkInput_v7_3_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkInput_v7_3 */\r
-/* [helpstring][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkInput_v7_3;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("4973F012-9925-458C-871C-18774CDBBECB")\r
-    IDeckLinkInput_v7_3 : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE DoesSupportVideoMode( \r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            /* [out] */ BMDDisplayModeSupport *result) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetDisplayModeIterator( \r
-            /* [out] */ IDeckLinkDisplayModeIterator **iterator) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetScreenPreviewCallback( \r
-            /* [in] */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE EnableVideoInput( \r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            BMDVideoInputFlags flags) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE DisableVideoInput( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetAvailableVideoFrameCount( \r
-            /* [out] */ unsigned long *availableFrameCount) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE EnableAudioInput( \r
-            BMDAudioSampleRate sampleRate,\r
-            BMDAudioSampleType sampleType,\r
-            unsigned long channelCount) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE DisableAudioInput( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE GetAvailableAudioSampleFrameCount( \r
-            /* [out] */ unsigned long *availableSampleFrameCount) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE StartStreams( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE StopStreams( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE PauseStreams( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE FlushStreams( void) = 0;\r
-        \r
-        virtual HRESULT STDMETHODCALLTYPE SetCallback( \r
-            /* [in] */ IDeckLinkInputCallback_v7_3 *theCallback) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkInput_v7_3Vtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkInput_v7_3 * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkInput_v7_3 * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkInput_v7_3 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DoesSupportVideoMode )( \r
-            IDeckLinkInput_v7_3 * This,\r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            /* [out] */ BMDDisplayModeSupport *result);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetDisplayModeIterator )( \r
-            IDeckLinkInput_v7_3 * This,\r
-            /* [out] */ IDeckLinkDisplayModeIterator **iterator);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetScreenPreviewCallback )( \r
-            IDeckLinkInput_v7_3 * This,\r
-            /* [in] */ IDeckLinkScreenPreviewCallback *previewCallback);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *EnableVideoInput )( \r
-            IDeckLinkInput_v7_3 * This,\r
-            BMDDisplayMode displayMode,\r
-            BMDPixelFormat pixelFormat,\r
-            BMDVideoInputFlags flags);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DisableVideoInput )( \r
-            IDeckLinkInput_v7_3 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetAvailableVideoFrameCount )( \r
-            IDeckLinkInput_v7_3 * This,\r
-            /* [out] */ unsigned long *availableFrameCount);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *EnableAudioInput )( \r
-            IDeckLinkInput_v7_3 * This,\r
-            BMDAudioSampleRate sampleRate,\r
-            BMDAudioSampleType sampleType,\r
-            unsigned long channelCount);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *DisableAudioInput )( \r
-            IDeckLinkInput_v7_3 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetAvailableAudioSampleFrameCount )( \r
-            IDeckLinkInput_v7_3 * This,\r
-            /* [out] */ unsigned long *availableSampleFrameCount);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *StartStreams )( \r
-            IDeckLinkInput_v7_3 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *StopStreams )( \r
-            IDeckLinkInput_v7_3 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *PauseStreams )( \r
-            IDeckLinkInput_v7_3 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *FlushStreams )( \r
-            IDeckLinkInput_v7_3 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *SetCallback )( \r
-            IDeckLinkInput_v7_3 * This,\r
-            /* [in] */ IDeckLinkInputCallback_v7_3 *theCallback);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkInput_v7_3Vtbl;\r
-\r
-    interface IDeckLinkInput_v7_3\r
-    {\r
-        CONST_VTBL struct IDeckLinkInput_v7_3Vtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkInput_v7_3_QueryInterface(This,riid,ppvObject)        \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkInput_v7_3_AddRef(This)       \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkInput_v7_3_Release(This)      \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkInput_v7_3_DoesSupportVideoMode(This,displayMode,pixelFormat,result)  \\r
-    ( (This)->lpVtbl -> DoesSupportVideoMode(This,displayMode,pixelFormat,result) ) \r
-\r
-#define IDeckLinkInput_v7_3_GetDisplayModeIterator(This,iterator)      \\r
-    ( (This)->lpVtbl -> GetDisplayModeIterator(This,iterator) ) \r
-\r
-#define IDeckLinkInput_v7_3_SetScreenPreviewCallback(This,previewCallback)     \\r
-    ( (This)->lpVtbl -> SetScreenPreviewCallback(This,previewCallback) ) \r
-\r
-#define IDeckLinkInput_v7_3_EnableVideoInput(This,displayMode,pixelFormat,flags)       \\r
-    ( (This)->lpVtbl -> EnableVideoInput(This,displayMode,pixelFormat,flags) ) \r
-\r
-#define IDeckLinkInput_v7_3_DisableVideoInput(This)    \\r
-    ( (This)->lpVtbl -> DisableVideoInput(This) ) \r
-\r
-#define IDeckLinkInput_v7_3_GetAvailableVideoFrameCount(This,availableFrameCount)      \\r
-    ( (This)->lpVtbl -> GetAvailableVideoFrameCount(This,availableFrameCount) ) \r
-\r
-#define IDeckLinkInput_v7_3_EnableAudioInput(This,sampleRate,sampleType,channelCount)  \\r
-    ( (This)->lpVtbl -> EnableAudioInput(This,sampleRate,sampleType,channelCount) ) \r
-\r
-#define IDeckLinkInput_v7_3_DisableAudioInput(This)    \\r
-    ( (This)->lpVtbl -> DisableAudioInput(This) ) \r
-\r
-#define IDeckLinkInput_v7_3_GetAvailableAudioSampleFrameCount(This,availableSampleFrameCount)  \\r
-    ( (This)->lpVtbl -> GetAvailableAudioSampleFrameCount(This,availableSampleFrameCount) ) \r
-\r
-#define IDeckLinkInput_v7_3_StartStreams(This) \\r
-    ( (This)->lpVtbl -> StartStreams(This) ) \r
-\r
-#define IDeckLinkInput_v7_3_StopStreams(This)  \\r
-    ( (This)->lpVtbl -> StopStreams(This) ) \r
-\r
-#define IDeckLinkInput_v7_3_PauseStreams(This) \\r
-    ( (This)->lpVtbl -> PauseStreams(This) ) \r
-\r
-#define IDeckLinkInput_v7_3_FlushStreams(This) \\r
-    ( (This)->lpVtbl -> FlushStreams(This) ) \r
-\r
-#define IDeckLinkInput_v7_3_SetCallback(This,theCallback)      \\r
-    ( (This)->lpVtbl -> SetCallback(This,theCallback) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkInput_v7_3_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDeckLinkVideoInputFrame_v7_3_INTERFACE_DEFINED__\r
-#define __IDeckLinkVideoInputFrame_v7_3_INTERFACE_DEFINED__\r
-\r
-/* interface IDeckLinkVideoInputFrame_v7_3 */\r
-/* [helpstring][local][uuid][object] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDeckLinkVideoInputFrame_v7_3;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("CF317790-2894-11DE-8C30-0800200C9A66")\r
-    IDeckLinkVideoInputFrame_v7_3 : public IDeckLinkVideoFrame\r
-    {\r
-    public:\r
-        virtual HRESULT STDMETHODCALLTYPE GetStreamTime( \r
-            /* [out] */ BMDTimeValue *frameTime,\r
-            /* [out] */ BMDTimeValue *frameDuration,\r
-            BMDTimeScale timeScale) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDeckLinkVideoInputFrame_v7_3Vtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDeckLinkVideoInputFrame_v7_3 * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ \r
-            __RPC__deref_out  void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDeckLinkVideoInputFrame_v7_3 * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDeckLinkVideoInputFrame_v7_3 * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetWidth )( \r
-            IDeckLinkVideoInputFrame_v7_3 * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetHeight )( \r
-            IDeckLinkVideoInputFrame_v7_3 * This);\r
-        \r
-        long ( STDMETHODCALLTYPE *GetRowBytes )( \r
-            IDeckLinkVideoInputFrame_v7_3 * This);\r
-        \r
-        BMDPixelFormat ( STDMETHODCALLTYPE *GetPixelFormat )( \r
-            IDeckLinkVideoInputFrame_v7_3 * This);\r
-        \r
-        BMDFrameFlags ( STDMETHODCALLTYPE *GetFlags )( \r
-            IDeckLinkVideoInputFrame_v7_3 * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetBytes )( \r
-            IDeckLinkVideoInputFrame_v7_3 * This,\r
-            /* [out] */ void **buffer);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetTimecode )( \r
-            IDeckLinkVideoInputFrame_v7_3 * This,\r
-            BMDTimecodeFormat format,\r
-            /* [out] */ IDeckLinkTimecode **timecode);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetAncillaryData )( \r
-            IDeckLinkVideoInputFrame_v7_3 * This,\r
-            /* [out] */ IDeckLinkVideoFrameAncillary **ancillary);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetStreamTime )( \r
-            IDeckLinkVideoInputFrame_v7_3 * This,\r
-            /* [out] */ BMDTimeValue *frameTime,\r
-            /* [out] */ BMDTimeValue *frameDuration,\r
-            BMDTimeScale timeScale);\r
-        \r
-        END_INTERFACE\r
-    } IDeckLinkVideoInputFrame_v7_3Vtbl;\r
-\r
-    interface IDeckLinkVideoInputFrame_v7_3\r
-    {\r
-        CONST_VTBL struct IDeckLinkVideoInputFrame_v7_3Vtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDeckLinkVideoInputFrame_v7_3_QueryInterface(This,riid,ppvObject)      \\r
-    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \r
-\r
-#define IDeckLinkVideoInputFrame_v7_3_AddRef(This)     \\r
-    ( (This)->lpVtbl -> AddRef(This) ) \r
-\r
-#define IDeckLinkVideoInputFrame_v7_3_Release(This)    \\r
-    ( (This)->lpVtbl -> Release(This) ) \r
-\r
-\r
-#define IDeckLinkVideoInputFrame_v7_3_GetWidth(This)   \\r
-    ( (This)->lpVtbl -> GetWidth(This) ) \r
-\r
-#define IDeckLinkVideoInputFrame_v7_3_GetHeight(This)  \\r
-    ( (This)->lpVtbl -> GetHeight(This) ) \r
-\r
-#define IDeckLinkVideoInputFrame_v7_3_GetRowBytes(This)        \\r
-    ( (This)->lpVtbl -> GetRowBytes(This) ) \r
-\r
-#define IDeckLinkVideoInputFrame_v7_3_GetPixelFormat(This)     \\r
-    ( (This)->lpVtbl -> GetPixelFormat(This) ) \r
-\r
-#define IDeckLinkVideoInputFrame_v7_3_GetFlags(This)   \\r
-    ( (This)->lpVtbl -> GetFlags(This) ) \r
-\r
-#define IDeckLinkVideoInputFrame_v7_3_GetBytes(This,buffer)    \\r
-    ( (This)->lpVtbl -> GetBytes(This,buffer) ) \r
-\r
-#define IDeckLinkVideoInputFrame_v7_3_GetTimecode(This,format,timecode)        \\r
-    ( (This)->lpVtbl -> GetTimecode(This,format,timecode) ) \r
-\r
-#define IDeckLinkVideoInputFrame_v7_3_GetAncillaryData(This,ancillary) \\r
-    ( (This)->lpVtbl -> GetAncillaryData(This,ancillary) ) \r
-\r
-\r
-#define IDeckLinkVideoInputFrame_v7_3_GetStreamTime(This,frameTime,frameDuration,timeScale)    \\r
-    ( (This)->lpVtbl -> GetStreamTime(This,frameTime,frameDuration,timeScale) ) \r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IDeckLinkVideoInputFrame_v7_3_INTERFACE_DEFINED__ */\r
-\r
-#endif /* __DeckLinkAPI_LIBRARY_DEFINED__ */\r
-\r
-/* Additional Prototypes for ALL interfaces */\r
-\r
-/* end of Additional Prototypes */\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif\r
-\r
-\r
diff --git a/server/consumers/decklink/DeckLinkAPI_i.c b/server/consumers/decklink/DeckLinkAPI_i.c
deleted file mode 100644 (file)
index b2e87a9..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-\r
-\r
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */\r
-\r
-/* link this file in with the server and any clients */\r
-\r
-\r
- /* File created by MIDL compiler version 7.00.0500 */\r
-/* at Wed Jan 13 09:58:01 2010\r
- */\r
-/* Compiler settings for .\consumers\declink\DeckLinkAPI.idl:\r
-    Oicf, W1, Zp8, env=Win32 (32b run)\r
-    protocol : dce , ms_ext, c_ext, robust\r
-    error checks: allocation ref bounds_check enum stub_data \r
-    VC __declspec() decoration level: \r
-         __declspec(uuid()), __declspec(selectany), __declspec(novtable)\r
-         DECLSPEC_UUID(), MIDL_INTERFACE()\r
-*/\r
-//@@MIDL_FILE_HEADING(  )\r
-\r
-#pragma warning( disable: 4049 )  /* more than 64k source lines */\r
-\r
-\r
-#ifdef __cplusplus\r
-extern "C"{\r
-#endif \r
-\r
-\r
-#include <rpc.h>\r
-#include <rpcndr.h>\r
-\r
-#ifdef _MIDL_USE_GUIDDEF_\r
-\r
-#ifndef INITGUID\r
-#define INITGUID\r
-#include <guiddef.h>\r
-#undef INITGUID\r
-#else\r
-#include <guiddef.h>\r
-#endif\r
-\r
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \\r
-        DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)\r
-\r
-#else // !_MIDL_USE_GUIDDEF_\r
-\r
-#ifndef __IID_DEFINED__\r
-#define __IID_DEFINED__\r
-\r
-typedef struct _IID\r
-{\r
-    unsigned long x;\r
-    unsigned short s1;\r
-    unsigned short s2;\r
-    unsigned char  c[8];\r
-} IID;\r
-\r
-#endif // __IID_DEFINED__\r
-\r
-#ifndef CLSID_DEFINED\r
-#define CLSID_DEFINED\r
-typedef IID CLSID;\r
-#endif // CLSID_DEFINED\r
-\r
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \\r
-        const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}\r
-\r
-#endif !_MIDL_USE_GUIDDEF_\r
-\r
-MIDL_DEFINE_GUID(IID, LIBID_DeckLinkAPI,0xD864517A,0xEDD5,0x466D,0x86,0x7D,0xC8,0x19,0xF1,0xC0,0x52,0xBB);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoOutputCallback,0xE763A626,0x4A3C,0x49D1,0xBF,0x13,0xE7,0xAD,0x36,0x92,0xAE,0x52);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkInputCallback,0x31D28EE7,0x88B6,0x4CB1,0x89,0x7A,0xCD,0xBF,0x79,0xA2,0x64,0x14);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkMemoryAllocator,0xB36EB6E7,0x9D29,0x4AA8,0x92,0xEF,0x84,0x3B,0x87,0xA2,0x89,0xE8);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkAudioOutputCallback,0x403C681B,0x7F46,0x4A12,0xB9,0x93,0x2B,0xB1,0x27,0x08,0x4E,0xE6);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkIterator,0x74E936FC,0xCC28,0x4A67,0x81,0xA0,0x1E,0x94,0xE5,0x2D,0x4E,0x69);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkAPIInformation,0x7BEA3C68,0x730D,0x4322,0xAF,0x34,0x8A,0x71,0x52,0xB5,0x32,0xA4);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkDisplayModeIterator,0x455D741F,0x1779,0x4800,0x86,0xF5,0x0B,0x5D,0x13,0xD7,0x97,0x51);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkDisplayMode,0x87451E84,0x2B7E,0x439E,0xA6,0x29,0x43,0x93,0xEA,0x4A,0x85,0x50);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLink,0x62BFF75D,0x6569,0x4E55,0x8D,0x4D,0x66,0xAA,0x03,0x82,0x9A,0xBC);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkOutput,0x29228142,0xEB8C,0x4141,0xA6,0x21,0xF7,0x40,0x26,0x45,0x09,0x55);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkInput,0x300C135A,0x9F43,0x48E2,0x99,0x06,0x6D,0x79,0x11,0xD9,0x3C,0xF1);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkTimecode,0xEFB9BCA6,0xA521,0x44F7,0xBD,0x69,0x23,0x32,0xF2,0x4D,0x9E,0xE6);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoFrame,0xA8D8238E,0x6B18,0x4196,0x99,0xE1,0x5A,0xF7,0x17,0xB8,0x3D,0x32);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkMutableVideoFrame,0x46FCEE00,0xB4E6,0x43D0,0x91,0xC0,0x02,0x3A,0x7F,0xCE,0xB3,0x4F);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoInputFrame,0x9A74FA41,0xAE9F,0x47AC,0x8C,0xF4,0x01,0xF4,0x2D,0xD5,0x99,0x65);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoFrameAncillary,0x732E723C,0xD1A4,0x4E29,0x9E,0x8E,0x4A,0x88,0x79,0x7A,0x00,0x04);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkAudioInputPacket,0xE43D5870,0x2894,0x11DE,0x8C,0x30,0x08,0x00,0x20,0x0C,0x9A,0x66);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkScreenPreviewCallback,0x373F499D,0x4B4D,0x4518,0xAD,0x22,0x63,0x54,0xE5,0xA5,0x82,0x5E);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkGLScreenPreviewHelper,0xBA575CD9,0xA15E,0x497B,0xB2,0xC2,0xF9,0xAF,0xE7,0xBE,0x4E,0xBA);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkConfiguration,0xB8EAD569,0xB764,0x47F0,0xA7,0x3F,0xAE,0x40,0xDF,0x6C,0xBF,0x10);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkAttributes,0xABC11843,0xD966,0x44CB,0x96,0xE2,0xA1,0xCB,0x5D,0x31,0x35,0xC4);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkKeyer,0x89AFCAF5,0x65F8,0x421E,0x98,0xF7,0x96,0xFE,0x5F,0x5B,0xFB,0xA3);\r
-\r
-\r
-MIDL_DEFINE_GUID(CLSID, CLSID_CDeckLinkIterator,0xD9EDA3B3,0x2887,0x41FA,0xB7,0x24,0x01,0x7C,0xF1,0xEB,0x1D,0x37);\r
-\r
-\r
-MIDL_DEFINE_GUID(CLSID, CLSID_CDeckLinkGLScreenPreviewHelper,0xD398CEE7,0x4434,0x4CA3,0x9B,0xA6,0x5A,0xE3,0x45,0x56,0xB9,0x05);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkDisplayModeIterator_v7_1,0xB28131B6,0x59AC,0x4857,0xB5,0xAC,0xCD,0x75,0xD5,0x88,0x3E,0x2F);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkDisplayMode_v7_1,0xAF0CD6D5,0x8376,0x435E,0x84,0x33,0x54,0xF9,0xDD,0x53,0x0A,0xC3);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoFrame_v7_1,0x333F3A10,0x8C2D,0x43CF,0xB7,0x9D,0x46,0x56,0x0F,0xEE,0xA1,0xCE);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoInputFrame_v7_1,0xC8B41D95,0x8848,0x40EE,0x9B,0x37,0x6E,0x34,0x17,0xFB,0x11,0x4B);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkAudioInputPacket_v7_1,0xC86DE4F6,0xA29F,0x42E3,0xAB,0x3A,0x13,0x63,0xE2,0x9F,0x07,0x88);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoOutputCallback_v7_1,0xEBD01AFA,0xE4B0,0x49C6,0xA0,0x1D,0xED,0xB9,0xD1,0xB5,0x5F,0xD9);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkInputCallback_v7_1,0x7F94F328,0x5ED4,0x4E9F,0x97,0x29,0x76,0xA8,0x6B,0xDC,0x99,0xCC);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkOutput_v7_1,0xAE5B3E9B,0x4E1E,0x4535,0xB6,0xE8,0x48,0x0F,0xF5,0x2F,0x6C,0xE5);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkInput_v7_1,0x2B54EDEF,0x5B32,0x429F,0xBA,0x11,0xBB,0x99,0x05,0x96,0xEA,0xCD);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkInputCallback_v7_3,0xFD6F311D,0x4D00,0x444B,0x9E,0xD4,0x1F,0x25,0xB5,0x73,0x0A,0xD0);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkOutput_v7_3,0x271C65E3,0xC323,0x4344,0xA3,0x0F,0xD9,0x08,0xBC,0xB2,0x0A,0xA3);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkInput_v7_3,0x4973F012,0x9925,0x458C,0x87,0x1C,0x18,0x77,0x4C,0xDB,0xBE,0xCB);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoInputFrame_v7_3,0xCF317790,0x2894,0x11DE,0x8C,0x30,0x08,0x00,0x20,0x0C,0x9A,0x66);\r
-\r
-#undef MIDL_DEFINE_GUID\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-\r
-\r
diff --git a/server/consumers/decklink/DeckLinkAPI_v7_1.idl b/server/consumers/decklink/DeckLinkAPI_v7_1.idl
deleted file mode 100644 (file)
index 20d4e5f..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/* -LICENSE-START-\r
-** Copyright (c) 2009 Blackmagic Design\r
-**\r
-** Permission is hereby granted, free of charge, to any person or organization\r
-** obtaining a copy of the software and accompanying documentation covered by\r
-** this license (the "Software") to use, reproduce, display, distribute,\r
-** execute, and transmit the Software, and to prepare derivative works of the\r
-** Software, and to permit third-parties to whom the Software is furnished to\r
-** do so, all subject to the following:\r
-** \r
-** The copyright notices in the Software and this entire statement, including\r
-** the above license grant, this restriction and the following disclaimer,\r
-** must be included in all copies of the Software, in whole or in part, and\r
-** all derivative works of the Software, unless such copies or derivative\r
-** works are solely in the form of machine-executable object code generated by\r
-** a source language processor.\r
-** \r
-** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
-** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
-** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\r
-** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\r
-** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\r
-** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r
-** DEALINGS IN THE SOFTWARE.\r
-** -LICENSE-END-\r
-*/\r
-/* DeckLinkAPI_v7_1.idl */\r
-\r
-       interface IDeckLinkDisplayModeIterator_v7_1;\r
-       interface IDeckLinkDisplayMode_v7_1;\r
-       interface IDeckLinkVideoFrame_v7_1;\r
-       interface IDeckLinkVideoInputFrame_v7_1;\r
-       interface IDeckLinkAudioInputPacket_v7_1;\r
-       \r
-       [object, uuid(B28131B6-59AC-4857-B5AC-CD75D5883E2F),\r
-        helpstring("IDeckLinkDisplayModeIterator_v7_1 enumerates over supported input/output display modes.")]\r
-       interface IDeckLinkDisplayModeIterator_v7_1 : IUnknown\r
-       {\r
-               HRESULT         Next ([out] IDeckLinkDisplayMode_v7_1** deckLinkDisplayMode);\r
-       };\r
-\r
-\r
-       [object, uuid(AF0CD6D5-8376-435E-8433-54F9DD530AC3),\r
-        helpstring("IDeckLinkDisplayMode_v7_1 represents a display mode")]\r
-       interface IDeckLinkDisplayMode_v7_1 : IUnknown\r
-       {\r
-               HRESULT                         GetName ([out] BSTR* name);\r
-               BMDDisplayMode          GetDisplayMode ();\r
-               long                            GetWidth ();\r
-               long                            GetHeight ();\r
-               HRESULT                         GetFrameRate ([out] BMDTimeValue *frameDuration, [out] BMDTimeScale *timeScale);\r
-       };\r
-       \r
-       [object, uuid(EBD01AFA-E4B0-49C6-A01D-EDB9D1B55FD9),\r
-     helpstring("IDeckLinkVideoOutputCallback. Frame completion callback.")]\r
-    interface IDeckLinkVideoOutputCallback_v7_1 : IUnknown\r
-    {\r
-        HRESULT                ScheduledFrameCompleted ([in] IDeckLinkVideoFrame_v7_1* completedFrame, [in] BMDOutputFrameCompletionResult result);\r
-    };\r
-       \r
-    [object, uuid(7F94F328-5ED4-4E9F-9729-76A86BDC99CC),\r
-     helpstring("IDeckLinkInputCallback_v7_1. Frame arrival callback.")]\r
-    interface IDeckLinkInputCallback_v7_1 : IUnknown\r
-    {\r
-        HRESULT                VideoInputFrameArrived ([in] IDeckLinkVideoInputFrame_v7_1* videoFrame, [in] IDeckLinkAudioInputPacket_v7_1* audioPacket);\r
-    };\r
-       \r
-\r
-    [object, uuid(AE5B3E9B-4E1E-4535-B6E8-480FF52F6CE5), local,\r
-     helpstring("IDeckLinkOutput_v7_1.  Created by QueryInterface from IDeckLink.")]\r
-    interface IDeckLinkOutput_v7_1 : IUnknown\r
-    {\r
-               HRESULT         DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport *result);\r
-               HRESULT         GetDisplayModeIterator ([out] IDeckLinkDisplayModeIterator_v7_1 **iterator);\r
-               \r
-               // Video output\r
-        HRESULT                EnableVideoOutput (BMDDisplayMode displayMode);\r
-        HRESULT                DisableVideoOutput ();\r
-               \r
-               HRESULT         SetVideoOutputFrameMemoryAllocator ([in] IDeckLinkMemoryAllocator* theAllocator);\r
-        HRESULT                CreateVideoFrame (long width, long height, long rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, IDeckLinkVideoFrame_v7_1** outFrame);\r
-        HRESULT                CreateVideoFrameFromBuffer (void* buffer, long width, long height, long rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, IDeckLinkVideoFrame_v7_1** outFrame);\r
-\r
-        HRESULT                DisplayVideoFrameSync (IDeckLinkVideoFrame_v7_1* theFrame);\r
-        HRESULT                ScheduleVideoFrame (IDeckLinkVideoFrame_v7_1* theFrame, BMDTimeValue displayTime, BMDTimeValue displayDuration, BMDTimeScale timeScale);\r
-        HRESULT                SetScheduledFrameCompletionCallback ([in] IDeckLinkVideoOutputCallback_v7_1* theCallback);\r
-               \r
-               // Audio output\r
-               HRESULT         EnableAudioOutput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, unsigned long channelCount);\r
-               HRESULT         DisableAudioOutput ();\r
-               \r
-               HRESULT         WriteAudioSamplesSync (void* buffer, unsigned long sampleFrameCount, [out] unsigned long *sampleFramesWritten);\r
-               \r
-               HRESULT         BeginAudioPreroll ();\r
-               HRESULT         EndAudioPreroll ();\r
-               HRESULT         ScheduleAudioSamples (void* buffer, unsigned long sampleFrameCount, BMDTimeValue streamTime, BMDTimeScale timeScale, [out] unsigned long *sampleFramesWritten);\r
-               \r
-               HRESULT         GetBufferedAudioSampleFrameCount ( [out] unsigned long *bufferedSampleCount);\r
-               HRESULT         FlushBufferedAudioSamples ();\r
-               \r
-               HRESULT         SetAudioCallback ( [in] IDeckLinkAudioOutputCallback* theCallback);\r
-               \r
-               // Output control\r
-        HRESULT                StartScheduledPlayback (BMDTimeValue playbackStartTime, BMDTimeScale timeScale, double playbackSpeed);\r
-        HRESULT                StopScheduledPlayback (BMDTimeValue stopPlaybackAtTime, BMDTimeValue *actualStopTime, BMDTimeScale timeScale);\r
-        HRESULT                GetHardwareReferenceClock (BMDTimeScale desiredTimeScale, BMDTimeValue *elapsedTimeSinceSchedulerBegan);\r
-    };\r
-\r
-    [object, uuid(2B54EDEF-5B32-429F-BA11-BB990596EACD),\r
-     helpstring("IDeckLinkInput_v7_1.  Created by QueryInterface from IDeckLink.")]\r
-    interface IDeckLinkInput_v7_1 : IUnknown\r
-    {\r
-               HRESULT         DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport *result);\r
-               HRESULT         GetDisplayModeIterator ([out] IDeckLinkDisplayModeIterator_v7_1 **iterator);\r
-               \r
-               // Video input\r
-               HRESULT         EnableVideoInput (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDVideoInputFlags flags);\r
-               HRESULT         DisableVideoInput ();\r
-               \r
-               // Audio input\r
-               HRESULT         EnableAudioInput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, unsigned long channelCount);\r
-               HRESULT         DisableAudioInput ();\r
-               HRESULT         ReadAudioSamples (void* buffer, unsigned long sampleFrameCount, [out] unsigned long *sampleFramesRead, [out] BMDTimeValue *audioPacketTime, BMDTimeScale timeScale);\r
-               HRESULT         GetBufferedAudioSampleFrameCount ( [out] unsigned long *bufferedSampleCount);\r
-               \r
-               // Input control\r
-               HRESULT         StartStreams ();\r
-               HRESULT         StopStreams ();\r
-               HRESULT         PauseStreams ();\r
-               HRESULT         SetCallback ([in] IDeckLinkInputCallback_v7_1* theCallback);\r
-    };\r
-       \r
-       [object, uuid(333F3A10-8C2D-43CF-B79D-46560FEEA1CE), local,\r
-     helpstring("IDeckLinkVideoFrame_v7_1.  Created by IDeckLinkVideoOutput::CreateVideoFrame.")]\r
-    interface IDeckLinkVideoFrame_v7_1 : IUnknown\r
-    {\r
-        long                           GetWidth ();\r
-        long                           GetHeight ();\r
-        long                           GetRowBytes ();\r
-        BMDPixelFormat         GetPixelFormat ();\r
-        BMDFrameFlags          GetFlags ();\r
-        HRESULT                                GetBytes (void* *buffer);\r
-    };\r
-       \r
-       [object, uuid(C8B41D95-8848-40EE-9B37-6E3417FB114B), local,\r
-     helpstring("IDeckLinkVideoInputFrame_v7_1.  Provided by the IDeckLinkVideoInput frame arrival callback.")]\r
-    interface IDeckLinkVideoInputFrame_v7_1 : IDeckLinkVideoFrame_v7_1\r
-    {\r
-        HRESULT                                GetFrameTime (BMDTimeValue *frameTime, BMDTimeValue *frameDuration, BMDTimeScale timeScale);\r
-    };\r
-       \r
-       [object, uuid(C86DE4F6-A29F-42E3-AB3A-1363E29F0788), local,\r
-     helpstring("IDeckLinkAudioInputPacket_v7_1.  Provided by the IDeckLinkInput callback.")]\r
-    interface IDeckLinkAudioInputPacket_v7_1 : IUnknown\r
-    {\r
-               long                            GetSampleCount ();\r
-               HRESULT                         GetBytes (void* *buffer);\r
-               HRESULT                         GetAudioPacketTime (BMDTimeValue *packetTime, BMDTimeScale timeScale);\r
-    };\r
-       \r
diff --git a/server/consumers/decklink/DeckLinkAPI_v7_3.idl b/server/consumers/decklink/DeckLinkAPI_v7_3.idl
deleted file mode 100644 (file)
index 682b200..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/* -LICENSE-START-
-** Copyright (c) 2009 Blackmagic Design
-**
-** Permission is hereby granted, free of charge, to any person or organization
-** obtaining a copy of the software and accompanying documentation covered by
-** this license (the "Software") to use, reproduce, display, distribute,
-** execute, and transmit the Software, and to prepare derivative works of the
-** Software, and to permit third-parties to whom the Software is furnished to
-** do so, all subject to the following:
-** 
-** The copyright notices in the Software and this entire statement, including
-** the above license grant, this restriction and the following disclaimer,
-** must be included in all copies of the Software, in whole or in part, and
-** all derivative works of the Software, unless such copies or derivative
-** works are solely in the form of machine-executable object code generated by
-** a source language processor.
-** 
-** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
-** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
-** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-** DEALINGS IN THE SOFTWARE.
-** -LICENSE-END-
-*/
-
-/* Forward Declarations */
-
-interface IDeckLinkInputCallback_v7_3;
-interface IDeckLinkOutput_v7_3;
-interface IDeckLinkInput_v7_3;
-interface IDeckLinkVideoInputFrame_v7_3;
-
-/* End Forward Declarations */
-
-
-/* Interface IDeckLinkInputCallback - Frame arrival callback. */
-
-[
-    object,
-    uuid(FD6F311D-4D00-444B-9ED4-1F25B5730AD0),
-    helpstring("Frame arrival callback.")
-] interface IDeckLinkInputCallback_v7_3 : IUnknown
-{
-    HRESULT VideoInputFormatChanged([in] BMDVideoInputFormatChangedEvents notificationEvents, [in] IDeckLinkDisplayMode *newDisplayMode, [in] BMDDetectedVideoInputFormatFlags detectedSignalFlags);
-    HRESULT VideoInputFrameArrived([in] IDeckLinkVideoInputFrame_v7_3 *videoFrame, [in] IDeckLinkAudioInputPacket *audioPacket);
-};
-
-/* End Interface IDeckLinkInputCallback */
-
-
-/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
-
-[
-    object,
-    uuid(271C65E3-C323-4344-A30F-D908BCB20AA3),
-    local, 
-    helpstring("Created by QueryInterface from IDeckLink.")
-] interface IDeckLinkOutput_v7_3 : IUnknown
-{
-    HRESULT DoesSupportVideoMode(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport *result);
-    HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator **iterator);
-
-    HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback *previewCallback);
-
-    /* Video Output */
-
-    HRESULT EnableVideoOutput(BMDDisplayMode displayMode, BMDVideoOutputFlags flags);
-    HRESULT DisableVideoOutput(void);
-
-    HRESULT SetVideoOutputFrameMemoryAllocator([in] IDeckLinkMemoryAllocator *theAllocator);
-    HRESULT CreateVideoFrame(long width, long height, long rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, [out] IDeckLinkMutableVideoFrame **outFrame);
-    HRESULT CreateAncillaryData(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] IDeckLinkVideoFrameAncillary **outBuffer);
-
-    HRESULT DisplayVideoFrameSync([in] IDeckLinkVideoFrame *theFrame);
-    HRESULT ScheduleVideoFrame([in] IDeckLinkVideoFrame *theFrame, BMDTimeValue displayTime, BMDTimeValue displayDuration, BMDTimeScale timeScale);
-    HRESULT SetScheduledFrameCompletionCallback([in] IDeckLinkVideoOutputCallback *theCallback);
-    HRESULT GetBufferedVideoFrameCount([out] unsigned long *bufferedFrameCount);
-
-    /* Audio Output */
-
-    HRESULT EnableAudioOutput(BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, unsigned long channelCount, BMDAudioOutputStreamType streamType);
-    HRESULT DisableAudioOutput(void);
-
-    HRESULT WriteAudioSamplesSync([in] void *buffer, unsigned long sampleFrameCount, [out] unsigned long *sampleFramesWritten);
-
-    HRESULT BeginAudioPreroll(void);
-    HRESULT EndAudioPreroll(void);
-    HRESULT ScheduleAudioSamples([in] void *buffer, unsigned long sampleFrameCount, BMDTimeValue streamTime, BMDTimeScale timeScale, [out] unsigned long *sampleFramesWritten);
-
-    HRESULT GetBufferedAudioSampleFrameCount([out] unsigned long *bufferedSampleFrameCount);
-    HRESULT FlushBufferedAudioSamples(void);
-
-    HRESULT SetAudioCallback([in] IDeckLinkAudioOutputCallback *theCallback);
-
-    /* Output Control */
-
-    HRESULT StartScheduledPlayback(BMDTimeValue playbackStartTime, BMDTimeScale timeScale, double playbackSpeed);
-    HRESULT StopScheduledPlayback(BMDTimeValue stopPlaybackAtTime, [out] BMDTimeValue *actualStopTime, BMDTimeScale timeScale);
-    HRESULT IsScheduledPlaybackRunning([out] BOOL *active);
-    HRESULT GetHardwareReferenceClock(BMDTimeScale desiredTimeScale, [out] BMDTimeValue *elapsedTimeSinceSchedulerBegan);
-};
-
-/* End Interface IDeckLinkOutput */
-
-/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
-
-[
-    object,
-    uuid(4973F012-9925-458C-871C-18774CDBBECB),
-    helpstring("Created by QueryInterface from IDeckLink.")
-] interface IDeckLinkInput_v7_3 : IUnknown
-{
-    HRESULT DoesSupportVideoMode(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport *result);
-    HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator **iterator);
-
-    HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback *previewCallback);
-
-    /* Video Input */
-
-    HRESULT EnableVideoInput(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDVideoInputFlags flags);
-    HRESULT DisableVideoInput(void);
-    HRESULT GetAvailableVideoFrameCount([out] unsigned long *availableFrameCount);
-
-    /* Audio Input */
-
-    HRESULT EnableAudioInput(BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, unsigned long channelCount);
-    HRESULT DisableAudioInput(void);
-    HRESULT GetAvailableAudioSampleFrameCount([out] unsigned long *availableSampleFrameCount);
-
-    /* Input Control */
-
-    HRESULT StartStreams(void);
-    HRESULT StopStreams(void);
-    HRESULT PauseStreams(void);
-    HRESULT FlushStreams(void);
-    HRESULT SetCallback([in] IDeckLinkInputCallback_v7_3 *theCallback);
-};
-
-/* End Interface IDeckLinkInput */
-
-
-/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
-
-[
-    object,
-    uuid(CF317790-2894-11DE-8C30-0800200C9A66),
-    local, 
-    helpstring("Provided by the IDeckLinkVideoInput frame arrival callback.")
-] interface IDeckLinkVideoInputFrame_v7_3 : IDeckLinkVideoFrame
-{
-    HRESULT GetStreamTime([out] BMDTimeValue *frameTime, [out] BMDTimeValue *frameDuration, BMDTimeScale timeScale);
-};
-
-/* End Interface IDeckLinkVideoInputFrame */
-
diff --git a/server/consumers/decklink/DecklinkVideoConsumer.cpp b/server/consumers/decklink/DecklinkVideoConsumer.cpp
deleted file mode 100644 (file)
index f29767a..0000000
+++ /dev/null
@@ -1,482 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "..\..\Application.h"\r
-#include "DecklinkVideoConsumer.h"\r
-#include "..\..\frame\FramePlaybackControl.h"\r
-#include "..\..\frame\Frame.h"\r
-#include "..\..\frame\FramePlaybackStrategy.h"\r
-#include "DeckLinkAPI_h.h"\r
-#include "..\..\utils\image\Image.hpp"\r
-#include "..\..\utils\event.h"\r
-\r
-#include <queue>\r
-\r
-namespace caspar {\r
-namespace decklink {\r
-\r
-\r
-struct DecklinkVideoConsumer::Implementation : public IDeckLinkVideoOutputCallback\r
-{\r
-       //struct DecklinkFrameQueue : private caspar::utils::LockableObject\r
-       //{\r
-       //      std::queue<FramePtr> availibleFrames;\r
-       //      std::queue<FramePtr> scheduledFrames;\r
-\r
-       //      void add_free(FramePtr pFrame) {\r
-       //              availibleFrames.push(pFrame);\r
-       //      }\r
-       //};\r
-\r
-       struct DecklinkFrameManager;\r
-       struct DecklinkVideoFrame : public Frame {\r
-               explicit DecklinkVideoFrame(DecklinkFrameManager* pFactory) : factoryID_(pFactory->ID()) {\r
-                       IDeckLinkMutableVideoFrame* pFrame = NULL;\r
-                       const FrameFormatDescription& fmtDesc = pFactory->pConsumerImpl_->GetFrameFormatDescription();\r
-                       if(pFactory->pConsumerImpl_->pDecklinkOutput_->CreateVideoFrame(fmtDesc.width, fmtDesc.height, fmtDesc.size/fmtDesc.height, bmdFormat8BitBGRA, bmdFrameFlagDefault, &pFrame) != S_OK) {\r
-                               throw std::exception("DECKLINK: Failed to create frame");\r
-                       }\r
-                       pDecklinkFrame_ = pFrame;\r
-                       pFrame->Release();\r
-\r
-                       if(pDecklinkFrame_->GetBytes((void**)&pBytes_) != S_OK)\r
-                               throw std::exception("DECKLINK: Failed to get bytes to frame");\r
-               }\r
-               virtual unsigned char* GetDataPtr() const {\r
-                       HasVideo(true);\r
-                       return pBytes_;\r
-               }\r
-               virtual bool HasValidDataPtr() const {\r
-                       return true;\r
-               }\r
-\r
-               virtual unsigned int GetDataSize() const {\r
-                       return pDecklinkFrame_->GetRowBytes() * pDecklinkFrame_->GetHeight();\r
-               }\r
-               virtual FrameMetadata GetMetadata() const {\r
-                       IDeckLinkMutableVideoFrame* pFramePtr = pDecklinkFrame_;\r
-                       return reinterpret_cast<FrameMetadata>(pFramePtr);\r
-               }\r
-               const utils::ID& FactoryID() const {\r
-                       return factoryID_;\r
-               }\r
-\r
-               utils::ID factoryID_;\r
-               CComPtr<IDeckLinkMutableVideoFrame> pDecklinkFrame_;\r
-               unsigned char* pBytes_;\r
-       };\r
-\r
-       struct DecklinkPlaybackStrategy : public IFramePlaybackStrategy\r
-       {\r
-               explicit DecklinkPlaybackStrategy(Implementation* pConsumerImpl) : pConsumerImpl_(pConsumerImpl), currentReservedFrameIndex_(0), totalFramesScheduled_(0)\r
-               {\r
-                       for(int i = 0; i<4; ++i) {\r
-                               reservedFrames_.push_back(pConsumerImpl_->pFrameManager_->CreateReservedFrame());\r
-                       }\r
-               }\r
-\r
-               FrameManagerPtr GetFrameManager()\r
-               {\r
-                       return pConsumerImpl_->pFrameManager_;\r
-               }\r
-\r
-               FramePtr GetReservedFrame()\r
-               {\r
-                       FramePtr pResult;\r
-                       if(reservedFrames_.size() > currentReservedFrameIndex_) {\r
-                               pResult = reservedFrames_[currentReservedFrameIndex_];\r
-                               currentReservedFrameIndex_ = (currentReservedFrameIndex_+1) & 3;\r
-                       }\r
-                       return pResult;\r
-               }\r
-\r
-               void DisplayFrame(Frame* pFrame)\r
-               {\r
-                       if(pFrame != NULL && pFrame->HasValidDataPtr()) {\r
-                               if(GetFrameManager()->Owns(*pFrame)) {\r
-                                       DoRender(pFrame);\r
-                               }\r
-                               else {\r
-                                       FramePtr pTempFrame = GetReservedFrame();\r
-                                       if(pTempFrame && pFrame->GetDataSize() == pTempFrame->GetDataSize()) {\r
-                                               utils::image::Copy(pTempFrame->GetDataPtr(), pFrame->GetDataPtr(), pTempFrame->GetDataSize());\r
-                                               DoRender(pTempFrame.get());\r
-                                       }\r
-                                       else\r
-                                               LOG << TEXT("DECKLINK: Failed to get reserved frame");\r
-                               }\r
-                       }\r
-                       else {\r
-                               LOG << TEXT("DECKLINK: Tried to render frame with no data");\r
-                       }\r
-               }\r
-               void DoRender(Frame* pFrame) {\r
-                       static DWORD lastTime = 0;\r
-                       static bool bDoLog = true;\r
-                       DWORD timediff = timeGetTime() - lastTime;\r
-                       if(timediff < 30) {\r
-                               Sleep(40 - timediff);\r
-                               lastTime += 40;\r
-                       }\r
-                       else\r
-                               lastTime = timeGetTime();\r
-\r
-                       if(pConsumerImpl_->pDecklinkOutput_->DisplayVideoFrameSync(reinterpret_cast<IDeckLinkMutableVideoFrame*>(pFrame->GetMetadata())) != S_OK) {\r
-                               if(bDoLog) {\r
-                                       LOG << TEXT("DECKLINK: Failed to render frame");\r
-                                       bDoLog = false;\r
-                               }\r
-                       }\r
-                       else {\r
-                               bDoLog = true;\r
-                       }\r
-//                     lastFrameID_ = pFrame->ID();\r
-               }\r
-\r
-               int totalFramesScheduled_;\r
-               std::vector<FramePtr> reservedFrames_;\r
-               unsigned int currentReservedFrameIndex_;\r
-               Implementation* pConsumerImpl_;\r
-       };\r
-       friend struct DecklinkPlaybackStrategy;\r
-\r
-       struct DecklinkFrameManager : public caspar::FrameManager\r
-       {\r
-               explicit DecklinkFrameManager(Implementation* pConsumerImpl) : pConsumerImpl_(pConsumerImpl)\r
-               {\r
-                       pFrameManager_.reset(new SystemFrameManager(pConsumerImpl_->GetFrameFormatDescription()));\r
-               }\r
-\r
-               FramePtr CreateFrame() {\r
-                       return pFrameManager_->CreateFrame();\r
-               }\r
-\r
-               FramePtr CreateReservedFrame() {\r
-                       return FramePtr(new DecklinkVideoFrame(this));\r
-               }\r
-\r
-               const FrameFormatDescription& GetFrameFormatDescription() const {\r
-                       return pConsumerImpl_->GetFrameFormatDescription();\r
-               }\r
-\r
-               Implementation* pConsumerImpl_;\r
-               SystemFrameManagerPtr pFrameManager_;\r
-       };\r
-\r
-       typedef std::tr1::shared_ptr<DecklinkFrameManager> DecklinkFrameManagerPtr;\r
-\r
-       CComPtr<IDeckLink> pDecklink_;\r
-       CComQIPtr<IDeckLinkOutput> pDecklinkOutput_;\r
-       CComQIPtr<IDeckLinkKeyer> pDecklinkKeyer_;\r
-\r
-       FramePlaybackControlPtr pPlaybackControl_;\r
-       DecklinkFrameManagerPtr pFrameManager_;\r
-       FrameFormat currentFormat_;\r
-\r
-//     IDeckLinkMutableVideoFrame* pNextFrame_;\r
-\r
-       explicit Implementation(CComPtr<IDeckLink> pDecklink) : pDecklink_(pDecklink), currentFormat_(FFormatPAL)//, pNextFrame_(NULL)\r
-       {}\r
-\r
-       ~Implementation()\r
-       {\r
-               ReleaseDevice();\r
-       }\r
-\r
-       bool SetupDevice()\r
-       {\r
-               if(!pDecklink_)\r
-                       return false;\r
-\r
-               BSTR pModelName;\r
-               pDecklink_->GetModelName(&pModelName);\r
-               if(pModelName != NULL)\r
-                       LOG << TEXT("DECKLINK: Modelname: ") << pModelName;\r
-\r
-               pDecklinkOutput_ = pDecklink_;\r
-               if(pDecklinkOutput_ == NULL) {\r
-                       LOG << TEXT("DECKLINK: Failed to get IDecklinkOutput interface");\r
-                       return false;\r
-               }\r
-\r
-               tstring strDesiredFrameFormat = caspar::GetApplication()->GetSetting(TEXT("videomode"));\r
-               if(strDesiredFrameFormat.size() == 0)\r
-                       strDesiredFrameFormat = TEXT("PAL");\r
-               FrameFormat casparVideoFormat = caspar::GetVideoFormat(strDesiredFrameFormat);\r
-               unsigned long decklinkVideoFormat = GetDecklinkVideoFormat(casparVideoFormat);\r
-               if(decklinkVideoFormat == ULONG_MAX) {\r
-                       LOG << "DECKLINK: Card does not support requested videoformat: " << strDesiredFrameFormat;\r
-                       return false;\r
-               }\r
-               \r
-               currentFormat_ = casparVideoFormat;\r
-\r
-               BMDDisplayModeSupport displayModeSupport;\r
-               if(FAILED(pDecklinkOutput_->DoesSupportVideoMode((BMDDisplayMode)decklinkVideoFormat, bmdFormat8BitBGRA, &displayModeSupport))) {\r
-                       LOG << TEXT("DECKLINK: Card does not support requested videoformat");\r
-                       return false;\r
-               }\r
-\r
-               pDecklinkOutput_->DisableAudioOutput();\r
-               if(FAILED(pDecklinkOutput_->EnableVideoOutput((BMDDisplayMode)decklinkVideoFormat, bmdVideoOutputFlagDefault))) {\r
-                       LOG << TEXT("DECKLINK: Could not enable video output");\r
-                       return false;\r
-               }\r
-\r
-               pFrameManager_.reset(new DecklinkFrameManager(this));\r
-\r
-               if(GetApplication()->GetSetting(TEXT("internalkey")) == TEXT("true")) {\r
-                       pDecklinkKeyer_ = pDecklink_;\r
-                       if(pDecklinkKeyer_) {\r
-                               bool bSuccess = true;\r
-                               if(FAILED(pDecklinkKeyer_->Enable(FALSE))) {\r
-                                       LOG << TEXT("DECKLINK: Failed to enable internal keyer");\r
-                                       bSuccess = false;\r
-                               }\r
-                               if(FAILED(pDecklinkKeyer_->SetLevel(255))) {\r
-                                       LOG << TEXT("DECKLINK: Keyer - Failed to set blend-level to max");\r
-                                       bSuccess = false;\r
-                               }\r
-\r
-                               if(bSuccess)\r
-                                       LOG << TEXT("DECKLINK: Successfully configured internal keyer");\r
-                       }\r
-                       else {\r
-                               LOG << TEXT("DECKLINK: Failed to get keyer-interface");\r
-                       }\r
-               }\r
-               else\r
-               {                       \r
-                       pDecklinkKeyer_ = pDecklink_;\r
-                       if(pDecklinkKeyer_) {\r
-                               bool bSuccess = true;\r
-                               if(FAILED(pDecklinkKeyer_->Enable(TRUE))) {\r
-                                       LOG << TEXT("DECKLINK: Failed to enable external keyer");\r
-                                       bSuccess = false;\r
-                               }\r
-\r
-                               if(bSuccess)\r
-                                       LOG << TEXT("DECKLINK: Successfully configured external keyer");\r
-                       }\r
-                       else {\r
-                               LOG << TEXT("DECKLINK: Failed to get keyer-interface");\r
-                       }\r
-               }\r
-\r
-               pPlaybackControl_.reset(new FramePlaybackControl(FramePlaybackStrategyPtr(new DecklinkPlaybackStrategy(this))));\r
-               pPlaybackControl_->Start();\r
-\r
-               LOG << TEXT("DECKLINK: Successfully initialized decklink for ") << strDesiredFrameFormat;\r
-               return true;\r
-       }\r
-\r
-       bool ReleaseDevice()\r
-       {\r
-               if(pPlaybackControl_)\r
-                       pPlaybackControl_->Stop();\r
-\r
-               if(pDecklinkKeyer_) {\r
-                       pDecklinkKeyer_.Release();\r
-               }\r
-\r
-               if(pDecklinkOutput_) {\r
-                       BOOL bIsRunning = FALSE;\r
-                       pDecklinkOutput_->IsScheduledPlaybackRunning(&bIsRunning);\r
-                       if(bIsRunning)\r
-                               pDecklinkOutput_->StopScheduledPlayback(0, NULL, 0);\r
-\r
-                       pDecklinkOutput_->DisableVideoOutput();\r
-               }\r
-\r
-               return true;\r
-       }\r
-\r
-       //void DoScheduleNextFrame() {\r
-       //      static int frame = 0;\r
-       //      static bool bLog = true;\r
-       //      if(pDecklinkOutput_->ScheduleVideoFrame(pNextFrame_, frame++, 1, 25) != S_OK) {\r
-       //              if(bLog) {\r
-       //                      LOG << TEXT("DECKLINK: Failed to display frame");\r
-       //                      bLog = false;\r
-       //              }\r
-       //      }\r
-       //      else {\r
-       //              if(((frame-1) % 25) == 0)\r
-       //                      LOG << TEXT("DECKLINK: Scheduled frame ") << (frame-1);\r
-       //              bLog = true;\r
-       //      }\r
-       //}\r
-\r
-       // IUnknown needs o a dummy implementation\r
-       virtual HRESULT STDMETHODCALLTYPE       QueryInterface(REFIID iid, LPVOID *ppv) \r
-       {\r
-               if(ppv != NULL) {\r
-                       if(iid == IID_IUnknown) {\r
-                               (*ppv) = this;\r
-                               return S_OK;\r
-                       }\r
-                       if(iid == IID_IDeckLinkVideoOutputCallback_v7_1) {\r
-                               (*ppv) = (IDeckLinkVideoOutputCallback_v7_1*)this;\r
-                               return S_OK;\r
-                       }\r
-                       if(iid == IID_IDeckLinkVideoOutputCallback) {\r
-                               (*ppv) = (IDeckLinkVideoOutputCallback*)this;\r
-                               return S_OK;\r
-                       }\r
-               }\r
-               return E_NOINTERFACE;\r
-       }\r
-       virtual ULONG STDMETHODCALLTYPE         AddRef() {return 1;}\r
-       virtual ULONG STDMETHODCALLTYPE         Release() {return 1;}\r
-\r
-       virtual HRESULT STDMETHODCALLTYPE ScheduledFrameCompleted(IDeckLinkVideoFrame* completedFrame, BMDOutputFrameCompletionResult result) {\r
-               //DoScheduleNextFrame();\r
-               return S_OK;\r
-       }\r
-\r
-       virtual HRESULT STDMETHODCALLTYPE ScheduledPlaybackHasStopped() {\r
-               return S_OK;\r
-       }\r
-\r
-       const FrameFormatDescription& GetFrameFormatDescription() const {\r
-               return FrameFormatDescription::FormatDescriptions[currentFormat_];\r
-       }\r
-\r
-       unsigned long GetDecklinkVideoFormat(FrameFormat fmt) {\r
-               switch(fmt)\r
-               {\r
-               case FFormatPAL:\r
-                       return bmdModePAL;\r
-\r
-               case FFormatNTSC:\r
-                       return bmdModeNTSC;\r
-\r
-               case FFormat576p2500:\r
-                       return ULONG_MAX;       //not supported\r
-\r
-               case FFormat720p5000:\r
-                       return bmdModeHD720p50;\r
-\r
-               case FFormat720p5994:\r
-                       return bmdModeHD720p5994;\r
-\r
-               case FFormat720p6000:\r
-                       return bmdModeHD720p60;\r
-\r
-               case FFormat1080p2397:\r
-                       return bmdModeHD1080p2398;\r
-\r
-               case FFormat1080p2400:\r
-                       return bmdModeHD1080p24;\r
-\r
-               case FFormat1080i5000:\r
-                       return bmdModeHD1080i50;\r
-\r
-               case FFormat1080i5994:\r
-                       return bmdModeHD1080i5994;\r
-\r
-               case FFormat1080i6000:\r
-                       return bmdModeHD1080i6000;\r
-\r
-               case FFormat1080p2500:\r
-                       return bmdModeHD1080p25;\r
-\r
-               case FFormat1080p2997:\r
-                       return bmdModeHD1080p2997;\r
-\r
-               case FFormat1080p3000:\r
-                       return bmdModeHD1080p30;\r
-               }\r
-\r
-               return ULONG_MAX;\r
-       }\r
-};\r
-\r
-DecklinkVideoConsumer::DecklinkVideoConsumer(ImplementationPtr pImpl) : pImpl_(pImpl)\r
-{}\r
-\r
-DecklinkVideoConsumer::~DecklinkVideoConsumer()\r
-{}\r
-\r
-VideoConsumerPtr DecklinkVideoConsumer::Create() {\r
-       VideoConsumerPtr pResult;\r
-\r
-       CComPtr<IDeckLinkIterator> pDecklinkIterator;\r
-       HRESULT result = pDecklinkIterator.CoCreateInstance(CLSID_CDeckLinkIterator);\r
-       if(FAILED(result)) {\r
-               LOG << TEXT("No Decklink drivers installed");\r
-               return pResult;\r
-       }\r
-\r
-       CComPtr<IDeckLink> pDecklink;\r
-       IDeckLink* pTempDecklink = NULL;\r
-       while(pDecklinkIterator->Next(&pTempDecklink) == S_OK) {\r
-               if(pDecklink == NULL)\r
-                       pDecklink = pTempDecklink;\r
-\r
-               if(pTempDecklink)\r
-                       pTempDecklink->Release();\r
-               pTempDecklink = NULL;\r
-       }\r
-\r
-       if(pDecklink == NULL) {\r
-               LOG << TEXT("No Decklink card found");\r
-               return pResult;\r
-       }\r
-\r
-       ImplementationPtr pImpl(new Implementation(pDecklink));\r
-       pResult.reset(new DecklinkVideoConsumer(pImpl));\r
-\r
-       if(pResult != 0 && pResult->SetupDevice(0) == false)\r
-               pResult.reset();\r
-\r
-       return pResult;\r
-}\r
-\r
-IPlaybackControl* DecklinkVideoConsumer::GetPlaybackControl() const\r
-{\r
-       return pImpl_->pPlaybackControl_.get();\r
-}\r
-\r
-bool DecklinkVideoConsumer::SetupDevice(unsigned int deviceIndex)\r
-{\r
-       return (pImpl_) ? pImpl_->SetupDevice() : false;\r
-}\r
-\r
-bool DecklinkVideoConsumer::ReleaseDevice()\r
-{\r
-       return (pImpl_) ? pImpl_->ReleaseDevice() : false;\r
-}\r
-\r
-void DecklinkVideoConsumer::EnableVideoOutput(){}\r
-void DecklinkVideoConsumer::DisableVideoOutput(){}\r
-\r
-const FrameFormatDescription& DecklinkVideoConsumer::GetFrameFormatDescription() const {\r
-       return pImpl_->GetFrameFormatDescription();\r
-}\r
-const TCHAR* DecklinkVideoConsumer::GetFormatDescription() const {\r
-       return pImpl_->GetFrameFormatDescription().name;\r
-}\r
-\r
-\r
-}      //namespace decklink\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/consumers/decklink/DecklinkVideoConsumer.h b/server/consumers/decklink/DecklinkVideoConsumer.h
deleted file mode 100644 (file)
index b4f94ae..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-#include "..\..\VideoConsumer.h"\r
-#include "..\..\MediaProducer.h"\r
-\r
-#include "..\..\utils\thread.h"\r
-#include "..\..\utils\lockable.h"\r
-#include "..\..\utils\Noncopyable.hpp"\r
-\r
-#include "..\..\frame\Frame.h"\r
-\r
-namespace caspar {\r
-namespace decklink {\r
-\r
-class DecklinkVideoConsumer : public IVideoConsumer, private utils::LockableObject, utils::Noncopyable\r
-{\r
-       struct Implementation;\r
-       typedef std::tr1::shared_ptr<Implementation> ImplementationPtr;\r
-       ImplementationPtr pImpl_;\r
-\r
-       explicit DecklinkVideoConsumer(ImplementationPtr pImpl);\r
-\r
-public:\r
-       virtual ~DecklinkVideoConsumer();\r
-\r
-       static VideoConsumerPtr Create();\r
-\r
-       virtual IPlaybackControl* GetPlaybackControl() const;\r
-\r
-       virtual void EnableVideoOutput();\r
-       virtual void DisableVideoOutput();\r
-       virtual bool SetupDevice(unsigned int deviceIndex);\r
-       virtual bool ReleaseDevice();\r
-       virtual const FrameFormatDescription& GetFrameFormatDescription() const;\r
-       virtual const TCHAR* GetFormatDescription() const;\r
-};\r
-\r
-}      //namespace gdi\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/frame/BitmapFrame.cpp b/server/frame/BitmapFrame.cpp
deleted file mode 100644 (file)
index e8b6dd7..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-#include "BitmapFrame.h"\r
-#include "BitmapFrameManager.h"\r
-\r
-namespace caspar{\r
-\r
-BitmapFrame::BitmapFrame(BitmapHolderPtr pBitmap, const utils::ID& factoryID)\r
-       : pBitmap_(pBitmap), factoryID_(factoryID)\r
-{\r
-}\r
-\r
-BitmapFrame::BitmapFrame(const utils::ID& factoryID, HWND hWnd, size_t height, size_t width, void* memory)\r
-       : pBitmap_(new BitmapHolder(hWnd, height, width, memory)), factoryID_(factoryID)\r
-{\r
-}\r
-\r
-BitmapFrame::~BitmapFrame()\r
-{\r
-}\r
-\r
-unsigned int BitmapFrame::GetDataSize() const \r
-{\r
-       return pBitmap_->Size();\r
-}\r
-\r
-unsigned char* BitmapFrame::GetDataPtr() const \r
-{\r
-       if(pBitmap_ != 0) \r
-       {\r
-               HasVideo(true);\r
-               return pBitmap_->GetPtr();\r
-       }\r
-       return 0;\r
-}\r
-\r
-BitmapHolderPtr BitmapFrame::GetBitmap() const\r
-{\r
-       return pBitmap_;\r
-}\r
-\r
-bool BitmapFrame::HasValidDataPtr() const \r
-{\r
-       return (pBitmap_ != 0 && pBitmap_->GetPtr() != 0);\r
-}\r
-\r
-FrameMetadata BitmapFrame::GetMetadata() const \r
-{\r
-       return (pBitmap_ != 0) ? reinterpret_cast<FrameMetadata>(pBitmap_->GetDC()) : 0;\r
-}\r
-\r
-const utils::ID& BitmapFrame::FactoryID() const\r
-{\r
-       return factoryID_;\r
-}\r
-\r
-HDC BitmapFrame::GetDC() const\r
-{\r
-       return pBitmap_->GetDC();\r
-}\r
-\r
-}
\ No newline at end of file
diff --git a/server/frame/BitmapFrame.h b/server/frame/BitmapFrame.h
deleted file mode 100644 (file)
index 0bee32e..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _BITMAP_FRAME_\r
-#define _BITMAP_FRAME_\r
-\r
-#include "..\utils\BitmapHolder.h"\r
-#include "Frame.h"\r
-\r
-namespace caspar{\r
-\r
-class BitmapFrame : public Frame\r
-{\r
-public:\r
-       explicit BitmapFrame(BitmapHolderPtr bitmap, const utils::ID& factoryID);\r
-       BitmapFrame(const utils::ID& factoryID, HWND hWnd, size_t height, size_t width, void* memory = NULL);\r
-       virtual ~BitmapFrame();\r
-\r
-       virtual unsigned char* GetDataPtr() const;\r
-       virtual bool HasValidDataPtr() const;\r
-       virtual unsigned int GetDataSize() const;\r
-       virtual FrameMetadata GetMetadata() const;\r
-\r
-       HDC GetDC() const;\r
-       BitmapHolderPtr GetBitmap() const;\r
-\r
-       const utils::ID& FactoryID() const;     \r
-\r
-private:\r
-       size_t size_;\r
-       BitmapHolderPtr pBitmap_;\r
-       utils::ID factoryID_;\r
-};\r
-typedef std::tr1::shared_ptr<BitmapFrame> BitmapFramePtr;\r
-\r
-}\r
-\r
-#endif\r
-\r
diff --git a/server/frame/BitmapFrameAdapter.cpp b/server/frame/BitmapFrameAdapter.cpp
deleted file mode 100644 (file)
index 1ceb770..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-#include "BitmapFrameAdapter.h"\r
-#include "BitmapFrameManager.h"\r
-\r
-namespace caspar{\r
-\r
-struct BitmapHolderAdapter : public caspar::BitmapHolder\r
-{\r
-       BitmapHolderAdapter(HWND hWnd, unsigned int width, unsigned int height, FramePtr pFrame) : BitmapHolder(hWnd, width, height, pFrame->GetDataPtr()), pFrame_(pFrame)\r
-       {\r
-               assert(pFrame->GetDataSize() == width*height*4);\r
-       }\r
-       FramePtr pFrame_;\r
-};\r
-\r
-BitmapFrameAdapter::BitmapFrameAdapter(HWND hWnd, unsigned int width, unsigned int height, FramePtr pFrame, const utils::ID& factoryID) : BitmapFrame(BitmapHolderPtr(new BitmapHolderAdapter(hWnd, width, height, pFrame)), factoryID)\r
-{\r
-}\r
-\r
-BitmapFrameAdapter::~BitmapFrameAdapter()\r
-{\r
-}\r
-\r
-}
\ No newline at end of file
diff --git a/server/frame/BitmapFrameAdapter.h b/server/frame/BitmapFrameAdapter.h
deleted file mode 100644 (file)
index 5714fcf..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _BITMAPADAPTER_FRAME_\r
-#define _BITMAPADAPTER_FRAME_\r
-\r
-#include "..\utils\BitmapHolder.h"\r
-#include "BitmapFrame.h"\r
-\r
-namespace caspar{\r
-\r
-class BitmapFrameAdapter : public BitmapFrame\r
-{\r
-public:\r
-       BitmapFrameAdapter(HWND hWnd, unsigned int width, unsigned int height, FramePtr pFrame, const utils::ID& factoryID);\r
-       virtual ~BitmapFrameAdapter();\r
-};\r
-typedef std::tr1::shared_ptr<BitmapFrameAdapter> BitmapFrameAdapterPtr;\r
-\r
-}\r
-\r
-#endif\r
-\r
diff --git a/server/frame/BitmapFrameManager.cpp b/server/frame/BitmapFrameManager.cpp
deleted file mode 100644 (file)
index 186a19b..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\stdafx.h"\r
-#include "BitmapFrameManager.h"\r
-#include "BitmapFrame.h"\r
-\r
-#include "..\utils\Lockable.h"\r
-#include "..\utils\BitmapHolder.h"\r
-\r
-#include <algorithm>\r
-\r
-namespace caspar {\r
-\r
-struct BitmapFrameManager::Implementation\r
-{\r
-\r
-       Implementation(BitmapFrameManager* self, const FrameFormatDescription& fmtDesc, HWND hWnd) : self_(self), fmtDesc_(fmtDesc), hWnd_(hWnd), pBitmaps_(new LockableBitmapVector())\r
-       {\r
-               features_.push_back("BITMAP_FRAME");\r
-       }\r
-\r
-       FramePtr CreateFrame()\r
-       {       \r
-               BitmapFramePtr pBitmapFrame;\r
-               {\r
-                       LockableObject::Lock lock(*pBitmaps_);\r
-                       if(!pBitmaps_->empty())\r
-                       {\r
-                               pBitmapFrame = pBitmaps_->back();\r
-                               pBitmaps_->pop_back();\r
-                       }\r
-               }\r
-               \r
-               if(!pBitmapFrame)               \r
-                       pBitmapFrame = self_->CreateBitmapFrame();\r
-               \r
-               class FrameDeallocator\r
-               {\r
-               public:\r
-                       FrameDeallocator(BitmapFramePtr pBitmapFrame, const LockableBitmapVectorPtr pBitmaps) : pBitmapFrame_(pBitmapFrame), pBitmaps_(pBitmaps){}\r
-                       void operator()(BitmapFrame*)\r
-                       {\r
-                               LockableObject::Lock lock(*pBitmaps_);\r
-                               pBitmaps_->push_back(BitmapFramePtr(new BitmapFrame(pBitmapFrame_->GetBitmap(), pBitmapFrame_->FactoryID())));\r
-                       }\r
-               private:\r
-                       LockableBitmapVectorPtr pBitmaps_;\r
-                       BitmapFramePtr pBitmapFrame_;\r
-               };\r
-               \r
-               return BitmapFramePtr(pBitmapFrame.get(), FrameDeallocator(pBitmapFrame, pBitmaps_));\r
-       }\r
-\r
-       const FrameFormatDescription& GetFrameFormatDescription() const \r
-       {\r
-               return fmtDesc_;\r
-       }\r
-\r
-       bool HasFeature(const std::string& feature) const\r
-       {\r
-               return std::find(features_.begin(), features_.end(), feature) != features_.end();\r
-       }\r
-       \r
-       BitmapFramePtr CreateBitmapFrame()\r
-       {\r
-               return BitmapFramePtr(new BitmapFrame(self_->ID(), hWnd_, fmtDesc_.width, fmtDesc_.height));\r
-       }\r
-\r
-       // TODO: need proper threading tools (R.N)\r
-       struct LockableBitmapVector : public std::vector<BitmapFramePtr>, public LockableObject{};\r
-       typedef std::tr1::shared_ptr<LockableBitmapVector> LockableBitmapVectorPtr;\r
-\r
-       LockableBitmapVectorPtr pBitmaps_;\r
-\r
-       std::vector<const std::string> features_;\r
-\r
-       const FrameFormatDescription fmtDesc_;  \r
-       const HWND hWnd_;\r
-\r
-       BitmapFrameManager* self_;\r
-};\r
-\r
-BitmapFrameManager::BitmapFrameManager(const FrameFormatDescription& fmtDesc, HWND hWnd) : pImpl_(new Implementation(this, fmtDesc, hWnd))\r
-{}\r
-\r
-BitmapFrameManager::~BitmapFrameManager()\r
-{}\r
-\r
-FramePtr BitmapFrameManager::CreateFrame()\r
-{      \r
-       return pImpl_->CreateFrame();\r
-}\r
-\r
-const FrameFormatDescription& BitmapFrameManager::GetFrameFormatDescription() const \r
-{\r
-       return pImpl_->GetFrameFormatDescription();\r
-}\r
-\r
-bool BitmapFrameManager::HasFeature(const std::string& feature) const\r
-{\r
-       return pImpl_->HasFeature(feature);\r
-}\r
-\r
-BitmapFramePtr BitmapFrameManager::CreateBitmapFrame()\r
-{\r
-       return pImpl_->CreateBitmapFrame();\r
-}\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/frame/BitmapFrameManager.h b/server/frame/BitmapFrameManager.h
deleted file mode 100644 (file)
index a30b3e1..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_BITMAPFRAMEMANAGER_H__\r
-#define _CASPAR_BITMAPFRAMEMANAGER_H__\r
-\r
-#include "..\utils\Noncopyable.hpp"\r
-\r
-#include "FrameManager.h"\r
-#include "BitmapFrame.h"\r
-\r
-namespace caspar {\r
-\r
-class BitmapFrameManager : public FrameManager, public utils::LockableObject, private utils::Noncopyable\r
-{      \r
-public:\r
-       BitmapFrameManager(const FrameFormatDescription& fmtDesc, HWND hWnd);\r
-       virtual ~BitmapFrameManager();\r
-\r
-       virtual FramePtr CreateFrame();\r
-       virtual const FrameFormatDescription& GetFrameFormatDescription() const;\r
-\r
-       virtual bool HasFeature(const std::string& feature) const;\r
-\r
-private:\r
-\r
-       virtual BitmapFramePtr CreateBitmapFrame();\r
-\r
-       struct Implementation;\r
-       std::tr1::shared_ptr<Implementation> pImpl_;\r
-};\r
-typedef std::tr1::shared_ptr<BitmapFrameManager> BitmapFrameManagerPtr;\r
-\r
-}      //namespace caspar\r
-#endif 
\ No newline at end of file
diff --git a/server/frame/BitmapFrameManagerAdapter.cpp b/server/frame/BitmapFrameManagerAdapter.cpp
deleted file mode 100644 (file)
index 509c648..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\stdafx.h"\r
-#include "BitmapFrameManagerAdapter.h"\r
-#include "BitmapFrameAdapter.h"\r
-\r
-#include "..\utils\Lockable.h"\r
-#include "..\utils\BitmapHolder.h"\r
-\r
-#include <algorithm>\r
-\r
-namespace caspar {\r
-\r
-struct BitmapFrameManagerAdapter::Implementation\r
-{\r
-       Implementation(BitmapFrameManagerAdapter* self, FrameManagerPtr pFrameManager, HWND hWnd) : self_(self), pFrameManager_(pFrameManager), hWnd_(hWnd)\r
-       {\r
-       }\r
-\r
-       BitmapFramePtr CreateBitmapFrame()\r
-       {\r
-               return BitmapFramePtr(new BitmapFrameAdapter(hWnd_, pFrameManager_->GetFrameFormatDescription().width, pFrameManager_->GetFrameFormatDescription().height, pFrameManager_->CreateFrame(), self_->ID()));\r
-       }\r
-\r
-       BitmapFrameManagerAdapter* self_;\r
-       const HWND hWnd_;\r
-       const FrameManagerPtr pFrameManager_;\r
-};\r
-\r
-BitmapFrameManagerAdapter::BitmapFrameManagerAdapter(FrameManagerPtr pFrameManager, HWND hWnd) : BitmapFrameManager(pFrameManager->GetFrameFormatDescription(), hWnd), pImpl_(new Implementation(this, pFrameManager, hWnd))\r
-{}\r
-\r
-BitmapFrameManagerAdapter::~BitmapFrameManagerAdapter()\r
-{}\r
-\r
-BitmapFramePtr BitmapFrameManagerAdapter::CreateBitmapFrame()\r
-{\r
-       return pImpl_->CreateBitmapFrame();\r
-}\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/frame/BitmapFrameManagerAdapter.h b/server/frame/BitmapFrameManagerAdapter.h
deleted file mode 100644 (file)
index 2d64ced..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_BITMAPFRAMEMANAGERADAPTER_H__\r
-#define _CASPAR_BITMAPFRAMEMANAGERADAPTER_H__\r
-\r
-#include "..\utils\Noncopyable.hpp"\r
-\r
-#include "BitmapFrameManager.h"\r
-\r
-namespace caspar {\r
-\r
-class BitmapFrameManagerAdapter : public BitmapFrameManager\r
-{      \r
-public:\r
-       BitmapFrameManagerAdapter(FrameManagerPtr pFrameManager, HWND hWnd);\r
-\r
-       virtual ~BitmapFrameManagerAdapter();\r
-       \r
-private:\r
-       \r
-       virtual BitmapFramePtr CreateBitmapFrame();\r
-\r
-       struct Implementation;\r
-       std::tr1::shared_ptr<Implementation> pImpl_;\r
-};\r
-typedef std::tr1::shared_ptr<BitmapFrameManagerAdapter> BitmapFrameManagerAdapterPtr;\r
-\r
-}      //namespace caspar\r
-#endif 
\ No newline at end of file
diff --git a/server/frame/ClipInfo.h b/server/frame/ClipInfo.h
deleted file mode 100644 (file)
index cc58811..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\MediaProducer.h"\r
-#include "frame.h"\r
-#include "buffers/FrameBuffer.h"\r
-\r
-#pragma once\r
-\r
-namespace caspar {\r
-\r
-class FrameMediaController;\r
-class ITransitionController;\r
-\r
-class ClipInfo\r
-{\r
-public:\r
-       ClipInfo() : pFrameController_(0), pTransitionController_(0), lastFetchResult_(FetchWait), bStopped_(false)\r
-       {}\r
-       ClipInfo(MediaProducerPtr pFP, FrameMediaController* pController) : pFP_(pFP), pFrameController_(pController), pTransitionController_(0), lastFetchResult_(FetchWait), bStopped_(false)\r
-       {}\r
-       ClipInfo(MediaProducerPtr pFP, FrameMediaController* pController, ITransitionController* pTransitionController) : pFP_(pFP), pFrameController_(pController), pTransitionController_(pTransitionController), lastFetchResult_(FetchWait), bStopped_(false)\r
-       {}\r
-\r
-       ClipInfo(const ClipInfo& clipInfo) : pFP_(clipInfo.pFP_), pFrameController_(clipInfo.pFrameController_), pTransitionController_(clipInfo.pTransitionController_), pLastFrame_(clipInfo.pLastFrame_), lastFetchResult_(clipInfo.lastFetchResult_), bStopped_(clipInfo.bStopped_)\r
-       {}\r
-\r
-       ClipInfo& operator=(const ClipInfo& clipInfo) {\r
-               pFP_ = clipInfo.pFP_;\r
-               pFrameController_ = clipInfo.pFrameController_;\r
-               pTransitionController_ = clipInfo.pTransitionController_;\r
-               pLastFrame_ = clipInfo.pLastFrame_;\r
-               lastFetchResult_ = clipInfo.lastFetchResult_;\r
-               bStopped_ = clipInfo.bStopped_;\r
-\r
-               return *this;\r
-       }\r
-\r
-       bool IsEmpty() {\r
-               return (pFrameController_ == 0);\r
-       }\r
-\r
-       ~ClipInfo() {\r
-               Clear();\r
-       }\r
-\r
-       void Clear() {\r
-               pFP_.reset();\r
-               pFrameController_ = 0;\r
-               pTransitionController_ = 0;\r
-               pLastFrame_.reset();\r
-               lastFetchResult_ = FetchWait;\r
-               bStopped_ = false;\r
-       }\r
-\r
-       MediaProducerPtr                pFP_;\r
-       FrameMediaController*   pFrameController_;\r
-       ITransitionController*  pTransitionController_;\r
-       FramePtr                                pLastFrame_;\r
-       FrameBufferFetchResult  lastFetchResult_;\r
-       bool                                    bStopped_;\r
-};\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/frame/Frame.cpp b/server/frame/Frame.cpp
deleted file mode 100644 (file)
index 8cf282c..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-#include "Frame.h"\r
-#include "..\utils\allocator.h"\r
-#include "..\utils\ID.h"\r
-#include "..\utils\image\Image.hpp"\r
-#include "FrameManager.h"\r
-#include <algorithm>\r
-\r
-#include <intrin.h>\r
-#pragma intrinsic(__movsd, __stosd)\r
-\r
-#define DEFINE_VIDEOFORMATDESC(w, h, m, f, s) { (w), (h), (m), (f), (w)*(h)*4, s }\r
-\r
-namespace caspar {\r
-\r
-const FrameFormatDescription FrameFormatDescription::FormatDescriptions[FrameFormatCount] =  { \r
-       DEFINE_VIDEOFORMATDESC(720, 576, Interlaced, 50, TEXT("PAL")), \r
-       DEFINE_VIDEOFORMATDESC(720, 486, Interlaced, 60/1.001, TEXT("NTSC")), \r
-       DEFINE_VIDEOFORMATDESC(720, 576, Progressive, 25, TEXT("576p2500")),\r
-       DEFINE_VIDEOFORMATDESC(1280, 720, Progressive, 50, TEXT("720p5000")), \r
-       DEFINE_VIDEOFORMATDESC(1280, 720, Progressive, 60/1.001, TEXT("720p5994")),\r
-       DEFINE_VIDEOFORMATDESC(1280, 720, Progressive, 60, TEXT("720p6000")),\r
-       DEFINE_VIDEOFORMATDESC(1920, 1080, Progressive, 24/1.001, TEXT("1080p2397")),\r
-       DEFINE_VIDEOFORMATDESC(1920, 1080, Progressive, 24, TEXT("1080p2400")),\r
-       DEFINE_VIDEOFORMATDESC(1920, 1080, Interlaced, 50, TEXT("1080i5000")),\r
-       DEFINE_VIDEOFORMATDESC(1920, 1080, Interlaced, 60/1.001, TEXT("1080i5994")),\r
-       DEFINE_VIDEOFORMATDESC(1920, 1080, Interlaced, 60, TEXT("1080i6000")),\r
-       DEFINE_VIDEOFORMATDESC(1920, 1080, Progressive, 25, TEXT("1080p2500")),\r
-       DEFINE_VIDEOFORMATDESC(1920, 1080, Progressive, 30/1.001, TEXT("1080p2997")),\r
-       DEFINE_VIDEOFORMATDESC(1920, 1080, Progressive, 30, TEXT("1080p3000"))\r
-};\r
-\r
-\r
-FrameFormat GetVideoFormat(const tstring& strVideoMode)\r
-{\r
-       for(int index = 0; index < FrameFormatCount; ++index)\r
-       {\r
-               const FrameFormatDescription& fmtDesc = FrameFormatDescription::FormatDescriptions[index];\r
-\r
-               tstring strVideoModeUpper = strVideoMode;\r
-               tstring strFmtDescUpper = fmtDesc.name;\r
-\r
-               std::transform(strVideoModeUpper.begin(), strVideoModeUpper.end(), strVideoModeUpper.begin(), toupper);\r
-               std::transform(strFmtDescUpper.begin(), strFmtDescUpper.end(), strFmtDescUpper.begin(), toupper);\r
-\r
-               if(strVideoModeUpper == strFmtDescUpper) {\r
-                       return (FrameFormat)index;                      \r
-               }\r
-       }\r
-       return FFormatInvalid;\r
-}\r
-\r
-///////////////\r
-// Frame\r
-Frame::Frame() : bHasVideo_(false)\r
-{}\r
-\r
-Frame::~Frame() {\r
-}\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/frame/Frame.h b/server/frame/Frame.h
deleted file mode 100644 (file)
index b0928e7..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include "..\utils\event.h"\r
-#include "..\utils\semaphore.h"\r
-#include "..\utils\lockable.h"\r
-#include "..\utils\ID.h"\r
-#include "..\utils\Noncopyable.hpp"\r
-\r
-#include <list>\r
-#include <vector>\r
-\r
-namespace caspar {\r
-\r
-       namespace audio {\r
-               class AudioDataChunk;\r
-               typedef std::tr1::shared_ptr<AudioDataChunk> AudioDataChunkPtr;\r
-       }\r
-\r
-enum VideoUpdateMode {\r
-       Interlaced = 0,\r
-       Progressive\r
-};\r
-\r
-enum FrameFormat {\r
-       FFormatPAL = 0,\r
-       FFormatNTSC,\r
-       FFormat576p2500,\r
-       FFormat720p5000,\r
-       FFormat720p5994,\r
-       FFormat720p6000,\r
-       FFormat1080p2397,\r
-       FFormat1080p2400,\r
-       FFormat1080i5000,\r
-       FFormat1080i5994,\r
-       FFormat1080i6000,\r
-       FFormat1080p2500,\r
-       FFormat1080p2997,\r
-       FFormat1080p3000,\r
-       FrameFormatCount,\r
-       FFormatInvalid\r
-};\r
-\r
-struct FrameFormatDescription\r
-{\r
-       int width;\r
-       int height;\r
-       VideoUpdateMode mode;\r
-       double fps;\r
-       unsigned int size;\r
-       const TCHAR* name;\r
-\r
-       static const FrameFormatDescription FormatDescriptions[FrameFormatCount];\r
-};\r
-\r
-FrameFormat GetVideoFormat(const tstring& strVideoMode);\r
-\r
-class Frame;\r
-typedef std::tr1::shared_ptr<Frame> FramePtr;\r
-\r
-class FrameManager;\r
-typedef std::tr1::shared_ptr<FrameManager> FrameManagerPtr;\r
-\r
-///////////////\r
-// Frame\r
-typedef unsigned int* FrameMetadata;\r
-typedef std::vector<caspar::audio::AudioDataChunkPtr> AudioDataChunkList;\r
-\r
-class Frame : public utils::Identifiable, private utils::Noncopyable\r
-{\r
-protected:\r
-       Frame();\r
-       virtual void HasVideo(bool bHasVideo) const {\r
-               bHasVideo_ = bHasVideo;\r
-       }\r
-\r
-public:\r
-       virtual ~Frame();\r
-\r
-       virtual unsigned char* GetDataPtr() const = 0;\r
-       virtual bool HasValidDataPtr() const = 0;\r
-       virtual unsigned int GetDataSize() const = 0;\r
-       virtual FrameMetadata GetMetadata() const {\r
-               return 0;\r
-       }\r
-\r
-       virtual void AddAudioDataChunk(caspar::audio::AudioDataChunkPtr pChunk) {\r
-               audioData_.push_back(pChunk);\r
-       }\r
-       virtual AudioDataChunkList& GetAudioData() {\r
-               return audioData_;\r
-       }\r
-\r
-       virtual bool HasVideo() const {\r
-               return bHasVideo_;\r
-       }\r
-\r
-       virtual const utils::ID& FactoryID() const = 0;\r
-\r
-private:       \r
-       mutable bool bHasVideo_;\r
-       AudioDataChunkList audioData_;\r
-};\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/frame/FrameManager.h b/server/frame/FrameManager.h
deleted file mode 100644 (file)
index 9729309..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_FRAMEMANAGER_H__\r
-#define _CASPAR_FRAMEMANAGER_H__\r
-\r
-#include "Frame.h"\r
-\r
-#include <vector>\r
-#include <string>\r
-\r
-#include "..\utils\ID.h"\r
-\r
-namespace caspar {\r
-\r
-class FrameManager : public utils::Identifiable\r
-{\r
-public:\r
-       virtual ~FrameManager() {}\r
-       virtual FramePtr CreateFrame() = 0;\r
-       virtual const FrameFormatDescription& GetFrameFormatDescription() const = 0;\r
-       virtual bool HasFeature(const std::string& feature) const\r
-       {\r
-               return false;\r
-       }\r
-       bool Owns(const Frame& frame) const\r
-       {\r
-               return (frame.FactoryID() == ID());\r
-       }\r
-};\r
-typedef std::tr1::shared_ptr<FrameManager> FrameManagerPtr;\r
-\r
-}      //namespace caspar\r
-\r
-#endif //_CASPAR_FRAMEMANAGER_H__
\ No newline at end of file
diff --git a/server/frame/FrameMediaController.h b/server/frame/FrameMediaController.h
deleted file mode 100644 (file)
index 7048e53..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_FRAMEMEDIACONTROLLER_H__\r
-#define _CASPAR_FRAMEMEDIACONTROLLER_H__\r
-\r
-#include "..\MediaController.h"\r
-#include "FrameManager.h"\r
-#include "..\audio\AudioManager.h"\r
-\r
-#include <vector>\r
-\r
-namespace caspar {\r
-\r
-class FrameBuffer;\r
-struct MediaProducerInfo;\r
-\r
-typedef std::vector<caspar::audio::SoundBufferWorkerPtr> SoundBufferWorkerList;\r
-\r
-class FrameMediaController : public IMediaController\r
-{\r
-       FrameMediaController(const FrameMediaController&);\r
-       FrameMediaController& operator=(const FrameMediaController&);\r
-\r
-public:\r
-       FrameMediaController() {}\r
-       virtual ~FrameMediaController() {}\r
-\r
-       virtual bool Initialize(FrameManagerPtr pFrameManager) = 0;\r
-\r
-       virtual FrameBuffer& GetFrameBuffer() = 0;\r
-       virtual bool GetProducerInfo(MediaProducerInfo*) {\r
-               return false;\r
-       }\r
-\r
-       SoundBufferWorkerList& GetSoundBufferWorkers() {\r
-               return soundBufferWorkers_;\r
-       }\r
-\r
-       void AddSoundBufferWorker(caspar::audio::SoundBufferWorkerPtr pSoundBufferWorker) {\r
-               soundBufferWorkers_.push_back(pSoundBufferWorker);\r
-       }\r
-\r
-private:\r
-       SoundBufferWorkerList soundBufferWorkers_;\r
-};\r
-\r
-}      //namespace caspar\r
-\r
-#endif //_CASPAR_FRAMEMEDIACONTROLLER_H__
\ No newline at end of file
diff --git a/server/frame/FramePlaybackControl.cpp b/server/frame/FramePlaybackControl.cpp
deleted file mode 100644 (file)
index 3bef012..0000000
+++ /dev/null
@@ -1,591 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\stdafx.h"\r
-#include "..\VideoConsumer.h"\r
-#include "FrameMediaController.h"\r
-#include "FramePlaybackStrategy.h"\r
-#include "FramePlaybackControl.h"\r
-#include "..\cg\flashcgproxy.h"\r
-#include "..\producers\composites\TransitionProducer.h"\r
-#include "..\Application.h"\r
-#include "..\MediaProducerInfo.h"\r
-#include "..\utils\image\image.hpp"\r
-\r
-#include "..\monitor.h"\r
-\r
-namespace caspar {\r
-\r
-using namespace caspar::utils;\r
-\r
-using std::tr1::cref;\r
-using std::tr1::bind;\r
-\r
-FramePlaybackControl::FramePlaybackControl(FramePlaybackStrategyPtr pStrategy) : pStrategy_(pStrategy), bPlaybackRunning_(false), isCGEmpty_(TRUE),\r
-eventLoad_(FALSE, FALSE), eventRender_(FALSE, FALSE), eventStartPlayback_(FALSE, FALSE), eventPausePlayback_(FALSE, FALSE), eventStopPlayback_(FALSE, FALSE), eventStoppedPlayback_(FALSE, FALSE), pMonitor_(0)\r
-{\r
-       if(pStrategy_ == 0)\r
-               throw std::exception("No valid FramePlaybackStrategy provided");\r
-\r
-       pSystemFrameManager_.reset(new SystemFrameManager(pStrategy_->GetFrameManager()->GetFrameFormatDescription()));\r
-       if(pSystemFrameManager_ == 0)\r
-               throw std::exception("Failed to create SystemFrameManager");\r
-}\r
-\r
-FramePlaybackControl::~FramePlaybackControl()\r
-{\r
-       Stop();\r
-}\r
-\r
-void FramePlaybackControl::Start()\r
-{\r
-       worker_.Start(this);\r
-}\r
-\r
-void FramePlaybackControl::Stop()\r
-{\r
-       worker_.Stop();\r
-       backgroundClip_.Clear();\r
-}\r
-\r
-\r
-////////////////////////////\r
-// IPlaybackControl methods\r
-bool FramePlaybackControl::Load(MediaProducerPtr pFP, bool loop)\r
-{\r
-       if(pFP == 0)\r
-               return false;\r
-\r
-       pFP->SetLoop(loop);\r
-\r
-       FrameMediaController* pMediaController = dynamic_cast<FrameMediaController*>(pFP->QueryController(TEXT("FrameController")));\r
-       if(pMediaController == 0)\r
-               return false;\r
-\r
-       if(!pMediaController->Initialize(pStrategy_->GetFrameManager()))\r
-               return false;\r
-\r
-       GetApplication()->GetAudioManager()->CueAudio(pMediaController);\r
-\r
-       eventStopPlayback_.Set();\r
-\r
-       {\r
-               Lock lock(*this);\r
-               backgroundClip_ = ClipInfo(pFP, pMediaController);\r
-               eventLoad_.Set();\r
-       }\r
-\r
-       return true;\r
-}\r
-\r
-bool FramePlaybackControl::LoadBackground(MediaProducerPtr pFP, const TransitionInfo& transitionInfo, bool loop)\r
-{\r
-       MediaProducerPtr pMediaProducer;\r
-       if(pFP == 0)\r
-               return false;\r
-\r
-       pFP->SetLoop(loop);\r
-\r
-       ITransitionController* pTransitionController = 0;\r
-       if(transitionInfo.type_ != Cut && transitionInfo.duration_ > 0) {\r
-               //prepare transition\r
-               TransitionProducerPtr pTransitionProducer(new TransitionProducer(pFP, transitionInfo, pStrategy_->GetFrameManager()->GetFrameFormatDescription()));\r
-               pTransitionController = pTransitionProducer.get();\r
-               pMediaProducer = pTransitionProducer;\r
-       }\r
-       else {\r
-               pMediaProducer = pFP;\r
-       }\r
-\r
-       FrameMediaController* pMediaController = dynamic_cast<FrameMediaController*>(pMediaProducer->QueryController(TEXT("FrameController")));\r
-       if(pMediaController == 0)\r
-               return false;\r
-\r
-       if(!pMediaController->Initialize(pStrategy_->GetFrameManager()))\r
-               return false;\r
-\r
-       GetApplication()->GetAudioManager()->CueAudio(pMediaController);\r
-\r
-       {\r
-               Lock lock(*this);\r
-               backgroundClip_ = ClipInfo(pMediaProducer, pMediaController, pTransitionController);\r
-       }\r
-\r
-       return true;\r
-}\r
-\r
-bool FramePlaybackControl::Play()\r
-{\r
-       if(!backgroundClip_.IsEmpty()) {\r
-               eventStartPlayback_.Set();\r
-       }\r
-       else {\r
-               if(!bPlaybackRunning_) {\r
-                       LOG << LogLevel::Verbose << TEXT("Playing active clip");\r
-                       eventStartPlayback_.Set();\r
-               }\r
-               else {\r
-                       LOG << LogLevel::Verbose << TEXT("Failed to play. Already playing");\r
-                       return false;\r
-               }\r
-       }\r
-\r
-       return true;\r
-}\r
-\r
-//bool FramePlaybackControl::Pause()\r
-//{\r
-//     eventPausePlayback_.Set();\r
-//     return true;\r
-//}\r
-\r
-bool FramePlaybackControl::StopPlayback(bool block)\r
-{\r
-       eventStopPlayback_.Set();\r
-\r
-       if(block)\r
-       {\r
-               if(::WaitForSingleObject(this->eventStoppedPlayback_, 1000) != WAIT_OBJECT_0)\r
-                       return false;\r
-       }\r
-\r
-       if(pMonitor_)\r
-               pMonitor_->Inform(STOPPED);\r
-\r
-       return true;\r
-}\r
-\r
-bool FramePlaybackControl::IsRunning()\r
-{\r
-       return bPlaybackRunning_;\r
-}\r
-\r
-bool FramePlaybackControl::Param(const tstring& param)\r
-{\r
-       return false;\r
-}\r
-\r
-\r
-////////////////////////////\r
-// ICGControl methods\r
-void FramePlaybackControl::Add(int layer, const tstring& templateName, bool playOnLoad, const tstring& label, const tstring& data) {\r
-       if(isCGEmpty_ != FALSE) {\r
-               CG::FlashCGProxyPtr pNewCGProducer = CG::FlashCGProxy::Create(pMonitor_);\r
-               if(pNewCGProducer) {\r
-                       if(pNewCGProducer->Initialize(pSystemFrameManager_)) {\r
-                               taskQueue_.push_back(bind(&FramePlaybackControl::DoResetCGProducer, this, pNewCGProducer));\r
-                       }\r
-                       else {\r
-                               LOG << "Frameplayback: Failed to initialize new CGProducer";\r
-                               return;\r
-                       }\r
-               }\r
-       }\r
-\r
-       //TODO: don't use bind to generate functor with string-arguments. Does it even work with const-reference parameters?\r
-       taskQueue_.push_back(bind(&FramePlaybackControl::DoAdd, this, layer, tstring(templateName), playOnLoad, tstring(label), tstring(data)));\r
-}\r
-void FramePlaybackControl::Remove(int layer) {\r
-       taskQueue_.push_back(bind(&FramePlaybackControl::DoRemove, this, layer));\r
-}\r
-void FramePlaybackControl::Clear() {\r
-       taskQueue_.push_back(bind(&FramePlaybackControl::DoClear, this));\r
-}\r
-void FramePlaybackControl::LoadEmpty() {\r
-       taskQueue_.push_back(bind(&FramePlaybackControl::DoLoadEmpty, this));\r
-}\r
-void FramePlaybackControl::Play(int layer) {\r
-       taskQueue_.push_back(bind(&FramePlaybackControl::DoPlay, this, layer));\r
-}\r
-void FramePlaybackControl::Stop(int layer, unsigned int mixOutDuration) {\r
-       taskQueue_.push_back(bind(&FramePlaybackControl::DoStop, this, layer, mixOutDuration));\r
-}\r
-void FramePlaybackControl::Next(int layer) {\r
-       taskQueue_.push_back(bind(&FramePlaybackControl::DoNext, this, layer));\r
-}\r
-void FramePlaybackControl::Update(int layer, const tstring& data) {\r
-       //NOTE: don't use bind to generate functor with string-arguments. Does it even work with const-reference parameters?\r
-       taskQueue_.push_back(bind(&FramePlaybackControl::DoUpdate, this, layer, tstring(data)));\r
-}\r
-void FramePlaybackControl::Invoke(int layer, const tstring& label) {\r
-       //NOTE: don't use bind to generate functor with string-arguments. Does it even work with const-reference parameters?\r
-       taskQueue_.push_back(bind(&FramePlaybackControl::DoInvoke, this, layer, tstring(label)));\r
-}\r
-\r
-////////////////////////////\r
-// IRunnable methods\r
-void FramePlaybackControl::Run(HANDLE stopEvent)\r
-{\r
-       const int WaitHandleCount = 8;\r
-\r
-       HANDLE waitHandles[WaitHandleCount] = { stopEvent, eventStopPlayback_, eventStartPlayback_, eventPausePlayback_, eventLoad_, taskQueue_.GetWaitEvent(), eventRender_, 0 };\r
-\r
-       bool bQuit = false, bSingleFrame = false, bPureCG = false;\r
-    while(!bQuit)\r
-    {\r
-               if((bPlaybackRunning_ || bSingleFrame) && !activeClip_.IsEmpty()) {\r
-                       waitHandles[WaitHandleCount - 1] = activeClip_.pFrameController_->GetFrameBuffer().GetWaitHandle();\r
-                       bPureCG = false;\r
-               }\r
-               else if(pCGProducer_) {\r
-                       waitHandles[WaitHandleCount - 1] = pCGProducer_->GetFrameBuffer().GetWaitHandle();\r
-                       bPureCG = true;\r
-               }\r
-               else\r
-                       waitHandles[WaitHandleCount - 1] = 0;\r
-               \r
-               int realWaitHandleCount = (WaitHandleCount-1);\r
-               if(waitHandles[WaitHandleCount - 1] != 0)\r
-                       ++realWaitHandleCount;\r
-\r
-               DWORD waitResult = WaitForMultipleObjects(realWaitHandleCount, waitHandles, FALSE, 2500);\r
-               switch(waitResult) {\r
-                       case WAIT_OBJECT_0:             //stopEvent\r
-                               bQuit = true;\r
-                               break;\r
-\r
-                       case WAIT_OBJECT_0 + 1: //stopPlayback\r
-                               DoStopPlayback(waitHandles[WaitHandleCount - 1]);\r
-                               break;\r
-\r
-                       case WAIT_OBJECT_0 + 2: //startPlayback\r
-                               if(DoStartPlayback(waitHandles[WaitHandleCount - 1]))\r
-                                       bSingleFrame = true;\r
-                               break;\r
-\r
-                       case WAIT_OBJECT_0 + 3: //pausePlayback\r
-                               //DoPausePlayback();\r
-                               break;\r
-\r
-                       case WAIT_OBJECT_0 + 4: //load\r
-                               if(DoLoad(waitHandles[WaitHandleCount - 1]))\r
-                                       bSingleFrame = true;\r
-                               break;\r
-\r
-                       case WAIT_OBJECT_0 + 5: //cgtask waitEvent\r
-                               {\r
-                                       Task task;\r
-                                       taskQueue_.pop_front(task);\r
-                                       if(task)\r
-                                               task();\r
-                               }\r
-                               break;\r
-\r
-                       case WAIT_OBJECT_0 + 6: //render\r
-                               DoRender(waitHandles[WaitHandleCount - 1], false);\r
-                               break;\r
-\r
-                       case WAIT_OBJECT_0 + 7: //frame availible\r
-                               if(!bPureCG) {\r
-                                       if(DoGetFrame(waitHandles[WaitHandleCount - 1], bSingleFrame))\r
-                                               DoRender(waitHandles[WaitHandleCount - 1], false);\r
-                                       bSingleFrame = false;\r
-                               }\r
-                               else {\r
-                                       DoRender(waitHandles[WaitHandleCount - 1], true);\r
-                               }\r
-                               break;\r
-\r
-                       case WAIT_TIMEOUT:\r
-                               break;\r
-\r
-                       case WAIT_FAILED:\r
-                               bQuit = true;\r
-                               LOG << LogLevel::Critical << TEXT("Wait failed in FramePlayback. Aborting");\r
-                               break;\r
-               }\r
-       }\r
-\r
-       activeClip_.Clear();\r
-}\r
-\r
-bool FramePlaybackControl::DoStartPlayback(HANDLE& handle) \r
-{\r
-       bool bForceUpdate = false;\r
-\r
-       {\r
-               Lock lock(*this);\r
-\r
-               bPlaybackRunning_ = true;\r
-               if(!backgroundClip_.IsEmpty())\r
-               {\r
-                       if(backgroundClip_.pTransitionController_ != 0) {\r
-                               if(!backgroundClip_.pTransitionController_->Start(activeClip_)) {\r
-                                       backgroundClip_.lastFetchResult_ = FetchEOF;\r
-                                       bForceUpdate = true;\r
-                               }\r
-                       }\r
-                       activeClip_ = backgroundClip_;\r
-                       backgroundClip_.Clear();\r
-               }\r
-       }\r
-\r
-       if(pMonitor_)\r
-               pMonitor_->Inform(PLAY);\r
-\r
-       return bForceUpdate;\r
-}\r
-\r
-void FramePlaybackControl::DoStopPlayback(HANDLE& handle) \r
-{\r
-       activeClip_.lastFetchResult_ = FetchEOF;\r
-       if(!activeClip_.IsEmpty())\r
-               GetApplication()->GetAudioManager()->StopAudio(activeClip_.pFrameController_);\r
-\r
-       while(!frameQueue_.empty())\r
-               frameQueue_.pop();\r
-\r
-       bPlaybackRunning_ = false;\r
-       this->eventStoppedPlayback_.Set();\r
-}\r
-\r
-bool FramePlaybackControl::DoLoad(HANDLE& handle)\r
-{\r
-       Lock lock(*this);\r
-\r
-       if(!backgroundClip_.IsEmpty())\r
-       {\r
-               activeClip_ = backgroundClip_;\r
-               backgroundClip_.Clear();\r
-               return true;\r
-       }\r
-\r
-       return false;\r
-}\r
-\r
-void FramePlaybackControl::DoLoadEmpty()\r
-{\r
-       this->emptyProducer_ = GetApplication()->GetColorMediaManager()->CreateProducer(TEXT("#00000000"));\r
-       this->Load(this->emptyProducer_, false);\r
-}\r
-\r
-void FramePlaybackControl::OnCGEmpty() {\r
-       InterlockedExchange(&isCGEmpty_, TRUE);\r
-       LOG << LogLevel::Debug << TEXT("Frameplayback: Flagged CGProducer as empty");\r
-}\r
-\r
-void FramePlaybackControl::DoResetCGProducer(CG::FlashCGProxyPtr pNewCGProducer) {\r
-       if(isCGEmpty_ != FALSE) {\r
-               LOG << LogLevel::Debug << TEXT("Frameplayback: Using new CGProducer");\r
-               pCGProducer_ = pNewCGProducer;\r
-               if(pCGProducer_) {\r
-                       InterlockedExchange(&isCGEmpty_, FALSE);\r
-                       pCGProducer_->SetEmptyAlert(bind(&FramePlaybackControl::OnCGEmpty, this));\r
-               }\r
-       }\r
-}\r
-\r
-void FramePlaybackControl::DoAdd(int layer, tstring templateName, bool playOnLoad, tstring label, tstring data) {\r
-       if(pCGProducer_)        \r
-               pCGProducer_->Add(layer, templateName, playOnLoad, label, data);\r
-}\r
-\r
-void FramePlaybackControl::DoRemove(int layer) {\r
-       if(pCGProducer_)\r
-               pCGProducer_->Remove(layer);\r
-}\r
-\r
-\r
-void FramePlaybackControl::DoClear() {\r
-       if(pCGProducer_)\r
-               pCGProducer_->Stop();\r
-       else {\r
-               OnCGEmpty();\r
-       }\r
-}\r
-\r
-void FramePlaybackControl::DoPlay(int layer) {\r
-       if(pCGProducer_)\r
-               pCGProducer_->Play(layer);\r
-}\r
-\r
-void FramePlaybackControl::DoStop(int layer, unsigned int mixOutDuration) {\r
-       if(pCGProducer_)\r
-               pCGProducer_->Stop(layer, mixOutDuration);\r
-}\r
-\r
-void FramePlaybackControl::DoNext(int layer) {\r
-       if(pCGProducer_)\r
-               pCGProducer_->Next(layer);\r
-}\r
-\r
-void FramePlaybackControl::DoUpdate(int layer, tstring data) {\r
-       if(pCGProducer_)\r
-               pCGProducer_->Update(layer, data);\r
-}\r
-\r
-void FramePlaybackControl::DoInvoke(int layer, tstring label) {\r
-       if(pCGProducer_)\r
-               pCGProducer_->Invoke(layer, label);\r
-}\r
-\r
-bool FramePlaybackControl::DoGetFrame(HANDLE& handle, bool bSingleFrame)\r
-{\r
-       bool bDoRender = false;\r
-       if(!activeClip_.IsEmpty()) \r
-       {\r
-               bool bEOF = false;\r
-               FramePtr pFrame = activeClip_.pFrameController_->GetFrameBuffer().front();\r
-\r
-               if(pFrame != 0)\r
-               {\r
-                       activeClip_.pLastFrame_ = pFrame;\r
-\r
-                       frameQueue_.push(pFrame);\r
-                       if(frameQueue_.size() >= 3)\r
-                               bDoRender = true;\r
-\r
-                       //Queue audio in the audioplayback-worker\r
-                       if(!bSingleFrame) {\r
-                               GetApplication()->GetAudioManager()->PushAudioData(activeClip_.pFrameController_, pFrame);\r
-\r
-                               //check for end of file\r
-                               activeClip_.lastFetchResult_ = activeClip_.pFrameController_->GetFrameBuffer().pop_front();\r
-                               if(activeClip_.lastFetchResult_ == FetchEOF) {\r
-                                       bEOF = true;\r
-                               }\r
-                       }\r
-                       else\r
-                               bDoRender = true;\r
-               }\r
-               else {\r
-                       activeClip_.lastFetchResult_ = FetchEOF;\r
-                       bEOF = true;\r
-               }\r
-\r
-               if(bEOF) {\r
-                       //this producer is finnished, check if we should continue with another\r
-                       bPlaybackRunning_ = false;\r
-                       activeClip_.bStopped_ = true;\r
-\r
-                       MediaProducerPtr pFollowingProducer(activeClip_.pFP_->GetFollowingProducer());\r
-                       if(pFollowingProducer != 0) {\r
-                               FrameMediaController* pMediaController = dynamic_cast<FrameMediaController*>(pFollowingProducer->QueryController(TEXT("FrameController")));\r
-                               if(pMediaController != 0)\r
-                               {\r
-                                       //reinitialize following producer with the correct framemanager\r
-                                       if(pMediaController->Initialize(pStrategy_->GetFrameManager()))\r
-                                       {\r
-                                               //make following producer current\r
-                                               activeClip_ = ClipInfo(pFollowingProducer, pMediaController);\r
-                                               activeClip_.pLastFrame_ = pFrame;\r
-                                               handle = activeClip_.pFrameController_->GetFrameBuffer().GetWaitHandle();\r
-                                               bPlaybackRunning_ = true;\r
-                                               return bDoRender;\r
-                                       }\r
-                               }\r
-                       }\r
-               \r
-                       if(pMonitor_)\r
-                               pMonitor_->Inform(STOPPED);\r
-\r
-                       bDoRender = true;\r
-               }\r
-       }\r
-\r
-       return bDoRender;\r
-}\r
-\r
-void FramePlaybackControl::DoRender(HANDLE& handle, bool bPureCG) \r
-{\r
-       //Get next CG-frame if we have a CGProducer\r
-       FramePtr pCGFrame;\r
-       if(pCGProducer_) {\r
-               pCGFrame = pCGProducer_->GetFrameBuffer().front();\r
-               FrameBufferFetchResult fetchResult = pCGProducer_->GetFrameBuffer().pop_front();\r
-               if(pCGFrame != 0) {\r
-                       pLastCGFrame_ = pCGFrame;\r
-               }\r
-               else if(fetchResult != FetchEOF) {\r
-                       pCGFrame = pLastCGFrame_;\r
-               }\r
-               else {\r
-                       pCGProducer_.reset();\r
-                       LOG << LogLevel::Debug << TEXT("Frameplayback: Cleared CGProducer");\r
-                       OnCGEmpty();\r
-                       pLastCGFrame_.reset();\r
-               }\r
-       }\r
-\r
-       //Get next video frame unless we're in PureCG-mode\r
-       FramePtr pVideoFrame;\r
-       if(!bPureCG || activeClip_.bStopped_) {\r
-               if(frameQueue_.size() > 0) {\r
-                       pVideoFrame = frameQueue_.front();\r
-                       frameQueue_.pop();\r
-\r
-                       if(pVideoFrame != 0) {\r
-                               pLastVideoFrame_ = pVideoFrame;\r
-                       }\r
-               }\r
-               else {\r
-                       pVideoFrame = pLastVideoFrame_;\r
-               }\r
-\r
-               if(activeClip_.bStopped_ && !frameQueue_.empty())\r
-                       eventRender_.Set();\r
-       }\r
-       else {\r
-               pVideoFrame = pLastVideoFrame_;\r
-       }\r
-\r
-       //combine and send to consumer\r
-       FramePtr pResultFrame;\r
-       if(pCGFrame) {\r
-               if(pVideoFrame && this->activeClip_.pFP_ != this->emptyProducer_) {\r
-                       pResultFrame = pStrategy_->GetReservedFrame();\r
-                       if(pResultFrame) {\r
-                               utils::image::PreOver(pResultFrame->GetDataPtr(), pVideoFrame->GetDataPtr(), pCGFrame->GetDataPtr(), pResultFrame->GetDataSize());\r
-                       }\r
-               }\r
-               else\r
-                       pResultFrame = pCGFrame;\r
-       }\r
-       else\r
-               pResultFrame = pVideoFrame;\r
-\r
-       if(pResultFrame)\r
-               pStrategy_->DisplayFrame(pResultFrame.get());\r
-       else if(bPureCG) {\r
-               pResultFrame = pStrategy_->GetReservedFrame();\r
-               if(pResultFrame) {\r
-                       utils::image::Clear(pResultFrame->GetDataPtr(), pResultFrame->GetDataSize());\r
-                       pStrategy_->DisplayFrame(pResultFrame.get());\r
-               }\r
-       }\r
-}\r
-\r
-bool FramePlaybackControl::OnUnhandledException(const std::exception& ex) throw()\r
-{\r
-       bool bDoRestart = true;\r
-\r
-       try \r
-       {\r
-               LOG << LogLevel::Critical << TEXT("UNHANDLED EXCEPTION in frameplayback thread. Message: ") << ex.what();\r
-       }\r
-       catch(...)\r
-       {\r
-               bDoRestart = false;\r
-       }\r
-\r
-       return bDoRestart;\r
-}\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/frame/FramePlaybackControl.h b/server/frame/FramePlaybackControl.h
deleted file mode 100644 (file)
index 6f50c61..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_FRAMEPLAYBACKCONTROL_H__\r
-#define _CASPAR_FRAMEPLAYBACKCONTROL_H__\r
-\r
-#pragma once\r
-\r
-#include <memory>\r
-#include <queue>\r
-#include "..\PlaybackControl.h"\r
-#include "..\cg\cgcontrol.h"\r
-#include "FramePlaybackStrategy.h"\r
-#include "..\utils\thread.h"\r
-#include "..\utils\lockable.h"\r
-#include "..\utils\taskqueue.h"\r
-#include "ClipInfo.h"\r
-#include "systemframemanager.h"\r
-\r
-namespace caspar {\r
-\r
-namespace CG\r
-{ \r
-class FlashCGProxy;\r
-typedef std::tr1::shared_ptr<FlashCGProxy> FlashCGProxyPtr;\r
-}\r
-\r
-class FramePlaybackControl : public IPlaybackControl, public CG::ICGControl, public utils::IRunnable, private utils::LockableObject\r
-{\r
-public:\r
-       explicit FramePlaybackControl(FramePlaybackStrategyPtr);\r
-       virtual ~FramePlaybackControl();\r
-\r
-       void Start();\r
-       void Stop();\r
-\r
-       //IPlaybackControl\r
-       virtual bool Load(MediaProducerPtr pFP, bool loop);\r
-       virtual bool LoadBackground(MediaProducerPtr pFP, const TransitionInfo& transitionInfo, bool loop);\r
-       virtual bool Play();\r
-       virtual void LoadEmpty();\r
-       //virtual bool Pause();\r
-       virtual bool StopPlayback(bool block = false);\r
-       virtual bool IsRunning();\r
-       virtual bool Param(const tstring& param);\r
-       virtual CG::ICGControl* GetCGControl() {\r
-               return this;\r
-       }\r
-       virtual void SetMonitor(Monitor* pMonitor) {\r
-               pMonitor_ = pMonitor;\r
-       }\r
-\r
-       //ICGControl\r
-       virtual void Add(int layer, const tstring& templateName, bool playOnLoad, const tstring& label, const tstring& data);\r
-       virtual void Remove(int layer);\r
-       virtual void Clear();\r
-       virtual void Play(int layer);\r
-       virtual void Stop(int layer, unsigned int mixOutDuration);\r
-       virtual void Next(int layer);\r
-       virtual void Update(int layer, const tstring& data);\r
-       virtual void Invoke(int layer, const tstring& label);\r
-\r
-       void DoResetCGProducer(CG::FlashCGProxyPtr pNewCGProducer);\r
-       void OnCGEmpty();\r
-\r
-       //IRunnable\r
-       virtual void Run(HANDLE stopEvent);\r
-       virtual bool OnUnhandledException(const std::exception& ex) throw();\r
-\r
-private:\r
-       FramePlaybackStrategyPtr pStrategy_;\r
-       SystemFrameManagerPtr pSystemFrameManager_;\r
-\r
-       volatile bool bPlaybackRunning_;\r
-       volatile LONG isCGEmpty_;\r
-\r
-       utils::Thread worker_;\r
-       ClipInfo activeClip_;\r
-       ClipInfo backgroundClip_;\r
-       CG::FlashCGProxyPtr pCGProducer_;\r
-       Monitor* pMonitor_;\r
-\r
-       utils::Event eventLoad_;\r
-       utils::Event eventRender_;\r
-       utils::Event eventStartPlayback_;\r
-       utils::Event eventPausePlayback_;\r
-       utils::Event eventStopPlayback_;\r
-       utils::Event eventStoppedPlayback_;\r
-\r
-       std::queue<FramePtr> frameQueue_;\r
-\r
-       FramePtr pLastCGFrame_;\r
-       FramePtr pLastVideoFrame_;\r
-\r
-       bool DoLoad(HANDLE& handle);\r
-       bool DoStartPlayback(HANDLE& handle);\r
-       void DoStopPlayback(HANDLE& handle);\r
-       void DoRender(HANDLE& handle, bool bPureCG);\r
-       bool DoGetFrame(HANDLE& handle, bool bForceVideoOutput);\r
-\r
-       //cg-tasks\r
-       utils::TaskQueue taskQueue_;\r
-\r
-       MediaProducerPtr emptyProducer_;\r
-\r
-       void DoLoadEmpty();\r
-       void DoAdd(int layer, tstring templateName, bool playOnLoad, tstring label, tstring data);\r
-       void DoRemove(int layer);\r
-       void DoClear();\r
-       void DoPlay(int layer);\r
-       void DoStop(int layer, unsigned int mixOutDuration);\r
-       void DoNext(int layer);\r
-       void DoUpdate(int layer, tstring data);\r
-       void DoInvoke(int layer, tstring label);\r
-};\r
-\r
-typedef std::tr1::shared_ptr<FramePlaybackControl> FramePlaybackControlPtr;\r
-\r
-}      //namespace caspar\r
-\r
-#endif //_CASPAR_FRAMEPLAYBACKCONTROL_H__
\ No newline at end of file
diff --git a/server/frame/FramePlaybackStrategy.h b/server/frame/FramePlaybackStrategy.h
deleted file mode 100644 (file)
index 7ca5ee0..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_FRAMEPLAYBACKSTRATEGY_H__\r
-#define _CASPAR_FRAMEPLAYBACKSTRATEGY_H__\r
-\r
-#pragma once\r
-\r
-#include "FrameManager.h"\r
-#include "..\utils\Noncopyable.hpp"\r
-\r
-namespace caspar {\r
-\r
-class Frame;\r
-class IVideoConsumer;\r
-\r
-class IFramePlaybackStrategy : utils::Noncopyable\r
-{\r
-public:\r
-       virtual ~IFramePlaybackStrategy() {}\r
-\r
-       virtual FrameManagerPtr GetFrameManager() = 0;\r
-       virtual void DisplayFrame(Frame*) = 0;\r
-       virtual FramePtr GetReservedFrame() = 0;\r
-};\r
-typedef std::tr1::shared_ptr<IFramePlaybackStrategy> FramePlaybackStrategyPtr;\r
-\r
-}      //namespace caspar\r
-\r
-#endif //_CASPAR_FRAMEPLAYBACKSTRATEGY_H__
\ No newline at end of file
diff --git a/server/frame/SystemFrame.cpp b/server/frame/SystemFrame.cpp
deleted file mode 100644 (file)
index 1d8a664..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\stdafx.h"\r
-#include "SystemFrame.h"\r
-\r
-namespace caspar {\r
-\r
-       SystemFrame::SystemFrame(unsigned char* pData, unsigned int dataSize, const utils::ID& factoryID) : pData_(pData), dataSize_(dataSize), factoryID_(factoryID)\r
-       {}\r
-\r
-       SystemFrame::~SystemFrame()\r
-       {}\r
-\r
-       unsigned char* SystemFrame::GetDataPtr() const \r
-       {\r
-               if(pData_ != 0)\r
-                       HasVideo(true);\r
-               return pData_;\r
-       }\r
-       bool SystemFrame::HasValidDataPtr() const\r
-       {\r
-               return (pData_ != 0);\r
-       }\r
-       unsigned int SystemFrame::GetDataSize() const\r
-       {\r
-               return dataSize_;\r
-       }\r
-\r
-       const utils::ID& SystemFrame::FactoryID() const\r
-       {\r
-               return factoryID_;\r
-       }\r
-}\r
-\r
diff --git a/server/frame/SystemFrame.h b/server/frame/SystemFrame.h
deleted file mode 100644 (file)
index 923cc13..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _SYSTEMFRAME_H_\r
-#define _SYSTEMFRAME_H_\r
-\r
-#include "Frame.h"\r
-\r
-namespace caspar {\r
-\r
-class SystemFrame : public Frame\r
-{\r
-public:\r
-\r
-       SystemFrame(unsigned char* pData, unsigned int dataSize, const utils::ID& factoryID);\r
-       virtual ~SystemFrame();\r
-\r
-       virtual unsigned char* GetDataPtr() const;\r
-       virtual bool HasValidDataPtr() const;\r
-       virtual unsigned int GetDataSize() const;\r
-\r
-       const utils::ID& FactoryID() const;\r
-\r
-private:\r
-       unsigned char* pData_;\r
-       unsigned int dataSize_;\r
-       utils::ID factoryID_;\r
-};\r
-\r
-}\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/frame/SystemFrameManager.cpp b/server/frame/SystemFrameManager.cpp
deleted file mode 100644 (file)
index 85e190a..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\stdafx.h"\r
-#include "SystemFrameManager.h"\r
-\r
-#include "Frame.h"\r
-#include "SystemFrame.h"\r
-\r
-namespace caspar {\r
-\r
-SystemFrameManager::LockableAllocatorAssoc SystemFrameManager::allocators;\r
-\r
-class SystemFrameManager::FrameDeallocator\r
-{\r
-public:\r
-       FrameDeallocator(const utils::FixedAllocatorPtr& pAllocator) : pAllocator_(pAllocator){}\r
-       void operator()(Frame* frame)\r
-       { \r
-               pAllocator_->Deallocate(frame->GetDataPtr()); \r
-               delete frame;\r
-       }\r
-private:\r
-       const utils::FixedAllocatorPtr pAllocator_;\r
-};\r
-\r
-SystemFrameManager::SystemFrameManager(const FrameFormatDescription& fmtDesc) : fmtDesc_(fmtDesc)\r
-{\r
-       utils::LockableObject::Lock lock(allocators);\r
-       utils::FixedAllocatorPtr& pAllocator = allocators[fmtDesc_.size];\r
-       if(!pAllocator)\r
-               pAllocator.reset(new utils::FixedAllocator<>(fmtDesc_.size));\r
-       pAllocator_ = pAllocator;       \r
-}\r
-\r
-SystemFrameManager::~SystemFrameManager()\r
-{}\r
-\r
-FramePtr SystemFrameManager::CreateFrame()\r
-{\r
-       return FramePtr(new SystemFrame(static_cast<unsigned char*>(pAllocator_->Allocate()), fmtDesc_.size, this->ID()), FrameDeallocator(pAllocator_));\r
-}\r
-\r
-const FrameFormatDescription& SystemFrameManager::GetFrameFormatDescription() const \r
-{\r
-       return fmtDesc_;\r
-}\r
-\r
-\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/frame/SystemFrameManager.h b/server/frame/SystemFrameManager.h
deleted file mode 100644 (file)
index 4bd4f78..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_SYSTEMFRAMEMANAGER_H__\r
-#define _CASPAR_SYSTEMFRAMEMANAGER_H__\r
-\r
-#pragma once\r
-\r
-#include "..\utils\Allocator.h"\r
-#include "..\utils\Noncopyable.hpp"\r
-\r
-#include "FrameManager.h"\r
-\r
-#include <unordered_map>\r
-\r
-namespace caspar {\r
-\r
-class Frame;\r
-typedef std::tr1::shared_ptr<Frame> FramePtr;\r
-\r
-/*\r
-       SystemFrameManager\r
-\r
-       Changes:\r
-       2009-06-14 (R.N) : Refactored, note: Is thread-safe since "FixedAllocator" is thread-safe\r
-*/\r
-\r
-class SystemFrameManager : public FrameManager, private utils::Noncopyable, private utils::LockableObject\r
-{\r
-public:\r
-       explicit SystemFrameManager(const FrameFormatDescription&);\r
-       virtual ~SystemFrameManager();\r
-\r
-       virtual FramePtr CreateFrame();\r
-       virtual const FrameFormatDescription& GetFrameFormatDescription() const;\r
-\r
-private:\r
-       class FrameDeallocator;\r
-       const FrameFormatDescription fmtDesc_;\r
-       utils::FixedAllocatorPtr pAllocator_;\r
-\r
-       class LockableAllocatorAssoc : public std::tr1::unordered_map<size_t, utils::FixedAllocatorPtr>, public utils::LockableObject{};\r
-\r
-       static LockableAllocatorAssoc allocators;\r
-};\r
-typedef std::tr1::shared_ptr<SystemFrameManager> SystemFrameManagerPtr;\r
-\r
-}      //namespace caspar\r
-#endif //_CASPAR_SYSTEMFRAMEMANAGER_H__
\ No newline at end of file
diff --git a/server/frame/buffers/FrameBuffer.h b/server/frame/buffers/FrameBuffer.h
deleted file mode 100644 (file)
index 858f856..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _FRAME_BUFFER_H_\r
-#define _FRAME_BUFFER_H_\r
-\r
-#include "../Frame.h"\r
-\r
-namespace caspar\r
-{\r
-\r
-enum FrameBufferFetchResult \r
-{\r
-       FetchDataAvailible,\r
-       FetchWait,\r
-       FetchEOF\r
-};\r
-\r
-class FrameBuffer\r
-{\r
-public:\r
-       virtual ~FrameBuffer() \r
-       {}\r
-\r
-       virtual FramePtr front() const = 0;\r
-       virtual FrameBufferFetchResult pop_front() = 0;\r
-\r
-       virtual void push_back(FramePtr) = 0;\r
-\r
-       virtual void clear() = 0;\r
-\r
-       virtual HANDLE GetWaitHandle() const = 0;\r
-};\r
-\r
-}\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/frame/buffers/MotionFrameBuffer.cpp b/server/frame/buffers/MotionFrameBuffer.cpp
deleted file mode 100644 (file)
index 3bb04fc..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "../../StdAfx.h"\r
-\r
-#include "MotionFrameBuffer.h"\r
-\r
-namespace caspar\r
-{\r
-\r
-struct MotionFrameBuffer::Implementation : private utils::LockableObject\r
-{\r
-       Implementation() : event_(TRUE, FALSE), writeWaitEvent_(TRUE, TRUE), maxLength_(3)\r
-       {}\r
-\r
-       Implementation(unsigned int maxQueueLength) : event_(TRUE, FALSE), writeWaitEvent_(TRUE, TRUE), maxLength_(maxQueueLength)\r
-       {}\r
-\r
-       ~Implementation() \r
-       {}\r
-\r
-       FramePtr front() const \r
-       {\r
-               Lock lock(*this);\r
-\r
-               FramePtr result;\r
-               if(frameQueue_.size() != 0)\r
-                       result = frameQueue_.front();\r
-               return result;\r
-       }\r
-\r
-       FrameBufferFetchResult pop_front() \r
-       {\r
-               Lock lock(*this);\r
-\r
-               if(frameQueue_.size() == 0)\r
-               {\r
-                       event_.Reset();\r
-                       return FetchWait;\r
-               }\r
-\r
-               if(frameQueue_.front() != 0)\r
-               {\r
-                       frameQueue_.pop_front();\r
-                       \r
-                       if(frameQueue_.size() < maxLength_)\r
-                               writeWaitEvent_.Set();\r
-\r
-                       if(frameQueue_.size() == 0)\r
-                       {\r
-                               event_.Reset();\r
-                               return FetchWait;\r
-                       }\r
-\r
-                       if(frameQueue_.front() == 0)\r
-                               return FetchEOF;\r
-\r
-                       return FetchDataAvailible;\r
-               }\r
-               return FetchEOF;\r
-       }\r
-\r
-       void push_back(FramePtr pFrame) \r
-       {\r
-               Lock lock(*this);\r
-\r
-               //assert(frameQueue_.size() <= maxLength_);\r
-\r
-               frameQueue_.push_back(pFrame);\r
-               event_.Set();\r
-\r
-               if(frameQueue_.size() >= maxLength_)\r
-                       writeWaitEvent_.Reset();\r
-       }\r
-\r
-       void clear() \r
-       {\r
-               Lock lock(*this);\r
-\r
-               frameQueue_.clear();\r
-               writeWaitEvent_.Set();\r
-               event_.Reset();\r
-       }\r
-\r
-       HANDLE GetWaitHandle() const \r
-       {\r
-               return event_;\r
-       }\r
-\r
-       HANDLE GetWriteWaitHandle() \r
-       {\r
-               return writeWaitEvent_;\r
-       }\r
-\r
-       void SetCapacity(size_t capacity)\r
-       {\r
-               Lock lock(*this);\r
-               maxLength_ = capacity;\r
-               if(frameQueue_.size() < maxLength_)\r
-                       writeWaitEvent_.Set();\r
-       }\r
-\r
-       unsigned int maxLength_;\r
-       utils::Event event_;\r
-       std::list<FramePtr> frameQueue_;\r
-       utils::Event writeWaitEvent_; \r
-};\r
-       \r
-MotionFrameBuffer::MotionFrameBuffer() : pImpl_(new Implementation())\r
-{}\r
-\r
-MotionFrameBuffer::MotionFrameBuffer(unsigned int maxQueueLength) : pImpl_(new Implementation(maxQueueLength))\r
-{}\r
-\r
-FramePtr MotionFrameBuffer::front() const \r
-{\r
-       return pImpl_->front();\r
-}\r
-\r
-FrameBufferFetchResult MotionFrameBuffer::pop_front() \r
-{      \r
-       return pImpl_->pop_front();\r
-}\r
-\r
-void MotionFrameBuffer::push_back(FramePtr pFrame) \r
-{      \r
-       pImpl_->push_back(pFrame);\r
-}\r
-\r
-void MotionFrameBuffer::clear() \r
-{\r
-       pImpl_->clear();\r
-}\r
-\r
-HANDLE MotionFrameBuffer::GetWaitHandle() const \r
-{\r
-       return pImpl_->GetWaitHandle();\r
-}\r
-\r
-HANDLE MotionFrameBuffer::GetWriteWaitHandle() \r
-{\r
-       return pImpl_->GetWriteWaitHandle();\r
-}\r
-\r
-void MotionFrameBuffer::SetCapacity(size_t capacity)\r
-{\r
-       pImpl_->SetCapacity(capacity);\r
-}\r
-\r
-}
\ No newline at end of file
diff --git a/server/frame/buffers/MotionFrameBuffer.h b/server/frame/buffers/MotionFrameBuffer.h
deleted file mode 100644 (file)
index 0271f85..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _MOTION_FRAME_BUFFER_H_\r
-#define _MOTION_FRAME_BUFFER_H_\r
-\r
-#include "FrameBuffer.h"\r
-#include "../Frame.h"\r
-\r
-#include "../../utils/event.h"\r
-\r
-#include <memory>\r
-\r
-namespace caspar\r
-{\r
-\r
-class MotionFrameBuffer : public FrameBuffer, private utils::Noncopyable\r
-{\r
-public:\r
-       MotionFrameBuffer();\r
-       explicit MotionFrameBuffer(unsigned int);\r
-       virtual ~MotionFrameBuffer(){}\r
-\r
-\r
-       virtual FramePtr front() const;\r
-       virtual FrameBufferFetchResult pop_front();\r
-       virtual void push_back(FramePtr);\r
-       virtual void clear();\r
-       void SetCapacity(size_t capacity);\r
-\r
-       HANDLE GetWriteWaitHandle();\r
-       virtual HANDLE GetWaitHandle() const;\r
-\r
-private:\r
-       struct Implementation;\r
-       std::tr1::shared_ptr<Implementation> pImpl_;\r
-};\r
-\r
-}\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/frame/buffers/StaticFrameBuffer.cpp b/server/frame/buffers/StaticFrameBuffer.cpp
deleted file mode 100644 (file)
index fe427a4..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "../../stdafx.h"\r
-\r
-#include "StaticFrameBuffer.h"\r
-\r
-namespace caspar\r
-{\r
-\r
-StaticFrameBuffer::StaticFrameBuffer() : event_(TRUE, FALSE) \r
-{\r
-}\r
-StaticFrameBuffer::~StaticFrameBuffer() \r
-{\r
-}\r
-\r
-FramePtr StaticFrameBuffer::front() const \r
-{\r
-       tbb::spin_mutex::scoped_lock lock(mutex_);\r
-       return pFrame_;\r
-}\r
-\r
-FrameBufferFetchResult StaticFrameBuffer::pop_front() \r
-{\r
-       tbb::spin_mutex::scoped_lock lock(mutex_);\r
-       if(pFrame_ == 0)\r
-               return FetchWait;\r
-       else\r
-               return FetchEOF;\r
-}\r
-\r
-void StaticFrameBuffer::push_back(FramePtr pFrame) \r
-{\r
-       tbb::spin_mutex::scoped_lock lock(mutex_);\r
-       pFrame_ = pFrame;\r
-       event_.Set();\r
-}\r
-\r
-void StaticFrameBuffer::clear() \r
-{\r
-       tbb::spin_mutex::scoped_lock lock(mutex_);\r
-       event_.Reset();\r
-       pFrame_.reset();\r
-}\r
-\r
-HANDLE StaticFrameBuffer::GetWaitHandle() const \r
-{\r
-       return event_;\r
-}\r
-\r
-}
\ No newline at end of file
diff --git a/server/frame/buffers/StaticFrameBuffer.h b/server/frame/buffers/StaticFrameBuffer.h
deleted file mode 100644 (file)
index e5f5b0e..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _STATIC_FRAME_BUFFER_\r
-#define _STATIC_FRAME_BUFFER_\r
-\r
-#include "FrameBuffer.h"\r
-#include "../Frame.h"\r
-\r
-#include <tbb/spin_mutex.h>\r
-\r
-namespace caspar\r
-{\r
-\r
-class StaticFrameBuffer : public FrameBuffer, private utils::Noncopyable\r
-{      \r
-public:\r
-       StaticFrameBuffer();\r
-       virtual ~StaticFrameBuffer();\r
-\r
-       virtual FramePtr front() const;\r
-       virtual FrameBufferFetchResult pop_front();\r
-       virtual void push_back(FramePtr);\r
-       virtual void clear();\r
-       virtual HANDLE GetWaitHandle() const;\r
-\r
-private:\r
-       utils::Event event_;\r
-       FramePtr pFrame_;\r
-       mutable tbb::spin_mutex mutex_;\r
-};\r
-\r
-}\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/io/AsyncEventServer.cpp b/server/io/AsyncEventServer.cpp
deleted file mode 100644 (file)
index 5fdd76a..0000000
+++ /dev/null
@@ -1,579 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-// AsyncEventServer.cpp: implementation of the AsyncEventServer class.\r
-//\r
-//////////////////////////////////////////////////////////////////////\r
-\r
-#include "..\stdafx.h"\r
-\r
-#include "AsyncEventServer.h"\r
-#include "SocketInfo.h"\r
-\r
-#include <string>\r
-#include <algorithm>\r
-\r
-namespace caspar {\r
-namespace IO {\r
-\r
-using namespace utils;\r
-\r
-#define CASPAR_MAXIMUM_SOCKET_CLIENTS  (MAXIMUM_WAIT_OBJECTS-1)        \r
-\r
-long AsyncEventServer::instanceCount_ = 0;\r
-//////////////////////////////\r
-// AsyncEventServer constructor\r
-// PARAMS: port(TCP-port the server should listen to)\r
-// COMMENT: Initializes the WinSock2 library\r
-AsyncEventServer::AsyncEventServer(int port) : port_(port)\r
-{\r
-       if(instanceCount_ == 0) {\r
-               WSADATA wsaData;\r
-               if(WSAStartup(MAKEWORD(2,2), &wsaData) != NO_ERROR)\r
-                       throw std::exception("Error initializing WinSock2");\r
-               else {\r
-                       LOG << TEXT("WinSock2 Initialized.") << LogStream::Flush;\r
-               }\r
-       }\r
-\r
-       InterlockedIncrement(&instanceCount_);\r
-}\r
-\r
-/////////////////////////////\r
-// AsyncEventServer destructor\r
-AsyncEventServer::~AsyncEventServer() {\r
-       Stop();\r
-\r
-       InterlockedDecrement(&instanceCount_);\r
-       if(instanceCount_ == 0)\r
-               WSACleanup();\r
-}\r
-\r
-void AsyncEventServer::SetClientDisconnectHandler(ClientDisconnectEvent handler) {\r
-       socketInfoCollection_.onSocketInfoRemoved = handler;\r
-}\r
-\r
-//////////////////////////////\r
-// AsyncEventServer::Start\r
-// RETURNS: true at successful startup\r
-bool AsyncEventServer::Start() {\r
-       if(listenThread_.IsRunning())\r
-               return false;\r
-\r
-       socketInfoCollection_.Clear();\r
-\r
-       sockaddr_in sockAddr;\r
-       ZeroMemory(&sockAddr, sizeof(sockAddr));\r
-       sockAddr.sin_family = AF_INET;\r
-       sockAddr.sin_addr.s_addr = INADDR_ANY;\r
-       sockAddr.sin_port = htons(port_);\r
-       \r
-       SOCKET listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);\r
-       if(listenSocket == INVALID_SOCKET) {\r
-               LOG << TEXT("Failed to create listenSocket");\r
-               return false;\r
-       }\r
-       \r
-       pListenSocketInfo_ = SocketInfoPtr(new SocketInfo(listenSocket, this));\r
-\r
-       if(WSAEventSelect(pListenSocketInfo_->socket_, pListenSocketInfo_->event_, FD_ACCEPT|FD_CLOSE) == SOCKET_ERROR) {\r
-               LOG << TEXT("Failed to enter EventSelect-mode for listenSocket");\r
-               return false;\r
-       }\r
-\r
-       if(bind(pListenSocketInfo_->socket_, (sockaddr*)&sockAddr, sizeof(sockAddr)) == SOCKET_ERROR) {\r
-               LOG << TEXT("Failed to bind listenSocket");\r
-               return false;\r
-       }\r
-\r
-       if(listen(pListenSocketInfo_->socket_, SOMAXCONN) == SOCKET_ERROR) {\r
-               LOG << TEXT("Failed to listen");\r
-               return false;\r
-       }\r
-\r
-       socketInfoCollection_.AddSocketInfo(pListenSocketInfo_);\r
-\r
-       //start thread: the entrypoint is Run(EVENT stopEvent)\r
-       if(!listenThread_.Start(this)) {\r
-               LOG << TEXT("Failed to create ListenThread");\r
-               return false;\r
-       }\r
-\r
-       LOG << TEXT("Listener successfully initialized");\r
-       return true;\r
-}\r
-\r
-void AsyncEventServer::Run(HANDLE stopEvent)\r
-{\r
-       WSANETWORKEVENTS networkEvents;\r
-\r
-       HANDLE waitHandlesCopy[MAXIMUM_WAIT_OBJECTS];\r
-       waitHandlesCopy[0] = stopEvent;\r
-\r
-       while(true)     {\r
-               //Update local copy of the array of wait-handles if nessecery\r
-               if(socketInfoCollection_.IsDirty()) {\r
-                       socketInfoCollection_.CopyCollectionToArray(&(waitHandlesCopy[1]), CASPAR_MAXIMUM_SOCKET_CLIENTS);\r
-                       socketInfoCollection_.ClearDirty();\r
-               }\r
-\r
-               DWORD waitResult = WSAWaitForMultipleEvents(min(static_cast<DWORD>(socketInfoCollection_.Size()+1), MAXIMUM_WAIT_OBJECTS), waitHandlesCopy, FALSE, 1500, FALSE);\r
-               if(waitResult == WAIT_TIMEOUT)\r
-                       continue;\r
-               else if(waitResult == WAIT_FAILED)\r
-                       break;\r
-               else {\r
-                       DWORD eventIndex = waitResult - WAIT_OBJECT_0;\r
-\r
-                       HANDLE waitEvent = waitHandlesCopy[eventIndex];\r
-                       SocketInfoPtr pSocketInfo;\r
-\r
-                       if(eventIndex == 0)     //stopEvent\r
-                               break;\r
-                       else if(socketInfoCollection_.FindSocketInfo(waitEvent, pSocketInfo)) {\r
-                               WSAEnumNetworkEvents(pSocketInfo->socket_, waitEvent, &networkEvents);\r
-\r
-                               if(networkEvents.lNetworkEvents & FD_ACCEPT) {\r
-                                       if(networkEvents.iErrorCode[FD_ACCEPT_BIT] == 0)\r
-                                               OnAccept(pSocketInfo);\r
-                                       else {\r
-                                               LOG << LogLevel::Debug << TEXT("OnAccept (ErrorCode: ") << networkEvents.iErrorCode[FD_ACCEPT_BIT] << TEXT(")");\r
-                                               OnError(waitEvent, networkEvents.iErrorCode[FD_ACCEPT_BIT]);\r
-                                       }\r
-                               }\r
-\r
-                               if(networkEvents.lNetworkEvents & FD_CLOSE) {\r
-                                       if(networkEvents.iErrorCode[FD_CLOSE_BIT] == 0)\r
-                                               OnClose(pSocketInfo);\r
-                                       else {\r
-                                               LOG << LogLevel::Debug << TEXT("OnClose (ErrorCode: ") << networkEvents.iErrorCode[FD_CLOSE_BIT] << TEXT(")");\r
-                                               OnError(waitEvent, networkEvents.iErrorCode[FD_CLOSE_BIT]);\r
-                                       }\r
-                                       continue;\r
-                               }\r
-\r
-                               if(networkEvents.lNetworkEvents & FD_READ) {\r
-                                       if(networkEvents.iErrorCode[FD_READ_BIT] == 0)\r
-                                               OnRead(pSocketInfo);\r
-                                       else {\r
-                                               LOG << LogLevel::Debug << TEXT("OnRead (ErrorCode: ") << networkEvents.iErrorCode[FD_READ_BIT] << TEXT(")");\r
-                                               OnError(waitEvent, networkEvents.iErrorCode[FD_READ_BIT]);\r
-                                       }\r
-                               }\r
-\r
-                               if(networkEvents.lNetworkEvents & FD_WRITE) {\r
-                                       if(networkEvents.iErrorCode[FD_WRITE_BIT] == 0)\r
-                                               OnWrite(pSocketInfo);\r
-                                       else {\r
-                                               LOG << LogLevel::Debug << TEXT("OnWrite (ErrorCode: ") << networkEvents.iErrorCode[FD_WRITE_BIT] << TEXT(")");\r
-                                               OnError(waitEvent, networkEvents.iErrorCode[FD_WRITE_BIT]);\r
-                                       }\r
-                               }\r
-                       }\r
-                       else {\r
-                               //Could not find the waitHandle in the SocketInfoCollection.\r
-                               //It must have been removed during the last call to WSAWaitForMultipleEvents\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-bool AsyncEventServer::OnUnhandledException(const std::exception& ex) throw() {\r
-       bool bDoRestart = true;\r
-\r
-       try \r
-       {\r
-               LOG << TEXT("UNHANDLED EXCEPTION in TCPServers listeningthread. Message: ") << ex.what();\r
-       }\r
-       catch(...)\r
-       {\r
-               bDoRestart = false;\r
-       }\r
-\r
-       return bDoRestart;\r
-}\r
-\r
-///////////////////////////////\r
-// AsyncEventServer:Stop\r
-// COMMENT: Shuts down\r
-void AsyncEventServer::Stop()\r
-{\r
-       //TODO: initiate shutdown on all clients connected\r
-//     for(int i=0; i < _totalActiveSockets; ++i) {\r
-//             shutdown(_pSocketInfo[i]->_socket, SD_SEND);\r
-//     }\r
-\r
-       if(!listenThread_.Stop()) {\r
-               LOG << TEXT("Wait for listenThread timed out.");\r
-       }\r
-\r
-       socketInfoCollection_.Clear();\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// MESSAGE HANDLERS   \r
-//\r
-////////////////////////////////////////////////////////////////////\r
-\r
-\r
-//////////////////////////////\r
-// AsyncEventServer::OnAccept\r
-// PARAMS: ...\r
-// COMMENT: Called when a new client connects\r
-bool AsyncEventServer::OnAccept(SocketInfoPtr& pSI) {\r
-       sockaddr_in     clientAddr;\r
-       int addrSize = sizeof(clientAddr);\r
-       SOCKET clientSocket = WSAAccept(pSI->socket_, (sockaddr*)&clientAddr, &addrSize, NULL, NULL);\r
-       if(clientSocket == INVALID_SOCKET) {\r
-               LogSocketError(TEXT("Accept"));\r
-               return false;\r
-       }\r
-\r
-       SocketInfoPtr pClientSocket(new SocketInfo(clientSocket, this));\r
-\r
-       //Determine if we can handle one more client\r
-       if(socketInfoCollection_.Size() >= CASPAR_MAXIMUM_SOCKET_CLIENTS) {\r
-               LOG << TEXT("Could not accept (too many connections).");\r
-               return true;\r
-       }\r
-\r
-       if(WSAEventSelect(pClientSocket->socket_, pClientSocket->event_, FD_READ | FD_WRITE | FD_CLOSE) == SOCKET_ERROR) {\r
-               LogSocketError(TEXT("Accept (failed create event for new client)"));\r
-               return false;\r
-       }\r
-\r
-       TCHAR addressBuffer[32];\r
-       MultiByteToWideChar(CP_ACP, 0, inet_ntoa(clientAddr.sin_addr), -1, addressBuffer, 32);\r
-       pClientSocket->host_ = addressBuffer;\r
-\r
-       socketInfoCollection_.AddSocketInfo(pClientSocket);\r
-\r
-       LOG << TEXT("Accepted connection from ") << pClientSocket->host_.c_str();\r
-\r
-       return true;\r
-}\r
-\r
-bool ConvertMultiByteToWideChar(UINT codePage, char* pSource, int sourceLength, caspar::utils::DataBuffer<wchar_t>& wideBuffer, int& countLeftovers)\r
-{\r
-       if(codePage == CP_UTF8) {\r
-               countLeftovers = 0;\r
-               //check from the end of pSource for ev. uncompleted UTF-8 byte sequence\r
-               if(pSource[sourceLength-1] & 0x80) {\r
-                       //The last byte is part of a multibyte sequence. If the sequence is not complete, we need to save the partial sequence\r
-                       int bytesToCheck = min(4, sourceLength);        //a sequence contains a maximum of 4 bytes\r
-                       int currentLeftoverIndex = sourceLength-1;\r
-                       for(; bytesToCheck > 0; --bytesToCheck, --currentLeftoverIndex) {\r
-                               ++countLeftovers;\r
-                               if(pSource[currentLeftoverIndex] & 0x80) {\r
-                                       if(pSource[currentLeftoverIndex] & 0x40) { //The two high-bits are set, this is the "header"\r
-                                               int expectedSequenceLength = 2;\r
-                                               if(pSource[currentLeftoverIndex] & 0x20)\r
-                                                       ++expectedSequenceLength;\r
-                                               if(pSource[currentLeftoverIndex] & 0x10)\r
-                                                       ++expectedSequenceLength;\r
-\r
-                                               if(countLeftovers < expectedSequenceLength) {\r
-                                                       //The sequence is incomplete. Leave the leftovers to be interpreted with the next call\r
-                                                       break;\r
-                                               }\r
-                                               //The sequence is complete, there are no leftovers. \r
-                                               //...OR...\r
-                                               //error. Let the conversion-function take the hit.\r
-                                               countLeftovers = 0;\r
-                                               break;\r
-                                       }\r
-                               }\r
-                               else {\r
-                                       //error. Let the conversion-function take the hit.\r
-                                       countLeftovers = 0;\r
-                                       break;\r
-                               }\r
-                       }\r
-                       if(countLeftovers == 4) {\r
-                               //error. Let the conversion-function take the hit.\r
-                               countLeftovers = 0;\r
-                       }\r
-               }\r
-       }\r
-\r
-       int charsWritten = 0;\r
-       int sourceBytesToProcess = sourceLength-countLeftovers;\r
-       int wideBufferCapacity = MultiByteToWideChar(codePage, 0, pSource, sourceBytesToProcess, NULL, NULL);\r
-       if(wideBufferCapacity > 0) \r
-       {\r
-               wideBuffer.Realloc(wideBufferCapacity);\r
-               charsWritten = MultiByteToWideChar(codePage, 0, pSource, sourceBytesToProcess, wideBuffer.GetPtr(), wideBuffer.GetCapacity());\r
-       }\r
-       //copy the leftovers to the front of the buffer\r
-       if(countLeftovers > 0) {\r
-               memcpy(pSource, &(pSource[sourceBytesToProcess]), countLeftovers);\r
-       }\r
-\r
-       wideBuffer.SetLength(charsWritten);\r
-       return (charsWritten > 0);\r
-}\r
-\r
-//////////////////////////////\r
-// AsyncEventServer::OnRead\r
-// PARAMS: ...\r
-// COMMENT: Called then something arrives on the socket that has to be read\r
-bool AsyncEventServer::OnRead(SocketInfoPtr& pSI) {\r
-       int recvResult = SOCKET_ERROR;\r
-\r
-       int maxRecvLength = sizeof(pSI->recvBuffer_)-pSI->recvLeftoverOffset_;\r
-       recvResult = recv(pSI->socket_, pSI->recvBuffer_+pSI->recvLeftoverOffset_, maxRecvLength, 0);\r
-       while(recvResult != SOCKET_ERROR) {\r
-               if(recvResult == 0) {\r
-                       LOG << TEXT("Client ") << pSI->host_.c_str() << TEXT(" disconnected");\r
-\r
-                       socketInfoCollection_.RemoveSocketInfo(pSI);\r
-                       return true;\r
-               }\r
-\r
-               if(pProtocolStrategy_ != 0) {\r
-                       //Convert to widechar\r
-                       if(ConvertMultiByteToWideChar(pProtocolStrategy_->GetCodepage(), pSI->recvBuffer_, recvResult + pSI->recvLeftoverOffset_, pSI->wideRecvBuffer_, pSI->recvLeftoverOffset_))\r
-                               pProtocolStrategy_->Parse(pSI->wideRecvBuffer_.GetPtr(), pSI->wideRecvBuffer_.GetLength(), pSI);\r
-                       else\r
-                       {\r
-                               LOG << TEXT("Read from ") << pSI->host_.c_str() << TEXT(" failed, could not convert command to UNICODE");\r
-                       }\r
-               }\r
-\r
-               maxRecvLength = sizeof(pSI->recvBuffer_)-pSI->recvLeftoverOffset_;\r
-               recvResult = recv(pSI->socket_, pSI->recvBuffer_+pSI->recvLeftoverOffset_, maxRecvLength, 0);\r
-       }\r
-\r
-       if(recvResult == SOCKET_ERROR) {\r
-               int errorCode = WSAGetLastError();\r
-               if(errorCode == WSAEWOULDBLOCK)\r
-                       return true;\r
-               else {\r
-                       LogSocketError(TEXT("Read"), errorCode);\r
-                       OnError(pSI->event_, errorCode);\r
-               }\r
-       }\r
-\r
-       return false;\r
-}\r
-\r
-//////////////////////////////\r
-// AsyncEventServer::OnWrite\r
-// PARAMS: ...\r
-// COMMENT: Called when the socket is ready to send more data\r
-void AsyncEventServer::OnWrite(SocketInfoPtr& pSI) {\r
-       DoSend(*pSI);   \r
-}\r
-\r
-bool ConvertWideCharToMultiByte(UINT codePage, const std::wstring& wideString, caspar::utils::DataBuffer<char>& destBuffer)\r
-{\r
-       int bytesWritten = 0;\r
-       int multibyteBufferCapacity = WideCharToMultiByte(codePage, 0, wideString.c_str(), static_cast<int>(wideString.length()), 0, 0, NULL, NULL);\r
-       if(multibyteBufferCapacity > 0) \r
-       {\r
-               destBuffer.Realloc(multibyteBufferCapacity);\r
-               bytesWritten = WideCharToMultiByte(codePage, 0, wideString.c_str(), static_cast<int>(wideString.length()), destBuffer.GetPtr(), destBuffer.GetCapacity(), NULL, NULL);\r
-       }\r
-       destBuffer.SetLength(bytesWritten);\r
-       return (bytesWritten > 0);\r
-}\r
-\r
-void AsyncEventServer::DoSend(SocketInfo& socketInfo) {\r
-       //Locks the socketInfo-object so that no one else tampers with the sendqueue at the same time\r
-       SocketInfo::Lock lock(socketInfo);\r
-\r
-       while(!socketInfo.sendQueue_.empty() || socketInfo.currentlySending_.GetLength() > 0) {\r
-               if(socketInfo.currentlySending_.GetLength() == 0) {\r
-                       //Read the next string in the queue and convert to UTF-8\r
-                       if(!ConvertWideCharToMultiByte(pProtocolStrategy_->GetCodepage(), socketInfo.sendQueue_.front(), socketInfo.currentlySending_))\r
-                       {\r
-                               LOG << TEXT("Send to ") << socketInfo.host_.c_str() << TEXT(" failed, could not convert response to UTF-8");\r
-                       }\r
-                       socketInfo.currentlySendingOffset_ = 0;\r
-               }\r
-\r
-               if(socketInfo.currentlySending_.GetLength() > 0) {\r
-                       int bytesToSend = static_cast<int>(socketInfo.currentlySending_.GetLength()-socketInfo.currentlySendingOffset_);\r
-                       int sentBytes = send(socketInfo.socket_, socketInfo.currentlySending_.GetPtr(socketInfo.currentlySendingOffset_), bytesToSend, 0);\r
-                       if(sentBytes == SOCKET_ERROR) {\r
-                               int errorCode = WSAGetLastError();\r
-                               if(errorCode == WSAEWOULDBLOCK) {\r
-                                       LOG << LogLevel::Debug << TEXT("Send to ") << socketInfo.host_.c_str() << TEXT(" would block, sending later");\r
-                                       break;\r
-                               }\r
-                               else {\r
-                                       LogSocketError(TEXT("Send"), errorCode);\r
-                                       OnError(socketInfo.event_, errorCode);\r
-\r
-                                       socketInfo.currentlySending_.SetLength(0);\r
-                                       socketInfo.currentlySendingOffset_ = 0;\r
-                                       socketInfo.sendQueue_.pop();\r
-                                       break;\r
-                               }\r
-                       }\r
-                       else {\r
-                               if(sentBytes == bytesToSend) {\r
-                                       if(sentBytes < 200)\r
-                                               LOG << LogLevel::Verbose << TEXT("Sent ") << socketInfo.sendQueue_.front().c_str() << TEXT(" to ") << socketInfo.host_.c_str();\r
-                                       else\r
-                                               LOG << LogLevel::Verbose << TEXT("Sent more than 200 bytes to ") << socketInfo.host_.c_str();\r
-\r
-                                       socketInfo.currentlySending_.SetLength(0);\r
-                                       socketInfo.currentlySendingOffset_ = 0;\r
-                                       socketInfo.sendQueue_.pop();\r
-                               }\r
-                               else {\r
-                                       socketInfo.currentlySendingOffset_ += sentBytes;\r
-                                       LOG << LogLevel::Verbose << TEXT("Sent partial message to ") << socketInfo.host_.c_str();\r
-                               }\r
-                       }\r
-               }\r
-               else\r
-                       socketInfo.sendQueue_.pop();\r
-       }\r
-}\r
-\r
-//////////////////////////////\r
-// AsyncEventServer::OnClose\r
-// PARAMS: ...\r
-// COMMENT: Called when a client disconnects / is disconnected\r
-void AsyncEventServer::OnClose(SocketInfoPtr& pSI) {\r
-       LOG << TEXT("Client ") << pSI->host_.c_str() << TEXT(" was disconnected");\r
-\r
-       socketInfoCollection_.RemoveSocketInfo(pSI);\r
-}\r
-\r
-//////////////////////////////\r
-// AsyncEventServer::OnError\r
-// PARAMS: ...\r
-// COMMENT: Called when an errorcode is recieved\r
-void AsyncEventServer::OnError(HANDLE waitEvent, int errorCode) {\r
-       if(errorCode == WSAENETDOWN || errorCode == WSAECONNABORTED || errorCode == WSAECONNRESET || errorCode == WSAESHUTDOWN || errorCode == WSAETIMEDOUT || errorCode == WSAENOTCONN || errorCode == WSAENETRESET) {\r
-               SocketInfoPtr pSocketInfo;\r
-               if(socketInfoCollection_.FindSocketInfo(waitEvent, pSocketInfo)) {\r
-                       LOG << TEXT("Client ") << pSocketInfo->host_.c_str() << TEXT(" was disconnected, Errorcode ") << errorCode;\r
-               }\r
-\r
-               socketInfoCollection_.RemoveSocketInfo(waitEvent);\r
-       }\r
-}\r
-\r
-//////////////////////////////\r
-// AsyncEventServer::DisconnectClient\r
-// PARAMS: ...\r
-// COMMENT: The client is removed from the actual client-list when an FD_CLOSE notification is recieved\r
-void AsyncEventServer::DisconnectClient(SocketInfo& socketInfo) {\r
-       int result = shutdown(socketInfo.socket_, SD_SEND);\r
-       if(result == SOCKET_ERROR)\r
-               OnError(socketInfo.event_, result);\r
-}\r
-\r
-//////////////////////////////\r
-// AsyncEventServer::LogSocketError\r
-void AsyncEventServer::LogSocketError(const TCHAR* pStr, int socketError) {\r
-       if(socketError == 0)\r
-               socketError = WSAGetLastError();\r
-\r
-       LOG << TEXT("Failed to ") << pStr << TEXT(" Errorcode: ") << socketError;\r
-}\r
-\r
-\r
-//////////////////////////////\r
-//  SocketInfoCollection\r
-//////////////////////////////\r
-\r
-AsyncEventServer::SocketInfoCollection::SocketInfoCollection() : bDirty_(false) {\r
-}\r
-\r
-AsyncEventServer::SocketInfoCollection::~SocketInfoCollection() {\r
-}\r
-\r
-bool AsyncEventServer::SocketInfoCollection::AddSocketInfo(SocketInfoPtr& pSocketInfo) {\r
-       Lock lock(*this);\r
-\r
-       waitEvents_.resize(waitEvents_.size()+1);\r
-       bool bSuccess = socketInfoMap_.insert(SocketInfoMap::value_type(pSocketInfo->event_, pSocketInfo)).second;\r
-       if(bSuccess) {\r
-               waitEvents_[waitEvents_.size()-1] = pSocketInfo->event_;\r
-               bDirty_ = true;\r
-       }\r
-\r
-       return bSuccess;\r
-}\r
-\r
-void AsyncEventServer::SocketInfoCollection::RemoveSocketInfo(SocketInfoPtr& pSocketInfo) {\r
-       if(pSocketInfo != 0) {\r
-               RemoveSocketInfo(pSocketInfo->event_);\r
-       }\r
-}\r
-void AsyncEventServer::SocketInfoCollection::RemoveSocketInfo(HANDLE waitEvent) {\r
-       Lock lock(*this);\r
-\r
-       //Find instance\r
-       SocketInfoPtr pSocketInfo;\r
-       SocketInfoMap::iterator it = socketInfoMap_.find(waitEvent);\r
-       SocketInfoMap::iterator end = socketInfoMap_.end();\r
-       if(it != end)\r
-               pSocketInfo = it->second;\r
-\r
-       if(pSocketInfo) {\r
-               pSocketInfo->pServer_ = NULL;\r
-\r
-               socketInfoMap_.erase(waitEvent);\r
-\r
-               HandleVector::iterator it = std::find(waitEvents_.begin(), waitEvents_.end(), waitEvent);\r
-               if(it != waitEvents_.end()) {\r
-                       std::swap((*it), waitEvents_.back());\r
-                       waitEvents_.resize(waitEvents_.size()-1);\r
-\r
-                       bDirty_ = true;\r
-               }\r
-       }\r
-       if(onSocketInfoRemoved)\r
-               onSocketInfoRemoved(pSocketInfo);\r
-}\r
-\r
-bool AsyncEventServer::SocketInfoCollection::FindSocketInfo(HANDLE key, SocketInfoPtr& pResult) {\r
-       Lock lock(*this);\r
-\r
-       SocketInfoMap::iterator it = socketInfoMap_.find(key);\r
-       SocketInfoMap::iterator end = socketInfoMap_.end();\r
-       if(it != end)\r
-               pResult = it->second;\r
-\r
-       return (it != end);\r
-}\r
-\r
-void AsyncEventServer::SocketInfoCollection::CopyCollectionToArray(HANDLE* pDest, int maxCount) {\r
-       Lock lock(*this);\r
-\r
-       memcpy(pDest, &(waitEvents_[0]), min( maxCount, static_cast<int>(waitEvents_.size()) ) * sizeof(HANDLE) );\r
-}\r
-\r
-void AsyncEventServer::SocketInfoCollection::Clear() {\r
-       Lock lock(*this);\r
-\r
-       socketInfoMap_.clear();\r
-       waitEvents_.clear();\r
-}\r
-\r
-}      //namespace IO\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/io/AsyncEventServer.h b/server/io/AsyncEventServer.h
deleted file mode 100644 (file)
index 70f4338..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-// AsyncEventServer.h: interface for the AsyncServer class.\r
-//////////////////////////////////////////////////////////////////////\r
-\r
-#if !defined(AFX_ASYNCEVENTSERVER_H__0BFA29CB_BE4C_46A0_9CAE_E233ED27A8EC__INCLUDED_)\r
-#define AFX_ASYNCEVENTSERVER_H__0BFA29CB_BE4C_46A0_9CAE_E233ED27A8EC__INCLUDED_\r
-\r
-#if _MSC_VER > 1000\r
-#pragma once\r
-#endif // _MSC_VER > 1000\r
-\r
-#include <string>\r
-#include <map>\r
-#include <vector>\r
-#include <functional>\r
-\r
-#include "..\utils\thread.h"\r
-#include "..\utils\lockable.h"\r
-\r
-#include "ProtocolStrategy.h"\r
-#include "..\controller.h"\r
-#include "SocketInfo.h"\r
-\r
-namespace caspar {\r
-namespace IO {\r
-\r
-typedef std::function<void(caspar::IO::SocketInfoPtr)> ClientDisconnectEvent;\r
-\r
-class AsyncEventServer : public utils::IRunnable, public caspar::IController\r
-{\r
-       static long instanceCount_;\r
-\r
-       AsyncEventServer();\r
-       AsyncEventServer(const AsyncEventServer&);\r
-       AsyncEventServer& operator=(const AsyncEventServer&);\r
-\r
-public:\r
-       explicit AsyncEventServer(int port);\r
-       ~AsyncEventServer();\r
-\r
-       bool Start();\r
-       void SetProtocolStrategy(ProtocolStrategyPtr pPS) {\r
-               pProtocolStrategy_ = pPS;\r
-       }\r
-\r
-       void Stop();\r
-\r
-       void SetClientDisconnectHandler(ClientDisconnectEvent handler);\r
-       \r
-private:\r
-       utils::Thread   listenThread_;\r
-       void Run(HANDLE stopEvent);\r
-       bool OnUnhandledException(const std::exception&) throw();\r
-\r
-       bool OnAccept(SocketInfoPtr&);\r
-       bool OnRead(SocketInfoPtr&);\r
-       void OnWrite(SocketInfoPtr&);\r
-       void OnClose(SocketInfoPtr&);\r
-       void OnError(HANDLE waitEvent, int errorCode);\r
-\r
-       SocketInfoPtr           pListenSocketInfo_;\r
-       ProtocolStrategyPtr     pProtocolStrategy_;\r
-       int                                     port_;\r
-\r
-       friend class SocketInfo;\r
-       void DoSend(SocketInfo&);\r
-       void DisconnectClient(SocketInfo&);\r
-\r
-       void LogSocketError(const TCHAR* pStr, int socketError = 0);\r
-\r
-       class SocketInfoCollection : private utils::LockableObject\r
-       {\r
-               SocketInfoCollection(const SocketInfoCollection&);\r
-               SocketInfoCollection& operator=(const SocketInfoCollection&);\r
-\r
-               typedef std::map<HANDLE, SocketInfoPtr> SocketInfoMap;\r
-               typedef std::vector<HANDLE> HandleVector;\r
-\r
-       public:\r
-               SocketInfoCollection();\r
-               ~SocketInfoCollection();\r
-\r
-               bool AddSocketInfo(SocketInfoPtr& pSocketInfo);\r
-               void RemoveSocketInfo(SocketInfoPtr& pSocketInfo);\r
-               void RemoveSocketInfo(HANDLE);\r
-               void CopyCollectionToArray(HANDLE*, int maxCount);\r
-\r
-               bool FindSocketInfo(HANDLE, SocketInfoPtr& pResult);\r
-\r
-               bool IsDirty() {\r
-                       return bDirty_;\r
-               }\r
-               void ClearDirty() {\r
-                       bDirty_ = false;\r
-               }\r
-\r
-               std::size_t Size() {\r
-                       return waitEvents_.size();\r
-               }\r
-               void Clear();\r
-\r
-               ClientDisconnectEvent onSocketInfoRemoved;\r
-\r
-       private:\r
-               SocketInfoMap socketInfoMap_;\r
-               HandleVector waitEvents_;\r
-               bool bDirty_;\r
-       };\r
-       SocketInfoCollection socketInfoCollection_;\r
-};\r
-typedef std::tr1::shared_ptr<AsyncEventServer> AsyncEventServerPtr;\r
-\r
-}      //namespace IO\r
-}      //namespace caspar\r
-\r
-#endif // !defined(AFX_ASYNCEVENTSERVER_H__0BFA29CB_BE4C_46A0_9CAE_E233ED27A8EC__INCLUDED_)\r
diff --git a/server/io/ClientInfo.h b/server/io/ClientInfo.h
deleted file mode 100644 (file)
index dcae66c..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CLIENTINFO_H__\r
-#define _CLIENTINFO_H__\r
-\r
-#pragma once\r
-\r
-#include <string>\r
-\r
-namespace caspar {\r
-namespace IO {\r
-\r
-class ClientInfo \r
-{\r
-protected:\r
-       ClientInfo()\r
-       {}\r
-\r
-public:\r
-       virtual ~ClientInfo() {\r
-       }\r
-\r
-       virtual void Send(const tstring& data) = 0;\r
-       virtual void Disconnect() = 0;\r
-\r
-       tstring         currentMessage_;\r
-};\r
-typedef std::tr1::shared_ptr<ClientInfo> ClientInfoPtr;\r
-\r
-}      //namespace IO\r
-}      //namespace caspar\r
-\r
-#endif //_CLIENTINFO_H__
\ No newline at end of file
diff --git a/server/io/ProtocolStrategy.h b/server/io/ProtocolStrategy.h
deleted file mode 100644 (file)
index 9c7ea63..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _PROTOCOLSTRATEGY_H__\r
-#define _PROTOCOLSTRATEGY_H__\r
-\r
-#pragma once\r
-\r
-#include <string>\r
-#include "clientInfo.h"\r
-\r
-namespace caspar {\r
-namespace IO {\r
-\r
-class IProtocolStrategy\r
-{\r
-public:\r
-       virtual ~IProtocolStrategy()\r
-       {}\r
-\r
-       virtual void Parse(const TCHAR* pData, int charCount, ClientInfoPtr pClientInfo) = 0;\r
-       virtual UINT GetCodepage() = 0;\r
-};\r
-\r
-typedef std::tr1::shared_ptr<IProtocolStrategy> ProtocolStrategyPtr;\r
-\r
-}      //namespace IO\r
-}      //namespace caspar\r
-\r
-#endif //_PROTOCOLSTRATEGY_H__
\ No newline at end of file
diff --git a/server/io/SerialPort.cpp b/server/io/SerialPort.cpp
deleted file mode 100644 (file)
index 294bade..0000000
+++ /dev/null
@@ -1,502 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-\r
-#include "SerialPort.h"\r
-\r
-#include "..\application.h"\r
-\r
-\r
-namespace caspar {\r
-namespace IO {\r
-\r
-using namespace utils;\r
-\r
-void LogCommError(const tstring& msg, int errorCode);\r
-\r
-\r
-/* From winbase.h \r
-#define NOPARITY            0\r
-#define ODDPARITY           1\r
-#define EVENPARITY          2\r
-#define MARKPARITY          3\r
-#define SPACEPARITY         4\r
-\r
-#define ONESTOPBIT          0\r
-#define ONE5STOPBITS        1\r
-#define TWOSTOPBITS         2\r
-*/\r
-\r
-SerialPort::SerialPort(DWORD baudRate, BYTE parity, BYTE dataBits, BYTE stopBits, const tstring& portName) : hPort_(0), portName_(portName)\r
-{\r
-       pClientInfo_ = SerialPortClientInfoPtr(new SerialPortClientInfo(this));\r
-       ZeroMemory(&commSettings_, sizeof(DCB));\r
-       commSettings_.DCBlength = sizeof(commSettings_);\r
-       commSettings_.BaudRate = baudRate;\r
-       commSettings_.fBinary = TRUE;\r
-       commSettings_.Parity = parity;\r
-       if(parity != 0)\r
-               commSettings_.fParity = TRUE;\r
-\r
-       commSettings_.ByteSize = dataBits;\r
-       commSettings_.StopBits = stopBits;\r
-       commSettings_.fNull = TRUE;\r
-}\r
-\r
-SerialPort::~SerialPort() {\r
-       Stop();\r
-}\r
-\r
-\r
-bool SerialPort::Start() {\r
-       if(pProtocolStrategy_ == 0)\r
-               return false;\r
-\r
-       pListener_ = ListenerPtr(new Listener(this, pProtocolStrategy_));\r
-\r
-       if(hPort_ == 0) {\r
-\r
-               //Open the port\r
-               HANDLE port = CreateFile(portName_.c_str(), GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);\r
-               if(port == INVALID_HANDLE_VALUE) {\r
-                       //TODO: Throw Win32ErrorException\r
-                       LogCommError(TEXT("Failed to open port. Error: "), GetLastError());\r
-\r
-                       return false;\r
-               }\r
-\r
-               //Setup port\r
-               if(!SetCommState(port, &commSettings_)) {\r
-                       //TODO: Throw Win32ErrorException\r
-                       LogCommError(TEXT("Failed to set com-settings. Error: "), GetLastError());\r
-\r
-                       CloseHandle(port);\r
-                       return false;\r
-               }\r
-\r
-               COMMTIMEOUTS timeouts;\r
-               ZeroMemory(&timeouts, sizeof(timeouts));\r
-               timeouts.ReadIntervalTimeout = MAXDWORD;\r
-               SetCommTimeouts(port, &timeouts);\r
-\r
-               hPort_ = port;\r
-\r
-               if(listenerThread_.Start(pListener_.get())) {\r
-                       if(GetApplication()->GetSetting(TEXT("spy")) == TEXT("true")) {\r
-                               //don't send anything if we're spying, it would most likely trash the incomming data\r
-                               return true;\r
-                       }\r
-                       else {\r
-                               pWriter_ = WriterPtr(new Writer(hPort_));\r
-                               return writerThread_.Start(pWriter_.get());\r
-                       }\r
-               }\r
-       }\r
-\r
-       return false;\r
-}\r
-\r
-void SerialPort::Stop() {\r
-       if(hPort_ != 0) {\r
-               if(listenerThread_.IsRunning())\r
-                       listenerThread_.Stop();\r
-\r
-               if(writerThread_.IsRunning())\r
-                       writerThread_.Stop();\r
-\r
-               CloseHandle(hPort_);\r
-               hPort_ = 0;\r
-       }\r
-}\r
-\r
-\r
-/// Listener\r
-//////////////\r
-const int SerialPort::Listener::WaitTimeout = 1000;\r
-const int SerialPort::Listener::InputBufferSize = 256;\r
-\r
-SerialPort::Listener::Listener(SerialPort* port, ProtocolStrategyPtr pPS) : pPort_(port), pProtocolStrategy_(pPS), overlappedReadEvent_(TRUE, FALSE), bWaitingOnRead_(false), pInputBuffer_(new char[InputBufferSize]), queuedChars_(0) {\r
-       ZeroMemory(&overlappedRead_, sizeof(OVERLAPPED));\r
-       overlappedRead_.hEvent = overlappedReadEvent_;\r
-\r
-       ZeroMemory(pInputBuffer_, InputBufferSize);\r
-}\r
-\r
-SerialPort::Listener::~Listener() {\r
-       if(pInputBuffer_ != 0) {\r
-               delete[] pInputBuffer_;\r
-               pInputBuffer_ = 0;\r
-       }\r
-}\r
-\r
-void SerialPort::Listener::Run(HANDLE eventStop) {\r
-       OVERLAPPED overlappedStatus;\r
-       ZeroMemory(&overlappedStatus, sizeof(OVERLAPPED));\r
-\r
-       utils::Event eventStatus(TRUE, FALSE);\r
-       overlappedStatus.hEvent = eventStatus;\r
-\r
-       SetCommMask(pPort_->hPort_, EV_BREAK | EV_CTS | EV_DSR | EV_ERR | EV_RING | EV_RLSD | EV_RXCHAR | EV_RXFLAG | EV_TXEMPTY);\r
-\r
-       const int StopEvent = 0;\r
-       const int StatusEvent = 1;\r
-       const int ReadEvent = 2;\r
-\r
-       HANDLE waitEvents[3] =  { eventStop, eventStatus, overlappedReadEvent_ };\r
-\r
-       DWORD resultEventMask = 0;\r
-       bool bContinue = true, bWaitingOnStatusEvent = false;\r
-       while(bContinue) {\r
-               if(!bWaitingOnStatusEvent) {\r
-                       if(WaitCommEvent(pPort_->hPort_, &resultEventMask, &overlappedStatus)) {\r
-                               ProcessStatusEvent(resultEventMask);\r
-                       }\r
-                       else {\r
-                               //WaitCommEvent did not complete. Is it pending or did an error occur?\r
-                               DWORD errorCode = GetLastError();\r
-                               if(errorCode == ERROR_IO_PENDING) {\r
-                                       bWaitingOnStatusEvent = true;\r
-                               }\r
-                               else {\r
-                                       //error in WaitCommEvent\r
-                                       LogCommError(TEXT("Error in WaitCommEvent. Error: "), errorCode);\r
-                                       bContinue = false;\r
-                               }\r
-                       }\r
-               }\r
-\r
-               if(bWaitingOnStatusEvent) {\r
-                       HRESULT waitResult = WaitForMultipleObjects((bWaitingOnRead_ ? 3 : 2), waitEvents, FALSE, WaitTimeout);\r
-                       switch(waitResult) {\r
-                               case WAIT_TIMEOUT:\r
-                               {\r
-                                       break;\r
-                               }\r
-\r
-                               case WAIT_FAILED:\r
-                               {\r
-                                       LOG << TEXT("WaitForMultipleObjects Failed.") << LogStream::Flush;\r
-                                       bContinue = false;\r
-                                       break;\r
-                               }\r
-\r
-                               default:\r
-                               {\r
-                                       int alertObject = waitResult - WAIT_OBJECT_0;\r
-\r
-                                       if(alertObject == StopEvent) {\r
-                                               LOG << TEXT("Got stopEvent. Stopping listener-thread.") << LogStream::Flush;\r
-                                               bContinue = false;\r
-                                       }\r
-                                       else if(alertObject == StatusEvent) {\r
-                                               DWORD numBytes = 0;\r
-                                               if(GetOverlappedResult(pPort_->hPort_, &overlappedStatus, &numBytes, FALSE)) {\r
-                                                       ProcessStatusEvent(resultEventMask);\r
-                                               }\r
-                                               else {\r
-                                                       LogCommError(TEXT("GetOverlappedResult Failed (StatusEvent). Error: "), GetLastError());\r
-                                               }\r
-                                               bWaitingOnStatusEvent = false;\r
-                                       }\r
-                                       else if(alertObject == ReadEvent) {\r
-                                               overlappedReadEvent_.Reset();\r
-                                               DWORD numBytesRead = 0;\r
-                                               if(GetOverlappedResult(pPort_->hPort_, &overlappedRead_, &numBytesRead, FALSE)) {\r
-                                                       bWaitingOnRead_ = false;\r
-                                                       LOG << TEXT("Overlapped completion sucessful.") << LogStream::Flush;\r
-                                                       OnRead(numBytesRead);\r
-                                               }\r
-                                               else {\r
-                                                       LogCommError(TEXT("GetOverlappedResult Failed (ReadEvent). Error: "), GetLastError());\r
-                                               }\r
-                                       }\r
-                                       else {\r
-                                               //unexpected error\r
-                                               LogCommError(TEXT("Unexpected wait-result. Result: "), waitResult);\r
-                                               bContinue = false;\r
-                                       }\r
-                                       break;\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-bool SerialPort::Listener::OnUnhandledException(const std::exception& ex) throw() {\r
-       bool bDoRestart = true;\r
-\r
-       try \r
-       {\r
-               LOG << LogLevel::Critical << TEXT("UNHANDLED EXCEPTION in serialport listener. Message: ") << ex.what() << LogStream::Flush;\r
-\r
-               //TODO: Cleanup and prepare for restart\r
-       }\r
-       catch(...)\r
-       {\r
-               bDoRestart = false;\r
-       }\r
-\r
-       return bDoRestart;\r
-}\r
-\r
-\r
-void SerialPort::Listener::ProcessStatusEvent(DWORD eventMask) {\r
-       DWORD errors = 0;\r
-       COMSTAT commStat;\r
-       ZeroMemory(&commStat, sizeof(COMSTAT));\r
-\r
-       ClearCommError(pPort_->hPort_, &errors, &commStat);\r
-\r
-       if((eventMask & EV_RXCHAR) && (commStat.cbInQue > 0)) {\r
-               queuedChars_ += static_cast<int>(commStat.cbInQue);\r
-               if(!bWaitingOnRead_) {\r
-                       DoRead();\r
-               }\r
-               else {\r
-                       LOG << TEXT("Could not read, already waiting on overlapped completion") << LogStream::Flush;\r
-               }\r
-       }\r
-}\r
-\r
-void SerialPort::Listener::DoRead() {\r
-       bool bContinue;\r
-       do {\r
-               bContinue = false;\r
-               DWORD numBytesRead = 0;\r
-               int bytesToRead = min(InputBufferSize, queuedChars_);\r
-               if(ReadFile(pPort_->hPort_, pInputBuffer_, bytesToRead, &numBytesRead, &overlappedRead_)) {\r
-                       bContinue = OnRead(numBytesRead);\r
-               } else {\r
-                       DWORD errorCode = GetLastError();\r
-                       if(errorCode == ERROR_IO_PENDING) {\r
-                               LOG << TEXT("Could not complete read. Mark as waiting for overlapped completion") << LogStream::Flush;\r
-                               bWaitingOnRead_ = true;\r
-                       }\r
-                       else\r
-                               LogCommError(TEXT("ReadFile Failed. Error: "), errorCode);\r
-               }\r
-       }\r
-       while(bContinue);\r
-}\r
-\r
-bool ConvertMultiByteToWideChar(char* pSource, int sourceLength, caspar::utils::DataBuffer<wchar_t>& wideBuffer)\r
-{\r
-       //28591 = ISO 8859-1 Latin I\r
-       int charsWritten = 0;\r
-       int wideBufferCapacity = MultiByteToWideChar(28591, 0, pSource, sourceLength, NULL, NULL);\r
-       if(wideBufferCapacity > 0) \r
-       {\r
-               wideBuffer.Realloc(wideBufferCapacity);\r
-               charsWritten = MultiByteToWideChar(28591, 0, pSource, sourceLength, wideBuffer.GetPtr(), wideBuffer.GetCapacity());\r
-       }\r
-\r
-       wideBuffer.SetLength(charsWritten);\r
-       return (charsWritten > 0);\r
-}\r
-\r
-bool SerialPort::Listener::OnRead(int numBytesRead) {\r
-       queuedChars_ -= numBytesRead;\r
-       _ASSERT(queuedChars_ >= 0);\r
-\r
-       //just to be safe\r
-       queuedChars_ = max(queuedChars_, 0);\r
-\r
-       if(pProtocolStrategy_ != 0) {\r
-               //TODO: Convert from LATIN-1 codepage to wide chars\r
-               if(ConvertMultiByteToWideChar(pInputBuffer_, numBytesRead, wideRecvBuffer_)) {\r
-                       pProtocolStrategy_->Parse(wideRecvBuffer_.GetPtr(), wideRecvBuffer_.GetLength(), pPort_->pClientInfo_);\r
-               }\r
-               else {\r
-                       LOG << TEXT("Read failed, could not convert command to UNICODE") << LogStream::Flush;\r
-               }\r
-       }\r
-\r
-       ZeroMemory(pInputBuffer_, InputBufferSize);\r
-\r
-       return  (queuedChars_ > 0);\r
-}\r
-\r
-void SerialPort::Write(const tstring& str) {\r
-       if(pWriter_ != 0)\r
-               pWriter_->push_back(str);\r
-}\r
-\r
-void SerialPort::SerialPortClientInfo::Send(const tstring& data) {\r
-       pSerialPort_->Write(data);\r
-}\r
-\r
-SerialPort::Writer::Writer(HANDLE port) : port_(port), newStringEvent_(FALSE, FALSE) {\r
-}\r
-\r
-void SerialPort::Writer::push_back(const tstring& str) {\r
-       Lock lock(*this);\r
-\r
-       sendQueue_.push(str);\r
-       newStringEvent_.Set();\r
-}\r
-\r
-bool ConvertWideCharToLatin1(const std::wstring& wideString, caspar::utils::DataBuffer<char>& destBuffer)\r
-{\r
-       //28591 = ISO 8859-1 Latin I\r
-       int bytesWritten = 0;\r
-       int multibyteBufferCapacity = WideCharToMultiByte(28591, 0, wideString.c_str(), static_cast<int>(wideString.length()), 0, 0, NULL, NULL);\r
-       if(multibyteBufferCapacity > 0) \r
-       {\r
-               destBuffer.Realloc(multibyteBufferCapacity);\r
-               bytesWritten = WideCharToMultiByte(28591, 0, wideString.c_str(), static_cast<int>(wideString.length()), destBuffer.GetPtr(), destBuffer.GetCapacity(), NULL, NULL);\r
-       }\r
-       destBuffer.SetLength(bytesWritten);\r
-       return (bytesWritten > 0);\r
-}\r
-\r
-void SerialPort::Writer::Run(HANDLE stopEvent) {\r
-       OVERLAPPED overlappedWrite;\r
-       ZeroMemory(&overlappedWrite, sizeof(OVERLAPPED));\r
-       utils::Event overlappedWriteEvent(TRUE, FALSE);\r
-       overlappedWrite.hEvent = overlappedWriteEvent;\r
-       bool writePending = false;\r
-       int bytesToSend = 0;\r
-\r
-       caspar::utils::DataBuffer<char> currentlySending;\r
-       tstring currentlySendingString;\r
-       unsigned int currentlySendingOffset = 0;\r
-\r
-       HANDLE waitHandles[3] =  { stopEvent, newStringEvent_, overlappedWriteEvent };\r
-\r
-       while(true) {\r
-               HRESULT waitResult = WaitForMultipleObjects(3, waitHandles, FALSE, 2500);\r
-               if(waitResult == WAIT_TIMEOUT)\r
-                       continue;\r
-               else if(waitResult == WAIT_FAILED)\r
-                       break;\r
-\r
-               HRESULT currentEvent = waitResult - WAIT_OBJECT_0;\r
-               if(currentEvent == 0) {                 //stopEvent\r
-                       //TODO: Cancel ev. pending write?\r
-                       break;\r
-               }\r
-               else if(currentEvent == 1) {    //newStringEvent_\r
-                       if(!writePending) {\r
-                               if(currentlySending.GetLength() == 0)\r
-                               {\r
-                                       Lock lock(*this);\r
-                                       //Read the next string in the queue and convert to ISO 8859-1 LATIN-1\r
-                                       currentlySendingString = sendQueue_.front();\r
-                                       sendQueue_.pop();\r
-                                       if(!ConvertWideCharToLatin1(currentlySendingString, currentlySending))\r
-                                       {\r
-                                               LOG << TEXT("Send failed, could not convert response to ISO 8859-1") << LogStream::Flush;\r
-                                       }\r
-                                       currentlySendingOffset = 0;\r
-                               }\r
-\r
-                               if(currentlySending.GetLength() > 0) {\r
-                                       bytesToSend = static_cast<int>(currentlySending.GetLength()-currentlySendingOffset);\r
-                                       DWORD bytesWritten = 0;\r
-                                       if(!WriteFile(port_, currentlySending.GetPtr(currentlySendingOffset), bytesToSend, &bytesWritten, &overlappedWrite)) {\r
-                                               DWORD errorCode = GetLastError();\r
-                                               if(errorCode == ERROR_IO_PENDING) {\r
-                                                       writePending = true;\r
-                                               }\r
-                                               else {\r
-                                                       //TODO: Log and handle critical error\r
-                                                       LOG << TEXT("Failed to send, errorcode: ") << errorCode << LogStream::Flush;\r
-\r
-                                                       currentlySending.SetLength(0);\r
-                                                       currentlySendingOffset = 0;\r
-                                                       break;\r
-                                               }\r
-                                       }\r
-                                       else {  //WriteFile completed successfully\r
-                                               if(bytesToSend == bytesWritten) {\r
-                                                       currentlySending.SetLength(0);\r
-                                                       currentlySendingOffset = 0;\r
-\r
-                                                       LOG << LogLevel::Debug << TEXT("Sent serialdata (imediately): ") << currentlySendingString.c_str() << LogStream::Flush;\r
-                                               }\r
-                                               else {\r
-                                                       currentlySendingOffset += bytesWritten;\r
-                                                       newStringEvent_.Set();\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               else if(currentEvent == 2) {    //overlappedWriteEvent\r
-                       overlappedWriteEvent.Reset();\r
-                       DWORD bytesWritten = 0;\r
-                       if(!GetOverlappedResult(port_, &overlappedWrite, &bytesWritten, FALSE)) {\r
-                               DWORD errorCode = GetLastError();\r
-                               LOG << TEXT("Failed to send, errorcode: ") << errorCode << LogStream::Flush;\r
-\r
-                               currentlySending.SetLength(0);\r
-                               currentlySendingOffset = 0;\r
-                               break;\r
-                       }\r
-                       else {\r
-                               writePending = false;\r
-                               if(bytesToSend == bytesWritten) {\r
-                                       currentlySending.SetLength(0);\r
-                                       currentlySendingOffset = 0;\r
-\r
-                                       LOG << LogLevel::Debug << TEXT("Sent serialdata (overlapped): ") << currentlySendingString.c_str() << LogStream::Flush;\r
-                                       {\r
-                                               Lock lock(*this);\r
-                                               if(sendQueue_.size() > 0)\r
-                                                       newStringEvent_.Set();\r
-                                       }\r
-                               }\r
-                               else {\r
-                                       currentlySendingOffset += bytesWritten;\r
-                                       newStringEvent_.Set();\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-bool SerialPort::Writer::OnUnhandledException(const std::exception& ex) throw() {\r
-       bool bDoRestart = true;\r
-\r
-       try \r
-       {\r
-               LOG << LogLevel::Critical << TEXT("UNHANDLED EXCEPTION in serialport writer. Message: ") << ex.what() << LogStream::Flush;\r
-\r
-               //TODO: Cleanup and prepare for restart\r
-       }\r
-       catch(...)\r
-       {\r
-               bDoRestart = false;\r
-       }\r
-\r
-       return bDoRestart;\r
-}\r
-\r
-void LogCommError(const tstring& msg, int errorCode) {\r
-       TCHAR strNumber[65];\r
-       _itot_s(errorCode, strNumber, 10);\r
-       tstring error = msg;\r
-       error.append(strNumber);\r
-       LOG << error << LogStream::Flush;\r
-}\r
-\r
-}      //namespace IO\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/io/SerialPort.h b/server/io/SerialPort.h
deleted file mode 100644 (file)
index b899639..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include <string>\r
-#include <queue>\r
-#include "..\utils\thread.h"\r
-#include "..\utils\lockable.h"\r
-#include "ProtocolStrategy.h"\r
-#include "..\controller.h"\r
-#include "..\utils\databuffer.h"\r
-\r
-namespace caspar {\r
-namespace IO {\r
-\r
-class SerialPort : public caspar::IController\r
-{\r
-       class SerialPortClientInfo;\r
-       typedef std::tr1::shared_ptr<SerialPortClientInfo> SerialPortClientInfoPtr;\r
-       friend class SerialPortClientInfo;\r
-\r
-       class Listener;\r
-       typedef std::tr1::shared_ptr<Listener> ListenerPtr;\r
-       friend class Listener;\r
-\r
-       class Writer;\r
-       typedef std::tr1::shared_ptr<Writer> WriterPtr;\r
-       friend class Writer;\r
-\r
-       SerialPort(const SerialPort&);\r
-       SerialPort& operator=(const SerialPort&);\r
-\r
-public:\r
-       explicit SerialPort(DWORD baudRate, BYTE parity, BYTE dataBits, BYTE stopBits, const tstring& portName);\r
-       virtual ~SerialPort();\r
-\r
-       bool Start();\r
-       void Stop();\r
-\r
-       void SetProtocolStrategy(ProtocolStrategyPtr pPS) {\r
-               pProtocolStrategy_ = pPS;\r
-       }\r
-\r
-private:\r
-       void Setup();\r
-       void Write(const tstring&);\r
-\r
-       ProtocolStrategyPtr             pProtocolStrategy_;\r
-       tstring portName_;\r
-       HANDLE hPort_;\r
-       DCB commSettings_;\r
-\r
-       utils::Thread listenerThread_;\r
-       ListenerPtr pListener_;\r
-\r
-       utils::Thread writerThread_;\r
-       WriterPtr pWriter_;\r
-\r
-       SerialPortClientInfoPtr pClientInfo_;\r
-\r
-// Listener\r
-/////////////\r
-       class Listener : public utils::IRunnable\r
-       {\r
-               friend SerialPort;\r
-\r
-               Listener(const Listener&);\r
-               Listener& operator=(const Listener&);\r
-\r
-       public:\r
-               explicit Listener(SerialPort* pSerialPort, ProtocolStrategyPtr pPS);\r
-               virtual ~Listener();\r
-\r
-               void Run(HANDLE stopEvent);\r
-               bool OnUnhandledException(const std::exception& ex) throw();\r
-\r
-       private:\r
-               void ProcessStatusEvent(DWORD eventMask);\r
-               void DoRead();\r
-               bool OnRead(int numBytesRead);\r
-\r
-               static const int WaitTimeout;\r
-               static const int InputBufferSize;\r
-\r
-               SerialPort*                             pPort_;\r
-               ProtocolStrategyPtr             pProtocolStrategy_;\r
-\r
-               utils::Event            overlappedReadEvent_;\r
-               OVERLAPPED      overlappedRead_;\r
-               bool            bWaitingOnRead_;\r
-\r
-               char*           pInputBuffer_;\r
-               int                     queuedChars_;\r
-               utils::DataBuffer<wchar_t> wideRecvBuffer_;\r
-       };\r
-\r
-// Writer\r
-/////////////\r
-       class Writer : public utils::IRunnable, private utils::LockableObject\r
-       {\r
-       public:\r
-               Writer(HANDLE port);\r
-               virtual ~Writer() \r
-               {}\r
-\r
-       public:\r
-               void push_back(const tstring&);\r
-\r
-               void Run(HANDLE stopEvent);\r
-               bool OnUnhandledException(const std::exception& ex) throw();\r
-\r
-       private:\r
-               utils::Event newStringEvent_;\r
-               std::queue<tstring> sendQueue_;\r
-               HANDLE port_;\r
-       };\r
-\r
-// ClientInfo\r
-///////////////\r
-       class SerialPortClientInfo : public caspar::IO::ClientInfo\r
-       {\r
-               SerialPort* pSerialPort_;\r
-       public:\r
-               SerialPortClientInfo(SerialPort* pSP) : pSerialPort_(pSP) {\r
-               }\r
-               virtual ~SerialPortClientInfo() \r
-               {}\r
-\r
-               void Send(const tstring& data);\r
-               void Disconnect() \r
-               {}\r
-       };\r
-};\r
-\r
-typedef std::tr1::shared_ptr<SerialPort> SerialPortPtr;\r
-\r
-}      //namespace IO\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/io/SocketInfo.cpp b/server/io/SocketInfo.cpp
deleted file mode 100644 (file)
index 7387852..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\stdafx.h"\r
-#include "SocketInfo.h"\r
-#include "AsyncEventServer.h"\r
-\r
-namespace caspar {\r
-namespace IO {\r
-\r
-SocketInfo::SocketInfo(SOCKET socket, AsyncEventServer* pServer) : socket_(socket), pServer_(pServer), recvLeftoverOffset_(0), currentlySendingOffset_(0)\r
-{\r
-       event_ = WSACreateEvent();\r
-       if(event_ == WSA_INVALID_EVENT) {\r
-               throw std::exception("Failed to create WSAEvent");\r
-       }\r
-}\r
-\r
-SocketInfo::~SocketInfo() {\r
-\r
-       WSACloseEvent(event_);\r
-       event_ = 0;\r
-\r
-       closesocket(socket_);\r
-       socket_ = 0;\r
-}\r
-\r
-void SocketInfo::Send(const tstring& data) {\r
-       if(pServer_ != 0 && data.length() > 0) {\r
-               {\r
-                       //The lock has to be let go before DoSend is called since that too tries to lock to object\r
-                       Lock lock(*this);\r
-                       sendQueue_.push(data);\r
-               }\r
-\r
-               pServer_->DoSend(*this);\r
-       }\r
-}\r
-\r
-void SocketInfo::Disconnect() {\r
-       if(pServer_)\r
-               pServer_->DisconnectClient(*this);\r
-}\r
-\r
-}      //namespace IO\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/io/SocketInfo.h b/server/io/SocketInfo.h
deleted file mode 100644 (file)
index 7c8693d..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include "..\utils\lockable.h"\r
-#include "ClientInfo.h"\r
-#include <queue>\r
-#include <vector>\r
-#include "..\utils\databuffer.h"\r
-\r
-namespace caspar {\r
-namespace IO {\r
-\r
-class AsyncEventServer;\r
-class SocketInfo : public ClientInfo, private utils::LockableObject\r
-{\r
-       SocketInfo(const SocketInfo&);\r
-       SocketInfo& operator=(const SocketInfo&);\r
-\r
-public:\r
-       SocketInfo(SOCKET, AsyncEventServer*);\r
-       virtual ~SocketInfo();\r
-\r
-       void Send(const tstring& data);\r
-       void Disconnect();\r
-\r
-       SOCKET                  socket_;\r
-       HANDLE                  event_;\r
-       tstring host_;\r
-private:\r
-       friend class AsyncEventServer;\r
-       std::queue<tstring> sendQueue_;\r
-       AsyncEventServer* pServer_;\r
-\r
-       caspar::utils::DataBuffer<char> currentlySending_;\r
-       unsigned int currentlySendingOffset_;\r
-\r
-       caspar::utils::DataBuffer<wchar_t> wideRecvBuffer_;\r
-       char recvBuffer_[512];\r
-       int recvLeftoverOffset_;\r
-};\r
-typedef std::tr1::shared_ptr<SocketInfo> SocketInfoPtr;\r
-\r
-}      //namespace IO\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/producers/color/ColorManager.cpp b/server/producers/color/ColorManager.cpp
deleted file mode 100644 (file)
index 406ff5f..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "ColorManager.h"\r
-#include "..\..\frame\FrameManager.h"\r
-#include "..\..\frame\buffers\StaticFrameBuffer.h"\r
-#include "..\..\frame\FrameMediaController.h"\r
-#include "..\..\utils\FileInputStream.h"\r
-#include "..\..\FileInfo.h"\r
-\r
-#include <intrin.h>\r
-#pragma intrinsic(__movsd, __stosd)\r
-#pragma intrinsic(__movsw, __stosw)\r
-\r
-void memset_w(unsigned short* pBuffer, unsigned short value, std::size_t count)\r
-{\r
-       __stosw(pBuffer, value, count);\r
-}\r
-\r
-void memset_d(unsigned long* pBuffer, unsigned long value, std::size_t count)\r
-{\r
-       __stosd(pBuffer, value, count);\r
-}\r
-\r
-namespace caspar {\r
-\r
-///////////////////////////////\r
-//  ColorProducer declaration\r
-//\r
-class ColorProducer : public MediaProducer, FrameMediaController\r
-{\r
-public:\r
-       explicit ColorProducer(unsigned long colorValue);\r
-       virtual ~ColorProducer();\r
-\r
-       virtual IMediaController* QueryController(const tstring& id);\r
-\r
-       virtual bool Initialize(FrameManagerPtr pFrameManager);\r
-       virtual FrameBuffer& GetFrameBuffer() {\r
-               return frameBuffer_;\r
-       }\r
-\r
-       virtual bool IsEmpty() const\r
-       {\r
-               return colorValue_ == 0;\r
-       }\r
-\r
-private:\r
-       StaticFrameBuffer frameBuffer_;\r
-       unsigned long colorValue_;\r
-};\r
-\r
-union Color {\r
-       struct Components {\r
-               unsigned char a;\r
-               unsigned char r;\r
-               unsigned char g;\r
-               unsigned char b;\r
-       } comp;\r
-\r
-       unsigned long value;\r
-};\r
-\r
-//////////////////////////////\r
-//  ColorManager definition\r
-//\r
-MediaProducerPtr ColorManager::CreateProducer(const tstring& parameter)\r
-{\r
-       MediaProducerPtr result;\r
-       if(parameter[0] == '#') {\r
-               unsigned long value;\r
-               if(GetPixelColorValueFromString(parameter, &value))\r
-                       result = MediaProducerPtr(new ColorProducer(value));\r
-       }\r
-\r
-       return result;\r
-}\r
-\r
-bool ColorManager::getFileInfo(FileInfo* pFileInfo)\r
-{\r
-       if(pFileInfo != 0) {\r
-               pFileInfo->length = 1;\r
-               pFileInfo->type = TEXT("still");\r
-               pFileInfo->encoding = TEXT("NA");\r
-               return true;\r
-       }\r
-       return false;\r
-}\r
-\r
-bool ColorManager::GetPixelColorValueFromString(const tstring& parameter, unsigned long* outValue)\r
-{\r
-       tstring colorCode;\r
-       if(parameter.length() == 9 && parameter[0] == '#')\r
-       {\r
-               colorCode = parameter.substr(1);\r
-\r
-               Color theCol;\r
-               theCol.value = _tcstoul(colorCode.c_str(),0,16);\r
-               unsigned char temp = theCol.comp.a;\r
-               theCol.comp.a = theCol.comp.b;\r
-               theCol.comp.b = temp;\r
-               temp = theCol.comp.r;\r
-               theCol.comp.r = theCol.comp.g;\r
-               theCol.comp.g = temp;\r
-\r
-               *outValue = theCol.value;\r
-               return true;\r
-       }\r
-       return false;\r
-}\r
-\r
-\r
-///////////////////////////////\r
-//  ColorProducer definition\r
-//\r
-ColorProducer::ColorProducer(unsigned long colorValue) : colorValue_(colorValue) {\r
-}\r
-\r
-ColorProducer::~ColorProducer() {\r
-}\r
-\r
-IMediaController* ColorProducer::QueryController(const tstring& id) {\r
-       if(id == TEXT("FrameController"))\r
-               return this;\r
-       \r
-       return 0;\r
-}\r
-\r
-bool ColorProducer::Initialize(FrameManagerPtr pFrameManager) {\r
-       if(pFrameManager != 0) {\r
-               FramePtr pFrame = pFrameManager->CreateFrame();\r
-               if(pFrame != 0) {\r
-                       memset_d(reinterpret_cast<unsigned long*>(pFrame->GetDataPtr()), colorValue_, pFrame->GetDataSize() / sizeof(unsigned long));\r
-                       frameBuffer_.push_back(pFrame);\r
-                       return true;\r
-               }\r
-       }\r
-       return false;\r
-}\r
-\r
-}
\ No newline at end of file
diff --git a/server/producers/color/ColorManager.h b/server/producers/color/ColorManager.h
deleted file mode 100644 (file)
index 8a01542..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include "..\..\MediaManager.h"\r
-#include "..\..\MediaProducer.h"\r
-\r
-#include <string>\r
-\r
-namespace caspar {\r
-\r
-class FileInfo;\r
-\r
-class ColorManager : public IMediaManager\r
-{\r
-public:\r
-       ColorManager() {}\r
-       virtual ~ColorManager() {}\r
-\r
-       virtual MediaProducerPtr CreateProducer(const tstring& parameter);\r
-       virtual bool getFileInfo(FileInfo* pFileInfo);\r
-\r
-       static bool GetPixelColorValueFromString(const tstring& parameter, unsigned long* outValue);\r
-};\r
-\r
-}      //namespace caspar\r
diff --git a/server/producers/composites/FrameCompositeProducer.cpp b/server/producers/composites/FrameCompositeProducer.cpp
deleted file mode 100644 (file)
index 5362745..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\StdAfx.h"\r
-\r
-#include "FrameCompositeProducer.h"\r
-#include "..\..\SystemFrameManager.h"\r
-#include "..\..\transitioninfo.h"\r
-\r
-namespace caspar {\r
-\r
-FrameCompositeProducer::FrameCompositeProducer() : pCompositionStrategy_(0), currentFrameIndex_(0) {\r
-       pIntermediateFrameManager_.reset(new SystemFrameManager(fmtDesc));\r
-}\r
-\r
-FrameCompositeProducerPtr FrameCompositeProducer::CreateOverlayComposite() {\r
-       FrameCompositeProducerPtr result;\r
-       return result;\r
-}\r
-\r
-FrameCompositeProducerPtr FrameCompositeProducer::CreateTransitionComposite(const TransitionInfo& transitionInfo) {\r
-       FrameCompositeProducerPtr result;\r
-       return result;\r
-}\r
-\r
-FrameCompositeProducer::~FrameCompositeProducer() {\r
-       worker_.Stop();\r
-\r
-       if(pCompositionStrategy_ != 0) {\r
-               delete pCompositionStrategy_;\r
-               pCompositionStrategy_ = 0;\r
-       }\r
-}\r
-\r
-//MediaProducer\r
-IMediaController* FrameCompositeProducer::QueryController(const tstring& id) {\r
-       if(id == TEXT("FrameController")) {\r
-               return this;\r
-       }\r
-       return 0;\r
-}\r
-\r
-MediaProducerPtr FrameCompositeProducer::GetFollowingProducer() {\r
-}\r
-\r
-//FrameMediaController\r
-bool FrameCompositeProducer::Initialize(FrameManagerPtr pFrameManager) {\r
-}\r
-\r
-\r
-//IRunnable\r
-void FrameCompositeProducer::Run(HANDLE stopEvent) {\r
-       LOG << LogLevel::Verbose << TEXT("Composition: readAhead thread started");\r
-\r
-       const DWORD waitHandlesCount = 2;\r
-       HANDLE waitHandles[waitHandlesCount] = { stopEvent, frameBuffer_.GetWriteWaitHandle() };\r
-\r
-       bool bQuit = false;\r
-       while(!bQuit) {\r
-               HRESULT waitResult = WaitForMultipleObjects(waitHandlesCount, waitHandles, FALSE, 2000);\r
-               switch(waitResult) \r
-               {\r
-               //stopEvent\r
-               case (WAIT_OBJECT_0):\r
-                       bQuit = true;\r
-                       break;\r
-\r
-               //write possible\r
-               case (WAIT_OBJECT_O+1):\r
-                       if(pCompositionStrategy_ != 0) {\r
-                               if(pCompositionStrategy_->GenerateFrame(stopEvent, currentFrameIndex_)) {\r
-                                       ++currentFrameIndex_;\r
-                               }\r
-                       }\r
-                       break;\r
-\r
-               case (WAIT_TIMEOUT):\r
-                       break;\r
-\r
-               default:\r
-                       LOG << LogLevel::Critical << TEXT("Composition: write-wait failed. Aborting");\r
-                       bQuit = true;\r
-                       break:\r
-               }\r
-       }\r
-\r
-       FramePtr pNullFrame;\r
-       frameBuffer_.push_back(pNullFrame);\r
-       LOG << LogLevel::Verbose << TEXT("Composition: readAhead thread ended");\r
-}\r
-\r
-bool FrameCompositeProducer::OnUnhandledException(const std::exception& ex) throw() {\r
-       try \r
-       {\r
-               FramePtr pNullFrame;\r
-               frameBuffer_.push_back(pNullFrame);\r
-\r
-               LOG << LogLevel::Critical << TEXT("UNHANDLED EXCEPTION in compositionthread. Message: ") << ex.what();\r
-       }\r
-       catch(...)\r
-       {}\r
-\r
-       return false;\r
-}\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/producers/composites/FrameCompositeProducer.h b/server/producers/composites/FrameCompositeProducer.h
deleted file mode 100644 (file)
index 2b6a557..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include "..\..\MediaProducer.h"\r
-#include "..\..\FrameManager.h"\r
-#include "..\..\FrameMediaController.h"\r
-#include "..\..\SystemFrameManager.h"\r
-#include "..\..\utils\thread.h"\r
-\r
-namespace caspar {\r
-\r
-class TransitionInfo;\r
-\r
-class IFrameCompositionStrategy\r
-{\r
-public:\r
-       bool GenerateFrame(HANDLE stopEvent, unsigned int frameIndex) = 0;\r
-};\r
-\r
-class FrameCompositeProducer : public MediaProducer, public FrameMediaController, public utils::IRunnable\r
-{\r
-       FrameCompositeProducer();\r
-\r
-public:\r
-       static FrameCompositeProducerPtr CreateOverlayComposite();\r
-       static FrameCompositeProducerPtr CreateTransitionComposite(const TransitionInfo& transitionInfo);\r
-       virtual ~FrameCompositeProducer();\r
-\r
-       //MediaProducer\r
-       virtual IMediaController* QueryController(const tstring& id);\r
-       virtual MediaProducerPtr GetFollowingProducer();\r
-\r
-       //FrameMediaController\r
-       virtual bool Initialize(FrameManagerPtr pFrameManager);\r
-       virtual FrameBuffer& GetFrameBuffer() {\r
-               return frameBuffer_;\r
-       }\r
-\r
-       //IRunnable\r
-       virtual void Run(HANDLE stopEvent);\r
-       virtual bool OnUnhandledException(const std::exception& ex) throw();\r
-\r
-private:\r
-       IFrameCompositionStrategy* pCompositionStrategy_;\r
-       unsigned int currentFrameIndex_;\r
-\r
-       FrameManagerPtr                 pResultFrameManager_;\r
-       SystemFrameManagerPtr   pIntermediateFrameManager_;\r
-\r
-       utils::Thread worker_;\r
-       MotionFrameBuffer frameBuffer_;\r
-};\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/producers/composites/TransitionProducer.cpp b/server/producers/composites/TransitionProducer.cpp
deleted file mode 100644 (file)
index d760ef6..0000000
+++ /dev/null
@@ -1,532 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include <math.h>\r
-#include <algorithm>\r
-#include <functional>\r
-\r
-#include "TransitionProducer.h"\r
-#include "..\..\application.h"\r
-#include "..\..\utils\pixmapdata.h"\r
-#include "..\..\utils\image\image.hpp"\r
-#include "..\..\utils\thread.h"\r
-#include "..\..\frame\clipinfo.h"\r
-#include "..\..\transitioninfo.h"\r
-#include "..\..\utils\taskqueue.h"\r
-#include "..\..\frame\buffers\MotionFrameBuffer.h"\r
-\r
-namespace caspar\r
-{\r
-\r
-using namespace utils;\r
-\r
-struct TransitionProducer::Implementation\r
-{\r
-       TransitionProducer*             self_;\r
-\r
-       FrameManagerPtr                 pResultFrameManager_;\r
-       SystemFrameManagerPtr   pIntermediateFrameManager_;\r
-       ClipInfo                                sourceClip_;\r
-       ClipInfo                                destinationClip_;\r
-       std::vector<HANDLE>             readWaitHandles_;\r
-\r
-       unsigned short                  totalFrames_, currentFrame_;\r
-\r
-       std::tr1::function<void (Implementation*, unsigned char*, unsigned char*, unsigned char*)> generateFrameFun_;\r
-\r
-       TransitionInfo                  transitionInfo_;\r
-       unsigned long                   borderColorValue_;\r
-       utils::PixmapDataPtr    pBorderImage_;\r
-\r
-       utils::Thread worker_;\r
-       utils::TaskQueue taskQueue_;\r
-       MotionFrameBuffer frameBuffer_;\r
-\r
-       Implementation(TransitionProducer*      self, MediaProducerPtr pDest, const TransitionInfo& transitionInfo, const FrameFormatDescription& fmtDesc)\r
-       :       \r
-       self_(self), \r
-       totalFrames_(transitionInfo.duration_+1), \r
-       currentFrame_(1),\r
-       transitionInfo_(transitionInfo), \r
-       borderColorValue_(0)\r
-       {\r
-               pIntermediateFrameManager_.reset(new SystemFrameManager(fmtDesc));\r
-\r
-               if(pDest != 0) {\r
-                       FrameMediaController* pDestFrameController = dynamic_cast<FrameMediaController*>(pDest->QueryController(TEXT("FrameController")));\r
-                       destinationClip_ = ClipInfo(pDest, pDestFrameController);\r
-                       if(!destinationClip_.IsEmpty())\r
-                               readWaitHandles_.push_back(destinationClip_.pFrameController_->GetFrameBuffer().GetWaitHandle());\r
-               }\r
-\r
-               switch(transitionInfo_.type_) {\r
-               case Slide:\r
-               case Push:\r
-               case Wipe:\r
-                       generateFrameFun_ = &Implementation::GenerateWipeFrame;\r
-                       break;\r
-               case Mix:\r
-               default:\r
-                       generateFrameFun_ = &Implementation::GenerateMixFrame;\r
-                       break;\r
-               };\r
-       }\r
-\r
-       ~Implementation() \r
-       {\r
-               worker_.Stop();\r
-       }\r
-\r
-\r
-       IMediaController* QueryController(const tstring& id) \r
-       {\r
-               //The transition only supports FrameController if its destination also supports it\r
-               if(!destinationClip_.IsEmpty()) {\r
-                       if(id == TEXT("FrameController")) {\r
-                               return self_;\r
-                       }\r
-               }\r
-               return NULL;\r
-       }\r
-\r
-       MediaProducerPtr GetFollowingProducer() \r
-       {\r
-               return destinationClip_.pFP_;\r
-       }\r
-\r
-       bool Initialize(FrameManagerPtr pFrameManager)\r
-       {\r
-               if(pFrameManager) {\r
-                       if(!worker_.IsRunning()) {\r
-                               pResultFrameManager_ = pFrameManager;\r
-                               if(pResultFrameManager_ != 0 && !destinationClip_.IsEmpty()) {\r
-                                       //Cue audio for destination clip\r
-                                       GetApplication()->GetAudioManager()->CueAudio(destinationClip_.pFrameController_);\r
-\r
-                                       return destinationClip_.pFrameController_->Initialize(pIntermediateFrameManager_);\r
-                               }\r
-                       }\r
-                       else {\r
-                               //Create a task that replace pResultFrameManager_ but is executed in the worker thread\r
-                               taskQueue_.push_back(bind(&TransitionProducer::Implementation::DoUpdateFrameManager, this, pFrameManager));\r
-                               return true;\r
-                       }\r
-               }\r
-               return false;\r
-       }\r
-\r
-       void DoUpdateFrameManager(FrameManagerPtr pFrameManager) {\r
-               pResultFrameManager_ = pFrameManager;\r
-       }\r
-\r
-       FrameBuffer& GetFrameBuffer() \r
-       {\r
-               return frameBuffer_;\r
-       }\r
-\r
-       bool Start(const ClipInfo& srcClipInfo) \r
-       {\r
-               sourceClip_ = srcClipInfo;\r
-               if(!sourceClip_.IsEmpty() && !destinationClip_.IsEmpty()) {\r
-                       if(sourceClip_.pFrameController_->Initialize(pIntermediateFrameManager_)) {\r
-                               readWaitHandles_.push_back(sourceClip_.pFrameController_->GetFrameBuffer().GetWaitHandle());\r
-\r
-                               //AUDIO\r
-                               {\r
-                                       //copy all workers from the source to this\r
-                                       self_->GetSoundBufferWorkers().insert(self_->GetSoundBufferWorkers().end(), sourceClip_.pFrameController_->GetSoundBufferWorkers().begin(), sourceClip_.pFrameController_->GetSoundBufferWorkers().end());\r
-\r
-                                       //copy all workers from the destination to this\r
-                                       self_->GetSoundBufferWorkers().insert(self_->GetSoundBufferWorkers().end(), destinationClip_.pFrameController_->GetSoundBufferWorkers().begin(), destinationClip_.pFrameController_->GetSoundBufferWorkers().end());\r
-                               }\r
-\r
-                               return worker_.Start(self_);\r
-                       }\r
-               }\r
-               return false;\r
-       }\r
-\r
-       void Run(HANDLE stopEvent)\r
-       {\r
-               LOG << LogLevel::Verbose << TEXT("Transition: readAhead thread started");\r
-               currentFrame_ = 1;\r
-\r
-               HANDLE waitHandles[3] = { stopEvent, taskQueue_.GetWaitEvent(), frameBuffer_.GetWriteWaitHandle() };\r
-               DWORD waitHandlesCount = sizeof(waitHandles) / sizeof(HANDLE);\r
-\r
-               bool bQuit = false;\r
-               while(bQuit == false && currentFrame_ <= totalFrames_) {\r
-                       HRESULT waitResult = WaitForMultipleObjects(waitHandlesCount, waitHandles, FALSE, 2000);\r
-                       switch(waitResult) {\r
-                               case WAIT_OBJECT_0:\r
-                                       LOG << LogLevel::Debug << TEXT("Transition: Recieved stopEvent");\r
-                                       bQuit = true;\r
-                                       break;\r
-\r
-                               case WAIT_OBJECT_0+1:\r
-                                       taskQueue_.pop_and_execute_front();\r
-                                       break;\r
-\r
-                               case WAIT_OBJECT_0+2:\r
-                                       {\r
-                                               bool bWriteSuccess = false;\r
-                                               if(WriteFrame(bWriteSuccess)) {\r
-                                                       if(bWriteSuccess)\r
-                                                               ++currentFrame_;\r
-                                               }\r
-                                               else {\r
-                                                       LOG << TEXT("Transition: WriteFrame returned false. Abort transition");\r
-                                                       bQuit = true;\r
-                                               }\r
-                                       }\r
-                                       break;\r
-\r
-                               case WAIT_TIMEOUT:\r
-                                       break;\r
-\r
-                               default:\r
-                                       LOG << LogLevel::Critical << TEXT("Transition: write-wait failed. Aborting");\r
-                                       bQuit = true;\r
-                                       break;\r
-                       }\r
-               }\r
-\r
-               //ALMOST SAME BUT OLD: This does not include a complete frame from the destination as the last frame\r
-/*             for(currentFrame_ = 1; currentFrame_< totalFrames_; ++currentFrame_) {\r
-                       HRESULT waitResult = WaitForMultipleObjects(waitHandlesCount, waitHandles, FALSE, 2000);\r
-                       if(waitResult == (WAIT_OBJECT_0+2)) {\r
-                               if(!WriteFrame()) {\r
-                                       LOG << LogLevel::Debug << TEXT("Transition: WriteFrame returned false. Abort transition");\r
-                                       break;\r
-                               }\r
-                       }\r
-                       else if(waitResult == WAIT_OBJECT_0 + 1) {\r
-                               --currentFrame_;\r
-\r
-                               Task task;\r
-                               taskQueue_.pop_front(task);\r
-                               if(task)\r
-                                       task();\r
-                       }\r
-                       else if(waitResult == WAIT_OBJECT_0) {\r
-                               LOG << LogLevel::Debug << TEXT("Transition: Recieved stopEvent");\r
-                               break;\r
-                       }\r
-                       else if(waitResult == WAIT_TIMEOUT) {\r
-                               //retry the same frame\r
-                               --currentFrame_;\r
-                       }\r
-                       else {\r
-                               //Iiik, Critical error\r
-                               LOG << LogLevel::Critical << TEXT("Transition: write-wait failed. Aborting");\r
-                               break;\r
-                       }\r
-               }*/\r
-\r
-               FramePtr pNullFrame;\r
-               frameBuffer_.push_back(pNullFrame);\r
-               LOG << LogLevel::Verbose << TEXT("Transition: readAhead thread ended");\r
-       }\r
-\r
-       bool OnUnhandledException(const std::exception& ex) throw() \r
-       {\r
-               try \r
-               {\r
-                       FramePtr pNullFrame;\r
-                       frameBuffer_.push_back(pNullFrame);\r
-\r
-                       LOG << LogLevel::Critical << TEXT("UNHANDLED EXCEPTION in transitionthread. Message: ") << ex.what();\r
-               }\r
-               catch(...)\r
-               {}\r
-\r
-               return false;\r
-       }\r
-\r
-       bool WriteFrame(bool &bWriteSuccess) \r
-       {\r
-               //Wait for source-feeds\r
-               HRESULT waitResult = WAIT_OBJECT_0;\r
-               if(readWaitHandles_.size() > 0)\r
-                       waitResult = WaitForMultipleObjects(static_cast<DWORD>(readWaitHandles_.size()), &(readWaitHandles_[0]), TRUE, 250);\r
-\r
-               switch(waitResult) \r
-               {\r
-                       case WAIT_OBJECT_0:                     \r
-                               if(DoWriteFrame())\r
-                                       bWriteSuccess = true;\r
-                               else\r
-                                       return false;\r
-                               break;\r
-\r
-                       case WAIT_TIMEOUT:\r
-                               Sleep(0);\r
-                               break;\r
-\r
-                       default:        //An error occured\r
-                               LOG << LogLevel::Critical << TEXT("Transition: read-wait failed. Aborting");\r
-                               return false;\r
-               }\r
-\r
-               return true;\r
-       }\r
-\r
-       bool DoWriteFrame()\r
-       {\r
-               FrameBuffer& srcFrameBuffer = sourceClip_.pFrameController_->GetFrameBuffer();\r
-               FrameBuffer& destFrameBuffer = destinationClip_.pFrameController_->GetFrameBuffer();\r
-\r
-               //Make member of ClipInfo\r
-               FramePtr pSrcFrame =  (sourceClip_.lastFetchResult_ == FetchEOF) ? sourceClip_.pLastFrame_ : srcFrameBuffer.front();\r
-               FramePtr pDestFrame = (destinationClip_.lastFetchResult_ == FetchEOF)? destinationClip_.pLastFrame_ : destFrameBuffer.front();\r
-\r
-               //Bail if no data is availible\r
-               if(pSrcFrame == 0 || pDestFrame == 0) \r
-               {\r
-                       LOG << LogLevel::Debug << TEXT("Transition: WriteFrame(): GetFrameBuffer().front() returned null");\r
-                       return false;\r
-               }\r
-\r
-               FramePtr pResultFrame = pResultFrameManager_->CreateFrame();\r
-               if(pResultFrame != 0 && pResultFrame->GetDataPtr() != 0) \r
-               {\r
-                       generateFrameFun_(this, pResultFrame->GetDataPtr(), pSrcFrame->GetDataPtr(), pDestFrame->GetDataPtr());\r
-                       //AUDIO\r
-                       {\r
-                               float alpha = static_cast<float>(currentFrame_)/static_cast<float>(totalFrames_);\r
-                               //copy all sounddatachunks from source\r
-                               std::for_each(pSrcFrame->GetAudioData().begin(), pSrcFrame->GetAudioData().end(), std::bind(&audio::AudioDataChunk::SetVolume, std::placeholders::_1, 1.0f-alpha));\r
-                               pResultFrame->GetAudioData().insert(pResultFrame->GetAudioData().end(), pSrcFrame->GetAudioData().begin(), pSrcFrame->GetAudioData().end());\r
-\r
-                               //copy sounddatachunk from destination\r
-                               std::for_each(pDestFrame->GetAudioData().begin(), pDestFrame->GetAudioData().end(), std::bind(&audio::AudioDataChunk::SetVolume, std::placeholders::_1, alpha));\r
-                               pResultFrame->GetAudioData().insert(pResultFrame->GetAudioData().end(), pDestFrame->GetAudioData().begin(), pDestFrame->GetAudioData().end());\r
-                       }\r
-\r
-                       frameBuffer_.push_back(pResultFrame);\r
-\r
-                       if(sourceClip_.lastFetchResult_ != FetchEOF) \r
-                       {\r
-                               sourceClip_.pLastFrame_                 = pSrcFrame;\r
-                               sourceClip_.lastFetchResult_    = srcFrameBuffer.pop_front();\r
-\r
-                               //remove from readWaitHandles\r
-                               if(sourceClip_.lastFetchResult_ == FetchEOF)                                                    \r
-                                       readWaitHandles_.erase(std::find(readWaitHandles_.begin(), readWaitHandles_.end(), srcFrameBuffer.GetWaitHandle()));            \r
-                       }\r
-\r
-                       if(destinationClip_.lastFetchResult_ != FetchEOF)\r
-                       {\r
-                               destinationClip_.pLastFrame_            = pDestFrame;\r
-                               destinationClip_.lastFetchResult_       = destFrameBuffer.pop_front();\r
-\r
-                               //remove from readWaitHandles\r
-                               if(destinationClip_.lastFetchResult_ == FetchEOF)                                                       \r
-                                       readWaitHandles_.erase(std::find(readWaitHandles_.begin(), readWaitHandles_.end(), destFrameBuffer.GetWaitHandle()));                                                                   \r
-                       }\r
-               }\r
-               else \r
-               {\r
-                       Sleep(0);\r
-               }               \r
-\r
-               return true;\r
-       }\r
-\r
-       /////////////////////////////\r
-       // Frame-generating functions\r
-       void GenerateMixFrame(unsigned char* pResultData, unsigned char* pSourceData, unsigned char* pDestData)\r
-       {\r
-               image::Lerp(pResultData, pSourceData, pDestData, 1.0f-static_cast<float>(currentFrame_)/static_cast<float>(totalFrames_), pResultFrameManager_->GetFrameFormatDescription().size);\r
-       }\r
-\r
-       // TODO: Move into "image" library, seperate push, slide, wipe? (R.N)\r
-       void GenerateWipeFrame(unsigned char* pResultData, unsigned char* pSourceData, unsigned char* pDestData)\r
-       {\r
-               const FrameFormatDescription& fmtDesc = pResultFrameManager_->GetFrameFormatDescription();\r
-\r
-               if(currentFrame_ < totalFrames_) {\r
-                       int totalWidth = fmtDesc.width + transitionInfo_.borderWidth_;\r
-                       \r
-                       float fStep   = totalWidth / (float)totalFrames_;\r
-                       float fOffset = fStep * (float)currentFrame_;\r
-\r
-                       int halfStep = static_cast<int>(fStep/2.0);\r
-                       int offset   = static_cast<int>(fOffset+0.5f);\r
-                       \r
-                       //read source to buffer\r
-                       for(int row = 0, even = 0; row < fmtDesc.height; ++row, even ^= 1)\r
-                       {\r
-                               int fieldCorrectedOffset = offset + (halfStep*even);\r
-                               if(fieldCorrectedOffset < fmtDesc.width)\r
-                               {\r
-                                       if(transitionInfo_.direction_ != FromLeft)\r
-                                       {\r
-                                               if(transitionInfo_.type_ == Push)\r
-                                                       memcpy(&(pResultData[4*row*fmtDesc.width]), &(pSourceData[4*(row*fmtDesc.width+fieldCorrectedOffset)]), (fmtDesc.width-fieldCorrectedOffset)*4);\r
-                                               else    //Slide | Wipe\r
-                                                       memcpy(&(pResultData[4*row*fmtDesc.width]), &(pSourceData[4*row*fmtDesc.width]), (fmtDesc.width-fieldCorrectedOffset)*4);\r
-                                       }\r
-                                       else // if (direction == LEFT)\r
-                                       {                               \r
-                                               if(transitionInfo_.type_ == Push)\r
-                                                       memcpy(&(pResultData[4*(row*fmtDesc.width+fieldCorrectedOffset)]), &(pSourceData[4*(row*fmtDesc.width)]), (fmtDesc.width-fieldCorrectedOffset)*4);\r
-                                               else    //slide eller wipe\r
-                                                       memcpy(&(pResultData[4*(row*fmtDesc.width+fieldCorrectedOffset)]), &(pSourceData[4*(row*fmtDesc.width+fieldCorrectedOffset)]), (fmtDesc.width-fieldCorrectedOffset)*4);\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       //write border to buffer\r
-                       if(transitionInfo_.borderWidth_ > 0)\r
-                       {\r
-                               for(int row = 0, even = 0; row < fmtDesc.height; ++row, even ^= 1)\r
-                               {\r
-                                       int fieldCorrectedOffset = offset + (halfStep*even);\r
-                                       int length = transitionInfo_.borderWidth_;\r
-                                       int start = 0;\r
-\r
-                                       if(transitionInfo_.direction_ != FromLeft)\r
-                                       {\r
-                                               if(fieldCorrectedOffset > fmtDesc.width)\r
-                                               {\r
-                                                       length -= fieldCorrectedOffset-fmtDesc.width;\r
-                                                       start += fieldCorrectedOffset-fmtDesc.width;\r
-                                                       fieldCorrectedOffset = fmtDesc.width;\r
-                                               }\r
-                                               else if(fieldCorrectedOffset < length)\r
-                                               {\r
-                                                       length = fieldCorrectedOffset;\r
-                                               }\r
-\r
-                                               if(pBorderImage_ != 0)\r
-                                               {\r
-                                                       unsigned char* pBorderImageData = pBorderImage_->GetDataPtr();\r
-                                                       memcpy(&(pResultData[4*(row*fmtDesc.width+fmtDesc.width-fieldCorrectedOffset)]), &(pBorderImageData[4*(row*pBorderImage_->width+start)]), length*4);\r
-                                               }\r
-                                               else\r
-                                               {\r
-                                                       for(int i=0;i<length;++i)\r
-                                                               memcpy(&(pResultData[4*(row*fmtDesc.width+fmtDesc.width-fieldCorrectedOffset+i)]), &borderColorValue_, 4);\r
-                                               }\r
-                                       }\r
-                                       else // if (direction == LEFT)\r
-                                       {\r
-                                               if(fieldCorrectedOffset > fmtDesc.width)\r
-                                               {\r
-                                                       length -= fieldCorrectedOffset-fmtDesc.width;\r
-                                                       start = 0;\r
-                                                       fieldCorrectedOffset -= transitionInfo_.borderWidth_-length;\r
-                                               }\r
-                                               else if(fieldCorrectedOffset < length)\r
-                                               {\r
-                                                       length = fieldCorrectedOffset;\r
-                                                       start = transitionInfo_.borderWidth_-fieldCorrectedOffset;\r
-                                               }\r
-\r
-                                               if(pBorderImage_ != 0 && length > 0)\r
-                                               {\r
-                                                       unsigned char* pBorderImageData = pBorderImage_->GetDataPtr();\r
-                                                       memcpy(&(pResultData[4*(row*fmtDesc.width+fieldCorrectedOffset-length)]), &(pBorderImageData[4*(row*pBorderImage_->width+start)]), length*4);\r
-                                               }\r
-                                               else\r
-                                               {\r
-                                                       for(int i=0;i<length;++i)\r
-                                                               memcpy(&(pResultData[4*(row*fmtDesc.width+fieldCorrectedOffset-length+i)]), &borderColorValue_, 4);\r
-                                               }\r
-                                       }\r
-\r
-                               }\r
-                       }\r
-\r
-                       //read dest to buffer\r
-                       offset -= transitionInfo_.borderWidth_;\r
-                       if(offset > 0)\r
-                       {\r
-                               for(int row = 0, even = 0; row < fmtDesc.height; ++row, even ^= 1)\r
-                               {\r
-                                       int fieldCorrectedOffset = offset + (halfStep*even);\r
-\r
-                                       if(transitionInfo_.direction_ != FromLeft)\r
-                                       {\r
-                                               if(transitionInfo_.type_ == Wipe)\r
-                                                       memcpy(&(pResultData[4*(row*fmtDesc.width+fmtDesc.width-fieldCorrectedOffset)]), &(pDestData[4*(row*fmtDesc.width+fmtDesc.width-fieldCorrectedOffset)]), fieldCorrectedOffset*4);\r
-                                               else\r
-                                                       memcpy(&(pResultData[4*(row*fmtDesc.width+fmtDesc.width-fieldCorrectedOffset)]), &(pDestData[4*row*fmtDesc.width]), fieldCorrectedOffset*4);\r
-                                       }\r
-                                       else // if (direction == LEFT)\r
-                                       {                               \r
-                                               if(transitionInfo_.type_ == Wipe)\r
-                                                       memcpy(&(pResultData[4*(row*fmtDesc.width)]), &(pDestData[4*(row*fmtDesc.width)]), fieldCorrectedOffset*4);\r
-                                               else\r
-                                                       memcpy(&(pResultData[4*(row*fmtDesc.width)]), &(pDestData[4*(row*fmtDesc.width+fmtDesc.width-fieldCorrectedOffset)]), fieldCorrectedOffset*4);  \r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               else {\r
-                       //currentFrame_ == totalFrames_\r
-                       image::Copy(pResultData, pDestData, fmtDesc.size);\r
-               }\r
-       }\r
-};\r
-\r
-\r
-TransitionProducer::TransitionProducer(MediaProducerPtr pDest, const TransitionInfo& transitionInfo, const FrameFormatDescription& fmtDesc) : pImpl_(new Implementation(this, pDest, transitionInfo, fmtDesc)){}\r
-TransitionProducer::~TransitionProducer() {}\r
-\r
-IMediaController* TransitionProducer::QueryController(const tstring& id)\r
-{\r
-       return pImpl_->QueryController(id);\r
-}\r
-\r
-MediaProducerPtr TransitionProducer::GetFollowingProducer() \r
-{\r
-       return pImpl_->GetFollowingProducer();\r
-}\r
-\r
-bool TransitionProducer::Initialize(FrameManagerPtr pFrameManager) \r
-{\r
-       return pImpl_->Initialize(pFrameManager);\r
-}\r
-\r
-FrameBuffer& TransitionProducer::GetFrameBuffer() \r
-{\r
-       return pImpl_->GetFrameBuffer();\r
-}\r
-\r
-bool TransitionProducer::Start(const ClipInfo& srcClipInfo) \r
-{\r
-       return pImpl_->Start(srcClipInfo);\r
-}\r
-\r
-void TransitionProducer::Run(HANDLE stopEvent)\r
-{\r
-       pImpl_->Run(stopEvent);\r
-}\r
-\r
-bool TransitionProducer::OnUnhandledException(const std::exception& ex) throw()\r
-{\r
-       return pImpl_->OnUnhandledException(ex);\r
-}\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/producers/composites/TransitionProducer.h b/server/producers/composites/TransitionProducer.h
deleted file mode 100644 (file)
index d06007c..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include "..\..\MediaProducer.h"\r
-#include "..\..\frame\FrameManager.h"\r
-#include "..\..\frame\FrameMediaController.h"\r
-#include "..\..\frame\SystemFrameManager.h"\r
-#include "..\..\utils\runnable.h"\r
-#include "..\..\utils\Noncopyable.hpp"\r
-\r
-#include <vector>\r
-\r
-namespace caspar {\r
-\r
-       class ClipInfo;\r
-       class TransitionInfo;\r
-\r
-namespace utils {\r
-       class PixmapData;\r
-       typedef std::tr1::shared_ptr<PixmapData> PixmapDataPtr;\r
-}\r
-\r
-// TODO: Put into its own header? (R.N)\r
-class ITransitionController\r
-{\r
-public:\r
-       virtual bool Start(const ClipInfo& srcClipInfo) = 0;\r
-};\r
-\r
-class TransitionProducer : public MediaProducer, public FrameMediaController, public ITransitionController, public utils::IRunnable, private utils::Noncopyable\r
-{\r
-public:\r
-       TransitionProducer(MediaProducerPtr pDestination, const TransitionInfo& transitionInfo, const FrameFormatDescription& fmtDesc);\r
-       virtual ~TransitionProducer();\r
-\r
-       //MediaProducer\r
-       virtual IMediaController* QueryController(const tstring& id);\r
-       virtual MediaProducerPtr GetFollowingProducer();\r
-\r
-       //FrameMediaController\r
-       virtual bool Initialize(FrameManagerPtr pFrameManager);\r
-       virtual FrameBuffer& GetFrameBuffer();\r
-\r
-       //ITransitionController\r
-       virtual bool Start(const ClipInfo& srcClipInfo);\r
-\r
-       //IRunnable\r
-       virtual void Run(HANDLE stopEvent);\r
-       virtual bool OnUnhandledException(const std::exception& ex) throw();\r
-\r
-private:\r
-\r
-       struct Implementation;\r
-       std::tr1::shared_ptr<Implementation> pImpl_;\r
-};\r
-typedef std::tr1::shared_ptr<TransitionProducer> TransitionProducerPtr;\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/producers/ffmpeg/FFmpegManager.cpp b/server/producers/ffmpeg/FFmpegManager.cpp
deleted file mode 100644 (file)
index 3d7900f..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "../../stdafx.h"\r
-\r
-#include "FFMPEGManager.h"\r
-#include "ffmpeg_producer.h"\r
-\r
-#include "../../MediaProducerInfo.h"\r
-#include "../../frame/FrameManager.h"\r
-#include "../../frame/FrameMediaController.h"\r
-#include "../../utils/UnhandledException.h"\r
-\r
-#include <boost/thread/once.hpp>\r
-#include <boost/assign.hpp>\r
-\r
-extern "C" \r
-{\r
-       #define __STDC_CONSTANT_MACROS\r
-       #define __STDC_LIMIT_MACROS\r
-       #include <libavcodec/avcodec.h>\r
-       #include <libavformat/avformat.h>\r
-       #include <libavutil/avutil.h>\r
-       #include <libswscale/swscale.h>\r
-}\r
-\r
-namespace caspar {\r
-namespace ffmpeg {\r
-\r
-using namespace utils;\r
-using namespace boost::assign;\r
-\r
-FFMPEGManager::FFMPEGManager() \r
-{\r
-       static boost::once_flag flag = BOOST_ONCE_INIT;\r
-       boost::call_once(av_register_all, flag);\r
-       \r
-       _extensions += TEXT("mpg"), TEXT("avi"), TEXT("mov"), TEXT("dv"), TEXT("wav"), TEXT("mp3"), TEXT("mp4"), TEXT("f4v"), TEXT("flv");\r
-}\r
-\r
-MediaProducerPtr FFMPEGManager::CreateProducer(const tstring& filename)\r
-{\r
-       CASPAR_TRY\r
-       {\r
-               return std::make_shared<FFMPEGProducer>(filename);\r
-       }\r
-       CASPAR_CATCH_AND_LOG("[FFMPEGManager::CreateProducer]")\r
-\r
-       return nullptr;\r
-}\r
-\r
-bool FFMPEGManager::getFileInfo(FileInfo* pFileInfo)\r
-{\r
-       if(pFileInfo == nullptr)\r
-               return false;\r
-\r
-       auto movie = list_of(TEXT("avi"))(TEXT("mpg"))(TEXT("mov"))(TEXT("dv"))(TEXT("flv"))(TEXT("f4v"))(TEXT("mp4"));\r
-       auto audio = list_of(TEXT("wav"))(TEXT("mp3"));\r
-\r
-       if(std::find(movie.begin(), movie.end(), pFileInfo->filetype) != movie.end())\r
-       {\r
-               pFileInfo->length = 0;  //get real length from file\r
-               pFileInfo->type = TEXT("movie");\r
-               pFileInfo->encoding = TEXT("codec");\r
-       }\r
-       else if(std::find(audio.begin(), audio.end(), pFileInfo->filetype) != audio.end()) \r
-       {\r
-               pFileInfo->length = 0;  //get real length from file\r
-               pFileInfo->type = TEXT("audio");\r
-               pFileInfo->encoding = TEXT("NA");\r
-       }\r
-       return true;\r
-}\r
-\r
-}}
\ No newline at end of file
diff --git a/server/producers/ffmpeg/audio/audio_decoder.cpp b/server/producers/ffmpeg/audio/audio_decoder.cpp
deleted file mode 100644 (file)
index 201bd8c..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-#include "../../../stdafx.h"\r
-\r
-#include "audio_decoder.h"\r
-\r
-#include <queue>\r
-               \r
-namespace caspar{ namespace ffmpeg{\r
-\r
-struct audio_decoder::implementation : boost::noncopyable\r
-{\r
-       implementation() : discard_bytes_(0), current_audio_chunk_offset_(0)\r
-       {\r
-               audio_decomp_buffer_.resize(audio_decoder::AUDIO_DECOMP_BUFFER_SIZE);\r
-               int alignment_offset_ = static_cast<unsigned char>(audio_decoder::ALIGNMENT - (reinterpret_cast<size_t>(&audio_decomp_buffer_.front()) % audio_decoder::ALIGNMENT));\r
-               aligned_audio_decomp_addr_ = &audio_decomp_buffer_.front() + alignment_offset_;                         \r
-       }\r
-               \r
-       audio_packet_ptr execute(const audio_packet_ptr& audio_packet)\r
-       {                       \r
-               int max_chunk_length = min(audio_packet->audio_frame_size, audio_packet->src_audio_frame_size);\r
-\r
-               int written_bytes = audio_decoder::AUDIO_DECOMP_BUFFER_SIZE - audio_decoder::ALIGNMENT;\r
-               int result = avcodec_decode_audio2(audio_packet->codec_context, reinterpret_cast<int16_t*>(aligned_audio_decomp_addr_), &written_bytes, audio_packet->data.data(), audio_packet->size);\r
-\r
-               if(result <= 0)\r
-                       return audio_packet;\r
-\r
-               unsigned char* pDecomp = aligned_audio_decomp_addr_;\r
-\r
-               //if there are bytes to discard, do that first\r
-               while(written_bytes > 0 && discard_bytes_ != 0)\r
-               {\r
-                       int bytesToDiscard = min(written_bytes, static_cast<int>(discard_bytes_));\r
-                       pDecomp += bytesToDiscard;\r
-\r
-                       discard_bytes_ -= bytesToDiscard;\r
-                       written_bytes -= bytesToDiscard;\r
-               }\r
-\r
-               while(written_bytes > 0)\r
-               {\r
-                       //if we're starting on a new chunk, allocate it\r
-                       if(current_chunk_ == nullptr) \r
-                       {\r
-                               current_chunk_ = std::make_shared<audio::AudioDataChunk>(audio_packet->audio_frame_size);\r
-                               current_audio_chunk_offset_ = 0;\r
-                       }\r
-\r
-                       //either fill what's left of the chunk or copy all written_bytes that are left\r
-                       int targetLength = min((max_chunk_length - current_audio_chunk_offset_), written_bytes);\r
-                       memcpy(current_chunk_->GetDataPtr() + current_audio_chunk_offset_, pDecomp, targetLength);\r
-                       written_bytes -= targetLength;\r
-\r
-                       current_audio_chunk_offset_ += targetLength;\r
-                       pDecomp += targetLength;\r
-\r
-                       if(current_audio_chunk_offset_ >= max_chunk_length) \r
-                       {\r
-                               if(max_chunk_length < static_cast<int>(audio_packet->audio_frame_size)) \r
-                                       memset(current_chunk_->GetDataPtr() + max_chunk_length, audio_packet->audio_frame_size-max_chunk_length, 0);                                    \r
-                               else if(audio_packet->audio_frame_size < audio_packet->src_audio_frame_size) \r
-                                       discard_bytes_ = audio_packet->src_audio_frame_size-audio_packet->audio_frame_size;\r
-\r
-                               audio_packet->audio_chunks.push_back(current_chunk_);\r
-                               current_chunk_.reset();\r
-                       }\r
-               }\r
-\r
-               return audio_packet;\r
-       }\r
-                       \r
-       int                                                                     discard_bytes_;\r
-               \r
-       std::vector<unsigned char>                      audio_decomp_buffer_;\r
-       unsigned char*                                          aligned_audio_decomp_addr_;\r
-\r
-       audio::AudioDataChunkPtr                                                current_chunk_;\r
-       int                                                                     current_audio_chunk_offset_;\r
-};\r
-\r
-audio_decoder::audio_decoder() : impl_(new implementation()){}\r
-audio_packet_ptr audio_decoder::execute(const audio_packet_ptr& audio_packet){return impl_->execute(audio_packet);}\r
-}}
\ No newline at end of file
diff --git a/server/producers/ffmpeg/audio/audio_decoder.h b/server/producers/ffmpeg/audio/audio_decoder.h
deleted file mode 100644 (file)
index cb3d10b..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-#pragma once\r
-\r
-#include "../packet.h"\r
-\r
-#include <boost/noncopyable.hpp>\r
-\r
-namespace caspar{ namespace ffmpeg     {\r
-\r
-class audio_decoder : boost::noncopyable\r
-{\r
-public:\r
-       audio_decoder();\r
-       audio_packet_ptr execute(const audio_packet_ptr& audio_packet);\r
-       \r
-       /// <summary> The alignment </summary>\r
-       /// <remarks> Four sec of 16 bit stereo 48kHz should be enough </remarks>\r
-       static const int ALIGNMENT = 16 ;\r
-\r
-       /// <summary> Size of the audio decomp buffer </summary>\r
-       static const int AUDIO_DECOMP_BUFFER_SIZE = 4*48000*4+ALIGNMENT;\r
-private:\r
-       struct implementation;\r
-       std::shared_ptr<implementation> impl_;\r
-};\r
-typedef std::shared_ptr<audio_decoder> audio_decoder_ptr;\r
-typedef std::unique_ptr<audio_decoder> audio_decoder_uptr;\r
-\r
-}}
\ No newline at end of file
diff --git a/server/producers/ffmpeg/ffmpeg_producer.cpp b/server/producers/ffmpeg/ffmpeg_producer.cpp
deleted file mode 100644 (file)
index 20e7d62..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-#include "../../stdafx.h"\r
-\r
-#include "ffmpeg_producer.h"\r
-\r
-#if defined(_MSC_VER)\r
-#pragma warning (push)\r
-#pragma warning (disable : 4244)\r
-#endif\r
-\r
-extern "C" \r
-{\r
-       #define __STDC_CONSTANT_MACROS\r
-       #define __STDC_LIMIT_MACROS\r
-       #include <libavcodec/avcodec.h>\r
-       #include <libavformat/avformat.h>\r
-       #include <libavutil/avutil.h>\r
-       #include <libswscale/swscale.h>\r
-}\r
-\r
-#if defined(_MSC_VER)\r
-#pragma warning (pop)\r
-#endif\r
-\r
-#include "input.h"\r
-\r
-#include "audio/audio_decoder.h"\r
-#include "video/video_decoder.h"\r
-#include "video/video_transformer.h"\r
-\r
-#include "../../Application.h"\r
-#include "../../MediaProducerInfo.h"\r
-#include "../../string_convert.h"\r
-#include "../../frame/buffers/MotionFrameBuffer.h"\r
-#include "../../frame/FrameManager.h"\r
-#include "../../frame/FrameMediaController.h"\r
-#include "../../audio/audiomanager.h"\r
-#include "../../utils/Logger.h"\r
-#include "../../utils/Win32Exception.h"\r
-\r
-#include <tbb/mutex.h>\r
-#include <tbb/parallel_invoke.h>\r
-#include <tbb/task_group.h>\r
-\r
-#include <boost/algorithm/string/case_conv.hpp>\r
-#include <boost/lexical_cast.hpp>\r
-#include <boost/thread.hpp>\r
-#include <boost/thread/once.hpp>\r
-#include <boost/filesystem.hpp>\r
-#include <boost/assign.hpp>\r
-\r
-using namespace boost::assign;\r
-\r
-namespace caspar{ namespace ffmpeg{\r
-       \r
-struct FFMPEGProducer::Implementation : public FrameMediaController, boost::noncopyable\r
-{\r
-public:\r
-       Implementation(const std::wstring& filename) \r
-               : filename_(filename)\r
-       {\r
-               if(!boost::filesystem::exists(filename))\r
-                       throw std::runtime_error("File not found");\r
-\r
-               frameBuffer_.SetCapacity(2);\r
-\r
-               input_.reset(new input());\r
-               input_->load(utils::narrow(filename_));\r
-               input_->set_loop(loop_);\r
-               has_audio_ = input_->get_audio_codec_context() != nullptr;\r
-       }\r
-       \r
-       ~Implementation()\r
-       {\r
-               input_->stop();\r
-               frameBuffer_.clear();\r
-               frameBuffer_.push_back(nullptr);\r
-               thread_.join();\r
-       }\r
-               \r
-       FramePtr get_frame()\r
-       {\r
-               while(ouput_channel_.empty() && !input_->is_eof())\r
-               {                               \r
-                       input_->wait_for_packet();\r
-                       \r
-                       audio_packet_ptr audio_packet;\r
-                       if(audio_chunk_channel_.size() < 25)\r
-                               audio_packet = input_->get_audio_packet();\r
-                       \r
-                       video_packet_ptr video_packet;\r
-                       if(video_frame_channel_.size() < 25)\r
-                               video_packet = input_->get_video_packet();\r
-                       \r
-                       tbb::parallel_invoke(\r
-                       [&]\r
-                       { // Video Decoding and Scaling\r
-                               if(video_packet)\r
-                               {\r
-                                       video_packet = video_decoder_.execute(video_packet);\r
-                                       auto frame = video_transformer_.execute(video_packet)->frame;\r
-                                       video_frame_channel_.push_back(std::move(frame));       \r
-                               }\r
-                       }, \r
-                       [&] \r
-                       { // Audio Decoding\r
-                               if(audio_packet)\r
-                               {\r
-                                       auto audio_chunks = audio_decoder_.execute(audio_packet);\r
-                                       audio_chunk_channel_.insert(audio_chunk_channel_.end(), audio_packet->audio_chunks.begin(), audio_packet->audio_chunks.end());\r
-                               }\r
-                       });\r
-\r
-                       while(!video_frame_channel_.empty() && (!audio_chunk_channel_.empty() || !has_audio_))\r
-                       {\r
-                               if(has_audio_)\r
-                               {\r
-                                       video_frame_channel_.front()->GetAudioData().push_back(audio_chunk_channel_.front());\r
-                                       audio_chunk_channel_.pop_front();\r
-                               }\r
-                               \r
-                               FramePtr frame = video_frame_channel_.front();\r
-                               video_frame_channel_.pop_front();\r
-                               ouput_channel_.push(std::move(frame));\r
-                       }                               \r
-               }\r
-\r
-               FramePtr frame;\r
-               if(!ouput_channel_.empty())\r
-               {\r
-                       frame = ouput_channel_.front();\r
-                       ouput_channel_.pop();\r
-               }\r
-\r
-               return frame;\r
-       }\r
-       \r
-       bool Initialize(FrameManagerPtr pFrameManager) \r
-       {               \r
-               try\r
-               {\r
-                       video_transformer_.set_factory(pFrameManager);\r
-                       if(!thread_.joinable())\r
-                               thread_ = boost::thread([=]{run();});\r
-               }\r
-               catch(std::exception& ex)\r
-               {\r
-                       LOG << "FFMPEGProducer::Initialize Exception what: " << ex.what();\r
-                       return false;\r
-               }\r
-               catch(...)\r
-               {\r
-                       LOG << "FFMPEGProducer::Initialize Exception";\r
-                       return false;\r
-               }\r
-\r
-               return true;\r
-       }\r
-\r
-       void SetLoop(bool value)\r
-       {\r
-               loop_ = value;\r
-               if(input_)\r
-                       input_->set_loop(value);\r
-       }\r
-       \r
-       FrameBuffer& GetFrameBuffer()\r
-       {\r
-               return frameBuffer_;\r
-       }\r
-\r
-       bool GetProducerInfo(MediaProducerInfo* pInfo) \r
-       {\r
-               if(pInfo == nullptr)\r
-                       return false;\r
-               \r
-               pInfo->HaveVideo = input_->get_video_codec_context() != nullptr;\r
-               pInfo->HaveAudio = input_->get_audio_codec_context() != nullptr;\r
-               if(pInfo->HaveAudio)\r
-               {\r
-                       pInfo->AudioChannels = input_->get_audio_codec_context()->channels;\r
-                       pInfo->AudioSamplesPerSec = input_->get_audio_codec_context()->sample_rate;\r
-                       pInfo->BitsPerAudioSample = 16;\r
-               }\r
-\r
-               return true;\r
-       }\r
-\r
-       void run()\r
-       {\r
-               Win32Exception::InstallHandler();\r
-               LOG << "Started FFMPEGProducer thread";\r
-\r
-               try\r
-               {\r
-                       while(!input_->is_eof() && WaitForSingleObject(frameBuffer_.GetWriteWaitHandle(), INFINITE) == WAIT_OBJECT_0)                   \r
-                               frameBuffer_.push_back(get_frame());                    \r
-               }\r
-               catch(std::exception& ex)\r
-               {\r
-                       LOG << "Exception in FFMPEGProducer thread. Message:" << ex.what();\r
-               }\r
-               catch(...)\r
-               {\r
-                       LOG << "Exception in FFMPEGProducer thread";\r
-               }\r
-\r
-               frameBuffer_.push_back(nullptr);\r
-               \r
-               LOG << "Ended FFMPEGProducer thread";\r
-       }\r
-\r
-       boost::thread thread_;\r
-                       \r
-       bool loop_;\r
-       bool has_audio_;\r
-\r
-       // Filter 1 : Input\r
-       input_uptr                                              input_;         \r
-\r
-       // Filter 2 : Video Decoding and Scaling\r
-       video_decoder                                   video_decoder_;\r
-       video_transformer                               video_transformer_;\r
-       std::deque<FramePtr>                    video_frame_channel_;\r
-       \r
-       // Filter 3 : Audio Decoding\r
-       audio_decoder                                                   audio_decoder_;\r
-       std::deque<audio::AudioDataChunkPtr>    audio_chunk_channel_;\r
-\r
-       // Filter 4 : Merge Video and Audio\r
-       std::queue<FramePtr>                    ouput_channel_;\r
-       \r
-       std::wstring                                    filename_;\r
-\r
-       MotionFrameBuffer                               frameBuffer_;\r
-};\r
-\r
-FFMPEGProducer::FFMPEGProducer(const tstring& filename) : pImpl_(new Implementation(filename))\r
-{\r
-}\r
-\r
-IMediaController* FFMPEGProducer::QueryController(const tstring& id)\r
-{\r
-       return id == TEXT("FrameController") ? pImpl_.get() : nullptr;\r
-}\r
-\r
-bool FFMPEGProducer::GetProducerInfo(MediaProducerInfo* pInfo)\r
-{\r
-       return pImpl_->GetProducerInfo(pInfo);\r
-}\r
-\r
-void FFMPEGProducer::SetLoop(bool loop)\r
-{\r
-       pImpl_->SetLoop(loop);\r
-}\r
-\r
-}}
\ No newline at end of file
diff --git a/server/producers/ffmpeg/ffmpeg_producer.h b/server/producers/ffmpeg/ffmpeg_producer.h
deleted file mode 100644 (file)
index 278eedf..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#pragma once\r
-\r
-#include <string>\r
-#include <vector>\r
-\r
-#include "../../MediaProducer.h"\r
-#include "../../MediaManager.h"\r
-#include "../../MediaProducerInfo.h"\r
-\r
-namespace caspar { namespace ffmpeg {\r
-       \r
-class FFMPEGProducer : public MediaProducer\r
-{\r
-public:\r
-       FFMPEGProducer(const tstring& filename);\r
-       \r
-       IMediaController* QueryController(const tstring&);\r
-       bool GetProducerInfo(MediaProducerInfo* pInfo);\r
-\r
-       void SetLoop(bool loop);\r
-\r
-       static const size_t MAX_TOKENS = 5;\r
-       static const size_t MIN_BUFFER_SIZE = 2;\r
-       static const size_t DEFAULT_BUFFER_SIZE = 16;\r
-       static const size_t MAX_BUFFER_SIZE = 64;\r
-       static const size_t LOAD_TARGET_BUFFER_SIZE = 8;\r
-       static const size_t THREAD_TIMEOUT_MS = 1000;\r
-\r
-private:       \r
-       struct Implementation;\r
-       std::shared_ptr<Implementation> pImpl_;\r
-};\r
-typedef std::tr1::shared_ptr<FFMPEGProducer> FFMPEGProducerPtr;\r
-}}
\ No newline at end of file
diff --git a/server/producers/ffmpeg/ffmpegmanager.h b/server/producers/ffmpeg/ffmpegmanager.h
deleted file mode 100644 (file)
index 1d1f4f4..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-#pragma once\r
-\r
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include <queue>\r
-\r
-#include "..\..\MediaProducer.h"\r
-#include "..\..\MediaManager.h"\r
-\r
-namespace caspar {\r
-namespace ffmpeg {\r
-\r
-class FFMPEGManager : public IMediaManager\r
-{\r
-public:\r
-       FFMPEGManager();\r
-\r
-       MediaProducerPtr CreateProducer(const tstring& filename);\r
-       bool getFileInfo(FileInfo* pFileInfo);\r
-};\r
-\r
-}      //namespace ffmpeg\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/producers/ffmpeg/input.cpp b/server/producers/ffmpeg/input.cpp
deleted file mode 100644 (file)
index aa046ab..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-#include "..\..\stdafx.h"\r
-\r
-#include "input.h"\r
-\r
-#include "../../utils/Win32Exception.h"\r
-\r
-\r
-#include <tbb/concurrent_queue.h>\r
-\r
-#include <boost/thread.hpp>\r
-#include <boost/thread/condition_variable.hpp>\r
-#include <boost/thread/mutex.hpp>\r
-\r
-#include <errno.h>\r
-#include <system_error>\r
-\r
-#pragma warning(disable : 4482)\r
-               \r
-namespace caspar{ namespace ffmpeg{\r
-               \r
-struct input::implementation : boost::noncopyable\r
-{\r
-       implementation() \r
-               : video_frame_rate_(25.0), video_s_index_(-1), audio_s_index_(-1), video_codec_(nullptr), audio_codec_a(nullptr)\r
-       {\r
-               loop_ = false;\r
-               file_buffer_size_ = 0;\r
-       }\r
-\r
-       ~implementation()\r
-       {               \r
-               stop();\r
-       }\r
-       \r
-       void stop()\r
-       {\r
-               is_running_ = false;\r
-               video_packet_buffer_.clear();\r
-               audio_packet_buffer_.clear();\r
-               file_buffer_size_cond_.notify_all();\r
-               packet_wait_cond_.notify_all();\r
-               io_thread_.join();\r
-       }\r
-\r
-       void load(const std::string& filename)\r
-       {       \r
-               try\r
-               {\r
-                       int errn;\r
-                       AVFormatContext* weak_format_context;\r
-                       if((errn = -av_open_input_file(&weak_format_context, filename.c_str(), nullptr, 0, nullptr)) > 0)\r
-                               throw std::runtime_error("File read error");\r
-                       format_context.reset(weak_format_context, av_close_input_file);\r
-                       \r
-                       if((errn = -av_find_stream_info(format_context.get())) > 0)\r
-                               throw std::runtime_error("File read error");\r
-\r
-                       video_codec_context_ = open_video_stream();\r
-                       if(!video_codec_context_)\r
-                               LOG << "No video stream found.";\r
-               \r
-                       audio_codex_context = open_audio_stream();\r
-                       if(!audio_codex_context)\r
-                               LOG << "No audio stream found.";\r
-\r
-                       if(!video_codec_context_ && !audio_codex_context)\r
-                               throw std::runtime_error("No video or audio codec found.");\r
-                       \r
-                       video_frame_rate_ = static_cast<double>(video_codec_context_->time_base.den) / static_cast<double>(video_codec_context_->time_base.num);\r
-                       \r
-                       is_running_ = true;\r
-                       io_thread_ = boost::thread([=]{read_file();});\r
-               }\r
-               catch(...)\r
-               {\r
-                       video_codec_context_.reset();\r
-                       audio_codex_context.reset();\r
-                       format_context.reset();\r
-                       video_frame_rate_ = 25.0;\r
-                       video_s_index_ = -1;\r
-                       audio_s_index_ = -1;    \r
-                       throw;\r
-               }\r
-               filename_ = filename;\r
-       }\r
-                       \r
-       std::shared_ptr<AVCodecContext> open_video_stream()\r
-       {               \r
-               AVStream** streams_end = format_context->streams+format_context->nb_streams;\r
-               AVStream** video_stream = std::find_if(format_context->streams, streams_end, \r
-                       [](AVStream* stream) { return stream != nullptr && stream->codec->codec_type == CODEC_TYPE_VIDEO ;});\r
-\r
-               video_s_index_ = video_stream != streams_end ? (*video_stream)->index : -1;\r
-               if(video_s_index_ == -1) \r
-                       return nullptr;\r
-               \r
-               video_codec_ = avcodec_find_decoder((*video_stream)->codec->codec_id);                  \r
-               if(video_codec_ == nullptr)\r
-                       return nullptr;\r
-                       \r
-               if((-avcodec_open((*video_stream)->codec, video_codec_)) > 0)           \r
-                       return nullptr;\r
-\r
-               return std::shared_ptr<AVCodecContext>((*video_stream)->codec, avcodec_close);\r
-       }\r
-\r
-       std::shared_ptr<AVCodecContext> open_audio_stream()\r
-       {       \r
-               AVStream** streams_end = format_context->streams+format_context->nb_streams;\r
-               AVStream** audio_stream = std::find_if(format_context->streams, streams_end, \r
-                       [](AVStream* stream) { return stream != nullptr && stream->codec->codec_type == CODEC_TYPE_AUDIO;});\r
-\r
-               audio_s_index_ = audio_stream != streams_end ? (*audio_stream)->index : -1;\r
-               if(audio_s_index_ == -1)\r
-                       return nullptr;\r
-               \r
-               audio_codec_a = avcodec_find_decoder((*audio_stream)->codec->codec_id);\r
-               if(audio_codec_a == nullptr)\r
-                       return nullptr;\r
-\r
-               if((-avcodec_open((*audio_stream)->codec, audio_codec_a)) > 0)          \r
-                       return nullptr;\r
-\r
-               return std::shared_ptr<AVCodecContext>((*audio_stream)->codec, avcodec_close);\r
-       }       \r
-\r
-       void read_file()\r
-       {       \r
-               LOG << "Started ffmpeg_producer::read_file Thread for " << filename_.c_str();\r
-               Win32Exception::InstallHandler();\r
-\r
-               while(is_running_)\r
-               {\r
-                       AVPacket packet;                \r
-\r
-                       if (av_read_frame(format_context.get(), &packet) >= 0) // NOTE: Packet is only valid until next call of av_read_frame or av_close_input_file\r
-                       {\r
-                               if(packet.stream_index == video_s_index_)               \r
-                               {\r
-                                       video_packet_buffer_.push(std::make_shared<video_packet>(packet, nullptr, video_codec_context_.get(), video_codec_)); // NOTE: video_packet makes a copy of AVPacket\r
-                                       file_buffer_size_ += packet.size;\r
-                                       packet_wait_cond_.notify_all();\r
-                               }\r
-                               else if(packet.stream_index == audio_s_index_)  \r
-                               {\r
-                                       audio_packet_buffer_.push(std::make_shared<audio_packet>(packet, audio_codex_context.get(), audio_codec_a, video_frame_rate_));         \r
-                                       file_buffer_size_ += packet.size;\r
-                                       packet_wait_cond_.notify_all();\r
-                               }\r
-                       }\r
-                       else if(!loop_ || av_seek_frame(format_context.get(), -1, 0, AVSEEK_FLAG_BACKWARD) < 0) // TODO: av_seek_frame does not work for all formats\r
-                               is_running_ = false;\r
-                       \r
-                       av_free_packet(&packet);\r
-\r
-                       boost::unique_lock<boost::mutex> lock(file_buffer_size_mutex_);\r
-                       while(is_running_ && file_buffer_size_ > input::FILE_BUFFER_SIZE)                       \r
-                               file_buffer_size_cond_.wait(lock);              \r
-\r
-                       boost::this_thread::yield();\r
-               }\r
-               \r
-               is_running_ = false;\r
-               \r
-               LOG << " Ended ffmpeg_producer::read_file Thread for " << filename_.c_str();\r
-       }\r
-       \r
-       video_packet_ptr get_video_packet()\r
-       {\r
-               video_packet_ptr video_packet;\r
-               if(video_packet_buffer_.try_pop(video_packet))\r
-               {\r
-                       file_buffer_size_ -= video_packet->size;\r
-                       file_buffer_size_cond_.notify_all();\r
-               }\r
-               return video_packet;\r
-       }\r
-\r
-       audio_packet_ptr get_audio_packet()\r
-       {\r
-               audio_packet_ptr audio_packet;\r
-               if(audio_packet_buffer_.try_pop(audio_packet))\r
-               {\r
-                       file_buffer_size_ -= audio_packet->size;\r
-                       file_buffer_size_cond_.notify_all();\r
-               }\r
-               return audio_packet;\r
-       }\r
-\r
-       bool is_eof() const\r
-       {\r
-               return !is_running_ && video_packet_buffer_.empty() && audio_packet_buffer_.empty();\r
-       }\r
-\r
-       void wait_for_packet()\r
-       {\r
-               boost::unique_lock<boost::mutex> lock(packet_wait_mutex_);\r
-               while(is_running_ && video_packet_buffer_.empty() && audio_packet_buffer_.empty())\r
-                       packet_wait_cond_.wait(lock);           \r
-       }\r
-       \r
-       int                                                                     file_buffer_max_size_;\r
-       tbb::atomic<int>                                        file_buffer_size_;\r
-       boost::condition_variable                       file_buffer_size_cond_;\r
-       boost::mutex                                            file_buffer_size_mutex_;\r
-       \r
-       boost::condition_variable                       packet_wait_cond_;\r
-       boost::mutex                                            packet_wait_mutex_;\r
-\r
-\r
-       std::string                                                     filename_;\r
-       std::shared_ptr<AVFormatContext>        format_context; // Destroy this last\r
-\r
-       std::shared_ptr<AVCodecContext>         video_codec_context_;\r
-       AVCodec*                                                        video_codec_;\r
-\r
-       std::shared_ptr<AVCodecContext>         audio_codex_context;\r
-       AVCodec*                                                        audio_codec_a;\r
-\r
-       tbb::atomic<bool>                                       loop_;\r
-       int                                                                     video_s_index_;\r
-       int                                                                     audio_s_index_;\r
-       \r
-       tbb::concurrent_bounded_queue<video_packet_ptr> video_packet_buffer_;\r
-       tbb::concurrent_bounded_queue<audio_packet_ptr> audio_packet_buffer_;\r
-       boost::thread   io_thread_;\r
-       tbb::atomic<bool> is_running_;\r
-\r
-       double video_frame_rate_;\r
-};\r
-\r
-input::input() : impl_(new implementation()){}\r
-void input::load(const std::string& filename){impl_->load(filename);}\r
-void input::set_loop(bool value){impl_->loop_ = value;}\r
-const std::shared_ptr<AVCodecContext>& input::get_video_codec_context() const{return impl_->video_codec_context_;}\r
-const std::shared_ptr<AVCodecContext>& input::get_audio_codec_context() const{return impl_->audio_codex_context;}\r
-bool input::is_eof() const{return impl_->is_eof();}\r
-video_packet_ptr input::get_video_packet(){return impl_->get_video_packet();}\r
-audio_packet_ptr input::get_audio_packet(){return impl_->get_audio_packet();}\r
-void input::stop(){impl_->stop();}\r
-void input::wait_for_packet(){impl_->wait_for_packet();}\r
-}}
\ No newline at end of file
diff --git a/server/producers/ffmpeg/input.h b/server/producers/ffmpeg/input.h
deleted file mode 100644 (file)
index 948df53..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-#pragma once\r
-\r
-#include "packet.h"\r
-\r
-#include <system_error>\r
-\r
-namespace caspar{ namespace ffmpeg{    \r
-       \r
-typedef std::shared_ptr<AVFormatContext> AVFormatContextPtr;\r
-\r
-class input : boost::noncopyable\r
-{\r
-public:\r
-       input();\r
-       void load(const std::string& filename);\r
-       const std::shared_ptr<AVCodecContext>& get_video_codec_context() const;\r
-       const std::shared_ptr<AVCodecContext>& get_audio_codec_context() const;\r
-\r
-       video_packet_ptr get_video_packet();\r
-       audio_packet_ptr get_audio_packet();\r
-       void wait_for_packet();\r
-\r
-       bool is_eof() const;\r
-       void set_loop(bool value);\r
-       void stop();\r
-\r
-       static const int FILE_BUFFER_SIZE = 2 << 27;\r
-private:\r
-       struct implementation;\r
-       std::shared_ptr<implementation> impl_;\r
-};\r
-typedef std::shared_ptr<input> input_ptr;\r
-typedef std::unique_ptr<input> input_uptr;\r
-\r
-       }\r
-}\r
diff --git a/server/producers/ffmpeg/packet.h b/server/producers/ffmpeg/packet.h
deleted file mode 100644 (file)
index 2bc7481..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-#pragma once\r
-\r
-#include "../../frame/Frame.h"\r
-#include "../../audio/AudioManager.h"\r
-\r
-#include <tbb/scalable_allocator.h>\r
-#include <type_traits>\r
-\r
-#include <boost/noncopyable.hpp>\r
-\r
-#if defined(_MSC_VER)\r
-#pragma warning (push)\r
-#pragma warning (disable : 4244)\r
-#endif\r
-extern "C" \r
-{\r
-       #define __STDC_CONSTANT_MACROS\r
-       #define __STDC_LIMIT_MACROS\r
-       #include <libavformat/avformat.h>\r
-}\r
-#if defined(_MSC_VER)\r
-#pragma warning (pop)\r
-#endif\r
-\r
-namespace caspar{ namespace ffmpeg{\r
-\r
-typedef std::tr1::shared_ptr<AVFrame> AVFramePtr;      \r
-typedef std::tr1::shared_ptr<AVPacket> AVPacketPtr;\r
-\r
-struct video_packet : boost::noncopyable\r
-{\r
-       video_packet(const AVPacket& packet, FramePtr&& frame, AVCodecContext* codec_context, AVCodec* codec) \r
-               :  size(packet.size), codec_context(codec_context), codec(codec), frame(std::move(frame)), \r
-                       data(packet.size), decoded_frame(avcodec_alloc_frame(), av_free)\r
-       {\r
-               memcpy(data.data(), packet.data, packet.size);\r
-       }\r
-                       \r
-       const size_t                                    size;\r
-       std::vector<uint8_t>                    data;\r
-       AVCodecContext* const                   codec_context;\r
-       const AVCodec* const                    codec;\r
-       FramePtr                                                frame;\r
-       AVFramePtr                                              decoded_frame;\r
-};     \r
-typedef std::shared_ptr<video_packet> video_packet_ptr;\r
-\r
-struct audio_packet : boost::noncopyable\r
-{\r
-       audio_packet(const AVPacket& packet, AVCodecContext* codec_context, AVCodec* codec, double frame_rate = 25.0) \r
-               : \r
-               size(packet.size), \r
-               codec_context(codec_context), \r
-               codec(codec),\r
-               data(packet.size)\r
-       {\r
-               memcpy(data.data(), packet.data, packet.size);\r
-\r
-               size_t bytesPerSec = (codec_context->sample_rate * codec_context->channels * 2);\r
-\r
-               audio_frame_size = bytesPerSec / 25;\r
-               src_audio_frame_size = static_cast<size_t>(static_cast<double>(bytesPerSec) / frame_rate);\r
-\r
-               //make sure the framesize is a multiple of the samplesize\r
-               int sourceSizeMod = src_audio_frame_size % (codec_context->channels * 2);\r
-               if(sourceSizeMod != 0)\r
-                       src_audio_frame_size += (codec_context->channels * 2) - sourceSizeMod;\r
-       }\r
-                               \r
-       size_t                                  src_audio_frame_size;\r
-       size_t                                  audio_frame_size;\r
-\r
-       AVCodecContext* const   codec_context;\r
-       const AVCodec* const    codec;\r
-       const size_t                    size;\r
-       std::vector<uint8_t>    data;\r
-\r
-       std::vector<audio::AudioDataChunkPtr> audio_chunks;\r
-};\r
-typedef std::shared_ptr<audio_packet> audio_packet_ptr;\r
-\r
-       }\r
-}\r
diff --git a/server/producers/ffmpeg/video/video_decoder.cpp b/server/producers/ffmpeg/video/video_decoder.cpp
deleted file mode 100644 (file)
index 6f48f1a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#include "../../../stdafx.h"\r
-\r
-#include "video_decoder.h"\r
-               \r
-namespace caspar{ namespace ffmpeg{\r
-\r
-struct video_decoder::implementation : boost::noncopyable\r
-{\r
-       video_packet_ptr execute(const video_packet_ptr& video_packet)\r
-       {                               \r
-               int frame_finished = 0;\r
-               int result = avcodec_decode_video(video_packet->codec_context, video_packet->decoded_frame.get(), &frame_finished, video_packet->data.data(), video_packet->size);      \r
-\r
-               return result >= 0 ? video_packet : nullptr;            \r
-       }\r
-};\r
-\r
-video_decoder::video_decoder() : impl_(new implementation()){}\r
-video_packet_ptr video_decoder::execute(const video_packet_ptr& video_packet){return impl_->execute(video_packet);}\r
-}}
\ No newline at end of file
diff --git a/server/producers/ffmpeg/video/video_decoder.h b/server/producers/ffmpeg/video/video_decoder.h
deleted file mode 100644 (file)
index 303a6f5..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-#pragma once\r
-\r
-#include "../packet.h"\r
-\r
-namespace caspar{ namespace ffmpeg{\r
-\r
-typedef std::tr1::shared_ptr<AVCodecContext> AVCodecContextPtr;\r
-\r
-class video_decoder : boost::noncopyable\r
-{\r
-public:\r
-       video_decoder();\r
-       video_packet_ptr execute(const video_packet_ptr& video_packet);\r
-private:\r
-       struct implementation;\r
-       std::shared_ptr<implementation> impl_;\r
-};\r
-typedef std::shared_ptr<video_decoder> video_decoder_ptr;\r
-typedef std::unique_ptr<video_decoder> video_decoder_uptr;\r
-\r
-       }\r
-}
\ No newline at end of file
diff --git a/server/producers/ffmpeg/video/video_transformer.cpp b/server/producers/ffmpeg/video/video_transformer.cpp
deleted file mode 100644 (file)
index 98ed33d..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-#include "../../../stdafx.h"\r
-\r
-#include "video_transformer.h"\r
-\r
-#include "../../../utils/image/Image.hpp"\r
-\r
-#include <tbb/parallel_for.h>\r
-#include <tbb/atomic.h>\r
-#include <tbb/mutex.h>\r
-#include <tbb/concurrent_queue.h>\r
-#include <tbb/scalable_allocator.h>\r
-\r
-#if defined(_MSC_VER)\r
-#pragma warning (push)\r
-#pragma warning (disable : 4244)\r
-#endif\r
-extern "C" \r
-{\r
-       #define __STDC_CONSTANT_MACROS\r
-       #define __STDC_LIMIT_MACROS\r
-       #include <libswscale/swscale.h>\r
-}\r
-#if defined(_MSC_VER)\r
-#pragma warning (pop)\r
-#endif\r
-\r
-namespace caspar { namespace ffmpeg {\r
-       \r
-struct fill_frame\r
-{\r
-       fill_frame(size_t width, size_t height) \r
-               : frame(avcodec_alloc_frame(), av_free), buffer(static_cast<unsigned char*>(scalable_aligned_malloc(width*height*4, 16)), scalable_aligned_free)\r
-       {       \r
-               avpicture_fill(reinterpret_cast<AVPicture*>(frame.get()), buffer.get(), PIX_FMT_BGRA, width, height);\r
-       }\r
-       const AVFramePtr        frame;\r
-       const std::shared_ptr<unsigned char>            buffer;\r
-};\r
-typedef std::shared_ptr<fill_frame> fill_frame_ptr;\r
-\r
-struct video_transformer::implementation : boost::noncopyable\r
-{\r
-       video_packet_ptr execute(const video_packet_ptr video_packet)\r
-       {                               \r
-               assert(video_packet);\r
-\r
-               size_t width = video_packet->codec_context->width;\r
-               size_t height = video_packet->codec_context->height;\r
-               PixelFormat src_pix_fmt = video_packet->codec_context->pix_fmt;\r
-               PixelFormat dest_pix_fmt = PIX_FMT_BGRA;// PIX_FMT_YUVA420P; // PIX_FMT_BGRA;// \r
-\r
-               if(!sws_context_)\r
-                       sws_context_.reset(sws_getContext(width, height, src_pix_fmt, factory_->GetFrameFormatDescription().width, factory_->GetFrameFormatDescription().height, dest_pix_fmt, SWS_FAST_BILINEAR, nullptr, nullptr, nullptr), sws_freeContext);\r
-                               \r
-               size_t size = size = avpicture_get_size(dest_pix_fmt, width, height);\r
-\r
-               {\r
-                       tbb::spin_mutex::scoped_lock lock(mutex_);\r
-                       video_packet->frame = factory_->CreateFrame(); \r
-               }\r
-\r
-               fill_frame fill_frame(factory_->GetFrameFormatDescription().width, factory_->GetFrameFormatDescription().height);\r
-               int result = sws_scale(sws_context_.get(), video_packet->decoded_frame->data, video_packet->decoded_frame->linesize, 0, video_packet->codec_context->height, fill_frame.frame->data, fill_frame.frame->linesize);\r
-               video_packet->decoded_frame.reset(); // Free memory\r
-               \r
-               if(video_packet->codec->id == CODEC_ID_DVVIDEO) // Move up one field\r
-               {\r
-                       size_t size = factory_->GetFrameFormatDescription().width * factory_->GetFrameFormatDescription().height * 4;\r
-                       size_t linesize = factory_->GetFrameFormatDescription().width * 4;\r
-                       utils::image::Copy(video_packet->frame->GetDataPtr(), fill_frame.buffer.get() + linesize, size - linesize);\r
-                       utils::image::Clear(video_packet->frame->GetDataPtr() + size - linesize, linesize);\r
-               }\r
-               else\r
-               {\r
-                        // This copy should be unnecessary. But it seems that when mapping the frame memory to an avframe for scaling there are some artifacts in the picture. See line 59-61.\r
-                       utils::image::Copy(video_packet->frame->GetDataPtr(), fill_frame.buffer.get(), video_packet->frame->GetDataSize());\r
-               }\r
-               \r
-               return video_packet;    \r
-       }\r
-\r
-       void set_factory(const FrameManagerPtr& factory)\r
-       {\r
-               tbb::spin_mutex::scoped_lock lock(mutex_);\r
-               factory_ = factory;\r
-       }\r
-\r
-       tbb::spin_mutex mutex_;\r
-       FrameManagerPtr factory_;\r
-       std::shared_ptr<SwsContext> sws_context_;\r
-};\r
-\r
-video_transformer::video_transformer() : impl_(new implementation()){}\r
-video_packet_ptr video_transformer::execute(const video_packet_ptr& video_packet){return impl_->execute(video_packet);}\r
-void video_transformer::set_factory(const FrameManagerPtr& factory){ impl_->set_factory(factory); }\r
-}}
\ No newline at end of file
diff --git a/server/producers/ffmpeg/video/video_transformer.h b/server/producers/ffmpeg/video/video_transformer.h
deleted file mode 100644 (file)
index f702e42..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#pragma once\r
-\r
-#include "../packet.h"\r
-#include "../../../frame/FrameManager.h"\r
-\r
-namespace caspar{ namespace ffmpeg{\r
-\r
-class video_transformer : boost::noncopyable\r
-{\r
-public:\r
-       video_transformer();\r
-       video_packet_ptr execute(const video_packet_ptr& video_packet);\r
-       void set_factory(const FrameManagerPtr& factory);\r
-private:\r
-       struct implementation;\r
-       std::shared_ptr<implementation> impl_;\r
-};\r
-typedef std::shared_ptr<video_transformer> video_transformer_ptr;\r
-typedef std::unique_ptr<video_transformer> video_transformer_uptr;\r
-\r
-}}
\ No newline at end of file
diff --git a/server/producers/flash/CTManager.cpp b/server/producers/flash/CTManager.cpp
deleted file mode 100644 (file)
index 860a9fe..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "..\..\frame\FrameManager.h"\r
-#include "..\..\frame\FrameMediaController.h"\r
-#include "..\..\utils\FileInputStream.h"\r
-#include "..\..\fileinfo.h"\r
-#include "CTManager.h"\r
-#include "FlashProducer.h"\r
-#include "..\..\cg\FlashCGProxy.h"\r
-\r
-namespace caspar {\r
-\r
-using namespace caspar::utils;\r
-using namespace caspar::CG;\r
-\r
-//////////////////////////////\r
-//  CTManager definition\r
-//\r
-CTManager::CTManager()\r
-{\r
-       _extensions.push_back(TEXT("ct"));\r
-}\r
-\r
-CTManager::~CTManager()\r
-{}\r
-\r
-MediaProducerPtr CTManager::CreateProducer(const tstring& filename) {\r
-       tstring fixedFilename = filename;\r
-       tstring::size_type pos = 0;\r
-       while((pos = fixedFilename.find(TEXT('\\'), pos)) != tstring::npos) {\r
-               fixedFilename[pos] = TEXT('/');\r
-       }\r
-       MediaProducerPtr result;\r
-       FlashCGProxyPtr pCGProxy(FlashCGProxy::Create());\r
-       if(pCGProxy) {\r
-               pCGProxy->Add(0, filename, 1);\r
-               result = pCGProxy->GetFlashProducer();\r
-       }\r
-\r
-       return result;\r
-}\r
-\r
-bool CTManager::getFileInfo(FileInfo* pFileInfo)\r
-{\r
-       if(pFileInfo != 0) {\r
-               pFileInfo->length = 1;\r
-               pFileInfo->type = TEXT("movie");\r
-               pFileInfo->encoding = TEXT("ct");\r
-               return true;\r
-       }\r
-       return false;\r
-}\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/producers/flash/CTManager.h b/server/producers/flash/CTManager.h
deleted file mode 100644 (file)
index 993aace..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include "..\..\frame\Frame.h"\r
-#include "..\..\MediaManager.h"\r
-\r
-namespace caspar {\r
-\r
-class FileInfo;\r
-\r
-class CTManager : public IMediaManager\r
-{\r
-public:\r
-       CTManager();\r
-       virtual ~CTManager();\r
-\r
-       virtual MediaProducerPtr CreateProducer(const tstring& filename);\r
-       virtual bool getFileInfo(FileInfo* pFileInfo);\r
-};\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/producers/flash/Flash9e.IDL b/server/producers/flash/Flash9e.IDL
deleted file mode 100644 (file)
index c85a3bb..0000000
+++ /dev/null
@@ -1,367 +0,0 @@
-// Generated .IDL file (by the OLE/COM Object Viewer)\r
-// \r
-// typelib filename: Flash9e.ocx\r
-\r
-[\r
-  uuid(D27CDB6B-AE6D-11CF-96B8-444553540000),\r
-  version(1.0),\r
-  helpstring("Shockwave Flash"),\r
-  custom(DE77BA64-517C-11D1-A2DA-0000F8773CE9, 100663662),\r
-  custom(DE77BA63-517C-11D1-A2DA-0000F8773CE9, 1180654890)\r
-\r
-]\r
-library ShockwaveFlashObjects\r
-{\r
-    // TLib :     // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}\r
-    importlib("stdole2.tlb");\r
-\r
-    // Forward declare all types defined in this typelib\r
-    interface IShockwaveFlash;\r
-    dispinterface _IShockwaveFlashEvents;\r
-    interface IFlashFactory;\r
-    interface IFlashObjectInterface;\r
-    interface IDispatchEx;\r
-    interface IServiceProvider;\r
-\r
-    [\r
-      odl,\r
-      uuid(D27CDB6C-AE6D-11CF-96B8-444553540000),\r
-      helpstring("Shockwave Flash"),\r
-      dual,\r
-      oleautomation\r
-    ]\r
-    interface IShockwaveFlash : IDispatch {\r
-        [id(0xfffffdf3), propget, helpstring("property ReadyState")]\r
-        HRESULT ReadyState([out, retval] long* pVal);\r
-        [id(0x0000007c), propget, helpstring("property TotalFrames")]\r
-        HRESULT TotalFrames([out, retval] long* pVal);\r
-        [id(0x0000007d), propget, helpstring("property Playing")]\r
-        HRESULT Playing([out, retval] VARIANT_BOOL* pVal);\r
-        [id(0x0000007d), propput, helpstring("property Playing")]\r
-        HRESULT Playing([in] VARIANT_BOOL pVal);\r
-        [id(0x00000069), propget, helpstring("property Quality")]\r
-        HRESULT Quality([out, retval] int* pVal);\r
-        [id(0x00000069), propput, helpstring("property Quality")]\r
-        HRESULT Quality([in] int pVal);\r
-        [id(0x00000078), propget, helpstring("property ScaleMode")]\r
-        HRESULT ScaleMode([out, retval] int* pVal);\r
-        [id(0x00000078), propput, helpstring("property ScaleMode")]\r
-        HRESULT ScaleMode([in] int pVal);\r
-        [id(0x00000079), propget, helpstring("property AlignMode")]\r
-        HRESULT AlignMode([out, retval] int* pVal);\r
-        [id(0x00000079), propput, helpstring("property AlignMode")]\r
-        HRESULT AlignMode([in] int pVal);\r
-        [id(0x0000007b), propget, helpstring("property BackgroundColor")]\r
-        HRESULT BackgroundColor([out, retval] long* pVal);\r
-        [id(0x0000007b), propput, helpstring("property BackgroundColor")]\r
-        HRESULT BackgroundColor([in] long pVal);\r
-        [id(0x0000006a), propget, helpstring("property Loop")]\r
-        HRESULT Loop([out, retval] VARIANT_BOOL* pVal);\r
-        [id(0x0000006a), propput, helpstring("property Loop")]\r
-        HRESULT Loop([in] VARIANT_BOOL pVal);\r
-        [id(0x00000066), propget, helpstring("property Movie")]\r
-        HRESULT Movie([out, retval] BSTR* pVal);\r
-        [id(0x00000066), propput, helpstring("property Movie")]\r
-        HRESULT Movie([in] BSTR pVal);\r
-        [id(0x0000006b), propget, helpstring("property FrameNum")]\r
-        HRESULT FrameNum([out, retval] long* pVal);\r
-        [id(0x0000006b), propput, helpstring("property FrameNum")]\r
-        HRESULT FrameNum([in] long pVal);\r
-        [id(0x0000006d), helpstring("method SetZoomRect")]\r
-        HRESULT SetZoomRect(\r
-                        [in] long left, \r
-                        [in] long top, \r
-                        [in] long right, \r
-                        [in] long bottom);\r
-        [id(0x00000076), helpstring("method Zoom")]\r
-        HRESULT Zoom([in] int factor);\r
-        [id(0x00000077), helpstring("method Pan")]\r
-        HRESULT Pan(\r
-                        [in] long x, \r
-                        [in] long y, \r
-                        [in] int mode);\r
-        [id(0x00000070), helpstring("method Play")]\r
-        HRESULT Play();\r
-        [id(0x00000071), helpstring("method Stop")]\r
-        HRESULT Stop();\r
-        [id(0x00000072), helpstring("method Back")]\r
-        HRESULT Back();\r
-        [id(0x00000073), helpstring("method Forward")]\r
-        HRESULT Forward();\r
-        [id(0x00000074), helpstring("method Rewind")]\r
-        HRESULT Rewind();\r
-        [id(0x0000007e), helpstring("method StopPlay")]\r
-        HRESULT StopPlay();\r
-        [id(0x0000007f), helpstring("method GotoFrame")]\r
-        HRESULT GotoFrame([in] long FrameNum);\r
-        [id(0x00000080), helpstring("method CurrentFrame")]\r
-        HRESULT CurrentFrame([out, retval] long* FrameNum);\r
-        [id(0x00000081), helpstring("method IsPlaying")]\r
-        HRESULT IsPlaying([out, retval] VARIANT_BOOL* Playing);\r
-        [id(0x00000082), helpstring("method PercentLoaded")]\r
-        HRESULT PercentLoaded([out, retval] long* percent);\r
-        [id(0x00000083), helpstring("method FrameLoaded")]\r
-        HRESULT FrameLoaded(\r
-                        [in] long FrameNum, \r
-                        [out, retval] VARIANT_BOOL* loaded);\r
-        [id(0x00000084), helpstring("method FlashVersion")]\r
-        HRESULT FlashVersion([out, retval] long* version);\r
-        [id(0x00000085), propget, helpstring("property WMode")]\r
-        HRESULT WMode([out, retval] BSTR* pVal);\r
-        [id(0x00000085), propput, helpstring("property WMode")]\r
-        HRESULT WMode([in] BSTR pVal);\r
-        [id(0x00000086), propget, helpstring("property SAlign")]\r
-        HRESULT SAlign([out, retval] BSTR* pVal);\r
-        [id(0x00000086), propput, helpstring("property SAlign")]\r
-        HRESULT SAlign([in] BSTR pVal);\r
-        [id(0x00000087), propget, helpstring("property Menu")]\r
-        HRESULT Menu([out, retval] VARIANT_BOOL* pVal);\r
-        [id(0x00000087), propput, helpstring("property Menu")]\r
-        HRESULT Menu([in] VARIANT_BOOL pVal);\r
-        [id(0x00000088), propget, helpstring("property Base")]\r
-        HRESULT Base([out, retval] BSTR* pVal);\r
-        [id(0x00000088), propput, helpstring("property Base")]\r
-        HRESULT Base([in] BSTR pVal);\r
-        [id(0x00000089), propget, helpstring("property Scale")]\r
-        HRESULT Scale([out, retval] BSTR* pVal);\r
-        [id(0x00000089), propput, helpstring("property Scale")]\r
-        HRESULT Scale([in] BSTR pVal);\r
-        [id(0x0000008a), propget, helpstring("property DeviceFont")]\r
-        HRESULT DeviceFont([out, retval] VARIANT_BOOL* pVal);\r
-        [id(0x0000008a), propput, helpstring("property DeviceFont")]\r
-        HRESULT DeviceFont([in] VARIANT_BOOL pVal);\r
-        [id(0x0000008b), propget, helpstring("property EmbedMovie")]\r
-        HRESULT EmbedMovie([out, retval] VARIANT_BOOL* pVal);\r
-        [id(0x0000008b), propput, helpstring("property EmbedMovie")]\r
-        HRESULT EmbedMovie([in] VARIANT_BOOL pVal);\r
-        [id(0x0000008c), propget, helpstring("property BGColor")]\r
-        HRESULT BGColor([out, retval] BSTR* pVal);\r
-        [id(0x0000008c), propput, helpstring("property BGColor")]\r
-        HRESULT BGColor([in] BSTR pVal);\r
-        [id(0x0000008d), propget, helpstring("property Quality2")]\r
-        HRESULT Quality2([out, retval] BSTR* pVal);\r
-        [id(0x0000008d), propput, helpstring("property Quality2")]\r
-        HRESULT Quality2([in] BSTR pVal);\r
-        [id(0x0000008e), helpstring("method LoadMovie")]\r
-        HRESULT LoadMovie(\r
-                        [in] int layer, \r
-                        [in] BSTR url);\r
-        [id(0x0000008f), helpstring("method TGotoFrame")]\r
-        HRESULT TGotoFrame(\r
-                        [in] BSTR target, \r
-                        [in] long FrameNum);\r
-        [id(0x00000090), helpstring("method TGotoLabel")]\r
-        HRESULT TGotoLabel(\r
-                        [in] BSTR target, \r
-                        [in] BSTR label);\r
-        [id(0x00000091), helpstring("method TCurrentFrame")]\r
-        HRESULT TCurrentFrame(\r
-                        [in] BSTR target, \r
-                        [out, retval] long* FrameNum);\r
-        [id(0x00000092), helpstring("method TCurrentLabel")]\r
-        HRESULT TCurrentLabel(\r
-                        [in] BSTR target, \r
-                        [out, retval] BSTR* pVal);\r
-        [id(0x00000093), helpstring("method TPlay")]\r
-        HRESULT TPlay([in] BSTR target);\r
-        [id(0x00000094), helpstring("method TStopPlay")]\r
-        HRESULT TStopPlay([in] BSTR target);\r
-        [id(0x00000097), helpstring("method SetVariable")]\r
-        HRESULT SetVariable(\r
-                        [in] BSTR name, \r
-                        [in] BSTR value);\r
-        [id(0x00000098), helpstring("method GetVariable")]\r
-        HRESULT GetVariable(\r
-                        [in] BSTR name, \r
-                        [out, retval] BSTR* pVal);\r
-        [id(0x00000099), helpstring("method TSetProperty")]\r
-        HRESULT TSetProperty(\r
-                        [in] BSTR target, \r
-                        [in] int property, \r
-                        [in] BSTR value);\r
-        [id(0x0000009a), helpstring("method TGetProperty")]\r
-        HRESULT TGetProperty(\r
-                        [in] BSTR target, \r
-                        [in] int property, \r
-                        [out, retval] BSTR* pVal);\r
-        [id(0x0000009b), helpstring("method TCallFrame")]\r
-        HRESULT TCallFrame(\r
-                        [in] BSTR target, \r
-                        [in] int FrameNum);\r
-        [id(0x0000009c), helpstring("method TCallLabel")]\r
-        HRESULT TCallLabel(\r
-                        [in] BSTR target, \r
-                        [in] BSTR label);\r
-        [id(0x0000009d), helpstring("method TSetPropertyNum")]\r
-        HRESULT TSetPropertyNum(\r
-                        [in] BSTR target, \r
-                        [in] int property, \r
-                        [in] double value);\r
-        [id(0x0000009e), helpstring("method TGetPropertyNum")]\r
-        HRESULT TGetPropertyNum(\r
-                        [in] BSTR target, \r
-                        [in] int property, \r
-                        [out, retval] double* pVal);\r
-        [id(0x000000ac), helpstring("method TGetPropertyAsNumber")]\r
-        HRESULT TGetPropertyAsNumber(\r
-                        [in] BSTR target, \r
-                        [in] int property, \r
-                        [out, retval] double* pVal);\r
-        [id(0x0000009f), propget, helpstring("property SWRemote")]\r
-        HRESULT SWRemote([out, retval] BSTR* pVal);\r
-        [id(0x0000009f), propput, helpstring("property SWRemote")]\r
-        HRESULT SWRemote([in] BSTR pVal);\r
-        [id(0x000000aa), propget, helpstring("property FlashVars")]\r
-        HRESULT FlashVars([out, retval] BSTR* pVal);\r
-        [id(0x000000aa), propput, helpstring("property FlashVars")]\r
-        HRESULT FlashVars([in] BSTR pVal);\r
-        [id(0x000000ab), propget, helpstring("property AllowScriptAccess")]\r
-        HRESULT AllowScriptAccess([out, retval] BSTR* pVal);\r
-        [id(0x000000ab), propput, helpstring("property AllowScriptAccess")]\r
-        HRESULT AllowScriptAccess([in] BSTR pVal);\r
-        [id(0x000000be), propget, helpstring("property MovieData")]\r
-        HRESULT MovieData([out, retval] BSTR* pVal);\r
-        [id(0x000000be), propput, helpstring("property MovieData")]\r
-        HRESULT MovieData([in] BSTR pVal);\r
-        [id(0x000000bf), propget, helpstring("property inline-data")]\r
-        HRESULT InlineData([out, retval] IUnknown** ppIUnknown);\r
-        [id(0x000000bf), propput, helpstring("property inline-data")]\r
-        HRESULT InlineData([in] IUnknown* ppIUnknown);\r
-        [id(0x000000c0), propget, helpstring("property SeamlessTabbing")]\r
-        HRESULT SeamlessTabbing([out, retval] VARIANT_BOOL* pVal);\r
-        [id(0x000000c0), propput, helpstring("property SeamlessTabbing")]\r
-        HRESULT SeamlessTabbing([in] VARIANT_BOOL pVal);\r
-        [id(0x000000c1), helpstring("method EnforceLocalSecurity")]\r
-        HRESULT EnforceLocalSecurity();\r
-        [id(0x000000c2), propget, helpstring("property Profile")]\r
-        HRESULT Profile([out, retval] VARIANT_BOOL* pVal);\r
-        [id(0x000000c2), propput, helpstring("property Profile")]\r
-        HRESULT Profile([in] VARIANT_BOOL pVal);\r
-        [id(0x000000c3), propget, helpstring("property ProfileAddress")]\r
-        HRESULT ProfileAddress([out, retval] BSTR* pVal);\r
-        [id(0x000000c3), propput, helpstring("property ProfileAddress")]\r
-        HRESULT ProfileAddress([in] BSTR pVal);\r
-        [id(0x000000c4), propget, helpstring("property ProfilePort")]\r
-        HRESULT ProfilePort([out, retval] long* pVal);\r
-        [id(0x000000c4), propput, helpstring("property ProfilePort")]\r
-        HRESULT ProfilePort([in] long pVal);\r
-        [id(0x000000c6), helpstring("method Call")]\r
-        HRESULT CallFunction(\r
-                        [in] BSTR request, \r
-                        [out, retval] BSTR* response);\r
-        [id(0x000000c7), helpstring("method SetReturnValue")]\r
-        HRESULT SetReturnValue([in] BSTR returnValue);\r
-        [id(0x000000c8), helpstring("method DisableLocalSecurity")]\r
-        HRESULT DisableLocalSecurity();\r
-        [id(0x000000c9), propget, helpstring("property AllowNetworking")]\r
-        HRESULT AllowNetworking([out, retval] BSTR* pVal);\r
-        [id(0x000000c9), propput, helpstring("property AllowNetworking")]\r
-        HRESULT AllowNetworking([in] BSTR pVal);\r
-        [id(0x000000ca), propget, helpstring("property AllowFullScreen")]\r
-        HRESULT AllowFullScreen([out, retval] BSTR* pVal);\r
-        [id(0x000000ca), propput, helpstring("property AllowFullScreen")]\r
-        HRESULT AllowFullScreen([in] BSTR pVal);\r
-    };\r
-\r
-    [\r
-      uuid(D27CDB6D-AE6D-11CF-96B8-444553540000),\r
-      helpstring("Event interface for Shockwave Flash"),\r
-         hidden\r
-    ]\r
-    dispinterface _IShockwaveFlashEvents {\r
-        properties:\r
-        methods:\r
-            [id(0xfffffd9f)]\r
-            void OnReadyStateChange(long newState);\r
-            [id(0x000007a6)]\r
-            void OnProgress(long percentDone);\r
-            [id(0x00000096)]\r
-            void FSCommand(\r
-                            [in] BSTR command, \r
-                            [in] BSTR args);\r
-            [id(0x000000c5)]\r
-            void FlashCall([in] BSTR request);\r
-    };\r
-\r
-    [\r
-      uuid(D27CDB6E-AE6D-11CF-96B8-444553540000),\r
-      helpstring("Shockwave Flash")\r
-    ]\r
-    coclass ShockwaveFlash {\r
-        [default] interface IShockwaveFlash;\r
-        [default, source] dispinterface _IShockwaveFlashEvents;\r
-    };\r
-\r
-    [\r
-      odl,\r
-      uuid(D27CDB70-AE6D-11CF-96B8-444553540000),\r
-      helpstring("IFlashFactory Interface")\r
-    ]\r
-    interface IFlashFactory : IUnknown {\r
-    };\r
-\r
-    [\r
-      odl,\r
-      uuid(D27CDB72-AE6D-11CF-96B8-444553540000),\r
-      helpstring("IFlashObjectInterface Interface")\r
-    ]\r
-    interface IFlashObjectInterface : IDispatchEx {\r
-    };\r
-\r
-    [\r
-      odl,\r
-      uuid(A6EF9860-C720-11D0-9337-00A0C90DCAA9)\r
-    ]\r
-    interface IDispatchEx : IDispatch {\r
-        HRESULT _stdcall GetDispID(\r
-                        [in] BSTR bstrName, \r
-                        [in] unsigned long grfdex, \r
-                        [out] long* pid);\r
-        HRESULT _stdcall RemoteInvokeEx(\r
-                        [in] long id, \r
-                        [in] unsigned long lcid, \r
-                        [in] unsigned long dwFlags, \r
-                        [in] DISPPARAMS* pdp, \r
-                        [out] VARIANT* pvarRes, \r
-                        [out] EXCEPINFO* pei, \r
-                        [in] IServiceProvider* pspCaller, \r
-                        [in] unsigned int cvarRefArg, \r
-                        [in] unsigned int* rgiRefArg, \r
-                        [in, out] VARIANT* rgvarRefArg);\r
-        HRESULT _stdcall DeleteMemberByName(\r
-                        [in] BSTR bstrName, \r
-                        [in] unsigned long grfdex);\r
-        HRESULT _stdcall DeleteMemberByDispID([in] long id);\r
-        HRESULT _stdcall GetMemberProperties(\r
-                        [in] long id, \r
-                        [in] unsigned long grfdexFetch, \r
-                        [out] unsigned long* pgrfdex);\r
-        HRESULT _stdcall GetMemberName(\r
-                        [in] long id, \r
-                        [out] BSTR* pbstrName);\r
-        HRESULT _stdcall GetNextDispID(\r
-                        [in] unsigned long grfdex, \r
-                        [in] long id, \r
-                        [out] long* pid);\r
-        HRESULT _stdcall GetNameSpaceParent([out] IUnknown** ppunk);\r
-    };\r
-\r
-    [\r
-      odl,\r
-      uuid(6D5140C1-7436-11CE-8034-00AA006009FA)\r
-    ]\r
-    interface IServiceProvider : IUnknown {\r
-        HRESULT _stdcall RemoteQueryService(\r
-                        [in] GUID* guidService, \r
-                        [in] GUID* riid, \r
-                        [out] IUnknown** ppvObject);\r
-    };\r
-\r
-    [\r
-      uuid(D27CDB71-AE6D-11CF-96B8-444553540000),\r
-      helpstring("IFlashObjectInterface Interface")\r
-    ]\r
-    coclass FlashObjectInterface {\r
-        [default] interface IFlashObjectInterface;\r
-    };\r
-};\r
diff --git a/server/producers/flash/Flash9e_i.c b/server/producers/flash/Flash9e_i.c
deleted file mode 100644 (file)
index 3cc610e..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-\r
-\r
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */\r
-\r
-/* link this file in with the server and any clients */\r
-\r
-\r
- /* File created by MIDL compiler version 6.00.0366 */\r
-/* at Tue Mar 18 13:05:00 2008\r
- */\r
-/* Compiler settings for .\flash\Flash9e.IDL:\r
-    Oicf, W4, Zp8, env=Win32 (32b run)\r
-    protocol : dce , ms_ext, c_ext, robust\r
-    error checks: allocation ref bounds_check enum stub_data \r
-    VC __declspec() decoration level: \r
-         __declspec(uuid()), __declspec(selectany), __declspec(novtable)\r
-         DECLSPEC_UUID(), MIDL_INTERFACE()\r
-*/\r
-//@@MIDL_FILE_HEADING(  )\r
-\r
-#pragma warning( disable: 4049 )  /* more than 64k source lines */\r
-\r
-\r
-#ifdef __cplusplus\r
-extern "C"{\r
-#endif \r
-\r
-\r
-#include <rpc.h>\r
-#include <rpcndr.h>\r
-\r
-#ifdef _MIDL_USE_GUIDDEF_\r
-\r
-#ifndef INITGUID\r
-#define INITGUID\r
-#include <guiddef.h>\r
-#undef INITGUID\r
-#else\r
-#include <guiddef.h>\r
-#endif\r
-\r
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \\r
-        DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)\r
-\r
-#else // !_MIDL_USE_GUIDDEF_\r
-\r
-#ifndef __IID_DEFINED__\r
-#define __IID_DEFINED__\r
-\r
-typedef struct _IID\r
-{\r
-    unsigned long x;\r
-    unsigned short s1;\r
-    unsigned short s2;\r
-    unsigned char  c[8];\r
-} IID;\r
-\r
-#endif // __IID_DEFINED__\r
-\r
-#ifndef CLSID_DEFINED\r
-#define CLSID_DEFINED\r
-typedef IID CLSID;\r
-#endif // CLSID_DEFINED\r
-\r
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \\r
-        const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}\r
-\r
-#endif !_MIDL_USE_GUIDDEF_\r
-\r
-MIDL_DEFINE_GUID(IID, LIBID_ShockwaveFlashObjects,0xD27CDB6B,0xAE6D,0x11CF,0x96,0xB8,0x44,0x45,0x53,0x54,0x00,0x00);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IShockwaveFlash,0xD27CDB6C,0xAE6D,0x11CF,0x96,0xB8,0x44,0x45,0x53,0x54,0x00,0x00);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, DIID__IShockwaveFlashEvents,0xD27CDB6D,0xAE6D,0x11CF,0x96,0xB8,0x44,0x45,0x53,0x54,0x00,0x00);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IFlashFactory,0xD27CDB70,0xAE6D,0x11CF,0x96,0xB8,0x44,0x45,0x53,0x54,0x00,0x00);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IDispatchEx,0xA6EF9860,0xC720,0x11D0,0x93,0x37,0x00,0xA0,0xC9,0x0D,0xCA,0xA9);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IFlashObjectInterface,0xD27CDB72,0xAE6D,0x11CF,0x96,0xB8,0x44,0x45,0x53,0x54,0x00,0x00);\r
-\r
-\r
-MIDL_DEFINE_GUID(IID, IID_IServiceProvider,0x6D5140C1,0x7436,0x11CE,0x80,0x34,0x00,0xAA,0x00,0x60,0x09,0xFA);\r
-\r
-\r
-MIDL_DEFINE_GUID(CLSID, CLSID_ShockwaveFlash,0xD27CDB6E,0xAE6D,0x11CF,0x96,0xB8,0x44,0x45,0x53,0x54,0x00,0x00);\r
-\r
-\r
-MIDL_DEFINE_GUID(CLSID, CLSID_FlashObjectInterface,0xD27CDB71,0xAE6D,0x11CF,0x96,0xB8,0x44,0x45,0x53,0x54,0x00,0x00);\r
-\r
-#undef MIDL_DEFINE_GUID\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-\r
-\r
diff --git a/server/producers/flash/FlashAxContainer.cpp b/server/producers/flash/FlashAxContainer.cpp
deleted file mode 100644 (file)
index 9f619e2..0000000
+++ /dev/null
@@ -1,835 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "FlashAxContainer.h"\r
-#include "..\..\application.h"\r
-#include "..\..\window.h"\r
-#include "..\..\monitor.h"\r
-#include "flashproducer.h"\r
-#include "TimerHelper.h"\r
-\r
-using namespace ATL;\r
-\r
-namespace caspar {\r
-namespace flash {\r
-\r
-CComBSTR FlashAxContainer::flashGUID_(_T("{D27CDB6E-AE6D-11CF-96B8-444553540000}"));\r
-\r
-_ATL_FUNC_INFO fnInfoFlashCallEvent = { CC_STDCALL, VT_EMPTY, 1, { VT_BSTR } };\r
-_ATL_FUNC_INFO fnInfoReadyStateChangeEvent = { CC_STDCALL, VT_EMPTY, 1, { VT_I4 } };\r
-\r
-FlashAxContainer::FlashAxContainer() : pFlashProducer_(0), bInPlaceActive_(FALSE), pTimerHelper(0), bInvalidRect_(false), bReadyToRender_(false), bHasNewTiming_(false)\r
-{\r
-}\r
-FlashAxContainer::~FlashAxContainer()\r
-{\r
-//     ReleaseAll();\r
-\r
-       if(pTimerHelper != 0)\r
-               delete pTimerHelper;\r
-}\r
-\r
-\r
-///////////////////\r
-// IObjectWithSite\r
-///////////////////\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::SetSite(IUnknown* pUnkSite)\r
-{\r
-       ATLTRACE(_T("IObjectWithSite::SetSite\n"));\r
-       HRESULT hr = IObjectWithSiteImpl<FlashAxContainer>::SetSite(pUnkSite);\r
-\r
-       if (SUCCEEDED(hr) && m_spUnkSite)\r
-       {\r
-               // Look for "outer" IServiceProvider\r
-               hr = m_spUnkSite->QueryInterface(__uuidof(IServiceProvider), (void**)&m_spServices);\r
-               ATLASSERT( !hr && _T("No ServiceProvider!") );\r
-       }\r
-\r
-       if (pUnkSite == NULL)\r
-               m_spServices.Release();\r
-\r
-       return hr;\r
-}\r
-\r
-///////////////////\r
-// IOleClientSite\r
-///////////////////\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::SaveObject()\r
-{\r
-       ATLTRACENOTIMPL(_T("IOleClientSite::SaveObject"));\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::GetMoniker(DWORD dwAssign, DWORD dwWhichMoniker, IMoniker** ppmk)\r
-{\r
-/*     if(*ppmk != NULL) {\r
-               if(m_spMyMoniker == NULL) {\r
-                       ATL::CComObject<MyMoniker>* pMoniker = NULL;\r
-                       HRESULT hr = ATL::CComObject<MyMoniker>::CreateInstance(&pMoniker);\r
-                       if(SUCCEEDED(hr))\r
-                               m_spMyMoniker = pMoniker;\r
-               }\r
-\r
-               if(m_spMyMoniker != NULL) {\r
-                       *ppmk = m_spMyMoniker;\r
-                       (*ppmk)->AddRef();\r
-                       return S_OK;\r
-               }\r
-       }\r
-*/     if(ppmk != NULL)\r
-               *ppmk = NULL;\r
-       return E_FAIL;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::GetContainer(IOleContainer** ppContainer)\r
-{\r
-       ATLTRACE(_T("IOleClientSite::GetContainer\n"));\r
-       (*ppContainer) = NULL;\r
-       return E_NOINTERFACE;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::ShowObject()\r
-{\r
-       ATLTRACE(_T("IOleClientSite::ShowObject\n"));\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::OnShowWindow(BOOL fShow)\r
-{\r
-       ATLTRACE(_T("IOleClientSite::OnShowWindow"));\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::RequestNewObjectLayout()\r
-{\r
-       ATLTRACE(_T("IOleClientSite::RequestNewObjectLayout"));\r
-       return S_OK;\r
-}\r
-\r
-///////////////////\r
-// IOleInPlaceSite\r
-///////////////////\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::GetWindow(HWND* pHwnd)\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSite::GetWindow\n"));\r
-       (*pHwnd) = NULL;//GetApplication()->GetMainWindow()->getHwnd();\r
-       return E_FAIL;\r
-}\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::ContextSensitiveHelp(BOOL fEnterMode)\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSite::ContextSensitiveHelp"));\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::CanInPlaceActivate()\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSite::CanInPlaceActivate\n"));\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::OnInPlaceActivate()\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSite::OnInPlaceActivate"));\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::OnUIActivate()\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSite::OnUIActivate\n"));\r
-       bUIActive_ = TRUE;\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::GetWindowContext(IOleInPlaceFrame** ppFrame, IOleInPlaceUIWindow** ppDoc, LPRECT lprcPosRect, LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO pFrameInfo)\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSite::GetWindowContext\n"));\r
-       if (ppFrame != NULL)\r
-               *ppFrame = NULL;\r
-       if (ppDoc != NULL)\r
-               *ppDoc = NULL;\r
-\r
-       if (ppFrame == NULL || ppDoc == NULL || lprcPosRect == NULL || lprcClipRect == NULL)\r
-               return E_POINTER;\r
-\r
-       pFrameInfo->fMDIApp = FALSE;\r
-       pFrameInfo->haccel = NULL;\r
-       pFrameInfo->cAccelEntries = 0;\r
-       pFrameInfo->hwndFrame = NULL;\r
-\r
-       lprcPosRect->top = m_rcPos.top;\r
-       lprcPosRect->left = m_rcPos.left;\r
-       lprcPosRect->right = m_rcPos.right;\r
-       lprcPosRect->bottom = m_rcPos.bottom;\r
-\r
-       lprcClipRect->top = m_rcPos.top;\r
-       lprcClipRect->left = m_rcPos.left;\r
-       lprcClipRect->right = m_rcPos.right;\r
-       lprcClipRect->bottom = m_rcPos.bottom;\r
-\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::Scroll(SIZE scrollExtant)\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSite::Scroll"));\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::OnUIDeactivate(BOOL fUndoable)\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSite::OnUIDeactivate\n"));\r
-       bUIActive_ = FALSE;\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::OnInPlaceDeactivate()\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSite::OnInPlaceDeactivate\n"));\r
-       bInPlaceActive_ = FALSE;\r
-       m_spInPlaceObjectWindowless.Release();\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::DiscardUndoState()\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSite::DiscardUndoState"));\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::DeactivateAndUndo()\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSite::DeactivateAndUndo"));\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::OnPosRectChange(LPCRECT lprcPosRect)\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSite::OnPosRectChange"));\r
-       return S_OK;\r
-}\r
-\r
-\r
-/////////////////////\r
-// IOleInPlaceSiteEx\r
-/////////////////////\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::OnInPlaceActivateEx(BOOL* pfNoRedraw, DWORD dwFlags)\r
-{\r
-       // should only be called once the first time control is inplace-activated\r
-       ATLTRACE(_T("IOleInPlaceSiteEx::OnInPlaceActivateEx\n"));\r
-       ATLASSERT(bInPlaceActive_ == FALSE);\r
-       ATLASSERT(m_spInPlaceObjectWindowless == NULL);\r
-\r
-       bInPlaceActive_ = TRUE;\r
-       OleLockRunning(m_spOleObject, TRUE, FALSE);\r
-       HRESULT hr = E_FAIL;\r
-       if (dwFlags & ACTIVATE_WINDOWLESS)\r
-       {\r
-               hr = m_spOleObject->QueryInterface(__uuidof(IOleInPlaceObjectWindowless), (void**) &m_spInPlaceObjectWindowless);\r
-\r
-               if (m_spInPlaceObjectWindowless != NULL)\r
-                       m_spInPlaceObjectWindowless->SetObjectRects(&m_rcPos, &m_rcPos);\r
-       }\r
-\r
-       return (m_spInPlaceObjectWindowless != NULL) ? S_OK : E_FAIL;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::OnInPlaceDeactivateEx(BOOL fNoRedraw)\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSiteEx::OnInPlaceDeactivateEx\n"));\r
-       bInPlaceActive_ = FALSE;\r
-       m_spInPlaceObjectWindowless.Release();\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::RequestUIActivate()\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSiteEx::RequestUIActivate\n"));\r
-       return S_OK;\r
-}\r
-\r
-\r
-/////////////////////////////\r
-// IOleInPlaceSiteWindowless\r
-/////////////////////////////\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::CanWindowlessActivate()\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSiteWindowless::CanWindowlessActivate\n"));\r
-       return S_OK;\r
-//     return S_FALSE;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::GetCapture()\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSiteWindowless::GetCapture\n"));\r
-       return bCapture_ ? S_OK : S_FALSE;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::SetCapture(BOOL fCapture)\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSiteWindowless::SetCapture\n"));\r
-       bCapture_ = fCapture;\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::GetFocus()\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSiteWindowless::GetFocus\n"));\r
-       return bHaveFocus_ ? S_OK : S_FALSE;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::SetFocus(BOOL fGotFocus)\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSiteWindowless::SetFocus\n"));\r
-       bHaveFocus_ = fGotFocus;\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::GetDC(LPCRECT pRect, DWORD grfFlags, HDC* phDC)\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSiteWindowless::GetDC"));\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::ReleaseDC(HDC hDC)\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSiteWindowless::ReleaseDC"));\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::InvalidateRect(LPCRECT pRect, BOOL fErase)\r
-{\r
-//     ATLTRACE(_T("IOleInPlaceSiteWindowless::InvalidateRect\n"));\r
-       \r
-       bInvalidRect_ = true;\r
-\r
-/*     //Keep a list of dirty rectangles in order to be able to redraw only them\r
-       if(pRect != NULL) {\r
-               bDirtyRects_.push_back(DirtyRect(*pRect, fErase != 0));\r
-       }\r
-       else {\r
-               bDirtyRects_.push_back(DirtyRect(true));\r
-       }\r
-*/     return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::InvalidateRgn(HRGN hRGN, BOOL fErase)\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSiteWindowless::InvalidateRng\n"));\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::ScrollRect(INT dx, INT dy, LPCRECT pRectScroll, LPCRECT pRectClip)\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSiteWindowless::ScrollRect"));\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::AdjustRect(LPRECT prc)\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSiteWindowless::AdjustRect"));\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::OnDefWindowMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT* plResult)\r
-{\r
-       ATLTRACE(_T("IOleInPlaceSiteWindowless::OnDefWindowMessage"));\r
-       return S_OK;\r
-}\r
-\r
-///////////////////\r
-// IOleControlSite\r
-///////////////////\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::OnControlInfoChanged()\r
-{\r
-       ATLTRACE(_T("IOleControlSite::OnControlInfoChanged"));\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::LockInPlaceActive(BOOL fLock)\r
-{\r
-       ATLTRACE(_T("IOleControlSite::LockInPlaceActive"));\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::GetExtendedControl(IDispatch** ppDisp)\r
-{\r
-       ATLTRACE(_T("IOleControlSite::GetExtendedControl"));\r
-\r
-       if (ppDisp == NULL)\r
-               return E_POINTER;\r
-       return m_spOleObject.QueryInterface(ppDisp);\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::TransformCoords(POINTL* pPtlHimetric, POINTF* pPtfContainer, DWORD dwFlags)\r
-{\r
-       ATLTRACE(_T("IOleControlSite::TransformCoords"));\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::TranslateAccelerator(LPMSG lpMsg, DWORD grfModifiers)\r
-{\r
-       ATLTRACE(_T("IOleControlSite::TranslateAccelerator"));\r
-       return S_FALSE;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::OnFocus(BOOL fGotFocus)\r
-{\r
-       bHaveFocus_ = fGotFocus;\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::ShowPropertyFrame()\r
-{\r
-       ATLTRACE(_T("IOleControlSite::ShowPropertyFrame"));\r
-       return S_OK;\r
-}\r
-\r
-\r
-///////////////////\r
-// IAdviseSink\r
-///////////////////\r
-void STDMETHODCALLTYPE FlashAxContainer::OnDataChange(FORMATETC* pFormatetc, STGMEDIUM* pStgmed)\r
-{\r
-       ATLTRACE(_T("IAdviseSink::OnDataChange\n"));\r
-}\r
-\r
-void STDMETHODCALLTYPE FlashAxContainer::OnViewChange(DWORD dwAspect, LONG lindex)\r
-{\r
-       ATLTRACE(_T("IAdviseSink::OnViewChange\n"));\r
-}\r
-\r
-void STDMETHODCALLTYPE FlashAxContainer::OnRename(IMoniker* pmk)\r
-{\r
-       ATLTRACE(_T("IAdviseSink::OnRename\n"));\r
-}\r
-\r
-void STDMETHODCALLTYPE FlashAxContainer::OnSave()\r
-{\r
-       ATLTRACE(_T("IAdviseSink::OnSave\n"));\r
-}\r
-\r
-void STDMETHODCALLTYPE FlashAxContainer::OnClose()\r
-{\r
-       ATLTRACE(_T("IAdviseSink::OnClose\n"));\r
-}\r
-\r
-\r
-///////////////////\r
-// IServiceProvider\r
-///////////////////\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::QueryService( REFGUID rsid, REFIID riid, void** ppvObj) \r
-{\r
-//     ATLTRACE(_T("IServiceProvider::QueryService\n"));\r
-       //the flashcontrol asks for an interface {618F8AD4-8B7A-11D0-8FCC-00C04FD9189D}, this is IID for a DirectDraw3 object\r
-\r
-       ATLASSERT(ppvObj != NULL);\r
-       if (ppvObj == NULL)\r
-               return E_POINTER;\r
-       *ppvObj = NULL;\r
-\r
-       //TODO: The fullscreen-consumer requires that ths does NOT return an ITimerService\r
-       HRESULT hr = QueryInterface(riid, ppvObj);//E_NOINTERFACE;\r
-\r
-       return hr;\r
-}\r
-\r
-\r
-///////////////////\r
-// ITimerService\r
-///////////////////\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::CreateTimer(ITimer *pReferenceTimer, ITimer **ppNewTimer)\r
-{\r
-       ATLTRACE(_T("ITimerService::CreateTimer\n"));\r
-       if(pTimerHelper != 0)\r
-       {\r
-               delete pTimerHelper;\r
-               pTimerHelper = 0;\r
-       }\r
-       pTimerHelper = new TimerHelper();\r
-       return QueryInterface(__uuidof(ITimer), (void**) ppNewTimer);\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::GetNamedTimer(REFGUID rguidName, ITimer **ppTimer)\r
-{\r
-       ATLTRACE(_T("ITimerService::GetNamedTimer"));\r
-       if(ppTimer == NULL)\r
-               return E_POINTER;\r
-       else\r
-               *ppTimer = NULL;\r
-\r
-       return E_FAIL;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::SetNamedTimerReference(REFGUID rguidName, ITimer *pReferenceTimer)\r
-{\r
-       ATLTRACE(_T("ITimerService::SetNamedTimerReference"));\r
-       return S_OK;\r
-}\r
-\r
-///////////\r
-// ITimer\r
-///////////\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::Advise(VARIANT vtimeMin, VARIANT vtimeMax, VARIANT vtimeInterval, DWORD dwFlags, ITimerSink *pTimerSink, DWORD *pdwCookie)\r
-{\r
-       ATLTRACE(_T("Timer::Advise\n"));\r
-       if(pdwCookie == 0)\r
-               return E_POINTER;\r
-\r
-       if(pTimerHelper != 0)\r
-       {\r
-               pTimerHelper->Setup(vtimeMin.ulVal, vtimeInterval.ulVal, pTimerSink);\r
-               *pdwCookie = pTimerHelper->ID;\r
-               bHasNewTiming_ = true;\r
-\r
-               return S_OK;\r
-       }\r
-       else\r
-               return E_OUTOFMEMORY;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::Unadvise(/* [in] */ DWORD dwCookie)\r
-{\r
-       ATLTRACE(_T("Timer::Unadvice\n"));\r
-       if(pTimerHelper != 0)\r
-       {\r
-               pTimerHelper->pTimerSink = 0;\r
-               return S_OK;\r
-       }\r
-       else\r
-               return E_FAIL;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::Freeze(/* [in] */ BOOL fFreeze)\r
-{\r
-       ATLTRACE(_T("Timer::Freeze\n"));\r
-       return S_OK;\r
-}\r
-\r
-HRESULT STDMETHODCALLTYPE FlashAxContainer::GetTime(/* [out] */ VARIANT *pvtime)\r
-{\r
-       ATLTRACE(_T("Timer::GetTime\n"));\r
-       if(pvtime == 0)\r
-               return E_POINTER;\r
-\r
-//     return E_NOTIMPL;\r
-       pvtime->lVal = 0;\r
-       return S_OK;\r
-}\r
-\r
-int FlashAxContainer::GetFPS() {\r
-       if(pTimerHelper != 0 && pTimerHelper->interval > 0)\r
-               return (1000 / pTimerHelper->interval);\r
-       \r
-       return 0;\r
-}\r
-\r
-bool FlashAxContainer::IsReadyToRender() const {\r
-       return bReadyToRender_;\r
-}\r
-\r
-void FlashAxContainer::EnterFullscreen()\r
-{\r
-       if(m_spInPlaceObjectWindowless != 0)\r
-       {\r
-               HRESULT result;\r
-               m_spInPlaceObjectWindowless->OnWindowMessage(WM_LBUTTONDOWN, 0, MAKELPARAM(1, 1), &result);\r
-               m_spInPlaceObjectWindowless->OnWindowMessage(WM_LBUTTONUP, 0, MAKELPARAM(1, 1), &result);\r
-       }\r
-}\r
-\r
-void STDMETHODCALLTYPE FlashAxContainer::OnFlashCall(BSTR request)\r
-{\r
-       tstring str(request);\r
-       if(str.find(TEXT("DisplayedTemplate")) != tstring::npos)\r
-       {\r
-               ATLTRACE(_T("ShockwaveFlash::DisplayedTemplate\n"));\r
-               bReadyToRender_ = true;\r
-       }\r
-       else if(str.find(TEXT("OnCommand")) != tstring::npos) {\r
-               //this is how templatehost 1.8 reports that a command has been received\r
-               LOG << utils::LogLevel::Verbose << TEXT("TEMPLATEHOST: ") << str;\r
-               bCallSuccessful_ = true;\r
-       }\r
-       else if(str.find(TEXT("Activity")) != tstring::npos)\r
-       {\r
-               LOG << utils::LogLevel::Verbose << TEXT("TEMPLATEHOST: ") << str;\r
-\r
-               //this is how templatehost 1.7 reports that a command has been received\r
-               if(str.find(TEXT("Command recieved")) != tstring::npos)\r
-                       bCallSuccessful_ = true;\r
-\r
-               /*if(pFlashProducer_ != 0 && pFlashProducer_->pMonitor_) {\r
-                       tstring::size_type pos = str.find(TEXT('@'));\r
-                       if(pos != tstring::npos)\r
-                               pFlashProducer_->pMonitor_->Inform(str.substr(pos, str.find(TEXT('<'), pos)-pos));\r
-               }*/\r
-       }\r
-       else if(str.find(TEXT("OnNotify")) != tstring::npos)\r
-       {\r
-               LOG << utils::LogLevel::Verbose << TEXT("TEMPLATEHOST: ") << str;\r
-\r
-               //if(pFlashProducer_ != 0 && pFlashProducer_->pMonitor_) {\r
-               //      tstring::size_type pos = str.find(TEXT('@'));\r
-               //      if(pos != tstring::npos)\r
-               //              pFlashProducer_->pMonitor_->Inform(str.substr(pos, str.find(TEXT('<'), pos)-pos));\r
-               //}\r
-       }\r
-       else if(str.find(TEXT("IsEmpty")) != tstring::npos)\r
-       {\r
-               ATLTRACE(_T("ShockwaveFlash::IsEmpty\n"));\r
-               bIsEmpty_ = true;\r
-               if(pFlashProducer_ != 0 && pFlashProducer_->emptyCallback)\r
-                       pFlashProducer_->emptyCallback();\r
-       }\r
-       else if(str.find(TEXT("OnError")) != tstring::npos)\r
-       {\r
-               LOG << "FLASHERROR: " << str;\r
-       }\r
-\r
-       CComPtr<IShockwaveFlash> spFlash;\r
-       HRESULT hr = m_spOleObject->QueryInterface(__uuidof(IShockwaveFlash), (void**) &spFlash);\r
-       if(hr == S_OK && spFlash)\r
-       {\r
-               hr = spFlash->SetReturnValue(TEXT("<null/>"));\r
-       }\r
-}\r
-\r
-void STDMETHODCALLTYPE FlashAxContainer::OnReadyStateChange(long newState)\r
-{\r
-       if(newState == 4)\r
-       {\r
-               bReadyToRender_ = true;\r
-       }\r
-       else\r
-               bReadyToRender_ = false;\r
-}\r
-\r
-void FlashAxContainer::DestroyAxControl()\r
-{\r
-       GetControllingUnknown()->AddRef();\r
-\r
-       if ((!m_spViewObject) == false)\r
-               m_spViewObject->SetAdvise(DVASPECT_CONTENT, 0, NULL);\r
-\r
-       if ((!m_spOleObject) == false)\r
-       {\r
-               DispEventUnadvise(m_spOleObject, &DIID__IShockwaveFlashEvents);\r
-               m_spOleObject->Unadvise(m_dwOleObject);\r
-               m_spOleObject->Close(OLECLOSE_NOSAVE);\r
-               m_spOleObject->SetClientSite(NULL);\r
-       }\r
-\r
-       if ((!m_spUnknown) == false)\r
-       {\r
-               CComPtr<IObjectWithSite> spSite;\r
-               m_spUnknown->QueryInterface(__uuidof(IObjectWithSite), (void**)&spSite);\r
-               if (spSite != NULL)\r
-                       spSite->SetSite(NULL);\r
-       }\r
-\r
-       if ((!m_spViewObject) == false)\r
-               m_spViewObject.Release();\r
-\r
-       if ((!m_spInPlaceObjectWindowless) == false)\r
-               m_spInPlaceObjectWindowless.Release();\r
-\r
-       if ((!m_spOleObject) == false)\r
-               m_spOleObject.Release();\r
-\r
-       if ((!m_spUnknown) == false)\r
-               m_spUnknown.Release();\r
-}\r
-\r
-bool FlashAxContainer::CheckForFlashSupport()\r
-{\r
-       CLSID clsid;\r
-       return SUCCEEDED(CLSIDFromString((LPOLESTR)flashGUID_, &clsid));\r
-}\r
-\r
-HRESULT FlashAxContainer::CreateAxControl()\r
-{\r
-       CLSID clsid;\r
-       HRESULT hr = CLSIDFromString((LPOLESTR)flashGUID_, &clsid); \r
-       if(SUCCEEDED(hr))\r
-               hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, __uuidof(IUnknown), (void**)&m_spUnknown);\r
-\r
-//Start ActivateAx\r
-       if(SUCCEEDED(hr))\r
-       {\r
-               m_spUnknown->QueryInterface(__uuidof(IOleObject), (void**)&m_spOleObject);\r
-               if(m_spOleObject)\r
-               {\r
-                       m_spOleObject->GetMiscStatus(DVASPECT_CONTENT, &m_dwMiscStatus);\r
-                       if (m_dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST)\r
-                       {\r
-                               CComQIPtr<IOleClientSite> spClientSite(GetControllingUnknown());\r
-                               m_spOleObject->SetClientSite(spClientSite);\r
-                       }\r
-\r
-                       //Initialize control\r
-                       CComQIPtr<IPersistStreamInit> spPSI(m_spOleObject);\r
-                       if (spPSI)\r
-                               hr = spPSI->InitNew();\r
-\r
-                       if (FAILED(hr)) // If the initialization of the control failed...\r
-                       {\r
-                               // Clean up and return\r
-                               if (m_dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST)\r
-                                       m_spOleObject->SetClientSite(NULL);\r
-\r
-                               m_dwMiscStatus = 0;\r
-                               m_spOleObject.Release();\r
-                               m_spUnknown.Release();\r
-\r
-                               return hr;\r
-                       }\r
-                       //end Initialize object\r
-\r
-                       if (0 == (m_dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST))\r
-                       {\r
-                               CComQIPtr<IOleClientSite> spClientSite(GetControllingUnknown());\r
-                               m_spOleObject->SetClientSite(spClientSite);\r
-                       }\r
-\r
-                       CComPtr<IShockwaveFlash> spFlash;\r
-                       HRESULT hResultQuality;\r
-                       HRESULT hr2 = m_spOleObject->QueryInterface(__uuidof(IShockwaveFlash), (void**) &spFlash);\r
-                       if(hr2 == S_OK && spFlash)\r
-                       {\r
-                               spFlash->put_WMode(TEXT("Transparent"));\r
-                               //spFlash->put_WMode(TEXT("GPU"));\r
-                               hResultQuality = spFlash->put_Quality2(TEXT("Best"));\r
-                       }\r
-                       if(SUCCEEDED(DispEventAdvise(spFlash, &DIID__IShockwaveFlashEvents)))\r
-                       {\r
-                       }\r
-\r
-                       HRESULT hrView = m_spOleObject->QueryInterface(__uuidof(IViewObjectEx), (void**) &m_spViewObject);\r
-\r
-                       CComQIPtr<IAdviseSink> spAdviseSink(GetControllingUnknown());\r
-                       m_spOleObject->Advise(spAdviseSink, &m_dwOleObject);\r
-                       if (m_spViewObject)\r
-                               m_spViewObject->SetAdvise(DVASPECT_CONTENT, 0, spAdviseSink);\r
-\r
-                       if ((m_dwMiscStatus & OLEMISC_INVISIBLEATRUNTIME) == 0)\r
-                       {\r
-                               //Initialize window to some dummy size\r
-                               m_rcPos.top = 0;\r
-                               m_rcPos.left = 0;\r
-                               m_rcPos.right = 720;\r
-                               m_rcPos.bottom = 576;\r
-\r
-                               m_pxSize.cx = m_rcPos.right - m_rcPos.left;\r
-                               m_pxSize.cy = m_rcPos.bottom - m_rcPos.top;\r
-                               AtlPixelToHiMetric(&m_pxSize, &m_hmSize);\r
-                               m_spOleObject->SetExtent(DVASPECT_CONTENT, &m_hmSize);\r
-                               m_spOleObject->GetExtent(DVASPECT_CONTENT, &m_hmSize);\r
-                               AtlHiMetricToPixel(&m_hmSize, &m_pxSize);\r
-                               m_rcPos.right = m_rcPos.left + m_pxSize.cx;\r
-                               m_rcPos.bottom = m_rcPos.top + m_pxSize.cy;\r
-\r
-                               CComQIPtr<IOleClientSite> spClientSite(GetControllingUnknown());\r
-                               hr = m_spOleObject->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, spClientSite, 0, NULL, &m_rcPos);\r
-                       }\r
-               }\r
-               CComPtr<IObjectWithSite> spSite;\r
-               m_spUnknown->QueryInterface(__uuidof(IObjectWithSite), (void**)&spSite);\r
-               if (spSite != NULL)\r
-                       spSite->SetSite(GetControllingUnknown());\r
-       }\r
-//End ActivateAx\r
-\r
-//     hr = E_FAIL;\r
-       if (FAILED(hr) || m_spUnknown == NULL)\r
-       {\r
-               return E_FAIL;\r
-               // We don't have a control or something failed so release\r
-//             ReleaseAll();\r
-       }\r
-\r
-       return S_OK;\r
-}\r
-\r
-void FlashAxContainer::SetFormat(const caspar::FrameFormatDescription& fmtDesc) {\r
-       if(m_spInPlaceObjectWindowless != 0)\r
-       {\r
-               m_rcPos.top = 0;\r
-               m_rcPos.left = 0;\r
-               m_rcPos.right = fmtDesc.width;\r
-               m_rcPos.bottom = fmtDesc.height;\r
-\r
-               m_pxSize.cx = m_rcPos.right - m_rcPos.left;\r
-               m_pxSize.cy = m_rcPos.bottom - m_rcPos.top;\r
-               AtlPixelToHiMetric(&m_pxSize, &m_hmSize);\r
-               m_spOleObject->SetExtent(DVASPECT_CONTENT, &m_hmSize);\r
-               m_spOleObject->GetExtent(DVASPECT_CONTENT, &m_hmSize);\r
-               AtlHiMetricToPixel(&m_hmSize, &m_pxSize);\r
-               m_rcPos.right = m_rcPos.left + m_pxSize.cx;\r
-               m_rcPos.bottom = m_rcPos.top + m_pxSize.cy;\r
-\r
-               m_spInPlaceObjectWindowless->SetObjectRects(&m_rcPos, &m_rcPos);\r
-               bInvalidRect_ = true;\r
-       }\r
-}\r
-\r
-HRESULT FlashAxContainer::QueryControl(REFIID iid, void** ppUnk)\r
-{\r
-       ATLASSERT(ppUnk != NULL);\r
-       if (ppUnk == NULL)\r
-               return E_POINTER;\r
-       HRESULT hr;\r
-       hr = m_spOleObject->QueryInterface(iid, ppUnk);\r
-       return hr;\r
-}\r
-\r
-bool FlashAxContainer::DrawControl(HDC targetDC)\r
-{\r
-//     ATLTRACE(_T("FlashAxContainer::DrawControl\n"));\r
-       DVASPECTINFO aspectInfo = {sizeof(DVASPECTINFO), DVASPECTINFOFLAG_CANOPTIMIZE};\r
-       HRESULT hr = S_OK;\r
-\r
-       hr = m_spViewObject->Draw(DVASPECT_CONTENT, -1, &aspectInfo, NULL, NULL, targetDC, NULL, NULL, NULL, NULL); \r
-\r
-/*     const caspar::FrameFormatDescription& fmtDesc = caspar::FrameFormatDescription::FormatDescriptions[format_];\r
-\r
-       //Trying to redraw just the dirty rectangles. Doesn't seem to work when the movie uses "filters", such as glow, dropshadow etc.\r
-       std::vector<flash::DirtyRect>::iterator it = bDirtyRects_.begin();\r
-       std::vector<flash::DirtyRect>::iterator end = bDirtyRects_.end();\r
-       for(; it != end; ++it) {\r
-               flash::DirtyRect& dirtyRect = (*it);\r
-               if(dirtyRect.bWhole || dirtyRect.rect.right >= fmtDesc.width || dirtyRect.rect.bottom >= fmtDesc.height) {\r
-                       m_spInPlaceObjectWindowless->SetObjectRects(&m_rcPos, &m_rcPos);\r
-                       hr = m_spViewObject->Draw(DVASPECT_OPAQUE, -1, NULL, NULL, NULL, targetDC, NULL, NULL, NULL, NULL); \r
-                       break;\r
-               }\r
-               else {\r
-                       m_spInPlaceObjectWindowless->SetObjectRects(&m_rcPos, &(dirtyRect.rect));\r
-                       hr = m_spViewObject->Draw(DVASPECT_OPAQUE, -1, NULL, NULL, NULL, targetDC, NULL, NULL, NULL, NULL); \r
-               }\r
-       }\r
-       bDirtyRects_.clear();\r
-*/\r
-\r
-       return (hr == S_OK);\r
-}\r
-\r
-}      //namespace flash\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/producers/flash/FlashAxContainer.h b/server/producers/flash/FlashAxContainer.h
deleted file mode 100644 (file)
index 9a956ab..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _FLASHAXCONTAINER_H__\r
-#define _FLASHAXCONTAINER_H__\r
-\r
-#pragma once\r
-\r
-#include <atlbase.h>\r
-#include <atlcom.h>\r
-#include <atlhost.h>\r
-\r
-\r
-#include <ocmm.h>\r
-#include "..\..\frame\Frame.h"\r
-#include <vector>\r
-\r
-#include "axflash.h"\r
-//#import "progid:ShockwaveFlash.ShockwaveFlash.9" no_namespace, named_guids\r
-\r
-namespace caspar {\r
-\r
-class FlashProducer;\r
-\r
-namespace flash {\r
-\r
-class TimerHelper;\r
-struct DirtyRect {\r
-       DirtyRect(LONG l, LONG t, LONG r, LONG b, bool e) : bErase(e), bWhole(false) { \r
-               rect.left = l;\r
-               rect.top = t;\r
-               rect.right = r;\r
-               rect.bottom = b; \r
-       }\r
-       DirtyRect(const RECT& rc, bool e) : bErase(e), bWhole(false)  {\r
-               rect.left = rc.left;\r
-               rect.top = rc.top;\r
-               rect.right = rc.right;\r
-               rect.bottom = rc.bottom; \r
-       }\r
-       explicit DirtyRect(bool b) : bWhole(b) {}\r
-\r
-       RECT    rect;\r
-       bool    bErase;\r
-       bool    bWhole;\r
-};\r
-\r
-extern _ATL_FUNC_INFO fnInfoFlashCallEvent;\r
-extern _ATL_FUNC_INFO fnInfoReadyStateChangeEvent;\r
-\r
-class ATL_NO_VTABLE FlashAxContainer : \r
-               public ATL::CComCoClass<FlashAxContainer , &CLSID_NULL>,\r
-               public ATL::CComObjectRootEx<ATL::CComMultiThreadModel>,\r
-               public IOleClientSite,\r
-               public IOleContainer,\r
-               public IOleControlSite,\r
-               public IOleInPlaceSiteWindowless,\r
-               public IObjectWithSiteImpl<FlashAxContainer>,\r
-               public IServiceProvider,\r
-               public IAdviseSink,\r
-               public ITimerService,\r
-               public ITimer,\r
-               public IDispatchImpl<IDispatch>,\r
-               public IDispEventSimpleImpl<0, FlashAxContainer, &DIID__IShockwaveFlashEvents>\r
-{\r
-\r
-public:\r
-\r
-       FlashAxContainer();\r
-       virtual ~FlashAxContainer();\r
-\r
-       DECLARE_NO_REGISTRY()\r
-       DECLARE_POLY_AGGREGATABLE(FlashAxContainer)\r
-       DECLARE_GET_CONTROLLING_UNKNOWN()\r
-\r
-       BEGIN_COM_MAP(FlashAxContainer)\r
-               COM_INTERFACE_ENTRY(IDispatch)\r
-               COM_INTERFACE_ENTRY(IOleClientSite)\r
-               COM_INTERFACE_ENTRY(IObjectWithSite)\r
-               COM_INTERFACE_ENTRY(IOleControlSite)\r
-               COM_INTERFACE_ENTRY(IOleContainer)\r
-\r
-               COM_INTERFACE_ENTRY(IOleInPlaceSiteWindowless)\r
-               COM_INTERFACE_ENTRY(IOleInPlaceSiteEx)\r
-               COM_INTERFACE_ENTRY(IOleInPlaceSite)\r
-               COM_INTERFACE_ENTRY(IOleWindow)\r
-\r
-               COM_INTERFACE_ENTRY(IServiceProvider)\r
-\r
-               COM_INTERFACE_ENTRY(IAdviseSink)\r
-\r
-               COM_INTERFACE_ENTRY(ITimerService)\r
-\r
-               COM_INTERFACE_ENTRY(ITimer)\r
-       END_COM_MAP()\r
-\r
-       BEGIN_SINK_MAP(FlashAxContainer)\r
-               SINK_ENTRY_INFO(0, DIID__IShockwaveFlashEvents, 0xc5, OnFlashCall, &fnInfoFlashCallEvent)\r
-               SINK_ENTRY_INFO(0, DIID__IShockwaveFlashEvents, 0xfffffd9f, OnReadyStateChange, &fnInfoReadyStateChangeEvent)\r
-       END_SINK_MAP()\r
-\r
-       void STDMETHODCALLTYPE OnFlashCall(BSTR request);\r
-       void STDMETHODCALLTYPE OnReadyStateChange(long newState);\r
-\r
-// IObjectWithSite\r
-       STDMETHOD(SetSite)(IUnknown* pUnkSite);\r
-\r
-// IOleClientSite\r
-       STDMETHOD(SaveObject)();\r
-       STDMETHOD(GetMoniker)(DWORD dwAssign, DWORD dwWhichMoniker, IMoniker** ppmk);\r
-       STDMETHOD(GetContainer)(IOleContainer** ppContainer);\r
-       STDMETHOD(ShowObject)();\r
-       STDMETHOD(OnShowWindow)(BOOL fShow);\r
-       STDMETHOD(RequestNewObjectLayout)();\r
-\r
-// IOleInPlaceSite\r
-       STDMETHOD(GetWindow)(HWND* pHwnd);\r
-       STDMETHOD(ContextSensitiveHelp)(BOOL fEnterMode);\r
-       STDMETHOD(CanInPlaceActivate)();\r
-       STDMETHOD(OnInPlaceActivate)();\r
-       STDMETHOD(OnInPlaceDeactivate)();\r
-       STDMETHOD(OnUIActivate)();\r
-       STDMETHOD(OnUIDeactivate)(BOOL fUndoable);\r
-       STDMETHOD(GetWindowContext)(IOleInPlaceFrame** ppFrame, IOleInPlaceUIWindow** ppDoc, LPRECT lprcPosRect, LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO pFrameInfo);\r
-       STDMETHOD(Scroll)(SIZE scrollExtant);\r
-       STDMETHOD(DiscardUndoState)();\r
-       STDMETHOD(DeactivateAndUndo)();\r
-       STDMETHOD(OnPosRectChange)(LPCRECT lprcPosRect);\r
-\r
-// IOleInPlaceSiteEx\r
-       STDMETHOD(OnInPlaceActivateEx)(BOOL* pfNoRedraw, DWORD dwFlags);\r
-       STDMETHOD(OnInPlaceDeactivateEx)(BOOL fNoRedraw);\r
-       STDMETHOD(RequestUIActivate)();\r
-\r
-// IOleInPlaceSiteWindowless\r
-       STDMETHOD(CanWindowlessActivate)();\r
-       STDMETHOD(GetCapture)();\r
-       STDMETHOD(SetCapture)(BOOL fCapture);\r
-       STDMETHOD(GetFocus)();\r
-       STDMETHOD(SetFocus)(BOOL fGotFocus);\r
-       STDMETHOD(GetDC)(LPCRECT pRect, DWORD grfFlags, HDC* phDC);\r
-       STDMETHOD(ReleaseDC)(HDC hDC);\r
-       STDMETHOD(InvalidateRect)(LPCRECT pRect, BOOL fErase);\r
-       STDMETHOD(InvalidateRgn)(HRGN hRGN, BOOL fErase);\r
-       STDMETHOD(ScrollRect)(INT dx, INT dy, LPCRECT pRectScroll, LPCRECT pRectClip);\r
-       STDMETHOD(AdjustRect)(LPRECT prc);\r
-       STDMETHOD(OnDefWindowMessage)(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT* plResult);\r
-\r
-// IOleControlSite\r
-       STDMETHOD(OnControlInfoChanged)();\r
-       STDMETHOD(LockInPlaceActive)(BOOL fLock);\r
-       STDMETHOD(GetExtendedControl)(IDispatch** ppDisp);\r
-       STDMETHOD(TransformCoords)(POINTL* pPtlHimetric, POINTF* pPtfContainer, DWORD dwFlags);\r
-       STDMETHOD(TranslateAccelerator)(LPMSG lpMsg, DWORD grfModifiers);\r
-       STDMETHOD(OnFocus)(BOOL fGotFocus);\r
-       STDMETHOD(ShowPropertyFrame)();\r
-\r
-// IAdviseSink\r
-       STDMETHOD_(void, OnDataChange)(FORMATETC* pFormatetc, STGMEDIUM* pStgmed);\r
-       STDMETHOD_(void, OnViewChange)(DWORD dwAspect, LONG lindex);\r
-       STDMETHOD_(void, OnRename)(IMoniker* pmk);\r
-       STDMETHOD_(void, OnSave)();\r
-       STDMETHOD_(void, OnClose)();\r
-\r
-// IServiceProvider\r
-       STDMETHOD(QueryService)( REFGUID rsid, REFIID riid, void** ppvObj);\r
-\r
-// IOleContainer\r
-       STDMETHOD(ParseDisplayName)(IBindCtx*, LPOLESTR, ULONG*, IMoniker**)\r
-       {\r
-               ATLTRACENOTIMPL(_T("IOleContainer::ParseDisplayName"));\r
-       }\r
-       STDMETHOD(EnumObjects)(DWORD, IEnumUnknown** ppenum)\r
-       {\r
-               if (ppenum == NULL)\r
-                       return E_POINTER;\r
-               *ppenum = NULL;\r
-               typedef CComObject<CComEnum<IEnumUnknown, &__uuidof(IEnumUnknown), IUnknown*, _CopyInterface<IUnknown> > > enumunk;\r
-               enumunk* p = NULL;\r
-               ATLTRY(p = new enumunk);\r
-               if(p == NULL)\r
-                       return E_OUTOFMEMORY;\r
-               IUnknown* pTemp = m_spUnknown;\r
-               // There is always only one object.\r
-               HRESULT hRes = p->Init(reinterpret_cast<IUnknown**>(&pTemp), reinterpret_cast<IUnknown**>(&pTemp + 1), GetControllingUnknown(), AtlFlagCopy);\r
-               if (SUCCEEDED(hRes))\r
-                       hRes = p->QueryInterface(__uuidof(IEnumUnknown), (void**)ppenum);\r
-               if (FAILED(hRes))\r
-                       delete p;\r
-               return hRes;\r
-       }\r
-       STDMETHOD(LockContainer)(BOOL)\r
-       {\r
-               ATLTRACENOTIMPL(_T("IOleContainer::LockContainer"));\r
-       }\r
-\r
-//ITimerService\r
-       STDMETHOD(CreateTimer)(ITimer *pReferenceTimer, ITimer **ppNewTimer);\r
-       STDMETHOD(GetNamedTimer)(REFGUID rguidName, ITimer **ppTimer);\r
-       STDMETHOD(SetNamedTimerReference)(REFGUID rguidName, ITimer *pReferenceTimer);\r
-\r
-//ITimer\r
-       STDMETHOD(Advise)(VARIANT vtimeMin, VARIANT vtimeMax, VARIANT vtimeInterval, DWORD dwFlags, ITimerSink *pTimerSink, DWORD *pdwCookie);\r
-       STDMETHOD(Unadvise)(DWORD dwCookie);\r
-       STDMETHOD(Freeze)(BOOL fFreeze);\r
-       STDMETHOD(GetTime)(VARIANT *pvtime);\r
-       int GetFPS();\r
-\r
-       HRESULT CreateAxControl();\r
-       void DestroyAxControl();\r
-       HRESULT QueryControl(REFIID iid, void** ppUnk);\r
-\r
-       template <class Q>\r
-       HRESULT QueryControl(Q** ppUnk)\r
-       {\r
-               return QueryControl(__uuidof(Q), (void**)ppUnk);\r
-       }\r
-\r
-//     static ATL::CComObject<FlashAxContainer>* CreateInstance();\r
-\r
-       bool DrawControl(HDC targetDC);\r
-\r
-       TimerHelper* pTimerHelper;\r
-       volatile bool bInvalidRect_;\r
-       volatile bool bCallSuccessful_;\r
-       volatile bool bReadyToRender_;\r
-       volatile bool bIsEmpty_;\r
-       volatile bool bHasNewTiming_;\r
-       FlashProducer* pFlashProducer_;\r
-       std::vector<DirtyRect> bDirtyRects_;\r
-\r
-       void SetFormat(const caspar::FrameFormatDescription&);\r
-       bool IsReadyToRender() const;\r
-       void EnterFullscreen();\r
-\r
-       static bool CheckForFlashSupport();\r
-\r
-       ATL::CComPtr<IOleInPlaceObjectWindowless> m_spInPlaceObjectWindowless;\r
-\r
-private:\r
-       static CComBSTR flashGUID_;\r
-\r
-//     state\r
-       bool            bUIActive_;\r
-       bool            bInPlaceActive_;\r
-       unsigned long           bHaveFocus_ : 1;\r
-       unsigned long           bCapture_ : 1;\r
-\r
-       DWORD m_dwOleObject;\r
-       DWORD m_dwMiscStatus;\r
-       SIZEL m_hmSize;\r
-       SIZEL m_pxSize;\r
-       RECT m_rcPos;\r
-\r
-       ATL::CComPtr<IUnknown> m_spUnknown;\r
-       ATL::CComPtr<IOleObject> m_spServices;\r
-       ATL::CComPtr<IOleObject> m_spOleObject;\r
-       ATL::CComPtr<IViewObjectEx> m_spViewObject;\r
-\r
-//     ATL::CComPtr<ATL::CComObject<MyMoniker> > m_spMyMoniker;\r
-};\r
-\r
-}      //namespace flash\r
-}      //namespace caspar\r
-\r
-#endif //_FLASHAXCONTAINER_H__
\ No newline at end of file
diff --git a/server/producers/flash/FlashCommand.cpp b/server/producers/flash/FlashCommand.cpp
deleted file mode 100644 (file)
index 35a959c..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "FlashCommand.h"\r
-#include "FlashManager.h"\r
-#include "FlashProducer.h"\r
-\r
-namespace caspar\r
-{\r
-\r
-//////////////////////\r
-// FlashCommand\r
-FlashCommand::FlashCommand(FlashProducer* pHost) : pHost_(pHost), eventDone_(FALSE, FALSE) \r
-{}\r
-\r
-FlashCommand::~FlashCommand() {\r
-}\r
-\r
-void FlashCommand::Execute()\r
-{\r
-       if(pHost_ != 0)\r
-               result = DoExecute();\r
-\r
-       eventDone_.Set();\r
-}\r
-\r
-void FlashCommand::Cancel() {\r
-       eventDone_.Set();\r
-}\r
-\r
-bool FlashCommand::Wait(DWORD timeout)\r
-{\r
-       if(!pHost_->worker_.IsRunning())\r
-               return false;\r
-\r
-       HRESULT result = WaitForSingleObject(eventDone_, timeout);\r
-       return (result == WAIT_OBJECT_0);\r
-}\r
-\r
-/////////////////////////\r
-//  GenericFlashCommand\r
-GenericFlashCommand::GenericFlashCommand(caspar::FlashProducer *pHost, caspar::FlashMemberFnPtr pFunction) : FlashCommand(pHost), pFunction_(pFunction) {\r
-}\r
-GenericFlashCommand::GenericFlashCommand(caspar::FlashProducer *pHost, caspar::FlashMemberFnPtr pFunction, const tstring &parameter) : FlashCommand(pHost), pFunction_(pFunction), parameter_(parameter) {\r
-}\r
-GenericFlashCommand::~GenericFlashCommand() {\r
-}\r
-\r
-bool GenericFlashCommand::DoExecute() {\r
-       if(pFunction_ != 0)\r
-               return (GetHost()->*pFunction_)(parameter_);\r
-       \r
-       return false;\r
-}\r
-\r
-////////////////////////////\r
-//  InitializeFlashCommand\r
-InitializeFlashCommand::InitializeFlashCommand(FlashProducer *pHost, FrameManagerPtr pFrameManager) : FlashCommand(pHost), pFrameManager_(pFrameManager) {\r
-}\r
-\r
-InitializeFlashCommand::~InitializeFlashCommand() {\r
-}\r
-\r
-bool InitializeFlashCommand::DoExecute() {\r
-       return GetHost()->DoInitialize(pFrameManager_);\r
-}\r
-\r
-}
\ No newline at end of file
diff --git a/server/producers/flash/FlashCommand.h b/server/producers/flash/FlashCommand.h
deleted file mode 100644 (file)
index 2844ae5..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _FLASHCOMMAND_H_\r
-#define _FLASHCOMMAND_H_\r
-\r
-#include "..\..\utils\Event.h"\r
-\r
-namespace caspar\r
-{\r
-\r
-class FlashProducer;\r
-typedef bool (FlashProducer::*FlashMemberFnPtr)(const tstring&);\r
-\r
-class FrameManager;\r
-typedef std::tr1::shared_ptr<FrameManager> FrameManagerPtr;\r
-\r
-class FlashCommand\r
-{\r
-protected:\r
-       explicit FlashCommand(FlashProducer* pHost);\r
-       virtual bool DoExecute() = 0;\r
-\r
-       FlashProducer* GetHost() {\r
-               return pHost_;\r
-       }\r
-\r
-public:\r
-       virtual ~FlashCommand();\r
-\r
-       void Execute();\r
-       void Cancel();\r
-       bool Wait(DWORD timeout);\r
-\r
-       bool GetResult() {\r
-               return result;\r
-       }\r
-\r
-private:\r
-       bool result;\r
-\r
-       utils::Event    eventDone_;\r
-       FlashProducer* pHost_;\r
-};\r
-\r
-class GenericFlashCommand : public FlashCommand \r
-{\r
-public:\r
-       GenericFlashCommand(FlashProducer* pHost, FlashMemberFnPtr pFunction);\r
-       GenericFlashCommand(FlashProducer* pHost, FlashMemberFnPtr pFunction, const tstring& parameter);\r
-       virtual ~GenericFlashCommand();\r
-\r
-private:\r
-       typedef std::tr1::shared_ptr<FlashCommand> FlashCommandPtr;\r
-\r
-       virtual bool DoExecute();\r
-       FlashMemberFnPtr pFunction_;\r
-       tstring parameter_;\r
-};\r
-\r
-class InitializeFlashCommand : public FlashCommand\r
-{\r
-public:\r
-       InitializeFlashCommand(FlashProducer* pHost, FrameManagerPtr pFrameManager);\r
-       virtual ~InitializeFlashCommand();\r
-\r
-private:\r
-       virtual bool DoExecute();\r
-       FrameManagerPtr pFrameManager_;\r
-};\r
-\r
-}\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/producers/flash/FlashCommandQueue.cpp b/server/producers/flash/FlashCommandQueue.cpp
deleted file mode 100644 (file)
index 254ecb0..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "FlashCommandQueue.h"\r
-#include "FlashCommand.h"\r
-#include "FlashManager.h"\r
-#include <algorithm>\r
-\r
-namespace caspar {\r
-namespace flash {\r
-\r
-FlashCommandQueue::FlashCommandQueue() : newCommandEvent_(TRUE, FALSE) {\r
-}\r
-\r
-FlashCommandQueue::~FlashCommandQueue() {\r
-}\r
-\r
-void CancelCommand(FlashCommandPtr& pCommand) {\r
-       if(pCommand != 0)\r
-               pCommand->Cancel();\r
-}\r
-\r
-void FlashCommandQueue::Clear()\r
-{\r
-       Lock lock(*this);\r
-\r
-       std::for_each (commands_.begin(), commands_.end(), CancelCommand);\r
-       commands_.clear();\r
-\r
-       newCommandEvent_.Reset();\r
-}\r
-\r
-void FlashCommandQueue::Push(FlashCommandPtr pNewCommand)\r
-{\r
-       {\r
-               Lock lock(*this);\r
-               commands_.push_back(pNewCommand);\r
-       }\r
-\r
-       newCommandEvent_.Set();\r
-}\r
-\r
-FlashCommandPtr FlashCommandQueue::Pop()\r
-{\r
-       Lock lock(*this);\r
-\r
-       FlashCommandPtr result;\r
-       if(commands_.size() > 0)\r
-       {\r
-               result = commands_.front();\r
-               commands_.pop_front();\r
-\r
-               if(commands_.size() == 0)\r
-                       newCommandEvent_.Reset();\r
-       }\r
-       \r
-       return result;\r
-}\r
-\r
-}      //namespace flash\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/producers/flash/FlashCommandQueue.h b/server/producers/flash/FlashCommandQueue.h
deleted file mode 100644 (file)
index 14bed0f..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _FLASHCOMMANDQUEUE_H__\r
-#define _FLASHCOMMANDQUEUE_H__\r
-\r
-#pragma once\r
-\r
-#include <list>\r
-#include <string>\r
-#include "..\..\utils\Lockable.h"\r
-#include "..\..\utils\event.h"\r
-\r
-namespace caspar {\r
-\r
-class FlashCommand;\r
-typedef std::tr1::shared_ptr<FlashCommand> FlashCommandPtr;\r
-\r
-namespace flash {\r
-\r
-//LoadCommand - creates axControl and loads it with the swf\r
-//StartCommand - Creates the buffers, DC and BITMAP and starts generating frames\r
-//ParamCommand - Sends a parameter to the swf\r
-\r
-\r
-class FlashCommandQueue : private utils::LockableObject\r
-{\r
-       FlashCommandQueue(const FlashCommandQueue&);\r
-       FlashCommandQueue& operator=(const FlashCommandQueue&);\r
-public:\r
-       FlashCommandQueue();\r
-       ~FlashCommandQueue();\r
-\r
-       void Push(FlashCommandPtr pCommand);\r
-       FlashCommandPtr Pop();\r
-\r
-       void Clear();\r
-\r
-       HANDLE GetWaitHandle() {\r
-               return newCommandEvent_;\r
-       }\r
-\r
-private:\r
-       utils::Event newCommandEvent_;\r
-\r
-       //Needs synro-protection\r
-       std::list<FlashCommandPtr>      commands_;\r
-};\r
-\r
-}      //namespace flash\r
-}      //namespace caspar\r
-\r
-#endif //_FLASHCOMMANDQUEUE_H__
\ No newline at end of file
diff --git a/server/producers/flash/FlashManager.cpp b/server/producers/flash/FlashManager.cpp
deleted file mode 100644 (file)
index db28432..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "FlashManager.h"\r
-#include "..\..\frame\FrameManager.h"\r
-#include "..\..\Application.h"\r
-#include "..\..\utils\image\Image.hpp"\r
-#include "TimerHelper.h"\r
-\r
-#include <math.h>\r
-#include <intrin.h>\r
-#pragma intrinsic(__movsd, __stosd)\r
-\r
-#include <objbase.h>\r
-#include <guiddef.h>\r
-#include <algorithm>\r
-\r
-#include "FlashProducer.h"\r
-\r
-namespace caspar {\r
-\r
-using namespace utils;\r
-\r
-\r
-FlashManager::FlashManager()\r
-{\r
-       _extensions.push_back(TEXT("swf"));\r
-\r
-       //Check that flash is installed\r
-       ATL::CComBSTR flashGUID(_T("{D27CDB6E-AE6D-11CF-96B8-444553540000}"));\r
-       CLSID clsid;\r
-       if(!SUCCEEDED(CLSIDFromString((LPOLESTR)flashGUID, &clsid))) {\r
-               throw std::exception("No Flash activex player installed");\r
-       }\r
-}\r
-\r
-FlashManager::~FlashManager() {\r
-}\r
-\r
-MediaProducerPtr FlashManager::CreateProducer(const tstring& filename)\r
-{\r
-       return FlashProducer::Create(filename);\r
-}\r
-\r
-bool FlashManager::getFileInfo(FileInfo* pFileInfo)\r
-{\r
-       if(pFileInfo->filetype == TEXT("swf"))\r
-       {\r
-               pFileInfo->length = 0;  //get real length from file\r
-               pFileInfo->type = TEXT("movie");\r
-               pFileInfo->encoding = TEXT("swf");\r
-       }\r
-       return true;\r
-}\r
-\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/producers/flash/FlashManager.h b/server/producers/flash/FlashManager.h
deleted file mode 100644 (file)
index e7cbde2..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _FLASHMEDIAMANAGER_H__\r
-#define _FLASHMEDIAMANAGER_H__\r
-\r
-#include "..\..\MediaManager.h"\r
-\r
-namespace caspar {\r
-\r
-class FlashManager : public IMediaManager\r
-{\r
-public:\r
-       FlashManager();\r
-       virtual ~FlashManager();\r
-\r
-       virtual MediaProducerPtr CreateProducer(const tstring& filename);\r
-       virtual bool getFileInfo(FileInfo* pFileInfo);\r
-};\r
-\r
-\r
-\r
-\r
-}      //namespace caspar\r
-\r
-#endif // _FLASHMEDIAMANAGER_H__\r
diff --git a/server/producers/flash/FlashProducer.cpp b/server/producers/flash/FlashProducer.cpp
deleted file mode 100644 (file)
index 801d8cf..0000000
+++ /dev/null
@@ -1,434 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "..\..\Application.h"\r
-#include "TimerHelper.h"\r
-#include "FlashProducer.h"\r
-#include "..\..\utils\Logger.h"\r
-#include "..\..\utils\LogLevel.h"\r
-#include "..\..\utils\image\Image.hpp"\r
-#include "..\..\application.h"\r
-#include "..\..\frame\BitmapFrameManagerAdapter.h"\r
-\r
-namespace caspar {\r
-\r
-using namespace utils;\r
-\r
-//////////////////////////////////////////////////////////////////////\r
-// FlashProducer\r
-//////////////////////////////////////////////////////////////////////\r
-FlashProducer::FlashProducer() : pFlashAxContainer_(0), bRunning_(false), frameBuffer_(2), pFnRenderer_(std::tr1::bind(&FlashProducer::WriteFrame, this)), pMonitor_(0), timerCount_(0)\r
-{\r
-}\r
-\r
-FlashProducer::~FlashProducer() \r
-{\r
-       worker_.Stop();\r
-}\r
-\r
-FlashProducerPtr FlashProducer::Create(const tstring& filename, Monitor* pMonitor)\r
-{\r
-       FlashProducerPtr result;\r
-\r
-       if(filename.length() > 0) {\r
-               result.reset(new FlashProducer());\r
-               result->pMonitor_ = pMonitor;\r
-\r
-               if(!(result->Create() && result->Load(filename)))\r
-                       result.reset();\r
-       }\r
-\r
-       return result;\r
-}\r
-\r
-IMediaController* FlashProducer::QueryController(const tstring& id) \r
-{      \r
-       return id == TEXT("FrameController") ? this : 0;\r
-}\r
-\r
-void FlashProducer::Stop() \r
-{\r
-       worker_.Stop(false);\r
-}\r
-\r
-void FlashProducer::Run(HANDLE stopEvent)\r
-{\r
-//#ifdef DEBUG\r
-//     srand(timeGetTime());\r
-//     int frameIndex = 0;\r
-//     int crashIndex = 200+rand()%200;\r
-//#endif\r
-\r
-       ::OleInitialize(NULL);\r
-       LOG << LogLevel::Verbose << TEXT("Flash readAhead thread started");\r
-\r
-       HANDLE waitHandles[3] = { stopEvent, commandQueue_.GetWaitHandle(), frameBuffer_.GetWriteWaitHandle() };\r
-       DWORD waitHandlesCount = sizeof(waitHandles) / sizeof(HANDLE) - 1;\r
-\r
-       bool bQuit = false;\r
-       while(!bQuit) \r
-       {\r
-               DWORD realWaitHandleCount = waitHandlesCount;\r
-               if(bRunning_)\r
-                       ++realWaitHandleCount;\r
-\r
-               HRESULT waitResult = MsgWaitForMultipleObjects(realWaitHandleCount, waitHandles, FALSE, 1000, QS_ALLINPUT);\r
-               switch(waitResult)\r
-               {\r
-               case (WAIT_OBJECT_0+0): //stop\r
-               case WAIT_FAILED:               //wait failiure\r
-                       bQuit = true;\r
-                       continue;\r
-\r
-               case (WAIT_OBJECT_0+1): //command\r
-                       {\r
-                               FlashCommandPtr pFlashCommand = commandQueue_.Pop();\r
-                               if(pFlashCommand != 0) {\r
-                                       pFlashCommand->Execute();\r
-                                       pFlashCommand.reset();\r
-                               }\r
-                       }\r
-                       continue;\r
-\r
-               case (WAIT_TIMEOUT):    //nothing has happened...\r
-                       continue;\r
-               }\r
-\r
-               //render next frame\r
-               if(bRunning_ && waitResult==(WAIT_OBJECT_0+2)) \r
-               {\r
-                       if(pFlashAxContainer_->bHasNewTiming_) \r
-                       {\r
-                               pFlashAxContainer_->bHasNewTiming_ = false;\r
-                               const caspar::FrameFormatDescription& fmtDesc = pFrameManager_->GetFrameFormatDescription();\r
-\r
-                               //render frames if we're playing on a channel with a progressive format OR if the FPS of the flash is half that of the channel\r
-                               int flashFPS = pFlashAxContainer_->GetFPS();\r
-                               bool bFrames = (fmtDesc.mode == Progressive || ((flashFPS - fmtDesc.fps/2) == 0));\r
-                               pFnRenderer_ = std::tr1::bind(bFrames ? &FlashProducer::WriteFrame : &FlashProducer::WriteFields, this);\r
-                       }\r
-                       \r
-                       if(pFlashAxContainer_->IsReadyToRender())\r
-                               this->pFnRenderer_();\r
-//#ifdef DEBUG\r
-//                     ++frameIndex;\r
-//                     if(frameIndex >= crashIndex)\r
-//                     {\r
-//                             //Go down in a ball of fire!\r
-//                             int* pCrash = 0;\r
-//                             *pCrash = 42;\r
-//                     }\r
-//#endif\r
-               }\r
-               \r
-               static int logCount = 0;\r
-               //take care of input (windowmessages)\r
-               if(waitResult == (WAIT_OBJECT_0 + realWaitHandleCount)) \r
-               {\r
-                       MSG msg;\r
-                       while(PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE)) \r
-                       {\r
-                               if(msg.message != WM_TIMER)\r
-                               {\r
-                                       if(logCount < 1000)\r
-                                       {\r
-                                               LOG << TEXT("[FlashProducer] ####### Received MSG message: ") << msg.message << TEXT(" lParam: ") << msg.lParam << TEXT(" wParam: ") << msg.wParam;\r
-                                               ++logCount;\r
-                                       }\r
-                                       TranslateMessage(&msg);\r
-                                       DispatchMessage(&msg);\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-       if(pFlashAxContainer_) \r
-       {\r
-               pFlashAxContainer_->DestroyAxControl();\r
-\r
-               pFlashAxContainer_->Release();\r
-               pFlashAxContainer_ = 0;\r
-       }\r
-\r
-       commandQueue_.Clear();\r
-\r
-       FramePtr pNullFrame;\r
-       frameBuffer_.push_back(pNullFrame);\r
-       LOG << LogLevel::Verbose << TEXT("Flash readAhead thread ended");\r
-       ::OleUninitialize();\r
-}\r
-\r
-bool FlashProducer::OnUnhandledException(const std::exception& ex) throw() \r
-{\r
-       try \r
-       {\r
-               FramePtr pNullFrame;\r
-               frameBuffer_.push_back(pNullFrame);\r
-\r
-               LOG << LogLevel::Critical << TEXT("UNHANDLED EXCEPTION in flash readahead-thread. Message: ") << ex.what();\r
-\r
-               if(pFlashAxContainer_) {\r
-                       pFlashAxContainer_->DestroyAxControl();\r
-\r
-                       pFlashAxContainer_->Release();\r
-                       pFlashAxContainer_ = 0;\r
-               }\r
-\r
-               commandQueue_.Clear();\r
-               ::OleUninitialize();\r
-       }\r
-       catch(...)\r
-       {\r
-               try \r
-               {\r
-                       pFlashAxContainer_ = 0;\r
-               } \r
-               catch(...){}\r
-       }\r
-\r
-       return false;\r
-}\r
-\r
-void FlashProducer::SetEmptyAlert(EmptyCallback callback) \r
-{\r
-       emptyCallback = callback;\r
-}\r
-\r
-bool FlashProducer::IsEmpty() const \r
-{\r
-       return (pFlashAxContainer_ != 0) ? pFlashAxContainer_->bIsEmpty_ : true;\r
-}\r
-\r
-void FlashProducer::WriteFields()\r
-{              \r
-       const caspar::FrameFormatDescription& fmtDesc = pFrameManager_->GetFrameFormatDescription();\r
-       \r
-       FramePtr pNextFrame1 = RenderFrame();\r
-       FramePtr pNextFrame2 = RenderFrame();\r
-\r
-       if(pNextFrame1 != pNextFrame2)\r
-               utils::image::CopyField(pNextFrame1->GetDataPtr(), pNextFrame2->GetDataPtr(), 1, fmtDesc.width, fmtDesc.height); // TODO: at this point we should spawn work as a task to allow rendering of next frame while copying\r
-\r
-       frameBuffer_.push_back(pNextFrame1);\r
-}\r
-\r
-void FlashProducer::WriteFrame()\r
-{\r
-       frameBuffer_.push_back(RenderFrame()); // Consumer always expects frameFramePtr pResultFrame = pFrameManager_->CreateFrame();\r
-}\r
-\r
-FramePtr FlashProducer::RenderFrame()\r
-{      \r
-       if(pFlashAxContainer_->pTimerHelper)\r
-       {\r
-               DWORD time = pFlashAxContainer_->pTimerHelper->Invoke(); // Tick flash\r
-               if(time - timerCount_ >= 400)\r
-               {\r
-                       timerCount_ = time;\r
-                       HRESULT hr;\r
-                       pFlashAxContainer_->m_spInPlaceObjectWindowless->OnWindowMessage(WM_TIMER, 3, 0, &hr);\r
-               }\r
-       }\r
-\r
-       if(pFlashAxContainer_->bInvalidRect_ || pCurrentFrame_ == NULL)\r
-       {               \r
-               FramePtr pNewFrame = pFrameManager_->CreateFrame();\r
-\r
-               image::Clear(pNewFrame->GetDataPtr(), pFrameManager_->GetFrameFormatDescription().size);\r
-               pFlashAxContainer_->DrawControl(reinterpret_cast<HDC>(pNewFrame->GetMetadata())); // error handling?    \r
-\r
-               pFlashAxContainer_->bInvalidRect_ = false;      \r
-               \r
-               pCurrentFrame_ = pNewFrame;                     \r
-       }       \r
-       assert(pCurrentFrame_);\r
-       return pCurrentFrame_;\r
-}\r
-\r
-bool FlashProducer::Create() \r
-{\r
-       //Create worker-thread\r
-       worker_.Start(this);\r
-\r
-       //dispatch DoCreate-command\r
-       FlashCommandPtr pCreateCommand(new GenericFlashCommand(this, &caspar::FlashProducer::DoCreate));\r
-\r
-       commandQueue_.Push(pCreateCommand);\r
-       if(pCreateCommand->Wait(INFINITE))\r
-               return pCreateCommand->GetResult();     \r
-\r
-       return false;\r
-}\r
-\r
-bool FlashProducer::Load(const tstring& filename) \r
-{\r
-       if(worker_.IsRunning()) \r
-       {\r
-               //dispatch DoLoad-command\r
-               FlashCommandPtr pLoadCommand(new GenericFlashCommand(this, &caspar::FlashProducer::DoLoad, filename));\r
-\r
-               commandQueue_.Push(pLoadCommand);\r
-               if(pLoadCommand->Wait(INFINITE))\r
-                       return pLoadCommand->GetResult();               \r
-       }\r
-       return false;\r
-}\r
-\r
-bool FlashProducer::Initialize(FrameManagerPtr pFrameManager) \r
-{\r
-       if(worker_.IsRunning() && pFrameManager != 0) \r
-       {\r
-               //dispatch Initialize-command\r
-               FlashCommandPtr pInitializeCommand(new InitializeFlashCommand(this, pFrameManager));\r
-               commandQueue_.Push(pInitializeCommand);\r
-               if(pInitializeCommand->Wait(INFINITE)) \r
-                       return pInitializeCommand->GetResult();         \r
-       }\r
-       return false;   \r
-}\r
-\r
-bool FlashProducer::Param(const tstring &param) \r
-{\r
-       if(worker_.IsRunning()) \r
-       {\r
-               //dispatch DoParam-command\r
-               FlashCommandPtr pParamCommand(new GenericFlashCommand(this, &caspar::FlashProducer::DoParam, param));\r
-               commandQueue_.Push(pParamCommand);\r
-               return true;\r
-       }\r
-       return false;\r
-}\r
-\r
-//This is always run from the worker thread\r
-//This is called when the MediaProducer is created\r
-bool FlashProducer::DoCreate(const tstring&) \r
-{\r
-       HRESULT hr = CComObject<caspar::flash::FlashAxContainer>::CreateInstance(&pFlashAxContainer_);\r
-       if(pFlashAxContainer_) \r
-       {\r
-               pFlashAxContainer_->pFlashProducer_ = this;\r
-               HRESULT hr = pFlashAxContainer_->CreateAxControl();\r
-               if(FAILED(hr))\r
-                       return false;\r
-\r
-               CComPtr<IShockwaveFlash> spFlash;\r
-               pFlashAxContainer_->QueryControl(&spFlash);\r
-               if(spFlash)             \r
-                       spFlash->put_Playing(TRUE);             \r
-               else\r
-                       return false;\r
-       }\r
-       else\r
-               return false;\r
-\r
-       return true;\r
-}\r
-\r
-//This is always run from the worker thread\r
-//This is called when the MediaProducer is created\r
-bool FlashProducer::DoLoad(const tstring &filename) \r
-{\r
-       filename_ = filename;\r
-       if(filename_.length() == 0)\r
-               return false;\r
-\r
-       CComPtr<IShockwaveFlash> spFlash;\r
-       pFlashAxContainer_->QueryControl(&spFlash);\r
-       if(!spFlash)\r
-               return false;\r
-\r
-       spFlash->put_AllowFullScreen(CComBSTR(TEXT("true")));\r
-       HRESULT hrLoad = spFlash->put_Movie(CComBSTR(filename_.c_str()));\r
-       spFlash->put_ScaleMode(2);      //Exact fit. Scale without respect to the aspect ratio\r
-       return SUCCEEDED(hrLoad);\r
-}\r
-\r
-//This is always run from the worker thread\r
-//This is called frÃ¥n FrameMediaController::Initialize\r
-bool FlashProducer::DoInitialize(FrameManagerPtr pFrameManager)\r
-{\r
-       int oldWidth = 0, oldHeight = 0;\r
-       if(pFrameManager_ != 0) \r
-       {\r
-               const caspar::FrameFormatDescription& oldFmtDesc = pFrameManager_->GetFrameFormatDescription();\r
-               oldWidth = oldFmtDesc.width;\r
-               oldHeight = oldFmtDesc.height;\r
-       }\r
-\r
-       pFrameManager_ = pFrameManager->HasFeature("BITMAP_FRAME") ? pFrameManager : FrameManagerPtr(new BitmapFrameManagerAdapter(pFrameManager, GetApplication()->GetMainWindow()->getHwnd()));\r
-       const caspar::FrameFormatDescription& fmtDesc = pFrameManager_->GetFrameFormatDescription();\r
-       \r
-       pCurrentFrame_ = FramePtr();\r
-\r
-       if(fmtDesc.width != oldWidth || fmtDesc.height != oldHeight)    \r
-               pFlashAxContainer_->SetFormat(fmtDesc);         \r
-\r
-       bRunning_ = true;\r
-       return true;\r
-}\r
-\r
-//This is always run from the worker thread\r
-//this can get called at any time after the producer is loaded\r
-bool FlashProducer::DoParam(const tstring& param) \r
-{\r
-       HRESULT hr;\r
-       CComPtr<IShockwaveFlash> spFlash;\r
-       pFlashAxContainer_->bIsEmpty_ = false;\r
-       pFlashAxContainer_->bCallSuccessful_ = false;\r
-       pFlashAxContainer_->QueryControl(&spFlash);\r
-       CComBSTR request(param.c_str());\r
-       //ATLTRACE(_T("ShockwaveFlash::CallFuntion\n"));\r
-\r
-       if(spFlash)\r
-       {\r
-               int retries = 0;\r
-               bool bSuccess = false;\r
-\r
-               while(!bSuccess && retries < 5)\r
-               {\r
-                       CComBSTR result;\r
-                       //LOG << LogLevel::Debug << TEXT("Calling ExternalInterface: ") << param;\r
-                       hr = spFlash->CallFunction(request, &result);\r
-                       bSuccess = (hr == S_OK);\r
-\r
-                       if(hr != S_OK) \r
-                       {\r
-                               //LOG << LogLevel::Debug << TEXT("Flashproducer: ExternalInterface-call failed. (HRESULT = ") << hr << TEXT(")");\r
-                               if(pFlashAxContainer_->bCallSuccessful_)\r
-                               {\r
-                                       bSuccess = true;\r
-                               }\r
-                               else \r
-                               {\r
-                                       ++retries;\r
-                                       LOG << LogLevel::Debug << TEXT("Retrying. Count = ") << retries;\r
-                               }\r
-                       }\r
-               }\r
-\r
-               return (hr == S_OK);\r
-       }\r
-\r
-       return false;\r
-}\r
-\r
-}
\ No newline at end of file
diff --git a/server/producers/flash/FlashProducer.h b/server/producers/flash/FlashProducer.h
deleted file mode 100644 (file)
index dc4f7de..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _FLASHPRODUCER_H_\r
-#define _FLASHPRODUCER_H_\r
-\r
-//std include\r
-#include <vector>\r
-#include <string>\r
-#include <functional>\r
-\r
-#include "..\..\MediaProducer.h"\r
-#include "..\..\frame\FrameMediaController.h"\r
-#include "FlashAxContainer.h"\r
-#include "FlashCommandQueue.h"\r
-#include "..\..\frame\BitmapFrame.h"\r
-#include "FlashCommand.h"\r
-\r
-#include "..\..\utils\thread.h"\r
-#include "..\..\frame\buffers\MotionFrameBuffer.h"\r
-\r
-namespace caspar\r
-{\r
-\r
-class Monitor;\r
-\r
-class FlashProducer;\r
-typedef std::tr1::shared_ptr<FlashProducer> FlashProducerPtr;\r
-\r
-typedef std::tr1::function<void()> EmptyCallback;\r
-\r
-class FlashProducer : public MediaProducer, FrameMediaController, utils::IRunnable\r
-{\r
-       FlashProducer(const FlashProducer&);\r
-\r
-public:\r
-       static FlashProducerPtr Create(const tstring& filename, Monitor* pMonitor=0);\r
-\r
-       FlashProducer();\r
-       virtual ~FlashProducer();\r
-\r
-       //MediaProducer\r
-       virtual IMediaController* QueryController(const tstring& id);\r
-       virtual bool Param(const tstring& param);\r
-\r
-       //FrameMediaController\r
-       virtual bool Initialize(FrameManagerPtr pFrameManager);\r
-       virtual FrameBuffer& GetFrameBuffer() {\r
-               return frameBuffer_;\r
-       }\r
-\r
-       bool IsEmpty() const;\r
-\r
-       void Stop();\r
-       void SetEmptyAlert(EmptyCallback callback);\r
-\r
-       bool Create();\r
-       bool Load(const tstring& filename);\r
-\r
-private:\r
-\r
-       friend class FlashCommand;\r
-       friend class InitializeFlashCommand;\r
-       friend class flash::FlashAxContainer;\r
-       friend class FullscreenControllerFlashCommand;\r
-\r
-       bool DoCreate(const tstring&);\r
-       bool DoLoad(const tstring &);\r
-       bool DoInitialize(FrameManagerPtr pFrameManager);\r
-       bool DoParam(const tstring&);\r
-\r
-       virtual void Run(HANDLE stopEvent);\r
-       virtual bool OnUnhandledException(const std::exception& ex) throw();\r
-\r
-       EmptyCallback emptyCallback;\r
-\r
-       MotionFrameBuffer frameBuffer_;\r
-\r
-       DWORD timerCount_;\r
-\r
-       utils::Thread worker_;\r
-\r
-       tstring filename_;\r
-       bool bRunning_;\r
-       CComObject<caspar::flash::FlashAxContainer>* pFlashAxContainer_;\r
-       caspar::flash::FlashCommandQueue commandQueue_;\r
-\r
-       FramePtr pCurrentFrame_;\r
-\r
-       FramePtr RenderFrame();\r
-       void WriteFields(void);\r
-       void WriteFrame(void);\r
-       std::tr1::function<void()> pFnRenderer_;\r
-       \r
-       FrameManagerPtr pFrameManager_;\r
-       Monitor* pMonitor_;\r
-       //void CopyFieldToFrameBuffer(FramePtr frame1, FramePtr frame2, size_t fieldIndex, size_t width, size_t height);\r
-};\r
-\r
-typedef bool (FlashProducer::*FlashMemberFnPtr)(const tstring&);\r
-\r
-}\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/producers/flash/TimerHelper.h b/server/producers/flash/TimerHelper.h
deleted file mode 100644 (file)
index a0de2b1..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _TIMER_HELPER_H__\r
-#define _TIMER_HELPER_H__\r
-\r
-#include "FlashAxContainer.h"\r
-\r
-namespace caspar {\r
-namespace flash {\r
-\r
-       class TimerHelper\r
-       {\r
-               TimerHelper(const TimerHelper&);\r
-               const TimerHelper& operator=(const TimerHelper&);\r
-\r
-       public:\r
-               TimerHelper()\r
-               {}\r
-               TimerHelper(DWORD first, DWORD interv, ITimerSink* pTS) : firstTime(first), interval(interv), currentTime(first), pTimerSink(pTS)\r
-               {\r
-                       ID = first;\r
-               }\r
-               ~TimerHelper()\r
-               {\r
-               }\r
-               void Setup(DWORD first, DWORD interv, ITimerSink* pTS)\r
-               {\r
-                       firstTime = first;\r
-                       interval = interv;\r
-                       currentTime = first;\r
-                       pTimerSink = pTS;\r
-                       ID = first;\r
-               }\r
-\r
-               DWORD Invoke()\r
-               {\r
-                       if(pTimerSink != 0)\r
-                       {\r
-                               VARIANT value;\r
-                               value.vt = VT_UI4;\r
-                               value.ulVal = currentTime;\r
-\r
-                               pTimerSink->OnTimer(value);\r
-                               currentTime += interval;\r
-                       }\r
-                       return currentTime;\r
-               }\r
-\r
-               DWORD firstTime;\r
-               DWORD interval;\r
-               DWORD currentTime;\r
-               ATL::CComPtr<ITimerSink> pTimerSink;\r
-               DWORD ID;\r
-       };\r
-\r
-}      //namespace flash\r
-}      //namespace caspar\r
-\r
-#endif //_TIMER_HELPER_H__
\ No newline at end of file
diff --git a/server/producers/flash/axflash.h b/server/producers/flash/axflash.h
deleted file mode 100644 (file)
index 4685f3a..0000000
+++ /dev/null
@@ -1,3156 +0,0 @@
-\r
-\r
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */\r
-\r
-\r
- /* File created by MIDL compiler version 6.00.0366 */\r
-/* at Tue Mar 18 13:05:00 2008\r
- */\r
-/* Compiler settings for .\flash\Flash9e.IDL:\r
-    Oicf, W4, Zp8, env=Win32 (32b run)\r
-    protocol : dce , ms_ext, c_ext, robust\r
-    error checks: allocation ref bounds_check enum stub_data \r
-    VC __declspec() decoration level: \r
-         __declspec(uuid()), __declspec(selectany), __declspec(novtable)\r
-         DECLSPEC_UUID(), MIDL_INTERFACE()\r
-*/\r
-//@@MIDL_FILE_HEADING(  )\r
-\r
-#pragma warning( disable: 4049 )  /* more than 64k source lines */\r
-\r
-\r
-/* verify that the <rpcndr.h> version is high enough to compile this file*/\r
-#ifndef __REQUIRED_RPCNDR_H_VERSION__\r
-#define __REQUIRED_RPCNDR_H_VERSION__ 475\r
-#endif\r
-\r
-#include "rpc.h"\r
-#include "rpcndr.h"\r
-#include <dispex.h>\r
-\r
-#ifndef __RPCNDR_H_VERSION__\r
-#error this stub requires an updated version of <rpcndr.h>\r
-#endif // __RPCNDR_H_VERSION__\r
-\r
-\r
-#ifndef __axflash_h__\r
-#define __axflash_h__\r
-\r
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)\r
-#pragma once\r
-#endif\r
-\r
-/* Forward Declarations */ \r
-\r
-#ifndef __IShockwaveFlash_FWD_DEFINED__\r
-#define __IShockwaveFlash_FWD_DEFINED__\r
-typedef interface IShockwaveFlash IShockwaveFlash;\r
-#endif         /* __IShockwaveFlash_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef ___IShockwaveFlashEvents_FWD_DEFINED__\r
-#define ___IShockwaveFlashEvents_FWD_DEFINED__\r
-typedef interface _IShockwaveFlashEvents _IShockwaveFlashEvents;\r
-#endif         /* ___IShockwaveFlashEvents_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IFlashFactory_FWD_DEFINED__\r
-#define __IFlashFactory_FWD_DEFINED__\r
-typedef interface IFlashFactory IFlashFactory;\r
-#endif         /* __IFlashFactory_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IDispatchEx_FWD_DEFINED__\r
-#define __IDispatchEx_FWD_DEFINED__\r
-typedef interface IDispatchEx IDispatchEx;\r
-#endif         /* __IDispatchEx_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IFlashObjectInterface_FWD_DEFINED__\r
-#define __IFlashObjectInterface_FWD_DEFINED__\r
-typedef interface IFlashObjectInterface IFlashObjectInterface;\r
-#endif         /* __IFlashObjectInterface_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __IServiceProvider_FWD_DEFINED__\r
-#define __IServiceProvider_FWD_DEFINED__\r
-typedef interface IServiceProvider IServiceProvider;\r
-#endif         /* __IServiceProvider_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __ShockwaveFlash_FWD_DEFINED__\r
-#define __ShockwaveFlash_FWD_DEFINED__\r
-\r
-#ifdef __cplusplus\r
-typedef class ShockwaveFlash ShockwaveFlash;\r
-#else\r
-typedef struct ShockwaveFlash ShockwaveFlash;\r
-#endif /* __cplusplus */\r
-\r
-#endif         /* __ShockwaveFlash_FWD_DEFINED__ */\r
-\r
-\r
-#ifndef __FlashObjectInterface_FWD_DEFINED__\r
-#define __FlashObjectInterface_FWD_DEFINED__\r
-\r
-#ifdef __cplusplus\r
-typedef class FlashObjectInterface FlashObjectInterface;\r
-#else\r
-typedef struct FlashObjectInterface FlashObjectInterface;\r
-#endif /* __cplusplus */\r
-\r
-#endif         /* __FlashObjectInterface_FWD_DEFINED__ */\r
-\r
-\r
-#ifdef __cplusplus\r
-extern "C"{\r
-#endif \r
-\r
-void * __RPC_USER MIDL_user_allocate(size_t);\r
-void __RPC_USER MIDL_user_free( void * ); \r
-\r
-\r
-#ifndef __ShockwaveFlashObjects_LIBRARY_DEFINED__\r
-#define __ShockwaveFlashObjects_LIBRARY_DEFINED__\r
-\r
-/* library ShockwaveFlashObjects */\r
-/* [custom][custom][helpstring][version][uuid] */ \r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-EXTERN_C const IID LIBID_ShockwaveFlashObjects;\r
-\r
-#ifndef __IShockwaveFlash_INTERFACE_DEFINED__\r
-#define __IShockwaveFlash_INTERFACE_DEFINED__\r
-\r
-/* interface IShockwaveFlash */\r
-/* [object][oleautomation][dual][helpstring][uuid] */ \r
-\r
-\r
-EXTERN_C const IID IID_IShockwaveFlash;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("D27CDB6C-AE6D-11CF-96B8-444553540000")\r
-    IShockwaveFlash : public IDispatch\r
-    {\r
-    public:\r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ReadyState( \r
-            /* [retval][out] */ long *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_TotalFrames( \r
-            /* [retval][out] */ long *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Playing( \r
-            /* [retval][out] */ VARIANT_BOOL *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Playing( \r
-            /* [in] */ VARIANT_BOOL pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Quality( \r
-            /* [retval][out] */ int *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Quality( \r
-            /* [in] */ int pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ScaleMode( \r
-            /* [retval][out] */ int *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ScaleMode( \r
-            /* [in] */ int pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AlignMode( \r
-            /* [retval][out] */ int *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_AlignMode( \r
-            /* [in] */ int pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_BackgroundColor( \r
-            /* [retval][out] */ long *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_BackgroundColor( \r
-            /* [in] */ long pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Loop( \r
-            /* [retval][out] */ VARIANT_BOOL *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Loop( \r
-            /* [in] */ VARIANT_BOOL pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Movie( \r
-            /* [retval][out] */ BSTR *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Movie( \r
-            /* [in] */ BSTR pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_FrameNum( \r
-            /* [retval][out] */ long *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_FrameNum( \r
-            /* [in] */ long pVal) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetZoomRect( \r
-            /* [in] */ long left,\r
-            /* [in] */ long top,\r
-            /* [in] */ long right,\r
-            /* [in] */ long bottom) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Zoom( \r
-            /* [in] */ int factor) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Pan( \r
-            /* [in] */ long x,\r
-            /* [in] */ long y,\r
-            /* [in] */ int mode) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Play( void) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Stop( void) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Back( void) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Forward( void) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Rewind( void) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE StopPlay( void) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GotoFrame( \r
-            /* [in] */ long FrameNum) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CurrentFrame( \r
-            /* [retval][out] */ long *FrameNum) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IsPlaying( \r
-            /* [retval][out] */ VARIANT_BOOL *Playing) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE PercentLoaded( \r
-            /* [retval][out] */ long *percent) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE FrameLoaded( \r
-            /* [in] */ long FrameNum,\r
-            /* [retval][out] */ VARIANT_BOOL *loaded) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE FlashVersion( \r
-            /* [retval][out] */ long *version) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_WMode( \r
-            /* [retval][out] */ BSTR *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_WMode( \r
-            /* [in] */ BSTR pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SAlign( \r
-            /* [retval][out] */ BSTR *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_SAlign( \r
-            /* [in] */ BSTR pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Menu( \r
-            /* [retval][out] */ VARIANT_BOOL *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Menu( \r
-            /* [in] */ VARIANT_BOOL pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Base( \r
-            /* [retval][out] */ BSTR *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Base( \r
-            /* [in] */ BSTR pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Scale( \r
-            /* [retval][out] */ BSTR *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Scale( \r
-            /* [in] */ BSTR pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DeviceFont( \r
-            /* [retval][out] */ VARIANT_BOOL *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_DeviceFont( \r
-            /* [in] */ VARIANT_BOOL pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_EmbedMovie( \r
-            /* [retval][out] */ VARIANT_BOOL *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_EmbedMovie( \r
-            /* [in] */ VARIANT_BOOL pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_BGColor( \r
-            /* [retval][out] */ BSTR *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_BGColor( \r
-            /* [in] */ BSTR pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Quality2( \r
-            /* [retval][out] */ BSTR *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Quality2( \r
-            /* [in] */ BSTR pVal) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE LoadMovie( \r
-            /* [in] */ int layer,\r
-            /* [in] */ BSTR url) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE TGotoFrame( \r
-            /* [in] */ BSTR target,\r
-            /* [in] */ long FrameNum) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE TGotoLabel( \r
-            /* [in] */ BSTR target,\r
-            /* [in] */ BSTR label) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE TCurrentFrame( \r
-            /* [in] */ BSTR target,\r
-            /* [retval][out] */ long *FrameNum) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE TCurrentLabel( \r
-            /* [in] */ BSTR target,\r
-            /* [retval][out] */ BSTR *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE TPlay( \r
-            /* [in] */ BSTR target) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE TStopPlay( \r
-            /* [in] */ BSTR target) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetVariable( \r
-            /* [in] */ BSTR name,\r
-            /* [in] */ BSTR value) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetVariable( \r
-            /* [in] */ BSTR name,\r
-            /* [retval][out] */ BSTR *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE TSetProperty( \r
-            /* [in] */ BSTR target,\r
-            /* [in] */ int property,\r
-            /* [in] */ BSTR value) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE TGetProperty( \r
-            /* [in] */ BSTR target,\r
-            /* [in] */ int property,\r
-            /* [retval][out] */ BSTR *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE TCallFrame( \r
-            /* [in] */ BSTR target,\r
-            /* [in] */ int FrameNum) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE TCallLabel( \r
-            /* [in] */ BSTR target,\r
-            /* [in] */ BSTR label) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE TSetPropertyNum( \r
-            /* [in] */ BSTR target,\r
-            /* [in] */ int property,\r
-            /* [in] */ double value) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE TGetPropertyNum( \r
-            /* [in] */ BSTR target,\r
-            /* [in] */ int property,\r
-            /* [retval][out] */ double *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE TGetPropertyAsNumber( \r
-            /* [in] */ BSTR target,\r
-            /* [in] */ int property,\r
-            /* [retval][out] */ double *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SWRemote( \r
-            /* [retval][out] */ BSTR *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_SWRemote( \r
-            /* [in] */ BSTR pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_FlashVars( \r
-            /* [retval][out] */ BSTR *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_FlashVars( \r
-            /* [in] */ BSTR pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AllowScriptAccess( \r
-            /* [retval][out] */ BSTR *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_AllowScriptAccess( \r
-            /* [in] */ BSTR pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_MovieData( \r
-            /* [retval][out] */ BSTR *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_MovieData( \r
-            /* [in] */ BSTR pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_InlineData( \r
-            /* [retval][out] */ IUnknown **ppIUnknown) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_InlineData( \r
-            /* [in] */ IUnknown *ppIUnknown) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SeamlessTabbing( \r
-            /* [retval][out] */ VARIANT_BOOL *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_SeamlessTabbing( \r
-            /* [in] */ VARIANT_BOOL pVal) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EnforceLocalSecurity( void) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Profile( \r
-            /* [retval][out] */ VARIANT_BOOL *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Profile( \r
-            /* [in] */ VARIANT_BOOL pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ProfileAddress( \r
-            /* [retval][out] */ BSTR *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ProfileAddress( \r
-            /* [in] */ BSTR pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ProfilePort( \r
-            /* [retval][out] */ long *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ProfilePort( \r
-            /* [in] */ long pVal) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CallFunction( \r
-            /* [in] */ BSTR request,\r
-            /* [retval][out] */ BSTR *response) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetReturnValue( \r
-            /* [in] */ BSTR returnValue) = 0;\r
-        \r
-        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE DisableLocalSecurity( void) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AllowNetworking( \r
-            /* [retval][out] */ BSTR *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_AllowNetworking( \r
-            /* [in] */ BSTR pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AllowFullScreen( \r
-            /* [retval][out] */ BSTR *pVal) = 0;\r
-        \r
-        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_AllowFullScreen( \r
-            /* [in] */ BSTR pVal) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IShockwaveFlashVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IShockwaveFlash * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IShockwaveFlash * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( \r
-            IShockwaveFlash * This,\r
-            /* [out] */ UINT *pctinfo);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ UINT iTInfo,\r
-            /* [in] */ LCID lcid,\r
-            /* [out] */ ITypeInfo **ppTInfo);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [size_is][in] */ LPOLESTR *rgszNames,\r
-            /* [in] */ UINT cNames,\r
-            /* [in] */ LCID lcid,\r
-            /* [size_is][out] */ DISPID *rgDispId);\r
-        \r
-        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ DISPID dispIdMember,\r
-            /* [in] */ REFIID riid,\r
-            /* [in] */ LCID lcid,\r
-            /* [in] */ WORD wFlags,\r
-            /* [out][in] */ DISPPARAMS *pDispParams,\r
-            /* [out] */ VARIANT *pVarResult,\r
-            /* [out] */ EXCEPINFO *pExcepInfo,\r
-            /* [out] */ UINT *puArgErr);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadyState )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ long *pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_TotalFrames )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ long *pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Playing )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ VARIANT_BOOL *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Playing )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ VARIANT_BOOL pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Quality )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ int *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Quality )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ int pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ScaleMode )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ int *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ScaleMode )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ int pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AlignMode )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ int *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AlignMode )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ int pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BackgroundColor )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ long *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_BackgroundColor )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ long pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Loop )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ VARIANT_BOOL *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Loop )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ VARIANT_BOOL pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Movie )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ BSTR *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Movie )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_FrameNum )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ long *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_FrameNum )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ long pVal);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetZoomRect )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ long left,\r
-            /* [in] */ long top,\r
-            /* [in] */ long right,\r
-            /* [in] */ long bottom);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Zoom )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ int factor);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Pan )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ long x,\r
-            /* [in] */ long y,\r
-            /* [in] */ int mode);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Play )( \r
-            IShockwaveFlash * This);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Stop )( \r
-            IShockwaveFlash * This);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Back )( \r
-            IShockwaveFlash * This);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Forward )( \r
-            IShockwaveFlash * This);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Rewind )( \r
-            IShockwaveFlash * This);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *StopPlay )( \r
-            IShockwaveFlash * This);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GotoFrame )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ long FrameNum);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CurrentFrame )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ long *FrameNum);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *IsPlaying )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ VARIANT_BOOL *Playing);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *PercentLoaded )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ long *percent);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *FrameLoaded )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ long FrameNum,\r
-            /* [retval][out] */ VARIANT_BOOL *loaded);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *FlashVersion )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ long *version);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_WMode )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ BSTR *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_WMode )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SAlign )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ BSTR *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_SAlign )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Menu )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ VARIANT_BOOL *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Menu )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ VARIANT_BOOL pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Base )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ BSTR *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Base )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Scale )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ BSTR *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Scale )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceFont )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ VARIANT_BOOL *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_DeviceFont )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ VARIANT_BOOL pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EmbedMovie )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ VARIANT_BOOL *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_EmbedMovie )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ VARIANT_BOOL pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BGColor )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ BSTR *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_BGColor )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Quality2 )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ BSTR *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Quality2 )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR pVal);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *LoadMovie )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ int layer,\r
-            /* [in] */ BSTR url);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *TGotoFrame )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR target,\r
-            /* [in] */ long FrameNum);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *TGotoLabel )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR target,\r
-            /* [in] */ BSTR label);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *TCurrentFrame )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR target,\r
-            /* [retval][out] */ long *FrameNum);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *TCurrentLabel )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR target,\r
-            /* [retval][out] */ BSTR *pVal);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *TPlay )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR target);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *TStopPlay )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR target);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetVariable )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR name,\r
-            /* [in] */ BSTR value);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetVariable )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR name,\r
-            /* [retval][out] */ BSTR *pVal);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *TSetProperty )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR target,\r
-            /* [in] */ int property,\r
-            /* [in] */ BSTR value);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *TGetProperty )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR target,\r
-            /* [in] */ int property,\r
-            /* [retval][out] */ BSTR *pVal);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *TCallFrame )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR target,\r
-            /* [in] */ int FrameNum);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *TCallLabel )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR target,\r
-            /* [in] */ BSTR label);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *TSetPropertyNum )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR target,\r
-            /* [in] */ int property,\r
-            /* [in] */ double value);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *TGetPropertyNum )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR target,\r
-            /* [in] */ int property,\r
-            /* [retval][out] */ double *pVal);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *TGetPropertyAsNumber )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR target,\r
-            /* [in] */ int property,\r
-            /* [retval][out] */ double *pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SWRemote )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ BSTR *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_SWRemote )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_FlashVars )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ BSTR *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_FlashVars )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AllowScriptAccess )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ BSTR *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AllowScriptAccess )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MovieData )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ BSTR *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_MovieData )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InlineData )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ IUnknown **ppIUnknown);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_InlineData )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ IUnknown *ppIUnknown);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SeamlessTabbing )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ VARIANT_BOOL *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_SeamlessTabbing )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ VARIANT_BOOL pVal);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EnforceLocalSecurity )( \r
-            IShockwaveFlash * This);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ VARIANT_BOOL *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Profile )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ VARIANT_BOOL pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ProfileAddress )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ BSTR *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ProfileAddress )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ProfilePort )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ long *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ProfilePort )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ long pVal);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CallFunction )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR request,\r
-            /* [retval][out] */ BSTR *response);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetReturnValue )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR returnValue);\r
-        \r
-        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *DisableLocalSecurity )( \r
-            IShockwaveFlash * This);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AllowNetworking )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ BSTR *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AllowNetworking )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR pVal);\r
-        \r
-        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AllowFullScreen )( \r
-            IShockwaveFlash * This,\r
-            /* [retval][out] */ BSTR *pVal);\r
-        \r
-        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AllowFullScreen )( \r
-            IShockwaveFlash * This,\r
-            /* [in] */ BSTR pVal);\r
-        \r
-        END_INTERFACE\r
-    } IShockwaveFlashVtbl;\r
-\r
-    interface IShockwaveFlash\r
-    {\r
-        CONST_VTBL struct IShockwaveFlashVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IShockwaveFlash_QueryInterface(This,riid,ppvObject)    \\r
-    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)\r
-\r
-#define IShockwaveFlash_AddRef(This)   \\r
-    (This)->lpVtbl -> AddRef(This)\r
-\r
-#define IShockwaveFlash_Release(This)  \\r
-    (This)->lpVtbl -> Release(This)\r
-\r
-\r
-#define IShockwaveFlash_GetTypeInfoCount(This,pctinfo) \\r
-    (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)\r
-\r
-#define IShockwaveFlash_GetTypeInfo(This,iTInfo,lcid,ppTInfo)  \\r
-    (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)\r
-\r
-#define IShockwaveFlash_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)        \\r
-    (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\r
-\r
-#define IShockwaveFlash_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)  \\r
-    (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\r
-\r
-\r
-#define IShockwaveFlash_get_ReadyState(This,pVal)      \\r
-    (This)->lpVtbl -> get_ReadyState(This,pVal)\r
-\r
-#define IShockwaveFlash_get_TotalFrames(This,pVal)     \\r
-    (This)->lpVtbl -> get_TotalFrames(This,pVal)\r
-\r
-#define IShockwaveFlash_get_Playing(This,pVal) \\r
-    (This)->lpVtbl -> get_Playing(This,pVal)\r
-\r
-#define IShockwaveFlash_put_Playing(This,pVal) \\r
-    (This)->lpVtbl -> put_Playing(This,pVal)\r
-\r
-#define IShockwaveFlash_get_Quality(This,pVal) \\r
-    (This)->lpVtbl -> get_Quality(This,pVal)\r
-\r
-#define IShockwaveFlash_put_Quality(This,pVal) \\r
-    (This)->lpVtbl -> put_Quality(This,pVal)\r
-\r
-#define IShockwaveFlash_get_ScaleMode(This,pVal)       \\r
-    (This)->lpVtbl -> get_ScaleMode(This,pVal)\r
-\r
-#define IShockwaveFlash_put_ScaleMode(This,pVal)       \\r
-    (This)->lpVtbl -> put_ScaleMode(This,pVal)\r
-\r
-#define IShockwaveFlash_get_AlignMode(This,pVal)       \\r
-    (This)->lpVtbl -> get_AlignMode(This,pVal)\r
-\r
-#define IShockwaveFlash_put_AlignMode(This,pVal)       \\r
-    (This)->lpVtbl -> put_AlignMode(This,pVal)\r
-\r
-#define IShockwaveFlash_get_BackgroundColor(This,pVal) \\r
-    (This)->lpVtbl -> get_BackgroundColor(This,pVal)\r
-\r
-#define IShockwaveFlash_put_BackgroundColor(This,pVal) \\r
-    (This)->lpVtbl -> put_BackgroundColor(This,pVal)\r
-\r
-#define IShockwaveFlash_get_Loop(This,pVal)    \\r
-    (This)->lpVtbl -> get_Loop(This,pVal)\r
-\r
-#define IShockwaveFlash_put_Loop(This,pVal)    \\r
-    (This)->lpVtbl -> put_Loop(This,pVal)\r
-\r
-#define IShockwaveFlash_get_Movie(This,pVal)   \\r
-    (This)->lpVtbl -> get_Movie(This,pVal)\r
-\r
-#define IShockwaveFlash_put_Movie(This,pVal)   \\r
-    (This)->lpVtbl -> put_Movie(This,pVal)\r
-\r
-#define IShockwaveFlash_get_FrameNum(This,pVal)        \\r
-    (This)->lpVtbl -> get_FrameNum(This,pVal)\r
-\r
-#define IShockwaveFlash_put_FrameNum(This,pVal)        \\r
-    (This)->lpVtbl -> put_FrameNum(This,pVal)\r
-\r
-#define IShockwaveFlash_SetZoomRect(This,left,top,right,bottom)        \\r
-    (This)->lpVtbl -> SetZoomRect(This,left,top,right,bottom)\r
-\r
-#define IShockwaveFlash_Zoom(This,factor)      \\r
-    (This)->lpVtbl -> Zoom(This,factor)\r
-\r
-#define IShockwaveFlash_Pan(This,x,y,mode)     \\r
-    (This)->lpVtbl -> Pan(This,x,y,mode)\r
-\r
-#define IShockwaveFlash_Play(This)     \\r
-    (This)->lpVtbl -> Play(This)\r
-\r
-#define IShockwaveFlash_Stop(This)     \\r
-    (This)->lpVtbl -> Stop(This)\r
-\r
-#define IShockwaveFlash_Back(This)     \\r
-    (This)->lpVtbl -> Back(This)\r
-\r
-#define IShockwaveFlash_Forward(This)  \\r
-    (This)->lpVtbl -> Forward(This)\r
-\r
-#define IShockwaveFlash_Rewind(This)   \\r
-    (This)->lpVtbl -> Rewind(This)\r
-\r
-#define IShockwaveFlash_StopPlay(This) \\r
-    (This)->lpVtbl -> StopPlay(This)\r
-\r
-#define IShockwaveFlash_GotoFrame(This,FrameNum)       \\r
-    (This)->lpVtbl -> GotoFrame(This,FrameNum)\r
-\r
-#define IShockwaveFlash_CurrentFrame(This,FrameNum)    \\r
-    (This)->lpVtbl -> CurrentFrame(This,FrameNum)\r
-\r
-#define IShockwaveFlash_IsPlaying(This,Playing)        \\r
-    (This)->lpVtbl -> IsPlaying(This,Playing)\r
-\r
-#define IShockwaveFlash_PercentLoaded(This,percent)    \\r
-    (This)->lpVtbl -> PercentLoaded(This,percent)\r
-\r
-#define IShockwaveFlash_FrameLoaded(This,FrameNum,loaded)      \\r
-    (This)->lpVtbl -> FrameLoaded(This,FrameNum,loaded)\r
-\r
-#define IShockwaveFlash_FlashVersion(This,version)     \\r
-    (This)->lpVtbl -> FlashVersion(This,version)\r
-\r
-#define IShockwaveFlash_get_WMode(This,pVal)   \\r
-    (This)->lpVtbl -> get_WMode(This,pVal)\r
-\r
-#define IShockwaveFlash_put_WMode(This,pVal)   \\r
-    (This)->lpVtbl -> put_WMode(This,pVal)\r
-\r
-#define IShockwaveFlash_get_SAlign(This,pVal)  \\r
-    (This)->lpVtbl -> get_SAlign(This,pVal)\r
-\r
-#define IShockwaveFlash_put_SAlign(This,pVal)  \\r
-    (This)->lpVtbl -> put_SAlign(This,pVal)\r
-\r
-#define IShockwaveFlash_get_Menu(This,pVal)    \\r
-    (This)->lpVtbl -> get_Menu(This,pVal)\r
-\r
-#define IShockwaveFlash_put_Menu(This,pVal)    \\r
-    (This)->lpVtbl -> put_Menu(This,pVal)\r
-\r
-#define IShockwaveFlash_get_Base(This,pVal)    \\r
-    (This)->lpVtbl -> get_Base(This,pVal)\r
-\r
-#define IShockwaveFlash_put_Base(This,pVal)    \\r
-    (This)->lpVtbl -> put_Base(This,pVal)\r
-\r
-#define IShockwaveFlash_get_Scale(This,pVal)   \\r
-    (This)->lpVtbl -> get_Scale(This,pVal)\r
-\r
-#define IShockwaveFlash_put_Scale(This,pVal)   \\r
-    (This)->lpVtbl -> put_Scale(This,pVal)\r
-\r
-#define IShockwaveFlash_get_DeviceFont(This,pVal)      \\r
-    (This)->lpVtbl -> get_DeviceFont(This,pVal)\r
-\r
-#define IShockwaveFlash_put_DeviceFont(This,pVal)      \\r
-    (This)->lpVtbl -> put_DeviceFont(This,pVal)\r
-\r
-#define IShockwaveFlash_get_EmbedMovie(This,pVal)      \\r
-    (This)->lpVtbl -> get_EmbedMovie(This,pVal)\r
-\r
-#define IShockwaveFlash_put_EmbedMovie(This,pVal)      \\r
-    (This)->lpVtbl -> put_EmbedMovie(This,pVal)\r
-\r
-#define IShockwaveFlash_get_BGColor(This,pVal) \\r
-    (This)->lpVtbl -> get_BGColor(This,pVal)\r
-\r
-#define IShockwaveFlash_put_BGColor(This,pVal) \\r
-    (This)->lpVtbl -> put_BGColor(This,pVal)\r
-\r
-#define IShockwaveFlash_get_Quality2(This,pVal)        \\r
-    (This)->lpVtbl -> get_Quality2(This,pVal)\r
-\r
-#define IShockwaveFlash_put_Quality2(This,pVal)        \\r
-    (This)->lpVtbl -> put_Quality2(This,pVal)\r
-\r
-#define IShockwaveFlash_LoadMovie(This,layer,url)      \\r
-    (This)->lpVtbl -> LoadMovie(This,layer,url)\r
-\r
-#define IShockwaveFlash_TGotoFrame(This,target,FrameNum)       \\r
-    (This)->lpVtbl -> TGotoFrame(This,target,FrameNum)\r
-\r
-#define IShockwaveFlash_TGotoLabel(This,target,label)  \\r
-    (This)->lpVtbl -> TGotoLabel(This,target,label)\r
-\r
-#define IShockwaveFlash_TCurrentFrame(This,target,FrameNum)    \\r
-    (This)->lpVtbl -> TCurrentFrame(This,target,FrameNum)\r
-\r
-#define IShockwaveFlash_TCurrentLabel(This,target,pVal)        \\r
-    (This)->lpVtbl -> TCurrentLabel(This,target,pVal)\r
-\r
-#define IShockwaveFlash_TPlay(This,target)     \\r
-    (This)->lpVtbl -> TPlay(This,target)\r
-\r
-#define IShockwaveFlash_TStopPlay(This,target) \\r
-    (This)->lpVtbl -> TStopPlay(This,target)\r
-\r
-#define IShockwaveFlash_SetVariable(This,name,value)   \\r
-    (This)->lpVtbl -> SetVariable(This,name,value)\r
-\r
-#define IShockwaveFlash_GetVariable(This,name,pVal)    \\r
-    (This)->lpVtbl -> GetVariable(This,name,pVal)\r
-\r
-#define IShockwaveFlash_TSetProperty(This,target,property,value)       \\r
-    (This)->lpVtbl -> TSetProperty(This,target,property,value)\r
-\r
-#define IShockwaveFlash_TGetProperty(This,target,property,pVal)        \\r
-    (This)->lpVtbl -> TGetProperty(This,target,property,pVal)\r
-\r
-#define IShockwaveFlash_TCallFrame(This,target,FrameNum)       \\r
-    (This)->lpVtbl -> TCallFrame(This,target,FrameNum)\r
-\r
-#define IShockwaveFlash_TCallLabel(This,target,label)  \\r
-    (This)->lpVtbl -> TCallLabel(This,target,label)\r
-\r
-#define IShockwaveFlash_TSetPropertyNum(This,target,property,value)    \\r
-    (This)->lpVtbl -> TSetPropertyNum(This,target,property,value)\r
-\r
-#define IShockwaveFlash_TGetPropertyNum(This,target,property,pVal)     \\r
-    (This)->lpVtbl -> TGetPropertyNum(This,target,property,pVal)\r
-\r
-#define IShockwaveFlash_TGetPropertyAsNumber(This,target,property,pVal)        \\r
-    (This)->lpVtbl -> TGetPropertyAsNumber(This,target,property,pVal)\r
-\r
-#define IShockwaveFlash_get_SWRemote(This,pVal)        \\r
-    (This)->lpVtbl -> get_SWRemote(This,pVal)\r
-\r
-#define IShockwaveFlash_put_SWRemote(This,pVal)        \\r
-    (This)->lpVtbl -> put_SWRemote(This,pVal)\r
-\r
-#define IShockwaveFlash_get_FlashVars(This,pVal)       \\r
-    (This)->lpVtbl -> get_FlashVars(This,pVal)\r
-\r
-#define IShockwaveFlash_put_FlashVars(This,pVal)       \\r
-    (This)->lpVtbl -> put_FlashVars(This,pVal)\r
-\r
-#define IShockwaveFlash_get_AllowScriptAccess(This,pVal)       \\r
-    (This)->lpVtbl -> get_AllowScriptAccess(This,pVal)\r
-\r
-#define IShockwaveFlash_put_AllowScriptAccess(This,pVal)       \\r
-    (This)->lpVtbl -> put_AllowScriptAccess(This,pVal)\r
-\r
-#define IShockwaveFlash_get_MovieData(This,pVal)       \\r
-    (This)->lpVtbl -> get_MovieData(This,pVal)\r
-\r
-#define IShockwaveFlash_put_MovieData(This,pVal)       \\r
-    (This)->lpVtbl -> put_MovieData(This,pVal)\r
-\r
-#define IShockwaveFlash_get_InlineData(This,ppIUnknown)        \\r
-    (This)->lpVtbl -> get_InlineData(This,ppIUnknown)\r
-\r
-#define IShockwaveFlash_put_InlineData(This,ppIUnknown)        \\r
-    (This)->lpVtbl -> put_InlineData(This,ppIUnknown)\r
-\r
-#define IShockwaveFlash_get_SeamlessTabbing(This,pVal) \\r
-    (This)->lpVtbl -> get_SeamlessTabbing(This,pVal)\r
-\r
-#define IShockwaveFlash_put_SeamlessTabbing(This,pVal) \\r
-    (This)->lpVtbl -> put_SeamlessTabbing(This,pVal)\r
-\r
-#define IShockwaveFlash_EnforceLocalSecurity(This)     \\r
-    (This)->lpVtbl -> EnforceLocalSecurity(This)\r
-\r
-#define IShockwaveFlash_get_Profile(This,pVal) \\r
-    (This)->lpVtbl -> get_Profile(This,pVal)\r
-\r
-#define IShockwaveFlash_put_Profile(This,pVal) \\r
-    (This)->lpVtbl -> put_Profile(This,pVal)\r
-\r
-#define IShockwaveFlash_get_ProfileAddress(This,pVal)  \\r
-    (This)->lpVtbl -> get_ProfileAddress(This,pVal)\r
-\r
-#define IShockwaveFlash_put_ProfileAddress(This,pVal)  \\r
-    (This)->lpVtbl -> put_ProfileAddress(This,pVal)\r
-\r
-#define IShockwaveFlash_get_ProfilePort(This,pVal)     \\r
-    (This)->lpVtbl -> get_ProfilePort(This,pVal)\r
-\r
-#define IShockwaveFlash_put_ProfilePort(This,pVal)     \\r
-    (This)->lpVtbl -> put_ProfilePort(This,pVal)\r
-\r
-#define IShockwaveFlash_CallFunction(This,request,response)    \\r
-    (This)->lpVtbl -> CallFunction(This,request,response)\r
-\r
-#define IShockwaveFlash_SetReturnValue(This,returnValue)       \\r
-    (This)->lpVtbl -> SetReturnValue(This,returnValue)\r
-\r
-#define IShockwaveFlash_DisableLocalSecurity(This)     \\r
-    (This)->lpVtbl -> DisableLocalSecurity(This)\r
-\r
-#define IShockwaveFlash_get_AllowNetworking(This,pVal) \\r
-    (This)->lpVtbl -> get_AllowNetworking(This,pVal)\r
-\r
-#define IShockwaveFlash_put_AllowNetworking(This,pVal) \\r
-    (This)->lpVtbl -> put_AllowNetworking(This,pVal)\r
-\r
-#define IShockwaveFlash_get_AllowFullScreen(This,pVal) \\r
-    (This)->lpVtbl -> get_AllowFullScreen(This,pVal)\r
-\r
-#define IShockwaveFlash_put_AllowFullScreen(This,pVal) \\r
-    (This)->lpVtbl -> put_AllowFullScreen(This,pVal)\r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_ReadyState_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ long *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_ReadyState_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_TotalFrames_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ long *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_TotalFrames_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_Playing_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ VARIANT_BOOL *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_Playing_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_Playing_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ VARIANT_BOOL pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_Playing_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_Quality_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ int *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_Quality_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_Quality_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ int pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_Quality_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_ScaleMode_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ int *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_ScaleMode_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_ScaleMode_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ int pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_ScaleMode_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_AlignMode_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ int *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_AlignMode_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_AlignMode_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ int pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_AlignMode_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_BackgroundColor_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ long *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_BackgroundColor_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_BackgroundColor_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ long pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_BackgroundColor_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_Loop_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ VARIANT_BOOL *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_Loop_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_Loop_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ VARIANT_BOOL pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_Loop_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_Movie_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ BSTR *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_Movie_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_Movie_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_Movie_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_FrameNum_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ long *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_FrameNum_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_FrameNum_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ long pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_FrameNum_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_SetZoomRect_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ long left,\r
-    /* [in] */ long top,\r
-    /* [in] */ long right,\r
-    /* [in] */ long bottom);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_SetZoomRect_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_Zoom_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ int factor);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_Zoom_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_Pan_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ long x,\r
-    /* [in] */ long y,\r
-    /* [in] */ int mode);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_Pan_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_Play_Proxy( \r
-    IShockwaveFlash * This);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_Play_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_Stop_Proxy( \r
-    IShockwaveFlash * This);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_Stop_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_Back_Proxy( \r
-    IShockwaveFlash * This);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_Back_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_Forward_Proxy( \r
-    IShockwaveFlash * This);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_Forward_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_Rewind_Proxy( \r
-    IShockwaveFlash * This);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_Rewind_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_StopPlay_Proxy( \r
-    IShockwaveFlash * This);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_StopPlay_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_GotoFrame_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ long FrameNum);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_GotoFrame_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_CurrentFrame_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ long *FrameNum);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_CurrentFrame_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_IsPlaying_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ VARIANT_BOOL *Playing);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_IsPlaying_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_PercentLoaded_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ long *percent);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_PercentLoaded_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_FrameLoaded_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ long FrameNum,\r
-    /* [retval][out] */ VARIANT_BOOL *loaded);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_FrameLoaded_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_FlashVersion_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ long *version);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_FlashVersion_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_WMode_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ BSTR *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_WMode_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_WMode_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_WMode_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_SAlign_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ BSTR *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_SAlign_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_SAlign_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_SAlign_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_Menu_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ VARIANT_BOOL *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_Menu_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_Menu_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ VARIANT_BOOL pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_Menu_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_Base_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ BSTR *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_Base_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_Base_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_Base_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_Scale_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ BSTR *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_Scale_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_Scale_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_Scale_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_DeviceFont_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ VARIANT_BOOL *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_DeviceFont_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_DeviceFont_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ VARIANT_BOOL pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_DeviceFont_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_EmbedMovie_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ VARIANT_BOOL *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_EmbedMovie_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_EmbedMovie_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ VARIANT_BOOL pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_EmbedMovie_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_BGColor_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ BSTR *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_BGColor_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_BGColor_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_BGColor_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_Quality2_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ BSTR *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_Quality2_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_Quality2_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_Quality2_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_LoadMovie_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ int layer,\r
-    /* [in] */ BSTR url);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_LoadMovie_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_TGotoFrame_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR target,\r
-    /* [in] */ long FrameNum);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_TGotoFrame_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_TGotoLabel_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR target,\r
-    /* [in] */ BSTR label);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_TGotoLabel_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_TCurrentFrame_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR target,\r
-    /* [retval][out] */ long *FrameNum);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_TCurrentFrame_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_TCurrentLabel_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR target,\r
-    /* [retval][out] */ BSTR *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_TCurrentLabel_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_TPlay_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR target);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_TPlay_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_TStopPlay_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR target);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_TStopPlay_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_SetVariable_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR name,\r
-    /* [in] */ BSTR value);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_SetVariable_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_GetVariable_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR name,\r
-    /* [retval][out] */ BSTR *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_GetVariable_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_TSetProperty_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR target,\r
-    /* [in] */ int property,\r
-    /* [in] */ BSTR value);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_TSetProperty_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_TGetProperty_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR target,\r
-    /* [in] */ int property,\r
-    /* [retval][out] */ BSTR *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_TGetProperty_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_TCallFrame_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR target,\r
-    /* [in] */ int FrameNum);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_TCallFrame_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_TCallLabel_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR target,\r
-    /* [in] */ BSTR label);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_TCallLabel_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_TSetPropertyNum_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR target,\r
-    /* [in] */ int property,\r
-    /* [in] */ double value);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_TSetPropertyNum_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_TGetPropertyNum_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR target,\r
-    /* [in] */ int property,\r
-    /* [retval][out] */ double *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_TGetPropertyNum_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_TGetPropertyAsNumber_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR target,\r
-    /* [in] */ int property,\r
-    /* [retval][out] */ double *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_TGetPropertyAsNumber_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_SWRemote_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ BSTR *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_SWRemote_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_SWRemote_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_SWRemote_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_FlashVars_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ BSTR *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_FlashVars_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_FlashVars_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_FlashVars_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_AllowScriptAccess_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ BSTR *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_AllowScriptAccess_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_AllowScriptAccess_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_AllowScriptAccess_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_MovieData_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ BSTR *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_MovieData_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_MovieData_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_MovieData_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_InlineData_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ IUnknown **ppIUnknown);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_InlineData_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_InlineData_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ IUnknown *ppIUnknown);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_InlineData_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_SeamlessTabbing_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ VARIANT_BOOL *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_SeamlessTabbing_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_SeamlessTabbing_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ VARIANT_BOOL pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_SeamlessTabbing_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_EnforceLocalSecurity_Proxy( \r
-    IShockwaveFlash * This);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_EnforceLocalSecurity_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_Profile_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ VARIANT_BOOL *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_Profile_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_Profile_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ VARIANT_BOOL pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_Profile_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_ProfileAddress_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ BSTR *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_ProfileAddress_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_ProfileAddress_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_ProfileAddress_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_ProfilePort_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ long *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_ProfilePort_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_ProfilePort_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ long pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_ProfilePort_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_CallFunction_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR request,\r
-    /* [retval][out] */ BSTR *response);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_CallFunction_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_SetReturnValue_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR returnValue);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_SetReturnValue_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_DisableLocalSecurity_Proxy( \r
-    IShockwaveFlash * This);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_DisableLocalSecurity_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_AllowNetworking_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ BSTR *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_AllowNetworking_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_AllowNetworking_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_AllowNetworking_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_get_AllowFullScreen_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [retval][out] */ BSTR *pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_get_AllowFullScreen_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IShockwaveFlash_put_AllowFullScreen_Proxy( \r
-    IShockwaveFlash * This,\r
-    /* [in] */ BSTR pVal);\r
-\r
-\r
-void __RPC_STUB IShockwaveFlash_put_AllowFullScreen_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-\r
-#endif         /* __IShockwaveFlash_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef ___IShockwaveFlashEvents_DISPINTERFACE_DEFINED__\r
-#define ___IShockwaveFlashEvents_DISPINTERFACE_DEFINED__\r
-\r
-/* dispinterface _IShockwaveFlashEvents */\r
-/* [hidden][helpstring][uuid] */ \r
-\r
-\r
-EXTERN_C const IID DIID__IShockwaveFlashEvents;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-\r
-    MIDL_INTERFACE("D27CDB6D-AE6D-11CF-96B8-444553540000")\r
-    _IShockwaveFlashEvents : public IDispatch\r
-    {\r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct _IShockwaveFlashEventsVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            _IShockwaveFlashEvents * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            _IShockwaveFlashEvents * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            _IShockwaveFlashEvents * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( \r
-            _IShockwaveFlashEvents * This,\r
-            /* [out] */ UINT *pctinfo);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( \r
-            _IShockwaveFlashEvents * This,\r
-            /* [in] */ UINT iTInfo,\r
-            /* [in] */ LCID lcid,\r
-            /* [out] */ ITypeInfo **ppTInfo);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( \r
-            _IShockwaveFlashEvents * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [size_is][in] */ LPOLESTR *rgszNames,\r
-            /* [in] */ UINT cNames,\r
-            /* [in] */ LCID lcid,\r
-            /* [size_is][out] */ DISPID *rgDispId);\r
-        \r
-        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( \r
-            _IShockwaveFlashEvents * This,\r
-            /* [in] */ DISPID dispIdMember,\r
-            /* [in] */ REFIID riid,\r
-            /* [in] */ LCID lcid,\r
-            /* [in] */ WORD wFlags,\r
-            /* [out][in] */ DISPPARAMS *pDispParams,\r
-            /* [out] */ VARIANT *pVarResult,\r
-            /* [out] */ EXCEPINFO *pExcepInfo,\r
-            /* [out] */ UINT *puArgErr);\r
-        \r
-        END_INTERFACE\r
-    } _IShockwaveFlashEventsVtbl;\r
-\r
-    interface _IShockwaveFlashEvents\r
-    {\r
-        CONST_VTBL struct _IShockwaveFlashEventsVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define _IShockwaveFlashEvents_QueryInterface(This,riid,ppvObject)     \\r
-    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)\r
-\r
-#define _IShockwaveFlashEvents_AddRef(This)    \\r
-    (This)->lpVtbl -> AddRef(This)\r
-\r
-#define _IShockwaveFlashEvents_Release(This)   \\r
-    (This)->lpVtbl -> Release(This)\r
-\r
-\r
-#define _IShockwaveFlashEvents_GetTypeInfoCount(This,pctinfo)  \\r
-    (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)\r
-\r
-#define _IShockwaveFlashEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo)   \\r
-    (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)\r
-\r
-#define _IShockwaveFlashEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \\r
-    (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\r
-\r
-#define _IShockwaveFlashEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)   \\r
-    (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-#endif         /* ___IShockwaveFlashEvents_DISPINTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IFlashFactory_INTERFACE_DEFINED__\r
-#define __IFlashFactory_INTERFACE_DEFINED__\r
-\r
-/* interface IFlashFactory */\r
-/* [object][helpstring][uuid] */ \r
-\r
-\r
-EXTERN_C const IID IID_IFlashFactory;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("D27CDB70-AE6D-11CF-96B8-444553540000")\r
-    IFlashFactory : public IUnknown\r
-    {\r
-    public:\r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IFlashFactoryVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IFlashFactory * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IFlashFactory * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IFlashFactory * This);\r
-        \r
-        END_INTERFACE\r
-    } IFlashFactoryVtbl;\r
-\r
-    interface IFlashFactory\r
-    {\r
-        CONST_VTBL struct IFlashFactoryVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IFlashFactory_QueryInterface(This,riid,ppvObject)      \\r
-    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)\r
-\r
-#define IFlashFactory_AddRef(This)     \\r
-    (This)->lpVtbl -> AddRef(This)\r
-\r
-#define IFlashFactory_Release(This)    \\r
-    (This)->lpVtbl -> Release(This)\r
-\r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IFlashFactory_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IFlashObjectInterface_INTERFACE_DEFINED__\r
-#define __IFlashObjectInterface_INTERFACE_DEFINED__\r
-\r
-/* interface IFlashObjectInterface */\r
-/* [object][helpstring][uuid] */ \r
-\r
-\r
-EXTERN_C const IID IID_IFlashObjectInterface;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("D27CDB72-AE6D-11CF-96B8-444553540000")\r
-    IFlashObjectInterface : public IDispatchEx\r
-    {\r
-    public:\r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IFlashObjectInterfaceVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IFlashObjectInterface * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IFlashObjectInterface * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IFlashObjectInterface * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( \r
-            IFlashObjectInterface * This,\r
-            /* [out] */ UINT *pctinfo);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( \r
-            IFlashObjectInterface * This,\r
-            /* [in] */ UINT iTInfo,\r
-            /* [in] */ LCID lcid,\r
-            /* [out] */ ITypeInfo **ppTInfo);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( \r
-            IFlashObjectInterface * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [size_is][in] */ LPOLESTR *rgszNames,\r
-            /* [in] */ UINT cNames,\r
-            /* [in] */ LCID lcid,\r
-            /* [size_is][out] */ DISPID *rgDispId);\r
-        \r
-        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( \r
-            IFlashObjectInterface * This,\r
-            /* [in] */ DISPID dispIdMember,\r
-            /* [in] */ REFIID riid,\r
-            /* [in] */ LCID lcid,\r
-            /* [in] */ WORD wFlags,\r
-            /* [out][in] */ DISPPARAMS *pDispParams,\r
-            /* [out] */ VARIANT *pVarResult,\r
-            /* [out] */ EXCEPINFO *pExcepInfo,\r
-            /* [out] */ UINT *puArgErr);\r
-        \r
-        HRESULT ( __stdcall *GetDispID )( \r
-            IFlashObjectInterface * This,\r
-            /* [in] */ BSTR bstrName,\r
-            /* [in] */ unsigned long grfdex,\r
-            /* [out] */ long *pid);\r
-        \r
-        HRESULT ( __stdcall *RemoteInvokeEx )( \r
-            IFlashObjectInterface * This,\r
-            /* [in] */ long id,\r
-            /* [in] */ unsigned long lcid,\r
-            /* [in] */ unsigned long dwFlags,\r
-            /* [in] */ DISPPARAMS *pdp,\r
-            /* [out] */ VARIANT *pvarRes,\r
-            /* [out] */ EXCEPINFO *pei,\r
-            /* [in] */ IServiceProvider *pspCaller,\r
-            /* [in] */ unsigned int cvarRefArg,\r
-            /* [in] */ unsigned int *rgiRefArg,\r
-            /* [out][in] */ VARIANT *rgvarRefArg);\r
-        \r
-        HRESULT ( __stdcall *DeleteMemberByName )( \r
-            IFlashObjectInterface * This,\r
-            /* [in] */ BSTR bstrName,\r
-            /* [in] */ unsigned long grfdex);\r
-        \r
-        HRESULT ( __stdcall *DeleteMemberByDispID )( \r
-            IFlashObjectInterface * This,\r
-            /* [in] */ long id);\r
-        \r
-        HRESULT ( __stdcall *GetMemberProperties )( \r
-            IFlashObjectInterface * This,\r
-            /* [in] */ long id,\r
-            /* [in] */ unsigned long grfdexFetch,\r
-            /* [out] */ unsigned long *pgrfdex);\r
-        \r
-        HRESULT ( __stdcall *GetMemberName )( \r
-            IFlashObjectInterface * This,\r
-            /* [in] */ long id,\r
-            /* [out] */ BSTR *pbstrName);\r
-        \r
-        HRESULT ( __stdcall *GetNextDispID )( \r
-            IFlashObjectInterface * This,\r
-            /* [in] */ unsigned long grfdex,\r
-            /* [in] */ long id,\r
-            /* [out] */ long *pid);\r
-        \r
-        HRESULT ( __stdcall *GetNameSpaceParent )( \r
-            IFlashObjectInterface * This,\r
-            /* [out] */ IUnknown **ppunk);\r
-        \r
-        END_INTERFACE\r
-    } IFlashObjectInterfaceVtbl;\r
-\r
-    interface IFlashObjectInterface\r
-    {\r
-        CONST_VTBL struct IFlashObjectInterfaceVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IFlashObjectInterface_QueryInterface(This,riid,ppvObject)      \\r
-    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)\r
-\r
-#define IFlashObjectInterface_AddRef(This)     \\r
-    (This)->lpVtbl -> AddRef(This)\r
-\r
-#define IFlashObjectInterface_Release(This)    \\r
-    (This)->lpVtbl -> Release(This)\r
-\r
-\r
-#define IFlashObjectInterface_GetTypeInfoCount(This,pctinfo)   \\r
-    (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)\r
-\r
-#define IFlashObjectInterface_GetTypeInfo(This,iTInfo,lcid,ppTInfo)    \\r
-    (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)\r
-\r
-#define IFlashObjectInterface_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)  \\r
-    (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\r
-\r
-#define IFlashObjectInterface_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)    \\r
-    (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\r
-\r
-\r
-#define IFlashObjectInterface_GetDispID(This,bstrName,grfdex,pid)      \\r
-    (This)->lpVtbl -> GetDispID(This,bstrName,grfdex,pid)\r
-\r
-#define IFlashObjectInterface_RemoteInvokeEx(This,id,lcid,dwFlags,pdp,pvarRes,pei,pspCaller,cvarRefArg,rgiRefArg,rgvarRefArg)  \\r
-    (This)->lpVtbl -> RemoteInvokeEx(This,id,lcid,dwFlags,pdp,pvarRes,pei,pspCaller,cvarRefArg,rgiRefArg,rgvarRefArg)\r
-\r
-#define IFlashObjectInterface_DeleteMemberByName(This,bstrName,grfdex) \\r
-    (This)->lpVtbl -> DeleteMemberByName(This,bstrName,grfdex)\r
-\r
-#define IFlashObjectInterface_DeleteMemberByDispID(This,id)    \\r
-    (This)->lpVtbl -> DeleteMemberByDispID(This,id)\r
-\r
-#define IFlashObjectInterface_GetMemberProperties(This,id,grfdexFetch,pgrfdex) \\r
-    (This)->lpVtbl -> GetMemberProperties(This,id,grfdexFetch,pgrfdex)\r
-\r
-#define IFlashObjectInterface_GetMemberName(This,id,pbstrName) \\r
-    (This)->lpVtbl -> GetMemberName(This,id,pbstrName)\r
-\r
-#define IFlashObjectInterface_GetNextDispID(This,grfdex,id,pid)        \\r
-    (This)->lpVtbl -> GetNextDispID(This,grfdex,id,pid)\r
-\r
-#define IFlashObjectInterface_GetNameSpaceParent(This,ppunk)   \\r
-    (This)->lpVtbl -> GetNameSpaceParent(This,ppunk)\r
-\r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-\r
-#endif         /* __IFlashObjectInterface_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IDispatchEx_INTERFACE_DEFINED__\r
-#define __IDispatchEx_INTERFACE_DEFINED__\r
-\r
-/* interface IDispatchEx */\r
-/* [object][uuid] */ \r
-\r
-\r
-EXTERN_C const IID IID_IDispatchEx;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("A6EF9860-C720-11D0-9337-00A0C90DCAA9")\r
-    IDispatchEx : public IDispatch\r
-    {\r
-    public:\r
-        virtual HRESULT __stdcall GetDispID( \r
-            /* [in] */ BSTR bstrName,\r
-            /* [in] */ unsigned long grfdex,\r
-            /* [out] */ long *pid) = 0;\r
-        \r
-        virtual HRESULT __stdcall RemoteInvokeEx( \r
-            /* [in] */ long id,\r
-            /* [in] */ unsigned long lcid,\r
-            /* [in] */ unsigned long dwFlags,\r
-            /* [in] */ DISPPARAMS *pdp,\r
-            /* [out] */ VARIANT *pvarRes,\r
-            /* [out] */ EXCEPINFO *pei,\r
-            /* [in] */ IServiceProvider *pspCaller,\r
-            /* [in] */ unsigned int cvarRefArg,\r
-            /* [in] */ unsigned int *rgiRefArg,\r
-            /* [out][in] */ VARIANT *rgvarRefArg) = 0;\r
-        \r
-        virtual HRESULT __stdcall DeleteMemberByName( \r
-            /* [in] */ BSTR bstrName,\r
-            /* [in] */ unsigned long grfdex) = 0;\r
-        \r
-        virtual HRESULT __stdcall DeleteMemberByDispID( \r
-            /* [in] */ long id) = 0;\r
-        \r
-        virtual HRESULT __stdcall GetMemberProperties( \r
-            /* [in] */ long id,\r
-            /* [in] */ unsigned long grfdexFetch,\r
-            /* [out] */ unsigned long *pgrfdex) = 0;\r
-        \r
-        virtual HRESULT __stdcall GetMemberName( \r
-            /* [in] */ long id,\r
-            /* [out] */ BSTR *pbstrName) = 0;\r
-        \r
-        virtual HRESULT __stdcall GetNextDispID( \r
-            /* [in] */ unsigned long grfdex,\r
-            /* [in] */ long id,\r
-            /* [out] */ long *pid) = 0;\r
-        \r
-        virtual HRESULT __stdcall GetNameSpaceParent( \r
-            /* [out] */ IUnknown **ppunk) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IDispatchExVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IDispatchEx * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IDispatchEx * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IDispatchEx * This);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( \r
-            IDispatchEx * This,\r
-            /* [out] */ UINT *pctinfo);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( \r
-            IDispatchEx * This,\r
-            /* [in] */ UINT iTInfo,\r
-            /* [in] */ LCID lcid,\r
-            /* [out] */ ITypeInfo **ppTInfo);\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( \r
-            IDispatchEx * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [size_is][in] */ LPOLESTR *rgszNames,\r
-            /* [in] */ UINT cNames,\r
-            /* [in] */ LCID lcid,\r
-            /* [size_is][out] */ DISPID *rgDispId);\r
-        \r
-        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( \r
-            IDispatchEx * This,\r
-            /* [in] */ DISPID dispIdMember,\r
-            /* [in] */ REFIID riid,\r
-            /* [in] */ LCID lcid,\r
-            /* [in] */ WORD wFlags,\r
-            /* [out][in] */ DISPPARAMS *pDispParams,\r
-            /* [out] */ VARIANT *pVarResult,\r
-            /* [out] */ EXCEPINFO *pExcepInfo,\r
-            /* [out] */ UINT *puArgErr);\r
-        \r
-        HRESULT ( __stdcall *GetDispID )( \r
-            IDispatchEx * This,\r
-            /* [in] */ BSTR bstrName,\r
-            /* [in] */ unsigned long grfdex,\r
-            /* [out] */ long *pid);\r
-        \r
-        HRESULT ( __stdcall *RemoteInvokeEx )( \r
-            IDispatchEx * This,\r
-            /* [in] */ long id,\r
-            /* [in] */ unsigned long lcid,\r
-            /* [in] */ unsigned long dwFlags,\r
-            /* [in] */ DISPPARAMS *pdp,\r
-            /* [out] */ VARIANT *pvarRes,\r
-            /* [out] */ EXCEPINFO *pei,\r
-            /* [in] */ IServiceProvider *pspCaller,\r
-            /* [in] */ unsigned int cvarRefArg,\r
-            /* [in] */ unsigned int *rgiRefArg,\r
-            /* [out][in] */ VARIANT *rgvarRefArg);\r
-        \r
-        HRESULT ( __stdcall *DeleteMemberByName )( \r
-            IDispatchEx * This,\r
-            /* [in] */ BSTR bstrName,\r
-            /* [in] */ unsigned long grfdex);\r
-        \r
-        HRESULT ( __stdcall *DeleteMemberByDispID )( \r
-            IDispatchEx * This,\r
-            /* [in] */ long id);\r
-        \r
-        HRESULT ( __stdcall *GetMemberProperties )( \r
-            IDispatchEx * This,\r
-            /* [in] */ long id,\r
-            /* [in] */ unsigned long grfdexFetch,\r
-            /* [out] */ unsigned long *pgrfdex);\r
-        \r
-        HRESULT ( __stdcall *GetMemberName )( \r
-            IDispatchEx * This,\r
-            /* [in] */ long id,\r
-            /* [out] */ BSTR *pbstrName);\r
-        \r
-        HRESULT ( __stdcall *GetNextDispID )( \r
-            IDispatchEx * This,\r
-            /* [in] */ unsigned long grfdex,\r
-            /* [in] */ long id,\r
-            /* [out] */ long *pid);\r
-        \r
-        HRESULT ( __stdcall *GetNameSpaceParent )( \r
-            IDispatchEx * This,\r
-            /* [out] */ IUnknown **ppunk);\r
-        \r
-        END_INTERFACE\r
-    } IDispatchExVtbl;\r
-\r
-    interface IDispatchEx\r
-    {\r
-        CONST_VTBL struct IDispatchExVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IDispatchEx_QueryInterface(This,riid,ppvObject)        \\r
-    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)\r
-\r
-#define IDispatchEx_AddRef(This)       \\r
-    (This)->lpVtbl -> AddRef(This)\r
-\r
-#define IDispatchEx_Release(This)      \\r
-    (This)->lpVtbl -> Release(This)\r
-\r
-\r
-#define IDispatchEx_GetTypeInfoCount(This,pctinfo)     \\r
-    (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)\r
-\r
-#define IDispatchEx_GetTypeInfo(This,iTInfo,lcid,ppTInfo)      \\r
-    (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)\r
-\r
-#define IDispatchEx_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)    \\r
-    (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\r
-\r
-#define IDispatchEx_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)      \\r
-    (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\r
-\r
-\r
-#define IDispatchEx_GetDispID(This,bstrName,grfdex,pid)        \\r
-    (This)->lpVtbl -> GetDispID(This,bstrName,grfdex,pid)\r
-\r
-#define IDispatchEx_RemoteInvokeEx(This,id,lcid,dwFlags,pdp,pvarRes,pei,pspCaller,cvarRefArg,rgiRefArg,rgvarRefArg)    \\r
-    (This)->lpVtbl -> RemoteInvokeEx(This,id,lcid,dwFlags,pdp,pvarRes,pei,pspCaller,cvarRefArg,rgiRefArg,rgvarRefArg)\r
-\r
-#define IDispatchEx_DeleteMemberByName(This,bstrName,grfdex)   \\r
-    (This)->lpVtbl -> DeleteMemberByName(This,bstrName,grfdex)\r
-\r
-#define IDispatchEx_DeleteMemberByDispID(This,id)      \\r
-    (This)->lpVtbl -> DeleteMemberByDispID(This,id)\r
-\r
-#define IDispatchEx_GetMemberProperties(This,id,grfdexFetch,pgrfdex)   \\r
-    (This)->lpVtbl -> GetMemberProperties(This,id,grfdexFetch,pgrfdex)\r
-\r
-#define IDispatchEx_GetMemberName(This,id,pbstrName)   \\r
-    (This)->lpVtbl -> GetMemberName(This,id,pbstrName)\r
-\r
-#define IDispatchEx_GetNextDispID(This,grfdex,id,pid)  \\r
-    (This)->lpVtbl -> GetNextDispID(This,grfdex,id,pid)\r
-\r
-#define IDispatchEx_GetNameSpaceParent(This,ppunk)     \\r
-    (This)->lpVtbl -> GetNameSpaceParent(This,ppunk)\r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-HRESULT __stdcall IDispatchEx_GetDispID_Proxy( \r
-    IDispatchEx * This,\r
-    /* [in] */ BSTR bstrName,\r
-    /* [in] */ unsigned long grfdex,\r
-    /* [out] */ long *pid);\r
-\r
-\r
-void __RPC_STUB IDispatchEx_GetDispID_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-HRESULT __stdcall IDispatchEx_RemoteInvokeEx_Proxy( \r
-    IDispatchEx * This,\r
-    /* [in] */ long id,\r
-    /* [in] */ unsigned long lcid,\r
-    /* [in] */ unsigned long dwFlags,\r
-    /* [in] */ DISPPARAMS *pdp,\r
-    /* [out] */ VARIANT *pvarRes,\r
-    /* [out] */ EXCEPINFO *pei,\r
-    /* [in] */ IServiceProvider *pspCaller,\r
-    /* [in] */ unsigned int cvarRefArg,\r
-    /* [in] */ unsigned int *rgiRefArg,\r
-    /* [out][in] */ VARIANT *rgvarRefArg);\r
-\r
-\r
-void __RPC_STUB IDispatchEx_RemoteInvokeEx_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-HRESULT __stdcall IDispatchEx_DeleteMemberByName_Proxy( \r
-    IDispatchEx * This,\r
-    /* [in] */ BSTR bstrName,\r
-    /* [in] */ unsigned long grfdex);\r
-\r
-\r
-void __RPC_STUB IDispatchEx_DeleteMemberByName_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-HRESULT __stdcall IDispatchEx_DeleteMemberByDispID_Proxy( \r
-    IDispatchEx * This,\r
-    /* [in] */ long id);\r
-\r
-\r
-void __RPC_STUB IDispatchEx_DeleteMemberByDispID_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-HRESULT __stdcall IDispatchEx_GetMemberProperties_Proxy( \r
-    IDispatchEx * This,\r
-    /* [in] */ long id,\r
-    /* [in] */ unsigned long grfdexFetch,\r
-    /* [out] */ unsigned long *pgrfdex);\r
-\r
-\r
-void __RPC_STUB IDispatchEx_GetMemberProperties_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-HRESULT __stdcall IDispatchEx_GetMemberName_Proxy( \r
-    IDispatchEx * This,\r
-    /* [in] */ long id,\r
-    /* [out] */ BSTR *pbstrName);\r
-\r
-\r
-void __RPC_STUB IDispatchEx_GetMemberName_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-HRESULT __stdcall IDispatchEx_GetNextDispID_Proxy( \r
-    IDispatchEx * This,\r
-    /* [in] */ unsigned long grfdex,\r
-    /* [in] */ long id,\r
-    /* [out] */ long *pid);\r
-\r
-\r
-void __RPC_STUB IDispatchEx_GetNextDispID_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-HRESULT __stdcall IDispatchEx_GetNameSpaceParent_Proxy( \r
-    IDispatchEx * This,\r
-    /* [out] */ IUnknown **ppunk);\r
-\r
-\r
-void __RPC_STUB IDispatchEx_GetNameSpaceParent_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-\r
-#endif         /* __IDispatchEx_INTERFACE_DEFINED__ */\r
-\r
-\r
-#ifndef __IServiceProvider_INTERFACE_DEFINED__\r
-#define __IServiceProvider_INTERFACE_DEFINED__\r
-\r
-/* interface IServiceProvider */\r
-/* [object][uuid] */ \r
-\r
-\r
-EXTERN_C const IID IID_IServiceProvider;\r
-\r
-#if defined(__cplusplus) && !defined(CINTERFACE)\r
-    \r
-    MIDL_INTERFACE("6D5140C1-7436-11CE-8034-00AA006009FA")\r
-    IServiceProvider : public IUnknown\r
-    {\r
-    public:\r
-        virtual HRESULT __stdcall RemoteQueryService( \r
-            /* [in] */ GUID *guidService,\r
-            /* [in] */ GUID *riid,\r
-            /* [out] */ IUnknown **ppvObject) = 0;\r
-        \r
-    };\r
-    \r
-#else  /* C style interface */\r
-\r
-    typedef struct IServiceProviderVtbl\r
-    {\r
-        BEGIN_INTERFACE\r
-        \r
-        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \r
-            IServiceProvider * This,\r
-            /* [in] */ REFIID riid,\r
-            /* [iid_is][out] */ void **ppvObject);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *AddRef )( \r
-            IServiceProvider * This);\r
-        \r
-        ULONG ( STDMETHODCALLTYPE *Release )( \r
-            IServiceProvider * This);\r
-        \r
-        HRESULT ( __stdcall *RemoteQueryService )( \r
-            IServiceProvider * This,\r
-            /* [in] */ GUID *guidService,\r
-            /* [in] */ GUID *riid,\r
-            /* [out] */ IUnknown **ppvObject);\r
-        \r
-        END_INTERFACE\r
-    } IServiceProviderVtbl;\r
-\r
-    interface IServiceProvider\r
-    {\r
-        CONST_VTBL struct IServiceProviderVtbl *lpVtbl;\r
-    };\r
-\r
-    \r
-\r
-#ifdef COBJMACROS\r
-\r
-\r
-#define IServiceProvider_QueryInterface(This,riid,ppvObject)   \\r
-    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)\r
-\r
-#define IServiceProvider_AddRef(This)  \\r
-    (This)->lpVtbl -> AddRef(This)\r
-\r
-#define IServiceProvider_Release(This) \\r
-    (This)->lpVtbl -> Release(This)\r
-\r
-\r
-#define IServiceProvider_RemoteQueryService(This,guidService,riid,ppvObject)   \\r
-    (This)->lpVtbl -> RemoteQueryService(This,guidService,riid,ppvObject)\r
-\r
-#endif /* COBJMACROS */\r
-\r
-\r
-#endif         /* C style interface */\r
-\r
-\r
-\r
-HRESULT __stdcall IServiceProvider_RemoteQueryService_Proxy( \r
-    IServiceProvider * This,\r
-    /* [in] */ GUID *guidService,\r
-    /* [in] */ GUID *riid,\r
-    /* [out] */ IUnknown **ppvObject);\r
-\r
-\r
-void __RPC_STUB IServiceProvider_RemoteQueryService_Stub(\r
-    IRpcStubBuffer *This,\r
-    IRpcChannelBuffer *_pRpcChannelBuffer,\r
-    PRPC_MESSAGE _pRpcMessage,\r
-    DWORD *_pdwStubPhase);\r
-\r
-\r
-\r
-#endif         /* __IServiceProvider_INTERFACE_DEFINED__ */\r
-\r
-\r
-EXTERN_C const CLSID CLSID_ShockwaveFlash;\r
-\r
-#ifdef __cplusplus\r
-\r
-class DECLSPEC_UUID("D27CDB6E-AE6D-11CF-96B8-444553540000")\r
-ShockwaveFlash;\r
-#endif\r
-\r
-EXTERN_C const CLSID CLSID_FlashObjectInterface;\r
-\r
-#ifdef __cplusplus\r
-\r
-class DECLSPEC_UUID("D27CDB71-AE6D-11CF-96B8-444553540000")\r
-FlashObjectInterface;\r
-#endif\r
-#endif /* __ShockwaveFlashObjects_LIBRARY_DEFINED__ */\r
-\r
-/* Additional Prototypes for ALL interfaces */\r
-\r
-/* end of Additional Prototypes */\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif\r
-\r
-\r
diff --git a/server/producers/targa/TargaManager.cpp b/server/producers/targa/TargaManager.cpp
deleted file mode 100644 (file)
index 082b9fd..0000000
+++ /dev/null
@@ -1,372 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "TargaManager.h"\r
-#include "..\..\frame\FrameManager.h"\r
-#include "..\..\frame\FrameMediaController.h"\r
-#include "..\..\utils\FileInputStream.h"\r
-#include "..\..\fileinfo.h"\r
-#include "..\..\frame\buffers\StaticFrameBuffer.h"\r
-\r
-namespace caspar {\r
-\r
-using namespace caspar::utils;\r
-\r
-///////////////////////////////\r
-//  TargaProducer declaration\r
-//\r
-class TargaProducer : public MediaProducer, public FrameMediaController\r
-{\r
-public:\r
-       explicit TargaProducer(PixmapDataPtr pImage);\r
-       virtual ~TargaProducer();\r
-\r
-       virtual IMediaController* QueryController(const tstring& id);\r
-\r
-       virtual bool Initialize(FrameManagerPtr pFrameManager);\r
-       virtual FrameBuffer& GetFrameBuffer() {\r
-               return frameBuffer_;\r
-       }\r
-\r
-private:\r
-       StaticFrameBuffer frameBuffer_;\r
-       caspar::utils::PixmapDataPtr pImage_;\r
-};\r
-\r
-//////////////////////////////\r
-//  TargaManager definition\r
-//\r
-TargaManager::TargaManager()\r
-{\r
-       _extensions.push_back(TEXT("tga"));\r
-}\r
-\r
-TargaManager::~TargaManager()\r
-{}\r
-\r
-MediaProducerPtr TargaManager::CreateProducer(const tstring& filename) {\r
-       MediaProducerPtr result;\r
-       if(filename.length() > 0) {\r
-               utils::InputStreamPtr pTgaFile(new utils::FileInputStream(filename));\r
-               if(pTgaFile->Open()) {\r
-                       PixmapDataPtr pImage;\r
-                       if(TargaManager::Load(pTgaFile, pImage)) {\r
-                               result = MediaProducerPtr(new TargaProducer(pImage));\r
-                       }\r
-               }\r
-       }\r
-       return result;\r
-}\r
-\r
-bool TargaManager::getFileInfo(FileInfo* pFileInfo)\r
-{\r
-       if(pFileInfo != 0) {\r
-               pFileInfo->length = 1;\r
-               pFileInfo->type = TEXT("still");\r
-               pFileInfo->encoding = TEXT("TGA");\r
-               return true;\r
-       }\r
-       return false;\r
-}\r
-\r
-PixmapDataPtr TargaManager::CropPadToFrameFormat(PixmapDataPtr pSource, const FrameFormatDescription& fmtDesc)\r
-{\r
-       if(pSource->width == fmtDesc.width && pSource->height == fmtDesc.height)\r
-               return pSource;\r
-\r
-       unsigned short colsToCopy = pSource->width;\r
-       unsigned short rowsToCopy = pSource->height;\r
-\r
-       int offsetX = 0;\r
-       if(pSource->width > fmtDesc.width)\r
-       {\r
-               offsetX = (pSource->width-fmtDesc.width)/2;\r
-               colsToCopy = fmtDesc.width;\r
-       }\r
-\r
-       int offsetY = 0;\r
-       if(pSource->height > fmtDesc.height)\r
-       {\r
-               offsetY = (pSource->height-fmtDesc.height)/2;\r
-               rowsToCopy = fmtDesc.height;\r
-       }\r
-\r
-       int bytesPerPixel = pSource->bpp;\r
-\r
-       PixmapDataPtr pNewImage(new caspar::utils::PixmapData(fmtDesc.width, fmtDesc.height, bytesPerPixel));\r
-       unsigned char* pNewImageData = pNewImage->GetDataPtr();\r
-\r
-       //initialize new buffer with zeroes\r
-       memset(pNewImageData, 0, fmtDesc.width*fmtDesc.height*bytesPerPixel);\r
-\r
-       for(int i=0;i<rowsToCopy;++i)\r
-               memcpy(&(pNewImageData[bytesPerPixel*fmtDesc.width*i]), &(pSource->GetDataPtr()[bytesPerPixel*(pSource->width*(i+offsetY)+offsetX)]), bytesPerPixel*colsToCopy);\r
-\r
-       return pNewImage;\r
-}\r
-\r
-\r
-bool TargaManager::Load(utils::InputStreamPtr spTGA, PixmapDataPtr& pResult)\r
-{\r
-       utils::InputStream* pTGA = spTGA.get();\r
-       PixmapDataPtr pImage(new utils::PixmapData());\r
-\r
-       bool returnValue = true;\r
-       //correct headers to compare to\r
-       char headerUncompressed[12]     = {0,0, 2,0,0,0,0,0,0,0,0,0};\r
-       char headerCompressed[12]       = {0,0,10,0,0,0,0,0,0,0,0,0};\r
-\r
-       unsigned char header[12];\r
-       unsigned char tgaInfo[6];\r
-       unsigned int nImageSize = 0, nBytesPerPixel = 0;\r
-\r
-       unsigned char *pColorBuffer = NULL;\r
-\r
-       unsigned int i;\r
-       unsigned int nBytesPerRow;\r
-       int nCurrentRow = 0;\r
-\r
-       char rowDirection = -1;\r
-\r
-       pTGA->Read(header, 12); //read header to be able to process compressed files in one way and uncompressed files in another\r
-       pTGA->Read(tgaInfo, 6); //read image-info such as height and width\r
-\r
-       int width = tgaInfo[1] * 256 + tgaInfo[0];      //extract width\r
-       int height = tgaInfo[3] * 256 + tgaInfo[2];     //extract height\r
-       int bits = tgaInfo[4];                                          //extract bits/pixel\r
-\r
-       pImage->Set(width, height, 4);\r
-       unsigned char* pImageData = pImage->GetDataPtr();\r
-\r
-       rowDirection = -1;\r
-       if(tgaInfo[5] & 0x20)\r
-               rowDirection = 1;\r
-\r
-       //calculate usefull numbers\r
-       nBytesPerPixel = bits / 8;\r
-       nBytesPerRow = pImage->width * nBytesPerPixel;\r
-\r
-       //internal data always have 4 bytes / pixel\r
-       nImageSize = pImage->width * pImage->height * 4;\r
-\r
-       if(nBytesPerPixel != 3 && nBytesPerPixel != 4)\r
-       {\r
-               returnValue = false;\r
-               goto tgaLoaderExit;\r
-       }\r
-\r
-       memset(pImageData, 0, nImageSize);\r
-\r
-       //Workaround for image identification field problem\r
-       {\r
-               unsigned char iifSize = header[0];\r
-               unsigned char temp[256];\r
-               if(iifSize > 0)\r
-                       pTGA->Read(temp, iifSize);\r
-       }\r
-       header[0] = 0;\r
-       header[7] = 0;\r
-       //END workaround\r
-\r
-       //We've got an uncompressed file on our hands, take care of it\r
-       if(memcmp(headerUncompressed, header, 12) == 0)\r
-       {\r
-               unsigned char* pRowBuffer = new unsigned char[nBytesPerRow];\r
-\r
-               int rowIndex=0;\r
-               if(rowDirection == -1)\r
-                       nCurrentRow = height-1;\r
-               else\r
-                       nCurrentRow = 0;\r
-\r
-               for(; rowIndex < height; nCurrentRow+=rowDirection, ++rowIndex)\r
-               {\r
-                       if(pTGA->Read(pRowBuffer, nBytesPerRow) < nBytesPerRow)\r
-                       {\r
-                               delete[] pRowBuffer;\r
-                               returnValue = false;\r
-                               goto tgaLoaderExit;\r
-                       }\r
\r
-                       //Swap color-channels\r
-                       for(i=0;i<pImage->width;i++)\r
-                       {\r
-                               pImageData[4*(nCurrentRow*width+i)+0] = pRowBuffer[i*nBytesPerPixel+0];\r
-                               pImageData[4*(nCurrentRow*width+i)+1] = pRowBuffer[i*nBytesPerPixel+1];\r
-                               pImageData[4*(nCurrentRow*width+i)+2] = pRowBuffer[i*nBytesPerPixel+2];\r
-                               if(nBytesPerPixel == 4)\r
-                                       pImageData[4*(nCurrentRow*width+i)+3] = pRowBuffer[i*nBytesPerPixel+3];\r
-                               else\r
-                                       pImageData[4*(nCurrentRow*width+i)+3] = 255;\r
-                       }\r
-               }\r
-               delete[] pRowBuffer;\r
-       }\r
-\r
-       //wasn't uncompressed, is it compressed? in that case, take care of it!\r
-       else if(memcmp(headerCompressed, header, 12) == 0)\r
-       {\r
-               int rowIndex=0;\r
-               if(rowDirection == -1)\r
-                       nCurrentRow = pImage->height-1;\r
-               else\r
-                       nCurrentRow = 0;\r
-\r
-               nBytesPerRow = width * 4;\r
-\r
-               int nPixelCount = height * width;\r
-               int nCurrentPixel = 0;\r
-               int nCurrentByte = 0;\r
-\r
-               pColorBuffer = new unsigned char[nBytesPerPixel];\r
-\r
-               do\r
-               {\r
-                       unsigned char chunkHeader = 0;\r
-\r
-                       //read chunkHeader - exit on error\r
-                       if(pTGA->Read(&chunkHeader, 1) < 0)\r
-                       {\r
-                               returnValue = false;\r
-                               goto tgaLoaderExit;\r
-                       }\r
-                       \r
-                       if(chunkHeader < 128) //it's a RAW-header\r
-                       {\r
-                               chunkHeader++;\r
-                               \r
-                               for(unsigned short counter=0; counter<chunkHeader; counter++)\r
-                               {\r
-                                       //read pixeldata - exit on error\r
-                                       if(pTGA->Read(pColorBuffer, nBytesPerPixel) < nBytesPerPixel)\r
-                                       {\r
-                                               returnValue = false;\r
-                                               goto tgaLoaderExit;\r
-                                       }\r
-\r
-                                       unsigned int thisByte = nCurrentRow*nBytesPerRow+nCurrentByte;\r
-\r
-\r
-                                       pImageData[thisByte+0] = pColorBuffer[0];\r
-                                       pImageData[thisByte+1] = pColorBuffer[1];\r
-                                       pImageData[thisByte+2] = pColorBuffer[2];\r
-                                       if(nBytesPerPixel == 4)\r
-                                               pImageData[thisByte+3] = pColorBuffer[3];\r
-                                       else\r
-                                               pImageData[thisByte+3] = 255;\r
-\r
-                                       nCurrentByte += 4;\r
-                                       nCurrentPixel++;\r
-                                       if(nCurrentByte >= nBytesPerRow)\r
-                                       {\r
-                                               nCurrentRow +=  rowDirection;\r
-                                               ++rowIndex;\r
-                                               nCurrentByte = 0;\r
-                                       }\r
-                               }\r
-                       }\r
-                       else //it's a RLE header\r
-                       {\r
-                               chunkHeader -= 127;\r
-\r
-                               //read pixeldata - exit on error\r
-                               if(pTGA->Read(pColorBuffer, nBytesPerPixel) < nBytesPerPixel)\r
-                               {\r
-                                       returnValue = false;\r
-                                       goto tgaLoaderExit;\r
-                               }\r
-\r
-                               //repeat this pixel\r
-                               for(unsigned short counter=0; counter<chunkHeader; counter++)\r
-                               {\r
-                                       unsigned int thisByte = nCurrentRow*nBytesPerRow+nCurrentByte;\r
-\r
-\r
-                                       pImageData[thisByte+0] = pColorBuffer[0];\r
-                                       pImageData[thisByte+1] = pColorBuffer[1];\r
-                                       pImageData[thisByte+2] = pColorBuffer[2];\r
-                                       if(nBytesPerPixel == 4)\r
-                                               pImageData[thisByte+3] = pColorBuffer[3];\r
-                                       else\r
-                                               pImageData[thisByte+3] = 255;\r
-\r
-                                       nCurrentByte += 4;\r
-                                       nCurrentPixel++;\r
-                                       if(nCurrentByte >= nBytesPerRow)\r
-                                       {\r
-                                               nCurrentRow += rowDirection;\r
-                                               ++rowIndex;\r
-                                               nCurrentByte = 0;\r
-                                       }\r
-                               }\r
-                       }\r
-               }while(nCurrentPixel<nPixelCount && rowIndex < pImage->height);\r
-       }\r
-       else\r
-               returnValue = false;\r
-\r
-tgaLoaderExit:\r
-       if(pColorBuffer != NULL)\r
-               delete[] pColorBuffer;\r
-\r
-       if(returnValue)\r
-               pResult = pImage;\r
-\r
-       return returnValue;\r
-}\r
-\r
-\r
-///////////////////////////////\r
-//  TargaProducer definition\r
-//\r
-TargaProducer::TargaProducer(PixmapDataPtr pImage) : pImage_(pImage) {\r
-}\r
-\r
-TargaProducer::~TargaProducer() {\r
-}\r
-\r
-IMediaController* TargaProducer::QueryController(const tstring& id) {\r
-       if(id == TEXT("FrameController"))\r
-               return this;\r
-       \r
-       return 0;\r
-}\r
-\r
-bool TargaProducer::Initialize(FrameManagerPtr pFrameManager) {\r
-       if(pFrameManager != 0) {\r
-               FramePtr pFrame = pFrameManager->CreateFrame();\r
-               if(pFrame != 0 && pFrame->GetDataPtr() != 0) {\r
-                       PixmapDataPtr pResult = TargaManager::CropPadToFrameFormat(pImage_, pFrameManager->GetFrameFormatDescription());\r
-\r
-                       unsigned char* pFrameData = pFrame->GetDataPtr();\r
-                       unsigned char* pImageData = pResult->GetDataPtr();\r
-\r
-                       memcpy(pFrameData, pImageData, pFrame->GetDataSize());\r
-\r
-                       frameBuffer_.push_back(pFrame);\r
-                       return true;\r
-               }\r
-       }\r
-       return false;\r
-}\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/producers/targa/TargaManager.h b/server/producers/targa/TargaManager.h
deleted file mode 100644 (file)
index bb1e16e..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include "..\..\frame\Frame.h"\r
-#include "..\..\MediaManager.h"\r
-#include "..\..\MediaProducer.h"\r
-#include "..\..\utils\InputStream.h"\r
-#include "..\..\utils\PixmapData.h"\r
-\r
-namespace caspar {\r
-\r
-class FileInfo;\r
-\r
-class TargaManager : public IMediaManager\r
-{\r
-public:\r
-       TargaManager();\r
-       virtual ~TargaManager();\r
-\r
-       virtual MediaProducerPtr CreateProducer(const tstring& filename);\r
-       virtual bool getFileInfo(FileInfo* pFileInfo);\r
-\r
-       static utils::PixmapDataPtr CropPadToFrameFormat(utils::PixmapDataPtr pSource, const FrameFormatDescription& fmtDesc);\r
-       static bool Load(utils::InputStreamPtr pTGA, utils::PixmapDataPtr& pResult);\r
-};\r
-\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/producers/targascroll/TargaScrollManager.cpp b/server/producers/targascroll/TargaScrollManager.cpp
deleted file mode 100644 (file)
index b19205c..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\StdAfx.h"\r
-\r
-#include "TargaScrollManager.h"\r
-#include "TargaScrollProducer.h"\r
-#include "..\..\FileInfo.h"\r
-#include "..\..\MediaManager.h"\r
-\r
-namespace caspar {\r
-\r
-TargaScrollMediaManager::TargaScrollMediaManager() : IMediaManager()\r
-{\r
-       IMediaManager::_extensions.push_back(TEXT("stga"));\r
-}\r
-\r
-TargaScrollMediaManager::~TargaScrollMediaManager()\r
-{\r
-}\r
-\r
-MediaProducerPtr TargaScrollMediaManager::CreateProducer(const tstring& filename)\r
-{\r
-       TargaScrollMediaProducerPtr pTargaScrollMediaProducer(new TargaScrollMediaProducer());\r
-       if (!pTargaScrollMediaProducer->Load(filename))\r
-               pTargaScrollMediaProducer.reset();\r
-\r
-       return pTargaScrollMediaProducer;\r
-}\r
-\r
-bool TargaScrollMediaManager::getFileInfo(FileInfo* pFileInfo)\r
-{\r
-       pFileInfo->length = 1;\r
-       pFileInfo->type = TEXT("movie");\r
-       pFileInfo->encoding = TEXT("NA");\r
-\r
-       return true;\r
-}\r
-\r
-}
\ No newline at end of file
diff --git a/server/producers/targascroll/TargaScrollManager.h b/server/producers/targascroll/TargaScrollManager.h
deleted file mode 100644 (file)
index 13059a6..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef TARGASCROLLMEIDAMANAGER_H\r
-#define TARGASCROLLMEIDAMANAGER_H\r
-\r
-#include "..\..\MediaManager.h"\r
-\r
-namespace caspar {\r
-\r
-class TargaScrollMediaProducer;\r
-\r
-class TargaScrollMediaManager : public IMediaManager\r
-{\r
-       public:\r
-               TargaScrollMediaManager();\r
-               virtual ~TargaScrollMediaManager();\r
-\r
-               virtual bool getFileInfo(FileInfo* pFileInfo);\r
-               virtual MediaProducerPtr CreateProducer(const tstring& filename);\r
-\r
-       private:\r
-               typedef std::tr1::shared_ptr<TargaScrollMediaProducer> TargaScrollMediaProducerPtr;\r
-};\r
-\r
-}\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/producers/targascroll/TargaScrollProducer.cpp b/server/producers/targascroll/TargaScrollProducer.cpp
deleted file mode 100644 (file)
index abc2b76..0000000
+++ /dev/null
@@ -1,293 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\StdAfx.h"\r
-\r
-#include "TargaScrollProducer.h"\r
-#include "..\Targa\TargaManager.h"\r
-#include "..\..\MediaProducer.h"\r
-#include "..\..\FileInfo.h"\r
-#include "..\..\utils\FileInputStream.h"\r
-#include "..\..\utils\PixmapData.h"\r
-\r
-#include <boost/lexical_cast.hpp>\r
-\r
-namespace caspar {\r
-using namespace utils;\r
-\r
-int TargaScrollMediaProducer::DEFAULT_SPEED = 4;\r
-\r
-TargaScrollMediaProducer::TargaScrollMediaProducer() : initializeEvent_(FALSE, FALSE)\r
-{\r
-}\r
-\r
-TargaScrollMediaProducer::~TargaScrollMediaProducer()\r
-{\r
-       this->workerThread.Stop();\r
-}\r
-\r
-bool TargaScrollMediaProducer::Load(const tstring& filename)\r
-{\r
-       if (filename.length() > 0)\r
-       {\r
-               tstring::size_type pos = filename.find_last_of(TEXT('_'));\r
-               if(pos != tstring::npos && (pos+1) < filename.size()) {\r
-                       tstring speedStr = filename.substr(pos + 1);\r
-                       pos = speedStr.find_first_of(TEXT('.'));\r
-                       if(pos != tstring::npos)\r
-                               speedStr = speedStr.substr(0, pos);             \r
-\r
-                       try\r
-                       {\r
-                               speed = boost::lexical_cast<int, tstring>(speedStr);\r
-                       }\r
-                       catch(...)\r
-                       {\r
-                               speed = DEFAULT_SPEED;\r
-                       }\r
-               }\r
-\r
-               utils::InputStreamPtr pTgaFile(new utils::FileInputStream(filename));\r
-               if (pTgaFile->Open())\r
-                       return TargaManager::Load(pTgaFile, this->pImage);\r
-       }\r
-\r
-       return false;\r
-}\r
-\r
-IMediaController* TargaScrollMediaProducer::QueryController(const tstring& id) {\r
-       if(id == TEXT("FrameController"))\r
-               return this;\r
-       \r
-       return 0;\r
-}\r
-\r
-bool TargaScrollMediaProducer::Initialize(FrameManagerPtr pFrameManager) {\r
-       if(pFrameManager != this->pFrameManager_) {\r
-               if(pFrameManager == 0)\r
-                       return false;\r
-\r
-               if(!workerThread.IsRunning()) {\r
-                       pFrameManager_ = pFrameManager;\r
-                       return workerThread.Start(this);\r
-               }\r
-               else\r
-               {\r
-                       {\r
-                               Lock lock(*this);\r
-\r
-                               if(pFrameManager_->GetFrameFormatDescription().width != pFrameManager->GetFrameFormatDescription().width || pFrameManager_->GetFrameFormatDescription().height != pFrameManager->GetFrameFormatDescription().height) {\r
-                                       return false;\r
-                               }\r
-\r
-                               pTempFrameManager_ = pFrameManager;\r
-                       }\r
-\r
-                       initializeEvent_.Set();\r
-               }\r
-       }\r
-\r
-       return true;\r
-}\r
-\r
-\r
-void TargaScrollMediaProducer::PadImageToFrameFormat()\r
-{\r
-       const FrameFormatDescription& formatDescription = pFrameManager_->GetFrameFormatDescription();\r
-\r
-       const unsigned int PIXMAP_WIDTH = max(this->pImage->width, formatDescription.width);\r
-       const unsigned int PIXMAP_HEIGHT = max(this->pImage->height, formatDescription.height);\r
-\r
-       utils::PixmapDataPtr pNewImage(new utils::PixmapData(PIXMAP_WIDTH, PIXMAP_HEIGHT, this->pImage->bpp));\r
-\r
-       unsigned char* pNewImageData = pNewImage->GetDataPtr();\r
-       unsigned char* pImageData = this->pImage->GetDataPtr();\r
-\r
-       memset(pNewImageData, 0, pNewImage->width * pNewImage->height * pNewImage->bpp);\r
-\r
-       for (int i = 0; i < this->pImage->height; ++i)\r
-               memcpy(&pNewImageData[i* pNewImage->width * pNewImage->bpp], &pImageData[i* this->pImage->width * this->pImage->bpp], this->pImage->width * this->pImage->bpp);\r
-\r
-       this->pImage = pNewImage;\r
-}\r
-\r
-FramePtr TargaScrollMediaProducer::FillVideoFrame(FramePtr pFrame)\r
-{\r
-       const FrameFormatDescription& formatDescription = pFrameManager_->GetFrameFormatDescription();\r
-\r
-       const short deltaX = this->direction == DirectionFlag::ScrollLeft ? this->speed : -this->speed;\r
-       const short deltaY = this->direction == DirectionFlag::ScrollUp ? this->speed : -this->speed;\r
-\r
-       unsigned char* pFrameData = pFrame->GetDataPtr();\r
-       unsigned char* pImageData = this->pImage->GetDataPtr();\r
-       \r
-       bool isFirstFrame = false, isLastFrame = false;\r
-       if (this->direction == DirectionFlag::ScrollUp || this->direction == DirectionFlag::ScrollDown)\r
-       {\r
-               for (int i = 0; i < formatDescription.height; ++i)\r
-               {\r
-                       int srcRow = i + this->offset; // Assume progressive.\r
-                       if (formatDescription.mode == Interlaced)\r
-                       {\r
-                               const int nextOffset = this->offset + (deltaY * 2);\r
-                               isFirstFrame = this->offset == 0 || this->offset == (this->pImage->height - formatDescription.height);\r
-                               isLastFrame = nextOffset <= 0 || nextOffset >= (this->pImage->height - formatDescription.height);\r
-                               if (!isFirstFrame && !isLastFrame)\r
-                                       srcRow = (i % 2 == 0) ? i + this->offset : min(i + this->offset + deltaY, this->pImage->height);\r
-                       }\r
-\r
-                       int dstInxex = i * formatDescription.width * this->pImage->bpp;\r
-                       int srcIndex = srcRow * formatDescription.width * this->pImage->bpp;\r
-                       int size = formatDescription.width * this->pImage->bpp;\r
-\r
-                       memcpy(&pFrameData[dstInxex], &pImageData[srcIndex], size);     \r
-               }\r
-\r
-               if (formatDescription.mode == Interlaced && !isFirstFrame && !isLastFrame)\r
-                       this->offset += deltaY * 2;\r
-               else\r
-                       this->offset += deltaY;\r
-       }\r
-       else\r
-       {\r
-               for (int i = 0; i < formatDescription.height; ++i)\r
-               {\r
-                       int correctOffset = this->offset; // Assume progressive.\r
-                       if (formatDescription.mode == Interlaced)\r
-                       {\r
-                               const int nextOffset = this->offset + (deltaX * 2); // Next offset.\r
-                               isFirstFrame = this->offset == 0 || this->offset == (this->pImage->width - formatDescription.width);\r
-                               isLastFrame = nextOffset <= 0 || nextOffset >= (this->pImage->width - formatDescription.width);\r
-                               if (!isFirstFrame && !isLastFrame)\r
-                                       correctOffset = (i % 2 == 0) ? this->offset: this->offset + deltaX;\r
-                       }\r
-\r
-                       int dstIndex = i * formatDescription.width * this->pImage->bpp;\r
-                       int srcIndex = (i * this->pImage->width + correctOffset) * this->pImage->bpp;\r
-                       \r
-                       int stopOffset = min(correctOffset + formatDescription .width, this->pImage->width);\r
-                       int size = (stopOffset - correctOffset) * this->pImage->bpp;\r
-\r
-                       memcpy(&pFrameData[dstIndex], &pImageData[srcIndex], size);\r
-               }\r
-\r
-               if (formatDescription.mode == Interlaced && !isFirstFrame && !isLastFrame)\r
-                       this->offset += deltaX * 2;\r
-               else\r
-                       this->offset += deltaX;\r
-       }\r
-\r
-       return pFrame;\r
-}\r
-\r
-void TargaScrollMediaProducer::Run(HANDLE stopEvent)\r
-{\r
-       LOG << LogLevel::Verbose << TEXT("Targa scroll thread started");\r
-\r
-       const short waitHandleCount = 3;\r
-       HANDLE waitHandles[waitHandleCount] = { stopEvent, initializeEvent_, this->frameBuffer.GetWriteWaitHandle() };\r
-\r
-       int formatWidth = 0;\r
-       int formatHeight = 0;\r
-       {\r
-               const FrameFormatDescription& formatDescription = pFrameManager_->GetFrameFormatDescription();\r
-               formatWidth = formatDescription.width;\r
-               formatHeight = formatDescription.height;\r
-\r
-               //determine whether to scroll horizontally or vertically\r
-               if((this->pImage->width - formatWidth) > (pImage->height - formatHeight))\r
-                       direction = (speed < 0) ? DirectionFlag::ScrollRight : DirectionFlag::ScrollLeft;\r
-               else\r
-                       direction = (speed < 0) ? DirectionFlag::ScrollDown : DirectionFlag::ScrollUp;\r
-\r
-               this->speed = abs(speed / formatDescription.fps);\r
-               this->offset = 0;\r
-               if (this->direction == DirectionFlag::ScrollDown)\r
-                       this->offset = this->pImage->height - formatHeight;\r
-               else if (this->direction == DirectionFlag::ScrollRight)\r
-                       this->offset = this->pImage->width - formatWidth;\r
-       }\r
-\r
-\r
-       if (formatWidth > this->pImage->width || formatHeight > this->pImage->height)\r
-               PadImageToFrameFormat();\r
-\r
-       bool quitLoop = false;\r
-       while (!quitLoop)\r
-       {\r
-               HRESULT waitResult = WaitForMultipleObjects(waitHandleCount, waitHandles, FALSE, 1000);\r
-               switch(waitResult)\r
-               {\r
-                       case WAIT_OBJECT_0 + 0:         // Stop.\r
-                       case WAIT_FAILED:                       // Wait failiure.\r
-                               quitLoop = true;\r
-                               continue;\r
-                       case WAIT_TIMEOUT:                      // Nothing has happened.\r
-                               continue;\r
-                       case WAIT_OBJECT_0 + 1:         //initialize\r
-                               {\r
-                                       Lock lock(*this);\r
-                                       pFrameManager_ = pTempFrameManager_;\r
-                                       pTempFrameManager_.reset();\r
-                               }\r
-                               break;\r
-\r
-                       case WAIT_OBJECT_0 + 2:         // Framebuffer is ready to be filled.\r
-                       {\r
-                               // Render next frame.\r
-                               FramePtr pFrame = pFrameManager_->CreateFrame();\r
-                               pFrame = FillVideoFrame(pFrame);\r
-                               this->frameBuffer.push_back(pFrame);\r
-\r
-                               // Should we stop scrolling?\r
-                               if ((this->direction == DirectionFlag::ScrollDown || this->direction == DirectionFlag::ScrollRight) && this->offset <= 0)\r
-                                       quitLoop = true;\r
-                               else if (this->direction == DirectionFlag::ScrollUp && this->offset >= (this->pImage->height - formatHeight))\r
-                                       quitLoop = true;\r
-                               else if (this->direction == DirectionFlag::ScrollLeft && this->offset >= (this->pImage->width - formatWidth))\r
-                                       quitLoop = true;\r
-                       }\r
-               }\r
-       }\r
-       \r
-       // Render a null frame to indicate EOF.\r
-       FramePtr pNullFrame;\r
-       this->frameBuffer.push_back(pNullFrame);\r
-\r
-       LOG << LogLevel::Verbose << TEXT("Targa scroll thread ended");\r
-}\r
-\r
-bool TargaScrollMediaProducer::OnUnhandledException(const std::exception& ex) throw()\r
-{\r
-       try\r
-       {\r
-               FramePtr pNullFrame;\r
-               this->frameBuffer.push_back(pNullFrame);\r
-\r
-               LOG << LogLevel::Critical << TEXT("UNHANDLED EXCEPTION in targa scroll thread. Message: ") << ex.what();\r
-       }\r
-       catch (...)\r
-       {\r
-       }\r
-\r
-       return false;\r
-}\r
-\r
-}
\ No newline at end of file
diff --git a/server/producers/targascroll/TargaScrollProducer.h b/server/producers/targascroll/TargaScrollProducer.h
deleted file mode 100644 (file)
index 11c5fc4..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef TARGASCROLLMediaProducer_H\r
-#define TARGASCROLLMediaProducer_H\r
-\r
-#include "..\..\MediaProducer.h"\r
-#include "..\..\utils\Thread.h"\r
-#include "..\..\utils\Lockable.h"\r
-#include "..\..\frame\Framemediacontroller.h"\r
-#include "..\..\frame\buffers\MotionFrameBuffer.h"\r
-\r
-namespace caspar {\r
-namespace utils {\r
-       class PixmapData;\r
-       typedef std::tr1::shared_ptr<PixmapData> PixmapDataPtr;\r
-}\r
-\r
-class TargaScrollMediaProducer : public MediaProducer, public FrameMediaController, public utils::IRunnable, utils::LockableObject\r
-{\r
-       static int DEFAULT_SPEED;\r
-public:\r
-       explicit TargaScrollMediaProducer();\r
-       TargaScrollMediaProducer(const TargaScrollMediaProducer&);\r
-       virtual ~TargaScrollMediaProducer();\r
-\r
-       bool Load(const tstring& filename);\r
-\r
-       virtual IMediaController* QueryController(const tstring& id);\r
-       virtual bool Initialize(FrameManagerPtr pFrameManager);\r
-       virtual FrameBuffer& GetFrameBuffer() {\r
-               return frameBuffer;\r
-       }\r
-\r
-       virtual void Run(HANDLE stopEvent);\r
-       virtual bool OnUnhandledException(const std::exception& ex) throw();\r
-\r
-private:\r
-       void PadImageToFrameFormat();\r
-       FramePtr FillVideoFrame(FramePtr pFrame);\r
-\r
-       struct DirectionFlag\r
-       {\r
-               enum DirectionFlagEnum\r
-               {\r
-                       ScrollUp = 1,\r
-                       ScrollDown,\r
-                       ScrollLeft,\r
-                       ScrollRight\r
-               };\r
-       };\r
-\r
-       int offset;\r
-       short speed;\r
-\r
-       utils::Thread workerThread;\r
-       utils::PixmapDataPtr pImage;\r
-\r
-       MotionFrameBuffer frameBuffer;\r
-       DirectionFlag::DirectionFlagEnum direction;\r
-\r
-       utils::Event initializeEvent_;\r
-       FrameManagerPtr pFrameManager_;\r
-       FrameManagerPtr pTempFrameManager_;\r
-};\r
-\r
-}\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/resources/Server.rc b/server/resources/Server.rc
deleted file mode 100644 (file)
index 0a1899d..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-// Microsoft Visual C++ generated resource script.\r
-//\r
-#include "resource.h"\r
-\r
-#define APSTUDIO_READONLY_SYMBOLS\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Generated from the TEXTINCLUDE 2 resource.\r
-//\r
-#include "afxres.h"\r
-#include "VersionNo.h"\r
-#include "server.rc2"\r
-/////////////////////////////////////////////////////////////////////////////\r
-#undef APSTUDIO_READONLY_SYMBOLS\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-// English (U.S.) resources\r
-\r
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r
-#ifdef _WIN32\r
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r
-#pragma code_page(1252)\r
-#endif //_WIN32\r
-\r
-#ifdef APSTUDIO_INVOKED\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// TEXTINCLUDE\r
-//\r
-\r
-1 TEXTINCLUDE \r
-BEGIN\r
-    "resource.h\0"\r
-END\r
-\r
-2 TEXTINCLUDE \r
-BEGIN\r
-    "#include ""afxres.h""\r\n"\r
-    "#include ""VersionNo.h""\r\n"\r
-    "#include ""server.rc2\0"\r
-END\r
-\r
-3 TEXTINCLUDE \r
-BEGIN\r
-    "\r\0"\r
-END\r
-\r
-#endif    // APSTUDIO_INVOKED\r
-\r
-#endif    // English (U.S.) resources\r
-/////////////////////////////////////////////////////////////////////////////\r
-\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-// Swedish resources\r
-\r
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_SVE)\r
-#ifdef _WIN32\r
-LANGUAGE LANG_SWEDISH, SUBLANG_DEFAULT\r
-#pragma code_page(1252)\r
-#endif //_WIN32\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Icon\r
-//\r
-\r
-// Icon with lowest ID value placed first to ensure application icon\r
-// remains consistent on all systems.\r
-IDI_ICON1               ICON                    "icon2.ico"\r
-#endif    // Swedish resources\r
-/////////////////////////////////////////////////////////////////////////////\r
-\r
-\r
-\r
-#ifndef APSTUDIO_INVOKED\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Generated from the TEXTINCLUDE 3 resource.\r
-//\r
-\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-#endif    // not APSTUDIO_INVOKED\r
-\r
diff --git a/server/resources/icon2.ico b/server/resources/icon2.ico
deleted file mode 100644 (file)
index 3e6ad48..0000000
Binary files a/server/resources/icon2.ico and /dev/null differ
diff --git a/server/resources/server.rc2 b/server/resources/server.rc2
deleted file mode 100644 (file)
index 81ec9d5..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-////////////////////////////////////////////////////////////\r
-// Version\r
-//\r
-#include "VersionNo.h"\r
-VS_VERSION_INFO VERSIONINFO\r
-FILEVERSION VERSION_FILE\r
-PRODUCTVERSION VERSION_PRODUCT\r
-\r
-BEGIN\r
-    BLOCK "StringFileInfo"\r
-    BEGIN\r
-        BLOCK "040904b0"\r
-        BEGIN\r
-            VALUE "CompanyName", "Sveriges Television AB\0"\r
-            VALUE "FileVersion", VERSION_FILESTR\r
-            VALUE "LegalCopyright", "Copyright (C) 2007\0"\r
-            VALUE "ProductName", "Caspar CG\0"\r
-            VALUE "ProductVersion", VERSION_PRODUCTSTR\r
-        END\r
-    END\r
-    BLOCK "VarFileInfo"\r
-    BEGIN\r
-        VALUE "Translation", 0x409, 1200\r
-    END\r
-END\r
diff --git a/server/string_convert.h b/server/string_convert.h
deleted file mode 100644 (file)
index a51da9c..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _STRING_CONVERT_H_\r
-#define _STRING_CONVERT_H_\r
-\r
-#include <locale>\r
-#include <iostream>\r
-#include <string>\r
-#include <sstream>\r
-#include <boost/lexical_cast.hpp>\r
-       \r
-namespace caspar { namespace utils {\r
-\r
-std::wstring widen(const std::string& str, const std::locale& locale = std::locale())\r
-{\r
-       std::wstringstream wsstr ;\r
-       wsstr.imbue(locale);\r
-       const std::ctype<wchar_t>& ctfacet = std::use_facet<std::ctype<wchar_t>>(wsstr.getloc()) ;\r
-       for(size_t i = 0 ;i < str.size(); ++i)\r
-               wsstr << ctfacet.widen(str[i]) ;\r
-       return wsstr.str() ;\r
-}\r
-       \r
-std::string narrow(const std::wstring& str, const std::locale& locale = std::locale())\r
-{\r
-       std::stringstream sstr;\r
-       sstr.imbue(locale);\r
-       const std::ctype<char>& ctfacet = std::use_facet<std::ctype<char>>(sstr.getloc());\r
-       for(size_t i = 0; i < str.size(); ++i)\r
-               sstr << ctfacet.narrow(str[i], 0) ;\r
-       return sstr.str() ;\r
-}\r
-\r
-std::string narrow_to_latin1(const std::wstring& wideString)\r
-{\r
-       std::string destBuffer;\r
-       //28591 = ISO 8859-1 Latin I\r
-       int bytesWritten = 0;\r
-       int multibyteBufferCapacity = WideCharToMultiByte(28591, 0, wideString.c_str(), -1, 0, 0, nullptr, nullptr);\r
-       if(multibyteBufferCapacity > 0) \r
-       {\r
-               destBuffer.resize(multibyteBufferCapacity);\r
-               bytesWritten = WideCharToMultiByte(28591, 0, wideString.c_str(), -1, &destBuffer[0], destBuffer.size(), nullptr, nullptr);\r
-       }\r
-       destBuffer.resize(bytesWritten);\r
-       return destBuffer;\r
-}\r
-\r
-template <typename T>\r
-T lexical_cast_or_default(const std::wstring str, T defaultValue)\r
-{\r
-       try\r
-       {\r
-               if(!str.empty())\r
-                       return boost::lexical_cast<T>(str);\r
-       }\r
-       catch(...){}\r
-       return defaultValue;\r
-}\r
-\r
-}}\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/utils/Allocator.h b/server/utils/Allocator.h
deleted file mode 100644 (file)
index f54706b..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include <vector>\r
-#include "lockable.h"\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-// TODO: (R.N) Create a scalable allocator with seperate memory pools for different threads, aka. tbb::scalable_allocator\r
-\r
-template<unsigned char BlocksInChunk = 8, unsigned char Alignment = 16>\r
-class FixedAllocator : private utils::LockableObject\r
-{\r
-       struct Chunk\r
-       {\r
-               void Init(std::size_t blockSize, unsigned char blocks);\r
-               void Destroy();\r
-\r
-               void* Allocate();\r
-               void Deallocate(void* p);\r
-\r
-               unsigned char blocksAvailable_;\r
-               unsigned char* GetDataPtr() const {\r
-                       return pData_;\r
-               }\r
-               unsigned char GetAlignmentOffset() const {\r
-                       return alignmentOffset_;\r
-               }\r
-\r
-       private:\r
-               unsigned char alignmentOffset_;\r
-               unsigned char firstAvailableBlock_;\r
-               unsigned char* pData_;\r
-               unsigned int blockSize_;\r
-       };\r
-       typedef std::vector<Chunk> Chunks;\r
-\r
-       FixedAllocator(const FixedAllocator&);\r
-       FixedAllocator& operator=(const FixedAllocator&);\r
-public:\r
-       explicit FixedAllocator(unsigned int blockSize);\r
-\r
-       ~FixedAllocator();\r
-\r
-       void* Allocate();\r
-       void Deallocate(void* p);\r
-\r
-private:\r
-       bool IsPtrInChunk(void* p, const Chunk& c) {\r
-               return (p >= c.GetDataPtr() && p < (c.GetDataPtr() + chunkSize + c.GetAlignmentOffset()));\r
-       }\r
-\r
-       unsigned int blockSize_;\r
-       const std::size_t chunkSize;\r
-       Chunks chunks_;\r
-\r
-       Chunk* pAllocChunk_;\r
-       Chunk* pDeallocChunk_;\r
-};\r
-typedef std::tr1::shared_ptr<FixedAllocator<> > FixedAllocatorPtr;\r
-\r
-template<unsigned char BlocksInChunk, unsigned char Alignment>\r
-void FixedAllocator<BlocksInChunk, Alignment>::Chunk::Init(std::size_t blockSize, unsigned char blocks) {\r
-       pData_ = new unsigned char[blockSize*blocks + Alignment];\r
-       alignmentOffset_ = static_cast<unsigned char>(Alignment - (reinterpret_cast<std::size_t>(pData_) % Alignment));\r
-       firstAvailableBlock_ = 0;\r
-       blocksAvailable_ = blocks;\r
-       blockSize_ = blockSize;\r
-\r
-       unsigned char i = 0;\r
-       unsigned char* p = pData_ + alignmentOffset_;\r
-       while(i < blocks) {\r
-               *p = ++i;\r
-               p += blockSize;\r
-       }\r
-}\r
-template<unsigned char BlocksInChunk, unsigned char Alignment>\r
-void FixedAllocator<BlocksInChunk, Alignment>::Chunk::Destroy() {\r
-       if(pData_ != 0) {\r
-               delete[] pData_;\r
-               pData_ = 0;\r
-               blocksAvailable_ = 0;\r
-               firstAvailableBlock_ = 0;\r
-               alignmentOffset_ = 0;\r
-               blockSize_ = 0;\r
-       }       \r
-}\r
-\r
-template<unsigned char BlocksInChunk, unsigned char Alignment>\r
-void* FixedAllocator<BlocksInChunk, Alignment>::Chunk::Allocate() {\r
-       if(blocksAvailable_ < 1) return 0;\r
-\r
-       unsigned char* pResult = pData_ + (firstAvailableBlock_ * blockSize_ + alignmentOffset_);\r
-       firstAvailableBlock_ = *pResult;\r
-       --blocksAvailable_;\r
-\r
-       return pResult;\r
-}\r
-\r
-template<unsigned char BlocksInChunk, unsigned char Alignment>\r
-void FixedAllocator<BlocksInChunk, Alignment>::Chunk::Deallocate(void* p) {\r
-       _ASSERT(p >= pData_);\r
-\r
-       unsigned char* pToRelease = static_cast<unsigned char*>(p);\r
-       _ASSERT((pToRelease - pData_) % blockSize_ == alignmentOffset_);\r
-       *pToRelease = firstAvailableBlock_;\r
-\r
-       firstAvailableBlock_ = static_cast<unsigned char>((pToRelease - pData_) / blockSize_);\r
-       _ASSERT(firstAvailableBlock_ == (pToRelease - pData_) / blockSize_);\r
-\r
-       ++blocksAvailable_;\r
-}\r
-\r
-\r
-template<unsigned char BlocksInChunk, unsigned char Alignment>\r
-FixedAllocator<BlocksInChunk, Alignment>::FixedAllocator(unsigned int blockSize) : blockSize_(blockSize), chunkSize(blockSize*BlocksInChunk), pAllocChunk_(0), pDeallocChunk_(0) {\r
-}\r
-\r
-template<unsigned char BlocksInChunk, unsigned char Alignment>\r
-FixedAllocator<BlocksInChunk, Alignment>::~FixedAllocator() {\r
-       Chunks::iterator it = chunks_.begin();\r
-       Chunks::iterator end = chunks_.end();\r
-\r
-       for(; it != end; ++it) {\r
-               (*it).Destroy();\r
-       }\r
-\r
-       chunks_.clear();\r
-}\r
-\r
-template<unsigned char BlocksInChunk, unsigned char Alignment>\r
-void* FixedAllocator<BlocksInChunk, Alignment>::Allocate() {\r
-       Lock lock(*this);\r
-\r
-       if(pAllocChunk_ == 0 || pAllocChunk_->blocksAvailable_ == 0) {\r
-               Chunks::iterator it = chunks_.begin();\r
-               Chunks::iterator end = chunks_.end();\r
-               for(;; ++it) {\r
-                       if(it == end) {\r
-                               Chunk newChunk;\r
-                               newChunk.Init(blockSize_, BlocksInChunk);\r
-                               chunks_.push_back(newChunk);\r
-                               pAllocChunk_ = &chunks_.back();\r
-                               pDeallocChunk_ = &chunks_.back();\r
-                               break;\r
-                       }\r
-\r
-                       if(it->blocksAvailable_ > 0) {\r
-                               pAllocChunk_ = &(*it);\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-\r
-       _ASSERT(pAllocChunk_ != 0);\r
-       _ASSERT(pAllocChunk_->blocksAvailable_ > 0);\r
-       return pAllocChunk_->Allocate();\r
-}\r
-\r
-template<unsigned char BlocksInChunk, unsigned char Alignment>\r
-void FixedAllocator<BlocksInChunk, Alignment>::Deallocate(void *p) {\r
-       Lock lock(*this);\r
-\r
-       _ASSERT(pDeallocChunk_ != 0);\r
-\r
-       Chunks::iterator end = chunks_.end();\r
-\r
-       if(IsPtrInChunk(p, *pDeallocChunk_)) {\r
-               pDeallocChunk_->Deallocate(p);\r
-       }\r
-       else {\r
-               Chunks::iterator it = chunks_.begin();\r
-               for(; it != end; ++it) {\r
-                       if(IsPtrInChunk(p, (*it))) {\r
-                               (*it).Deallocate(p);\r
-                               pDeallocChunk_ = &(*it);\r
-                               break;\r
-                       }\r
-               }\r
-               _ASSERT(it != end);\r
-       }\r
-       \r
-       //If this deallocation emptied the chunk, move it to the end\r
-       if(pDeallocChunk_->blocksAvailable_ == BlocksInChunk) {\r
-               --end;\r
-               //destroy the currently last chunk if the that also is empty\r
-               if(&(*end) != pDeallocChunk_ && end->blocksAvailable_ == BlocksInChunk) {\r
-                       end->Destroy();\r
-                       chunks_.erase(end);\r
-               }\r
-\r
-               std::swap(*pDeallocChunk_, chunks_.back());\r
-\r
-//             ASSERT(pDeallocChunk_->blocksAvailable_ > 0);\r
-       }\r
-}\r
-\r
-}      //namespace utils\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/utils/BitmapHolder.cpp b/server/utils/BitmapHolder.cpp
deleted file mode 100644 (file)
index 6b2cbb0..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-\r
-#include "BitmapHolder.h"\r
-#include "DCWrapper.h"\r
-\r
-namespace caspar{\r
-\r
-bool CreateBitmap(HDC dc, size_t width, size_t height, HBITMAP& hBitmap, void** pBitmapData, void* memory)\r
-{\r
-       BITMAPINFO bitmapInfo;\r
-       bitmapInfo.bmiHeader.biBitCount = 32;\r
-       bitmapInfo.bmiHeader.biClrImportant = 0;\r
-       bitmapInfo.bmiHeader.biClrUsed = 0;\r
-       bitmapInfo.bmiHeader.biCompression = BI_RGB;\r
-       bitmapInfo.bmiHeader.biHeight = -height;\r
-       bitmapInfo.bmiHeader.biPlanes = 1;\r
-       bitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFO);\r
-       bitmapInfo.bmiHeader.biWidth = width;\r
-       bitmapInfo.bmiHeader.biSizeImage = 0;\r
-       bitmapInfo.bmiHeader.biXPelsPerMeter = 0;\r
-       bitmapInfo.bmiHeader.biYPelsPerMeter = 0;\r
-\r
-       if(memory != NULL)\r
-       {               \r
-               HDC memoryDC = CreateCompatibleDC(dc);\r
-               if(memoryDC == NULL)\r
-                       return false;\r
-\r
-               HANDLE hMapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, width*height*4, NULL);\r
-               MapViewOfFileEx(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0, memory);\r
-\r
-               hBitmap = CreateDIBSection(memoryDC, &bitmapInfo, DIB_RGB_COLORS, pBitmapData, hMapping, 0);\r
-       }\r
-       else\r
-               hBitmap = CreateDIBSection(dc, &bitmapInfo, DIB_RGB_COLORS, pBitmapData, NULL, 0);\r
-\r
-       return (hBitmap != 0);\r
-}\r
-\r
-struct BitmapHolder::Implementation\r
-{      \r
-\r
-       Implementation(HWND hWnd, size_t width, size_t height, void* memory)\r
-               : hDC_(0), hBitmap_(0), pBitmapData_(0), width_(width), height_(height)\r
-       {\r
-               DCWrapper hDC(hWnd);\r
-\r
-               hDC_ = CreateCompatibleDC(hDC);\r
-               if(CreateBitmap(hDC_, width_, height_, hBitmap_, reinterpret_cast<void**>(&pBitmapData_), memory))\r
-                       SelectObject(hDC_, hBitmap_);   \r
-               else\r
-               {\r
-                       hDC_ = 0;\r
-                       hBitmap_ = 0;\r
-                       pBitmapData_ = 0;\r
-                       throw std::exception("Failed to create bitmap");\r
-               }\r
-       }\r
-\r
-       ~Implementation()\r
-       {       \r
-               if(hBitmap_ != 0) \r
-               {\r
-                       DeleteObject(hBitmap_);\r
-                       hBitmap_ = 0;\r
-               }\r
-\r
-               if(hDC_ != 0) \r
-               {\r
-                       DeleteDC(hDC_);\r
-                       hDC_ = 0;\r
-               }\r
-       }\r
-\r
-       size_t width_;\r
-       size_t height_;\r
-       HDC hDC_;\r
-       HBITMAP hBitmap_;\r
-       unsigned char* pBitmapData_;\r
-};\r
-\r
-BitmapHolder::BitmapHolder(HWND hWnd, size_t width, size_t height, void* memory): pImpl_(new Implementation(hWnd, width, height, memory))\r
-{\r
-}\r
-\r
-HDC BitmapHolder::GetDC() const {\r
-       return pImpl_->hDC_;\r
-}\r
-\r
-unsigned char* BitmapHolder::GetPtr() const {\r
-       return pImpl_->pBitmapData_;\r
-}\r
-\r
-size_t BitmapHolder::Width() const\r
-{\r
-       return pImpl_->width_;\r
-}\r
-\r
-size_t BitmapHolder::Height() const\r
-{\r
-       return pImpl_->height_;\r
-}\r
-\r
-size_t BitmapHolder::Size() const\r
-{\r
-       return pImpl_->width_*pImpl_->height_*4;\r
-}\r
-\r
-}
\ No newline at end of file
diff --git a/server/utils/BitmapHolder.h b/server/utils/BitmapHolder.h
deleted file mode 100644 (file)
index 067376a..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _BITMAP_HOLDER_\r
-#define _BITMAP_HOLDER_\r
-\r
-#include <memory>\r
-#include "..\frame\Frame.h"\r
-#include "Noncopyable.hpp"\r
-\r
-namespace caspar{\r
-\r
-/*\r
-   Class: BitmapHolder   \r
-\r
-   Changes: \r
-   2010/4/2 (R.N), Refactored\r
-   2010/4/3 (R.N), Implemented functionality to map bitmap to allocated memory\r
-\r
-   Author: Niklas P. Andersson, N.A            \r
-*/\r
-\r
-class BitmapHolder : private utils::Noncopyable\r
-{\r
-public:\r
-       BitmapHolder(HWND hWnd, size_t height, size_t width, void* memory = NULL);\r
-\r
-       HDC GetDC() const;\r
-       unsigned char* GetPtr() const;\r
-       size_t Width() const;\r
-       size_t Height() const;\r
-       size_t Size() const;\r
-\r
-private:\r
-\r
-       struct Implementation;\r
-       std::tr1::shared_ptr<Implementation> pImpl_;\r
-};\r
-typedef std::tr1::shared_ptr<BitmapHolder> BitmapHolderPtr;\r
-\r
-}\r
-\r
-#endif\r
-\r
diff --git a/server/utils/CPUID.cpp b/server/utils/CPUID.cpp
deleted file mode 100644 (file)
index 4b4ef51..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\stdafx.h"\r
-#include "CPUID.hpp"\r
-#include <intrin.h>\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-CPUID::CPUID() : \r
-       FPU(0),\r
-       VME(0),         \r
-       DE(0),          \r
-       PSE(0),         \r
-       TSC(0),         \r
-       MSR(0),         \r
-       PAE(0),         \r
-       MCE(0),         \r
-       CX8(0),         \r
-       APIC(0),        \r
-       SEP(0),         \r
-       MTRR(0),        \r
-       PGE(0),         \r
-       MCA(0),         \r
-       CMOV(0),        \r
-       PAT(0),         \r
-       PSE_36(0),      \r
-       PSN(0),         \r
-       CLFSH(0),               \r
-       DS(0),  \r
-       ACPI(0),                \r
-       MMX(0), \r
-       FXSR(0),\r
-       SSE(0), \r
-       SSE2(0),        \r
-       SSE3(0),        \r
-       SSSE3(0),        \r
-       SSE4_1(0),      \r
-       SSE4_2(0),      \r
-       SSE5(0),        \r
-       SS(0),  \r
-       HTT(0), \r
-       TM(0),  \r
-       IA_64(0),\r
-       Family(0),\r
-       Model(0),\r
-       ModelEx(0),\r
-       Stepping(0),\r
-       FamilyEx(0),\r
-       Brand(0),\r
-       Type(0)\r
-{              \r
-       int CPUInfo[4] = {-1};\r
-       __cpuid(CPUInfo, 0);    \r
-\r
-       int nIds = CPUInfo[0];\r
-       ID.append(reinterpret_cast<char*>(&CPUInfo[1]), 4);\r
-       ID.append(reinterpret_cast<char*>(&CPUInfo[3]), 4);\r
-       ID.append(reinterpret_cast<char*>(&CPUInfo[2]), 4);\r
-\r
-       for (int i = 0; i <= nIds; ++i)\r
-       {\r
-               __cpuid(CPUInfo, i);\r
-\r
-               if  (i == 1)\r
-               {\r
-                       Stepping =      (CPUInfo[0]      ) & 0x0F;\r
-                       Model =         (CPUInfo[0] >> 4 ) & 0x0F;\r
-                       Family =        (CPUInfo[0] >> 8 ) & 0x0F;\r
-                       Type =          (CPUInfo[0] >> 12) & 0x03;\r
-                       ModelEx =       (CPUInfo[0] >> 16) & 0x0F;\r
-                       FamilyEx =      (CPUInfo[0] >> 20) & 0xFF;\r
-                       Brand =         (CPUInfo[1]              ) & 0xFF;                      \r
-\r
-                       if(ID == "GenuineIntel") \r
-                       {\r
-                               FPU             = (CPUInfo[3] & (1 << 0))  != 0;\r
-                               VME             = (CPUInfo[3] & (1 << 1))  != 0;\r
-                               DE              = (CPUInfo[3] & (1 << 2))  != 0;\r
-                               PSE             = (CPUInfo[3] & (1 << 3))  != 0;\r
-                               TSC             = (CPUInfo[3] & (1 << 4))  != 0;\r
-                               MSR             = (CPUInfo[3] & (1 << 5))  != 0;\r
-                               PAE             = (CPUInfo[3] & (1 << 6))  != 0;\r
-                               MCE             = (CPUInfo[3] & (1 << 7))  != 0;\r
-                               CX8             = (CPUInfo[3] & (1 << 8))  != 0;\r
-                               APIC    = (CPUInfo[3] & (1 << 9))  != 0;\r
-                               //              = (CPUInfo[3] & (1 << 10)) != 0;\r
-                               SEP             = (CPUInfo[3] & (1 << 11)) != 0;\r
-                               MTRR    = (CPUInfo[3] & (1 << 12)) != 0;\r
-                               PGE             = (CPUInfo[3] & (1 << 13)) != 0;\r
-                               MCA             = (CPUInfo[3] & (1 << 14)) != 0;\r
-                               CMOV    = (CPUInfo[3] & (1 << 15)) != 0;\r
-                               PAT             = (CPUInfo[3] & (1 << 16)) != 0;\r
-                               PSE_36  = (CPUInfo[3] & (1 << 17)) != 0;\r
-                               PSN             = (CPUInfo[3] & (1 << 18)) != 0;\r
-                               CLFSH   = (CPUInfo[3] & (1 << 19)) != 0;\r
-                               //              = (CPUInfo[3] & (1 << 20)) != 0;\r
-                               DS              = (CPUInfo[3] & (1 << 21)) != 0;\r
-                               ACPI    = (CPUInfo[3] & (1 << 22)) != 0;\r
-                               MMX             = (CPUInfo[3] & (1 << 23)) != 0;\r
-                               FXSR    = (CPUInfo[3] & (1 << 24)) != 0;\r
-                               SSE             = (CPUInfo[3] & (1 << 25)) != 0;\r
-                               SSE2    = (CPUInfo[3] & (1 << 26)) != 0;\r
-                               SS              = (CPUInfo[3] & (1 << 27)) != 0;\r
-                               HTT             = (CPUInfo[3] & (1 << 28)) != 0;\r
-                               TM              = (CPUInfo[3] & (1 << 29)) != 0;\r
-                               //              = (CPUInfo[3] & (1 << 30)) != 0;\r
-                               IA_64   = (CPUInfo[3] & (1 << 31)) != 0;\r
-\r
-                               SSE3    = (CPUInfo[2] & (1 << 0))  != 0;\r
-                               SSSE3   = (CPUInfo[2] & (1 << 9))  != 0;\r
-                               SSE4_1  = (CPUInfo[2] & (1 << 19)) != 0;\r
-                               SSE4_2  = (CPUInfo[2] & (1 << 20)) != 0;\r
-                       }\r
-                       else if(ID == "AuthenticAMD") \r
-                       {\r
-                       }\r
-               }\r
-       }       \r
-\r
-       if(SSE5)\r
-               SIMD = utils::SSE5;\r
-       else if(SSE4_2)\r
-               SIMD = utils::SSE4_2;\r
-       else if(SSE4_1)\r
-               SIMD = utils::SSE4_1;\r
-       else if(SSSE3)\r
-               SIMD = utils::SSSE3;\r
-       else if(SSE3)\r
-               SIMD = utils::SSE3;\r
-       else if(SSE2)\r
-               SIMD = utils::SSE2;\r
-       else if(SSE)\r
-               SIMD = utils::SSE;\r
-       else \r
-               SIMD = utils::REF;\r
-}\r
-\r
-}\r
-}\r
diff --git a/server/utils/CPUID.hpp b/server/utils/CPUID.hpp
deleted file mode 100644 (file)
index bb21db8..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CPUID_H_\r
-#define _CPUID_H_\r
-\r
-#include <string>\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-enum SIMD\r
-{\r
-       AUTO,\r
-       REF,\r
-       SSE,\r
-       SSE2,\r
-       SSE3,\r
-       SSSE3,\r
-       SSE4_1,\r
-       SSE4_2,\r
-       SSE5\r
-};\r
-\r
-/*\r
-   Class: CPUID\r
-\r
-   Retrieves CPU hardware inforomation.\r
-\r
-   Author: Robert Nagy, R.N (SVT 2009)\r
-               \r
-*/\r
-struct CPUID\r
-{\r
-       CPUID();\r
-\r
-       std::string ID;\r
-\r
-       bool FPU;               //Floating Point Unit\r
-       bool VME;               //Virtual Mode Extension\r
-       bool DE;                //Debugging Extension\r
-       bool PSE;               //Page Size Extension\r
-       bool TSC;               //Time Stamp Counter\r
-       bool MSR;               //Model Specific Registers\r
-       bool PAE;               //Physical Address Extesnion\r
-       bool MCE;               //Machine Check Extension\r
-       bool CX8;               //CMPXCHG8 Instruction\r
-       bool APIC;              //On-chip APIC Hardware\r
-       bool SEP;               //SYSENTER SYSEXIT\r
-       bool MTRR;              //Machine Type Range Registers\r
-       bool PGE;               //Global Paging Extension\r
-       bool MCA;               //Machine Check Architecture\r
-       bool CMOV;              //Conditional Move Instrction\r
-       bool PAT;               //Page Attribute Table\r
-       bool PSE_36;    //36-bit Page Size Extension\r
-       bool PSN;               //96-bit Processor Serial Number\r
-       bool CLFSH;             //CLFLUSH Instruction\r
-       bool DS;                //Debug Trace Store\r
-       bool ACPI;              //ACPI Support\r
-       bool MMX;               //MMX Technology\r
-       bool FXSR;              //FXSAVE FXRSTOR (Fast save and restore)\r
-       bool SSE;               //Streaming SIMD Extensions\r
-       bool SSE2;              //Streaming SIMD Extensions 2\r
-       bool SSE3;\r
-       bool SSSE3; \r
-       bool SSE4_1;\r
-       bool SSE4_2;\r
-       bool SSE5;\r
-       bool SS;                //Self-Snoop\r
-       bool HTT;               //Hyper-Threading Technology\r
-       bool TM;                //Thermal Monitor Supported\r
-       bool IA_64;             //IA-64 capable \r
-\r
-       int Family;\r
-       int Model;\r
-       int ModelEx;\r
-       int Stepping;\r
-       int FamilyEx;\r
-       int Brand; \r
-       int Type;\r
-\r
-       utils::SIMD SIMD;\r
-\r
-       //int CacheLineSize;\r
-       //int LogicalProcessorCount;\r
-       //int LocalAPICID;\r
-\r
-};\r
-\r
-}\r
-}\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/utils/CommandQueue.h b/server/utils/CommandQueue.h
deleted file mode 100644 (file)
index 2d7b86c..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _COMMANDQUEUE_H__\r
-#define _COMMANDQUEUE_H__\r
-\r
-#pragma once\r
-\r
-#include <list>\r
-#include "thread.h"\r
-#include "Lockable.h"\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-//TODO: Add idle-processing. preferably as a functor suplied at construction-time\r
-\r
-//CommandQueue is a \r
-template<typename T>\r
-class CommandQueue\r
-{\r
-       template<typename U>\r
-       class WorkerThread : public utils::IRunnable, private utils::LockableObject\r
-       {\r
-       public:\r
-               WorkerThread() : commandAvailibleEvent_(TRUE, FALSE)\r
-               {}\r
-\r
-               void AddCommand(U pCommand);\r
-               virtual void Run(HANDLE stopEvent);\r
-               virtual bool OnUnhandledException(const std::exception& ex) throw();\r
-\r
-       private:\r
-               utils::Event    commandAvailibleEvent_;\r
-\r
-               //Needs synro-protection\r
-               std::list<U> commands_;\r
-       };\r
-\r
-       CommandQueue(const CommandQueue&);\r
-       CommandQueue& operator=(const CommandQueue&);\r
-public:\r
-       CommandQueue() : pWorker_(new WorkerThread<T>())\r
-       {}\r
-       ~CommandQueue() \r
-       {}\r
-\r
-       bool Start();\r
-       void Stop();\r
-       void AddCommand(T pCommand);\r
-\r
-private:\r
-       utils::Thread   commandPump_;\r
-       std::tr1::shared_ptr<WorkerThread<T> > pWorker_;\r
-\r
-};\r
-\r
-template<typename T>\r
-bool CommandQueue<T>::Start() {\r
-       return commandPump_.Start(pWorker_.get());\r
-}\r
-\r
-template<typename T>\r
-void CommandQueue<T>::Stop() {\r
-       commandPump_.Stop();\r
-}\r
-\r
-template<typename T>\r
-void CommandQueue<T>::AddCommand(T pCommand) {\r
-       pWorker_->AddCommand(pCommand);\r
-}\r
-\r
-template<typename T>\r
-template<typename U>\r
-void CommandQueue<T>::WorkerThread<U>::AddCommand(U pCommand) {\r
-       Lock lock(*this);\r
-\r
-       commands_.push_back(pCommand);\r
-       commandAvailibleEvent_.Set();\r
-}\r
-\r
-template<typename T>\r
-template<typename U>\r
-void CommandQueue<T>::WorkerThread<U>::Run(HANDLE stopEvent)\r
-{\r
-       HANDLE events[2] = {commandAvailibleEvent_, stopEvent};\r
-       U pCommand;\r
-\r
-       while(true) {\r
-               DWORD waitResult = WaitForMultipleObjects(2, events, FALSE, 1000);\r
-               int result = waitResult - WAIT_OBJECT_0;\r
-\r
-               if(result == 1) {\r
-                       break;\r
-               }\r
-               else if(result == 0) {\r
-                       Lock lock(*this);\r
-\r
-                       if(commands_.size() > 0) {\r
-                               pCommand = commands_.front();\r
-                               commands_.pop_front();\r
-\r
-                               if(commands_.size() == 0)\r
-                                       commandAvailibleEvent_.Reset();\r
-                       }\r
-               }\r
-\r
-               if(pCommand != 0) {\r
-                       pCommand->Execute();\r
-                       pCommand.reset();\r
-               }\r
-       }\r
-}\r
-\r
-template<typename T>\r
-template<typename U>\r
-bool CommandQueue<T>::WorkerThread<U>::OnUnhandledException(const std::exception& ex) throw() {\r
-       bool bDoRestart = true;\r
-\r
-       try \r
-       {\r
-               LOG << LogLevel::Critical << TEXT("UNHANDLED EXCEPTION in commandqueue. Message: ") << ex.what() << LogStream::Flush;\r
-       }\r
-       catch(...)\r
-       {\r
-               bDoRestart = false;\r
-       }\r
-\r
-       return bDoRestart;\r
-}\r
-\r
-}      //namespace utils\r
-}      //namespace caspar\r
-\r
-#endif //_COMMANDQUEUE_H__
\ No newline at end of file
diff --git a/server/utils/CritSectLock.h b/server/utils/CritSectLock.h
deleted file mode 100644 (file)
index cf5da20..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef        _CASPAR_CRITSECTLOCK_H__\r
-#define _CASPAR_CRITSECTLOCK_H__\r
-\r
-#pragma once\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-class CritSectLock\r
-{\r
-public:\r
-       CritSectLock(CRITICAL_SECTION* pCritSect) : pCriticalSection_(pCritSect)\r
-       {\r
-               EnterCriticalSection(pCriticalSection_);\r
-       }\r
-       ~CritSectLock()\r
-       {\r
-               LeaveCriticalSection(pCriticalSection_);\r
-       }\r
-\r
-private:\r
-       CRITICAL_SECTION* pCriticalSection_;\r
-};\r
-\r
-}      //namespace utils\r
-}      //namespace caspar\r
-\r
-#endif //_CASPAR_CRITSECTLOCK_H__
\ No newline at end of file
diff --git a/server/utils/DCWrapper.cpp b/server/utils/DCWrapper.cpp
deleted file mode 100644 (file)
index b7c1f62..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\stdafx.h"\r
-#include "DCWrapper.h"\r
-\r
-namespace caspar\r
-{\r
-\r
-DCWrapper::DCWrapper(HWND hWnd) : hWnd_(hWnd), dc_(::GetDC(hWnd))\r
-{}\r
-\r
-DCWrapper::~DCWrapper()\r
-{\r
-       if(dc_ != 0)\r
-               ::ReleaseDC(hWnd_, dc_);\r
-}\r
-\r
-\r
-}
\ No newline at end of file
diff --git a/server/utils/DCWrapper.h b/server/utils/DCWrapper.h
deleted file mode 100644 (file)
index 48efeff..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _DCWRAPPER_H_\r
-#define _DCWRAPPER_H_\r
-\r
-namespace caspar\r
-{\r
-\r
-class DCWrapper\r
-{\r
-public:\r
-       explicit DCWrapper(HWND hWnd);\r
-       ~DCWrapper();\r
-       \r
-       operator HDC() {\r
-               return dc_;\r
-       }\r
-\r
-private:\r
-       HWND hWnd_;\r
-       HDC dc_;\r
-};\r
-\r
-}\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/utils/DataBuffer.h b/server/utils/DataBuffer.h
deleted file mode 100644 (file)
index c855970..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-template<typename T>\r
-class DataBuffer\r
-{\r
-public:\r
-       typedef T DataType;\r
-\r
-       DataBuffer() : pData_(0), length_(0), capacity_(0)\r
-       {}\r
-       DataBuffer(const DataBuffer& b) : pData_(new T[b.capacity_]), capacity_(b.capacity_)\r
-       {\r
-               memcpy(pData_, b.pData_, b.capacity_*sizeof(T));\r
-       }\r
-       const DataBuffer& operator=(const DataBuffer& b)\r
-       {\r
-               DataBuffer temp(b);\r
-               swap(temp);\r
-       }\r
-       ~DataBuffer() {\r
-               FreeData();\r
-       }\r
-\r
-       void Fill(const T* pSrc, unsigned int count, unsigned int offset=0) {\r
-               int neededCapacity = count + offset;\r
-               Realloc(neededCapacity);\r
-\r
-               length_ = neededCapacity;\r
-               memcpy(pData_+offset, pSrc, count*sizeof(T));\r
-       }\r
-\r
-       T* GetPtr(unsigned int offset=0) {\r
-               return (pData_+offset);\r
-       }\r
-       unsigned int GetCapacity() {\r
-               return capacity_;\r
-       }\r
-       void SetLength(unsigned int len) {\r
-               length_ = len;\r
-       }\r
-       unsigned int GetLength() {\r
-               return length_;\r
-       }\r
-\r
-       void Realloc(unsigned int neededCapacity) {\r
-               if(neededCapacity > capacity_) {\r
-                       T* pNewData = new T[neededCapacity];\r
-                       FreeData();\r
-                       pData_ = pNewData;\r
-                       capacity_ = neededCapacity;\r
-               }\r
-       }\r
-\r
-private:\r
-       void swap(const DataBuffer& b) throw()\r
-       {\r
-               std::swap(pData_, b.pData_);\r
-               std::swap(capacity_, b.capacity_);\r
-       }\r
-\r
-       void FreeData() {\r
-               if(pData_ != 0) {\r
-                       delete[] pData_;\r
-                       pData_ = 0;\r
-               }\r
-               capacity_ = 0;\r
-       }\r
-\r
-       T* pData_;\r
-       unsigned int capacity_;\r
-       unsigned int length_;\r
-};\r
-\r
-}      //namespace utils\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/utils/Event.h b/server/utils/Event.h
deleted file mode 100644 (file)
index e9fbbab..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_EVENT_H__\r
-#define _CASPAR_EVENT_H__\r
-\r
-#pragma once\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-class Event\r
-{\r
-public:\r
-       Event(bool bManualReset, bool bInitialState);\r
-       ~Event();\r
-\r
-       operator const HANDLE() const {\r
-               return handle_;\r
-       }\r
-\r
-       void Set();\r
-       void Reset();\r
-\r
-private:\r
-       HANDLE handle_;\r
-};\r
-\r
-typedef std::tr1::shared_ptr<Event> EventPtr;\r
-\r
-}      //namespace utils\r
-}      //namespace caspar\r
-\r
-#endif //_CASPAR_EVENT_H__
\ No newline at end of file
diff --git a/server/utils/FileExists.cpp b/server/utils/FileExists.cpp
deleted file mode 100644 (file)
index bacd5e0..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\stdafx.h"\r
-\r
-#include "FileExists.h"\r
-#include "FindWrapper.h"\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-bool exists(const tstring& name, bool isDirectory) {\r
-       WIN32_FIND_DATA findInfo;\r
-       FindWrapper findWrapper(name, &findInfo);\r
-       return findWrapper.Success() && (!isDirectory || (findInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY);\r
-}\r
-\r
-}      //namespace utils\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/utils/FileExists.h b/server/utils/FileExists.h
deleted file mode 100644 (file)
index 379ae2b..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#pragma once\r
-\r
-#include <string>\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-       bool exists(const tstring& name, bool isDirectory = false);\r
-\r
-}      //namespace utils\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/utils/FileInputStream.cpp b/server/utils/FileInputStream.cpp
deleted file mode 100644 (file)
index f1ef0d3..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\stdafx.h"\r
-#include "fileinputstream.h"\r
-\r
-namespace caspar {\r
-namespace utils        {\r
-\r
-FileInputStream::FileInputStream(const tstring& filename) : filename_(filename)\r
-{\r
-}\r
-\r
-FileInputStream::~FileInputStream()\r
-{\r
-       Close();\r
-}\r
-\r
-bool FileInputStream::Open()\r
-{\r
-       ifs_.open(filename_.c_str(), std::ios::in | std::ios::binary);\r
-       return !ifs_.fail();\r
-}\r
-\r
-void FileInputStream::Close()\r
-{\r
-       ifs_.close();\r
-}\r
-\r
-\r
-unsigned int FileInputStream::Read(unsigned char* buf, size_t length)\r
-{\r
-       if(!ifs_.eof())\r
-       {\r
-               ifs_.read(reinterpret_cast<char*>(buf), (std::streamsize)length);\r
-               return ifs_.gcount();\r
-       }\r
-       return 0;\r
-}\r
-\r
-/* removed 2008-03-06 - InputStream should be binary only. Make a separate TextInputStream for text\r
-bool FileInputStream::Readln(tstring& out)\r
-{\r
-       static TCHAR buf[256];\r
-       if(!ifs_.eof())\r
-       {\r
-               ifs_.getline(buf, 256, TEXT('\n'));\r
-               out = buf;\r
-               size_t findPos = out.find_first_of(TEXT('\r'));\r
-               if(findPos != tstring::npos)\r
-                       out = out.substr(0,findPos);\r
-\r
-               if(ifs_.peek() == TEXT('\r'))\r
-                       ifs_.get();\r
-               if(ifs_.peek() == TEXT('\n'))\r
-                       ifs_.get();\r
-               \r
-               return true;\r
-       }\r
-       return false;\r
-}\r
-*/\r
-\r
-}      //namespace utils\r
-}      //namespace caspar\r
diff --git a/server/utils/FileInputStream.h b/server/utils/FileInputStream.h
deleted file mode 100644 (file)
index 9f630d8..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef CASPAR_FILEINPUTSTREAM_H__\r
-#define CASPAR_FILEINPUTSTREAM_H__\r
-\r
-#if _MSC_VER > 1000\r
-#pragma once\r
-#endif // _MSC_VER > 1000\r
-\r
-#include "inputstream.h"\r
-#include <fstream>\r
-\r
-namespace caspar {\r
-namespace utils        {\r
-\r
-class FileInputStream : public InputStream\r
-{\r
-public:\r
-       FileInputStream(const tstring& filename);\r
-       virtual ~FileInputStream();\r
-\r
-       virtual bool Open();\r
-\r
-       virtual unsigned int Read(unsigned char*, size_t);\r
-       virtual void Close();\r
-\r
-private:\r
-       tstring filename_;\r
-       std::ifstream   ifs_;\r
-};\r
-\r
-}      //namespace utils\r
-}      //namespace caspar\r
-\r
-#endif //CASPAR_FILEINPUTSTREAM_H__
\ No newline at end of file
diff --git a/server/utils/FileOutputStream.cpp b/server/utils/FileOutputStream.cpp
deleted file mode 100644 (file)
index b31404c..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-\r
-#include "FileOutputStream.h"\r
-#include "LogException.h"\r
-\r
-#include <time.h>\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-FileOutputStream::FileOutputStream(const TCHAR* filename, bool append) : filename(filename), append(append), timestamp(true)\r
-{\r
-       Open();\r
-}\r
-\r
-FileOutputStream::~FileOutputStream()\r
-{\r
-       Close();\r
-}\r
-\r
-bool FileOutputStream::Open()\r
-{\r
-       this->outStream.open(this->filename.c_str(), this->append ? std::ios_base::out | std::ios_base::app : std::ios_base::out | std::ios_base::trunc);\r
-       if(this->outStream.fail())\r
-               return false;\r
-\r
-       return true;\r
-}\r
-\r
-void FileOutputStream::Close()\r
-{\r
-       this->outStream.close();\r
-}\r
-\r
-void FileOutputStream::SetTimestamp(bool timestamp)\r
-{\r
-       this->timestamp = timestamp;\r
-}\r
-\r
-void FileOutputStream::WriteTimestamp()\r
-{\r
-       if (this->timestamp)\r
-       {\r
-               \r
-               TCHAR timeBuffer[30];\r
-               __time64_t ltime;\r
-               _time64(&ltime);\r
-               _tctime64_s<30>(timeBuffer, &ltime);\r
-\r
-               tstring logString = TEXT("");\r
-               logString = TEXT("[");\r
-               logString += timeBuffer;\r
-               logString.resize(logString.size()-1);\r
-               logString += TEXT("] ");\r
-\r
-               this->outStream << logString;\r
-       }\r
-}\r
-\r
-void FileOutputStream::Println(const tstring& message)\r
-{\r
-       try\r
-       {\r
-               Lock lock(*this);\r
-               if (this->timestamp)\r
-                       WriteTimestamp();\r
-\r
-               this->outStream << message <<  TEXT(" (Thread: ") << GetCurrentThreadId() << TEXT(")") << std::endl;\r
-\r
-               // HACK: Because not all unicode chars can be converted to the current locale, the above line could cause the stream to be flagged\r
-               // as beeing in a "bad"-state. just clear the state and ignore. That particular line won't be logged, but subsequent logging will work.\r
-               this->outStream.clear();\r
-               this->outStream.flush();\r
-       }\r
-       catch (LogException& ex)\r
-       {\r
-               new LogException(ex.what());\r
-       }\r
-}\r
-\r
-void FileOutputStream::Print(const tstring& message)\r
-{\r
-       try\r
-       {\r
-               Lock lock(*this);\r
-               if (this->timestamp)\r
-                       WriteTimestamp();\r
-\r
-               this->outStream << message;\r
-\r
-               // HACK: Because not all unicode chars can be converted to the current locale, the above line could cause the stream to be flagged\r
-               // as beeing in a "bad"-state. just clear the state and ignore. That particular line won't be logged, but subsequent logging will work.\r
-               this->outStream.clear();\r
-               this->outStream.flush();\r
-       }\r
-       catch (LogException& ex)\r
-       {\r
-               new LogException(ex.what());\r
-       }\r
-}\r
-\r
-void FileOutputStream::Write(const void* buffer, size_t size)\r
-{\r
-       try\r
-       {\r
-               Lock lock(*this);\r
-               if (this->timestamp)\r
-                       WriteTimestamp();\r
-\r
-               this->outStream.write((const TCHAR*)buffer, static_cast<std::streamsize>(size));\r
-               this->outStream.flush();\r
-       }\r
-       catch (LogException& ex)\r
-       {\r
-               new LogException(ex.what());\r
-       }\r
-}\r
-\r
-}\r
-}
\ No newline at end of file
diff --git a/server/utils/FileOutputStream.h b/server/utils/FileOutputStream.h
deleted file mode 100644 (file)
index 229b97b..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef FILEOUTPUTSTREAM_H\r
-#define FILEOUTPUTSTREAM_H\r
-\r
-#include "OutputStream.h"\r
-\r
-#include <string>\r
-#include <fstream>\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-class FileOutputStream : public OutputStream, private LockableObject\r
-{\r
-       public:\r
-               FileOutputStream(const TCHAR* filename, bool bAppend = false);\r
-               virtual ~FileOutputStream();\r
-\r
-               virtual bool Open();\r
-               virtual void Close();\r
-               virtual void SetTimestamp(bool timestamp);\r
-               virtual void Print(const tstring& message);\r
-               virtual void Println(const tstring& message);\r
-               virtual void Write(const void* buffer, size_t);\r
-\r
-       private:\r
-               void WriteTimestamp();\r
-\r
-       private:\r
-               bool append;\r
-               bool timestamp;\r
-               tstring filename;\r
-       \r
-               #ifndef _UNICODE\r
-                       std::ofstream   outStream;\r
-               #else\r
-                       std::wofstream  outStream;\r
-               #endif\r
-};\r
-\r
-}\r
-}\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/utils/FindWrapper.cpp b/server/utils/FindWrapper.cpp
deleted file mode 100644 (file)
index 503fc98..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\stdafx.h"\r
-\r
-#include "FindWrapper.h"\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-       FindWrapper::FindWrapper(const tstring& filename, WIN32_FIND_DATA* pFindData) : hFile_(INVALID_HANDLE_VALUE) {\r
-               hFile_ = FindFirstFile(filename.c_str(), pFindData);\r
-       }\r
-\r
-       FindWrapper::~FindWrapper() {\r
-               if(hFile_ != INVALID_HANDLE_VALUE) {\r
-                       FindClose(hFile_);\r
-                       hFile_ = INVALID_HANDLE_VALUE;\r
-               }\r
-       }\r
-\r
-       bool FindWrapper::FindNext(WIN32_FIND_DATA* pFindData)\r
-       {\r
-               return FindNextFile(hFile_, pFindData) != 0;\r
-       }\r
-\r
-}      //namespace utils\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/utils/FindWrapper.h b/server/utils/FindWrapper.h
deleted file mode 100644 (file)
index b7aff19..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _FINDWRAPPER_H__\r
-#define _FINDWRAPPER_H__\r
-\r
-#include <io.h>\r
-#include <string>\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-       class FindWrapper\r
-       {\r
-               FindWrapper(const FindWrapper&);\r
-               FindWrapper& operator=(const FindWrapper&);\r
-       public:\r
-               FindWrapper(const tstring&, WIN32_FIND_DATA*);\r
-               ~FindWrapper();\r
-\r
-               bool FindNext(WIN32_FIND_DATA*);\r
-\r
-               bool Success() {\r
-                       return (hFile_ != INVALID_HANDLE_VALUE);\r
-               }\r
-\r
-       private:\r
-               HANDLE  hFile_;\r
-       };\r
-\r
-}      //namespace utils\r
-}      //namespace caspar\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/utils/ID.cpp b/server/utils/ID.cpp
deleted file mode 100644 (file)
index fbf56c4..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "stdafx.h"\r
-#include "ID.h"\r
-\r
-namespace caspar\r
-{\r
-       namespace utils\r
-       {\r
-\r
-               ID::ID() : value_(0){}\r
-\r
-               const ID::value_type& ID::Value() const\r
-               {\r
-                       return value_;\r
-               }\r
-               ID ID::Generate(void* ptr)\r
-               {                       \r
-                       assert(sizeof(value_type) >= sizeof(LARGE_INTEGER));\r
-                       ID id;\r
-                       QueryPerformanceCounter(reinterpret_cast<LARGE_INTEGER*>(&id.value_));  \r
-                       id.value_ <<= 32;\r
-                       id.value_ |= reinterpret_cast<int>(ptr);\r
-                       return id;\r
-               }\r
-\r
-               bool operator ==(const ID& lhs,const ID& rhs)\r
-               {\r
-                       return lhs.Value() == rhs.Value();\r
-               }\r
-\r
-               bool operator !=(const ID& lhs,const ID& rhs)\r
-               {\r
-                       return lhs.Value() != rhs.Value();\r
-               }\r
-\r
-               Identifiable::Identifiable() : id_(utils::ID::Generate(this))\r
-               {}\r
-\r
-               const utils::ID& Identifiable::ID() const\r
-               {\r
-                       return id_;\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/server/utils/ID.h b/server/utils/ID.h
deleted file mode 100644 (file)
index bee7e30..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _ID_H_\r
-#define _ID_H_\r
-\r
-namespace caspar\r
-{\r
-       namespace utils\r
-       {\r
-               class ID \r
-               {                       \r
-               public:\r
-                       typedef long long value_type;\r
-\r
-                       ID();\r
-                       const value_type& Value() const;\r
-                       static ID Generate(void* ptr);\r
-               private:\r
-                       value_type value_; \r
-               };\r
-\r
-               class Identifiable\r
-               {\r
-               public:\r
-                       Identifiable();\r
-                       virtual ~Identifiable(){}\r
-                       const utils::ID& ID() const;\r
-               private:\r
-                       const utils::ID id_;\r
-               };\r
-\r
-               bool operator==(const ID& lhs,const ID& rhs);\r
-               bool operator!=(const ID& lhs,const ID& rhs);\r
-       }\r
-}\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/utils/InputStream.h b/server/utils/InputStream.h
deleted file mode 100644 (file)
index fa9959e..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef CASPAR_INPUTSTREAM_H__\r
-#define CASPAR_INPUTSTREAM_H__\r
-\r
-#if _MSC_VER > 1000\r
-#pragma once\r
-#endif // _MSC_VER > 1000\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-class InputStream\r
-{\r
-public:\r
-       virtual ~InputStream() {}\r
-\r
-       virtual bool Open() = 0;\r
-       virtual unsigned int Read(unsigned char*, size_t) = 0;\r
-       virtual void Close() = 0;\r
-};\r
-typedef std::tr1::shared_ptr<InputStream> InputStreamPtr;\r
-\r
-template <typename CharType>\r
-class TextInputStream\r
-{\r
-public:\r
-       virtual ~TextInputStream() {}\r
-\r
-       virtual bool Open() = 0;\r
-       virtual bool Readln(std::basic_string<CharType>&) = 0;\r
-       virtual unsigned int Read(CharType*, size_t) = 0;\r
-       virtual void Close() = 0;\r
-};\r
-\r
-#ifdef UNICODE\r
-       typedef std::tr1::shared_ptr<TextInputStream<wchar_t> > TextInputStreamPtr;\r
-#else\r
-       typedef std::tr1::shared_ptr<TextInputStream<char> > TextInputStreamPtr;\r
-#endif\r
-\r
-}      //namespace utils\r
-}      //namespace caspar\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/utils/Lockable.h b/server/utils/Lockable.h
deleted file mode 100644 (file)
index e54183d..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_LOCKABLE_H__\r
-#define _CASPAR_LOCKABLE_H__\r
-\r
-#pragma once\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-class LockableObject\r
-{\r
-       mutable CRITICAL_SECTION mtx_;\r
-\r
-       LockableObject(const LockableObject&);\r
-       LockableObject& operator=(const LockableObject&);\r
-\r
-protected:\r
-       LockableObject(unsigned int spincount = 4000)\r
-       {\r
-               ::InitializeCriticalSectionAndSpinCount(&mtx_, spincount);\r
-       }\r
-\r
-public:\r
-       ~LockableObject()\r
-       {\r
-               ::DeleteCriticalSection(&mtx_);\r
-       }\r
-\r
-       class Lock;\r
-       friend class Lock;\r
-\r
-       class Lock\r
-       {\r
-               LockableObject const& host_;\r
-\r
-               Lock(const Lock&);\r
-               Lock& operator=(const Lock&);\r
-\r
-       public:\r
-               explicit Lock(const LockableObject& host) : host_(host)\r
-               {\r
-                       ::EnterCriticalSection(&host_.mtx_);\r
-               }\r
-\r
-               ~Lock()\r
-               {\r
-                       ::LeaveCriticalSection(&host_.mtx_);\r
-               }\r
-       };\r
-};\r
-\r
-}      //namespace utils\r
-}      //namespace caspar\r
-\r
-#endif //_CASPAR_LOCKABLE_H__
\ No newline at end of file
diff --git a/server/utils/LogException.cpp b/server/utils/LogException.cpp
deleted file mode 100644 (file)
index 5ff4613..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-\r
-#include "LogException.h"\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-LogException::LogException(const char* message) : std::runtime_error(message)\r
-{\r
-}\r
-\r
-LogException::~LogException()\r
-{\r
-}\r
-\r
-const char* LogException::GetMassage() const\r
-{\r
-       return std::runtime_error::what();\r
-}\r
-\r
-}\r
-}
\ No newline at end of file
diff --git a/server/utils/LogException.h b/server/utils/LogException.h
deleted file mode 100644 (file)
index 9da52be..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef LOGEXCEPTION_H\r
-#define LOGEXCEPTION_H\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-class LogException : public std::runtime_error\r
-{\r
-       public:\r
-               explicit LogException(const char* message = "Caught exception while logging");\r
-               ~LogException();\r
-\r
-               const char* GetMassage() const;\r
-};\r
-\r
-}\r
-}\r
-\r
-#endif\r
diff --git a/server/utils/LogLevel.h b/server/utils/LogLevel.h
deleted file mode 100644 (file)
index a04ac05..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef LOGLEVEL_H\r
-#define LOGLEVEL_H\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-struct LogLevel\r
-{\r
-       enum LogLevelEnum\r
-       {\r
-               Debug = 1,\r
-               Verbose,\r
-               Release,\r
-               Critical\r
-       };\r
-};\r
-\r
-}\r
-}\r
-\r
-#endif\r
diff --git a/server/utils/LogStream.cpp b/server/utils/LogStream.cpp
deleted file mode 100644 (file)
index 1c9b4fb..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-#include "LogStream.h"\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-LogStream::LogStream(Logger* pLogger) : pLogger(pLogger), pSstream(0)\r
-{\r
-}\r
-\r
-LogStream::LogStream(const LogStream& logStream) : pSstream(0),\r
-                                                                                                  pLogger(logStream.pLogger), level(logStream.level)\r
-{\r
-       if(logStream.pSstream != 0)\r
-               this->pSstream = new tstringstream(logStream.pSstream->str());\r
-}\r
-\r
-LogStream& LogStream::operator=(const LogStream& rhs)\r
-{\r
-       if(rhs.pSstream != 0)\r
-               this->pSstream = new tstringstream(rhs.pSstream->str());\r
-\r
-       this->pLogger = rhs.pLogger;\r
-       this->level = rhs.level;\r
-\r
-       return *this;\r
-}\r
-\r
-LogStream::~LogStream()\r
-{\r
-       if (this->pSstream != NULL)\r
-       {\r
-               DoFlush();\r
-               delete this->pSstream;\r
-       }\r
-}\r
-\r
-void LogStream::DoFlush()\r
-{\r
-       if(this->pSstream != 0 && this->pSstream->str().length() > 0)\r
-       {\r
-               this->pLogger->WriteLog(this->pSstream->str());\r
-               this->pSstream->str(TEXT(""));\r
-       }\r
-}\r
-\r
-}\r
-}
\ No newline at end of file
diff --git a/server/utils/LogStream.h b/server/utils/LogStream.h
deleted file mode 100644 (file)
index 93fada4..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef LOGSTREAM_H\r
-#define LOGSTREAM_H\r
-\r
-#include "LogLevel.h"\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-class Logger;\r
-\r
-class LogStream\r
-{\r
-       public:\r
-               enum LogStreamEnum { Flush = 1 };\r
-\r
-               explicit LogStream(Logger* pLogger);\r
-               LogStream(const LogStream& logStream);\r
-               LogStream& operator=(const LogStream& rhs);\r
-\r
-               ~LogStream();\r
-\r
-               template<typename T>\r
-               LogStream& operator<<(const T& rhs) {\r
-                       if (this->level >= this->pLogger->GetLevel()) {\r
-                               if(this->pSstream == 0)\r
-                                       this->pSstream = new tstringstream();\r
-\r
-                               *pSstream << rhs;\r
-                       }\r
-\r
-                       return *this;\r
-               }\r
-\r
-               template<> LogStream& operator<<(const LogLevel::LogLevelEnum& rhs) {\r
-                       this->level = rhs;\r
-                       return *this;\r
-               }\r
-\r
-               template<> LogStream& operator<<(const LogStream::LogStreamEnum& rhs) {\r
-                       if (rhs == LogStream::Flush)\r
-                               DoFlush();\r
-                       return *this;\r
-               }\r
-\r
-       private:\r
-               void DoFlush();\r
-\r
-               Logger* pLogger;\r
-               tstringstream* pSstream;\r
-               LogLevel::LogLevelEnum level;\r
-};\r
-\r
-}\r
-}\r
-\r
-#endif\r
diff --git a/server/utils/Logger.cpp b/server/utils/Logger.cpp
deleted file mode 100644 (file)
index 404b7c9..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-\r
-#include "Logger.h"\r
-#include "LogException.h"\r
-#include "LogStream.h"\r
-#include "OutputStream.h"\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-Logger::Logger() : level(LogLevel::Release)\r
-{\r
-}\r
-\r
-Logger::~Logger()\r
-{\r
-}\r
-\r
-Logger& Logger::GetInstance()\r
-{\r
-       static Logger logger;\r
-       return logger;\r
-}\r
-\r
-LogStream Logger::GetStream(LogLevel::LogLevelEnum level)\r
-{\r
-       LogStream logStream(this);\r
-       logStream << level;\r
-       return logStream;\r
-}\r
-\r
-void Logger::WriteLog(const tstring& message)\r
-{\r
-       try\r
-       {\r
-               this->pOutputStream->Println(message);\r
-       }\r
-       catch(const std::exception& ex)\r
-       {\r
-               throw LogException(ex.what());\r
-       }\r
-}\r
-\r
-void Logger::SetTimestamp(bool timestamp)\r
-{\r
-       if (pOutputStream != NULL)\r
-               this->pOutputStream->SetTimestamp(timestamp);\r
-}\r
-\r
-bool Logger::SetOutputStream(OutputStreamPtr pOutputStream)\r
-{\r
-       try\r
-       {\r
-               if (pOutputStream != NULL)\r
-               {\r
-                       Lock lock(*this);\r
-                       this->pOutputStream = pOutputStream;\r
-\r
-                       return true;\r
-               }\r
-\r
-               return false;\r
-       }\r
-       catch(const std::exception& ex)\r
-       {\r
-               throw LogException(ex.what());\r
-       }\r
-}\r
-\r
-LogLevel::LogLevelEnum Logger::GetLevel()\r
-{\r
-       return this->level;\r
-}\r
-\r
-void Logger::SetLevel(LogLevel::LogLevelEnum level)\r
-{\r
-       this->level = level;\r
-}\r
-\r
-}\r
-}
\ No newline at end of file
diff --git a/server/utils/Logger.h b/server/utils/Logger.h
deleted file mode 100644 (file)
index 50e16d7..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef LOGGER_H\r
-#define LOGGER_H\r
-\r
-#include "Lockable.h"\r
-#include "LogStream.h"\r
-#include "LogLevel.h"\r
-#include "OutputStream.h"\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-class Logger : private LockableObject\r
-{\r
-       public:\r
-               ~Logger();\r
-\r
-               static Logger& GetInstance();\r
-               \r
-               LogLevel::LogLevelEnum GetLevel();\r
-               void SetTimestamp(bool timestamp);\r
-               void WriteLog(const tstring& message);\r
-               void SetLevel(LogLevel::LogLevelEnum Level);\r
-               bool SetOutputStream(OutputStreamPtr pOutputStream);\r
-               LogStream GetStream(LogLevel::LogLevelEnum level = LogLevel::Release);\r
-\r
-       private:\r
-               Logger();\r
-\r
-       private:\r
-               OutputStreamPtr pOutputStream;\r
-               LogLevel::LogLevelEnum level;\r
-};\r
-\r
-}\r
-}\r
-\r
-#endif\r
diff --git a/server/utils/Noncopyable.hpp b/server/utils/Noncopyable.hpp
deleted file mode 100644 (file)
index 83a9299..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef __NONCOPYABLE_H__\r
-#define __NONCOPYABLE_H__\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-class Noncopyable\r
-{\r
-protected:\r
-       Noncopyable() {}\r
-       ~Noncopyable() {}\r
-private:\r
-       Noncopyable( const Noncopyable& );\r
-       const Noncopyable& operator=( const Noncopyable& );\r
-};\r
-\r
-} // namespace utils\r
-} //namespace caspar\r
-\r
-#endif __NONCOPYABLE_H__
\ No newline at end of file
diff --git a/server/utils/ObjectPool.h b/server/utils/ObjectPool.h
deleted file mode 100644 (file)
index 30cf2b9..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-#ifndef _OBJECTPOOL_H_\r
-#define _OBJECTPOOL_H_\r
-\r
-#include <functional>\r
-#include <memory>\r
-#include <type_traits>\r
-\r
-#include <tbb/concurrent_queue.h>\r
-\r
-namespace caspar\r
-{\r
-\r
-namespace utils\r
-{\r
-\r
-template<typename T, typename Factory = std::function<T*()>, typename PoolType = tbb::concurrent_queue<T*>>\r
-class ObjectPool\r
-{\r
-       static_assert(std::tr1::is_reference<T>::value == false, "Object type cannot be reference type");\r
-public:\r
-       typedef std::shared_ptr<PoolType> PoolTypePtr;\r
-\r
-       ObjectPool(const Factory& factory, const std::function<void(T*)>& destructor) : factory_(factory)\r
-       {\r
-               pPool_ = PoolTypePtr(new PoolType(), [=](PoolType* pPool)\r
-                       {\r
-                               T* pItem;\r
-                               while(pPool->try_pop(pItem))\r
-                                       destructor(pItem);\r
-                               delete pPool;\r
-                       });\r
-       }\r
-\r
-       ObjectPool(Factory&& factory, std::function<void(T*)>&& destructor)     : factory_(std::move(factory))\r
-       {\r
-               pPool_ = PoolTypePtr(new PoolType(), [=](PoolType* pPool)\r
-                       {\r
-                               T* pItem;\r
-                               while(pPool->try_pop(pItem))\r
-                                       destructor(pItem);\r
-                               delete pPool;\r
-                       });\r
-       }\r
-\r
-       std::shared_ptr<T> Create()\r
-       {\r
-               T* pItem = pPool_->try_pop(pItem) ? pItem : factory_();\r
-               return std::shared_ptr<T>(pItem, [=](T* item){ pPool_->push(item); });\r
-       }\r
-\r
-       template<typename P0>\r
-       std::shared_ptr<T> Create(P0&& p0)\r
-       {\r
-               T* pItem = pPool_->try_pop(pItem) ? pItem : factory_(std::forward<P0>(p0));\r
-               return std::shared_ptr<T>(pItem, [=](T* item){ pPool_->push(item); });\r
-       }\r
-\r
-       template<typename P0, typename P1>\r
-       std::shared_ptr<T> Create(P0&& p0, P1&& p1)\r
-       {\r
-               T* pItem = pPool_->try_pop(pItem) ? pItem : factory_(std::forward<P0>(p0), std::forward<P1>(p1));\r
-               return std::shared_ptr<T>(pItem, [=](T* item){ pPool_->push(item); });\r
-       }       \r
-\r
-       template<typename P0, typename P1, typename P2>\r
-       std::shared_ptr<T> Create(P0&& p0, P1&& p1, P2&& p2)\r
-       {\r
-               T* pItem = pPool_->try_pop(pItem) ? pItem : factory_(std::forward<P0>(p0), std::forward<P1>(p1), std::forward<P2>(p2));\r
-               return std::shared_ptr<T>(pItem, [=](T* item){ pPool_->push(item); });\r
-       }\r
-\r
-       template<typename P0, typename P1, typename P2, typename P3>\r
-       std::shared_ptr<T> Create(P0&& p0, P1&& p1, P2&& p2, P3&& p3)\r
-       {\r
-               T* pItem = pPool_->try_pop(pItem) ? pItem : factory_(std::forward<P0>(p0), std::forward<P1>(p1), std::forward<P2>(p2), std::forward<P3>(p3));\r
-               return std::shared_ptr<T>(pItem, [=](T* item){ pPool_->push(item); });\r
-       }\r
-\r
-private:\r
-       PoolTypePtr pPool_;\r
-       const Factory factory_;\r
-};\r
-\r
-}\r
-}\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/utils/OutputStream.h b/server/utils/OutputStream.h
deleted file mode 100644 (file)
index 8766eaa..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef OUTPUTSTREAM_H\r
-#define OUTPUTSTREAM_H\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-class OutputStream\r
-{\r
-       public:\r
-               virtual ~OutputStream() {}\r
-\r
-               virtual bool Open() = 0;\r
-               virtual void Close() = 0;\r
-               virtual void SetTimestamp(bool timestamp) = 0;\r
-               virtual void Write(const void*, size_t) = 0;\r
-               virtual void Print(const tstring& message) = 0;\r
-               virtual void Println(const tstring& message) = 0;\r
-};\r
-\r
-typedef std::tr1::shared_ptr<OutputStream> OutputStreamPtr;\r
-\r
-}\r
-}\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/utils/PixmapData.h b/server/utils/PixmapData.h
deleted file mode 100644 (file)
index 8a1731f..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef __IMAGEDATA_H__\r
-#define __IMAGEDATA_H__\r
-\r
-#include <memory>\r
-\r
-#if _MSC_VER > 1000\r
-#pragma once\r
-#endif // _MSC_VER > 1000\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-class PixmapData\r
-{\r
-       PixmapData(const PixmapData&);\r
-       PixmapData& operator=(const PixmapData&);\r
-\r
-public:\r
-       PixmapData() : height(0), width(0), bpp(0), pData_(0) \r
-       {}\r
-       PixmapData(int w, int h, int b) : width(w), height(h), bpp(b), pData_(new unsigned char[w*h*b])\r
-       {}\r
-\r
-       ~PixmapData() {\r
-               Clear();\r
-       }\r
-\r
-       void Set(int w, int h, int b) {\r
-               Clear();\r
-               width = w;\r
-               height = h;\r
-               bpp = b;\r
-               pData_ = new unsigned char[w*h*b];\r
-       }\r
-\r
-       void Clear() {\r
-               height = 0;\r
-               width = 0;\r
-               bpp = 0;\r
-\r
-               if(pData_ != 0)\r
-               {\r
-                       delete[] pData_;\r
-                       pData_ = 0;\r
-               }\r
-       }\r
-\r
-       unsigned char* GetDataPtr() {\r
-               return pData_;\r
-       }\r
-\r
-       int height;\r
-       int width;\r
-       int bpp;\r
-\r
-private:\r
-       unsigned char *pData_;\r
-};\r
-\r
-typedef std::tr1::shared_ptr<PixmapData> PixmapDataPtr;\r
-\r
-}      //namespace utils\r
-}      //namespace caspar\r
-\r
-#endif //__IMAGEDATA_H__\r
diff --git a/server/utils/Process.cpp b/server/utils/Process.cpp
deleted file mode 100644 (file)
index 4bc40ac..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-#include "Process.h"\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-Process::Process()\r
-{\r
-       hProcess_ = ::GetCurrentProcess();\r
-}\r
-\r
-bool Process::SetWorkingSetSize(SIZE_T minSize, SIZE_T maxSize) \r
-{\r
-       return (::SetProcessWorkingSetSize(hProcess_, minSize, maxSize) != 0);\r
-}\r
-\r
-bool Process::GetWorkingSetSize(SIZE_T& minSize, SIZE_T& maxSize) \r
-{\r
-       return (::GetProcessWorkingSetSize(hProcess_, &minSize, &maxSize) != 0);\r
-}\r
-\r
-}\r
-}
\ No newline at end of file
diff --git a/server/utils/Process.h b/server/utils/Process.h
deleted file mode 100644 (file)
index ad51295..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPARUTILS_PROCESS_H__\r
-#define _CASPARUTILS_PROCESS_H__\r
-\r
-#pragma once\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-class Process\r
-{\r
-       Process();\r
-       Process(const Process&);\r
-       Process& operator=(const Process&);\r
-\r
-public:\r
-       static Process& GetCurrentProcess() {\r
-               static Process instance;\r
-               return instance;\r
-       }\r
-\r
-       bool SetWorkingSetSize(SIZE_T minSize, SIZE_T maxSize);\r
-       bool GetWorkingSetSize(SIZE_T& minSize, SIZE_T& maxSize);\r
-\r
-private:\r
-       HANDLE hProcess_;\r
-};\r
-\r
-}      //namespace utils\r
-}      //namespace caspar\r
-#endif //_CASPARUTILS_PROCESS_H__
\ No newline at end of file
diff --git a/server/utils/Semaphore.cpp b/server/utils/Semaphore.cpp
deleted file mode 100644 (file)
index 035913b..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-\r
-#include "Semaphore.h"\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-Semaphore::Semaphore(long initialCount, long maximumCount) : handle_(0)\r
-{\r
-       handle_ = CreateSemaphore(0, initialCount, maximumCount, 0);\r
-       if(handle_ == 0) {\r
-               throw std::exception("Failed to create semaphore");\r
-       }\r
-}\r
-bool Semaphore::Release(long releaseCount, long* pPrevCount) {\r
-       return ReleaseSemaphore(handle_, releaseCount, pPrevCount) != 0;\r
-}\r
-\r
-Semaphore::~Semaphore()\r
-{\r
-       CloseHandle(handle_);\r
-}\r
-\r
-}      //namespace utils\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/utils/Semaphore.h b/server/utils/Semaphore.h
deleted file mode 100644 (file)
index 7f13931..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CSAPAR_SEMAPHORE_H__\r
-#define _CASPAR_SEMAPHORE_H__\r
-\r
-#pragma once\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-class Semaphore\r
-{\r
-public:\r
-       Semaphore(long initialCount, long maximumCount);\r
-       ~Semaphore();\r
-\r
-       bool Semaphore::Release(long releaseCount = 1, long* pPrevCount = 0);\r
-\r
-       operator const HANDLE() const {\r
-               return handle_;\r
-       }\r
-\r
-private:\r
-       HANDLE handle_;\r
-};\r
-\r
-typedef std::tr1::shared_ptr<Semaphore> SemaphorePtr;\r
-\r
-}      //namespace utils\r
-}      //namespace caspar\r
-\r
-#endif //_CASPAR_SEMAPHORE_H__
\ No newline at end of file
diff --git a/server/utils/TaskQueue.h b/server/utils/TaskQueue.h
deleted file mode 100644 (file)
index 157cb64..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_TASKQUEUE_H__\r
-#define _CASPAR_TASKQUEUE_H__\r
-\r
-#pragma once\r
-#include <functional>\r
-#include "lockable.h"\r
-#include "noncopyable.hpp"\r
-#include "event.h"\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-typedef std::tr1::function<void()> Task;\r
-class TaskQueue : private utils::LockableObject, private utils::Noncopyable {\r
-public:\r
-       TaskQueue() : waitEvent_(TRUE, FALSE) {}\r
-       ~TaskQueue() {}\r
-       void push_back(const Task& task) {\r
-               Lock lock(*this);\r
-               taskList_.push_back(task);\r
-               waitEvent_.Set();\r
-       }\r
-\r
-       void pop_front(Task& dest) {\r
-               Lock lock(*this);\r
-               if(taskList_.size() > 0) {\r
-                       dest = taskList_.front();\r
-\r
-                       taskList_.pop_front();\r
-                       if(taskList_.empty())\r
-                               waitEvent_.Reset();\r
-               }\r
-       }\r
-\r
-       void pop_and_execute_front() {\r
-               Task task;\r
-               pop_front(task);\r
-               if(task)\r
-                       task();\r
-       }\r
-\r
-       HANDLE GetWaitEvent() {\r
-               return waitEvent_;\r
-       }\r
-private:\r
-       utils::Event waitEvent_;\r
-       std::list<Task> taskList_;\r
-};\r
-\r
-\r
-}      //namespace utils\r
-}      //namespace caspar\r
-\r
-#endif //_CASPAR_TASKQUEUE_H__
\ No newline at end of file
diff --git a/server/utils/Thread.cpp b/server/utils/Thread.cpp
deleted file mode 100644 (file)
index 7a257da..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-\r
-#include "thread.h"\r
-#include "win32exception.h"\r
-\r
-/*\r
-\r
-*/\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-bool Thread::static_bInstallWin32ExceptionHandler_ = true;\r
-\r
-Thread::Thread() : pRunnable_(0), hThread_(0), stopEvent_(TRUE, FALSE), timeout_(10000)  {\r
-}\r
-\r
-Thread::~Thread() {\r
-       Stop();\r
-}\r
-\r
-bool Thread::IsRunning() {\r
-       if(hThread_ != 0) {\r
-               if(WaitForSingleObject(hThread_, 0) == WAIT_OBJECT_0) {\r
-                       CloseHandle(hThread_);\r
-                       hThread_ = 0;\r
-                       pRunnable_ = 0;\r
-               }\r
-       }\r
-\r
-       return (hThread_ != 0);\r
-}\r
-\r
-bool Thread::Start(IRunnable* pRunnable) {\r
-       if(hThread_ == 0) {\r
-               if(pRunnable != 0) {\r
-                       pRunnable_ = pRunnable;\r
-                       stopEvent_.Reset();\r
-                       hThread_ = CreateThread(0, 0, ThreadEntrypoint, this, 0, 0);\r
-\r
-                       if(hThread_ == 0)\r
-                               pRunnable_ = 0;\r
-\r
-                       return (hThread_ != 0);\r
-               }\r
-       }\r
-       return false;\r
-}\r
-\r
-bool Thread::Stop(bool bWait) {\r
-       bool returnValue = true;\r
-\r
-       if(hThread_ != 0) {\r
-               stopEvent_.Set();\r
-\r
-               if(bWait) {\r
-                       DWORD successCode = WaitForSingleObject(hThread_, timeout_);\r
-                       if(successCode != WAIT_OBJECT_0)\r
-                               returnValue = false;\r
-               }\r
-               CloseHandle(hThread_);\r
-\r
-               hThread_ = 0;\r
-               pRunnable_ = 0;\r
-       }\r
-\r
-       return returnValue;\r
-}\r
-\r
-void Thread::EnableWin32ExceptionHandler(bool bEnable) {\r
-       static_bInstallWin32ExceptionHandler_ = bEnable;\r
-}\r
-\r
-DWORD WINAPI Thread::ThreadEntrypoint(LPVOID pParam) {\r
-       Thread* pThis = reinterpret_cast<Thread*>(pParam);\r
-       \r
-       if(Thread::static_bInstallWin32ExceptionHandler_)\r
-               Win32Exception::InstallHandler();\r
-\r
-       _configthreadlocale(_DISABLE_PER_THREAD_LOCALE);\r
-\r
-       pThis->Run();\r
-\r
-       return 0;\r
-}\r
-\r
-void Thread::Run() {\r
-       bool bDoRestart = false;\r
-\r
-       do {\r
-               try {\r
-                       bDoRestart = false;\r
-                       stopEvent_.Reset();\r
-                       pRunnable_->Run(stopEvent_);\r
-               }\r
-               catch(const std::exception& e) {\r
-                       bDoRestart = pRunnable_->OnUnhandledException(e);\r
-               }\r
-       }while(bDoRestart);\r
-}\r
-\r
-}      //namespace utils\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/utils/Thread.h b/server/utils/Thread.h
deleted file mode 100644 (file)
index 162914e..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_THREAD_H__\r
-#define _CASPAR_THREAD_H__\r
-\r
-#pragma once\r
-\r
-#include "runnable.h"\r
-#include "event.h"\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-class Thread\r
-{\r
-       Thread(const Thread&);\r
-       Thread& operator=(const Thread&);\r
-public:\r
-       Thread();\r
-       ~Thread();\r
-\r
-       bool Start(IRunnable*);\r
-       bool Stop(bool bWait = true);\r
-\r
-       bool IsRunning();\r
-\r
-       static void EnableWin32ExceptionHandler(bool bEnable);\r
-\r
-       void SetTimeout(DWORD timeout) {\r
-               timeout_ = timeout;\r
-       }\r
-       DWORD GetTimeout() {\r
-               return timeout_;\r
-       }\r
-\r
-private:\r
-       static DWORD WINAPI ThreadEntrypoint(LPVOID pParam);\r
-       void Run();\r
-\r
-       HANDLE                  hThread_;\r
-       IRunnable*              pRunnable_;\r
-\r
-       Event                   stopEvent_;\r
-\r
-       DWORD                   timeout_;\r
-       static bool             static_bInstallWin32ExceptionHandler_;\r
-};\r
-\r
-}      //namespace utils\r
-}      //namespace caspar\r
-\r
-\r
-#endif //_CASPAR_THREAD_H__\r
diff --git a/server/utils/Types.hpp b/server/utils/Types.hpp
deleted file mode 100644 (file)
index 4f63a6e..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _TYPES_H_\r
-#define _TYPES_H_\r
-\r
-typedef unsigned char  u8;\r
-typedef char                   s8;\r
-\r
-typedef unsigned short u16;\r
-typedef short                  s16;\r
-\r
-typedef unsigned int   u32;\r
-typedef int                            s32;\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/utils/UnhandledException.h b/server/utils/UnhandledException.h
deleted file mode 100644 (file)
index 7484619..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-#ifndef _UNHANDLED_EXCEPTION_H_\r
-#define _UNHANDLED_EXCEPTION_H_\r
-\r
-#include <exception>\r
-#include <system_error>\r
-#include <string>\r
-\r
-#include "Logger.h"\r
-#include "LogLevel.h"\r
-#include "Win32Exception.h"\r
-\r
-#define CASPAR_TRY try\r
-#define CASPAR_CATCH_UNHANDLED(desc) \\r
-               catch(std::system_error& er)    \\r
-               {       \\r
-                       try     \\r
-                       {       \\r
-                               LOG << caspar::utils::LogLevel::Critical << desc << TEXT(" UNHANDLED EXCEPTION Message:")  << er.code().message().c_str();      \\r
-                       }       \\r
-                       catch(...){}    \\r
-               }       \\r
-               catch(std::exception& ex)       \\r
-               {       \\r
-                       try     \\r
-                       {       \\r
-                               LOG << caspar::utils::LogLevel::Critical << desc << TEXT(" UNHANDLED EXCEPTION Message:")  << ex.what();        \\r
-                       }       \\r
-                       catch(...){}    \\r
-               }       \\r
-               catch(...)      \\r
-               {       \\r
-                       try     \\r
-                       {       \\r
-                               LOG << caspar::utils::LogLevel::Critical << desc << TEXT(" UNHANDLED EXCEPTION");       \\r
-                       }       \\r
-                       catch(...){}    \\r
-               }\r
-\r
-#define CASPAR_RETHROW_AND_LOG(desc) \\r
-               catch(std::system_error& er)    \\r
-               {       \\r
-                       try     \\r
-                       {       \\r
-                               LOG << caspar::utils::LogLevel::Critical << desc << TEXT(" Message:") << er.code().message().c_str();   \\r
-                       }       \\r
-                       catch(...){}    \\r
-                       throw;\\r
-               }       \\r
-               catch(std::exception& ex)       \\r
-               {       \\r
-                       try     \\r
-                       {       \\r
-                               LOG << caspar::utils::LogLevel::Critical << desc << TEXT(" Message:") << ex.what();     \\r
-                       }       \\r
-                       catch(...){}    \\r
-                       throw;\\r
-               }       \\r
-               catch(...)      \\r
-               {       \\r
-                       try     \\r
-                       {       \\r
-                               LOG << caspar::utils::LogLevel::Critical << desc;       \\r
-                       }       \\r
-                       catch(...){}    \\r
-                       throw;\\r
-               }\r
-\r
-#define CASPAR_CATCH_AND_LOG(desc) \\r
-               catch(std::system_error& er)    \\r
-               {       \\r
-                       try     \\r
-                       {       \\r
-                               LOG << caspar::utils::LogLevel::Critical << desc << TEXT(" Message:") << er.code().message().c_str();   \\r
-                       }       \\r
-                       catch(...){}    \\r
-               }       \\r
-               catch(std::exception& ex)       \\r
-               {       \\r
-                       try     \\r
-                       {       \\r
-                               LOG << caspar::utils::LogLevel::Critical << desc << TEXT(" Message:") << ex.what();     \\r
-                       }       \\r
-                       catch(...){}    \\r
-               }       \\r
-               catch(...)      \\r
-               {       \\r
-                       try     \\r
-                       {       \\r
-                               LOG << caspar::utils::LogLevel::Critical << desc;       \\r
-                       }       \\r
-                       catch(...){}    \\r
-               }\r
-\r
-template<typename F>\r
-void CASPAR_THREAD_GUARD(const wchar_t* desc, const F& func)   \r
-{\r
-       CASPAR_THREAD_GUARD(0, desc, func);\r
-}\r
-\r
-template<typename F>\r
-void CASPAR_THREAD_GUARD(int restart_count, const std::wstring& desc, const F& func)   \r
-{\r
-               LOG << caspar::utils::LogLevel::Verbose << desc << TEXT(" Thread Started");\r
-\r
-#ifdef WIN32\r
-               Win32Exception::InstallHandler();\r
-               _configthreadlocale(_DISABLE_PER_THREAD_LOCALE);\r
-#endif\r
-               for(int n = -1; n < restart_count; ++n)\r
-               {\r
-                       try\r
-                       {\r
-                               if(n >= 0)\r
-                                       LOG << caspar::utils::LogLevel::Critical << desc << TEXT(" Restarting Count:")  << n+1 << "/" << restart_count;\r
-                               func();\r
-                               n = restart_count;\r
-                       }\r
-                       catch(std::system_error& er)    \r
-                       {       \r
-                               try     \r
-                               {       \r
-                                       LOG << caspar::utils::LogLevel::Critical << desc << TEXT(" UNHANDLED EXCEPTION Message:")  << er.code().message().c_str();      \r
-                               }       \r
-                               catch(...){}    \r
-                       }       \r
-                       catch(std::exception& ex)       \r
-                       {       \r
-                               try     \r
-                               {       \r
-                                       LOG << caspar::utils::LogLevel::Critical << desc << TEXT(" UNHANDLED EXCEPTION Message:")  << ex.what();        \r
-                               }       \r
-                               catch(...){}    \r
-                       }       \r
-                       catch(...)      \r
-                       {       \r
-                               try     \r
-                               {       \r
-                                       LOG << caspar::utils::LogLevel::Critical << desc << TEXT(" UNHANDLED EXCEPTION");       \r
-                               }       \r
-                               catch(...){}    \r
-                       }\r
-               }\r
-               LOG << caspar::utils::LogLevel::Verbose << desc << TEXT(" Thread Ended");\r
-}\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/utils/Win32Exception.cpp b/server/utils/Win32Exception.cpp
deleted file mode 100644 (file)
index 76831af..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\stdafx.h"\r
-#include "win32exception.h"\r
-\r
-void Win32Exception::InstallHandler() {\r
-       _set_se_translator(Win32Exception::Handler);\r
-}\r
-\r
-void Win32Exception::Handler(unsigned int errorCode, EXCEPTION_POINTERS* pInfo) {\r
-       switch(errorCode)\r
-       {\r
-       case EXCEPTION_ACCESS_VIOLATION:\r
-               throw Win32AccessViolationException(*(pInfo->ExceptionRecord));\r
-               break;\r
-\r
-       default:\r
-               throw Win32Exception(*(pInfo->ExceptionRecord));\r
-       }\r
-}\r
-\r
-Win32Exception::Win32Exception(const EXCEPTION_RECORD& info) : message_("Win32 exception"), location_(info.ExceptionAddress), errorCode_(info.ExceptionCode)\r
-{\r
-       switch(info.ExceptionCode)\r
-       {\r
-       case EXCEPTION_ACCESS_VIOLATION:\r
-               message_ = "Access violation";\r
-               break;\r
-       case EXCEPTION_FLT_DIVIDE_BY_ZERO:\r
-       case EXCEPTION_INT_DIVIDE_BY_ZERO:\r
-               message_ = "Divide by zero";\r
-               break;\r
-       }\r
-}\r
-\r
-Win32AccessViolationException::Win32AccessViolationException(const EXCEPTION_RECORD& info) : Win32Exception(info), isWrite_(false), badAddress_(0) \r
-{\r
-       isWrite_ = info.ExceptionInformation[0] == 1;\r
-       badAddress_ = reinterpret_cast<Win32Exception::Address>(info.ExceptionInformation[1]);\r
-}\r
-\r
-const char* Win32AccessViolationException::what() const {\r
-       sprintf_s<>(messageBuffer_, "Access violation at %p, trying to %s %p", Location(), isWrite_?"write":"read", badAddress_);\r
-\r
-       return messageBuffer_;\r
-}
\ No newline at end of file
diff --git a/server/utils/Win32Exception.h b/server/utils/Win32Exception.h
deleted file mode 100644 (file)
index 1535276..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_WIN32EXCEPTION_H__\r
-#define _CASPAR_WIN32EXCEPTION_H__\r
-\r
-#pragma once\r
-\r
-#include <exception>\r
-\r
-class Win32Exception : public std::exception \r
-{\r
-public:\r
-       typedef const void* Address;\r
-       static void InstallHandler();\r
-\r
-       Address Location() const {\r
-               return location_;\r
-       }\r
-       unsigned int ErrorCode() const {\r
-               return errorCode_;\r
-       }\r
-       virtual const char* what() const {\r
-               return message_;\r
-       }\r
-\r
-protected:\r
-       Win32Exception(const EXCEPTION_RECORD& info);\r
-       static void Handler(unsigned int errorCode, EXCEPTION_POINTERS* pInfo);\r
-\r
-private:\r
-       const char* message_;\r
-\r
-       Address location_;\r
-       unsigned int errorCode_;\r
-};\r
-\r
-class Win32AccessViolationException : public Win32Exception\r
-{\r
-       mutable char messageBuffer_[256];\r
-\r
-public:\r
-       bool IsWrite() const {\r
-               return isWrite_;\r
-       }\r
-       Address BadAddress() const {\r
-               return badAddress_;\r
-       }\r
-       virtual const char* what() const;\r
-\r
-protected:\r
-       Win32AccessViolationException(const EXCEPTION_RECORD& info);\r
-       friend void Win32Exception::Handler(unsigned int errorCode, EXCEPTION_POINTERS* pInfo);\r
-\r
-private:\r
-       bool isWrite_;\r
-       Address badAddress_;\r
-};\r
-\r
-#endif //_CASPAR_WIN32EXCEPTION_H__
\ No newline at end of file
diff --git a/server/utils/event.cpp b/server/utils/event.cpp
deleted file mode 100644 (file)
index 9f69a3b..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\StdAfx.h"\r
-\r
-#include <string>\r
-#include "Event.h"\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-Event::Event(bool bManualReset, bool bInitialState) : handle_(0)\r
-{\r
-       handle_ = CreateEvent(0, bManualReset, bInitialState, 0);\r
-       if(handle_ == 0) {\r
-               throw std::exception("Failed to create event");\r
-       }\r
-}\r
-\r
-void Event::Set() {\r
-       BOOL res = SetEvent(handle_);\r
-       if(res == FALSE) {\r
-               DWORD error = GetLastError();\r
-       }\r
-}\r
-void Event::Reset() {\r
-       ResetEvent(handle_);\r
-}\r
-\r
-Event::~Event()\r
-{\r
-       CloseHandle(handle_);\r
-}\r
-\r
-}      //namespace utils\r
-}      //namespace caspar
\ No newline at end of file
diff --git a/server/utils/functiontask.hpp b/server/utils/functiontask.hpp
deleted file mode 100644 (file)
index 2f47187..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-#ifndef CASPAR_FUNCTION_TASK_H_\r
-\r
-#define CASPAR_FUNCTION_TASK_H_\r
-\r
-#include <tbb/task.h>\r
-#include <cassert>\r
-#include <tbb/concurrent_queue.h>\r
-#include <tbb/atomic.h>\r
-#include <functional>\r
-\r
-namespace caspar\r
-{\r
-       class function_task : tbb::task\r
-       {\r
-       public:\r
-               function_task(std::function<void()>&& func) : func_(std::move(func))\r
-               {\r
-                       assert(func_);\r
-               }\r
-\r
-               tbb::task* execute()\r
-               {\r
-                       func_();\r
-                       return nullptr;\r
-               }\r
-\r
-               inline static void enqueue(std::function<void()>&& func)\r
-               {\r
-                       tbb::task::enqueue(*new(tbb::task::allocate_root()) function_task(std::forward<std::function<void()>>(func)));\r
-               }\r
-\r
-       private:\r
-               std::function<void()> func_;\r
-       };\r
-\r
-       class function_task_serializer\r
-       {\r
-       public:\r
-               function_task_serializer()\r
-               {\r
-                       count_ = 0;\r
-               }\r
-\r
-               void enqueue(std::function<void()>&& func)\r
-               {\r
-                       assert(func);\r
-                       if(!func)\r
-                               return;\r
-\r
-                       queue_.push(std::forward<std::function<void()>>(func));\r
-                       if(++count_ == 1)\r
-                               function_task::enqueue([=]{execute();});\r
-               }\r
-\r
-       private:\r
-               void execute()\r
-               {\r
-                       std::function<void()> func;\r
-                       if(queue_.try_pop(func))\r
-                       {\r
-                               func();\r
-                               note_completion();\r
-                       }\r
-               }\r
-\r
-               void note_completion()\r
-               {\r
-                       if(--count_ != 0)\r
-                               function_task::enqueue([=]{execute();});\r
-               }\r
-\r
-               tbb::concurrent_bounded_queue<std::function<void()>> queue_;\r
-               tbb::atomic<int> count_;\r
-       };\r
-}\r
-\r
-#endif\r
diff --git a/server/utils/image/Clear.cpp b/server/utils/image/Clear.cpp
deleted file mode 100644 (file)
index 6d004e4..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "Clear.hpp"\r
-\r
-#include <intrin.h>\r
-#include <functional>\r
-\r
-#include "../Types.hpp"\r
-\r
-#include "tbb/parallel_for.h"\r
-#include "tbb/blocked_range.h"\r
-\r
-using namespace std::tr1::placeholders;\r
-\r
-namespace caspar{\r
-namespace utils{\r
-namespace image{\r
-\r
-static const size_t STRIDE = sizeof(__m128i)*4;\r
-\r
-void DoClearParallel(const tbb::blocked_range<size_t>& r, const std::tr1::function<void(void*, size_t)>& func, void* dest)\r
-{\r
-       size_t offset = r.begin()*STRIDE;\r
-       size_t size = r.size()*STRIDE;\r
-       func(reinterpret_cast<s8*>(dest) + offset, size);\r
-}\r
-\r
-void ClearParallel(const std::tr1::function<void(void*, size_t)>& func, void* dest, size_t size)\r
-{\r
-       tbb::parallel_for(tbb::blocked_range<size_t>(0, size/STRIDE), std::tr1::bind(&DoClearParallel, _1, func, dest));        \r
-}\r
-\r
-ClearFun GetClearFun(SIMD simd)\r
-{\r
-       if(simd >= SSE2)\r
-               return ClearParallel_SSE2;\r
-       else\r
-               return ClearParallel_REF;\r
-}\r
-\r
-// TODO: (R.N) optimize => prefetch and cacheline loop unroll\r
-void Clear_SSE2(void* dest, size_t size)\r
-{\r
-       __m128i val = _mm_setzero_si128();\r
-       __m128i* ptr = reinterpret_cast<__m128i*>(dest);\r
-\r
-       int times = size / 16;\r
-       for(int i=0; i < times; ++i) \r
-       {\r
-               _mm_stream_si128(ptr, val);\r
-               ptr++;\r
-       }\r
-}\r
-\r
-void ClearParallel_SSE2(void* dest, size_t size)\r
-{\r
-       ClearParallel(&Clear_SSE2, dest, size);\r
-}\r
-\r
-void Clear_REF(void* dest, size_t size)\r
-{\r
-       __stosd(reinterpret_cast<unsigned long*>(dest), 0, size/4);\r
-}\r
-\r
-void ClearParallel_REF(void* dest, size_t size)\r
-{\r
-       ClearParallel(&Clear_REF, dest, size);\r
-}\r
-\r
-}\r
-}\r
-}
\ No newline at end of file
diff --git a/server/utils/image/Clear.hpp b/server/utils/image/Clear.hpp
deleted file mode 100644 (file)
index 7b86b9d..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef CLEAR_H_\r
-#define CLEAR_H_\r
-\r
-#include "../CPUID.hpp"\r
-\r
-namespace caspar{\r
-namespace utils{\r
-namespace image{\r
-       \r
-void Clear_SSE2         (void* dest, size_t size);\r
-void Clear_REF  (void* dest, size_t size);\r
-void ClearParallel_SSE2         (void* dest, size_t size);\r
-void ClearParallel_REF  (void* dest, size_t size);\r
-\r
-typedef void(*ClearFun)(void*, size_t);\r
-ClearFun GetClearFun(SIMD simd = REF);\r
-\r
-\r
-//void StraightTransform_SSE2(const void* source, void* dest, size_t size);\r
-//void StraightTransform_REF(const void* source, void* dest, size_t size);\r
-//\r
-//typedef void(*StraightTransformFun)(const void*, void*, size_t);\r
-//StraightTransformFun GetStraightTransformFun(SIMD simd = REF);\r
-\r
-} // namespace image\r
-} // namespace utils\r
-} // namespace caspar\r
-\r
-#endif\r
-\r
-\r
diff --git a/server/utils/image/Copy.cpp b/server/utils/image/Copy.cpp
deleted file mode 100644 (file)
index be78649..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "Copy.hpp"\r
-\r
-#include <intrin.h>\r
-#include <functional>\r
-\r
-#include "../Types.hpp"\r
-\r
-#include "tbb/parallel_for.h"\r
-#include "tbb/blocked_range.h"\r
-\r
-using namespace std::tr1::placeholders;\r
-\r
-namespace caspar{\r
-namespace utils{\r
-namespace image{\r
-\r
-static const size_t STRIDE = sizeof(__m128i)*4;\r
-\r
-void DoCopyParallel(const tbb::blocked_range<size_t>& r, const std::tr1::function<void(void*, const void*, size_t)>& func, void* dest, const void* source)\r
-{\r
-       size_t offset = r.begin()*STRIDE;\r
-       size_t size = r.size()*STRIDE;\r
-       func(reinterpret_cast<s8*>(dest) + offset, reinterpret_cast<const s8*>(source) + offset, size);\r
-}\r
-\r
-void CopyParallel(const std::tr1::function<void(void*, const void*, size_t)>& func, void* dest, const void* source, size_t size)\r
-{\r
-       tbb::parallel_for(tbb::blocked_range<size_t>(0, size/STRIDE), std::tr1::bind(&DoCopyParallel, _1, func, dest, source)); \r
-}\r
-\r
-CopyFun GetCopyFun(SIMD simd)\r
-{\r
-       if(simd >= SSE2)\r
-               return CopyParallel_SSE2;\r
-       else\r
-               return CopyParallel_REF;\r
-}\r
-\r
-// TODO: (R.N) optimize => prefetch and cacheline loop unroll\r
-void Copy_SSE2(void* dest, const void* source, size_t size)\r
-{\r
-       __m128i val = _mm_setzero_si128();\r
-       __m128i* pD = reinterpret_cast<__m128i*>(dest);\r
-       const __m128i* pS = reinterpret_cast<const __m128i*>(source);\r
-\r
-       int times = size / 16;\r
-       for(int i=0; i < times; ++i) \r
-       {\r
-               val = _mm_load_si128(pS);\r
-               _mm_stream_si128(pD, val);\r
-\r
-               ++pD;\r
-               ++pS;\r
-       }\r
-       _mm_mfence();   //ensure last WC buffers get flushed to memory\r
-}\r
-\r
-void CopyParallel_SSE2(void* dest, const void* source, size_t size)\r
-{\r
-       CopyParallel(&Copy_SSE2, dest, source, size);\r
-}\r
-\r
-void Copy_REF(void* dest, const void* source, size_t size)\r
-{\r
-       __movsd(reinterpret_cast<unsigned long*>(dest), reinterpret_cast<const unsigned long*>(source), size/4);\r
-}\r
-\r
-void CopyParallel_REF(void* dest, const void* source, size_t size)\r
-{\r
-       CopyParallel(&Copy_REF, dest, source, size);\r
-}\r
-\r
-}\r
-}\r
-}
\ No newline at end of file
diff --git a/server/utils/image/Copy.hpp b/server/utils/image/Copy.hpp
deleted file mode 100644 (file)
index e921d8b..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef COPY_H_\r
-#define COPY_H_\r
-\r
-#include "../CPUID.hpp"\r
-\r
-namespace caspar{\r
-namespace utils{\r
-namespace image{\r
-       \r
-void Copy_SSE2  (void* dest, const void* source, size_t size);\r
-void Copy_REF   (void* dest, const void* source, size_t size);\r
-\r
-void CopyParallel_SSE2  (void* dest, const void* source, size_t size);\r
-void CopyParallel_REF   (void* dest, const void* source, size_t size);\r
-\r
-typedef void(*CopyFun)(void*, const void*, size_t);\r
-CopyFun GetCopyFun(SIMD simd = REF);\r
-\r
-//void StraightTransform_SSE2(const void* source, void* dest, size_t size);\r
-//void StraightTransform_REF(const void* source, void* dest, size_t size);\r
-//\r
-//typedef void(*StraightTransformFun)(const void*, void*, size_t);\r
-//StraightTransformFun GetStraightTransformFun(SIMD simd = REF);\r
-\r
-} // namespace image\r
-} // namespace utils\r
-} // namespace caspar\r
-\r
-#endif\r
-\r
-\r
diff --git a/server/utils/image/CopyField.cpp b/server/utils/image/CopyField.cpp
deleted file mode 100644 (file)
index 9c4d6af..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "CopyField.hpp"\r
-#include "Copy.hpp"\r
-\r
-#include <intrin.h>\r
-#include <functional>\r
-\r
-#include "../Types.hpp"\r
-\r
-#include "tbb/parallel_for.h"\r
-#include "tbb/blocked_range.h"\r
-\r
-using namespace std::tr1::placeholders; \r
-\r
-namespace caspar{\r
-namespace utils{\r
-namespace image{\r
-\r
-void DoCopyFieldParallel(size_t index, const std::tr1::function<void(void*, const void*, size_t)>& func, void* dest, const void* source, size_t width4)\r
-{\r
-       size_t offset = index*width4;\r
-       size_t size = width4;\r
-       func(reinterpret_cast<s8*>(dest) + offset, reinterpret_cast<const s8*>(source) + offset, size);\r
-}\r
-\r
-void CopyFieldParallel(const std::tr1::function<void(void*, const void*, size_t)>& func, void* dest, const void* source, size_t fieldIndex, size_t width, size_t height)\r
-{\r
-       tbb::parallel_for(fieldIndex, height, static_cast<size_t>(2), std::tr1::bind(&DoCopyFieldParallel, _1, func, dest, source, width*4)); // copy for each row\r
-}\r
-\r
-CopyFieldFun GetCopyFieldFun(SIMD simd)\r
-{\r
-       //if(simd >= SSE2)\r
-       //      return CopyFieldParallel_SSE2;\r
-       //else\r
-       return CopyFieldParallel_REF; // REF is faster\r
-}\r
-\r
-// TODO: (R.N) optimize => prefetch and cacheline loop unroll\r
-void CopyField_SSE2(unsigned char* pDest, unsigned char* pSrc, size_t fieldIndex, size_t width, size_t height)\r
-{\r
-       for(int rowIndex=fieldIndex; rowIndex < height; rowIndex+=2) \r
-       {\r
-               int offset = width*4*rowIndex;\r
-\r
-               __m128i val = _mm_setzero_si128();\r
-               __m128i* pD = reinterpret_cast<__m128i*>(&(pDest[offset]));\r
-               const __m128i* pS = reinterpret_cast<const __m128i*>(&(pSrc[offset]));\r
-\r
-               int times = width / 4;\r
-               for(int i=0; i < times; ++i) \r
-               {\r
-                       val = _mm_load_si128(pS);\r
-                       _mm_stream_si128(pD, val);\r
-\r
-                       ++pD;\r
-                       ++pS;\r
-               }\r
-       }\r
-       _mm_mfence();   //ensure last WC buffers get flushed to memory\r
-}\r
-\r
-void CopyFieldParallel_SSE2(unsigned char* dest, unsigned char* source, size_t fieldIndex, size_t width, size_t height)\r
-{\r
-       CopyFieldParallel(&Copy_SSE2, dest, source, fieldIndex, width, height);\r
-}\r
-\r
-void CopyField_REF(unsigned char* pDest, unsigned char* pSrc, size_t fieldIndex, size_t width, size_t height)\r
-{\r
-       for(int rowIndex=fieldIndex; rowIndex < height; rowIndex+=2) \r
-       {\r
-               int offset = width*4*rowIndex;\r
-               __movsd(reinterpret_cast<unsigned long*>(&(pDest[offset])), reinterpret_cast<const unsigned long*>(&(pSrc[offset])), width);\r
-       }\r
-}\r
-\r
-void CopyFieldParallel_REF(unsigned char* dest, unsigned char* source, size_t fieldIndex, size_t width, size_t height)\r
-{\r
-       CopyFieldParallel(&Copy_REF, dest, source, fieldIndex, width, height);\r
-}\r
-\r
-}\r
-}\r
-}
\ No newline at end of file
diff --git a/server/utils/image/CopyField.hpp b/server/utils/image/CopyField.hpp
deleted file mode 100644 (file)
index 83c31bc..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef COPY_FIELD_H_\r
-#define COPY_FIELD_H_\r
-\r
-#include "../CPUID.hpp"\r
-\r
-namespace caspar{\r
-namespace utils{\r
-namespace image{\r
-       \r
-void CopyField_SSE2     (unsigned char* pDest, unsigned char* pSrc, size_t fieldIndex, size_t width, size_t height);\r
-void CopyField_REF      (unsigned char* pDest, unsigned char* pSrc, size_t fieldIndex, size_t width, size_t height);\r
-\r
-void CopyFieldParallel_SSE2     (unsigned char* pDest, unsigned char* pSrc, size_t fieldIndex, size_t width, size_t height);\r
-void CopyFieldParallel_REF      (unsigned char* pDest, unsigned char* pSrc, size_t fieldIndex, size_t width, size_t height);\r
-\r
-typedef void(*CopyFieldFun)(unsigned char* pDest, unsigned char* pSrc, size_t fieldIndex, size_t width, size_t height);\r
-CopyFieldFun GetCopyFieldFun(SIMD simd = REF);\r
-\r
-\r
-//void StraightTransform_SSE2(const void* source, void* dest, size_t size);\r
-//void StraightTransform_REF(const void* source, void* dest, size_t size);\r
-//\r
-//typedef void(*StraightTransformFun)(const void*, void*, size_t);\r
-//StraightTransformFun GetStraightTransformFun(SIMD simd = REF);\r
-\r
-} // namespace image\r
-} // namespace utils\r
-} // namespace caspar\r
-\r
-#endif\r
-\r
-\r
diff --git a/server/utils/image/Image.cpp b/server/utils/image/Image.cpp
deleted file mode 100644 (file)
index c8c155e..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "Image.hpp"\r
-\r
-#include "Over.hpp"\r
-#include "Lerp.hpp"\r
-#include "Shuffle.hpp"\r
-#include "Premultiply.hpp"\r
-#include "Copy.hpp"\r
-#include "CopyField.hpp"\r
-#include "Clear.hpp"\r
-//#include "Transition.hpp"\r
-\r
-namespace caspar{\r
-namespace utils{\r
-namespace image{\r
-\r
-namespace detail\r
-{\r
-       ShuffleFun                      Shuffle                 = GetShuffleFun(REF);\r
-       PreOverFun                      PreOver                 = GetPreOverFun(REF);\r
-       LerpFun                         Lerp                    = GetLerpFun(REF);\r
-       PremultiplyFun          Premultiply             = GetPremultiplyFun(REF);\r
-       CopyFun                         Copy                    = GetCopyFun(REF);\r
-       CopyFieldFun            CopyField               = GetCopyFieldFun(REF);\r
-       ClearFun                        Clear                   = GetClearFun(REF);\r
-\r
-       const Initializer init;\r
-}\r
-\r
-void Shuffle(void* dest, const void* source, size_t size, const u8 red, const u8 green, const u8 blue, const u8 alpha)\r
-{\r
-       (*detail::Shuffle)(dest, source, size, red, green, blue, alpha);\r
-}\r
-\r
-void PreOver(void* dest, const void* source1, const void* source2, size_t size)\r
-{\r
-       (*detail::PreOver)(dest, source1, source2, size);\r
-}\r
-\r
-void Lerp(void* dest, const void* source1, const void* source2, float alpha, size_t size)\r
-{\r
-       (*detail::Lerp)(dest, source1, source2, alpha, size);\r
-}\r
-\r
-void Premultiply(void* dest, const void* source, size_t size)\r
-{\r
-       (*detail::Premultiply)(dest, source, size);\r
-}\r
-\r
-void Copy(void* dest, const void* source, size_t size)\r
-{\r
-       (*detail::Copy)(dest, source, size);\r
-}\r
-\r
-void CopyField(unsigned char* pDest, unsigned char* pSrc, size_t fieldIndex, size_t width, size_t height)\r
-{\r
-       (*detail::CopyField)(pDest, pSrc, fieldIndex, width, height);\r
-}\r
-\r
-void Clear(void* dest, size_t size)\r
-{\r
-       (*detail::Clear)(dest, size);\r
-}\r
-/*\r
-void Transition(void* dest, const void* source1, const void* source2, int currentFrame, size_t width, size_t height, const TransitionInfo& transitionInfo)\r
-{\r
-       (*detail::Transition)(dest, source1, source2, currentFrame, width, height, transitionInfo);\r
-}*/\r
-\r
-void SetVersion(SIMD simd)\r
-{      \r
-       if(simd == AUTO)\r
-               simd = CPUID().SIMD;\r
-       \r
-       detail::Shuffle                 = GetShuffleFun(simd);\r
-       detail::PreOver                 = GetPreOverFun(simd);\r
-       detail::Lerp                    = GetLerpFun(simd);\r
-       detail::Premultiply             = GetPremultiplyFun(simd);\r
-       detail::Copy                    = GetCopyFun(simd);\r
-       detail::CopyField               = GetCopyFieldFun(simd);\r
-       detail::Clear                   = GetClearFun(simd);\r
-       //detail::Transition            = GetTransitionFun(simd);\r
-}\r
-\r
-} // namespace image\r
-} // namespace utils\r
-} // namespace caspar
\ No newline at end of file
diff --git a/server/utils/image/Image.hpp b/server/utils/image/Image.hpp
deleted file mode 100644 (file)
index d9a36b4..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _IMAGE_H_\r
-#define _IMAGE_H_\r
-\r
-#include "../Types.hpp"\r
-#include "../CPUID.hpp"\r
-\r
-namespace caspar{\r
-\r
-class TransitionInfo;\r
-\r
-namespace utils{\r
-namespace image{       \r
-       \r
-/*\r
-   Function: SetVersion\r
-\r
-   Sets appropriate function pointers for image library functions depending on SIMD version.\r
-\r
-   Modified: 2009/4/14 (R.N)\r
-\r
-   Parameters:\r
-\r
-      simd     - SIMD version to use\r
-\r
-   Author: Robert Nagy, R.N (SVT 2009)\r
-               \r
-*/\r
-void SetVersion(SIMD simd = AUTO);\r
-\r
-/*\r
-   Function: Shuffle\r
-\r
-   Shuffles 8 byte channels in image\r
-\r
-   Modified: 2009/4/15 (R.N)\r
-\r
-   Parameters:\r
-\r
-      source1  - Image source\r
-         dest          - Image destination\r
-         size          - Size of image in bytes\r
-         mask0         - index of first channel\r
-         mask1         - index of second channel\r
-         mask2         - index of third channel\r
-         mask3         - index of fourth channel\r
-\r
-   Author: Robert Nagy, R.N (SVT 2009)\r
-               \r
-   See: Shuffle.hpp    \r
-*/\r
-void Shuffle(void* dest, const void* source, size_t size, const u8 red, const u8 green, const u8 blue, const u8 alpha);\r
-\r
-/*\r
-   Function: PreOver\r
-\r
-   Blends two images with premultiplied alpha.\r
-   Result is put into dest as an image with premultiplied alpha.\r
-\r
-   Modified: 2009/4/12 (R.N)\r
-\r
-   Parameters:\r
-\r
-      source1  - Image above\r
-      source2  - Image beneath\r
-         dest          - Image destination\r
-         size          - Size of image in bytes\r
-\r
-   Author: Robert Nagy, R.N (SVT 2009)\r
-\r
-   See: Over.hpp\r
-               \r
-*/\r
-void PreOver(void* dest, const void* source1, const void* source2, size_t size);\r
-\r
-/*\r
-   Function: Lerp\r
-\r
-   Blends two images based on alpha value;\r
-   Result is put into dest as an image with premultiplied alpha.\r
-\r
-   Modified: 2009/4/12 (R.N)\r
-                        2009/4/20 (R.N)        \r
-\r
-   Parameters:\r
-\r
-      source1  - Image above\r
-      source2  - Image beneath\r
-         dest          - Image destination\r
-         size          - Size of image in bytes\r
-\r
-   Author: Robert Nagy, R.N (SVT 2009)\r
-\r
-   See: Lerp.hpp               \r
-*/\r
-void Lerp(void* dest, const void* source1, const void* source2, float alpha, size_t size);\r
-\r
-/*\r
-   Function: Premultiply\r
-\r
-   Premultiplies color with alpha.\r
-\r
-   Modified: 2009/4/20 (R.N)\r
-\r
-   Parameters:\r
-\r
-      source1  - Image\r
-         dest          - Image destination\r
-         size          - Size of image in bytes\r
-\r
-   Author: Robert Nagy, R.N (SVT 2009)\r
-\r
-   See: Premultiply.hpp                \r
-*/\r
-void Premultiply(void* dest, const void* source, size_t size);\r
-\r
-void Copy(void* dest, const void* source, size_t size);\r
-\r
-void Clear(void* dest, size_t size);\r
-\r
-void CopyField(unsigned char* pDest, unsigned char* pSrc, size_t fieldIndex, size_t width, size_t height);\r
-\r
-//void Transition(void* dest, const void* source1, const void* source2, int currentFrame, size_t width, size_t height, const TransitionInfo& transitionInfo);\r
-\r
-//void Wipe(void* dest, const void* source1, const void* source2, u32 offset, u32 halfStep, Direction dir, size_t width, size_t height, size_t borderWidth, const void* border = NULL, u32 borderColor = 0);\r
-\r
-namespace detail\r
-{\r
-       typedef void(*PreOverFun)               (void*, const void*, const void*, size_t);\r
-       typedef void(*ShuffleFun)               (void*, const void*, size_t, const u8, const u8, const u8, const u8);\r
-       typedef void(*LerpFun)                  (void*, const void*, const void*, float, size_t);\r
-       typedef void(*PremultiplyFun)   (void*, const void*, size_t);\r
-       typedef void(*CopyFun)                  (void*, const void*, size_t);\r
-       typedef void(*CopyFieldFun)             (unsigned char* pDest, unsigned char* pSrc, size_t fieldIndex, size_t width, size_t height);\r
-       typedef void(*ClearFun)                 (void*, size_t);\r
-       //typedef void(*TransitionFun)(void*, const void*, const void*, int, size_t, size_t, const TransitionInfo&);\r
-\r
-       extern ShuffleFun               Shuffle;\r
-       extern PreOverFun               PreOver;\r
-       extern LerpFun                  Lerp;\r
-       extern PremultiplyFun   Premultiply;\r
-       extern CopyFun                  Copy;\r
-       extern CopyFieldFun             CopyField;\r
-       extern ClearFun                 Clear;\r
-       //extern TransitionFun  Transition;\r
-\r
-       extern const struct Initializer{Initializer(){SetVersion(AUTO);}} init;\r
-}\r
-\r
-} // namespace image\r
-} // namespace utils\r
-} // namespace caspar\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/utils/image/Lerp.cpp b/server/utils/image/Lerp.cpp
deleted file mode 100644 (file)
index 8d4d4fb..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "Lerp.hpp"\r
-\r
-#include <intrin.h>\r
-#include <functional>\r
-\r
-#include "../Types.hpp"\r
-\r
-#include "tbb/parallel_for.h"\r
-#include "tbb/blocked_range.h"\r
-\r
-using namespace std::tr1::placeholders;\r
-\r
-namespace caspar{\r
-namespace utils{\r
-namespace image{\r
-\r
-static const size_t STRIDE = sizeof(__m128i)*4;\r
-\r
-void DoLerpParallel(const tbb::blocked_range<size_t>& r, const std::tr1::function<void(void*, const void*, const void*, float, size_t)>& func, void* dest, const void* source1, const void* source2, float alpha)\r
-{\r
-       size_t offset = r.begin()*STRIDE;\r
-       size_t size = r.size()*STRIDE;\r
-       func(reinterpret_cast<s8*>(dest) + offset, reinterpret_cast<const s8*>(source1) + offset, reinterpret_cast<const s8*>(source2) + offset, alpha, size);\r
-}\r
-\r
-void LerpParallel(const std::tr1::function<void(void*, const void*, const void*, float, size_t)>& func, void* dest, const void* source1, const void* source2, float alpha, size_t size)\r
-{\r
-       tbb::parallel_for(tbb::blocked_range<size_t>(0, size/STRIDE), std::tr1::bind(&DoLerpParallel, _1, func, dest, source1, source2, alpha));        \r
-}\r
-\r
-LerpFun GetLerpFun(SIMD simd)\r
-{\r
-       if(simd >= SSE2)\r
-               return LerpParallel_SSE2;\r
-       else\r
-               return LerpParallel_REF;\r
-}\r
-\r
-void Lerp_SSE2(void* dest, const void* source1, const void* source2, float alpha, size_t size)\r
-{\r
-       static const u32 PSD = 64;\r
-       \r
-       static const __m128i lomask = _mm_set1_epi32(0x00FF00FF);\r
-       static const __m128i round = _mm_set1_epi16(128);\r
-\r
-       assert(source1 != NULL && source2 != NULL && dest != NULL);\r
-       assert(size % STRIDE == 0);\r
-       assert(alpha >= 0.0 && alpha <= 1.0);\r
-\r
-       const __m128i* source128_1 = reinterpret_cast<const __m128i*>(source1);\r
-       const __m128i* source128_2 = reinterpret_cast<const __m128i*>(source2);\r
-       __m128i* dest128 = reinterpret_cast<__m128i*>(dest);\r
-\r
-       __m128i s = _mm_setzero_si128();\r
-       __m128i d = _mm_setzero_si128();\r
-       const __m128i a = _mm_set1_epi16(static_cast<u8>(alpha*256.0f+0.5f));\r
-       \r
-       __m128i drb, dga, srb, sga;\r
-       \r
-       for (size_t k = 0, length = size/STRIDE; k < length; ++k)\r
-       {               \r
-               _mm_prefetch(reinterpret_cast<const char*>(source128_1 + PSD), _MM_HINT_NTA);   \r
-               _mm_prefetch(reinterpret_cast<const char*>(source128_2 + PSD), _MM_HINT_NTA);\r
-               // TODO: assembly optimization use PSHUFD on moves before calculations, lower latency than MOVDQA (R.N) http://software.intel.com/en-us/articles/fast-simd-integer-move-for-the-intel-pentiumr-4-processor/\r
-\r
-               for(int n = 0; n < 4; ++n, ++dest128, ++source128_1, ++source128_2)\r
-               {\r
-                       // r = d + (s-d)*alpha/256\r
-                       s = _mm_load_si128(source128_1);        // AABBGGRR\r
-                       d = _mm_load_si128(source128_2);        // AABBGGRR\r
-\r
-                       srb = _mm_and_si128(lomask, s);         // 00BB00RR             // unpack\r
-                       sga = _mm_srli_epi16(s, 8);                     // AA00GG00             // unpack\r
-                       \r
-                       drb = _mm_and_si128(lomask, d);         // 00BB00RR             // unpack\r
-                       dga = _mm_srli_epi16(d, 8);                     // AA00GG00             // unpack\r
-\r
-                       srb = _mm_sub_epi16(srb, drb);          // BBBBRRRR             // sub\r
-                       srb = _mm_mullo_epi16(srb, a);          // BBBBRRRR             // mul\r
-                       srb = _mm_add_epi16(srb, round);\r
-                       \r
-                       sga = _mm_sub_epi16(sga, dga);          // AAAAGGGG             // sub\r
-                       sga = _mm_mullo_epi16(sga, a);          // AAAAGGGG             // mul\r
-                       sga = _mm_add_epi16(sga, round);\r
-\r
-                       srb = _mm_srli_epi16(srb, 8);           // 00BB00RR             // prepack and div\r
-                       sga = _mm_andnot_si128(lomask, sga);// AA00GG00         // prepack and div\r
-\r
-                       srb = _mm_or_si128(srb, sga);           // AABBGGRR             // pack\r
-\r
-                       srb = _mm_add_epi8(srb, d);                     // AABBGGRR             // add          there is no overflow(R.N)\r
-\r
-                       _mm_stream_si128(dest128, srb);\r
-               }\r
-       }\r
-       _mm_mfence();   //ensure last WC buffers get flushed to memory\r
-}\r
-\r
-void LerpParallel_SSE2(void* dest, const void* source1, const void* source2, float alpha, size_t size)\r
-{\r
-       LerpParallel(&Lerp_SSE2, dest, source1, source2, alpha, size);\r
-}\r
-\r
-void Lerp_REF(void* dest, const void* source1, const void* source2, float alpha, size_t size)\r
-{\r
-       assert(source1 != NULL && source2 != NULL && dest != NULL);\r
-       assert(size % 4 == 0);\r
-       assert(alpha >= 0.0f && alpha <= 1.0f);\r
-\r
-       const u8* source8_1 = reinterpret_cast<const u8*>(source1);\r
-       const u8* source8_2 = reinterpret_cast<const u8*>(source2);\r
-       u8* dest8 = reinterpret_cast<u8*>(dest);\r
-\r
-       u8 a = static_cast<u8>(alpha*256.0f);\r
-       for(size_t n = 0; n < size; n+=4)\r
-       {\r
-               // s\r
-               u32 sr = source8_1[n+0];\r
-               u32 sg = source8_1[n+1];\r
-               u32 sb = source8_1[n+2];\r
-               u32 sa = source8_1[n+3];\r
-\r
-               // d\r
-               u32 dr = source8_2[n+0];\r
-               u32 dg = source8_2[n+1];\r
-               u32 db = source8_2[n+2];\r
-               u32 da = source8_2[n+3];\r
-\r
-               //dest8[n+0] = dr + ((sr-dr)*a)/256;\r
-               //dest8[n+1] = dg + ((sg-dg)*a)/256;\r
-               //dest8[n+2] = db + ((sb-db)*a)/256;\r
-               //dest8[n+3] = da + ((sa-da)*a)/256;\r
-\r
-               dest8[n+0] = dr + int(float((sr-dr)*a)/256.0f+0.5f);\r
-               dest8[n+1] = dg + int(float((sg-dg)*a)/256.0f+0.5f);\r
-               dest8[n+2] = db + int(float((sb-db)*a)/256.0f+0.5f);\r
-               dest8[n+3] = da + int(float((sa-da)*a)/256.0f+0.5f);\r
-\r
-       }\r
-}\r
-\r
-void LerpParallel_REF(void* dest, const void* source1, const void* source2, float alpha, size_t size)\r
-{\r
-       LerpParallel(&Lerp_REF, dest, source1, source2, alpha, size);\r
-}\r
-\r
-// Author: Niclas P Andersson\r
-void Lerp_OLD(void* dest, const void* source1, const void* source2, float alpha, size_t size)\r
-{\r
-       __m128i ps1, ps2, pd1, pd2, m0, m1, pr1, pr2;\r
-\r
-       __m128i* pSource = (__m128i*)source1;\r
-       __m128i* pDest = (__m128i*)source2;\r
-       __m128i* pResult = (__m128i*)dest;\r
-\r
-       __m128i a = _mm_set1_epi16(static_cast<u8>(alpha*256.0f+0.5f));\r
-       m0 = _mm_setzero_si128();\r
-\r
-       int count = size/4;\r
-       for ( int i = 0; i < count; i+=4 )\r
-       {\r
-               ps1 = _mm_load_si128(pSource);          //load 4 pixels from source\r
-               pd1 = _mm_load_si128(pDest);            //load 4 pixels from dest\r
-               ps2 = _mm_unpackhi_epi64(ps1, m0);      //move the 2 high pixels from source\r
-               pd2 = _mm_unpackhi_epi64(pd1, m0);      //move the 2 high pixels from dest\r
-\r
-               //compute the 2 "lower" pixels\r
-               ps1 = _mm_unpacklo_epi8(ps1, m0);       //unpack the 2 low pixels from source (bytes -> words)\r
-               pd1 = _mm_unpacklo_epi8(pd1, m0);       //unpack the 2 low pixels from dest (bytes -> words)\r
-\r
-               pr1 = _mm_sub_epi16(ps1, pd1);          //x = src - dest\r
-               pr1 = _mm_mullo_epi16(pr1, a);          //y = x*alpha\r
-               pr1 = _mm_srli_epi16(pr1, 8);       //w = y/256         \r
-               pr1 = _mm_add_epi8(pr1, pd1);           //z = w + dest\r
-\r
-               //same thing for the 2 "high" pixels\r
-               ps2 = _mm_unpacklo_epi8(ps2, m0);\r
-               pd2 = _mm_unpacklo_epi8(pd2, m0);\r
-\r
-               pr2 = _mm_sub_epi16(ps2, pd2);          //x = src - dest\r
-               pr2 = _mm_mullo_epi16(pr2, a);          //y = x*alpha\r
-               pr2 = _mm_srli_epi16(pr2, 8);       //w = y/256         \r
-               pr2 = _mm_add_epi8(pr2, pd2);           //z = w + dest\r
-\r
-               m1 = _mm_packus_epi16(pr1, pr2);        //pack all 4 together again (words -> bytes)\r
-               _mm_store_si128(pResult, m1);\r
-\r
-               pSource++;\r
-               pDest++;\r
-               pResult++;\r
-       }\r
-}\r
-\r
-} // namespace image\r
-} // namespace utils\r
-} // namespace caspar\r
-\r
-\r
diff --git a/server/utils/image/Lerp.hpp b/server/utils/image/Lerp.hpp
deleted file mode 100644 (file)
index 746e387..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _LERP_H_\r
-#define _LERP_H_\r
-\r
-#include "../CPUID.hpp"\r
-\r
-namespace caspar{\r
-namespace utils{\r
-namespace image{\r
-               \r
-void Lerp_SSE2(void* dest, const void* source1, const void* source2, float alpha, size_t size);\r
-void Lerp_REF (void* dest, const void* source1, const void* source2, float alpha, size_t size);\r
-void LerpParallel_SSE2(void* dest, const void* source1, const void* source2, float alpha, size_t size);\r
-void LerpParallel_REF (void* dest, const void* source1, const void* source2, float alpha, size_t size);\r
-void Lerp_OLD (void* dest, const void* source1, const void* source2, float alpha, size_t size);\r
-\r
-typedef void(*LerpFun)(void*, const void*, const void*, float, size_t);\r
-LerpFun GetLerpFun(SIMD simd = REF);\r
-\r
-} // namespace image\r
-} // namespace utils\r
-} // namespace caspar\r
-\r
-#endif\r
-\r
-\r
diff --git a/server/utils/image/Over.cpp b/server/utils/image/Over.cpp
deleted file mode 100644 (file)
index 79b09d6..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "Over.hpp"\r
-\r
-#include <intrin.h>\r
-#include <functional>\r
-\r
-#include "../Types.hpp"\r
-\r
-#include "tbb/parallel_for.h"\r
-#include "tbb/blocked_range.h"\r
-\r
-using namespace std::tr1::placeholders;\r
-\r
-namespace caspar{\r
-namespace utils {\r
-namespace image        {\r
-\r
-static const size_t STRIDE = sizeof(__m128i)*4;\r
-\r
-void DoPreOverParallel(const tbb::blocked_range<size_t>& r, const std::tr1::function<void(void*, const void*, const void*, size_t)>& func, void* dest, const void* source1, const void* source2)\r
-{\r
-       size_t offset = r.begin()*STRIDE;\r
-       size_t size = r.size()*STRIDE;\r
-       func(reinterpret_cast<s8*>(dest) + offset, reinterpret_cast<const s8*>(source1) + offset, reinterpret_cast<const s8*>(source2) + offset, size);\r
-}\r
-\r
-void PreOverParallel(const std::tr1::function<void(void*, const void*, const void*, size_t)>& func, void* dest, const void* source1, const void* source2, size_t size)\r
-{\r
-       tbb::parallel_for(tbb::blocked_range<size_t>(0, size/STRIDE), std::tr1::bind(&DoPreOverParallel, _1, func, dest, source1, source2));    \r
-}\r
-\r
-PreOverFun GetPreOverFun(SIMD simd)\r
-{\r
-       if(simd >= SSE2)\r
-               return PreOverParallel_SSE2;\r
-       else\r
-               return PreOverParallel_REF;\r
-}\r
-\r
-// this function performs precise calculations\r
-void PreOver_SSE2(void* dest, const void* source1, const void* source2, size_t size)\r
-{\r
-       static const u32 PSD = 64;\r
-\r
-       static const __m128i round = _mm_set1_epi16(128);\r
-       static const __m128i lomask = _mm_set1_epi32(0x00FF00FF);\r
-\r
-       assert(source1 != NULL && source2 != NULL && dest != NULL);\r
-       assert(size % STRIDE == 0);\r
-\r
-       const __m128i* source128_1 = reinterpret_cast<const __m128i*>(source1);\r
-       const __m128i* source128_2 = reinterpret_cast<const __m128i*>(source2);\r
-       __m128i*           dest128 = reinterpret_cast<__m128i*>(dest);  \r
-       \r
-       __m128i d, s, a, rb, ag, t;\r
-\r
-       // TODO: dynamic prefetch schedluing distance? needs to be optimized (R.N)\r
-\r
-       for(size_t k = 0, length = size/STRIDE; k < length; ++k)        \r
-       {\r
-               // TODO: put prefetch between calculations?(R.N)\r
-               _mm_prefetch(reinterpret_cast<const s8*>(source128_1+PSD), _MM_HINT_NTA);\r
-               _mm_prefetch(reinterpret_cast<const s8*>(source128_2+PSD), _MM_HINT_NTA);       \r
-\r
-               // work on entire cacheline before next prefetch\r
-               for(int n = 0; n < 4; ++n, ++dest128, ++source128_1, ++source128_2)\r
-               {\r
-                       // TODO: assembly optimization use PSHUFD on moves before calculations, lower latency than MOVDQA (R.N) http://software.intel.com/en-us/articles/fast-simd-integer-move-for-the-intel-pentiumr-4-processor/\r
-\r
-                       // TODO: load entire cacheline at the same time? are there enough registers? 32 bit mode (special compile for 64bit?) (R.N)\r
-                       s = _mm_load_si128(source128_1);                // AABGGRR\r
-                       d = _mm_load_si128(source128_2);                // AABGGRR\r
-                                               \r
-                       // PRELERP(S, D) = S+D - ((S*D[A]+0x80)>>8)+(S*D[A]+0x80))>>8\r
-                       // T = S*D[A]+0x80 => PRELERP(S,D) = S+D - ((T>>8)+T)>>8\r
-\r
-                       // set alpha to lo16 from dest_\r
-                       a = _mm_srli_epi32(d, 24);                      // 000000AA     \r
-                       rb = _mm_slli_epi32(a, 16);                     // 00AA0000\r
-                       a = _mm_or_si128(rb, a);                        // 00AA00AA\r
-\r
-                       rb = _mm_and_si128(lomask, s);          // 00BB00RR             \r
-                       rb = _mm_mullo_epi16(rb, a);            // BBBBRRRR     \r
-                       rb = _mm_add_epi16(rb, round);          // BBBBRRRR\r
-                       t = _mm_srli_epi16(rb, 8);                      \r
-                       t = _mm_add_epi16(t, rb);\r
-                       rb = _mm_srli_epi16(t, 8);                      // 00BB00RR     \r
-\r
-                       ag = _mm_srli_epi16(s, 8);                      // 00AA00GG             \r
-                       ag = _mm_mullo_epi16(ag, a);            // AAAAGGGG             \r
-                       ag = _mm_add_epi16(ag, round);\r
-                       t = _mm_srli_epi16(ag, 8);\r
-                       t = _mm_add_epi16(t, ag);\r
-                       ag = _mm_andnot_si128(lomask, t);       // AA00GG00             \r
-                                       \r
-                       rb = _mm_or_si128(rb, ag);                      // AABGGRR              pack\r
-                                       \r
-                       rb = _mm_sub_epi8(s, rb);                       // sub S-[(D[A]*S)/255]\r
-                       d = _mm_add_epi8(d, rb);                        // add D+[S-(D[A]*S)/255]\r
-\r
-                       _mm_stream_si128(dest128, d);\r
-               }\r
-       }       \r
-       _mm_mfence();   //ensure last WC buffers get flushed to memory          \r
-}\r
-\r
-void PreOverParallel_SSE2(void* dest, const void* source1, const void* source2, size_t size)\r
-{\r
-       PreOverParallel(&PreOver_SSE2, dest, source1, source2, size);   \r
-}\r
-\r
-void PreOver_FastSSE2(void* dest, const void* source1, const void* source2, size_t size)\r
-{\r
-       static const u32 PSD = 64;\r
-\r
-       static const __m128i lomask = _mm_set1_epi32(0x00FF00FF);\r
-\r
-       assert(source1 != NULL && source2 != NULL && dest != NULL);\r
-       assert(size % STRIDE == 0);\r
-\r
-       const __m128i* source128_1 = reinterpret_cast<const __m128i*>(source1);\r
-       const __m128i* source128_2 = reinterpret_cast<const __m128i*>(source2);\r
-       __m128i*           dest128 = reinterpret_cast<__m128i*>(dest);          \r
-\r
-       __m128i d, s, a, rb, ag;\r
-       \r
-       // TODO: dynamic prefetch schedluing distance? needs to be optimized (R.N)\r
-       for(int k = 0, length = size/STRIDE; k < length; ++k)   \r
-       {\r
-               // TODO: put prefetch between calculations?(R.N)\r
-               _mm_prefetch(reinterpret_cast<const s8*>(source128_1+PSD), _MM_HINT_NTA);\r
-               _mm_prefetch(reinterpret_cast<const s8*>(source128_2+PSD), _MM_HINT_NTA);       \r
-\r
-               //work on entire cacheline before next prefetch\r
-               for(int n = 0; n < 4; ++n, ++dest128, ++source128_1, ++source128_2)\r
-               {\r
-                       // TODO: assembly optimization use PSHUFD on moves before calculations, lower latency than MOVDQA (R.N) http://software.intel.com/en-us/articles/fast-simd-integer-move-for-the-intel-pentiumr-4-processor/\r
-\r
-                       s = _mm_load_si128(source128_1);                // AABGGRR\r
-                       d = _mm_load_si128(source128_2);                // AABGGRR\r
-                                               \r
-                       // set alpha to lo16 from dest_\r
-                       rb = _mm_srli_epi32(d, 24);                     // 000000AA\r
-                       a = _mm_slli_epi32(rb, 16);                     // 00AA0000\r
-                       a = _mm_or_si128(rb, a);                        // 00AA00AA\r
-\r
-                       // fix alpha a = a > 127 ? a+1 : a\r
-                       // NOTE: If removed an *overflow* will occur with large values (R.N)\r
-                       rb = _mm_srli_epi16(a, 7);\r
-                       a = _mm_add_epi16(a, rb);\r
-                       \r
-                       rb = _mm_and_si128(lomask, s);          // 00B00RR              unpack\r
-                       rb = _mm_mullo_epi16(rb, a);            // BBRRRR               mul (D[A]*S)\r
-                       rb = _mm_srli_epi16(rb, 8);                     // 00B00RR              prepack and div [(D[A]*S)]/255\r
-\r
-                       ag = _mm_srli_epi16(s, 8);                      // 00AA00GG             unpack\r
-                       ag = _mm_mullo_epi16(ag, a);            // AAAAGGGG             mul (D[A]*S)\r
-                       ag = _mm_andnot_si128(lomask, ag);      // AA00GG00             prepack and div [(D[A]*S)]/255\r
-                                       \r
-                       rb = _mm_or_si128(rb, ag);                      // AABGGRR              pack\r
-                                       \r
-                       rb = _mm_sub_epi8(s, rb);                       // sub S-[(D[A]*S)/255]\r
-                       d = _mm_add_epi8(d, rb);                        // add D+[S-(D[A]*S)/255]\r
-\r
-                       _mm_stream_si128(dest128, d);\r
-               }\r
-       }       \r
-       _mm_mfence();   //ensure last WC buffers get flushed to memory  \r
-}\r
-\r
-// TODO: optimize\r
-void PreOver_REF(void* dest, const void* source1, const void* source2, size_t size)\r
-{      \r
-       assert(source1 != NULL && source2 != NULL && dest != NULL);\r
-       assert(size % 4 == 0);\r
-\r
-       const u8* source8_1 = reinterpret_cast<const u8*>(source1);\r
-       const u8* source8_2 = reinterpret_cast<const u8*>(source2);\r
-       u8* dest8 = reinterpret_cast<u8*>(dest);\r
-\r
-       for(size_t n = 0; n < size; n+=4)\r
-       {\r
-               u32 r1 = source8_1[n+0];\r
-               u32 g1 = source8_1[n+1];\r
-               u32 b1 = source8_1[n+2];\r
-               u32 a1 = source8_1[n+3];\r
-\r
-               u32 r2 = source8_2[n+0];\r
-               u32 g2 = source8_2[n+1];\r
-               u32 b2 = source8_2[n+2];\r
-               u32 a2 = source8_2[n+3];\r
-\r
-               dest8[n+0] = r2 + r1 - (a2*r1)/255;\r
-               dest8[n+1] = g2 + g1 - (a2*g1)/255;\r
-               dest8[n+2] = b2 + b1 - (a2*b1)/255;\r
-               dest8[n+3] = a2 + a1 - (a2*a1)/255;\r
-\r
-               // PRECISE\r
-               //if(a2 > 0)\r
-               //{\r
-               //      dest8[n+0] = r2 + r1 - int(float(a2*r1)/255.0f+0.5f);\r
-               //      dest8[n+1] = g2 + g1 - int(float(a2*g1)/255.0f+0.5f);\r
-               //      dest8[n+2] = b2 + b1 - int(float(a2*b1)/255.0f+0.5f);\r
-               //      dest8[n+3] = a2 + a1 - int(float(a2*a1)/255.0f+0.5f);\r
-               //}\r
-               //else\r
-               //{\r
-               //      dest8[n+0] = r1;\r
-               //      dest8[n+1] = g1;\r
-               //      dest8[n+2] = b1;\r
-               //      dest8[n+3] = a1;\r
-               //}\r
-       }\r
-}\r
-\r
-void PreOverParallel_REF(void* dest, const void* source1, const void* source2, size_t size)\r
-{\r
-       PreOverParallel(&PreOver_REF, dest, source1, source2, size);    \r
-}\r
-\r
-} // namespace image\r
-} // namespace utils\r
-} // namespace caspar\r
-\r
-\r
diff --git a/server/utils/image/Over.hpp b/server/utils/image/Over.hpp
deleted file mode 100644 (file)
index ea7a7c4..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef OVER_H_\r
-#define OVER_H_\r
-\r
-#include "../CPUID.hpp"\r
-\r
-namespace caspar{\r
-namespace utils{\r
-namespace image{\r
-               \r
-void PreOver_SSE2(void* dest, const void* source1, const void* source2, size_t size);\r
-void PreOverParallel_SSE2(void* dest, const void* source1, const void* source2, size_t size);\r
-void PreOver_FastSSE2(void* dest, const void* source1, const void* source2, size_t size);\r
-void PreOver_REF(void* dest, const void* source1, const void* source2, size_t size);\r
-void PreOverParallel_REF(void* dest, const void* source1, const void* source2, size_t size);\r
-\r
-typedef void(*PreOverFun)(void*, const void*, const void*, size_t);\r
-PreOverFun GetPreOverFun(SIMD simd = REF);\r
-\r
-} // namespace image\r
-} // namespace utils\r
-} // namespace caspar\r
-\r
-#endif\r
-\r
-\r
diff --git a/server/utils/image/Premultiply.cpp b/server/utils/image/Premultiply.cpp
deleted file mode 100644 (file)
index 9b5239a..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "Premultiply.hpp"\r
-\r
-#include <intrin.h>\r
-#include <functional>\r
-\r
-#include "../Types.hpp"\r
-\r
-#include "tbb/parallel_for.h"\r
-#include "tbb/blocked_range.h"\r
-\r
-using namespace std::tr1::placeholders;\r
-\r
-namespace caspar{\r
-namespace utils{\r
-namespace image{\r
-\r
-static const size_t STRIDE = sizeof(__m128i)*4;\r
-\r
-void DoPreMultiplyParallel(const tbb::blocked_range<size_t>& r, const std::tr1::function<void(void*, const void*, size_t)>& func, void* dest, const void* source)\r
-{\r
-       size_t offset = r.begin()*STRIDE;\r
-       size_t size = r.size()*STRIDE;\r
-       func(reinterpret_cast<s8*>(dest) + offset, reinterpret_cast<const s8*>(source) + offset, size);\r
-}\r
-\r
-void PreMultiplyParallel(const std::tr1::function<void(void*, const void*, size_t)>& func, void* dest, const void* source, size_t size)\r
-{\r
-       tbb::parallel_for(tbb::blocked_range<size_t>(0, size/STRIDE), std::tr1::bind(&DoPreMultiplyParallel, _1, func, dest, source));  \r
-}\r
-\r
-PremultiplyFun GetPremultiplyFun(SIMD simd)\r
-{\r
-       if(simd >= SSE2)\r
-               return PremultiplyParallel_SSE2;\r
-       else\r
-               return PremultiplyParallel_REF;\r
-}\r
-\r
-// this function performs precise calculations\r
-void Premultiply_SSE2(void* dest, const void* source, size_t size)\r
-{\r
-       static const u32 PSD = 64;\r
-\r
-       static const __m128i lomask = _mm_set1_epi32(0x00FF00FF);\r
-       static const __m128i amask = _mm_set1_epi32(0xFF000000);\r
-       static const __m128i round = _mm_set1_epi16(128);       \r
-\r
-       assert(source != NULL && dest != NULL);\r
-       assert(size % STRIDE == 0);\r
-       \r
-       const __m128i* source128 = reinterpret_cast<const __m128i*>(source);\r
-       __m128i*           dest128 = reinterpret_cast<__m128i*>(dest);  \r
-\r
-       __m128i s, rb, ag, a, t;                \r
-       \r
-       for(size_t k = 0, length = size/STRIDE; k != length; ++k)       \r
-       {\r
-               // TODO: put prefetch between calculations?(R.N)\r
-               _mm_prefetch(reinterpret_cast<const s8*>(source128 + PSD), _MM_HINT_NTA);\r
-\r
-               // prefetch fetches entire cacheline (512bit). work on entire cacheline before next prefetch. 512/128 = 4, unroll four times = 16 pixels\r
-\r
-               // TODO: assembly optimization use PSHUFD on moves before calculations, lower latency than MOVDQA (R.N) http://software.intel.com/en-us/articles/fast-simd-integer-move-for-the-intel-pentiumr-4-processor/\r
-\r
-               for(int n = 0; n < 4; ++n, ++dest128, ++source128)\r
-               {\r
-                       s = _mm_load_si128(source128);          // AABBGGRR\r
-\r
-                       // set alpha to lo16 from source\r
-                       rb = _mm_srli_epi32(s, 24);                     // 000000AA\r
-                       a = _mm_slli_epi32(rb, 16);                     // 00AA0000\r
-                       a = _mm_or_si128(rb, a);                        // 00AA00AA\r
-\r
-                       rb = _mm_and_si128(lomask, s);          // 00BB00RR             \r
-                       rb = _mm_mullo_epi16(rb, a);            // BBBBRRRR     \r
-                       rb = _mm_add_epi16(rb, round);          // BBBBRRRR\r
-                       t = _mm_srli_epi16(rb, 8);                      // 00BB00RR     \r
-                       t = _mm_add_epi16(t, rb);\r
-                       rb = _mm_srli_epi16(t, 8);\r
-\r
-                       ag = _mm_srli_epi16(s, 8);                      // 00AA00GG             \r
-                       ag = _mm_mullo_epi16(ag, a);            // AAAAGGGG             \r
-                       ag = _mm_add_epi16(ag, round);\r
-                       t = _mm_srli_epi16(ag, 8);\r
-                       t = _mm_add_epi16(t, ag);\r
-                       ag = _mm_andnot_si128(lomask, t);       // AA00GG00             \r
-                                       \r
-                       a = _mm_or_si128(rb, ag);                       // XXBBGGRR\r
-                       a = _mm_andnot_si128(amask, a);         // 00BBGGRR\r
-\r
-                       s = _mm_and_si128(amask, s);            // AA000000\r
-\r
-                       s = _mm_or_si128(a, s);                         // AABBGGRR             pack\r
-\r
-                       // TODO: store entire cache line at the same time (write-combining => burst)? are there enough registers? 32 bit mode (special compile for 64bit?) (R.N)\r
-                       _mm_stream_si128(dest128, s);\r
-               }               \r
-       }\r
-       _mm_mfence();   //ensure last WC buffers get flushed to memory\r
-}\r
-\r
-void PremultiplyParallel_SSE2(void* dest, const void* source1, size_t size)\r
-{\r
-       PreMultiplyParallel(&Premultiply_SSE2, dest, source1, size);\r
-}\r
-\r
-void Premultiply_FastSSE2(void* dest, const void* source, size_t size)\r
-{\r
-       static const size_t stride = sizeof(__m128i)*4;\r
-       static const u32 PSD = 64;\r
-\r
-       static const __m128i lomask = _mm_set1_epi32(0x00FF00FF);\r
-       static const __m128i amask = _mm_set1_epi32(0xFF000000);\r
-       \r
-\r
-       assert(source != NULL && dest != NULL);\r
-       assert(size % stride == 0);\r
-\r
-       const __m128i* source128 = reinterpret_cast<const __m128i*>(source);\r
-       __m128i*           dest128 = reinterpret_cast<__m128i*>(dest);  \r
-\r
-       __m128i s = _mm_setzero_si128();        \r
-       __m128i rb = _mm_setzero_si128();       \r
-       __m128i ag = _mm_setzero_si128();       \r
-       __m128i a = _mm_setzero_si128();\r
-\r
-       for(size_t k = 0, length = size/stride; k != length; ++k)       \r
-       {\r
-               // TODO: put prefetch between calculations?(R.N)\r
-               _mm_prefetch(reinterpret_cast<const s8*>(source128 + PSD), _MM_HINT_NTA);\r
-\r
-               //work on entire cacheline before next prefetch\r
-\r
-               // TODO: assembly optimization use PSHUFD on moves before calculations, lower latency than MOVDQA (R.N) http://software.intel.com/en-us/articles/fast-simd-integer-move-for-the-intel-pentiumr-4-processor/\r
-\r
-               for(int n = 0; n < 4; ++n, ++dest128, ++source128)\r
-               {\r
-                       s = _mm_load_si128(source128);          // AABBGGRR\r
-\r
-                       // set alpha to lo16 from source\r
-                       rb = _mm_srli_epi32(s, 24);                     // 000000AA\r
-                       a = _mm_slli_epi32(rb, 16);                     // 00AA0000\r
-                       a = _mm_or_si128(rb, a);                        // 00AA00AA\r
-\r
-                       // fix alpha a = a > 127 ? a+1 : a\r
-                       rb = _mm_srli_epi16(a, 7);\r
-                       a = _mm_add_epi16(a, rb);\r
-                       \r
-                       rb = _mm_and_si128(lomask, s);          // 00BB00RR             unpack\r
-                       rb = _mm_mullo_epi16(rb, a);            // BBBBRRRR             mul (D[A]*S)\r
-                       rb = _mm_srli_epi16(rb, 8);                     // 00BB00RR             prepack and div [(D[A]*S)]/255\r
-\r
-                       ag = _mm_srli_epi16(s, 8);                      // 00AA00GG             unpack\r
-                       ag = _mm_mullo_epi16(ag, a);            // XXXXGGGG             mul (D[A]*S)\r
-                       ag = _mm_andnot_si128(lomask, ag);      // XX00GG00             prepack and div [(D[A]*S)]/255\r
-                                       \r
-                       a = _mm_or_si128(rb, ag);                       // XXBBGGRR\r
-                       a = _mm_andnot_si128(amask, a);         // 00BBGGRR\r
-\r
-                       s = _mm_and_si128(amask, s);            // AA000000\r
-\r
-                       s = _mm_or_si128(a, s);                         // AABBGGRR             pack\r
-\r
-                       // TODO: store entire cache line at the same time (write-combining => burst)? are there enough registers? 32 bit mode (special compile for 64bit?) (R.N)\r
-                       _mm_store_si128(dest128, s);\r
-               }               \r
-       }\r
-}\r
-\r
-void Premultiply_REF(void* dest, const void* source, size_t size)\r
-{\r
-       assert(source != NULL && dest != NULL);\r
-       assert(size % 4 == 0);\r
-\r
-       const u8* source8 = reinterpret_cast<const u8*>(source);\r
-       u8* dest8 = reinterpret_cast<u8*>(dest);\r
-\r
-       for(size_t n = 0; n < size; n+=4)\r
-       {\r
-               u32 r = source8[n+0];\r
-               u32 g = source8[n+1];\r
-               u32 b = source8[n+2];\r
-               u32 a = source8[n+3];\r
-\r
-               dest8[n+0] = (r*a)/255;\r
-               dest8[n+1] = (g*a)/255;\r
-               dest8[n+2] = (b*a)/255;\r
-               dest8[n+3] = a;\r
-       }\r
-}\r
-\r
-void PremultiplyParallel_REF(void* dest, const void* source1,  size_t size)\r
-{\r
-       PreMultiplyParallel(&Premultiply_REF, dest, source1, size);\r
-}\r
-\r
-\r
-//void StraightTransform_REF(const void* source, void* dest, size_t size)\r
-//{\r
-//     assert(source != NULL && dest != NULL);\r
-//     assert((size % 4) == 0);\r
-//\r
-//     const u8* source8 = reinterpret_cast<const u8*>(source);\r
-//     u8* dest8 = reinterpret_cast<u8*>(dest);\r
-//\r
-//     for(int n = 0; n < size; n+=4)\r
-//     {\r
-//             u32 r = source8[n+0];\r
-//             u32 g = source8[n+1];\r
-//             u32 b = source8[n+2];\r
-//             u32 a = source8[n+3];\r
-//\r
-//             if(a > 0)\r
-//             {\r
-//                     dest8[n+0] = (r*255)/a;\r
-//                     dest8[n+1] = (g*255)/a;\r
-//                     dest8[n+2] = (b*255)/a;\r
-//                     dest8[n+3] = a;\r
-//             }\r
-//             else\r
-//             {\r
-//                     dest8[n+0] = 0;\r
-//                     dest8[n+1] = 0;\r
-//                     dest8[n+2] = 0;\r
-//                     dest8[n+3] = 0;\r
-//             }\r
-//     }\r
-//}\r
-\r
-\r
-} // namespace image\r
-} // namespace utils\r
-} // namespace caspar\r
diff --git a/server/utils/image/Premultiply.hpp b/server/utils/image/Premultiply.hpp
deleted file mode 100644 (file)
index 7b3d146..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef PREMULTIPLY_H_\r
-#define PREMULTIPLY_H_\r
-\r
-#include "../CPUID.hpp"\r
-\r
-namespace caspar{\r
-namespace utils{\r
-namespace image{\r
-       \r
-void Premultiply_SSE2   (void* dest, const void* source, size_t size);\r
-void PremultiplyParallel_SSE2   (void* dest, const void* source, size_t size);\r
-void Premultiply_FastSSE2(void* dest, const void* source, size_t size);\r
-void Premultiply_REF    (void* dest, const void* source, size_t size);\r
-void PremultiplyParallel_REF    (void* dest, const void* source, size_t size);\r
-\r
-typedef void(*PremultiplyFun)(void*, const void*, size_t);\r
-PremultiplyFun GetPremultiplyFun(SIMD simd = REF);\r
-\r
-\r
-//void StraightTransform_SSE2(const void* source, void* dest, size_t size);\r
-//void StraightTransform_REF(const void* source, void* dest, size_t size);\r
-//\r
-//typedef void(*StraightTransformFun)(const void*, void*, size_t);\r
-//StraightTransformFun GetStraightTransformFun(SIMD simd = REF);\r
-\r
-} // namespace image\r
-} // namespace utils\r
-} // namespace caspar\r
-\r
-#endif\r
-\r
-\r
diff --git a/server/utils/image/Shuffle.cpp b/server/utils/image/Shuffle.cpp
deleted file mode 100644 (file)
index 5633b6d..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#include "..\..\stdafx.h"\r
-\r
-#include "Shuffle.hpp"\r
-\r
-#include <intrin.h>\r
-#include <functional>\r
-\r
-#include "../Types.hpp"\r
-\r
-#include "tbb/parallel_for.h"\r
-#include "tbb/blocked_range.h"\r
-\r
-using namespace std::tr1::placeholders;\r
-\r
-namespace caspar{\r
-namespace utils{\r
-namespace image{\r
-\r
-static const size_t STRIDE = sizeof(__m128i)*4;\r
-\r
-void DoShuffleParallel(const tbb::blocked_range<size_t>& r, const std::tr1::function<void(void*, const void*, size_t, const u8, const u8, const u8, const u8)>& func, void* dest, const void* source, const u8 red, const u8 green, const u8 blue, const u8 alpha)\r
-{\r
-       size_t offset = r.begin()*STRIDE;\r
-       size_t size = r.size()*STRIDE;\r
-       func(reinterpret_cast<s8*>(dest) + offset, reinterpret_cast<const s8*>(source) + offset, size, red, green, blue, alpha);\r
-}\r
-\r
-void ShuffleParallel(const std::tr1::function<void(void*, const void*, size_t, const u8, const u8, const u8, const u8)>& func, void* dest, const void* source, size_t size, const u8 red, const u8 green, const u8 blue, const u8 alpha)\r
-{\r
-       tbb::parallel_for(tbb::blocked_range<size_t>(0, size/STRIDE), std::tr1::bind(&DoShuffleParallel, _1, func, dest, source, red, green, blue, alpha));     \r
-}\r
-\r
-ShuffleFun GetShuffleFun(SIMD simd)\r
-{\r
-       if(simd >= SSSE3)\r
-               return ShuffleParallel_SSSE3;\r
-       else if(simd >= SSE2)\r
-               return ShuffleParallel_SSE2;\r
-       else\r
-               return ShuffleParallel_REF;\r
-}\r
-\r
-void Shuffle_SSSE3(void* dest, const void* source, size_t size, const u8 red, const u8 green, const u8 blue, const u8 alpha)\r
-{\r
-       static const unsigned int PSD = 64;     \r
-\r
-       assert(source != NULL && dest != NULL);\r
-       assert(red > -1 && red < 4 && green > -1 && green < 4 && blue > -1 && blue < 4 && alpha > -1 && alpha < 4 && "Invalid mask");\r
-       assert(size % STRIDE == 0);\r
-\r
-       const __m128i* source128 = reinterpret_cast<const __m128i*>(source);\r
-       __m128i*           dest128 = reinterpret_cast<__m128i*>(dest);  \r
-\r
-       __m128i reg0 = _mm_setzero_si128();     \r
-       __m128i reg1 = _mm_setzero_si128();     \r
-       __m128i reg2 = _mm_setzero_si128();     \r
-       __m128i reg3 = _mm_setzero_si128();     \r
-\r
-       const __m128i mask128 = _mm_set_epi8(alpha+12, blue+12, green+12, red+12, alpha+8, blue+8, green+8, red+8, alpha+4, blue+4, green+4, red+4, alpha, blue, green, red);\r
-\r
-       for(size_t k = 0, length = size/STRIDE; k < length; ++k)        \r
-       {\r
-               // TODO: put prefetch between calculations?(R.N)\r
-               _mm_prefetch(reinterpret_cast<const s8*>(source128 + PSD), _MM_HINT_NTA);\r
-\r
-               // work on entire cacheline before next prefetch\r
-\r
-               // TODO: assembly optimization use PSHUFD on moves before calculations, lower latency than MOVDQA (R.N) http://software.intel.com/en-us/articles/fast-simd-integer-move-for-the-intel-pentiumr-4-processor/\r
-\r
-               reg0 = _mm_load_si128(source128++);     \r
-               reg1 = _mm_load_si128(source128++);     \r
-\r
-               _mm_stream_si128(dest128++, _mm_shuffle_epi8(reg0, mask128));\r
-\r
-               reg2 = _mm_load_si128(source128++);     \r
-\r
-               _mm_stream_si128(dest128++, _mm_shuffle_epi8(reg1, mask128));\r
-\r
-               reg3 = _mm_load_si128(source128++);     \r
-               \r
-               _mm_stream_si128(dest128++, _mm_shuffle_epi8(reg2, mask128));   \r
-               _mm_stream_si128(dest128++, _mm_shuffle_epi8(reg3, mask128));           \r
-       }\r
-       _mm_mfence();   //ensure last WC buffers get flushed to memory\r
-}\r
-\r
-void ShuffleParallel_SSSE3(void* dest, const void* source, size_t size, const u8 red, const u8 green, const u8 blue, const u8 alpha)\r
-{\r
-       ShuffleParallel(&Shuffle_SSSE3, dest, source, size, red, green, blue, alpha);\r
-}\r
-\r
-// TODO: should be optimized for different combinations (R.N)\r
-void Shuffle_SSE2(void* dest, const void* source, size_t size, const u8 red, const u8 green, const u8 blue, const u8 alpha)\r
-{\r
-       static const size_t stride = sizeof(__m128i)*4;\r
-       static const u32 PSD = 64;\r
-\r
-       static const __m128i himask     = _mm_set1_epi32(0xFF000000);   \r
-       static const __m128i lomask     = _mm_set1_epi32(0x000000FF);\r
-       \r
-       assert(source != NULL && dest != NULL);\r
-       assert(red > -1 && red < 4 && green > -1 && green < 4 && blue > -1 && blue < 4 && alpha > -1 && alpha < 4);\r
-       assert(size % stride == 0);\r
-\r
-       const __m128i* source128 = reinterpret_cast<const __m128i*>(source);\r
-       __m128i*           dest128 = reinterpret_cast<__m128i*>(dest);  \r
-\r
-       __m128i s, m0, m1, r;\r
-\r
-       const int shft0 = (red)*8;\r
-       const int shft1 = (green)*8;\r
-       const int shft2 = (3-blue)*8;\r
-       const int shft3 = (3-alpha)*8;\r
-\r
-       for(int k = 0, length = size/stride; k < length; ++k)   \r
-       {\r
-               // TODO: dynamic prefetch schedluing distance? needs to be optimized (R.N)              \r
-               // TODO: put prefetch between calculations?(R.N)\r
-               _mm_prefetch(reinterpret_cast<const s8*>(source128 + PSD), _MM_HINT_NTA);\r
-\r
-               // work on entire cacheline before next prefetch\r
-\r
-               // TODO: assembly optimization use PSHUFD on moves before calculations, lower latency than MOVDQA (R.N) http://software.intel.com/en-us/articles/fast-simd-integer-move-for-the-intel-pentiumr-4-processor/\r
-\r
-               for(int n = 0; n < 4; ++n, ++dest128, ++source128)\r
-               {\r
-                       s = _mm_load_si128(source128);\r
-                       \r
-                       m0 = _mm_srli_epi32(s, shft0);\r
-                       m0 = _mm_and_si128(m0, lomask);\r
-\r
-                       m1 = _mm_srli_epi32(s, shft1);\r
-                       m1 = _mm_and_si128(m1, lomask);\r
-                       m1 = _mm_slli_epi32(m1, 8);\r
-                       \r
-                       r = _mm_or_si128(m0, m1);\r
-\r
-                       m0 = _mm_slli_epi32(s, shft2);\r
-                       m0 = _mm_and_si128(m0, himask);\r
-                       m0 = _mm_srli_epi32(m0, 8);                     \r
-\r
-                       m1 = _mm_slli_epi32(s, shft3);\r
-                       m1 = _mm_and_si128(m1, himask);\r
-                       \r
-                       m0 = _mm_or_si128(m0, m1);\r
-\r
-                       r = _mm_or_si128(r, m0);\r
-\r
-                       _mm_stream_si128(dest128, r);\r
-               }\r
-       }\r
-       _mm_mfence();   //ensure last WC buffers get flushed to memory\r
-}\r
-\r
-void ShuffleParallel_SSE2(void* dest, const void* source, size_t size, const u8 red, const u8 green, const u8 blue, const u8 alpha)\r
-{\r
-       ShuffleParallel(&Shuffle_SSE2, dest, source, size, red, green, blue, alpha);\r
-}\r
-\r
-void Shuffle_REF(void* dest, const void* source, size_t size, const u8 red, const u8 green, const u8 blue, const u8 alpha)\r
-{\r
-       assert(source != NULL && dest != NULL);\r
-       assert(red > -1 && red < 4 && green > -1 && green < 4 && blue > -1 && blue < 4 && alpha > -1 && alpha < 4);\r
-       assert(size % 4 == 0);\r
-\r
-       const u8* source8 = reinterpret_cast<const u8*>(source);\r
-       u8*               dest8 = reinterpret_cast<u8*>(dest);  \r
-\r
-       for(size_t n = 0; n < size; n+=4)\r
-       {\r
-               u8 r = source8[n+red];\r
-               u8 g = source8[n+green];\r
-               u8 b = source8[n+blue];\r
-               u8 a = source8[n+alpha];\r
-\r
-               dest8[n+0] = r;\r
-               dest8[n+1] = g;\r
-               dest8[n+2] = b;\r
-               dest8[n+3] = a;\r
-       }\r
-}\r
-\r
-void ShuffleParallel_REF(void* dest, const void* source, size_t size, const u8 red, const u8 green, const u8 blue, const u8 alpha)\r
-{\r
-       ShuffleParallel(&Shuffle_REF, dest, source, size, red, green, blue, alpha);\r
-}\r
-\r
-} // namespace image\r
-} // namespace utils\r
-} // namespace caspar\r
diff --git a/server/utils/image/Shuffle.hpp b/server/utils/image/Shuffle.hpp
deleted file mode 100644 (file)
index c7973fe..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _SHUFFLE_\r
-#define _SHUFFLE_\r
-\r
-#include "../CPUID.hpp"\r
-#include "../Types.hpp"\r
-\r
-namespace caspar{\r
-namespace utils{\r
-namespace image{\r
-\r
-void Shuffle_SSSE3(void* dest, const void* source, size_t size, const u8 red, const u8 green, const u8 blue, const u8 alpha);\r
-void Shuffle_SSE2 (void* dest, const void* source, size_t size, const u8 red, const u8 green, const u8 blue, const u8 alpha);\r
-void Shuffle_REF  (void* dest, const void* source, size_t size, const u8 red, const u8 green, const u8 blue, const u8 alpha);\r
-void ShuffleParallel_SSSE3(void* dest, const void* source, size_t size, const u8 red, const u8 green, const u8 blue, const u8 alpha);\r
-void ShuffleParallel_SSE2 (void* dest, const void* source, size_t size, const u8 red, const u8 green, const u8 blue, const u8 alpha);\r
-void ShuffleParallel_REF  (void* dest, const void* source, size_t size, const u8 red, const u8 green, const u8 blue, const u8 alpha);\r
-\r
-typedef void(*ShuffleFun)(void*, const void*, size_t, const u8, const u8, const u8, const u8);\r
-ShuffleFun GetShuffleFun(SIMD simd = REF);\r
-\r
-} // namespace image\r
-} // namespace utils\r
-} // namespace caspar\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/utils/object_pool.h b/server/utils/object_pool.h
deleted file mode 100644 (file)
index 4368c48..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-#ifndef _OBJECTPOOL_H_\r
-#define _OBJECTPOOL_H_\r
-\r
-#include <functional>\r
-#include <memory>\r
-#include <type_traits>\r
-\r
-#include <tbb/concurrent_queue.h>\r
-\r
-namespace caspar\r
-{\r
-\r
-namespace utils\r
-{\r
-\r
-template<typename T>\r
-struct default_new_delete_allocator\r
-{      \r
-       static T* construct()\r
-       { return new T(); }\r
-\r
-       \r
-       template<typename P0>\r
-       static T* construct(P0&& p0)\r
-       { return new T(std::forward<P0>(p0)); }\r
-\r
-       template<typename P0, typename P1>\r
-       static T* construct(P0&& p0, P1&& p1)\r
-       { return new T(std::forward<P0>(p0), std::forward<P1>(p1)); }\r
-       \r
-       template<typename P0, typename P1, typename P2>\r
-       static T* construct(P0&& p0, P1&& p1, P2&& p2)\r
-       { return new T(std::forward<P0>(p0), std::forward<P1>(p1), std::forward<P2>(p2)); }\r
-\r
-       static void destroy(T* const block)\r
-       { delete block; }\r
-};\r
-\r
-template<typename T, typename allocator = default_new_delete_allocator<T>>\r
-class object_pool\r
-{\r
-       typedef std::shared_ptr<T> Ptr;\r
-public:\r
-\r
-       ~object_pool()\r
-       {\r
-               T* item;\r
-               while(pool_.try_pop(item))\r
-                       allocator::destroy(item);\r
-       }\r
-\r
-       Ptr construct()\r
-       {\r
-               T* item = pool_.try_pop(item) ? item : allocator::construct();\r
-               return Ptr(item, [&](T* item){ pool_.push(item); });\r
-       }\r
-       \r
-       template<typename P0>\r
-       Ptr construct(P0&& p0)\r
-       {\r
-               T* item = pool_.try_pop(item) ? item : allocator::construct(std::forward<P0>(p0));\r
-               return Ptr(item, [&](T* item){ pool_.push(item); });\r
-       }\r
-       \r
-       template<typename P0, typename P1>\r
-       Ptr construct(P0&& p0, P1&& p1)\r
-       {\r
-               T* item = pool_.try_pop(item) ? item : allocator::construct(std::forward<P0>(p0), std::forward<P1>(p1));\r
-               return Ptr(item, [&](T* item){ pool_.push(item); });\r
-       }\r
-       \r
-       template<typename P0, typename P1, typename P2>\r
-       Ptr construct(P0&& p0, P1&& p1, P1&& p2)\r
-       {\r
-               T* item = pool_.try_pop(item) ? item : allocator::construct(std::forward<P0>(p0), std::forward<P1>(p1), std::forward<P2>(p2));\r
-               return Ptr(item, [&](T* item){ pool_.push(item); });\r
-       }\r
-private:\r
-       tbb::concurrent_queue<T*> pool_;\r
-};\r
-\r
-}}\r
-\r
-#endif
\ No newline at end of file
diff --git a/server/utils/runnable.h b/server/utils/runnable.h
deleted file mode 100644 (file)
index 935cf35..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
-*\r
-*  This file is part of CasparCG.\r
-*\r
-*    CasparCG is free software: you can redistribute it and/or modify\r
-*    it under the terms of the GNU General Public License as published by\r
-*    the Free Software Foundation, either version 3 of the License, or\r
-*    (at your option) any later version.\r
-*\r
-*    CasparCG is distributed in the hope that it will be useful,\r
-*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-*    GNU General Public License for more details.\r
-\r
-*    You should have received a copy of the GNU General Public License\r
-*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-*/\r
\r
-#ifndef _CASPAR_RUNNABLE_H__\r
-#define _CASPAR_RUNNABLE_H__\r
-\r
-#pragma once\r
-\r
-namespace caspar {\r
-namespace utils {\r
-\r
-class IRunnable\r
-{\r
-public:\r
-       virtual ~IRunnable() {}\r
-       virtual void Run(HANDLE stopEvent) = 0;\r
-       virtual bool OnUnhandledException(const std::exception&) throw() = 0;\r
-};\r
-\r
-typedef std::tr1::shared_ptr<IRunnable> RunnablePtr;\r
-\r
-}      //namespace utils\r
-}      //namespace caspar\r
-\r
-#endif //_CASPAR_RUNNABLE_H__
\ No newline at end of file
diff --git a/server/utils/scope_exit.h b/server/utils/scope_exit.h
deleted file mode 100644 (file)
index 24de34e..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef _CASPAR_SCOPE_EXIT_H_\r
-#define _CASPAR_SCOPE_EXIT_H_\r
-\r
-#include <utility>\r
-#include <functional>\r
-#include "Noncopyable.hpp"\r
-\r
-namespace caspar\r
-{\r
-       namespace utils \r
-       {\r
-               class scope_exit\r
-               {\r
-                       scope_exit( const scope_exit& );\r
-                       const scope_exit& operator=( const scope_exit& );\r
-               public:\r
-                       \r
-                       template <typename T, typename F>\r
-                       explicit scope_exit(T& obj, const F& func) : exitScope_(std::bind(func, obj))\r
-                       {}\r
-\r
-                       explicit scope_exit(std::function<void()>&& exitScope) : exitScope_(std::move(exitScope))\r
-                       {}\r
-\r
-                       ~scope_exit()\r
-                       {\r
-                               exitScope_();\r
-                       }\r
-\r
-               private:\r
-                       std::function<void()> exitScope_;\r
-               };              \r
-               \r
-       }\r
-}\r
-\r
-#define _CASPAR_EXIT_SCOPE_LINENAME_CAT(name, line) name##line\r
-#define _CASPAR_EXIT_SCOPE_LINENAME(name, line) _CASPAR_EXIT_SCOPE_LINENAME_CAT(name, line)\r
-#define CASPAR_SCOPE_EXIT caspar::utils::scope_exit _CASPAR_EXIT_SCOPE_LINENAME(EXIT, __LINE__)\r
-\r
-#endif
\ No newline at end of file