]> git.sesse.net Git - casparcg/commitdiff
2.0.0.2: Added performance graphs.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 30 Jan 2011 00:40:56 +0000 (00:40 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 30 Jan 2011 00:40:56 +0000 (00:40 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@433 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

24 files changed:
casparcg.sln
common/common.vcxproj
common/common.vcxproj.filters
common/concurrency/executor.h
common/diagnostics/graph.cpp [new file with mode: 0644]
common/diagnostics/graph.h [new file with mode: 0644]
common/exception/win32_exception.cpp
common/log/log.cpp
common/utility/timer.h
core/consumer/bluefish/bluefish_consumer.cpp
core/consumer/ogl/ogl_consumer.cpp
core/core.vcxproj
core/producer/ffmpeg/ffmpeg_producer.cpp
core/producer/ffmpeg/input.cpp
core/producer/ffmpeg/input.h
core/producer/flash/flash_producer.cpp
mixer/frame_mixer_device.cpp
mixer/gpu/device_buffer.cpp
mixer/gpu/host_buffer.cpp
mixer/mixer.vcxproj
protocol/protocol.vcxproj
shell/caspar.config
shell/main.cpp
shell/shell.vcxproj

index 3384902dbe7459922efeba0ee96c5b9771497268..52a7748a1a95ac939b62843f3083d0ea61f24758 100644 (file)
@@ -20,31 +20,43 @@ Global
        EndGlobalSection\r
        GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
                Debug|Win32 = Debug|Win32\r
+               Develop|Win32 = Develop|Win32\r
                Release|Win32 = Release|Win32\r
        EndGlobalSection\r
        GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
                {02308602-7FE0-4253-B96E-22134919F56A}.Debug|Win32.ActiveCfg = Debug|Win32\r
                {02308602-7FE0-4253-B96E-22134919F56A}.Debug|Win32.Build.0 = Debug|Win32\r
+               {02308602-7FE0-4253-B96E-22134919F56A}.Develop|Win32.ActiveCfg = Develop|Win32\r
+               {02308602-7FE0-4253-B96E-22134919F56A}.Develop|Win32.Build.0 = Develop|Win32\r
                {02308602-7FE0-4253-B96E-22134919F56A}.Release|Win32.ActiveCfg = Release|Win32\r
                {02308602-7FE0-4253-B96E-22134919F56A}.Release|Win32.Build.0 = Release|Win32\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}.Develop|Win32.ActiveCfg = Develop|Win32\r
+               {79388C20-6499-4BF6-B8B9-D8C33D7D4DDD}.Develop|Win32.Build.0 = Develop|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
                {8002D74D-4E89-4BD6-8CE8-0FE4DF14CA5D}.Debug|Win32.ActiveCfg = Debug|Win32\r
                {8002D74D-4E89-4BD6-8CE8-0FE4DF14CA5D}.Debug|Win32.Build.0 = Debug|Win32\r
+               {8002D74D-4E89-4BD6-8CE8-0FE4DF14CA5D}.Develop|Win32.ActiveCfg = Debug|Win32\r
                {8002D74D-4E89-4BD6-8CE8-0FE4DF14CA5D}.Release|Win32.ActiveCfg = Release|Win32\r
                {8002D74D-4E89-4BD6-8CE8-0FE4DF14CA5D}.Release|Win32.Build.0 = Release|Win32\r
                {8C26C94F-8092-4769-8D84-DEA479721C5B}.Debug|Win32.ActiveCfg = Debug|Win32\r
                {8C26C94F-8092-4769-8D84-DEA479721C5B}.Debug|Win32.Build.0 = Debug|Win32\r
+               {8C26C94F-8092-4769-8D84-DEA479721C5B}.Develop|Win32.ActiveCfg = Develop|Win32\r
+               {8C26C94F-8092-4769-8D84-DEA479721C5B}.Develop|Win32.Build.0 = Develop|Win32\r
                {8C26C94F-8092-4769-8D84-DEA479721C5B}.Release|Win32.ActiveCfg = Release|Win32\r
                {8C26C94F-8092-4769-8D84-DEA479721C5B}.Release|Win32.Build.0 = Release|Win32\r
                {2040B361-1FB6-488E-84A5-38A580DA90DE}.Debug|Win32.ActiveCfg = Debug|Win32\r
                {2040B361-1FB6-488E-84A5-38A580DA90DE}.Debug|Win32.Build.0 = Debug|Win32\r
+               {2040B361-1FB6-488E-84A5-38A580DA90DE}.Develop|Win32.ActiveCfg = Develop|Win32\r
+               {2040B361-1FB6-488E-84A5-38A580DA90DE}.Develop|Win32.Build.0 = Develop|Win32\r
                {2040B361-1FB6-488E-84A5-38A580DA90DE}.Release|Win32.ActiveCfg = Release|Win32\r
                {2040B361-1FB6-488E-84A5-38A580DA90DE}.Release|Win32.Build.0 = Release|Win32\r
                {477E12A4-1B28-4FF7-B46D-76606BDD1891}.Debug|Win32.ActiveCfg = Debug|Win32\r
                {477E12A4-1B28-4FF7-B46D-76606BDD1891}.Debug|Win32.Build.0 = Debug|Win32\r
+               {477E12A4-1B28-4FF7-B46D-76606BDD1891}.Develop|Win32.ActiveCfg = Develop|Win32\r
+               {477E12A4-1B28-4FF7-B46D-76606BDD1891}.Develop|Win32.Build.0 = Develop|Win32\r
                {477E12A4-1B28-4FF7-B46D-76606BDD1891}.Release|Win32.ActiveCfg = Release|Win32\r
                {477E12A4-1B28-4FF7-B46D-76606BDD1891}.Release|Win32.Build.0 = Release|Win32\r
        EndGlobalSection\r
index f8cba38e0fef695c3745a7ef9bc7dc87b1311db1..0c60eec06d26fcef822a51421b25b33ee34dfdcb 100644 (file)
@@ -5,6 +5,10 @@
       <Configuration>Debug</Configuration>\r
       <Platform>Win32</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Develop|Win32">\r
+      <Configuration>Develop</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="Release|Win32">\r
       <Configuration>Release</Configuration>\r
       <Platform>Win32</Platform>\r
     <WholeProgramOptimization>true</WholeProgramOptimization>\r
     <CharacterSet>Unicode</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
   </ImportGroup>\r
@@ -37,6 +47,9 @@
   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <PropertyGroup Label="UserMacros" />\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
     <IncludePath>..\..\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\;$(IncludePath)</IncludePath>\r
     <OutDir>$(ProjectDir)release\</OutDir>\r
     <IntDir>release\</IntDir>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">\r
+    <IncludePath>..\..\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\;$(IncludePath)</IncludePath>\r
+    <LibraryPath>..\..\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\;..\..\..\dependencies\tbb30_20100406oss\lib\;$(LibraryPath)</LibraryPath>\r
+    <OutDir>$(ProjectDir)release\</OutDir>\r
+    <IntDir>release\</IntDir>\r
+  </PropertyGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
     <ClCompile>\r
       <PrecompiledHeader>Use</PrecompiledHeader>\r
       <OptimizeReferences>true</OptimizeReferences>\r
     </Link>\r
   </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">\r
+    <ClCompile>\r
+      <WarningLevel>Level4</WarningLevel>\r
+      <PrecompiledHeader>Use</PrecompiledHeader>\r
+      <Optimization>Disabled</Optimization>\r
+      <FunctionLevelLinking>\r
+      </FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <ExceptionHandling>Async</ExceptionHandling>\r
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
+      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>\r
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>\r
+      <WholeProgramOptimization>false</WholeProgramOptimization>\r
+      <TreatWarningAsError>true</TreatWarningAsError>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Windows</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
   <ItemGroup>\r
     <ClInclude Include="compiler\vs\disable_silly_warnings.h" />\r
     <ClInclude Include="concurrency\executor.h" />\r
+    <ClInclude Include="diagnostics\graph.h" />\r
     <ClInclude Include="exception\exceptions.h" />\r
     <ClInclude Include="exception\win32_exception.h" />\r
     <ClInclude Include="gl\gl_check.h" />\r
     <ClInclude Include="utility\timer.h" />\r
   </ItemGroup>\r
   <ItemGroup>\r
+    <ClCompile Include="diagnostics\graph.cpp">\r
+      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
+      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
+      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
+    </ClCompile>\r
     <ClCompile Include="exception\win32_exception.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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="log\log.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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="env.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)'=='Develop|Win32'">Create</PrecompiledHeader>\r
     </ClCompile>\r
   </ItemGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
index 6bc2825b4a636a0a365d00c1e80c1725fa697031..658daa79cbb19c96824559812eff5c130274fa46 100644 (file)
@@ -32,6 +32,9 @@
     <Filter Include="Source\memory">\r
       <UniqueIdentifier>{9259676d-c225-4422-a50e-30d152d78dc2}</UniqueIdentifier>\r
     </Filter>\r
+    <Filter Include="Source\diagnostics">\r
+      <UniqueIdentifier>{29a29bcc-a9a0-4083-b713-c3773d18e177}</UniqueIdentifier>\r
+    </Filter>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClCompile Include="exception\win32_exception.cpp">\r
@@ -46,6 +49,9 @@
     <ClCompile Include="env.cpp">\r
       <Filter>Source</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="diagnostics\graph.cpp">\r
+      <Filter>Source\diagnostics</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="exception\exceptions.h">\r
@@ -87,5 +93,8 @@
     <ClInclude Include="utility\assert.h">\r
       <Filter>Source\utility</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="diagnostics\graph.h">\r
+      <Filter>Source\diagnostics</Filter>\r
+    </ClInclude>\r
   </ItemGroup>\r
 </Project>
\ No newline at end of file
index cd5ef044cc31f7462a2ec5e79ffb2e552926eb90..75b4b409c57862649dca2a0e781df80ab7677f85 100644 (file)
@@ -109,7 +109,8 @@ public:
                \r
                return begin_invoke(std::forward<Func>(func)).get();\r
        }\r
