]> git.sesse.net Git - casparcg/commitdiff
Use asmlib instead of our own custom memory functions.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sat, 10 Dec 2011 23:41:46 +0000 (23:41 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sat, 10 Dec 2011 23:41:46 +0000 (23:41 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/64bit-exp@1869 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

15 files changed:
common/common.vcxproj
common/common.vcxproj.filters
common/memory/memclr.h [deleted file]
common/memory/memcpy.h [deleted file]
common/memory/memshfl.h
dependencies64/dependencies64.exe
modules/bluefish/consumer/bluefish_consumer.cpp
modules/decklink/consumer/decklink_consumer.cpp
modules/decklink/producer/decklink_producer.cpp
modules/ffmpeg/producer/util/util.cpp
modules/flash/producer/flash_producer.cpp
modules/image/producer/image_scroll_producer.cpp
modules/ogl/consumer/ogl_consumer.cpp
shell/casparcg.config
shell/shell.vcxproj

index 006ed35394485a0adb2c9877b582069357625ab5..737fc0e0c5e13580a06265873da22144324e6234 100644 (file)
     <ClInclude Include="exception\win32_exception.h" />\r
     <ClInclude Include="gl\gl_check.h" />\r
     <ClInclude Include="log\log.h" />\r
-    <ClInclude Include="memory\memclr.h" />\r
-    <ClInclude Include="memory\memcpy.h" />\r
     <ClInclude Include="memory\memshfl.h" />\r
     <ClInclude Include="memory\page_locked_allocator.h" />\r
     <ClInclude Include="memory\safe_ptr.h" />\r
index a6a80de9c8faffb049f4d819b75d5f771cda77f1..e28bb9a62a96d86cff47880c5bf716489616e4f7 100644 (file)
     <ClInclude Include="utility\tweener.h">\r
       <Filter>source\utility</Filter>\r
     </ClInclude>\r
-    <ClInclude Include="memory\memcpy.h">\r
-      <Filter>source\memory</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="memory\memclr.h">\r
-      <Filter>source\memory</Filter>\r
-    </ClInclude>\r
     <ClInclude Include="os\windows\current_version.h">\r
       <Filter>source\os\windows</Filter>\r
     </ClInclude>\r
diff --git a/common/memory/memclr.h b/common/memory/memclr.h
deleted file mode 100644 (file)
index 2846475..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*\r
-* Copyright (c) 2011 Sveriges Television AB <info@casparcg.com>\r
-*\r
-* This file is part of CasparCG (www.casparcg.com).\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
-* Author: Robert Nagy, ronag89@gmail.com\r
-*/\r
-\r
-#pragma once\r
-\r
-#include <assert.h>\r
-\r
-#include <cstring>\r
-\r
-namespace caspar {\r
-\r
-static void* fast_memclr(void* dest, size_t count)\r
-{\r
-       return memset(dest, 0, count);\r
-       //if(count < 2048)\r
-       //      return memset(dest, 0, count);\r
-\r
-       //assert(dest != nullptr);\r
-       //\r
-       //size_t rest = count % 128;\r
-       //count -= rest;\r
-\r
-       //__asm   \r
-       //{              \r
-       //      mov edi, dest;    \r
-       //      mov ebx, count;     \r
-       //      shr ebx, 7;\r
-       //      pxor xmm0, xmm0; \r
-\r
-       //      clr:             \r
-       //              movntdq [edi+00h], xmm0;\r
-       //              movntdq [edi+10h], xmm0;\r
-       //              movntdq [edi+20h], xmm0;    \r
-       //              movntdq [edi+30h], xmm0;\r
-       //              \r
-       //              movntdq [edi+40h], xmm0; \r
-       //              movntdq [edi+50h], xmm0;      \r
-       //              movntdq [edi+60h], xmm0;    \r
-       //              movntdq [edi+70h], xmm0;    \r
-\r
-       //              lea edi, [edi+80h];         \r
-\r
-       //              dec ebx;      \r
-       //      jnz clr;  \r
-       //}   \r
-       //return memset(reinterpret_cast<char*>(dest)+count, 0, rest);\r
-}\r
-\r
-}
\ No newline at end of file
diff --git a/common/memory/memcpy.h b/common/memory/memcpy.h
deleted file mode 100644 (file)
index 2d459ca..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-/*\r
-* Copyright (c) 2011 Sveriges Television AB <info@casparcg.com>\r
-*\r
-* This file is part of CasparCG (www.casparcg.com).\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
-* Author: Robert Nagy, ronag89@gmail.com\r
-*/\r
-\r
-#pragma once\r
-\r
-#include "../utility/assert.h"\r
-#include "../memory/safe_ptr.h"\r
-\r
-#include <assert.h>\r
-#include <intrin.h>\r
-\r
-namespace caspar {\r
-\r
-namespace detail {\r
-\r
-struct true_type{};\r
-struct false_type{};\r
-\r
-template<typename D_A = false_type, typename S_A = false_type>\r
-struct memcpy_impl\r
-{\r
-       void* operator()(void* dest, const void* source, size_t count)\r
-       {               \r
-               CASPAR_ASSERT(dest != nullptr);\r
-               CASPAR_ASSERT(source != nullptr);\r
-               \r
-               auto dest128   = reinterpret_cast<__m128i*>(dest);\r
-               auto source128 = reinterpret_cast<const __m128i*>(source);\r
-               \r
-               size_t rest = count & 255;\r
-               count &= ~255;\r
-\r
-               for(int n = 0; n < count; n += 256)\r
-               {\r
-                       auto xmm0  = _mm_loadu_si128(source128++);\r
-                       auto xmm1  = _mm_loadu_si128(source128++);\r
-                       auto xmm2  = _mm_loadu_si128(source128++);\r
-                       auto xmm3  = _mm_loadu_si128(source128++);\r
-                       auto xmm4  = _mm_loadu_si128(source128++);\r
-                       auto xmm5  = _mm_loadu_si128(source128++);\r
-                       auto xmm6  = _mm_loadu_si128(source128++);\r
-                       auto xmm7  = _mm_loadu_si128(source128++);\r
-                       auto xmm8  = _mm_loadu_si128(source128++);\r
-                       auto xmm9  = _mm_loadu_si128(source128++);\r
-                       auto xmm10 = _mm_loadu_si128(source128++);\r
-                       auto xmm11 = _mm_loadu_si128(source128++);\r
-                       auto xmm12 = _mm_loadu_si128(source128++);\r
-                       auto xmm13 = _mm_loadu_si128(source128++);\r
-                       auto xmm14 = _mm_loadu_si128(source128++);\r
-                       auto xmm15 = _mm_loadu_si128(source128++);\r
-                       auto xmm16 = _mm_loadu_si128(source128++);\r
-\r
-                       _mm_storeu_si128(dest128++, xmm0);\r
-                       _mm_storeu_si128(dest128++, xmm1);\r
-                       _mm_storeu_si128(dest128++, xmm2);\r
-                       _mm_storeu_si128(dest128++, xmm3);\r
-                       _mm_storeu_si128(dest128++, xmm4);\r
-                       _mm_storeu_si128(dest128++, xmm5);\r
-                       _mm_storeu_si128(dest128++, xmm6);\r
-                       _mm_storeu_si128(dest128++, xmm7);\r
-                       _mm_storeu_si128(dest128++, xmm8);\r
-                       _mm_storeu_si128(dest128++, xmm9);\r
-                       _mm_storeu_si128(dest128++, xmm10);\r
-                       _mm_storeu_si128(dest128++, xmm11);\r
-                       _mm_storeu_si128(dest128++, xmm12);\r
-                       _mm_storeu_si128(dest128++, xmm13);\r
-                       _mm_storeu_si128(dest128++, xmm14);\r
-                       _mm_storeu_si128(dest128++, xmm15);\r
-                       _mm_storeu_si128(dest128++, xmm16);\r
-               }\r
-               \r
-               return memcpy(reinterpret_cast<int8_t*>(dest)+count, reinterpret_cast<const int8_t*>(source)+count, rest);\r
-       }\r
-};\r
-\r
-template<>\r
-struct memcpy_impl<true_type, true_type>\r
-{\r
-       void* operator()(void* dest, const void* source, size_t count)\r
-       {\r
-               CASPAR_ASSERT(dest != nullptr);\r
-               CASPAR_ASSERT(source != nullptr);\r
-               CASPAR_ASSERT(reinterpret_cast<int>(dest) % 16 == 0);\r
-               CASPAR_ASSERT(reinterpret_cast<int>(source) % 16 == 0);\r
-               \r
-               auto dest128   = reinterpret_cast<__m128i*>(dest);\r
-               auto source128 = reinterpret_cast<const __m128i*>(source);\r
-               \r
-               size_t rest = count % 256;\r
-               count -= rest;\r
-\r
-               for(int n = 0; n < count; n += 256)\r
-               {\r
-                       auto xmm0  = _mm_load_si128(source128++);\r
-                       auto xmm1  = _mm_load_si128(source128++);\r
-                       auto xmm2  = _mm_load_si128(source128++);\r
-                       auto xmm3  = _mm_load_si128(source128++);\r
-                       auto xmm4  = _mm_load_si128(source128++);\r
-                       auto xmm5  = _mm_load_si128(source128++);\r
-                       auto xmm6  = _mm_load_si128(source128++);\r
-                       auto xmm7  = _mm_load_si128(source128++);\r
-                       auto xmm8  = _mm_load_si128(source128++);\r
-                       auto xmm9  = _mm_load_si128(source128++);\r
-                       auto xmm10 = _mm_load_si128(source128++);\r
-                       auto xmm11 = _mm_load_si128(source128++);\r
-                       auto xmm12 = _mm_load_si128(source128++);\r
-                       auto xmm13 = _mm_load_si128(source128++);\r
-                       auto xmm14 = _mm_load_si128(source128++);\r
-                       auto xmm15 = _mm_load_si128(source128++);\r
-                       auto xmm16 = _mm_load_si128(source128++);\r
-\r
-                       _mm_stream_si128(dest128++, xmm0);\r
-                       _mm_stream_si128(dest128++, xmm1);\r
-                       _mm_stream_si128(dest128++, xmm2);\r
-                       _mm_stream_si128(dest128++, xmm3);\r
-                       _mm_stream_si128(dest128++, xmm4);\r
-                       _mm_stream_si128(dest128++, xmm5);\r
-                       _mm_stream_si128(dest128++, xmm6);\r
-                       _mm_stream_si128(dest128++, xmm7);\r
-                       _mm_stream_si128(dest128++, xmm8);\r
-                       _mm_stream_si128(dest128++, xmm9);\r
-                       _mm_stream_si128(dest128++, xmm10);\r
-                       _mm_stream_si128(dest128++, xmm11);\r
-                       _mm_stream_si128(dest128++, xmm12);\r
-                       _mm_stream_si128(dest128++, xmm13);\r
-                       _mm_stream_si128(dest128++, xmm14);\r
-                       _mm_stream_si128(dest128++, xmm15);\r
-                       _mm_stream_si128(dest128++, xmm16);\r
-               }\r
-               \r
-               return memcpy(reinterpret_cast<int8_t*>(dest)+count, reinterpret_cast<const int8_t*>(source)+count, rest);\r
-       }\r
-};\r
-\r
-template<>\r
-struct memcpy_impl<true_type, false_type>\r
-{\r
-       void* operator()(void* dest, const void* source, size_t count)\r
-       {\r
-               CASPAR_ASSERT(dest != nullptr);\r
-               CASPAR_ASSERT(source != nullptr);\r
-               CASPAR_ASSERT(reinterpret_cast<int>(dest) % 16 == 0);\r
-               \r
-               auto dest128   = reinterpret_cast<__m128i*>(dest);\r
-               auto source128 = reinterpret_cast<const __m128i*>(source);\r
-               \r
-               size_t rest = count % 256;\r
-               count -= rest;\r
-\r
-               for(int n = 0; n < count; n += 256)\r
-               {\r
-                       auto xmm0  = _mm_loadu_si128(source128++);\r
-                       auto xmm1  = _mm_loadu_si128(source128++);\r
-                       auto xmm2  = _mm_loadu_si128(source128++);\r
-                       auto xmm3  = _mm_loadu_si128(source128++);\r
-                       auto xmm4  = _mm_loadu_si128(source128++);\r
-                       auto xmm5  = _mm_loadu_si128(source128++);\r
-                       auto xmm6  = _mm_loadu_si128(source128++);\r
-                       auto xmm7  = _mm_loadu_si128(source128++);\r
-                       auto xmm8  = _mm_loadu_si128(source128++);\r
-                       auto xmm9  = _mm_loadu_si128(source128++);\r
-                       auto xmm10 = _mm_loadu_si128(source128++);\r
-                       auto xmm11 = _mm_loadu_si128(source128++);\r
-                       auto xmm12 = _mm_loadu_si128(source128++);\r
-                       auto xmm13 = _mm_loadu_si128(source128++);\r
-                       auto xmm14 = _mm_loadu_si128(source128++);\r
-                       auto xmm15 = _mm_loadu_si128(source128++);\r
-                       auto xmm16 = _mm_loadu_si128(source128++);\r
-\r
-                       _mm_stream_si128(dest128++, xmm0);\r
-                       _mm_stream_si128(dest128++, xmm1);\r
-                       _mm_stream_si128(dest128++, xmm2);\r
-                       _mm_stream_si128(dest128++, xmm3);\r
-                       _mm_stream_si128(dest128++, xmm4);\r
-                       _mm_stream_si128(dest128++, xmm5);\r
-                       _mm_stream_si128(dest128++, xmm6);\r
-                       _mm_stream_si128(dest128++, xmm7);\r
-                       _mm_stream_si128(dest128++, xmm8);\r
-                       _mm_stream_si128(dest128++, xmm9);\r
-                       _mm_stream_si128(dest128++, xmm10);\r
-                       _mm_stream_si128(dest128++, xmm11);\r
-                       _mm_stream_si128(dest128++, xmm12);\r
-                       _mm_stream_si128(dest128++, xmm13);\r
-                       _mm_stream_si128(dest128++, xmm14);\r
-                       _mm_stream_si128(dest128++, xmm15);\r
-                       _mm_stream_si128(dest128++, xmm16);\r
-               }\r
-               \r
-               return memcpy(reinterpret_cast<int8_t*>(dest)+count, reinterpret_cast<const int8_t*>(source)+count, rest);\r
-       }\r
-};\r
-\r
-template<>\r
-struct memcpy_impl<false_type, true_type>\r
-{\r
-       void* operator()(void* dest, const void* source, size_t count)\r
-       {\r
-               CASPAR_ASSERT(dest != nullptr);\r
-               CASPAR_ASSERT(source != nullptr);\r
-               CASPAR_ASSERT(reinterpret_cast<int>(source) % 16 == 0);\r
-               \r
-               auto dest128   = reinterpret_cast<__m128i*>(dest);\r
-               auto source128 = reinterpret_cast<const __m128i*>(source);\r
-               \r
-               size_t rest = count % 256;\r
-               count -= rest;\r
-\r
-               for(int n = 0; n < count; n += 256)\r
-               {\r
-                       auto xmm0  = _mm_load_si128(source128++);\r
-                       auto xmm1  = _mm_load_si128(source128++);\r
-                       auto xmm2  = _mm_load_si128(source128++);\r
-                       auto xmm3  = _mm_load_si128(source128++);\r
-                       auto xmm4  = _mm_load_si128(source128++);\r
-                       auto xmm5  = _mm_load_si128(source128++);\r
-                       auto xmm6  = _mm_load_si128(source128++);\r
-                       auto xmm7  = _mm_load_si128(source128++);\r
-                       auto xmm8  = _mm_load_si128(source128++);\r
-                       auto xmm9  = _mm_load_si128(source128++);\r
-                       auto xmm10 = _mm_load_si128(source128++);\r
-                       auto xmm11 = _mm_load_si128(source128++);\r
-                       auto xmm12 = _mm_load_si128(source128++);\r
-                       auto xmm13 = _mm_load_si128(source128++);\r
-                       auto xmm14 = _mm_load_si128(source128++);\r
-                       auto xmm15 = _mm_load_si128(source128++);\r
-                       auto xmm16 = _mm_load_si128(source128++);\r
-\r
-                       _mm_storeu_si128(dest128++, xmm0);\r
-                       _mm_storeu_si128(dest128++, xmm1);\r
-                       _mm_storeu_si128(dest128++, xmm2);\r
-                       _mm_storeu_si128(dest128++, xmm3);\r
-                       _mm_storeu_si128(dest128++, xmm4);\r
-                       _mm_storeu_si128(dest128++, xmm5);\r
-                       _mm_storeu_si128(dest128++, xmm6);\r
-                       _mm_storeu_si128(dest128++, xmm7);\r
-                       _mm_storeu_si128(dest128++, xmm8);\r
-                       _mm_storeu_si128(dest128++, xmm9);\r
-                       _mm_storeu_si128(dest128++, xmm10);\r
-                       _mm_storeu_si128(dest128++, xmm11);\r
-                       _mm_storeu_si128(dest128++, xmm12);\r
-                       _mm_storeu_si128(dest128++, xmm13);\r
-                       _mm_storeu_si128(dest128++, xmm14);\r
-                       _mm_storeu_si128(dest128++, xmm15);\r
-                       _mm_storeu_si128(dest128++, xmm16);\r
-               }\r
-\r
-               return memcpy(reinterpret_cast<int8_t*>(dest)+count, reinterpret_cast<const int8_t*>(source)+count, rest);\r
-       }\r
-};\r
-\r
-}\r
-\r
-template<typename T>\r
-T* fast_memcpy(T* dest, const void* source, size_t count)\r
-{  \r
-       //auto s_align = reinterpret_cast<int>(source) & 15;\r
-       //auto d_align = reinterpret_cast<int>(dest) & 15;\r
-       \r
-       //if(s_align == 0 && s_align == 0)\r
-       //      return reinterpret_cast<T*>(detail::memcpy_impl<detail::true_type, detail::true_type>()(dest, source, count));\r
-       //else if(d_align == 0)\r
-       //      return reinterpret_cast<T*>(detail::memcpy_impl<detail::true_type, detail::false_type>()(dest, source, count));\r
-       //else if(s_align == 0)\r
-       //      return reinterpret_cast<T*>(detail::memcpy_impl<detail::false_type, detail::true_type>()(dest, source, count));\r
-\r
-       //return reinterpret_cast<T*>(detail::memcpy_impl<detail::false_type, detail::false_type>()(dest, source, count));\r
-       return reinterpret_cast<T*>(memcpy(dest, source, count));\r
-}\r
-\r
-}\r
index c776e3b952d7cc78c05a6aef6e2160877d4559da..d29e5698e54aa3490eb5475f09c73d5ee9459e11 100644 (file)
 #include <tbb/parallel_for.h>\r
 \r
 namespace caspar {\r
-\r
-namespace internal {\r
-\r
-static void* fast_memshfl(void* dest, const void* source, size_t count, int m1, int m2, int m3, int m4)\r
-{\r
+       \r
+static void* aligned_memshfl(void* dest, const void* source, size_t count, int m1, int m2, int m3, int m4)\r
+{    \r
        __m128i*           dest128 = reinterpret_cast<__m128i*>(dest);  \r
        const __m128i* source128 = reinterpret_cast<const __m128i*>(source);\r
 \r
@@ -56,18 +54,5 @@ static void* fast_memshfl(void* dest, const void* source, size_t count, int m1,
        return dest;\r
 }\r
 \r
-}\r
-\r
-static void* fast_memshfl(void* dest, const void* source, size_t count, int m1, int m2, int m3, int m4)\r
-{   \r
-       tbb::affinity_partitioner ap;\r
-       tbb::parallel_for(tbb::blocked_range<size_t>(0, count/128), [&](const tbb::blocked_range<size_t>& r)\r
-       {       \r
-               internal::fast_memshfl(reinterpret_cast<char*>(dest) + r.begin()*128, reinterpret_cast<const char*>(source) + r.begin()*128, r.size()*128, m1, m2, m3, m4);   \r
-       }, ap);\r
-\r
-       return dest;\r
-}\r
-\r
 \r
 }
\ No newline at end of file
index 0cbfd770c93ac754e376d1b90353b4efec2650d4..96e01aa746a5c78dc3bd38fb7935da0480dd8d04 100644 (file)
Binary files a/dependencies64/dependencies64.exe and b/dependencies64/dependencies64.exe differ
index ce65b5b34e3e9a8f79fa3c72af263956da6e4ae7..768306b2f8d73cc8e2401e03bcdb9dce25beeed9 100644 (file)
 \r
 #include <common/concurrency/executor.h>\r
 #include <common/diagnostics/graph.h>\r
-#include <common/memory/memclr.h>\r
-#include <common/memory/memcpy.h>\r
 #include <common/memory/memshfl.h>\r
 #include <common/utility/timer.h>\r
+#include <common/utility/assert.h>\r
 \r
 #include <core/consumer/frame_consumer.h>\r
 #include <core/mixer/audio/audio_util.h>\r
@@ -219,12 +218,12 @@ public:
                if(!frame->image_data().empty())\r
                {\r
                        if(key_only_)                                           \r
-                               fast_memshfl(reserved_frames_.front()->image_data(), std::begin(frame->image_data()), frame->image_data().size(), 0x0F0F0F0F, 0x0B0B0B0B, 0x07070707, 0x03030303);\r
+                               aligned_memshfl(reserved_frames_.front()->image_data(), std::begin(frame->image_data()), frame->image_data().size(), 0x0F0F0F0F, 0x0B0B0B0B, 0x07070707, 0x03030303);\r
                        else\r
-                               fast_memcpy(reserved_frames_.front()->image_data(), std::begin(frame->image_data()), frame->image_data().size());\r
+                               memcpy(reserved_frames_.front()->image_data(), std::begin(frame->image_data()), frame->image_data().size());\r
                }\r
                else\r
-                       fast_memclr(reserved_frames_.front()->image_data(), reserved_frames_.front()->image_size());\r
+                       memset(reserved_frames_.front()->image_data(), 0, reserved_frames_.front()->image_size());\r
                                                                \r
 \r
                // Send and display\r
index 7d62a95a92467a2f2699b95242b5f4ec0c1cbf4f..b53578af2467e577bc072eae6f2de24f012e9a1f 100644 (file)
@@ -32,9 +32,8 @@
 #include <common/concurrency/com_context.h>\r
 #include <common/diagnostics/graph.h>\r
 #include <common/exception/exceptions.h>\r
-#include <common/memory/memcpy.h>\r
-#include <common/memory/memclr.h>\r
 #include <common/memory/memshfl.h>\r
+#include <common/utility/assert.h>\r
 \r
 #include <core/consumer/frame_consumer.h>\r
 \r
@@ -124,7 +123,7 @@ public:
                        if(key_data_.empty())\r
                        {\r
                                key_data_.resize(frame_->image_data().size());\r
-                               fast_memshfl(key_data_.data(), frame_->image_data().begin(), frame_->image_data().size(), 0x0F0F0F0F, 0x0B0B0B0B, 0x07070707, 0x03030303);\r
+                               aligned_memshfl(key_data_.data(), frame_->image_data().begin(), frame_->image_data().size(), 0x0F0F0F0F, 0x0B0B0B0B, 0x07070707, 0x03030303);\r
                                frame_.reset();\r
                        }\r
                        *buffer = key_data_.data();\r
index 647a9f0d4999e5e331a6a7df3bcb2c23ff4f1d9f..8e20f008909a9e1c3f0dcaff6f7f162e4f24e80c 100644 (file)
@@ -35,7 +35,6 @@
 #include <common/diagnostics/graph.h>\r
 #include <common/exception/exceptions.h>\r
 #include <common/log/log.h>\r
-#include <common/memory/memclr.h>\r
 #include <common/utility/param.h>\r
 \r
 #include <core/mixer/write_frame.h>\r
index dcf6d102feb83b1409491f15f361f897d7c5eebb..551b8661d1345070886a4f1ac7949c3d3078478b 100644 (file)
@@ -38,7 +38,6 @@
 \r
 #include <common/exception/exceptions.h>\r
 #include <common/utility/assert.h>\r
-#include <common/memory/memcpy.h>\r
 \r
 #include <tbb/parallel_for.h>\r
 \r
@@ -268,18 +267,11 @@ safe_ptr<core::write_frame> make_write_frame(const void* tag, const safe_ptr<AVF
                        CASPAR_ASSERT(decoded);\r
                        CASPAR_ASSERT(write->image_data(n).begin());\r
 \r
-                       if(decoded_linesize != static_cast<int>(plane.width))\r
+                       // Copy line by line since ffmpeg sometimes pads each line.\r
+                       tbb::parallel_for<int>(0, desc.planes[n].height, [&](int y)\r
                        {\r
-                               // Copy line by line since ffmpeg sometimes pads each line.\r
-                               tbb::parallel_for<int>(0, desc.planes[n].height, [&](int y)\r
-                               {\r
-                                       fast_memcpy(result + y*plane.linesize, decoded + y*decoded_linesize, plane.linesize);\r
-                               });\r
-                       }\r
-                       else\r
-                       {\r
-                               fast_memcpy(result, decoded, plane.size);\r
-                       }\r
+                               memcpy(result + y*plane.linesize, decoded + y*decoded_linesize, plane.linesize);\r
+                       });\r
 \r
                        write->commit(n);\r
                }\r
index 656d37cec7a01e05bf41b88ef13392a3bdc1ae5f..c21004b8e24983b04e34414eb00e03865ac6d079 100644 (file)
@@ -38,8 +38,6 @@
 #include <common/env.h>\r
 #include <common/concurrency/com_context.h>\r
 #include <common/diagnostics/graph.h>\r
-#include <common/memory/memcpy.h>\r
-#include <common/memory/memclr.h>\r
 #include <common/utility/timer.h>\r
 \r
 #include <boost/filesystem.hpp>\r
@@ -245,7 +243,7 @@ public:
                ax_->Tick();\r
                if(ax_->InvalidRect())\r
                {                       \r
-                       fast_memclr(bmp_.data(), width_*height_*4);\r
+                       memset(bmp_.data(), 0, width_*height_*4);\r
                        ax_->DrawControl(bmp_);\r
                \r
                        core::pixel_format_desc desc;\r
@@ -253,7 +251,7 @@ public:
                        desc.planes.push_back(core::pixel_format_desc::plane(width_, height_, 4));\r
                        auto frame = frame_factory_->create_frame(this, desc);\r
 \r
-                       fast_memcpy(frame->image_data().begin(), bmp_.data(), width_*height_*4);\r
+                       memcpy(frame->image_data().begin(), bmp_.data(), width_*height_*4);\r
                        frame->commit();\r
                        head_ = frame;\r
                }               \r
index 4be57e39628bc14db528ba979eda308ea50db3e4..6b001ed06d7c8e26b16d9fe22947c629cafa189e 100644 (file)
@@ -32,7 +32,6 @@
 \r
 #include <common/env.h>\r
 #include <common/log/log.h>\r
-#include <common/memory/memclr.h>\r
 #include <common/exception/exceptions.h>\r
 \r
 #include <boost/assign.hpp>\r
@@ -97,7 +96,7 @@ struct image_scroll_producer : public core::frame_producer
                                }\r
                                else\r
                                {\r
-                                       fast_memclr(frame->image_data().begin(), frame->image_data().size());   \r
+                                       memset(frame->image_data().begin(), 0, frame->image_data().size());     \r
                                        std::copy_n(bytes, count, frame->image_data().begin() + format_desc_.size - count);\r
                                        count = 0;\r
                                }\r
@@ -132,7 +131,7 @@ struct image_scroll_producer : public core::frame_producer
                                }\r
                                else\r
                                {\r
-                                       fast_memclr(frame->image_data().begin(), frame->image_data().size());   \r
+                                       memset(frame->image_data().begin(), 0, frame->image_data().size());     \r
                                        int width2 = width_ % format_desc_.width;\r
                                        for(int y = 0; y < height_; ++y)\r
                                                std::copy_n(bytes + i * format_desc_.width*4 + y * width_*4, width2*4, frame->image_data().begin() + y * format_desc_.width*4);\r
index 92123b19c9eb06e1547bfc60b0856fb60586ea16..6c70f8d4074dbc7efa6fed8642928e96795ed435 100644 (file)
@@ -28,7 +28,6 @@
 #include <common/gl/gl_check.h>\r
 #include <common/log/log.h>\r
 #include <common/memory/safe_ptr.h>\r
-#include <common/memory/memcpy.h>\r
 #include <common/memory/memshfl.h>\r
 #include <common/utility/timer.h>\r
 #include <common/utility/string.h>\r
@@ -338,9 +337,9 @@ public:
                if(ptr)\r
                {\r
                        if(config_.key_only)\r
-                               fast_memshfl(reinterpret_cast<char*>(ptr), av_frame->data[0], frame->image_data().size(), 0x0F0F0F0F, 0x0B0B0B0B, 0x07070707, 0x03030303);\r
+                               aligned_memshfl(reinterpret_cast<char*>(ptr), av_frame->data[0], frame->image_data().size(), 0x0F0F0F0F, 0x0B0B0B0B, 0x07070707, 0x03030303);\r
                        else\r
-                               fast_memcpy(reinterpret_cast<char*>(ptr), av_frame->data[0], frame->image_data().size());\r
+                               memcpy(reinterpret_cast<char*>(ptr), av_frame->data[0], frame->image_data().size());\r
 \r
                        glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER); // release the mapped buffer\r
                }\r
index 3210b795c16569da112ca121136ae3e31f1f0355..e51cf898b28d01fd6a354ea1ec243f1dbf6c2868 100644 (file)
@@ -9,8 +9,9 @@
   <log-level>trace</log-level>\r
   <channels>\r
     <channel>\r
-      <video-mode>PAL</video-mode>\r
+      <video-mode>720p5000</video-mode>\r
       <consumers>\r
+        <screen></screen>\r
       </consumers>\r
     </channel>\r
   </channels>\r
index 532fb7ea1909e123e90281e0727ccbe110ad08c7..08ad466a2fcbe4ee29de8a1ab1dd3ddc31c878f8 100644 (file)
@@ -98,8 +98,8 @@
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)tmp\$(Configuration)\</IntDir>\r
     <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\dependencies64\boost\;..\dependencies64\ffmpeg\include\;..\dependencies64\glew\include;..\dependencies64\sfml\include\;..\dependencies64\tbb\include\;$(IncludePath)</IncludePath>\r
     <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\dependencies64\boost\;..\dependencies64\ffmpeg\include\;..\dependencies64\glew\include;..\dependencies64\sfml\include\;..\dependencies64\tbb\include\;$(IncludePath)</IncludePath>\r
