]> git.sesse.net Git - casparcg/commitdiff
#187
authorHelge Norberg <helge.norberg@gmail.com>
Mon, 21 Oct 2013 06:51:05 +0000 (08:51 +0200)
committerHelge Norberg <helge.norberg@gmail.com>
Mon, 21 Oct 2013 06:51:05 +0000 (08:51 +0200)
Changed NewTek iVGA dependency to be optional at runtime. This will prevent a possible GPL violation.

dependencies/newtek/bin/Processing.AirSend.x86.dll [deleted file]
dependencies/newtek/include/AirSend_api.h [deleted file]
dependencies/newtek/lib/Processing.AirSend.x86.lib [deleted file]
modules/newtek/consumer/newtek_ivga_consumer.cpp
modules/newtek/newtek.cpp
modules/newtek/newtek.vcxproj
modules/newtek/newtek.vcxproj.filters
modules/newtek/util/air_send.cpp [new file with mode: 0644]
modules/newtek/util/air_send.h [new file with mode: 0644]
shell/main.cpp
shell/shell.vcxproj

diff --git a/dependencies/newtek/bin/Processing.AirSend.x86.dll b/dependencies/newtek/bin/Processing.AirSend.x86.dll
deleted file mode 100644 (file)
index 5435aab..0000000
Binary files a/dependencies/newtek/bin/Processing.AirSend.x86.dll and /dev/null differ
diff --git a/dependencies/newtek/include/AirSend_api.h b/dependencies/newtek/include/AirSend_api.h
deleted file mode 100644 (file)
index 274cf7a..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-#pragma once
-
-// Are files exported ?
-#ifdef COMPILE_PROCESSING_AIRSEND
-#define        PROCESSING_AIRSEND_API  __declspec(dllexport)
-#else  // COMPILE_PROCESSING_AIRSEND
-#define        PROCESSING_AIRSEND_API  __declspec(dllimport)
-#endif // COMPILE_PROCESSING_AIRSEND
-
-// Create and initialize an AirSend instance. This will return NULL if it fails.
-extern "C" PROCESSING_AIRSEND_API      
-                       void*   AirSend_Create( // The video resolution. This should be a multiple of 8 pixels wide.
-                                                                   // This is the full frame resolution and not the per field resolution
-                                                                       // so for instance a 1920x1080 interlaced video stream would store
-                                                                       // xres=1920 yres=1080
-                                                                       const int xres, const int yres, 
-                                                                       // The frame-rate as a numerator and denominator. Examples :
-                                                                       // NTSC, 480i30, 1080i30 : 30000/1001
-                                                                       // NTSC, 720p60 : 60000/1001
-                                                                       // PAL, 576i50, 1080i50 : 30000/1200
-                                                                       // PAL, 720p50 : 60000/1200
-                                                                       const int frame_rate_n, const int frame_rate_d, 
-                                                                       // Is this field interlaced or not ?
-                                                                       const bool progressive,
-                                                                       // The image aspect ratio as a floating point. For instance
-                                                                       // 4:3  = 4.0/3.0  = 1.33333
-                                                                       // 16:9 = 16.0/9.0 = 1.77778
-                                                                       const float aspect_ratio,
-                                                                       // Do we want audio ?
-                                                                       const bool audio_enabled,
-                                                                       // The number of audio channels. 
-                                                                       const int no_channels,
-                                                                       // The audio sample-rate
-                                                                       const int sample_rate );
-
-// Destroy an instance of AirSend that was created by AirSend_Create.
-extern "C" PROCESSING_AIRSEND_API
-                       void AirSend_Destroy( void* p_instance );
-
-// Add a video frame. This is in YCbCr format and may have an optional alpha channel.
-// This is stored in an uncompressed video buffer of FourCC UYVY which has 16 bits per pixel
-// YUV 4:2:2 (Y sample at every pixel, U and V sampled at every second pixel horizontally on each line). 
-// This means that the stride of the image is xres*2 bytes pointed to by p_ycbcr. 
-// For fielded video, the two fields are interleaved together and it is assumed that field 0 is always
-// above field 1 which matches all modern video formats. It is recommended that if you desire to send
-// 486 line video that you drop the first line and the bottom 5 lines and send 480 line video. 
-// The return value is true when connected, false when not connected.
-extern "C" PROCESSING_AIRSEND_API
-                       bool AirSend_add_frame_ycbcr( void* p_instance, const BYTE* p_ycbcr );
-
-extern "C" PROCESSING_AIRSEND_API
-                       bool AirSend_add_frame_ycbcr_alpha( void* p_instance, const BYTE* p_ycbcr, const BYTE* p_alpha );
-
-// These methods allow you to add video in BGRA and BGRX formats. (BGRX is 32 bit BGR with the alpha channel
-// ignored.) Frames are provided as uncompressed buffers. YCbCr is the preferred color space and these are
-// provided as a conveniance.
-// The return value is true when connected, false when not connected.
-extern "C" PROCESSING_AIRSEND_API
-                       bool AirSend_add_frame_bgra( void* p_instance, const BYTE* p_bgra );
-extern "C" PROCESSING_AIRSEND_API
-                       bool AirSend_add_frame_bgrx( void* p_instance, const BYTE* p_bgrx );
-
-// Because Windows tends to create images bottom to top by default in memory, there are versions of the
-// BGR? functions that will send the video frame vertically flipped to avoid you needing to use CPU time
-// and memory bandwidth doing this yourself.
-// The return value is true when connected, false when not connected.
-extern "C" PROCESSING_AIRSEND_API
-                       bool AirSend_add_frame_bgra_flipped( void* p_instance, const BYTE* p_bgra );
-extern "C" PROCESSING_AIRSEND_API
-                       bool AirSend_add_frame_bgrx_flipped( void* p_instance, const BYTE* p_bgrx );
-
-// Add audio data. This should be in 16 bit PCM uncompressed and all channels are interleaved together.
-// Because audio and video are muxed together and send to the video source it is important that you send
-// these at the same rate since video frames will be "held" in the muxer until the corresponding audio
-// is received so that all data can be sent in "display" order to the TriCaster.
-// The return value is true when connected, false when not connected.
-extern "C" PROCESSING_AIRSEND_API
-                       bool AirSend_add_audio( void* p_instance, const short* p_src, const int no_samples );
-
-// This allows you to tell a particular TriCaster that is on "Receive" mode to watch this video source.
-// By default, on a TriCaster "Net 1" is on port 7000, and "Net 2" is on port 7001. Note that a full implementation
-// should use Bonjour to locate the TriCaster as described in the SDK documentation; when working this way
-// you would always know the true port numbers.
-extern "C" PROCESSING_AIRSEND_API
-                       void AirSend_request_connection( void* p_instance, const ULONG IP, const USHORT Port );
diff --git a/dependencies/newtek/lib/Processing.AirSend.x86.lib b/dependencies/newtek/lib/Processing.AirSend.x86.lib
deleted file mode 100644 (file)
index cf8b252..0000000
Binary files a/dependencies/newtek/lib/Processing.AirSend.x86.lib and /dev/null differ
index 5eb1609b8f627f9ef8bc20686abaac1a58c1d1e1..b641fc1a5859cae20c2c56bf5e6150c34a2ba05e 100644 (file)
 
 #include <boost/algorithm/string.hpp>
 