-\r
+       \r
+       tbb::concurrent_bounded_queue<std::function<void()>>::size_type capacity() const { return execution_queue_.capacity();  }\r
        tbb::concurrent_bounded_queue<std::function<void()>>::size_type size() const { return execution_queue_.size();  }\r
        bool empty() const              { return execution_queue_.empty();      }\r
        bool is_running() const { return is_running_;                           }       \r
diff --git a/common/diagnostics/graph.cpp b/common/diagnostics/graph.cpp
new file mode 100644 (file)
index 0000000..a3c7cd4
--- /dev/null
@@ -0,0 +1,247 @@
+#include "../stdafx.h"\r
+\r
+#include "graph.h"\r
+\r
+#pragma warning (disable : 4244)\r
+\r
+#include "../concurrency/executor.h"\r
+#include "../utility/timer.h"\r
+\r
+#include <SFML/Graphics.hpp>\r
+\r
+#include <boost/foreach.hpp>\r
+#include <boost/circular_buffer.hpp>\r
+#include <boost/range/algorithm_ext/erase.hpp>\r
+\r
+#include <numeric>\r
+#include <map>\r
+#include <array>\r
+\r
+namespace caspar { namespace diagnostics {\r
+\r
+struct drawable\r
+{\r
+       virtual ~drawable(){}\r
+       virtual void draw(double dy, double y) = 0;\r
+};\r
+\r
+class context\r
+{      \r
+       timer timer_;\r
+       executor executor_;\r
+       sf::RenderWindow window_;\r
+       \r
+       std::list<std::weak_ptr<drawable>> drawables_;\r
+               \r
+       void tick()\r
+       {\r
+               sf::Event e;\r
+               while(window_.GetEvent(e)){}\r
+               window_.Clear();\r
+               render();\r
+               window_.Display();\r
+               timer_.tick(1.0/50.0);\r
+               executor_.begin_invoke([this]{tick();});\r
+       }\r
+\r
+       void render()\r
+       {\r
+               float dy = 1.0/static_cast<float>(std::max<int>(5, drawables_.size()));\r
+               float y = 1.0-dy;\r
+               for(auto it = drawables_.begin(); it != drawables_.end();)\r
+               {\r
+                       auto drawable = it->lock();\r
+                       if(drawable)\r
+                       {\r
+                               drawable->draw(dy, y);          \r
+                               y -= dy;// + 0.01;\r
+                               ++it;\r
+                       }\r
+                       else                    \r
+                               it = drawables_.erase(it);                      \r
+               }\r
+       }       \r
+       static context& get_instance()\r
+       {\r
+               static context impl;\r
+               return impl;\r
+       }\r
+\r
+       context()\r
+       {\r
+               executor_.start();\r
+               executor_.begin_invoke([this]\r
+               {\r
+                       window_.Create(sf::VideoMode(600, 1000), "CasparCG Diagnostics");\r
+                       window_.SetPosition(0, 0);\r
+                       window_.SetActive();\r
+                       glEnable(GL_BLEND);\r
+                       glEnable(GL_LINE_SMOOTH);\r
+                       glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);\r
+                       glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\r
+                       tick();\r
+               });\r
+       }\r
+\r
+public:        \r
+                               \r
+       template<typename Func>\r
+       static auto begin_invoke(Func&& func) -> boost::unique_future<decltype(func())> // noexcept\r
+       {       \r
+               return get_instance().executor_.begin_invoke(std::forward<Func>(func)); \r
+       }\r
+\r
+       static void register_drawable(const std::shared_ptr<drawable>& drawable)\r
+       {\r
+               begin_invoke([=]\r
+               {\r
+                       get_instance().drawables_.push_back(drawable);\r
+               });\r
+       }\r
+};\r
+\r
+class line\r
+{\r
+       boost::circular_buffer<float> line_data_;\r
+       std::vector<float> tick_data_;\r
+       std::array<float, 3> color_;\r
+public:\r
+       line(size_t res = 600)\r
+               : line_data_(res)\r
+       {\r
+               color(1.0f, 1.0f, 1.0f);\r
+       }\r
+       \r
+       void update(float value)\r
+       {\r
+               tick_data_.push_back(value);\r
+       }\r
+       \r
+       void color(float r, float g, float b)\r
+       {\r
+               color_[0] = r; color_[1] = g; color_[2] = b;\r
+       }\r
+       \r
+       void draw(double dy, double y)\r
+       {\r
+               float dx = 1.0f/static_cast<float>(line_data_.capacity());\r
+               float x = static_cast<float>(line_data_.capacity()-line_data_.size())*dx;\r
+\r
+               if(!tick_data_.empty())\r
+               {\r
+                       float sum = std::accumulate(tick_data_.begin(), tick_data_.end(), 0.0) + std::numeric_limits<float>::min();\r
+                       line_data_.push_back(static_cast<float>(sum)/static_cast<float>(tick_data_.size()));\r
+                       tick_data_.clear();\r
+               }\r
+               else if(!line_data_.empty())\r
+               {\r
+                       line_data_.push_back(line_data_.back());\r
+               }\r
+               \r
+               glBegin(GL_LINE_STRIP);\r
+               glColor4f(color_[0], color_[1], color_[2], 1.0f);                       \r
+               for(size_t n = 0; n < line_data_.size(); ++n)                           \r
+                       glVertex3f((x+n*dx)*2.0f-1.0f, (y + dy * std::max(0.05f, std::min(0.95f, line_data_[n]*0.8f + 0.1f))) * 2.0f - 1.0f, 0.0f);             \r
+               glEnd();\r
+       }\r
+};\r
+       \r
+class guide\r
+{\r
+       std::array<float, 3> color_;\r
+       float value_;\r
+public:\r
+       guide() : value_(0.0f)\r
+       {\r
+               color_[0] = color_[1] = color_[2] = 0.0f;\r
+       }\r
+\r
+       guide(float value, float r, float g, float b) : value_(value)\r
+       {\r
+               color_[0] = r; color_[1] = g; color_[2] = b;\r
+       }\r
+                       \r
+       void draw(double dy, double y)\r
+       {               \r
+               glEnable(GL_LINE_STIPPLE);\r
+               glLineStipple(3, 0xAAAA);\r
+               glBegin(GL_LINE_STRIP);\r
+               glColor4f(color_[0], color_[1], color_[2], 1.0f);                               \r
+                       glVertex3f(0.0f*2.0f-1.0f, (y + dy * (value_ * 0.8f + 0.1f)) * 2.0f - 1.0f, 0.0f);              \r
+                       glVertex3f(1.0f*2.0f-1.0f, (y + dy * (value_ * 0.8f + 0.1f)) * 2.0f - 1.0f, 0.0f);      \r
+               glEnd();\r
+               glDisable(GL_LINE_STIPPLE);\r
+       }\r
+};\r
+\r
+struct graph::implementation : public drawable\r
+{\r
+       std::map<std::string, diagnostics::line> lines_;\r
+       std::map<std::string, diagnostics::guide> guides_;\r
+\r
+       implementation(const std::string&)\r
+       {\r
+               guides_["max"] = diagnostics::guide(1.0f, 0.4f, 0.4f, 0.4f);\r
+               guides_["min"] = diagnostics::guide(0.0f, 0.4f, 0.4f, 0.4f);\r
+       }\r
+\r
+       void update(const std::string& name, float value)\r
+       {\r
+               context::begin_invoke([=]\r
+               {\r
+                       lines_[name].update(value);\r
+               });\r
+       }\r
+\r
+       void color(const std::string& name, float r, float g, float b)\r
+       {\r
+               context::begin_invoke([=]\r
+               {\r
+                       lines_[name].color(r, g, b);\r
+               });\r
+       }\r
+       \r
+       void line(const std::string& name, float value, float r, float g, float b)\r
+       {\r
+               context::begin_invoke([=]\r
+               {\r
+                       guides_[name] = diagnostics::guide(value, r, g, b);\r
+               });\r
+       }\r
+\r
+private:\r
+       void draw(double dy, double y)\r
+       {\r
+               glBegin(GL_QUADS);\r
+                       glColor4f(1.0f, 1.0f, 1.0f, 0.2f);      \r
+                       glVertex2f(0.0f*2.0f-1.0f, (y + dy*0.99 )*2.0f-1.0f);\r
+                       glVertex2f(1.0f*2.0f-1.0f, (y + dy*0.99 )*2.0f-1.0f);\r
+                       glVertex2f(1.0f*2.0f-1.0f, (y + dy*0.01)*2.0f-1.0f);    \r
+                       glVertex2f(0.0f*2.0f-1.0f, (y + dy*0.01)*2.0f-1.0f);    \r
+               glEnd();\r
+               \r
+               for(auto it = guides_.begin(); it != guides_.end(); ++it)\r
+                       it->second.draw(dy, y);\r
+\r
+               for(auto it = lines_.begin(); it != lines_.end(); ++it)\r
+                       it->second.draw(dy, y);\r
+       }\r
+\r
+       implementation(implementation&);\r
+       implementation& operator=(implementation&);\r
+};\r
+       \r
+graph::graph(const std::string& name) : impl_(new implementation(name))\r
+{\r
+       context::register_drawable(impl_);\r
+}\r
+void graph::update(const std::string& name, float value){impl_->update(name, value);}\r
+void graph::color(const std::string& name, float r, float g, float b){impl_->color(name, r, g, b);}\r
+void graph::line(const std::string& name, float value, float r, float g, float b){impl_->line(name, value, r, g, b);}\r
+\r
+safe_ptr<graph> create_graph(const std::string& name)\r
+{\r
+       return safe_ptr<graph>(new graph(name));\r
+}\r
+\r
+}}
\ No newline at end of file
diff --git a/common/diagnostics/graph.h b/common/diagnostics/graph.h
new file mode 100644 (file)
index 0000000..dfaa078
--- /dev/null
@@ -0,0 +1,24 @@
+#pragma once\r
+\r
+#include "../memory/safe_ptr.h"\r
+\r
+#include <string>\r
+\r
+namespace caspar { namespace diagnostics {\r
+       \r
+class graph\r
+{\r
+       friend safe_ptr<graph> create_graph(const std::string& name);\r
+       graph(const std::string& name);\r
+public:\r
+       void update(const std::string& name, float value);\r
+       void color(const std::string& name, float r, float g, float b);\r
+       void line(const std::string& name, float value, float r, float g, float b);\r
+private:\r
+       struct implementation;\r
+       std::shared_ptr<implementation> impl_;\r
+};\r
+\r
+safe_ptr<graph> create_graph(const std::string& name);\r
+       \r
+}}
\ No newline at end of file
index 2c3bf51b232ececa5f928c9410bb35258a2a1009..d3a2380732762b57e1552dda3e88599fac778d9d 100644 (file)
@@ -30,7 +30,6 @@ void win32_exception::install_handler()
 {\r
 #ifndef _DEBUG\r
        _set_se_translator(win32_exception::Handler);\r
-       CASPAR_LOG(trace) << "Installed Win32 Structured Exception Handler.";\r
 #endif\r
 }\r
 \r
