X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Foal%2Fconsumer%2Foal_consumer.cpp;h=7186dc74c3db129e6432a822b059b2e922d033e4;hb=53977d8992163fff46099451ac687794db6b7c36;hp=cf2ab9be7aa126071070a9b8d83a5e59ce78e65f;hpb=faf6a79a33a23622645d3e0b6a115f759ec2de8c;p=casparcg diff --git a/modules/oal/consumer/oal_consumer.cpp b/modules/oal/consumer/oal_consumer.cpp index cf2ab9be7..7186dc74c 100644 --- a/modules/oal/consumer/oal_consumer.cpp +++ b/modules/oal/consumer/oal_consumer.cpp @@ -20,12 +20,14 @@ #include "oal_consumer.h" +#include #include #include #include #include #include +#include #include #include @@ -44,7 +46,7 @@ struct oal_consumer : public core::frame_consumer, public sf::SoundStream safe_ptr graph_; boost::timer perf_timer_; - tbb::concurrent_bounded_queue> input_; + tbb::concurrent_bounded_queue>> input_; boost::circular_buffer> container_; tbb::atomic is_running_; @@ -56,8 +58,11 @@ public: , container_(16) , preroll_count_(0) { + if(core::consumer_buffer_depth() < 3) + BOOST_THROW_EXCEPTION(invalid_argument() << msg_info("audio-consumer does not support buffer-depth lower than 3.")); + graph_->add_guide("tick-time", 0.5); - graph_->set_color("tick-time", diagnostics::color(0.1f, 0.7f, 0.8f)); + graph_->set_color("tick-time", diagnostics::color(0.0f, 0.6f, 0.9f)); is_running_ = true; input_.set_capacity(core::consumer_buffer_depth()-2); } @@ -65,8 +70,8 @@ public: ~oal_consumer() { is_running_ = false; - input_.try_push(std::vector()); - input_.try_push(std::vector()); + input_.try_push(std::make_shared>()); + input_.try_push(std::make_shared>()); Stop(); CASPAR_LOG(info) << print() << L" Shutting down."; } @@ -75,7 +80,6 @@ public: { format_desc_ = format_desc; sf::SoundStream::Initialize(2, 48000); - Play(); CASPAR_LOG(info) << print() << " Sucessfully initialized."; } @@ -83,21 +87,22 @@ public: { if(preroll_count_ < input_.capacity()) { - while(input_.try_push(std::vector(format_desc_.audio_samples_per_frame, 0))) + while(input_.try_push(std::make_shared>(format_desc_.audio_samples_per_frame, 0))) ++preroll_count_; + Play(); } - input_.push(std::vector(frame->audio_data().begin(), frame->audio_data().end())); + input_.push(std::make_shared>(core::audio_32_to_16(frame->audio_data()))); return true; } virtual bool OnGetData(sf::SoundStream::Chunk& data) { - std::vector audio_data; + std::shared_ptr> audio_data; input_.pop(audio_data); - container_.push_back(std::move(audio_data)); + container_.push_back(std::move(*audio_data)); data.Samples = container_.back().data(); data.NbSamples = container_.back().size(); @@ -120,7 +125,7 @@ public: safe_ptr create_oal_consumer(const std::vector& params) { - if(params.size() < 1 || params[0] != L"OAL") + if(params.size() < 1 || params[0] != L"AUDIO") return core::frame_consumer::empty(); return make_safe();