-#include <AirSend_api.h>
+#include "../util/air_send.h"
+
+namespace caspar { namespace newtek {
 
-namespace caspar { namespace newtek { 
-                       
 struct newtek_ivga_consumer : public core::frame_consumer
 {
        std::shared_ptr<void>   air_send_;
@@ -50,6 +50,8 @@ public:
                : executor_(print())
                , channel_layout_(channel_layout)
        {
+               if (!airsend::is_available())
+                       BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(narrow(airsend::dll_name()) + " not available"));
        }
        
        ~newtek_ivga_consumer()
@@ -61,7 +63,7 @@ public:
        virtual void initialize(const core::video_format_desc& format_desc, int channel_index) override
        {
                air_send_.reset(
-                       AirSend_Create(
+                       airsend::create(
                                format_desc.width,
                                format_desc.height,
                                format_desc.time_scale,
@@ -71,7 +73,7 @@ public:
                                true,
                                channel_layout_.num_channels,
                                format_desc.audio_sample_rate),
-                       AirSend_Destroy);
+                               airsend::destroy);
 
                CASPAR_VERIFY(air_send_);
 
@@ -117,11 +119,11 @@ public:
                                audio_buffer = core::audio_32_to_16(frame->audio_data());
                        }
 
-                       AirSend_add_audio(air_send_.get(), audio_buffer.data(), audio_buffer.size() / channel_layout_.num_channels);
+                       airsend::add_audio(air_send_.get(), audio_buffer.data(), audio_buffer.size() / channel_layout_.num_channels);
 
                        // VIDEO
 
-                       AirSend_add_frame_bgra(air_send_.get(), frame->image_data().begin());
+                       airsend::add_frame_bgra(air_send_.get(), frame->image_data().begin());
                        
                        return true;
                });
index 0a63c5f3d012659c6f8303f5080cb8323a9a8f93..bc6ec53e035d81db8f318e1e8c7854208d8d47a2 100644 (file)
@@ -22,6 +22,7 @@
 #include "newtek.h"
 
 #include "consumer/newtek_ivga_consumer.h"
+#include "util/air_send.h"
 
 #include <core/parameters/parameters.h>
 #include <core/consumer/frame_consumer.h>
@@ -32,10 +33,11 @@ void init()
 {
        try
        {
-               core::register_consumer_factory([](const core::parameters& params)
-               {
-                       return newtek::create_ivga_consumer(params);
-               });
+               if (airsend::is_available())
+                       core::register_consumer_factory([](const core::parameters& params)
+                       {
+                               return newtek::create_ivga_consumer(params);
+                       });
        }
        catch(...){}
 }
index 7d859bb104e3ee41337d00a52ad0cb67d852d10a..5af94ce6d30e7c4d16c19f8f6e1466ce3da5b1d6 100644 (file)
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)tmp\$(Configuration)\</IntDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">$(ProjectDir)tmp\$(Configuration)\</IntDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">$(ProjectDir)tmp\$(Configuration)\</IntDir>
-    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\;..\..\common;..\..\dependencies\newtek\include;..\..\dependencies\boost\;..\..\dependencies\tbb\include\;$(IncludePath)</IncludePath>
-    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\;..\..\common;..\..\dependencies\newtek\include;..\..\dependencies\boost\;..\..\dependencies\tbb\include\;$(IncludePath)</IncludePath>
-    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">..\..\;..\..\common;..\..\dependencies\newtek\include;..\..\dependencies\boost\;..\..\dependencies\tbb\include\;$(IncludePath)</IncludePath>
-    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">..\..\;..\..\common;..\..\dependencies\newtek\include;..\..\dependencies\boost\;..\..\dependencies\tbb\include\;..\..\dependencies\ffmpeg 0.8\include;$(IncludePath)</IncludePath>
+    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\;..\..\common;..\..\dependencies\boost\;..\..\dependencies\tbb\include\;$(IncludePath)</IncludePath>
+    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\;..\..\common;..\..\dependencies\boost\;..\..\dependencies\tbb\include\;$(IncludePath)</IncludePath>
+    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">..\..\;..\..\common;..\..\dependencies\boost\;..\..\dependencies\tbb\include\;$(IncludePath)</IncludePath>
+    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">..\..\;..\..\common;..\..\dependencies\boost\;..\..\dependencies\tbb\include\;..\..\dependencies\ffmpeg 0.8\include;$(IncludePath)</IncludePath>
     <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\dependencies\BluefishSDK_V5_10_0_42\Lib\;..\..\dependencies\boost\stage\lib\;..\..\dependencies\tbb\lib\ia32\vc10\;$(LibraryPath)</LibraryPath>
     <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\dependencies\BluefishSDK_V5_10_0_42\Lib\;..\..\dependencies\boost\stage\lib\;..\..\dependencies\tbb\lib\ia32\vc10\;$(LibraryPath)</LibraryPath>
     <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">..\..\dependencies\BluefishSDK_V5_10_0_42\Lib\;..\..\dependencies\boost\stage\lib\;..\..\dependencies\tbb\lib\ia32\vc10\;$(LibraryPath)</LibraryPath>
     <ClInclude Include="newtek.h" />
     <ClInclude Include="consumer\newtek_ivga_consumer.h" />
     <ClInclude Include="StdAfx.h" />
+    <ClInclude Include="util\air_send.h" />
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="newtek.cpp">
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">Create</PrecompiledHeader>
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
     </ClCompile>
+    <ClCompile Include="util\air_send.cpp">
+      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">../StdAfx.h</PrecompiledHeaderFile>
+      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../StdAfx.h</PrecompiledHeaderFile>
+      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>
+      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../StdAfx.h</PrecompiledHeaderFile>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\..\common\common.vcxproj">
index 31bdb1131e57f0968d8aa4ef30d51fb3ea027cf1..c8a61d830368f590d3a35d0f1ba60bf3ed35cc18 100644 (file)
@@ -8,6 +8,9 @@
     <ClCompile Include="newtek.cpp">
       <Filter>source</Filter>
     </ClCompile>
+    <ClCompile Include="util\air_send.cpp">
+      <Filter>source\util</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="StdAfx.h" />
@@ -17,6 +20,9 @@
     <ClInclude Include="newtek.h">
       <Filter>source</Filter>
     </ClInclude>
+    <ClInclude Include="util\air_send.h">
+      <Filter>source\util</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <Filter Include="source">
@@ -25,5 +31,8 @@
     <Filter Include="source\consumer">
       <UniqueIdentifier>{c4a0a6b8-00cd-475e-a6a4-775bba93dbc2}</UniqueIdentifier>
     </Filter>
+    <Filter Include="source\util">
+      <UniqueIdentifier>{05a7aae8-a23c-4aa2-81c4-fd0710306ce7}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/modules/newtek/util/air_send.cpp b/modules/newtek/util/air_send.cpp
new file mode 100644 (file)
index 0000000..a869940
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+* Copyright 2013 Sveriges Television AB http://casparcg.com/
+*
+* This file is part of CasparCG (www.casparcg.com).
+*
+* CasparCG is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* CasparCG is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with CasparCG. If not, see <http://www.gnu.org/licenses/>.
+*
+* Author: Helge Norberg, helge.norberg@svt.se
+*/
+
+#include "../StdAfx.h"
+
+#include "air_send.h"
+
+#include <memory>
+
+#include <Windows.h>
+
+#include <common/exception/exceptions.h>
+
+namespace caspar { namespace newtek { namespace airsend {
+
+void* (*create)(
+               const int width, const int height,
+               const int timescale, const int duration,
+               const bool progressive,
+               const float aspect_ratio,
+               const bool audio_enabled,
+               const int num_channels,
+               const int sample_rate) = nullptr;
+void (*destroy)(void* instance) = nullptr;
+bool (*add_audio)(
+               void* instance, const short* samples, const int num_samples) = nullptr;
+bool (*add_frame_bgra)(void* instance, const unsigned char* data) = nullptr;
+
+const std::wstring& dll_name()
+{
+       static std::wstring name = L"Processing.AirSend.x86.dll";
+
+       return name;
+}
+
+std::shared_ptr<void> load_library()
+{
+       auto module = LoadLibrary(dll_name().c_str());
+       
+       if (!module)
+               return nullptr;
+
+       std::shared_ptr<void> lib(module, FreeLibrary);
+
+       create = reinterpret_cast<decltype(create)>(
+                       GetProcAddress(module, "AirSend_Create"));
+       destroy = reinterpret_cast<decltype(destroy)>(
+                       GetProcAddress(module, "AirSend_Destroy"));
+       add_audio = reinterpret_cast<decltype(add_audio)>(
+                       GetProcAddress(module, "AirSend_add_audio"));
+       add_frame_bgra = reinterpret_cast<decltype(add_frame_bgra)>(
+                       GetProcAddress(module, "AirSend_add_frame_bgra"));
+
+       if (create == nullptr
+                       || destroy == nullptr
+                       || add_audio == nullptr
+                       || add_frame_bgra == nullptr)
+       {
+               create = nullptr;
+               destroy = nullptr;
+               add_audio = nullptr;
+               add_frame_bgra = nullptr;
+
+               return nullptr;
+       }
+
+       return lib;
+}
+
+bool is_available()
+{
+       static std::shared_ptr<void> lib = load_library();
+
+       return lib;
+}
+
+}}}
diff --git a/modules/newtek/util/air_send.h b/modules/newtek/util/air_send.h
new file mode 100644 (file)
index 0000000..8155fc5
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+* Copyright 2013 Sveriges Television AB http://casparcg.com/
+*
+* This file is part of CasparCG (www.casparcg.com).
+*
+* CasparCG is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* CasparCG is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with CasparCG. If not, see <http://www.gnu.org/licenses/>.
+*
+* Author: Helge Norberg, helge.norberg@svt.se
+*/
+#pragma once
+
+#include <string>
+
+namespace caspar { namespace newtek { namespace airsend {
+
+const std::wstring& dll_name();
+bool is_available();
+
+extern void* (*create)(
+               const int width, const int height,
+               const int timescale, const int duration,
+               const bool progressive,
+               const float aspect_ratio,
+               const bool audio_enabled,
+               const int num_channels,
+               const int sample_rate);
+extern void (*destroy)(void* instance);
+extern bool (*add_audio)(
+               void* instance, const short* samples, const int num_samples);
+extern bool (*add_frame_bgra)(void* instance, const unsigned char* data);
+
+}}}
index 382e3c30797ad0c72378cc651d25877ae8e0f1cc..320d678b56bf6017c6e983b4782df70a8db28f85 100644 (file)
@@ -52,6 +52,7 @@
 #include <modules/flash/flash.h>\r
 #include <modules/ffmpeg/ffmpeg.h>\r
 #include <modules/image/image.h>\r
+#include <modules/newtek/util/air_send.h>\r
 \r
 #include <common/env.h>\r
 #include <common/exception/win32_exception.h>\r
@@ -159,6 +160,7 @@ void print_info()
        CASPAR_LOG(info) << L"FFMPEG-swscale "  << caspar::ffmpeg::get_swscale_version();\r
        CASPAR_LOG(info) << L"Flash "                   << caspar::flash::get_version();\r
        CASPAR_LOG(info) << L"Template-Host "   << caspar::flash::get_cg_version();\r
+       CASPAR_LOG(info) << L"NewTek iVGA "             << (caspar::newtek::airsend::is_available() ? L"available" : L"unavailable (" + caspar::newtek::airsend::dll_name() + L")");\r
 }\r
 \r
 LONG WINAPI UserUnhandledExceptionFilter(EXCEPTION_POINTERS* info)\r