index 07fe742da40daf146828bbd63ba59a5064629076..0ac0278c16a1a53cc83311d2f8bda7024259a7cb 100644 (file)
@@ -102,13 +102,13 @@ void add_file_sink(const std::wstring& folder)
 \r
                file_sink->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= info);\r
 \r
-               std::wcout << L"Logging [info] or higher severity to " << folder << std::endl;\r
+               std::wcout << L"Logging [info] or higher severity to " << folder << std::endl << std::endl;\r
 \r
                boost::log::wcore::get()->add_sink(file_sink);\r
        }\r
        catch(...)\r
        {\r
-               std::wcerr << L"Failed to Setup File Logging Sink" << std::endl;\r
+               std::wcerr << L"Failed to Setup File Logging Sink" << std::endl << std::endl;\r
        }\r
 }\r
 \r
index b683d7dffbeecd235278af5b6be3840567970a15..6d5a15dcaa55acbf6a4248ae52ad8ba8d356835e 100644 (file)
@@ -13,6 +13,19 @@ public:
                QueryPerformanceCounter(&time_);\r
        }\r
 \r
+       double elapsed()\r
+       {\r
+               LARGE_INTEGER t;\r
+               QueryPerformanceCounter(&t);\r
+               int ticks_passed = static_cast<int>(static_cast<__int64>(t.QuadPart) - static_cast<__int64>(time_.QuadPart));\r
+               return static_cast<double>(ticks_passed)/static_cast<double>(freq_.QuadPart);\r
+       }\r
+       \r
+       void reset()\r
+       {\r
+               QueryPerformanceCounter(&time_);\r
+       }\r
+\r
        // Author: Ryan M. Geiss\r
        // http://www.geisswerks.com/ryan/FAQS/timing.html\r
        void tick(double interval)\r
