X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fdecklink%2Fconsumer%2Fdecklink_consumer.cpp;h=f723bcd154e431e2b76310a2aa7bfc94bbe8ae0d;hb=d07d65aa2999fac4c8aa3f9e8ec8819179a97c84;hp=94109e912a6a6070295e2b911bf3066000e75c3c;hpb=d0c0b48630570ccd60d5c2454561864a654e04df;p=casparcg diff --git a/modules/decklink/consumer/decklink_consumer.cpp b/modules/decklink/consumer/decklink_consumer.cpp index 94109e912..f723bcd15 100644 --- a/modules/decklink/consumer/decklink_consumer.cpp +++ b/modules/decklink/consumer/decklink_consumer.cpp @@ -162,7 +162,7 @@ struct decklink_consumer : public IDeckLinkVideoOutputCallback, public IDeckLink size_t preroll_count_; - boost::circular_buffer> audio_container_; + boost::circular_buffer>> audio_container_; tbb::concurrent_bounded_queue> video_frame_buffer_; tbb::concurrent_bounded_queue> audio_frame_buffer_; @@ -420,34 +420,10 @@ public: { const int sample_frame_count = view.num_samples(); - if (core::needs_rearranging( - view, config_.audio_layout, config_.num_out_channels())) - { - std::vector resulting_audio_data; - resulting_audio_data.resize( - sample_frame_count * config_.num_out_channels()); - - auto dest_view = core::make_multichannel_view( - resulting_audio_data.begin(), - resulting_audio_data.end(), - config_.audio_layout, - config_.num_out_channels()); - - core::rearrange_or_rearrange_and_mix( - view, dest_view, core::default_mix_config_repository()); - - if (config_.audio_layout.num_channels == 1) // mono - boost::copy( // duplicate L to R - dest_view.channel(0), - dest_view.channel(1).begin()); - - audio_container_.push_back(std::move(resulting_audio_data)); - } - else - { - audio_container_.push_back( - std::vector(view.raw_begin(), view.raw_end())); - } + audio_container_.push_back(core::get_rearranged_and_mixed( + view, + config_.audio_layout, + config_.num_out_channels())); if(FAILED(output_->ScheduleAudioSamples( audio_container_.back().data(), @@ -558,7 +534,10 @@ public: // frame_consumer - virtual void initialize(const core::video_format_desc& format_desc, int channel_index) override + virtual void initialize( + const core::video_format_desc& format_desc, + const core::channel_layout& audio_channel_layout, + int channel_index) override { context_.reset([&]{return new decklink_consumer(config_, format_desc, channel_index);}); audio_cadence_ = format_desc.audio_cadence;