index 5182eccb4286d22fe67f135b3eb471cbce8c0d3e..adf508b2bba39231560164427454dea8f3a59cb6 100644 (file)
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\$(Configuration)\</IntDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">$(SolutionDir)tmp\$(Configuration)\</IntDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">$(SolutionDir)tmp\$(Configuration)\</IntDir>\r
-    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\dependencies\BluefishSDK_V5_10_0_42\Inc\;..\dependencies\boost\;..\dependencies\ffmpeg 0.8\include\;..\dependencies\FreeImage\Dist\;..\dependencies\glew-1.6.0\include;..\dependencies\SFML-1.6\include\;..\dependencies\tbb\include\;..\dependencies\newtek\include\;$(IncludePath)</IncludePath>\r
+    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\dependencies\BluefishSDK_V5_10_0_42\Inc\;..\dependencies\boost\;..\dependencies\ffmpeg 0.8\include\;..\dependencies\FreeImage\Dist\;..\dependencies\glew-1.6.0\include;..\dependencies\SFML-1.6\include\;..\dependencies\tbb\include\;$(IncludePath)</IncludePath>\r
     <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\dependencies\BluefishSDK_V5_10_0_42\Inc\;..\dependencies\boost\;..\dependencies\ffmpeg 0.8\include\;..\dependencies\FreeImage\Dist\;..\dependencies\glew-1.6.0\include;..\dependencies\SFML-1.6\include\;..\dependencies\tbb\include\;$(IncludePath)</IncludePath>\r
     <IncludePath Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">..\dependencies\BluefishSDK_V5_10_0_42\Inc\;..\dependencies\boost\;..\dependencies\ffmpeg 0.8\include\;..\dependencies\FreeImage\Dist\;..\dependencies\glew-1.6.0\include;..\dependencies\SFML-1.6\include\;..\dependencies\tbb\include\;$(IncludePath)</IncludePath>\r
     <IncludePath Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">..\dependencies\BluefishSDK_V5_10_0_42\Inc\;..\dependencies\boost\;..\dependencies\ffmpeg 0.8\include\;..\dependencies\FreeImage\Dist\;..\dependencies\glew-1.6.0\include;..\dependencies\SFML-1.6\include\;..\dependencies\tbb\include\;$(IncludePath)</IncludePath>\r