index bc589612fc5c286d4786b58f5448ec99bc3cdbd1..89f44d7050c1072cdf881dfa26064fd2030b32b8 100644 (file)
@@ -27,6 +27,8 @@
 #include <mixer/frame/read_frame.h>\r
 \r
 #include <common/concurrency/executor.h>\r
+#include <common/diagnostics/graph.h>\r
+#include <common/utility/timer.h>\r
 \r
 #include <tbb/concurrent_queue.h>\r
 \r
@@ -80,6 +82,9 @@ void blue_initialize()
                \r
 struct bluefish_consumer::implementation : boost::noncopyable\r
 {\r
+       safe_ptr<diagnostics::graph> graph_;\r
+       timer perf_timer_;\r
+\r
        boost::unique_future<void> active_;\r
                        \r
        std::shared_ptr<CBlueVelvet4> blue_;\r
@@ -100,14 +105,18 @@ struct bluefish_consumer::implementation : boost::noncopyable
        executor executor_;\r
 public:\r
        implementation::implementation(unsigned int device_index, bool embed_audio) \r
-               : device_index_(device_index)           \r
+               : graph_(diagnostics::create_graph("bluefish"))\r
+               , device_index_(device_index)           \r
                , mem_fmt_(MEM_FMT_ARGB_PC)\r
                , upd_fmt_(UPD_FMT_FRAME)\r
                , vid_fmt_(VID_FMT_INVALID) \r
                , res_fmt_(RES_FMT_NORMAL) \r
                , engine_mode_(VIDEO_ENGINE_FRAMESTORE)         \r
                , embed_audio_(embed_audio)\r
-       {}\r
+       {\r
+               graph_->line("frame_time_target", 0.5, 0.5f, 0.0f, 0.0f);\r
+               graph_->color("frame_time", 1.0f, 0.0f, 0.0f);  \r
+       }\r
 \r
        ~implementation()\r
        {\r
@@ -259,6 +268,8 @@ public:
                {\r
                        try\r
                        {\r
+                               perf_timer_.reset();\r
+\r
                                std::copy_n(frame->image_data().begin(), frame->image_data().size(), reserved_frames_.front()->image_data());\r
 \r
                                unsigned long n_field = 0;\r
@@ -295,6 +306,7 @@ public:
                                }\r
 \r
                                std::rotate(reserved_frames_.begin(), reserved_frames_.begin() + 1, reserved_frames_.end());\r
+                               graph_->update("frame_time", static_cast<float>((perf_timer_.elapsed()-format_desc_.interval)/format_desc_.interval*0.5));\r
                        }\r
                        catch(...)\r
                        {\r
index 62592e0e78b7a5e615f7ff4fbfcec31421d411d9..351df16494bc60715274c21b5aa24956c0fc3d20 100644 (file)
@@ -28,6 +28,8 @@
 #include <common/gl/gl_check.h>\r
 #include <common/concurrency/executor.h>\r
 #include <common/memory/safe_ptr.h>\r
+#include <common/diagnostics/graph.h>\r
+#include <common/utility/timer.h>\r
 \r
 #include <boost/thread.hpp>\r
 \r
@@ -42,8 +44,11 @@ namespace caspar { namespace core {
 \r
 struct ogl_consumer::implementation : boost::noncopyable\r
 {                      \r
+       safe_ptr<diagnostics::graph> graph_;\r
+       timer perf_timer_;\r
+\r
        boost::unique_future<void> active_;\r
-       \r
+\r
        float wratio_;\r
        float hratio_;\r
        \r
@@ -74,7 +79,11 @@ public:
                , screen_x_(0)\r
                , screen_y_(0)\r
                , screen_index_(screen_index)\r
+               , graph_(diagnostics::create_graph("ogl_consumer"))\r
        {               \r
+               graph_->line("frame_time_target", 0.5, 0.5f, 0.0f, 0.0f);\r
+               graph_->color("frame_time", 1.0f, 0.0f, 0.0f);\r
+\r
                CASPAR_LOG(info) << "Sucessfully started ogl_consumer";\r
        }\r
 \r
@@ -243,10 +252,12 @@ public:
                active_.get();\r
                active_ = executor_.begin_invoke([=]\r
                {\r
+                       perf_timer_.reset();\r
                        sf::Event e;\r
                        while(window_.GetEvent(e)){}\r
                        render(frame);\r
                        window_.Display();\r
+                       graph_->update("frame_time", static_cast<float>(perf_timer_.elapsed()/format_desc_.interval*0.5));\r
                });\r
        }\r
 \r
index 600dcdf76a69708c7edadbcb484a95b863336c46..7f7c1b41ca99ebdfd52ea4595e22faec3611597e 100644 (file)
@@ -5,6 +5,10 @@
       <Configuration>Debug</Configuration>\r
       <Platform>Win32</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Develop|Win32">\r
+      <Configuration>Develop</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="Release|Win32">\r
       <Configuration>Release</Configuration>\r
       <Platform>Win32</Platform>\r
     <CharacterSet>Unicode</CharacterSet>\r
     <WholeProgramOptimization>false</WholeProgramOptimization>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+    <WholeProgramOptimization>false</WholeProgramOptimization>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\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)'=='Develop|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
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">debug\</IntDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">release\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">release\</IntDir>\r
     <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\;..\common;..\..\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\;$(IncludePath)</IncludePath>\r
     <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\;..\common;..\..\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\;$(IncludePath)</IncludePath>\r
+    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">..\;..\common;..\..\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\;$(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\;$(LibraryPath)</LibraryPath>\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\;$(LibraryPath)</LibraryPath>\r
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Develop|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\;$(LibraryPath)</LibraryPath>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)debug\</OutDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)release\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">$(ProjectDir)release\</OutDir>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">$(ProjectName)</TargetName>\r
   </PropertyGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
     <PreBuildEvent>\r
       </Command>\r
     </PostBuildEvent>\r
   </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Develop|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>Neither</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>Level4</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r
+      <PreprocessorDefinitions>NDEBUG;_VC80_UPGRADE=0x0710;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <WholeProgramOptimization>false</WholeProgramOptimization>\r
+      <TreatWarningAsError>true</TreatWarningAsError>\r
+      <OmitFramePointers>true</OmitFramePointers>\r
+    </ClCompile>\r
+    <PreLinkEvent>\r
+      <Command>\r
+      </Command>\r
+    </PreLinkEvent>\r
+    <Link>\r
+      <AdditionalDependencies>BlueHancUtils.lib;sfml-audio.lib;sfml-window.lib;sfml-graphics.lib;OpenGL32.lib;FreeImage.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>Console</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
     <ClInclude Include="channel.h" />\r
     <ClInclude Include="consumer\bluefish\memory.h" />\r
     <ClCompile Include="consumer\bluefish\bluefish_consumer.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)'=='Develop|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="consumer\decklink\decklink_consumer.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)'=='Develop|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="consumer\ffmpeg\ffmpeg_consumer.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)'=='Develop|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="consumer\frame_consumer_device.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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="consumer\decklink\DeckLinkAPI_i.c">\r
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>\r
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">NotUsing</PrecompiledHeader>\r
     </ClCompile>\r
     <ClCompile Include="consumer\oal\oal_consumer.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)'=='Develop|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="consumer\ogl\ogl_consumer.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)'=='Develop|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="producer\color\color_producer.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)'=='Develop|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="producer\decklink\decklink_producer.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)'=='Develop|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="producer\ffmpeg\audio\audio_decoder.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)'=='Develop|Win32'">../../../stdafx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="producer\ffmpeg\ffmpeg_producer.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)'=='Develop|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="producer\ffmpeg\input.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)'=='Develop|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="producer\ffmpeg\video\video_decoder.cpp">\r
       <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../../stdafx.h</PrecompiledHeaderFile>\r
