<ClInclude Include="producer\binding.h" />\r
<ClInclude Include="producer\draw\freehand_producer.h" />\r
<ClInclude Include="producer\scene\const_producer.h" />\r
+ <ClInclude Include="producer\scene\hotswap_producer.h" />\r
<ClInclude Include="producer\scene\scene_producer.h" />\r
<ClInclude Include="producer\text\text_producer.h" />\r
<ClInclude Include="producer\text\utils\color.h" />\r
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">../../StdAfx.h</PrecompiledHeaderFile>\r
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">../../StdAfx.h</PrecompiledHeaderFile>\r
</ClCompile>\r
+ <ClCompile Include="producer\scene\hotswap_producer.cpp">\r
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">../../StdAfx.h</PrecompiledHeaderFile>\r
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">../../StdAfx.h</PrecompiledHeaderFile>\r
+ </ClCompile>\r
<ClCompile Include="producer\scene\scene_producer.cpp">\r
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">../../StdAfx.h</PrecompiledHeaderFile>\r
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">../../StdAfx.h</PrecompiledHeaderFile>\r
<ClInclude Include="producer\text\utils\string_metrics.h">\r
<Filter>source\producer\text\utils</Filter>\r
</ClInclude>\r
+ <ClInclude Include="producer\scene\hotswap_producer.h">\r
+ <Filter>source\producer\scene</Filter>\r
+ </ClInclude>\r
</ItemGroup>\r
<ItemGroup>\r
<ClCompile Include="producer\transition\transition_producer.cpp">\r
<ClCompile Include="producer\text\utils\texture_atlas.cpp">\r
<Filter>source\producer\text\utils</Filter>\r
</ClCompile>\r
+ <ClCompile Include="producer\scene\hotswap_producer.cpp">\r
+ <Filter>source\producer\scene</Filter>\r
+ </ClCompile>\r
</ItemGroup>\r
</Project>
\ No newline at end of file
binding<T> otherwise(T false_result)
{
- return otherwise(binding<T>(false_result))
+ return otherwise(binding<T>(false_result));
}
};
auto& lower_left = scene->create_layer(create_producer(frame_factory, format_desc, create_param(L"scene/lower_left")));
auto& lower_right = scene->create_layer(create_producer(frame_factory, format_desc, create_param(L"scene/lower_right")));
+ /*
binding<double> panel_x = (scene->frame()
.as<double>()
.transformed([](double v) { return std::sin(v / 20.0); })
* 20.0
+ 40.0)
.transformed([](double v) { return std::floor(v); }); // snap to pixels instead of subpixels
- binding<double> panel_y = when(car_layer.hidden).then(500.0).otherwise(-panel_x + 300);
+ */
+ tweener tween(L"easeinoutsine");
+ binding<double> panel_x = when(scene->frame() < 50)
+ .then(scene->frame().as<double>().transformed([tween](double t) { return tween(t, 0.0, 200, 50); }))
+ .otherwise(200.0);
+ //binding<double> panel_y = when(car_layer.hidden).then(500.0).otherwise(-panel_x + 300);
+ binding<double> panel_y(500.0);
upper_left.position.x = panel_x;
upper_left.position.y = panel_y;
upper_right.position.x = upper_left.position.x + upper_left.producer.get()->pixel_constraints().width + panel_width;
return text_producer::create(frame_factory, x, y, params.at(1), text_info, format_desc.width, format_desc.height, true);
}
-}}
\ No newline at end of file
+}}
#include <core/producer/text/text_producer.h>
#include <core/producer/scene/scene_producer.h>
#include <core/producer/scene/const_producer.h>
+#include <core/producer/scene/hotswap_producer.h>
#include <core/frame/draw_frame.h>
#include <common/env.h>
#include <boost/filesystem.hpp>
#include <boost/foreach.hpp>
#include <boost/thread/future.hpp>
+#include <boost/algorithm/string.hpp>
namespace caspar { namespace psd {
}
else if((*it)->image() && (*it)->visible())
{
- core::pixel_format_desc pfd(core::pixel_format::bgra);
- pfd.planes.push_back(core::pixel_format_desc::plane((*it)->rect().width(), (*it)->rect().height(), 4));
+ std::wstring layer_name = (*it)->name();
+ std::shared_ptr<core::frame_producer> layer_producer;
- auto frame = frame_factory->create_frame(it->get(), pfd);
- memcpy(frame.image_data().data(), (*it)->image()->data(), frame.image_data().size());
+ if (boost::algorithm::istarts_with(layer_name, L"[producer]"))
+ {
+ auto hotswap = std::make_shared<core::hotswap_producer>((*it)->rect().width(), (*it)->rect().height());
+ hotswap->producer().set(core::create_producer(frame_factory, format_desc, layer_name.substr(10)));
+ layer_producer = hotswap;
+ }
+ else
+ {
+ core::pixel_format_desc pfd(core::pixel_format::bgra);
+ pfd.planes.push_back(core::pixel_format_desc::plane((*it)->rect().width(), (*it)->rect().height(), 4));
- auto layer_producer = core::create_const_producer(core::draw_frame(std::move(frame)), (*it)->rect().width(), (*it)->rect().height());
+ auto frame = frame_factory->create_frame(it->get(), pfd);
+ memcpy(frame.image_data().data(), (*it)->image()->data(), frame.image_data().size());
+
+ layer_producer = core::create_const_producer(core::draw_frame(std::move(frame)), (*it)->rect().width(), (*it)->rect().height());
+ }
- auto& new_layer = root->create_layer(layer_producer, (*it)->rect().left, (*it)->rect().top);
+ auto& new_layer = root->create_layer(spl::make_shared_ptr(layer_producer), (*it)->rect().left, (*it)->rect().top);
new_layer.adjustments.opacity.set((*it)->opacity() / 255.0);
new_layer.hidden.set(!(*it)->visible());