-    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\dependencies64\boost\stage\lib;..\dependencies64\ffmpeg\lib\;..\dependencies64\glew\lib;..\dependencies64\sfml\lib\;..\dependencies64\tbb\lib\;..\dependencies64\freeimage\lib\;..\dependencies64\sfml\extlibs\lib\;$(LibraryPath)</LibraryPath>\r
-    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\dependencies64\boost\stage\lib;..\dependencies64\ffmpeg\lib\;..\dependencies64\glew\lib;..\dependencies64\sfml\lib\;..\dependencies64\tbb\lib\;..\dependencies64\freeimage\lib\;..\dependencies64\sfml\extlibs\lib\;$(LibraryPath)</LibraryPath>\r
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\dependencies64\boost\stage\lib;..\dependencies64\ffmpeg\lib\;..\dependencies64\glew\lib;..\dependencies64\sfml\lib\;..\dependencies64\tbb\lib\;..\dependencies64\freeimage\lib\;..\dependencies64\sfml\extlibs\lib\;..\dependencies64\asmlib\;$(LibraryPath)</LibraryPath>\r
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\dependencies64\boost\stage\lib;..\dependencies64\ffmpeg\lib\;..\dependencies64\glew\lib;..\dependencies64\sfml\lib\;..\dependencies64\tbb\lib\;..\dependencies64\freeimage\lib\;..\dependencies64\sfml\extlibs\lib\;..\dependencies64\asmlib\;$(LibraryPath)</LibraryPath>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)bin\$(Configuration)\</OutDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)bin\$(Configuration)\</OutDir>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionName)</TargetName>\r
       <ForcedIncludeFiles>common/compiler/vs/disable_silly_warnings.h</ForcedIncludeFiles>\r
     </ClCompile>\r
     <Link>\r