+      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">../../../stdafx.h</PrecompiledHeaderFile>\r
       <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../../stdafx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="producer\flash\cg_producer.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)'=='Develop|Win32'">../../stdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="producer\flash\Flash9e_i.c">\r
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">NotUsing</PrecompiledHeader>\r
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>\r
     </ClCompile>\r
     <ClCompile Include="producer\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)'=='Develop|Win32'">../../stdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="producer\flash\flash_producer.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)'=='Develop|Win32'">../../stdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="producer\frame_producer_device.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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="producer\image\image_loader.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)'=='Develop|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="producer\image\image_producer.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)'=='Develop|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="producer\image\image_scroll_producer.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)'=='Develop|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">true</ExcludedFromBuild>\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClCompile Include="producer\layer.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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
       <PreprocessToFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</PreprocessToFile>\r
     </ClCompile>\r
     <ClCompile Include="producer\silverlight\silverlight_producer.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)'=='Develop|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="producer\silverlight\XcpControlHost.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)'=='Develop|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>\r
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">NotUsing</PrecompiledHeader>\r
     </ClCompile>\r
     <ClCompile Include="producer\silverlight\xcpctrl_i.c">\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)'=='Develop|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>\r
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">NotUsing</PrecompiledHeader>\r
     </ClCompile>\r
     <ClCompile Include="producer\silverlight\xcpctrl_p.c">\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">true</ExcludedFromBuild>\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>\r
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">NotUsing</PrecompiledHeader>\r
     </ClCompile>\r
     <ClCompile Include="producer\silverlight\XcpPropertyBag.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)'=='Develop|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>\r
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">NotUsing</PrecompiledHeader>\r
     </ClCompile>\r
     <ClCompile Include="producer\transition\transition_producer.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)'=='Develop|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\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)'=='Develop|Win32'">Create</PrecompiledHeader>\r
     </ClCompile>\r
     <ClCompile Include="video_format.cpp" />\r
   </ItemGroup>\r
   <ItemGroup>\r
     <Midl Include="consumer\decklink\DeckLinkAPI.idl">\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">true</ExcludedFromBuild>\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
     </Midl>\r
     <Midl Include="consumer\decklink\DeckLinkAPI_v7_1.idl">\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">true</ExcludedFromBuild>\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
     </Midl>\r
     <Midl Include="consumer\decklink\DeckLinkAPI_v7_3.idl">\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">true</ExcludedFromBuild>\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
     </Midl>\r
     <Midl Include="consumer\decklink\DeckLinkAPI_v7_6.idl">\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">true</ExcludedFromBuild>\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
     </Midl>\r
     <Midl Include="producer\flash\Flash9e.IDL">\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">true</ExcludedFromBuild>\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
     </Midl>\r
     <Midl Include="producer\silverlight\xcpctrl.idl">\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">true</ExcludedFromBuild>\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
     </Midl>\r
   </ItemGroup>\r
index 0625b3e813aecb317a6ce1cf85c03f338403eeb5..a1359f25a138a28aed0fa307be77c9d3190712ce 100644 (file)
@@ -7,6 +7,8 @@
 #include "video/video_decoder.h"\r
 \r
 #include <core/video_format.h>\r
+#include <common/utility/timer.h>\r
+#include <common/diagnostics/graph.h>\r
 #include <mixer/frame/draw_frame.h>\r
 #include <mixer/audio/audio_transform.h>\r
 \r