-    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">C:\Program\Microsoft DirectX SDK (June 2010)\Lib\x86;..\dependencies\BluefishSDK_V5_10_0_42\Lib\;..\dependencies\boost\stage\lib\;..\dependencies\ffmpeg 0.8\lib\;..\dependencies\FreeImage\Dist\;..\dependencies\glew-1.6.0\lib;..\dependencies\SFML-1.6\lib\;..\dependencies\tbb\lib\ia32\vc10\;..\dependencies\zlib\lib;..\dependencies\portaudio\lib;..\dependencies\newtek\lib;$(LibraryPath)</LibraryPath>\r
-    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">C:\Program\Microsoft DirectX SDK (June 2010)\Lib\x86;..\dependencies\BluefishSDK_V5_10_0_42\Lib\;..\dependencies\boost\stage\lib\;..\dependencies\ffmpeg 0.8\lib\;..\dependencies\FreeImage\Dist\;..\dependencies\glew-1.6.0\lib;..\dependencies\SFML-1.6\lib\;..\dependencies\tbb\lib\ia32\vc10\;..\dependencies\zlib\lib;..\dependencies\portaudio\lib;..\dependencies\newtek\lib;$(LibraryPath)</LibraryPath>\r
-    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">C:\Program\Microsoft DirectX SDK (June 2010)\Lib\x86;..\dependencies\BluefishSDK_V5_10_0_42\Lib\;..\dependencies\boost\stage\lib\;..\dependencies\ffmpeg 0.8\lib\;..\dependencies\FreeImage\Dist\;..\dependencies\glew-1.6.0\lib;..\dependencies\SFML-1.6\lib\;..\dependencies\tbb\lib\ia32\vc10\;..\dependencies\zlib\lib;..\dependencies\portaudio\lib;..\dependencies\newtek\lib;$(LibraryPath)</LibraryPath>\r
-    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">C:\Program\Microsoft DirectX SDK (June 2010)\Lib\x86;..\dependencies\BluefishSDK_V5_10_0_42\Lib\;..\dependencies\boost\stage\lib\;..\dependencies\ffmpeg 0.8\lib\;..\dependencies\FreeImage\Dist\;..\dependencies\glew-1.6.0\lib;..\dependencies\SFML-1.6\lib\;..\dependencies\tbb\lib\ia32\vc10\;..\dependencies\zlib\lib;..\dependencies\portaudio\lib;..\dependencies\newtek\lib;$(LibraryPath)</LibraryPath>\r
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">C:\Program\Microsoft DirectX SDK (June 2010)\Lib\x86;..\dependencies\BluefishSDK_V5_10_0_42\Lib\;..\dependencies\boost\stage\lib\;..\dependencies\ffmpeg 0.8\lib\;..\dependencies\FreeImage\Dist\;..\dependencies\glew-1.6.0\lib;..\dependencies\SFML-1.6\lib\;..\dependencies\tbb\lib\ia32\vc10\;..\dependencies\zlib\lib;..\dependencies\portaudio\lib;$(LibraryPath)</LibraryPath>\r
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">C:\Program\Microsoft DirectX SDK (June 2010)\Lib\x86;..\dependencies\BluefishSDK_V5_10_0_42\Lib\;..\dependencies\boost\stage\lib\;..\dependencies\ffmpeg 0.8\lib\;..\dependencies\FreeImage\Dist\;..\dependencies\glew-1.6.0\lib;..\dependencies\SFML-1.6\lib\;..\dependencies\tbb\lib\ia32\vc10\;..\dependencies\zlib\lib;..\dependencies\portaudio\lib;$(LibraryPath)</LibraryPath>\r
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">C:\Program\Microsoft DirectX SDK (June 2010)\Lib\x86;..\dependencies\BluefishSDK_V5_10_0_42\Lib\;..\dependencies\boost\stage\lib\;..\dependencies\ffmpeg 0.8\lib\;..\dependencies\FreeImage\Dist\;..\dependencies\glew-1.6.0\lib;..\dependencies\SFML-1.6\lib\;..\dependencies\tbb\lib\ia32\vc10\;..\dependencies\zlib\lib;..\dependencies\portaudio\lib;$(LibraryPath)</LibraryPath>\r
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">C:\Program\Microsoft DirectX SDK (June 2010)\Lib\x86;..\dependencies\BluefishSDK_V5_10_0_42\Lib\;..\dependencies\boost\stage\lib\;..\dependencies\ffmpeg 0.8\lib\;..\dependencies\FreeImage\Dist\;..\dependencies\glew-1.6.0\lib;..\dependencies\SFML-1.6\lib\;..\dependencies\tbb\lib\ia32\vc10\;..\dependencies\zlib\lib;..\dependencies\portaudio\lib;$(LibraryPath)</LibraryPath>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)bin\$(Configuration)\</OutDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)bin\$(Configuration)\</OutDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">$(SolutionDir)bin\$(Configuration)\</OutDir>\r
       <ForcedIncludeFiles>common/compiler/vs/disable_silly_warnings.h</ForcedIncludeFiles>\r
     </ClCompile>\r
     <Link>\r
