]> git.sesse.net Git - casparcg/commitdiff
2.0.2: audio_util: Don't do premature-optimization, keep it simple.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 29 Nov 2011 21:46:36 +0000 (21:46 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 29 Nov 2011 21:46:36 +0000 (21:46 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.2@1721 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/mixer/audio/audio_util.h
modules/bluefish/consumer/bluefish_consumer.cpp
modules/oal/consumer/oal_consumer.cpp
shell/casparcg.config

index adb839a413d8eeb63ca355fe10b7aebcb0952187..689db004302821f008fd95d9349990e227e2536d 100644 (file)
@@ -1,5 +1,6 @@
 #pragma once\r
 \r
+#include <algorithm>\r
 #include <vector>\r
 \r
 #include <stdint.h>\r
@@ -7,32 +8,7 @@
 #include <tbb/cache_aligned_allocator.h>\r
 \r
 namespace caspar { namespace core {\r
-\r
-// NOTE: Input data pointer should be larger than input.size() to allow sse to read beyond\r
-template<typename T>\r
-static std::vector<int16_t, tbb::cache_aligned_allocator<int16_t>> audio_32_to_16_sse(const T& audio_data)\r
-{      \r
-       auto size                = std::distance(std::begin(audio_data), std::end(audio_data));\r
-       auto input32     = &(*std::begin(audio_data));\r
-       auto output16    = std::vector<int16_t, tbb::cache_aligned_allocator<int16_t>>(size);\r
-\r
-       auto input128    = reinterpret_cast<const __m128i*>(input32);\r
-       auto output128   = reinterpret_cast<__m128i*>(output16.data());\r
-\r
-       for(int n = 0; n < size/8; ++n)         \r
-       {\r
-               auto xmm0 = _mm_srai_epi32(_mm_load_si128(input128++), 16);\r
-               auto xmm1 = _mm_srai_epi32(_mm_load_si128(input128++), 16);\r
-               auto xmm3 = _mm_packs_epi32(xmm0, xmm1);\r
-               _mm_store_si128(output128++, xmm3);\r
-       }\r
-\r
-       for(int n = size/8; n < size; ++n)\r
-               output16[n] = input32[n] >> 16;\r
-\r
-       return output16;\r
-}\r
-\r
+       \r
 template<typename T>\r
 static std::vector<int8_t, tbb::cache_aligned_allocator<int8_t>> audio_32_to_24(const T& audio_data)\r
 {      \r
@@ -52,20 +28,17 @@ static std::vector<int8_t, tbb::cache_aligned_allocator<int8_t>> audio_32_to_24(
 }\r
 \r
 template<typename T>\r
-static std::vector<int8_t, tbb::cache_aligned_allocator<int8_t>> audio_32_to_16(const T& audio_data)\r
+static std::vector<int16_t, tbb::cache_aligned_allocator<int16_t>> audio_32_to_16(const T& audio_data)\r
 {      \r
        auto size                = std::distance(std::begin(audio_data), std::end(audio_data));\r
-       auto input8              = reinterpret_cast<const int8_t*>(&(*std::begin(audio_data)));\r
-       auto output8     = std::vector<int8_t, tbb::cache_aligned_allocator<int8_t>>();\r
+       auto input32     = &(*std::begin(audio_data));\r
+       auto output16    = std::vector<int16_t, tbb::cache_aligned_allocator<int16_t>>();\r
                        \r
-       output8.reserve(size*2);\r
+       output16.reserve(size);\r
        for(int n = 0; n < size; ++n)\r
-       {\r
-               output8.push_back(input8[n*4+2]);\r
-               output8.push_back(input8[n*4+3]);\r
-       }\r
+               output16.push_back((input32[n] >> 16) & 0xFFFF);\r
 \r
-       return output8;\r
+       return output16;\r
 }\r
 \r
 }}
\ No newline at end of file
index 9c0987397d049453923354ad3a0259f47c030af7..bf28876238bf33ebb9180dc7cb3a0a5ed3560d1f 100644 (file)
@@ -233,7 +233,7 @@ public:
 \r
                if(embedded_audio_)\r
                {               \r
-                       auto frame_audio = core::audio_32_to_16_sse(frame->audio_data());                       \r
+                       auto frame_audio = core::audio_32_to_16(frame->audio_data());                   \r
                        encode_hanc(reinterpret_cast<BLUE_UINT32*>(reserved_frames_.front()->hanc_data()), frame_audio.data(), frame->audio_data().size()/format_desc_.audio_channels, format_desc_.audio_channels);\r
                                                                \r
                        blue_->system_buffer_write_async(const_cast<uint8_t*>(reserved_frames_.front()->image_data()), \r
index 86e954cfdcc1b6f444c3cc4e138f8d593b030517..55ac212e7ed0798db55a1ea8c23c1d8925947753 100644 (file)
@@ -100,7 +100,7 @@ public:
        \r
        virtual bool send(const safe_ptr<core::read_frame>& frame) override\r
        {                       \r
-               input_.push(std::make_shared<audio_buffer_16>(core::audio_32_to_16_sse(frame->audio_data())));\r
+               input_.push(std::make_shared<audio_buffer_16>(core::audio_32_to_16(frame->audio_data())));\r
                return true;\r
        }\r
        \r
index 302c420275552e8851e857e395de45aa2d03c09c..40e055c3743574c760528a25734f0363e52627c2 100644 (file)
     <channel>\r
       <video-mode>NTSC</video-mode>\r
       <consumers>\r
-        <screen></screen>\r
+        <system-audio></system-audio>\r
         <bluefish>\r
           <embedded-audio>true</embedded-audio>\r
         </bluefish>\r
+        <screen></screen>\r
       </consumers>\r
     </channel>\r
   </channels>\r