]> git.sesse.net Git - casparcg/commitdiff
concrt-exp: Fixed incorrect audio-mixing.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 25 Oct 2011 21:06:14 +0000 (21:06 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 25 Oct 2011 21:06:14 +0000 (21:06 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0 concrt-experimental@1472 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/mixer/audio/audio_mixer.cpp

index b0e0f5b5bb80c454e62d42321a9f24b1a91564ca..1eff111a9bd197dfc786a6367ba043b167a68e12 100644 (file)
@@ -116,25 +116,19 @@ public:
                                                \r
                        const float prev_volume = static_cast<float>(prev.volume);\r
                        const float next_volume = static_cast<float>(next.volume);\r
-                       const float delta               = 1.0f/static_cast<float>(format_desc_.audio_samples_per_frame/format_desc_.audio_channels);\r
-                                               \r
-                       auto alpha_ps   = _mm_setr_ps(0.0f, 0.0f, delta, delta);\r
-                       auto delta2_ps  = _mm_set_ps1(delta*2.0f);\r
-                       auto prev_ps    = _mm_set_ps1(prev_volume);\r
-                       auto next_ps    = _mm_set_ps1(next_volume);     \r
+                                                                       \r
+                       auto alpha              = (next_volume-prev_volume)/static_cast<float>(format_desc_.audio_samples_per_frame/format_desc_.audio_channels);\r
+                       auto alpha_ps   = _mm_set_ps1(alpha*2.0f);\r
+                       auto volume_ps  = _mm_setr_ps(prev_volume, prev_volume, prev_volume+alpha, prev_volume+alpha);\r
 \r
                        for(size_t n = 0; n < format_desc_.audio_samples_per_frame/4; ++n)\r
                        {               \r
-                               auto next2_ps           = _mm_mul_ps(next_ps, alpha_ps);\r
-                               auto prev2_ps           = _mm_sub_ps(prev_ps, _mm_mul_ps(prev_ps, alpha_ps));\r
-                               auto volume_ps          = _mm_add_ps(next2_ps, prev2_ps);\r
-\r
                                auto sample_ps          = _mm_cvtepi32_ps(_mm_load_si128(reinterpret_cast<__m128i*>(&item.audio_data[n*4])));\r
                                auto res_sample_ps      = _mm_load_ps(&intermediate[n*4]);                                                                                      \r
                                sample_ps                       = _mm_mul_ps(sample_ps, volume_ps);     \r
                                res_sample_ps           = _mm_add_ps(sample_ps, res_sample_ps); \r
 \r
-                               alpha_ps                        = _mm_add_ps(alpha_ps, delta2_ps);\r
+                               volume_ps                       = _mm_add_ps(volume_ps, alpha_ps);\r
 \r
                                _mm_store_ps(&intermediate[n*4], res_sample_ps);\r
                        }\r