]> git.sesse.net Git - casparcg/blobdiff - modules/oal/consumer/oal_consumer.cpp
2.0. audio: Audio pipeline is now in 32 bit.
[casparcg] / modules / oal / consumer / oal_consumer.cpp
index 867d06714d1360c96858719fe3013721831ff6dd..cb727f62905b54c5189abdbcd2066b8543fd2926 100644 (file)
@@ -45,7 +45,7 @@ struct oal_consumer : public core::frame_consumer,  public sf::SoundStream
        safe_ptr<diagnostics::graph>                                            graph_;\r
        boost::timer                                                                            perf_timer_;\r
 \r
-       tbb::concurrent_bounded_queue<std::vector<short>>       input_;\r
+       tbb::concurrent_bounded_queue<std::shared_ptr<std::vector<short>>>      input_;\r
        boost::circular_buffer<std::vector<short>>                      container_;\r
        tbb::atomic<bool>                                                                       is_running_;\r
 \r
@@ -69,8 +69,8 @@ public:
        ~oal_consumer()\r
        {\r
                is_running_ = false;\r
-               input_.try_push(std::vector<short>());\r
-               input_.try_push(std::vector<short>());\r
+               input_.try_push(std::make_shared<std::vector<short>>());\r
+               input_.try_push(std::make_shared<std::vector<short>>());\r
                Stop();\r
                CASPAR_LOG(info) << print() << L" Shutting down.";      \r
        }\r
@@ -86,22 +86,26 @@ public:
        {                       \r
                if(preroll_count_ < input_.capacity())\r
                {\r
-                       while(input_.try_push(std::vector<int16_t>(format_desc_.audio_samples_per_frame, 0)))\r
+                       while(input_.try_push(std::make_shared<std::vector<int16_t>>(format_desc_.audio_samples_per_frame, 0)))\r
                                ++preroll_count_;\r
                        Play();         \r
                }\r
 \r
-               input_.push(std::vector<int16_t>(frame->audio_data().begin(), frame->audio_data().end()));      \r
+               std::vector<int16_t> audio16(frame->audio_data().size());\r
+               for(size_t n = 0; n < audio16.size(); ++n)              \r
+                       audio16[n] = (frame->audio_data()[n] >> 16) & 0xffff;           \r
+\r
+               input_.push(std::make_shared<std::vector<int16_t>>(std::move(audio16)));\r
 \r
                return true;\r
        }\r
        \r
        virtual bool OnGetData(sf::SoundStream::Chunk& data)\r
        {               \r
-               std::vector<short> audio_data;          \r
+               std::shared_ptr<std::vector<short>> audio_data;         \r
                input_.pop(audio_data);\r
                                \r
-               container_.push_back(std::move(audio_data));\r
+               container_.push_back(std::move(*audio_data));\r
                data.Samples = container_.back().data();\r
                data.NbSamples = container_.back().size();      \r
                \r