]> git.sesse.net Git - casparcg/commitdiff
2.0. Header file optimizations and fixes.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Mon, 8 Aug 2011 11:50:30 +0000 (11:50 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Mon, 8 Aug 2011 11:50:30 +0000 (11:50 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1090 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

24 files changed:
common/common.vcxproj
common/common.vcxproj.filters
common/utility/tweener.cpp [new file with mode: 0644]
common/utility/tweener.h
core/StdAfx.h
core/consumer/frame_consumer.cpp
core/mixer/audio/audio_mixer.cpp
core/mixer/audio/audio_mixer.h
core/mixer/gpu/device_buffer.cpp
core/mixer/gpu/device_buffer.h
core/mixer/gpu/fence.cpp
core/mixer/gpu/host_buffer.cpp
core/mixer/gpu/ogl_device.cpp
core/mixer/gpu/shader.cpp
core/mixer/image/image_kernel.cpp
core/mixer/image/image_mixer.cpp
core/mixer/mixer.cpp
core/producer/color/color_producer.cpp
core/producer/frame/basic_frame.cpp
core/producer/frame_producer.cpp
core/producer/layer.cpp
core/producer/stage.cpp
core/video_channel.cpp
core/video_format.cpp

index af6f26cbf862cf762537cf5eecfd9561b05992ad..7fada92e263050baf517875f6d6785a22c646834 100644 (file)
       <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
       <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
+    <ClCompile Include="utility\tweener.cpp">\r
+      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">../StdAfx.h</PrecompiledHeaderFile>\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
   </ItemGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
   <ImportGroup Label="ExtensionTargets">\r
index 705b9365acbde2c3b1500d6b78350fef08f77d9e..4ebf73f0d83e0ecb1a0717d2ed8397dee64f38e3 100644 (file)
@@ -58,6 +58,9 @@
     <ClCompile Include="env.cpp">\r
       <Filter>source</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="utility\tweener.cpp">\r
+      <Filter>source\utility</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="exception\exceptions.h">\r
diff --git a/common/utility/tweener.cpp b/common/utility/tweener.cpp
new file mode 100644 (file)
index 0000000..0c39106
--- /dev/null
@@ -0,0 +1,454 @@
+/*\r
+* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
+*\r
+*  This file is part of CasparCG.\r
+*\r
+*    CasparCG is free software: you can redistribute it and/or modify\r
+*    it under the terms of the GNU General Public License as published by\r
+*    the Free Software Foundation, either version 3 of the License, or\r
+*    (at your option) any later version.\r
+*\r
+*    CasparCG is distributed in the hope that it will be useful,\r
+*    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+*    GNU General Public License for more details.\r
+\r
+*    You should have received a copy of the GNU General Public License\r
+*    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
+*\r
+*/\r
+\r
+// The following code is based on Tweener for actionscript, http://code.google.com/p/tweener/\r
+//\r
+//Disclaimer for Robert Penner's Easing Equations license:\r
+//\r
+//TERMS OF USE - EASING EQUATIONS\r
+//\r
+//Open source under the BSD License.\r
+//\r
+//Copyright © 2001 Robert Penner\r
+//All rights reserved.\r
+//\r
+//Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\r
+//\r
+//    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\r
+//    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\r
+//    * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission.\r
+//\r
+//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+#include "../stdafx.h"\r
+\r
+#include "tweener.h"\r
+\r
+#include <boost/assign/list_of.hpp>\r
+#include <boost/regex.hpp>\r
+#include <boost/lexical_cast.hpp>\r
+\r
+#include <unordered_map>\r
+#include <string>\r
+#include <locale>\r
+#include <functional>\r
+#include <vector>\r
+\r
+namespace caspar {\r
+\r
+typedef std::function<double(double, double, double, double)> tweener_t;\r
+                       \r
+static const double PI = std::atan(1.0)*4.0;\r
+static const double H_PI = std::atan(1.0)*2.0;\r
+\r
+double ease_none (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       return c*t/d + b;\r
+}\r
+\r
+double ease_in_quad (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       return c*(t/=d)*t + b;\r
+}\r
+       \r
+double ease_out_quad (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       return -c *(t/=d)*(t-2) + b;\r
+}      \r
+\r
+double ease_in_out_quad (double t, double b, double c, double d, const std::vector<double>& params)\r
+{\r
+       if ((t/=d/2) < 1) \r
+               return c/2*t*t + b;\r
+\r
+       return -c/2 * ((--t)*(t-2) - 1) + b;\r
+}      \r
+\r
+double ease_out_in_quad (double t, double b, double c, double d, const std::vector<double>& params)\r
+{\r
+       if (t < d/2) \r
+               return ease_out_quad (t*2, b, c/2, d, params);\r
+\r
+       return ease_in_quad((t*2)-d, b+c/2, c/2, d, params);\r
+}\r
+       \r
+double ease_in_cubic (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       return c*(t/=d)*t*t + b;\r
+}      \r
+\r
+double ease_out_cubic (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       return c*((t=t/d-1)*t*t + 1) + b;\r
+}\r
+       \r
+double ease_in_out_cubic (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       if ((t/=d/2) < 1) \r
+               return c/2*t*t*t + b;\r
+\r
+       return c/2*((t-=2)*t*t + 2) + b;\r
+}\r
+       \r
+double ease_out_in_cubic (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       if (t < d/2) return ease_out_cubic (t*2, b, c/2, d, params);\r
+       return ease_in_cubic((t*2)-d, b+c/2, c/2, d, params);\r
+}\r
+       \r
+double ease_in_quart (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       return c*(t/=d)*t*t*t + b;\r
+}\r
+       \r
+double ease_out_quart (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       return -c * ((t=t/d-1)*t*t*t - 1) + b;\r
+}      \r
+\r
+double ease_in_out_quart (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       if ((t/=d/2) < 1)\r
+               return c/2*t*t*t*t + b;\r
+\r
+       return -c/2 * ((t-=2)*t*t*t - 2) + b;\r
+}      \r
+\r
+double ease_out_in_quart (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       if (t < d/2)\r
+               return ease_out_quart (t*2, b, c/2, d, params);\r
+\r
+       return ease_in_quart((t*2)-d, b+c/2, c/2, d, params);\r
+}      \r
+\r
+double ease_in_quint (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       return c*(t/=d)*t*t*t*t + b;\r
+}\r
+       \r
+double ease_out_quint (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       return c*((t=t/d-1)*t*t*t*t + 1) + b;\r
+}\r
+       \r
+double ease_in_out_quint (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       if ((t/=d/2) < 1) \r
+               return c/2*t*t*t*t*t + b;\r
+\r
+       return c/2*((t-=2)*t*t*t*t + 2) + b;\r
+}\r
+       \r
+double ease_out_in_quint (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       if (t < d/2) \r
+               return ease_out_quint (t*2, b, c/2, d, params);\r
+\r
+       return ease_in_quint((t*2)-d, b+c/2, c/2, d, params);\r
+}      \r
+\r
+double ease_in_sine (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       return -c * std::cos(t/d * (PI/2)) + c + b;\r
+}      \r
+\r
+double ease_out_sine (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       return c * std::sin(t/d * (PI/2)) + b;\r
+}      \r
+\r
+double ease_in_out_sine (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       return -c/2 * (std::cos(PI*t/d) - 1) + b;\r
+}      \r
+\r
+double ease_out_in_sine (double t, double b, double c, double d, const std::vector<double>& params)\r
+{\r
+       if (t < d/2) \r
+               return ease_out_sine (t*2, b, c/2, d, params);\r
+       \r
+       return ease_in_sine((t*2)-d, b+c/2, c/2, d, params);\r
+}      \r
+\r
+double ease_in_expo (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       return (t==0) ? b : c * std::pow(2, 10 * (t/d - 1)) + b - c * 0.001;\r
+}      \r
+\r
+double ease_out_expo (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       return (t==d) ? b+c : c * 1.001 * (-std::pow(2, -10 * t/d) + 1) + b;\r
+}\r
+       \r
+double ease_in_out_expo (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       if (t==0) \r
+               return b;\r
+       if (t==d) \r
+               return b+c;\r
+       if ((t/=d/2) < 1) \r
+               return c/2 * std::pow(2, 10 * (t - 1)) + b - c * 0.0005;\r
+\r
+       return c/2 * 1.0005 * (-std::pow(2, -10 * --t) + 2) + b;\r
+}\r
+       \r
+double ease_out_in_expo (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       if (t < d/2) \r
+               return ease_out_expo (t*2, b, c/2, d, params);\r
+\r
+       return ease_in_expo((t*2)-d, b+c/2, c/2, d, params);\r
+}\r
+       \r
+double ease_in_circ (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       return -c * (std::sqrt(1 - (t/=d)*t) - 1) + b;\r
+}\r
+       \r
+double ease_out_circ (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       return c * std::sqrt(1 - (t=t/d-1)*t) + b;\r
+}\r
+       \r
+double ease_in_out_circ (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       if ((t/=d/2) < 1) \r
+               return -c/2 * (std::sqrt(1 - t*t) - 1) + b;\r
+\r
+       return c/2 * (std::sqrt(1 - (t-=2)*t) + 1) + b;\r
+}\r
+       \r
+double ease_out_in_circ (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       if (t < d/2) return ease_out_circ(t*2, b, c/2, d, params);\r
+       return ease_in_circ((t*2)-d, b+c/2, c/2, d, params);\r
+}\r
+       \r
+double ease_in_elastic (double t, double b, double c, double d, const std::vector<double>& params)\r
+{\r
+       if (t==0) return b;\r
+       if ((t/=d)==1) return b+c;\r
+       //var p:Number = !Boolean(p_params) || isNaN(p_params.period) ? d*.3 : p_params.period;\r
+       //var s:Number;\r
+       //var a:Number = !Boolean(p_params) || isNaN(p_params.amplitude) ? 0 : p_params.amplitude;\r
+       double p = params.size() > 0 ? params[0] : d*0.3;\r
+       double s;\r
+       double a = params.size() > 1 ? params[1] : 0.0;\r
+       if (a == 0.0 || a < std::abs(c)) \r
+       {\r
+               a = c;\r
+               s = p/4;\r
+       } \r
+       else \r
+               s = p/(2*PI) * std::asin (c/a);\r
+       \r
+       return -(a*std::pow(2,10*(t-=1)) * std::sin( (t*d-s)*(2*PI)/p )) + b;\r
+}\r
+       \r
+double ease_out_elastic (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       if (t==0) \r
+               return b;\r
+       if ((t/=d)==1) \r
+               return b+c;\r
+       //var p:Number = !Boolean(p_params) || isNaN(p_params.period) ? d*.3 : p_params.period;\r
+       //var s:Number;\r
+       //var a:Number = !Boolean(p_params) || isNaN(p_params.amplitude) ? 0 : p_params.amplitude;\r
+       double p = params.size() > 0 ? params[0] : d*0.3;\r
+       double s;\r
+       double a = params.size() > 1 ? params[1] : 0.0;\r
+       if (a == 0.0 || a < std::abs(c))\r
+       {\r
+               a = c;\r
+               s = p/4;\r
+       } \r
+       else \r
+               s = p/(2*PI) * std::asin (c/a);\r
+       \r
+       return (a*std::pow(2,-10*t) * std::sin( (t*d-s)*(2*PI)/p ) + c + b);\r
+}      \r
+\r
+double ease_in_out_elastic (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       if (t==0)\r
+               return b;\r
+       if ((t/=d/2)==2) \r
+               return b+c;\r
+       //var p:Number = !Boolean(p_params) || isNaN(p_params.period) ? d*(.3*1.5) : p_params.period;\r
+       //var s:Number;\r
+       //var a:Number = !Boolean(p_params) || isNaN(p_params.amplitude) ? 0 : p_params.amplitude;\r
+       double p = params.size() > 0 ? params[0] : d*0.3*1.5;\r
+       double s;\r
+       double a = params.size() > 1 ? params[1] : 0.0;\r
+       if (a == 0.0 || a < std::abs(c)) \r
+       {\r
+               a = c;\r
+               s = p/4;\r
+       }\r
+       else\r
+               s = p/(2*PI) * std::asin (c/a);\r
+       \r
+       if (t < 1) \r
+               return -.5*(a*std::pow(2,10*(t-=1)) * std::sin( (t*d-s)*(2*PI)/p )) + b;\r
+\r
+       return a*std::pow(2,-10*(t-=1)) * std::sin( (t*d-s)*(2*PI)/p )*.5 + c + b;\r
+}\r
+       \r
+double ease_out_in_elastic (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       if (t < d/2) return ease_out_elastic (t*2, b, c/2, d, params);\r
+       return ease_in_elastic((t*2)-d, b+c/2, c/2, d, params);\r
+}\r
+       \r
+double ease_in_back (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       //var s:Number = !Boolean(p_params) || isNaN(p_params.overshoot) ? 1.70158 : p_params.overshoot;\r
+       double s = params.size() > 0 ? params[0] : 1.70158;\r
+       return c*(t/=d)*t*((s+1)*t - s) + b;\r
+}\r
+       \r
+double ease_out_back (double t, double b, double c, double d, const std::vector<double>& params)\r
+{\r
+       //var s:Number = !Boolean(p_params) || isNaN(p_params.overshoot) ? 1.70158 : p_params.overshoot;\r
+       double s = params.size() > 0 ? params[0] : 1.70158;\r
+       return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;\r
+}\r
+       \r
+double ease_in_out_back (double t, double b, double c, double d, const std::vector<double>& params)\r
+{\r
+       //var s:Number = !Boolean(p_params) || isNaN(p_params.overshoot) ? 1.70158 : p_params.overshoot;\r
+       double s = params.size() > 0 ? params[0] : 1.70158;\r
+       if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;\r
+       return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;\r
+}\r
+       \r
+double ease_out_int_back (double t, double b, double c, double d, const std::vector<double>& params)\r
+{\r
+       if (t < d/2) return ease_out_back (t*2, b, c/2, d, params);\r
+       return ease_in_back((t*2)-d, b+c/2, c/2, d, params);\r
+}\r
+       \r
+double ease_out_bounce (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       if ((t/=d) < (1/2.75))\r
+               return c*(7.5625*t*t) + b;\r
+       else if (t < (2/2.75))\r
+               return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;\r
+       else if (t < (2.5/2.75))\r
+               return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;\r
+       else \r
+               return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;    \r
+}\r
+       \r
+double ease_in_bounce (double t, double b, double c, double d, const std::vector<double>& params)\r
+{\r
+       return c - ease_out_bounce (d-t, 0, c, d, params) + b;\r
+}\r
+\r
+double ease_in_out_bounce (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       if (t < d/2) return ease_in_bounce (t*2, 0, c, d, params) * .5 + b;\r
+       else return ease_out_bounce (t*2-d, 0, c, d, params) * .5 + c*.5 + b;\r
+}\r
+       \r
+\r
+double ease_out_in_bounce (double t, double b, double c, double d, const std::vector<double>& params) \r
+{\r
+       if (t < d/2) return ease_out_bounce (t*2, b, c/2, d, params);\r
+       return ease_in_bounce((t*2)-d, b+c/2, c/2, d, params);\r
+}\r
+\r
+tweener_t get_tweener(std::wstring name)\r
+{\r
+       std::transform(name.begin(), name.end(), name.begin(), std::tolower);\r
+\r
+       if(name == L"linear")\r
+               return [](double t, double b, double c, double d){return ease_none(t, b, c, d, std::vector<double>());};\r
+       \r
+       std::vector<double> params;\r
+       \r
+       static const boost::wregex expr(L"(?<NAME>\\w*)(:(?<V0>\\d+\\.?\\d?))?(:(?<V1>\\d+\\.?\\d?))?"); // boost::regex has no repeated captures?\r
+       boost::wsmatch what;\r
+       if(boost::regex_match(name, what, expr))\r
+       {\r
+               name = what["NAME"].str();\r
+               if(what["V0"].matched)\r
+                       params.push_back(boost::lexical_cast<double>(what["V0"].str()));\r
+               if(what["V1"].matched)\r
+                       params.push_back(boost::lexical_cast<double>(what["V1"].str()));\r
+       }\r
+               \r
+       typedef std::function<double(double, double, double, double, const std::vector<double>&)> tween_t;      \r
+       static const std::unordered_map<std::wstring, tween_t> tweens = boost::assign::map_list_of      \r
+               (L"",                                   ease_none                  )    \r
+               (L"linear",                             ease_none                  )    \r
+               (L"easenone",                   ease_none                  )\r
+               (L"easeinquad",                 ease_in_quad       )\r
+               (L"easeoutquad",                ease_out_quad      )\r
+               (L"easeinoutquad",              ease_in_out_quad   )\r
+               (L"easeoutinquad",              ease_out_in_quad   )\r
+               (L"easeincubic",                ease_in_cubic      )\r
+               (L"easeoutcubic",               ease_out_cubic     )\r
+               (L"easeinoutcubic",             ease_in_out_cubic  )\r
+               (L"easeoutincubic",             ease_out_in_cubic  )\r
+               (L"easeinquart",                ease_in_quart      )\r
+               (L"easeoutquart",               ease_out_quart     )\r
+               (L"easeinoutquart",             ease_in_out_quart  )\r
+               (L"easeoutinquart",             ease_out_in_quart  )\r
+               (L"easeinquint",                ease_in_quint      )\r
+               (L"easeoutquint",               ease_out_quint     )\r
+               (L"easeinoutquint",             ease_in_out_quint  )\r
+               (L"easeoutinquint",             ease_out_in_quint  )\r
+               (L"easeinsine",                 ease_in_sine       )\r
+               (L"easeoutsine",                ease_out_sine      )\r
+               (L"easeinoutsine",              ease_in_out_sine   )\r
+               (L"easeoutinsine",              ease_out_in_sine   )\r
+               (L"easeinexpo",                 ease_in_expo       )\r
+               (L"easeoutexpo",                ease_out_expo      )\r
+               (L"easeinoutexpo",              ease_in_out_expo   )\r
+               (L"easeoutinexpo",              ease_out_in_expo   )\r
+               (L"easeincirc",                 ease_in_circ       )\r
+               (L"easeoutcirc",                ease_out_circ      )\r
+               (L"easeinoutcirc",              ease_in_out_circ   )\r
+               (L"easeoutincirc",              ease_out_in_circ   )\r
+               (L"easeinelastic",              ease_in_elastic    )\r
+               (L"easeoutelastic",             ease_out_elastic   )\r
+               (L"easeinoutelastic",   ease_in_out_elastic)\r
+               (L"easeoutinelastic",   ease_out_in_elastic)\r
+               (L"easeinback",                 ease_in_back       )\r
+               (L"easeoutback",                ease_out_back      )\r
+               (L"easeinoutback",              ease_in_out_back   )\r
+               (L"easeoutintback",             ease_out_int_back  )\r
+               (L"easeoutbounce",              ease_out_bounce    )\r
+               (L"easeinbounce",               ease_in_bounce     )\r
+               (L"easeinoutbounce",    ease_in_out_bounce )\r
+               (L"easeoutinbounce",    ease_out_in_bounce );\r
+\r
+       auto it = tweens.find(name);\r
+       if(it == tweens.end())\r
+               it = tweens.find(L"linear");\r
+       \r
+       return [=](double t, double b, double c, double d)\r
+       {\r
+               return it->second(t, b, c, d, params);\r
+       };\r
+};\r
+\r
+}
\ No newline at end of file
index 45123edbc0c8e2b78959c5e1c4b0ac24590008f2..130d2c5f8bee60cd58b4392c84c818a643a777ed 100644 (file)
 *    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
 *\r
 */\r
-\r
-// The following code is based on Tweener for actionscript, http://code.google.com/p/tweener/\r
-//\r
-//Disclaimer for Robert Penner's Easing Equations license:\r
-//\r
-//TERMS OF USE - EASING EQUATIONS\r
-//\r
-//Open source under the BSD License.\r
-//\r
-//Copyright © 2001 Robert Penner\r
-//All rights reserved.\r
-//\r
-//Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\r
-//\r
-//    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\r
-//    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\r
-//    * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission.\r
-//\r
-//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-\r
 #pragma once\r
 \r
-#include <boost/assign/list_of.hpp>\r
-#include <boost/regex.hpp>\r
-#include <boost/lexical_cast.hpp>\r
-\r
-#include <unordered_map>\r
-#include <string>\r
-#include <locale>\r
 #include <functional>\r
-#include <vector>\r
 \r
 namespace caspar {\r
 \r
 typedef std::function<double(double, double, double, double)> tweener_t;\r
-                       \r
-static const double PI = std::atan(1.0)*4.0;\r
-static const double H_PI = std::atan(1.0)*2.0;\r
-\r
-inline double ease_none (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       return c*t/d + b;\r
-}\r
-\r
-inline double ease_in_quad (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       return c*(t/=d)*t + b;\r
-}\r
-       \r
-inline double ease_out_quad (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       return -c *(t/=d)*(t-2) + b;\r
-}      \r
-\r
-inline double ease_in_out_quad (double t, double b, double c, double d, const std::vector<double>& params)\r
-{\r
-       if ((t/=d/2) < 1) \r
-               return c/2*t*t + b;\r
-\r
-       return -c/2 * ((--t)*(t-2) - 1) + b;\r
-}      \r
-\r
-inline double ease_out_in_quad (double t, double b, double c, double d, const std::vector<double>& params)\r
-{\r
-       if (t < d/2) \r
-               return ease_out_quad (t*2, b, c/2, d, params);\r
-\r
-       return ease_in_quad((t*2)-d, b+c/2, c/2, d, params);\r
-}\r
-       \r
-inline double ease_in_cubic (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       return c*(t/=d)*t*t + b;\r
-}      \r
-\r
-inline double ease_out_cubic (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       return c*((t=t/d-1)*t*t + 1) + b;\r
-}\r
-       \r
-inline double ease_in_out_cubic (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       if ((t/=d/2) < 1) \r
-               return c/2*t*t*t + b;\r
-\r
-       return c/2*((t-=2)*t*t + 2) + b;\r
-}\r
-       \r
-inline double ease_out_in_cubic (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       if (t < d/2) return ease_out_cubic (t*2, b, c/2, d, params);\r
-       return ease_in_cubic((t*2)-d, b+c/2, c/2, d, params);\r
-}\r
-       \r
-inline double ease_in_quart (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       return c*(t/=d)*t*t*t + b;\r
-}\r
-       \r
-inline double ease_out_quart (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       return -c * ((t=t/d-1)*t*t*t - 1) + b;\r
-}      \r
-\r
-inline double ease_in_out_quart (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       if ((t/=d/2) < 1)\r
-               return c/2*t*t*t*t + b;\r
-\r
-       return -c/2 * ((t-=2)*t*t*t - 2) + b;\r
-}      \r
-\r
-inline double ease_out_in_quart (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       if (t < d/2)\r
-               return ease_out_quart (t*2, b, c/2, d, params);\r
-\r
-       return ease_in_quart((t*2)-d, b+c/2, c/2, d, params);\r
-}      \r
-\r
-inline double ease_in_quint (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       return c*(t/=d)*t*t*t*t + b;\r
-}\r
-       \r
-inline double ease_out_quint (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       return c*((t=t/d-1)*t*t*t*t + 1) + b;\r
-}\r
-       \r
-inline double ease_in_out_quint (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       if ((t/=d/2) < 1) \r
-               return c/2*t*t*t*t*t + b;\r
-\r
-       return c/2*((t-=2)*t*t*t*t + 2) + b;\r
-}\r
-       \r
-inline double ease_out_in_quint (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       if (t < d/2) \r
-               return ease_out_quint (t*2, b, c/2, d, params);\r
-\r
-       return ease_in_quint((t*2)-d, b+c/2, c/2, d, params);\r
-}      \r
-\r
-inline double ease_in_sine (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       return -c * std::cos(t/d * (PI/2)) + c + b;\r
-}      \r
-\r
-inline double ease_out_sine (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       return c * std::sin(t/d * (PI/2)) + b;\r
-}      \r
-\r
-inline double ease_in_out_sine (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       return -c/2 * (std::cos(PI*t/d) - 1) + b;\r
-}      \r
-\r
-inline double ease_out_in_sine (double t, double b, double c, double d, const std::vector<double>& params)\r
-{\r
-       if (t < d/2) \r
-               return ease_out_sine (t*2, b, c/2, d, params);\r
-       \r
-       return ease_in_sine((t*2)-d, b+c/2, c/2, d, params);\r
-}      \r
-\r
-inline double ease_in_expo (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       return (t==0) ? b : c * std::pow(2, 10 * (t/d - 1)) + b - c * 0.001;\r
-}      \r
-\r
-inline double ease_out_expo (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       return (t==d) ? b+c : c * 1.001 * (-std::pow(2, -10 * t/d) + 1) + b;\r
-}\r
-       \r
-inline double ease_in_out_expo (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       if (t==0) \r
-               return b;\r
-       if (t==d) \r
-               return b+c;\r
-       if ((t/=d/2) < 1) \r
-               return c/2 * std::pow(2, 10 * (t - 1)) + b - c * 0.0005;\r
-\r
-       return c/2 * 1.0005 * (-std::pow(2, -10 * --t) + 2) + b;\r
-}\r
-       \r
-inline double ease_out_in_expo (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       if (t < d/2) \r
-               return ease_out_expo (t*2, b, c/2, d, params);\r
-\r
-       return ease_in_expo((t*2)-d, b+c/2, c/2, d, params);\r
-}\r
-       \r
-inline double ease_in_circ (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       return -c * (std::sqrt(1 - (t/=d)*t) - 1) + b;\r
-}\r
-       \r
-inline double ease_out_circ (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       return c * std::sqrt(1 - (t=t/d-1)*t) + b;\r
-}\r
-       \r
-inline double ease_in_out_circ (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       if ((t/=d/2) < 1) \r
-               return -c/2 * (std::sqrt(1 - t*t) - 1) + b;\r
-\r
-       return c/2 * (std::sqrt(1 - (t-=2)*t) + 1) + b;\r
-}\r
-       \r
-inline double ease_out_in_circ (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       if (t < d/2) return ease_out_circ(t*2, b, c/2, d, params);\r
-       return ease_in_circ((t*2)-d, b+c/2, c/2, d, params);\r
-}\r
-       \r
-inline double ease_in_elastic (double t, double b, double c, double d, const std::vector<double>& params)\r
-{\r
-       if (t==0) return b;\r
-       if ((t/=d)==1) return b+c;\r
-       //var p:Number = !Boolean(p_params) || isNaN(p_params.period) ? d*.3 : p_params.period;\r
-       //var s:Number;\r
-       //var a:Number = !Boolean(p_params) || isNaN(p_params.amplitude) ? 0 : p_params.amplitude;\r
-       double p = params.size() > 0 ? params[0] : d*0.3;\r
-       double s;\r
-       double a = params.size() > 1 ? params[1] : 0.0;\r
-       if (a == 0.0 || a < std::abs(c)) \r
-       {\r
-               a = c;\r
-               s = p/4;\r
-       } \r
-       else \r
-               s = p/(2*PI) * std::asin (c/a);\r
-       \r
-       return -(a*std::pow(2,10*(t-=1)) * std::sin( (t*d-s)*(2*PI)/p )) + b;\r
-}\r
-       \r
-inline double ease_out_elastic (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       if (t==0) \r
-               return b;\r
-       if ((t/=d)==1) \r
-               return b+c;\r
-       //var p:Number = !Boolean(p_params) || isNaN(p_params.period) ? d*.3 : p_params.period;\r
-       //var s:Number;\r
-       //var a:Number = !Boolean(p_params) || isNaN(p_params.amplitude) ? 0 : p_params.amplitude;\r
-       double p = params.size() > 0 ? params[0] : d*0.3;\r
-       double s;\r
-       double a = params.size() > 1 ? params[1] : 0.0;\r
-       if (a == 0.0 || a < std::abs(c))\r
-       {\r
-               a = c;\r
-               s = p/4;\r
-       } \r
-       else \r
-               s = p/(2*PI) * std::asin (c/a);\r
-       \r
-       return (a*std::pow(2,-10*t) * std::sin( (t*d-s)*(2*PI)/p ) + c + b);\r
-}      \r
-\r
-inline double ease_in_out_elastic (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       if (t==0)\r
-               return b;\r
-       if ((t/=d/2)==2) \r
-               return b+c;\r
-       //var p:Number = !Boolean(p_params) || isNaN(p_params.period) ? d*(.3*1.5) : p_params.period;\r
-       //var s:Number;\r
-       //var a:Number = !Boolean(p_params) || isNaN(p_params.amplitude) ? 0 : p_params.amplitude;\r
-       double p = params.size() > 0 ? params[0] : d*0.3*1.5;\r
-       double s;\r
-       double a = params.size() > 1 ? params[1] : 0.0;\r
-       if (a == 0.0 || a < std::abs(c)) \r
-       {\r
-               a = c;\r
-               s = p/4;\r
-       }\r
-       else\r
-               s = p/(2*PI) * std::asin (c/a);\r
-       \r
-       if (t < 1) \r
-               return -.5*(a*std::pow(2,10*(t-=1)) * std::sin( (t*d-s)*(2*PI)/p )) + b;\r
-\r
-       return a*std::pow(2,-10*(t-=1)) * std::sin( (t*d-s)*(2*PI)/p )*.5 + c + b;\r
-}\r
-       \r
-inline double ease_out_in_elastic (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       if (t < d/2) return ease_out_elastic (t*2, b, c/2, d, params);\r
-       return ease_in_elastic((t*2)-d, b+c/2, c/2, d, params);\r
-}\r
-       \r
-inline double ease_in_back (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       //var s:Number = !Boolean(p_params) || isNaN(p_params.overshoot) ? 1.70158 : p_params.overshoot;\r
-       double s = params.size() > 0 ? params[0] : 1.70158;\r
-       return c*(t/=d)*t*((s+1)*t - s) + b;\r
-}\r
-       \r
-inline double ease_out_back (double t, double b, double c, double d, const std::vector<double>& params)\r
-{\r
-       //var s:Number = !Boolean(p_params) || isNaN(p_params.overshoot) ? 1.70158 : p_params.overshoot;\r
-       double s = params.size() > 0 ? params[0] : 1.70158;\r
-       return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;\r
-}\r
-       \r
-inline double ease_in_out_back (double t, double b, double c, double d, const std::vector<double>& params)\r
-{\r
-       //var s:Number = !Boolean(p_params) || isNaN(p_params.overshoot) ? 1.70158 : p_params.overshoot;\r
-       double s = params.size() > 0 ? params[0] : 1.70158;\r
-       if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;\r
-       return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;\r
-}\r
-       \r
-inline double ease_out_int_back (double t, double b, double c, double d, const std::vector<double>& params)\r
-{\r
-       if (t < d/2) return ease_out_back (t*2, b, c/2, d, params);\r
-       return ease_in_back((t*2)-d, b+c/2, c/2, d, params);\r
-}\r
-       \r
-inline double ease_out_bounce (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       if ((t/=d) < (1/2.75))\r
-               return c*(7.5625*t*t) + b;\r
-       else if (t < (2/2.75))\r
-               return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;\r
-       else if (t < (2.5/2.75))\r
-               return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;\r
-       else \r
-               return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;    \r
-}\r
-       \r
-inline double ease_in_bounce (double t, double b, double c, double d, const std::vector<double>& params)\r
-{\r
-       return c - ease_out_bounce (d-t, 0, c, d, params) + b;\r
-}\r
-\r
-inline double ease_in_out_bounce (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       if (t < d/2) return ease_in_bounce (t*2, 0, c, d, params) * .5 + b;\r
-       else return ease_out_bounce (t*2-d, 0, c, d, params) * .5 + c*.5 + b;\r
-}\r
-       \r
-\r
-inline double ease_out_in_bounce (double t, double b, double c, double d, const std::vector<double>& params) \r
-{\r
-       if (t < d/2) return ease_out_bounce (t*2, b, c/2, d, params);\r
-       return ease_in_bounce((t*2)-d, b+c/2, c/2, d, params);\r
-}\r
-\r
-inline tweener_t get_tweener(std::wstring name = L"linear")\r
-{\r
-       std::transform(name.begin(), name.end(), name.begin(), std::tolower);\r
-\r
-       if(name == L"linear")\r
-               return [](double t, double b, double c, double d){return ease_none(t, b, c, d, std::vector<double>());};\r
-       \r
-       std::vector<double> params;\r
-       \r
-       static const boost::wregex expr(L"(?<NAME>\\w*)(:(?<V0>\\d+\\.?\\d?))?(:(?<V1>\\d+\\.?\\d?))?"); // boost::regex has no repeated captures?\r
-       boost::wsmatch what;\r
-       if(boost::regex_match(name, what, expr))\r
-       {\r
-               name = what["NAME"].str();\r
-               if(what["V0"].matched)\r
-                       params.push_back(boost::lexical_cast<double>(what["V0"].str()));\r
-               if(what["V1"].matched)\r
-                       params.push_back(boost::lexical_cast<double>(what["V1"].str()));\r
-       }\r
-               \r
-       typedef std::function<double(double, double, double, double, const std::vector<double>&)> tween_t;      \r
-       static const std::unordered_map<std::wstring, tween_t> tweens = boost::assign::map_list_of      \r
-               (L"",                                   ease_none                  )    \r
-               (L"linear",                             ease_none                  )    \r
-               (L"easenone",                   ease_none                  )\r
-               (L"easeinquad",                 ease_in_quad       )\r
-               (L"easeoutquad",                ease_out_quad      )\r
-               (L"easeinoutquad",              ease_in_out_quad   )\r
-               (L"easeoutinquad",              ease_out_in_quad   )\r
-               (L"easeincubic",                ease_in_cubic      )\r
-               (L"easeoutcubic",               ease_out_cubic     )\r
-               (L"easeinoutcubic",             ease_in_out_cubic  )\r
-               (L"easeoutincubic",             ease_out_in_cubic  )\r
-               (L"easeinquart",                ease_in_quart      )\r
-               (L"easeoutquart",               ease_out_quart     )\r
-               (L"easeinoutquart",             ease_in_out_quart  )\r
-               (L"easeoutinquart",             ease_out_in_quart  )\r
-               (L"easeinquint",                ease_in_quint      )\r
-               (L"easeoutquint",               ease_out_quint     )\r
-               (L"easeinoutquint",             ease_in_out_quint  )\r
-               (L"easeoutinquint",             ease_out_in_quint  )\r
-               (L"easeinsine",                 ease_in_sine       )\r
-               (L"easeoutsine",                ease_out_sine      )\r
-               (L"easeinoutsine",              ease_in_out_sine   )\r
-               (L"easeoutinsine",              ease_out_in_sine   )\r
-               (L"easeinexpo",                 ease_in_expo       )\r
-               (L"easeoutexpo",                ease_out_expo      )\r
-               (L"easeinoutexpo",              ease_in_out_expo   )\r
-               (L"easeoutinexpo",              ease_out_in_expo   )\r
-               (L"easeincirc",                 ease_in_circ       )\r
-               (L"easeoutcirc",                ease_out_circ      )\r
-               (L"easeinoutcirc",              ease_in_out_circ   )\r
-               (L"easeoutincirc",              ease_out_in_circ   )\r
-               (L"easeinelastic",              ease_in_elastic    )\r
-               (L"easeoutelastic",             ease_out_elastic   )\r
-               (L"easeinoutelastic",   ease_in_out_elastic)\r
-               (L"easeoutinelastic",   ease_out_in_elastic)\r
-               (L"easeinback",                 ease_in_back       )\r
-               (L"easeoutback",                ease_out_back      )\r
-               (L"easeinoutback",              ease_in_out_back   )\r
-               (L"easeoutintback",             ease_out_int_back  )\r
-               (L"easeoutbounce",              ease_out_bounce    )\r
-               (L"easeinbounce",               ease_in_bounce     )\r
-               (L"easeinoutbounce",    ease_in_out_bounce )\r
-               (L"easeoutinbounce",    ease_out_in_bounce );\r
-\r
-       auto it = tweens.find(name);\r
-       if(it == tweens.end())\r
-               it = tweens.find(L"linear");\r
-       \r
-       return [=](double t, double b, double c, double d)\r
-       {\r
-               return it->second(t, b, c, d, params);\r
-       };\r
-};\r
+tweener_t get_tweener(std::wstring name = L"linear");\r
 \r
 }
\ No newline at end of file
index 06862034e276594d802a653a32dbd51017f7b6cc..2cd385119b51193e9923ce08f9d6d4804d6f8d70 100644 (file)
@@ -31,9 +31,7 @@
 \r
 #define NOMINMAX\r
 \r
-#include <Windows.h>\r
 #include <GL/glew.h>\r
-#include <SFML/Window.hpp>\r
 \r
 #include <algorithm>\r
 #include <array>\r
@@ -48,9 +46,6 @@
 #include <tbb/atomic.h>\r
 #include <tbb/concurrent_queue.h>\r
 #include <tbb/concurrent_unordered_map.h>\r
-#include <tbb/parallel_invoke.h>\r
-#include <tbb/parallel_for.h>\r
-#include <tbb/parallel_for_each.h>\r
 \r
 #include <boost/assign.hpp>\r
 #include <boost/filesystem.hpp>\r
index 4696c1f21f9fbf6b21e6f76da96f1fd9da2aa12d..02ed56b8535251819ac22598c9adb9e4f37006d8 100644 (file)
@@ -21,9 +21,9 @@
 \r
 #include "frame_consumer.h"\r
 \r
-#include <common/memory/safe_ptr.h>\r
-\r
 #include <common/env.h>\r
+#include <common/memory/safe_ptr.h>\r
+#include <common/exception/exceptions.h>\r
 \r
 namespace caspar { namespace core {\r
 \r
index 7c84bb197a71a589318aa4134365ba2b537e0c9e..7880c56a68bf43634c71cc3d07fbf82677621fcf 100644 (file)
 #include <core/mixer/write_frame.h>\r
 #include <core/producer/frame/audio_transform.h>\r
 \r
+#include <tbb/parallel_for.h>\r
+\r
+#include <stack>\r
+#include <deque>\r
+\r
 namespace caspar { namespace core {\r
        \r
 struct audio_mixer::implementation\r
index ee04ef0b4c5466fcd0ac1bc68ee48860a2bdb46d..6cdafca5d8dc2c248d672f4cab563057ee6ec0fd 100644 (file)
@@ -25,6 +25,8 @@
 \r
 #include <boost/noncopyable.hpp>\r
 \r
+#include <vector>\r
+\r
 namespace caspar { namespace core {\r
 \r
 struct video_format_desc;\r
index 14eb22095ecf89cce0b278faceb592375bc5d0af..a03c116772a6de7d7bd348ce7f26e0d46d55c1c0 100644 (file)
 #include "host_buffer.h"\r
 #include "fence.h"\r
 \r
+#include <common/exception/exceptions.h>\r
 #include <common/gl/gl_check.h>\r
 \r
+#include <gl/glew.h>\r
+\r
 namespace caspar { namespace core {\r
        \r
 static GLenum FORMAT[] = {0, GL_RED, GL_RG, GL_BGR, GL_BGRA};\r
 static GLenum INTERNAL_FORMAT[] = {0, GL_R8, GL_RG8, GL_RGB8, GL_RGBA8};       \r
 \r
-GLenum format(size_t stride)\r
+unsigned int format(size_t stride)\r
 {\r
        return FORMAT[stride];\r
 }\r
index 6a02d15ce42ed48ab97676f81a52bd275ad170ba..1f1df52009da72b7f16af72e7c15f3dc323894a7 100644 (file)
@@ -25,8 +25,6 @@
 \r
 #include <memory>\r
 \r
-#include "GL/glew.h"\r
-\r
 namespace caspar { namespace core {\r
                \r
 class host_buffer;\r
@@ -57,6 +55,6 @@ private:
        safe_ptr<implementation> impl_;\r
 };\r
        \r
-GLenum format(size_t stride);\r
+unsigned int format(size_t stride);\r
 \r
 }}
\ No newline at end of file
index 6fbbdf37a3e5608cf9318af56b34c6c669b6a576..a8d87ae76efb6a15955a4fc1c7028b7a21ef602d 100644 (file)
@@ -6,6 +6,8 @@
 \r
 #include <common/gl/gl_check.h>\r
 \r
+#include <gl/glew.h>\r
+\r
 namespace caspar { namespace core {\r
 \r
 struct fence::implementation\r
index 899ba1a5128235a6bfe250f1c8cb7088106f24f8..72c2aa947577f60634b37015a0744d2e2033b21e 100644 (file)
 #include "device_buffer.h"\r
 #include "ogl_device.h"\r
 \r
+#include <common/exception/exceptions.h>\r
 #include <common/gl/gl_check.h>\r
 \r
+#include <gl/glew.h>\r
+\r
 namespace caspar { namespace core {\r
                                                                                                                                                                                                                                                                                                                                \r
 struct host_buffer::implementation : boost::noncopyable\r
index 1cafb65c1716330d50b1f2545bc8ac0455dd778b..bddb797e9a43b46969a4c07e18a1f3b7fc27eddb 100644 (file)
 \r
 #include "ogl_device.h"\r
 \r
+#include <common/exception/exceptions.h>\r
 #include <common/utility/assert.h>\r
 #include <common/gl/gl_check.h>\r
 \r
 #include <boost/foreach.hpp>\r
 \r
+#include <gl/glew.h>\r
+\r
 namespace caspar { namespace core {\r
 \r
 ogl_device::ogl_device() : executor_(L"ogl_device")\r
index 8d2f098debc1bc4796c6498ca273a9c2ceb85ea7..b15942a5954ce54059ac215d546026be99d1fe6a 100644 (file)
@@ -4,6 +4,8 @@
 \r
 #include <common/gl/gl_check.h>\r
 \r
+#include <gl/glew.h>\r
+\r
 #include <unordered_map>\r
 \r
 namespace caspar { namespace core {\r
index 2dc7c01f51f72f76707d92b540c75c9798ce8147..de3a20f9a8b9e014cd92042510d75f91a97a9814 100644 (file)
@@ -20,6 +20,7 @@
 #include "../../stdafx.h"\r
 \r
 #include "image_kernel.h"\r
+\r
 #include "blending_glsl.h"\r
 #include "../gpu/shader.h"\r
 #include "../gpu/device_buffer.h"\r
@@ -31,6 +32,8 @@
 #include <core/producer/frame/pixel_format.h>\r
 #include <core/producer/frame/image_transform.h>\r
 \r
+#include <GL/glew.h>\r
+\r
 #include <boost/noncopyable.hpp>\r
 \r
 #include <unordered_map>\r
index 506941957d3aea67c17bd745283303022135dfa5..6bd74165b3052e9bf8b8d0a3b2132b4d4efe8fe3 100644 (file)
 #include <core/producer/frame/pixel_format.h>\r
 #include <core/video_format.h>\r
 \r
+#include <gl/glew.h>\r
+\r
 #include <boost/foreach.hpp>\r
 #include <boost/range.hpp>\r
+#include <boost/range/algorithm/find.hpp>\r
 \r
 #include <algorithm>\r
 #include <array>\r
+#include <deque>\r
 #include <unordered_map>\r
 \r
 namespace caspar { namespace core {\r
index 3445a5b798eab56d60854747ddda9fe76f7d8ddc..fc05764580bfc17b558b0d35b4f9f916e6883f35 100644 (file)
@@ -45,6 +45,7 @@
 \r
 #include <boost/fusion/container/map.hpp>\r
 #include <boost/fusion/include/at_key.hpp>\r
+#include <boost/foreach.hpp>\r
 \r
 #include <tbb/parallel_invoke.h>\r
 \r
index 6e74e27d8d1f8fcf877052f1ebab29fcc652029b..aa6e3a6317139fc6ca2795b048d8c11a4ca9d842 100644 (file)
@@ -25,6 +25,8 @@
 #include "../frame/frame_factory.h"\r
 #include "../../mixer/write_frame.h"\r
 \r
+#include <common/exception/exceptions.h>\r
+\r
 #include <sstream>\r
 \r
 namespace caspar { namespace core {\r
index d0c26eee1f5e06cf4805d3b69b61da163299a567..e0880530ff8c3ae358229eed7ae82c496c92b5b4 100644 (file)
 \r
 #include "image_transform.h"\r
 #include "audio_transform.h"\r
-#include "pixel_format.h"\r
 #include "../../video_format.h"\r
 \r
-#include <boost/range/algorithm.hpp>\r
+#include <boost/foreach.hpp>\r
 \r
 namespace caspar { namespace core {\r
                                                                                                                                                                                                                                                                                                                \r
@@ -41,15 +40,23 @@ struct basic_frame::implementation
        \r
 public:\r
        implementation(const std::vector<safe_ptr<basic_frame>>& frames) \r
-               : mode_(core::video_mode::progressive), frames_(frames) {}\r
+               : mode_(core::video_mode::progressive), frames_(frames) \r
+       {\r
+       }\r
        implementation(std::vector<safe_ptr<basic_frame>>&& frames) \r
-               : mode_(core::video_mode::progressive), frames_(std::move(frames)){}\r
+               : mode_(core::video_mode::progressive), frames_(std::move(frames))\r
+       {\r
+       }\r
        implementation(safe_ptr<basic_frame>&& frame) \r
                : mode_(core::video_mode::progressive)\r
-               { frames_.push_back(std::move(frame));}\r
+       {\r
+               frames_.push_back(std::move(frame));\r
+       }\r
        implementation(const safe_ptr<basic_frame>& frame) \r
-               : mode_(core::video_mode::progressive)\r
-               { frames_.push_back(frame);}\r
+               : mode_(core::video_mode::progressive)          \r
+       { \r
+               frames_.push_back(frame);\r
+       }\r
        \r
        void accept(basic_frame& self, frame_visitor& visitor)\r
        {\r
index be9e005f4759589787e39a85fa35084e71e5eacb..a115f0dfaa6b30f558d382ba8b77ad13c3796d90 100644 (file)
@@ -28,6 +28,7 @@
 #include "separated/separated_producer.h"\r
 \r
 #include <common/memory/safe_ptr.h>\r
+#include <common/exception/exceptions.h>\r
 \r
 namespace caspar { namespace core {\r
        \r
index e9c531f9aed680aade98cefc73809aae6fea6fbc..ca5ce5e7b4aee60ca3100c0d4ffe970ea691a9f9 100644 (file)
 #include "layer.h"\r
 \r
 #include "frame_producer.h"\r
-\r
 #include "frame/basic_frame.h"\r
 \r
-\r
 namespace caspar { namespace core {\r
        \r
 struct layer::implementation\r
index 2e1425a47c3607fa0b91fb9eb302cf2b1aee3d13..404ccd645a626953dff37db51241495563ad9fa8 100644 (file)
 \r
 #include "stage.h"\r
 \r
-#include "../video_channel_context.h"\r
-\r
 #include "layer.h"\r
 \r
+#include "../video_channel_context.h"\r
+\r
 #include <core/producer/frame/basic_frame.h>\r
 #include <core/producer/frame/frame_factory.h>\r
 \r
 #include <common/concurrency/executor.h>\r
 \r
-#include <boost/range/algorithm.hpp>\r
+#include <boost/foreach.hpp>\r
 \r
 #include <map>\r
+#include <set>\r
 \r
 namespace caspar { namespace core {\r
                \r
index 25c43131a32454c6f42dee70c5e7306086d8d023..3aac12736360384cf6a904a3ded913af5849f4d3 100644 (file)
 #include "StdAfx.h"\r
 \r
 #include "video_channel.h"\r
+\r
 #include "video_channel_context.h"\r
 #include "video_format.h"\r
 \r
 #include "consumer/output.h"\r
 #include "mixer/mixer.h"\r
 #include "producer/stage.h"\r
-#include "producer/layer.h"\r
 \r
 #include <common/concurrency/executor.h>\r
 #include <common/diagnostics/graph.h>\r
 \r
-#include <boost/range/algorithm_ext/erase.hpp>\r
 #include <boost/timer.hpp>\r
 \r
 #ifdef _MSC_VER\r
index 332e8214ed7c708d92bf3ccf266a50d360a677d8..ce7615650701b2144a92d6681b12fe2d679be98f 100644 (file)
@@ -24,8 +24,6 @@
 \r
 #include <boost/algorithm/string.hpp>\r
 \r
-#include <array>\r
-\r
 #define DEFINE_VIDEOFORMATDESC(fmt, w, h, m, scale, duration, name) \\r
 { \\r
        (fmt), \\r
@@ -48,23 +46,23 @@ namespace caspar { namespace core {
        \r
 const video_format_desc format_descs[video_format::count] =  \r
 {                                                                         \r
-       DEFINE_VIDEOFORMATDESC(video_format::pal                ,720,  576,  video_mode::upper,                 25,             1,              TEXT("PAL")             ), \r
-       DEFINE_VIDEOFORMATDESC(video_format::ntsc               ,720,  486,  video_mode::lower,                 30000,  1001,   TEXT("NTSC")    ), \r
-       DEFINE_VIDEOFORMATDESC(video_format::x576p2500  ,720,  576,  video_mode::progressive,   25,             1,              TEXT("576p2500")),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x720p2500  ,1280, 720,  video_mode::progressive,   25,             1,              TEXT("720p2500")), \r
-       DEFINE_VIDEOFORMATDESC(video_format::x720p5000  ,1280, 720,  video_mode::progressive,   50,             1,              TEXT("720p5000")), \r
-       DEFINE_VIDEOFORMATDESC(video_format::x720p5994  ,1280, 720,  video_mode::progressive,   60000,  1001,   TEXT("720p5994")),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x720p6000  ,1280, 720,  video_mode::progressive,   60,             1,              TEXT("720p6000")),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x1080p2397 ,1920, 1080, video_mode::progressive,   24000,  1001,   TEXT("1080p2398")),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x1080p2400 ,1920, 1080, video_mode::progressive,   24,             1,              TEXT("1080p2400")),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x1080i5000 ,1920, 1080, video_mode::upper,                 25,             1,              TEXT("1080i5000")),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x1080i5994 ,1920, 1080, video_mode::upper,                 30000,  1001,   TEXT("1080i5994")),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x1080i6000 ,1920, 1080, video_mode::upper,                 30,             1,              TEXT("1080i6000")),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x1080p2500 ,1920, 1080, video_mode::progressive,   25,             1,              TEXT("1080p2500")),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x1080p2997 ,1920, 1080, video_mode::progressive,   30000,  1001,   TEXT("1080p2997")),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x1080p3000 ,1920, 1080, video_mode::progressive,   30,             1,              TEXT("1080p3000")),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x1080p5000 ,1920, 1080, video_mode::progressive,   50,             1,              TEXT("1080p5000")),\r
-       DEFINE_VIDEOFORMATDESC(video_format::invalid    ,0,             0, video_mode::count,                   1,              1,              TEXT("invalid"))\r
+       DEFINE_VIDEOFORMATDESC(video_format::pal                ,720,  576,  video_mode::upper,                 25,             1,              L"PAL"), \r
+       DEFINE_VIDEOFORMATDESC(video_format::ntsc               ,720,  486,  video_mode::lower,                 30000,  1001,   L"NTSC"), \r
+       DEFINE_VIDEOFORMATDESC(video_format::x576p2500  ,720,  576,  video_mode::progressive,   25,             1,              L"576p2500"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x720p2500  ,1280, 720,  video_mode::progressive,   25,             1,              L"720p2500"), \r
+       DEFINE_VIDEOFORMATDESC(video_format::x720p5000  ,1280, 720,  video_mode::progressive,   50,             1,              L"720p5000"), \r
+       DEFINE_VIDEOFORMATDESC(video_format::x720p5994  ,1280, 720,  video_mode::progressive,   60000,  1001,   L"720p5994"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x720p6000  ,1280, 720,  video_mode::progressive,   60,             1,              L"720p6000"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x1080p2397 ,1920, 1080, video_mode::progressive,   24000,  1001,   L"1080p2398"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x1080p2400 ,1920, 1080, video_mode::progressive,   24,             1,              L"1080p2400"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x1080i5000 ,1920, 1080, video_mode::upper,                 25,             1,              L"1080i5000"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x1080i5994 ,1920, 1080, video_mode::upper,                 30000,  1001,   L"1080i5994"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x1080i6000 ,1920, 1080, video_mode::upper,                 30,             1,              L"1080i6000"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x1080p2500 ,1920, 1080, video_mode::progressive,   25,             1,              L"1080p2500"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x1080p2997 ,1920, 1080, video_mode::progressive,   30000,  1001,   L"1080p2997"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x1080p3000 ,1920, 1080, video_mode::progressive,   30,             1,              L"1080p3000"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x1080p5000 ,1920, 1080, video_mode::progressive,   50,             1,              L"1080p5000"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::invalid    ,0,             0, video_mode::count,                   1,              1,              L"invalid")\r
 };\r
 \r
 const video_format_desc& video_format_desc::get(video_format::type format)     \r