\r
#include <tbb/concurrent_queue.h>\r
\r
-namespace caspar {\r
+namespace caspar { namespace oal {\r
\r
struct oal_consumer : public core::frame_consumer, public sf::SoundStream\r
{\r
safe_ptr<diagnostics::graph> graph_;\r
boost::timer perf_timer_;\r
\r
- tbb::concurrent_bounded_queue<std::shared_ptr<std::vector<short>>> input_;\r
- boost::circular_buffer<std::vector<short>> container_;\r
+ tbb::concurrent_bounded_queue<std::shared_ptr<std::vector<int16_t, tbb::cache_aligned_allocator<int16_t>>>> input_;\r
+ boost::circular_buffer<std::vector<int16_t, tbb::cache_aligned_allocator<int16_t>>> container_;\r
tbb::atomic<bool> is_running_;\r
\r
core::video_format_desc format_desc_;\r
int preroll_count_;\r
public:\r
oal_consumer() \r
- : graph_(diagnostics::create_graph(narrow(print())))\r
- , container_(16)\r
+ : container_(16)\r
, preroll_count_(0)\r
{\r
if(core::consumer_buffer_depth() < 3)\r
\r
graph_->add_guide("tick-time", 0.5);\r
graph_->set_color("tick-time", diagnostics::color(0.0f, 0.6f, 0.9f)); \r
+ graph_->set_text(print());\r
+ diagnostics::register_graph(graph_);\r
+\r
is_running_ = true;\r
input_.set_capacity(core::consumer_buffer_depth()-2);\r
}\r
~oal_consumer()\r
{\r
is_running_ = false;\r
- input_.try_push(std::make_shared<std::vector<short>>());\r
- input_.try_push(std::make_shared<std::vector<short>>());\r
+ input_.try_push(std::make_shared<std::vector<int16_t, tbb::cache_aligned_allocator<int16_t>>>());\r
+ input_.try_push(std::make_shared<std::vector<int16_t, tbb::cache_aligned_allocator<int16_t>>>());\r
Stop();\r
CASPAR_LOG(info) << print() << L" Shutting down."; \r
}\r
{ \r
if(preroll_count_ < input_.capacity())\r
{\r
- while(input_.try_push(std::make_shared<std::vector<int16_t>>(format_desc_.audio_samples_per_frame, 0)))\r
+ while(input_.try_push(std::make_shared<std::vector<int16_t, tbb::cache_aligned_allocator<int16_t>>>(format_desc_.audio_samples_per_frame, 0)))\r
++preroll_count_;\r
Play(); \r
}\r
\r
- input_.push(std::make_shared<std::vector<int16_t>>(core::audio_32_to_16(frame->audio_data())));\r
+ input_.push(std::make_shared<std::vector<int16_t, tbb::cache_aligned_allocator<int16_t>>>(core::audio_32_to_16_sse(frame->audio_data())));\r
\r
return true;\r
}\r
\r
virtual bool OnGetData(sf::SoundStream::Chunk& data)\r
{ \r
- std::shared_ptr<std::vector<short>> audio_data; \r
+ std::shared_ptr<std::vector<int16_t, tbb::cache_aligned_allocator<int16_t>>> audio_data; \r
input_.pop(audio_data);\r
\r
container_.push_back(std::move(*audio_data));\r
}\r
};\r
\r
-safe_ptr<core::frame_consumer> create_oal_consumer(const std::vector<std::wstring>& params)\r
+safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params)\r
{\r
if(params.size() < 1 || params[0] != L"AUDIO")\r
return core::frame_consumer::empty();\r
return make_safe<oal_consumer>();\r
}\r
\r
-safe_ptr<core::frame_consumer> create_oal_consumer()\r
+safe_ptr<core::frame_consumer> create_consumer()\r
{\r
return make_safe<oal_consumer>();\r
}\r
\r
-}\r
+}}\r