-      <AdditionalDependencies>sfml-system-s-d.lib;sfml-audio-s-d.lib;sfml-window-s-d.lib;sfml-graphics-s-d.lib;OpenGL32.lib;FreeImage.lib;Winmm.lib;Ws2_32.lib;avformat.lib;avcodec.lib;avdevice.lib;avutil.lib;avfilter.lib;swscale.lib;tbb.lib;glew32.lib;zdll.lib;portaudio_x86.lib;Processing.AirSend.x86.lib</AdditionalDependencies>\r
+      <AdditionalDependencies>sfml-system-s-d.lib;sfml-audio-s-d.lib;sfml-window-s-d.lib;sfml-graphics-s-d.lib;OpenGL32.lib;FreeImage.lib;Winmm.lib;Ws2_32.lib;avformat.lib;avcodec.lib;avdevice.lib;avutil.lib;avfilter.lib;swscale.lib;tbb.lib;glew32.lib;zdll.lib;portaudio_x86.lib</AdditionalDependencies>\r
       <Version>\r
       </Version>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
@@ -212,7 +212,6 @@ copy "$(SolutionDir)dependencies\tbb\bin\ia32\vc10\*.dll" "$(OutDir)"
 copy "$(SolutionDir)dependencies\zlib\*.dll" "$(OutDir)"\r
 copy "$(SolutionDir)dependencies\SFML-1.6\extlibs\bin\*.dll" "$(OutDir)"\r
 copy "$(SolutionDir)dependencies\portaudio\bin\*.dll" "$(OutDir)"\r
