From 2f7c45b322562aac6436ed2a7fccbe0246190e62 Mon Sep 17 00:00:00 2001 From: ronag Date: Fri, 2 Sep 2011 13:50:47 +0000 Subject: [PATCH] git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1322 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d --- core/core.vcxproj | 1 + core/core.vcxproj.filters | 3 +++ core/mixer/audio/audio_util.h | 22 +++++++++++++++++++ .../bluefish/consumer/bluefish_consumer.cpp | 12 +++++----- modules/oal/consumer/oal_consumer.cpp | 7 ++---- 5 files changed, 33 insertions(+), 12 deletions(-) create mode 100644 core/mixer/audio/audio_util.h diff --git a/core/core.vcxproj b/core/core.vcxproj index 7d45ded8e..9bd7a8e1c 100644 --- a/core/core.vcxproj +++ b/core/core.vcxproj @@ -247,6 +247,7 @@ + diff --git a/core/core.vcxproj.filters b/core/core.vcxproj.filters index 5103014d7..83f07372c 100644 --- a/core/core.vcxproj.filters +++ b/core/core.vcxproj.filters @@ -127,6 +127,9 @@ source\producer\frame + + source\mixer\audio + diff --git a/core/mixer/audio/audio_util.h b/core/mixer/audio/audio_util.h new file mode 100644 index 000000000..ff756cb7c --- /dev/null +++ b/core/mixer/audio/audio_util.h @@ -0,0 +1,22 @@ +#pragma once + +#include + +#include + +#include + +namespace caspar { namespace core { + +static std::vector audio_32_to_16(const boost::iterator_range& input) +{ + std::vector audio16(input.size()); + auto audio32_ptr = reinterpret_cast(input.begin()); + auto audio16_ptr = reinterpret_cast(audio16.data()); + auto size = input.size(); + for(int n = 0; n < size; ++n) + audio16_ptr[n] = (audio32_ptr[n*2+1] & 0xffff0000) | ((audio32_ptr[n*2+0] >> 16) & 0x0000ffff); + return audio16; +} + +}} \ No newline at end of file diff --git a/modules/bluefish/consumer/bluefish_consumer.cpp b/modules/bluefish/consumer/bluefish_consumer.cpp index 04636b216..4f5c9baf7 100644 --- a/modules/bluefish/consumer/bluefish_consumer.cpp +++ b/modules/bluefish/consumer/bluefish_consumer.cpp @@ -34,6 +34,7 @@ #include #include +#include #include @@ -207,7 +208,7 @@ public: void schedule_next_video(const safe_ptr& frame) { - static std::vector silence(MAX_HANC_BUFFER_SIZE, 0); + static std::vector silence(MAX_HANC_BUFFER_SIZE, 0); executor_.begin_invoke([=] { @@ -241,13 +242,10 @@ public: if(embedded_audio_) { - auto frame_audio_data = frame->audio_data().empty() ? silence.data() : const_cast(frame->audio_data().begin()); - - std::vector frame_audio_data16(audio_samples); - for(size_t n = 0; n < frame_audio_data16.size(); ++n) - frame_audio_data16[n] = (frame_audio_data[n] >> 16) & 0xffff; + auto frame_audio = core::audio_32_to_16(frame->audio_data()); + auto frame_audio_data = frame_audio.size() != audio_samples ? silence.data() : frame_audio.data(); - encode_hanc(reinterpret_cast(reserved_frames_.front()->hanc_data()), frame_audio_data16.data(), audio_samples, audio_nchannels); + encode_hanc(reinterpret_cast(reserved_frames_.front()->hanc_data()), frame_audio_data, audio_samples, audio_nchannels); blue_->system_buffer_write_async(const_cast(reserved_frames_.front()->image_data()), reserved_frames_.front()->image_size(), diff --git a/modules/oal/consumer/oal_consumer.cpp b/modules/oal/consumer/oal_consumer.cpp index cb727f629..6fb766cfe 100644 --- a/modules/oal/consumer/oal_consumer.cpp +++ b/modules/oal/consumer/oal_consumer.cpp @@ -27,6 +27,7 @@ #include #include +#include #include #include @@ -91,11 +92,7 @@ public: Play(); } - std::vector audio16(frame->audio_data().size()); - for(size_t n = 0; n < audio16.size(); ++n) - audio16[n] = (frame->audio_data()[n] >> 16) & 0xffff; - - input_.push(std::make_shared>(std::move(audio16))); + input_.push(std::make_shared>(core::audio_32_to_16(frame->audio_data()))); return true; } -- 2.39.2