lock.h
log.h
memory.h
+ memcpy.h
+ memset.h
memshfl.h
param.h
polling_filesystem_monitor.h
add_precompiled_header(common stdafx.h FORCEINCLUDE)
include_directories(..)
+include_directories(${ASMLIB_INCLUDE_PATH})
include_directories(${BOOST_INCLUDE_PATH})
include_directories(${RXCPP_INCLUDE_PATH})
include_directories(${TBB_INCLUDE_PATH})
--- /dev/null
+/*
+* Copyright (c) 2011 Sveriges Television AB <info@casparcg.com>
+*
+* This file is part of CasparCG (www.casparcg.com).
+*
+* CasparCG is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* CasparCG is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with CasparCG. If not, see <http://www.gnu.org/licenses/>.
+*
+* Author: Helge Norberg, helge.norberg@svt.se
+*/
+
+#pragma once
+
+#include <asmlib.h>
+
+#include <tbb/parallel_for.h>
+
+namespace caspar {
+
+static void fast_memcpy(void* dest, const void* src, std::size_t size)
+{
+ tbb::affinity_partitioner partitioner;
+ tbb::parallel_for(tbb::blocked_range<std::size_t>(0, size, size / 128), [&](const tbb::blocked_range<size_t>& range)
+ {
+ A_memcpy(
+ reinterpret_cast<std::uint8_t*>(dest) + range.begin(),
+ reinterpret_cast<const std::uint8_t*>(src) + range.begin(),
+ range.size());
+ }, partitioner);
+}
+
+}
--- /dev/null
+/*
+* Copyright (c) 2011 Sveriges Television AB <info@casparcg.com>
+*
+* This file is part of CasparCG (www.casparcg.com).
+*
+* CasparCG is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* CasparCG is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with CasparCG. If not, see <http://www.gnu.org/licenses/>.
+*
+* Author: Helge Norberg, helge.norberg@svt.se
+*/
+
+#pragma once
+
+#include <asmlib.h>
+
+#include <tbb/parallel_for.h>
+
+namespace caspar {
+
+static void fast_memset(void* dest, int c, std::size_t size)
+{
+ tbb::affinity_partitioner partitioner;
+ tbb::parallel_for(tbb::blocked_range<std::size_t>(0, size, size / 128), [&](const tbb::blocked_range<size_t>& range)
+ {
+ A_memset(
+ reinterpret_cast<std::uint8_t*>(dest) + range.begin(),
+ c,
+ range.size());
+ }, partitioner);
+}
+
+}
#include <common/diagnostics/graph.h>
#include <common/prec_timer.h>
#include <common/array.h>
+#include <common/memset.h>
+#include <common/memcpy.h>
#include <boost/filesystem.hpp>
#include <boost/property_tree/ptree.hpp>
#include <tbb/spin_mutex.h>
-#include <asmlib.h>
-
#include <functional>
namespace caspar { namespace flash {
desc.planes.push_back(core::pixel_format_desc::plane(width_, height_, 4));
auto frame = frame_factory_->create_frame(this, desc, core::audio_channel_layout::invalid());
- A_memset(bmp_.data(), 0, width_ * height_ * 4);
+ fast_memset(bmp_.data(), 0, width_ * height_ * 4);
ax_->DrawControl(bmp_);
- A_memcpy(frame.image_data(0).begin(), bmp_.data(), width_*height_*4);
+ fast_memcpy(frame.image_data(0).begin(), bmp_.data(), width_*height_*4);
head_ = core::draw_frame(std::move(frame));
}