-copy "$(SolutionDir)dependencies\newtek\bin\*.dll" "$(OutDir)"\r
 copy "$(ProjectDir)casparcg.config" "$(OutDir)"\r
 copy "$(ProjectDir)casparcg_auto_restart.bat" "$(OutDir)"</Command>\r
     </PostBuildEvent>\r
@@ -247,7 +246,7 @@ copy "$(ProjectDir)casparcg_auto_restart.bat" "$(OutDir)"</Command>
       </Command>\r
     </PreLinkEvent>\r
     <Link>\r
-      <AdditionalDependencies>sfml-system-s.lib;sfml-audio-s.lib;sfml-window-s.lib;sfml-graphics-s.lib;OpenGL32.lib;FreeImage.lib;Winmm.lib;Ws2_32.lib;avformat.lib;avcodec.lib;avdevice.lib;avutil.lib;avfilter.lib;swscale.lib;tbb.lib;glew32.lib;zdll.lib;portaudio_x86.lib;Processing.AirSend.x86.lib</AdditionalDependencies>\r
+      <AdditionalDependencies>sfml-system-s.lib;sfml-audio-s.lib;sfml-window-s.lib;sfml-graphics-s.lib;OpenGL32.lib;FreeImage.lib;Winmm.lib;Ws2_32.lib;avformat.lib;avcodec.lib;avdevice.lib;avutil.lib;avfilter.lib;swscale.lib;tbb.lib;glew32.lib;zdll.lib;portaudio_x86.lib</AdditionalDependencies>\r
       <Version>\r
       </Version>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
