// Fix frames \r
BOOST_FOREACH(auto& item, layer.items) \r
{\r
- if(std::abs(item.transform.fill_scale[1]-1.0) > 1.0/target_texture->height() ||\r
- std::abs(item.transform.fill_translation[1]) > 1.0/target_texture->height()) \r
- CASPAR_LOG(warning) << L"[image_mixer] Frame should be deinterlaced. Send FILTER DEINTERLACE_BOB when creating producer."; \r
+ //if(std::abs(item.transform.fill_scale[1]-1.0) > 1.0/target_texture->height() ||\r
+ // std::abs(item.transform.fill_translation[1]) > 1.0/target_texture->height()) \r
+ // CASPAR_LOG(warning) << L"[image_mixer] Frame should be deinterlaced. Send FILTER DEINTERLACE_BOB when creating producer."; \r
\r
if(item.pix_desc.planes.at(0).height == 480) // NTSC DV\r
{\r
data_ = (uint8_t*)GL2(glMapBuffer(target_, usage_ == GL_STREAM_DRAW ? GL_WRITE_ONLY : GL_READ_ONLY)); \r
\r
if(timer.elapsed() > 0.01)\r
- CASPAR_LOG(warning) << L"[buffer] Performance warning. Buffer mapping blocked more than 10ms.";\r
+ CASPAR_LOG(warning) << L"[buffer] Performance warning. Buffer mapping blocked more than 10ms: " << timer.elapsed();\r
\r
GL(glBindBuffer(target_, 0));\r
if(!data_)\r
#include <array>\r
#include <unordered_map>\r
\r
+#include <asmlib.h>\r
+#include <tbb/parallel_for.h>\r
+\r
tbb::atomic<int> g_count = tbb::atomic<int>();\r
\r
namespace caspar { namespace accelerator { namespace ogl {\r
\r
boost::unique_future<spl::shared_ptr<texture>> copy_async(const array<std::uint8_t>& source, int width, int height, int stride)\r
{\r
- auto buf = source.storage<spl::shared_ptr<buffer>>();\r
- \r
+ //auto buf = source.storage<spl::shared_ptr<buffer>>();\r
+ auto buf = create_buffer(source.size(), buffer::usage::write_only);\r
+ tbb::parallel_for(tbb::blocked_range<std::size_t>(0, source.size()), [&](const tbb::blocked_range<std::size_t>& r)\r
+ {\r
+ A_memcpy(buf->data() + r.begin(), source.data() + r.begin(), r.size());\r
+ });\r
+\r
return render_executor_.begin_invoke([=]() -> spl::shared_ptr<texture>\r
{\r
auto texture = create_texture(width, height, stride, false);\r