@@ -20,6 +22,9 @@ namespace caspar { namespace core { namespace ffmpeg{
        \r
 struct ffmpeg_producer : public frame_producer\r
 {\r
+       safe_ptr<diagnostics::graph>            graph_;\r
+       timer                                                           perf_timer_;\r
+\r
        input                                                           input_;                 \r
        std::unique_ptr<audio_decoder>          audio_decoder_;\r
        std::unique_ptr<video_decoder>          video_decoder_;\r
@@ -36,9 +41,14 @@ struct ffmpeg_producer : public frame_producer
 \r
 public:\r
        explicit ffmpeg_producer(const std::wstring& filename, bool loop) \r
-               : filename_(filename)\r
+               : graph_(diagnostics::create_graph("ffmpeg"))\r
+               , filename_(filename)\r
                , last_frame_(draw_frame(draw_frame::empty()))\r
-               , input_(filename, loop){}\r
+               , input_(graph_, filename, loop)\r
+       {\r
+               graph_->line("frame_time_target", 0.5, 0.5f, 0.0f, 0.0f);\r
+               graph_->color("frame_time",  1.0f, 0.0f, 0.0f);\r
+       }\r
 \r
        ~ffmpeg_producer()\r
        {\r
@@ -54,6 +64,8 @@ public:
                \r
        virtual safe_ptr<draw_frame> receive()\r
        {\r
+               perf_timer_.reset();\r
+\r
                while(ouput_channel_.empty() && !input_.is_eof())\r
                {       \r
                        aligned_buffer video_packet;\r
@@ -128,6 +140,8 @@ public:
                        if(ouput_channel_.empty() && video_packet.empty() && audio_packet.empty())                      \r
                                return last_frame_;                     \r
                }\r
+               \r
+               graph_->update("frame_time", static_cast<float>(perf_timer_.elapsed()/frame_factory_->get_video_format_desc().interval*0.5));\r
 \r
                auto result = last_frame_;\r
                if(!ouput_channel_.empty())\r
index 8193d72eb707c9eb8d7de164905ec91827691b6d..48e4cd7f98ad5edf55e15c073091cb72ab16f37e 100644 (file)
@@ -5,6 +5,7 @@
 #include "../../video_format.h"\r
 \r
 #include <common/concurrency/executor.h>\r
+#include <common/diagnostics/graph.h>\r
 \r
 #include <tbb/concurrent_queue.h>\r
 #include <tbb/queuing_mutex.h>\r
@@ -32,6 +33,8 @@ struct input::implementation : boost::noncopyable
 {              \r
        static const size_t BUFFER_SIZE = 2 << 24;\r
 \r
+       safe_ptr<diagnostics::graph> graph_;\r
+\r
        std::shared_ptr<AVFormatContext> format_context_;       // Destroy this last\r
 \r
        std::shared_ptr<AVCodecContext> video_codec_context_;\r
@@ -50,12 +53,15 @@ struct input::implementation : boost::noncopyable
        \r
        executor executor_;\r
 public:\r
-       explicit implementation(const std::wstring& filename, bool loop) \r
-               : loop_(loop)\r
+       explicit implementation(const safe_ptr<diagnostics::graph>& graph, const std::wstring& filename, bool loop) \r
+               : graph_(graph)\r
+               , loop_(loop)\r
                , video_s_index_(-1)\r
                , audio_s_index_(-1)\r
                , filename_(filename)\r
-       {                                               \r
+       {                       \r
+               graph_->color("input_buffer_size", 0.0f, 1.0f, 1.0f);           \r
+\r
                int errn;\r
                AVFormatContext* weak_format_context_;\r
                if((errn = -av_open_input_file(&weak_format_context_, narrow(filename).c_str(), nullptr, 0, nullptr)) > 0)\r
@@ -141,6 +147,7 @@ public:
                        }\r
                        else if(!loop_ || !seek_frame(0, AVSEEK_FLAG_BACKWARD)) // TODO: av_seek_frame does not work for all formats\r
                                executor_.stop();\r
+                       graph_->update("input_buffer_size", static_cast<float>(buffer_size_)/static_cast<float>(BUFFER_SIZE));\r
                }\r
        }\r
        \r
@@ -199,7 +206,7 @@ public:
        }\r
 };\r
 \r
-input::input(const std::wstring& filename, bool loop) : impl_(new implementation(filename, loop)){}\r
+input::input(const safe_ptr<diagnostics::graph>& graph, const std::wstring& filename, bool loop) : impl_(new implementation(graph, filename, loop)){}\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
index 3d71404571f659b5be8e1d774c49c4200170ebdf..78e51029a694c2ef2a39b0379e9fb6b2792cc5ef 100644 (file)
@@ -1,5 +1,7 @@
 #pragma once\r
 \r
+#include <common/diagnostics/graph.h>\r
+\r
 #include <tbb/cache_aligned_allocator.h>\r
 \r
 #include <memory>\r
@@ -14,7 +16,7 @@ typedef std::vector<unsigned char, tbb::cache_aligned_allocator<unsigned char>>
 class input : boost::noncopyable\r
 {\r
 public:\r
-       explicit input(const std::wstring& filename, bool loop);\r
+       explicit input(const safe_ptr<diagnostics::graph>& graph, const std::wstring& filename, bool loop);\r
        const std::shared_ptr<AVCodecContext>& get_video_codec_context() const;\r
        const std::shared_ptr<AVCodecContext>& get_audio_codec_context() const;\r
 \r
index d1a9915ba46253e5f14a7326ab05d24f01ab3f56..325b2d24084e9b646e563cf5aaf589b8d2e5ccac 100644 (file)
@@ -35,6 +35,7 @@
 \r
 #include <common/concurrency/executor.h>\r
 #include <common/utility/timer.h>\r
+#include <common/diagnostics/graph.h>\r
 \r
 #include <boost/filesystem.hpp>\r
 \r
@@ -42,6 +43,9 @@ namespace caspar { namespace core { namespace flash {
        \r
 class flash_renderer\r
 {\r
+       safe_ptr<diagnostics::graph> graph_;\r
+       timer diag_timer_;\r
+\r
        struct co_init\r
        {\r
                co_init(){CoInitialize(nullptr);}\r
@@ -59,10 +63,12 @@ class flash_renderer
 \r
        CComObject<caspar::flash::FlashAxContainer>* ax_;\r
        safe_ptr<draw_frame> head_;\r
-\r
+       \r
+       timer timer_;\r
 public:\r
-       flash_renderer(const std::shared_ptr<frame_factory>& frame_factory, const std::wstring& filename) \r
-               : filename_(filename)\r
+       flash_renderer(const safe_ptr<diagnostics::graph>& graph, const std::shared_ptr<frame_factory>& frame_factory, const std::wstring& filename) \r
+               : graph_(graph)\r
+               , filename_(filename)\r
                , format_desc_(frame_factory->get_video_format_desc())\r
                , frame_factory_(frame_factory)\r
                , bmp_data_(nullptr)\r
@@ -70,6 +76,8 @@ public:
                , ax_(nullptr)\r
                , head_(draw_frame::empty())\r
        {\r
+               graph_->line("frame_time_target", 0.5f, 0.5f, 0.0f, 0.0f);\r
+               graph_->color("frame_time", 1.0f, 0.0f, 0.0f);          \r
                CASPAR_LOG(info) << print() << L" Started";\r
                \r
                if(FAILED(CComObject<caspar::flash::FlashAxContainer>::CreateInstance(&ax_)))\r
@@ -122,27 +130,27 @@ public:
                        CASPAR_LOG(warning) << "Flash Function Call Failed. Param: " << param;\r
        }\r
        \r
-       safe_ptr<draw_frame> render_frame()\r
+       safe_ptr<draw_frame> render_frame(bool has_underflow)\r
        {\r
                if(ax_->IsEmpty())\r
                        return draw_frame::empty();\r
 \r
-               auto frame = render_simple_frame();\r
+               auto frame = render_simple_frame(has_underflow);\r
                if(ax_->GetFPS()/2.0 - format_desc_.fps >= 0.0)\r
-                       frame = draw_frame::interlace(frame, render_simple_frame(), format_desc_.mode);\r
+                       frame = draw_frame::interlace(frame, render_simple_frame(has_underflow), format_desc_.mode);\r
                return frame;\r
        }\r
                \r
-       timer timer_;\r
        std::wstring print() const{ return L"flash[" + boost::filesystem::wpath(filename_).filename() + L"] Render thread"; }\r
        std::string bprint() const{ return narrow(print()); }\r
 \r
 private:\r
 \r
-       safe_ptr<draw_frame> render_simple_frame()\r
+       safe_ptr<draw_frame> render_simple_frame(bool has_underflow)\r
        {\r
-               timer_.tick(1.0/ax_->GetFPS()); // Tick doesnt work on nested timelines, force an actual sync\r
+               timer_.tick(1.0/ax_->GetFPS()*(has_underflow ? 0.95 : 1.0)); // Tick doesnt work on nested timelines, force an actual sync\r
 \r
+               diag_timer_.reset();\r
                ax_->Tick();\r
 \r
                if(ax_->InvalidRect())\r
@@ -154,13 +162,16 @@ private:
                        std::copy_n(bmp_data_, format_desc_.size, frame->image_data().begin());\r
                        head_ = frame;\r
                }               \r
-\r
+               \r
+               graph_->update("frame_time", static_cast<float>(diag_timer_.elapsed()/(1.0/ax_->GetFPS())));\r
                return head_;\r
        }\r
 };\r
 \r
 struct flash_producer::implementation\r
 {      \r
+       safe_ptr<diagnostics::graph> graph_;\r
+\r
        safe_ptr<draw_frame> tail_;\r
        tbb::concurrent_bounded_queue<safe_ptr<draw_frame>> frame_buffer_;\r
 \r
@@ -173,11 +184,15 @@ struct flash_producer::implementation
        executor executor_;\r
 public:\r
        implementation(const std::wstring& filename) \r
-               : filename_(filename)\r
+               : graph_(diagnostics::create_graph("flash"))\r
+               , filename_(filename)\r
                , tail_(draw_frame::empty())\r
        {       \r
                if(!boost::filesystem::exists(filename))\r
-                       BOOST_THROW_EXCEPTION(file_not_found() << boost::errinfo_file_name(narrow(filename)));          \r
+                       BOOST_THROW_EXCEPTION(file_not_found() << boost::errinfo_file_name(narrow(filename)));  \r
+\r
+               graph_->line("buffer_size_target", 0.5, 0.0f, 0.5f, 0.0f);      \r
+               graph_->color("buffer_size", 0.0f, 1.0f, 0.0f); \r
        }\r
 \r
        ~implementation()\r
@@ -198,6 +213,7 @@ public:
 \r
        virtual safe_ptr<draw_frame> receive()\r
        {               \r
+               graph_->update("buffer_size", static_cast<float>(frame_buffer_.size())/static_cast<float>(frame_buffer_.capacity()));\r
                if(!frame_buffer_.try_pop(tail_))\r
                        CASPAR_LOG(trace) << print() << " underflow";\r
                else\r
@@ -210,7 +226,7 @@ public:
                                try\r
                                {\r
                                        auto frame = draw_frame::empty();\r
-                                       do{frame = renderer_->render_frame();}\r
+                                       do{frame = renderer_->render_frame(frame_buffer_.size() < frame_buffer_.capacity()-2);}\r
                                        while(frame_buffer_.try_push(frame) && frame == draw_frame::empty());\r
                                }\r
                                catch(...)\r
@@ -230,7 +246,7 @@ public:
                {\r
                        if(!renderer_)\r
                        {\r
-                               renderer_.reset(new flash_renderer(frame_factory_, filename_));\r
+                               renderer_.reset(new flash_renderer(graph_, frame_factory_, filename_));\r
                                while(frame_buffer_.try_push(draw_frame::empty())){}\r
                        }\r
 \r
index 07eaf20fc935afbfc52bbd2c0979eae68e1c4a39..259996e0eede9d73548558cf63b7cc1187b4f252 100644 (file)
@@ -11,6 +11,8 @@
 \r
 #include <common/exception/exceptions.h>\r
 #include <common/concurrency/executor.h>\r
+#include <common/diagnostics/graph.h>\r
+#include <common/utility/timer.h>\r
 #include <common/gl/gl_check.h>\r
 \r
 #include <core/video_format.h>\r
@@ -26,6 +28,9 @@ namespace caspar { namespace core {
        \r
 struct frame_mixer_device::implementation : boost::noncopyable\r
 {              \r
+       safe_ptr<diagnostics::graph> graph_;\r
+       timer perf_timer_;\r
+\r
        const video_format_desc format_desc_;\r
 \r
        audio_mixer     audio_mixer_;\r
@@ -39,10 +44,15 @@ struct frame_mixer_device::implementation : boost::noncopyable
        executor executor_;\r
 public:\r
        implementation(const video_format_desc& format_desc, const output_func& output) \r
-               : format_desc_(format_desc)\r
+               : graph_(diagnostics::create_graph("mixer"))\r
+               , format_desc_(format_desc)\r
                , image_mixer_(format_desc)\r
                , output_(output)\r
        {\r
+               graph_->line("frame_time_target", 0.5f, 0.5f, 0.0f, 0.0f);\r
+               graph_->line("buffer_size_target", 1.0f, 0.5f, 0.0f, 0.0f);     \r
+               graph_->color("frame_time", 1.0f, 0.0f, 0.0f);\r
+               graph_->color("buffer_size", 0.0f, 1.0f, 0.0f);         \r
                executor_.start();\r
                executor_.set_capacity(2);\r
        }\r
@@ -56,6 +66,7 @@ public:
        {                       \r
                executor_.begin_invoke([=]\r
                {\r
+                       perf_timer_.reset();\r
                        auto image = image_mixer_.begin_pass();\r
                        BOOST_FOREACH(auto& frame, frames)\r
                        {\r
@@ -73,9 +84,11 @@ public:
                                audio_mixer_.end();\r
                        }\r
                        audio_mixer_.end_pass();\r
+                       graph_->update("frame_time", static_cast<float>(perf_timer_.elapsed()/format_desc_.interval*0.5));\r
 \r
                        output_(make_safe<const read_frame>(std::move(image.get()), std::move(audio)));\r
                });\r
+               graph_->update("buffer_size", static_cast<float>(executor_.size())/static_cast<float>(executor_.capacity()));\r
        }\r
                \r
        safe_ptr<write_frame> create_frame(const pixel_format_desc& desc)\r
index 7b7fd6fdc2d2a0eb41c8ebaae7ffaab211c05af2..700583e7ffe209232b50bd8ad27e98fd9501296d 100644 (file)
@@ -30,7 +30,7 @@ public:
                GL(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE));\r
                GL(glTexImage2D(GL_TEXTURE_2D, 0, INTERNAL_FORMAT[stride_], width_, height_, 0, FORMAT[stride_], GL_UNSIGNED_BYTE, NULL));\r
                GL(glBindTexture(GL_TEXTURE_2D, 0));\r
-               CASPAR_LOG(trace) << "[device_buffer] allocated size:" << width*height*stride;  \r
+               //CASPAR_LOG(trace) << "[device_buffer] allocated size:" << width*height*stride;        \r
        }       \r
 \r
        ~implementation()\r
index 414bf5cef995a4ad0573bf89cbc3e4f6d648c7b1..d4120abd34c02d1213ebd68167117314ffe710a4 100644 (file)
@@ -32,7 +32,7 @@ public:
                if(!pbo_)\r
                        BOOST_THROW_EXCEPTION(caspar_exception() << msg_info("Failed to allocate buffer."));\r
 \r
-               CASPAR_LOG(trace) << "[host_buffer] allocated size:" << size_ << " usage: " << (usage == write_only ? "write_only" : "read_only");\r
+               //CASPAR_LOG(trace) << "[host_buffer] allocated size:" << size_ << " usage: " << (usage == write_only ? "write_only" : "read_only");\r
        }       \r
 \r
        ~implementation()\r
index 266e50044358ff25d978e14c10d9f318d6003627..5b0030e0af7c2103c044928431e63a268946c5d3 100644 (file)
@@ -5,6 +5,10 @@
       <Configuration>Debug</Configuration>\r
       <Platform>Win32</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Develop|Win32">\r
+      <Configuration>Develop</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="Release|Win32">\r
       <Configuration>Release</Configuration>\r
       <Platform>Win32</Platform>\r
     <ClCompile Include="audio\audio_mixer.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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="audio\audio_transform.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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="frame\draw_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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="frame\read_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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="frame\write_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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="frame_mixer_device.cpp" />\r
     <ClCompile Include="gpu\device_buffer.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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="gpu\host_buffer.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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="gpu\ogl_device.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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="image\image_kernel.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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="image\image_mixer.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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="image\image_transform.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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="StdAfx.cpp">\r
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">Create</PrecompiledHeader>\r
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>\r
     </ClCompile>\r
   </ItemGroup>\r
     <WholeProgramOptimization>true</WholeProgramOptimization>\r
     <CharacterSet>Unicode</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
   </ImportGroup>\r
   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <PropertyGroup Label="UserMacros" />\r
   <PropertyGroup>\r
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">debug\</IntDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">release\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">release\</IntDir>\r
     <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\;..\common;..\..\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\;$(IncludePath)</IncludePath>\r
     <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\;..\common;..\..\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\;$(IncludePath)</IncludePath>\r
+    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">..\;..\common;..\..\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\;$(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\;$(LibraryPath)</LibraryPath>\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\;$(LibraryPath)</LibraryPath>\r
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Develop|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\;$(LibraryPath)</LibraryPath>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)debug\</OutDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)release\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">$(ProjectDir)release\</OutDir>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">$(ProjectName)</TargetName>\r
   </PropertyGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
     <ClCompile>\r
       <OptimizeReferences>true</OptimizeReferences>\r
     </Link>\r
   </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>Use</PrecompiledHeader>\r
+      <Optimization>Disabled</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Windows</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
   <ImportGroup Label="ExtensionTargets">\r
   </ImportGroup>\r
index 9c54b68a9f05c7039c6160ffad85ae6fba569a8e..0fc1deb9bd16c8904867b6ee574f8f640f193567 100644 (file)
@@ -5,6 +5,10 @@
       <Configuration>Debug</Configuration>\r
       <Platform>Win32</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Develop|Win32">\r
+      <Configuration>Develop</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="Release|Win32">\r
       <Configuration>Release</Configuration>\r
       <Platform>Win32</Platform>\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)'=='Develop|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)'=='Develop|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)'=='Develop|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)'=='Develop|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)'=='Develop|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)'=='Develop|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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="media.cpp" />\r
     <ClCompile Include="StdAfx.cpp">\r
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">Create</PrecompiledHeader>\r
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>\r
     </ClCompile>\r
     <ClCompile Include="util\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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="util\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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
     <ClCompile Include="util\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)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
   </ItemGroup>\r
   <PropertyGroup Label="Globals">\r
     <WholeProgramOptimization>true</WholeProgramOptimization>\r
     <CharacterSet>Unicode</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
   </ImportGroup>\r
   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
     <IncludePath>../;../../../dependencies/tbb30_20100406oss/include;..\..\..\\dependencies\boost_1_44_0;$(IncludePath)</IncludePath>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
     <IncludePath>../;../../../dependencies/tbb30_20100406oss/include;..\..\..\\dependencies\boost_1_44_0;$(IncludePath)</IncludePath>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">\r
+    <IncludePath>../;../../../dependencies/tbb30_20100406oss/include;..\..\..\\dependencies\boost_1_44_0;$(IncludePath)</IncludePath>\r
+  </PropertyGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
     <ClCompile>\r
       <PrecompiledHeader>Use</PrecompiledHeader>\r
       <OptimizeReferences>true</OptimizeReferences>\r
     </Link>\r
   </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>Use</PrecompiledHeader>\r
+      <Optimization>Disabled</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Windows</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
   <ImportGroup Label="ExtensionTargets">\r
   </ImportGroup>\r
index ac76c6354690c4ddb268ca6bd35a0d01f680bb1e..41a349dfd2c986e08a890da857a264ae200c7faf 100644 (file)
@@ -9,7 +9,7 @@
   </paths>\r
   <channels>\r
     <channel>\r
-      <videomode>1080i5000</videomode>\r
+      <videomode>PAL</videomode>\r
       <consumers>\r
         <ogl>\r
           <device>1</device>\r
@@ -17,6 +17,9 @@
           <windowed>true</windowed>\r
         </ogl>\r
         <audio/>\r
+        <bluefish>\r
+          <device>1</device>\r
+        </bluefish>\r
         <!--decklink>\r
           <device>1</device>\r
           <embedded-audio>true</embedded-audio>\r
index 613449ca97878c37aecae9f15134a8e8b7e02c6d..7a305b291dbb54bd15ddbe176fc76742add4edb3 100644 (file)
@@ -67,12 +67,12 @@ public:
        win32_handler_tbb_installer()   {observe(true);}\r
        void on_scheduler_entry(bool is_worker) \r
        {\r
-               CASPAR_LOG(debug) << L"Started TBB Worker Thread.";\r
+               //CASPAR_LOG(debug) << L"Started TBB Worker Thread.";\r
                win32_exception::install_handler();\r
        }\r
        void on_scheduler_exit()\r
        {\r
-               CASPAR_LOG(debug) << L"Stopped TBB Worker Thread.";\r
+               //CASPAR_LOG(debug) << L"Stopped TBB Worker Thread.";\r
        }\r
 };\r
  \r
@@ -90,8 +90,8 @@ int main(int argc, wchar_t* argv[])
        str << "CasparCG " << env::version() << " " << env::version_tag();\r
        SetConsoleTitle(str.str().c_str());\r
 \r
-       CASPAR_LOG(info) << L"Starting CasparCG Video Playout Server Ver: " << env::version() << env::version_tag() << std::endl;\r
-       CASPAR_LOG(info) << L"Copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\n\n" << std::endl;\r
+       std::wcout << L"Copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\n" << std::endl;\r
+       std::wcout << L"Starting CasparCG Video Playout Server Ver: " << env::version() << env::version_tag() << std::endl;\r
 \r
        EnableMenuItem(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE , MF_GRAYED);\r
        DrawMenuBar(GetConsoleWindow());\r
@@ -108,8 +108,6 @@ int main(int argc, wchar_t* argv[])
 \r
        log::add_file_sink(env::log_folder());\r
        \r
-       CASPAR_LOG(debug) << "Started Main Thread";\r
-\r
        win32_handler_tbb_installer win32_handler_tbb_installer;\r
        win32_exception::install_handler();\r
                                \r
@@ -170,9 +168,8 @@ int main(int argc, wchar_t* argv[])
                std::wcout << L"Press Any Key To Exit";\r
                _getwch();\r
        }       \r
-       CASPAR_LOG(debug) << "Ended Main Thread";\r
 \r
        timeEndPeriod(1);\r
-\r
+       \r
        return 0;\r
 }
