]> git.sesse.net Git - casparcg/blobdiff - modules/decklink/consumer/decklink_consumer.cpp
- Refactored so that consumers get the input channel_layout at initialization, instea...
[casparcg] / modules / decklink / consumer / decklink_consumer.cpp
index 94109e912a6a6070295e2b911bf3066000e75c3c..f723bcd154e431e2b76310a2aa7bfc94bbe8ae0d 100644 (file)
@@ -162,7 +162,7 @@ struct decklink_consumer : public IDeckLinkVideoOutputCallback, public IDeckLink
 \r
        size_t                                                          preroll_count_;\r
                \r
-       boost::circular_buffer<std::vector<int32_t>>    audio_container_;\r
+       boost::circular_buffer<std::vector<int32_t, tbb::cache_aligned_allocator<int32_t>>>     audio_container_;\r
 \r
        tbb::concurrent_bounded_queue<std::shared_ptr<core::read_frame>> video_frame_buffer_;\r
        tbb::concurrent_bounded_queue<std::shared_ptr<core::read_frame>> audio_frame_buffer_;\r
@@ -420,34 +420,10 @@ public:
        {\r
                const int sample_frame_count = view.num_samples();\r
 \r
-               if (core::needs_rearranging(\r
-                               view, config_.audio_layout, config_.num_out_channels()))\r
-               {\r
-                       std::vector<int32_t> resulting_audio_data;\r
-                       resulting_audio_data.resize(\r
-                                       sample_frame_count * config_.num_out_channels());\r
-\r
-                       auto dest_view = core::make_multichannel_view<int32_t>(\r
-                                       resulting_audio_data.begin(), \r
-                                       resulting_audio_data.end(),\r
-                                       config_.audio_layout,\r
-                                       config_.num_out_channels());\r
-\r
-                       core::rearrange_or_rearrange_and_mix(\r
-                                       view, dest_view, core::default_mix_config_repository());\r
-\r
-                       if (config_.audio_layout.num_channels == 1) // mono\r
-                               boost::copy(                            // duplicate L to R\r
-                                               dest_view.channel(0),\r
-                                               dest_view.channel(1).begin());\r
-\r
-                       audio_container_.push_back(std::move(resulting_audio_data));\r
-               }\r
-               else\r
-               {\r
-                       audio_container_.push_back(\r
-                                       std::vector<int32_t>(view.raw_begin(), view.raw_end()));\r
-               }\r
+               audio_container_.push_back(core::get_rearranged_and_mixed(\r
+                               view,\r
+                               config_.audio_layout,\r
+                               config_.num_out_channels()));\r
 \r
                if(FAILED(output_->ScheduleAudioSamples(\r
                                audio_container_.back().data(),\r
@@ -558,7 +534,10 @@ public:
 \r
        // frame_consumer\r
        \r
-       virtual void initialize(const core::video_format_desc& format_desc, int channel_index) override\r
+       virtual void initialize(\r
+                       const core::video_format_desc& format_desc,\r
+                       const core::channel_layout& audio_channel_layout,\r
+                       int channel_index) override\r
        {\r
                context_.reset([&]{return new decklink_consumer(config_, format_desc, channel_index);});                \r
                audio_cadence_ = format_desc.audio_cadence;             \r