@@ -276,7 +275,6 @@ copy "$(SolutionDir)dependencies\tbb\bin\ia32\vc10\*.dll" "$(OutDir)"
 copy "$(SolutionDir)dependencies\zlib\*.dll" "$(OutDir)"\r
 copy "$(SolutionDir)dependencies\SFML-1.6\extlibs\bin\*.dll" "$(OutDir)"\r
 copy "$(SolutionDir)dependencies\portaudio\bin\*.dll" "$(OutDir)"\r
-copy "$(SolutionDir)dependencies\newtek\bin\*.dll" "$(OutDir)"\r
 copy "$(ProjectDir)casparcg.config" "$(OutDir)"\r
 copy "$(ProjectDir)casparcg_auto_restart.bat" "$(OutDir)"</Command>\r
     </PostBuildEvent>\r
@@ -311,7 +309,7 @@ copy "$(ProjectDir)casparcg_auto_restart.bat" "$(OutDir)"</Command>
       </Command>\r
     </PreLinkEvent>\r
     <Link>\r
-      <AdditionalDependencies>sfml-system-s.lib;sfml-audio-s.lib;sfml-window-s.lib;sfml-graphics-s.lib;OpenGL32.lib;FreeImage.lib;Winmm.lib;Ws2_32.lib;avformat.lib;avcodec.lib;avdevice.lib;avutil.lib;avfilter.lib;swscale.lib;tbb.lib;glew32.lib;zdll.lib;portaudio_x86.lib;Processing.AirSend.x86.lib</AdditionalDependencies>\r
+      <AdditionalDependencies>sfml-system-s.lib;sfml-audio-s.lib;sfml-window-s.lib;sfml-graphics-s.lib;OpenGL32.lib;FreeImage.lib;Winmm.lib;Ws2_32.lib;avformat.lib;avcodec.lib;avdevice.lib;avutil.lib;avfilter.lib;swscale.lib;tbb.lib;glew32.lib;zdll.lib;portaudio_x86.lib</AdditionalDependencies>\r
       <Version>\r
       </Version>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