\ No newline at end of file
index 2dd3526f3ed4a0791392691da1e4e045a15f669a..198d3024064b77e92634c4fe2937c57d59bdbf28 100644 (file)
@@ -5,6 +5,10 @@
       <Configuration>Debug</Configuration>\r
       <Platform>Win32</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Develop|Win32">\r
+      <Configuration>Develop</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="Release|Win32">\r
       <Configuration>Release</Configuration>\r
       <Platform>Win32</Platform>\r
@@ -14,6 +18,7 @@
     <ClCompile Include="boostrapper.cpp" />\r
     <ClCompile Include="main.cpp">\r
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">NotUsing</PrecompiledHeader>\r
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>\r
     </ClCompile>\r
   </ItemGroup>\r
     <WholeProgramOptimization>true</WholeProgramOptimization>\r
     <CharacterSet>Unicode</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
   </ImportGroup>\r
   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <PropertyGroup Label="UserMacros" />\r
   <PropertyGroup>\r
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">debug\</IntDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">release\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">release\</IntDir>\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\;$(IncludePath)</IncludePath>\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\;$(IncludePath)</IncludePath>\r
+    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Develop|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\;$(IncludePath)</IncludePath>\r
     <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">C:\Program\Microsoft DirectX SDK (June 2010)\Lib\x86;..\..\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\;$(LibraryPath)</LibraryPath>\r
     <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">C:\Program\Microsoft DirectX SDK (June 2010)\Lib\x86;..\..\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\;$(LibraryPath)</LibraryPath>\r
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">C:\Program\Microsoft DirectX SDK (June 2010)\Lib\x86;..\..\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\;$(LibraryPath)</LibraryPath>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)debug\</OutDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)release\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">$(ProjectDir)release\</OutDir>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionName)</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">$(SolutionName)</TargetName>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
     <LinkIncremental>false</LinkIncremental>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
     <LinkIncremental>false</LinkIncremental>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+  </PropertyGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
     <PreBuildEvent>\r
       <Command>\r
       </Command>\r
     </PostBuildEvent>\r
   </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Develop|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>Neither</FavorSizeOrSpeed>\r
+      <AdditionalIncludeDirectories>../</AdditionalIncludeDirectories>\r
+      <ExceptionHandling>Async</ExceptionHandling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r
+      <PreprocessorDefinitions>NDEBUG;_VC80_UPGRADE=0x0710;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <WholeProgramOptimization>false</WholeProgramOptimization>\r
+      <TreatWarningAsError>true</TreatWarningAsError>\r
+    </ClCompile>\r
+    <PreLinkEvent>\r
+      <Command>\r
+      </Command>\r
+    </PreLinkEvent>\r
+    <Link>\r
+      <AdditionalDependencies>sfml-audio.lib;sfml-window.lib;sfml-graphics.lib;OpenGL32.lib;FreeImage.lib;Winmm.lib;Ws2_32.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>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <GenerateMapFile>true</GenerateMapFile>\r
+      <MapExports>true</MapExports>\r
+      <SubSystem>Console</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
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
+    </Link>\r
+    <PostBuildEvent>\r
+      <Command>\r
+      </Command>\r
+    </PostBuildEvent>\r
+  </ItemDefinitionGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
   <ImportGroup Label="ExtensionTargets">\r
   </ImportGroup>\r