-      <AdditionalDependencies>sfml-system-d.lib;sfml-window-d.lib;sfml-graphics-d.lib;sfml-audio-d.lib;Winmm.lib;Ws2_32.lib;avformat.lib;avcodec.lib;avutil.lib;avfilter.lib;swscale.lib;tbb.lib;OpenGL32.lib;FreeImaged.lib;glew32.lib;freetype248_D.lib;openal32.lib</AdditionalDependencies>\r
+      <AdditionalDependencies>alibcof64o.lib;sfml-system-d.lib;sfml-window-d.lib;sfml-graphics-d.lib;sfml-audio-d.lib;Winmm.lib;Ws2_32.lib;avformat.lib;avcodec.lib;avutil.lib;avfilter.lib;swscale.lib;tbb.lib;OpenGL32.lib;FreeImaged.lib;glew32.lib;freetype248_D.lib;openal32.lib</AdditionalDependencies>\r
       <Version>\r
       </Version>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
@@ -191,7 +191,7 @@ copy "$(ProjectDir)casparcg.config" "$(OutDir)"</Command>
     </ClCompile>\r
     <Link>\r
       <OptimizeReferences>true</OptimizeReferences>\r
-      <AdditionalDependencies>sfml-system.lib;sfml-window.lib;sfml-graphics.lib;sfml-audio.lib;Winmm.lib;Ws2_32.lib;avformat.lib;avcodec.lib;avutil.lib;avfilter.lib;swscale.lib;tbb.lib;OpenGL32.lib;glew32.lib;freetype248.lib;openal32.lib;freeimage.lib</AdditionalDependencies>\r
+      <AdditionalDependencies>alibcof64o.lib;sfml-system.lib;sfml-window.lib;sfml-graphics.lib;sfml-audio.lib;Winmm.lib;Ws2_32.lib;avformat.lib;avcodec.lib;avutil.lib;avfilter.lib;swscale.lib;tbb.lib;OpenGL32.lib;glew32.lib;freetype248.lib;openal32.lib;freeimage.lib</AdditionalDependencies>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r