@@ -339,7 +337,6 @@ copy "$(SolutionDir)dependencies\tbb\bin\ia32\vc10\*.dll" "$(OutDir)"
 copy "$(SolutionDir)dependencies\zlib\*.dll" "$(OutDir)"\r
 copy "$(SolutionDir)dependencies\SFML-1.6\extlibs\bin\*.dll" "$(OutDir)"\r
 copy "$(SolutionDir)dependencies\portaudio\bin\*.dll" "$(OutDir)"\r
-copy "$(SolutionDir)dependencies\newtek\bin\*.dll" "$(OutDir)"\r
 copy "$(ProjectDir)casparcg.config" "$(OutDir)"\r
 copy "$(ProjectDir)casparcg_auto_restart.bat" "$(OutDir)"</Command>\r
     </PostBuildEvent>\r
@@ -374,7 +371,7 @@ copy "$(ProjectDir)casparcg_auto_restart.bat" "$(OutDir)"</Command>
       </Command>\r
     </PreLinkEvent>\r
     <Link>\r
-      <AdditionalDependencies>sfml-system-s.lib;sfml-audio-s.lib;sfml-window-s.lib;sfml-graphics-s.lib;OpenGL32.lib;FreeImage.lib;Winmm.lib;Ws2_32.lib;avformat.lib;avcodec.lib;avdevice.lib;avutil.lib;avfilter.lib;swscale.lib;tbb.lib;glew32.lib;zdll.lib;portaudio_x86.lib;Processing.AirSend.x86.lib</AdditionalDependencies>\r
+      <AdditionalDependencies>sfml-system-s.lib;sfml-audio-s.lib;sfml-window-s.lib;sfml-graphics-s.lib;OpenGL32.lib;FreeImage.lib;Winmm.lib;Ws2_32.lib;avformat.lib;avcodec.lib;avdevice.lib;avutil.lib;avfilter.lib;swscale.lib;tbb.lib;glew32.lib;zdll.lib;portaudio_x86.lib</AdditionalDependencies>\r
       <Version>\r
       </Version>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
@@ -402,7 +399,6 @@ copy "$(SolutionDir)dependencies\tbb\bin\ia32\vc10\*.dll" "$(OutDir)"
 copy "$(SolutionDir)dependencies\zlib\*.dll" "$(OutDir)"\r
 copy "$(SolutionDir)dependencies\SFML-1.6\extlibs\bin\*.dll" "$(OutDir)"\r
 copy "$(SolutionDir)dependencies\portaudio\bin\*.dll" "$(OutDir)"\r
-copy "$(SolutionDir)dependencies\newtek\bin\*.dll" "$(OutDir)"\r
 copy "$(ProjectDir)casparcg.config" "$(OutDir)"\r
 copy "$(ProjectDir)casparcg_auto_restart.bat" "$(OutDir)"</Command>\r
     </PostBuildEvent>\r